[
  {
    "path": ".eslintignore",
    "content": "node_modules/\ndist/\nflow-typed/\ndev/\n; FIXME: Temporary, should be deleted after #1477 is merged\n**/*.ts\n"
  },
  {
    "path": ".eslintrc.js",
    "content": "const config = {\n  env: {\n    es6: true,\n    // configure globals\n    jest: true,\n    browser: true,\n    commonjs: true,\n    node: true,\n  },\n  plugins: ['import', '@typescript-eslint'],\n  extends: [\n    'eslint:recommended',\n    'plugin:react/recommended',\n    'plugin:react-hooks/recommended',\n    'plugin:flowtype/recommended',\n    'prettier',\n    'plugin:jest/recommended',\n  ],\n  parser: '@babel/eslint-parser',\n  ignorePatterns: 'examples/typescript/**/*.ts',\n  settings: {\n    flowtype: {\n      onlyFilesWithFlowAnnotation: true,\n    },\n  },\n  rules: {\n    'no-console': ['error'],\n    'no-unused-vars': [\n      'error',\n      {\n        argsIgnorePattern: '^_',\n      },\n    ],\n    'import/no-cycle': 'error',\n    'jest/no-large-snapshots': 'warn',\n    'jest/no-disabled-tests': 'off',\n    'jest/expect-expect': 'off',\n  },\n  overrides: [\n    {\n      files: ['src/**/*.js'],\n      excludedFiles: ['*integrationTest.js', '*test.js', '**/__tests__/**', '*test.*.js'],\n      rules: {\n        'flowtype/require-valid-file-annotation': ['error', 'always'],\n      },\n    },\n    {\n      files: ['src/**/*.ts', 'examples/typescript/*.ts'],\n      parser: '@typescript-eslint/parser',\n      rules: {\n        'flowtype/no-types-missing-file-annotation': 'off',\n      },\n    },\n  ],\n}\n\nmodule.exports = config\n"
  },
  {
    "path": ".flowconfig",
    "content": "[ignore]\n<PROJECT_ROOT>/.cache\n<PROJECT_ROOT>/dist\n<PROJECT_ROOT>/dev\n<PROJECT_ROOT>/examples\n<PROJECT_ROOT>/react-native-copy\n<PROJECT_ROOT>/src/**/*.ts\n.*/node_modules/react\\-native/.*\n.*/node_modules/@react\\-native/.*\n.*/node_modules/fbjs/**\n.*/node_modules/resolve/test/resolver/**\n.*/node_modules/metro\\-config/.*\n.*/node_modules/metro\\-config/.*\n.*/node_modules/hermes\\-estree/.*\n.*/node_modules/metro/.*\n\n[libs]\nflow-typed/\n\n[options]\nserver.max_workers=8\nemoji=true\nmodule.ignore_non_literal_requires=true\nmodule.file_ext=.js\nexact_by_default=false\n\n# fixes Flow on ARM\nsharedmemory.heap_size=4000000000\n\n[version]\n>=0.140.0\n"
  },
  {
    "path": ".gitattributes",
    "content": "native/iosTests/Pods/* linguist-generated=true\n*.pbxproj -text\n"
  },
  {
    "path": ".github/stale.yml",
    "content": "daysUntilStale: 270\ndaysUntilClose: 60\n"
  },
  {
    "path": ".github/workflows/ci.yml",
    "content": "name: CI\n\non:\n  pull_request:\n  push:\n    branches: master\n\njobs:\n  ci-check:\n    runs-on: ubuntu-22.04\n    name: JavaScript tests\n    strategy:\n      matrix:\n        node-version: ['18.x', '20.x', '22.x', '23.x']\n    steps:\n      - uses: actions/checkout@v3\n      - name: Set Node.js version\n        uses: actions/setup-node@v3\n        with:\n          node-version: ${{ matrix.node-version }}\n      - uses: actions/cache@v3\n        with:\n          path: 'node_modules'\n          key: ${{ runner.os }}-node-${{ matrix.node-version }}-modules-${{ hashFiles('**/yarn.lock') }}\n      - run: yarn\n      - run: yarn ci:check\n      - name: Gradle Wrapper Validation\n        uses: gradle/wrapper-validation-action@v1.0.6\n      - name: Check docs build\n        run: cd docs-website && yarn install && cd .. && yarn docs:build\n  ios:\n    runs-on: macos-15\n    name: iOS tests\n    steps:\n      - uses: actions/checkout@v3\n      - name: Set Node.js version\n        uses: actions/setup-node@v3\n        with:\n          node-version: 22.x\n      - name: Set Xcode version\n        uses: maxim-lobanov/setup-xcode@v1.2.1\n        with:\n          xcode-version: 16.2\n      - name: ccache\n        uses: hendrikmuhs/ccache-action@v1\n      - name: cache node_modules\n        uses: actions/cache@v3\n        with:\n          path: 'node_modules'\n          key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}\n      - run: yarn\n      - name: cache Pods\n        uses: actions/cache@v3\n        id: pods-cache\n        with:\n          path: native/iosTest/Pods\n          key: ${{ runner.os }}-pods-cache-${{ hashFiles('**/Podfile.lock') }}\n      - run: bundle install\n      - name: 'pod install'\n        if: true # steps.pods-cache.outputs.cache-hit != 'true'\n        run: yarn cocoapods\n      - run: yarn test:ios\n  android:\n    runs-on: ubuntu-24.04\n    name: Android tests\n    steps:\n      - uses: actions/checkout@v4\n      - name: Enable KVM\n        run: |\n          echo 'KERNEL==\"kvm\", GROUP=\"kvm\", MODE=\"0666\", OPTIONS+=\"static_node=kvm\"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules\n          sudo udevadm control --reload-rules\n          sudo udevadm trigger --name-match=kvm\n      - uses: actions/setup-java@v4\n        with:\n          distribution: 'adopt'\n          java-version: '17'\n      - name: Set Node.js version\n        uses: actions/setup-node@v4\n        with:\n          node-version: 22.x\n      - uses: actions/cache@v4\n        with:\n          path: 'node_modules'\n          key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}\n      - run: yarn\n      - run: yarn dev:native &\n      - uses: gradle/actions/setup-gradle@v3\n      # See: https://github.com/android/compose-samples/actions/runs/27015993/workflow for ideas for caching\n      - name: run tests\n        uses: reactivecircus/android-emulator-runner@v2.33.0\n        with:\n          api-level: 29\n          working-directory: ./native/androidTest\n          script: ./gradlew connectedAndroidTest\n      - run: yarn ktlint\n  windows:\n    # FIXME: Windows port is unmaintained. If you're interested in sponsoring continued maintenance,\n    # please email me!\n    if: false\n    runs-on: windows-2022\n    name: Windows tests\n    steps:\n      - uses: actions/checkout@v3\n      - name: Set Node.js version\n        uses: actions/setup-node@v3\n        with:\n          node-version: 22.x\n      - uses: actions/cache@v3\n        with:\n          path: 'node_modules'\n          key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}\n      - run: yarn --network-timeout 100000\n      # FIXME: concurrently seems broken on windows\n      # - run: yarn ci\n      - run: yarn test\n      - run: yarn eslint\n      - run: yarn flow\n      # FIXME: TS broken on Windows?\n      # - run: yarn test:typescript\n      # Build WatermelonTester and run in background\n      - run: yarn test:windows\n      # Give it some time to bundle\n      - run: sleep 90\n      # Start E2E runner to capture integration test results\n      - run: cd native/windowsE2E && yarn\n      - run: yarn test:windows:ci\n"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\n\n.cache/\nnode_modules/\n.tmp/\n\nnpm-debug.log\nyarn-error.log\n\ndist/\ndev/\n\n*.tgz\ncoverage/\n\n.vscode\n.idea\n\ndocs-build/\n\n**/.metro-health-check*\n\n# windows\nmsbuild.binlog\n\n# Yarn\n.yarn/*\n!.yarn/patches\n!.yarn/plugins\n!.yarn/releases\n!.yarn/sdks\n!.yarn/versions\n"
  },
  {
    "path": ".imgbotconfig",
    "content": "{\n    \"ignoredFiles\": [\n      \"docs/*\"\n    ]\n}\n"
  },
  {
    "path": "CHANGELOG-Unreleased.md",
    "content": "### Highlights\n\n### BREAKING CHANGES\n\n### Deprecations\n\n### New features\n\n### Fixes\n\n- [LokiJS] Multitab sync issue fix\n- [Android] Added linker flag for building with 16kB page alignment\n- [TS] make catchError visible to typescript\n\n### Performance\n\n### Changes\n\n- Updated better-sqlite3 to 11.9.1\n\n### Internal\n\n- Updated internal dependencies\n- Updated documentation scripts\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nContributors: Please add your changes to CHANGELOG-Unreleased.md\n\n## 0.28 - 2025-04-07\n\n### BREAKING CHANGES\n\n- [iOS] Podspec deployment target was bumped from iOS 11 to iOS 12\n- [Android] Installation of Android JSI adapter has changed. To migrate, remove `getJSIModulePackage()` override in your `MainApplication.{java,kt}`, and add `new WatermelonDBJSIPackage()` to `getPackages()` override instead. See Installation docs for details.\n\n### New features\n\n- Added `Database#experimentalIsVerbose` option\n- Support for React Native 0.74+\n\n### Fixes\n\n- [ts] Improved LocalStorage type definition\n- [ts] Add missing .d.ts for experimentalFailsafe decorator\n- [migrations] `unsafeExecuteSql` migration is now validate to ensure it ends with a semicolon (#1811)\n\n### Changes\n\n- Minimum supported Node.js version is now 18.x\n- Improved Model diagnostic errors now always contain `table#id` of offending record\n- Update `better-sqlite3` to 11.x\n- Update sqlite (used by Android in JSI mode) to 3.46.0\n- [docs] Improved Android installation docs\n- [docs] Removed examples from the codebase as they were unmaintained\n\n### Internal\n\n- Update internal dependencies\n\n## 0.27.1 - 2023-10-15\n\nFix missing Changelog for 0.27 release\n\n## 0.27 - 2023-08-29\n\n### Highlights\n\n**Removed legacy Swift and Kotlin React Native Modules**\n\nFollowing the addition of new Native Modules in 0.26, we're removing the old implementations. We expect this to simplify installation process and remove a ton of compatibility and configuration issues due to Kotlin version mismatchs and the CocoaPods-Swift issues when using `use_frameworks!` or Expo.\n\n**Experimental React Native Windows support**\n\nWatermelonDB now has _experimental_ support for React Native Windows. See Installation docs for details.\n\n**Introducing Watermelon React**\n\nAll React/React Native helpers for Watermelon are now available from a new `@nozbe/watermelodb/react` folder:\n\n- `DatabaseProvider`, `useDatabase`, `withDatabase`\n- NEW: `withObservables` - `@nozbe/with-observables` as a separate package is deprecated, and is now bundled with WatermelonDB\n- NEW: HOC helpers: `compose`, `withHooks`\n- NEW: `<WithObservables />` component, a component version of `withObservables` HOC. Useful when a value being observed is localized to a small part of a larger component, because you can effortlessly narrow down which parts of the component are re-rendered when the value changes without having to extract a new component.\n\nImports from previous `@nozbe/watermelondb/DatabaseProvider` and `@nozbe/watermelondb/hooks` folders are deprecated and will be removed in a future version.\n\n**Introducing Watermelon Diagnostics**\n\nAll debug/dev/diagnostics tools for Watermelon are now available from a new `@nozbe/watermelondb/diagnostics` folder:\n\n- NEW: `censorRaw` - takes a `RawRecord/DirtyRaw` and censors its string values, while preserving IDs, _status, _changed, and numeric/boolean values. Helpful when viewing database contents in context that could expose private user information\n- NEW: `diagnoseDatabaseStructure` - analyzes database to find inconsistencies, such as orphaned records (`belongs_to` relations on model that point to records that don't exist) or broken LokiJS database. Use this to find bugs in your data model.\n- NEW: `diagnoseSyncConsistency` - compares local database with the server version (contents of first/full sync) to find inconsistencies, missing and excess records. Use this to find bugs in your backend sync implementation.\n\n### BREAKING CHANGES\n\n- `@nozbe/with-observables` is no longer a WatermelonDB dependency. Change your imports to `import { withObservables } from '@nozbe/watermelondb/react'`\n\nChanges unlikely to cause issues:\n\n- [iOS] If `import WatermelonDB` is used in your Swift app (for Turbo sync), remove it and replace with `#import <WatermelonDB/WatermelonDB.h>` in the bridging header\n- [iOS] If you use `_watermelonDBLoggingHook`, remove it. No replacement is provided at this time, feel free to contribute if you need this\n- [iOS] If you use `-DENABLE_JSLOCK_PERFORMANCE_HACK`, remove it. JSLockPerfHack has been non-functional for some time already, and has now been removed. Please file an issue if you relied on it.\n\n### Deprecations\n\n- Imports from `@nozbe/watermelondb/DatabaseProvider` and `@nozbe/watermelondb/hooks`. Change to `@nozbe/watermelondb/react`\n\n### New features\n\n- New `@experimentalFailsafe` decorator you can apply before `@relation/@immutableRelation` so that if relation points to a record that does not exist, `.fetch()/.observe()` yield `undefined` instead of throwing an error\n\n### Fixes\n\n- [Flow/TS] Improved typing of DatabaseContext\n- Fixed `Cannot read property 'getRandomIds' of null`. This error occured if native modules were not correctly installed, however the location of the error caused a lot of confusion.\n\n## 0.26 - 2023-04-28\n\n### Highlights\n\n**New Native Modules**\n\nWe're transitioning SQLite adapters for React Native **from Kotlin and Swift to Java and Objective-C**.\n\nThis is only a small part of WatermelonDB, yet is responsible for a disproportionate amount of issues\nraised, such as Kotlin version conflicts, Expo build failures, CocoaPods use_frameworks! issues. It\nmakes library installation and updates more complicated for users. It complicates maintenance.\nSwift doesn't play nicely with either React Native's legacy Native Module system, nor can it interact\ncleanly with C++ (JSI/New Architecture) without going through Objective-C++.\n\nIn other words, in the context of a React Native library, the benefit of these modern, nicer to use\nlanguages is far outweighed by the downsides. That's why we (@radex & @rozpierog) decided to rewrite\nthe iOS and Android implementations to Objective-C and Java respectively.\n\n0.26 is a transition release, and it contains both implementations. If you find a regression caused\nby the new bridge, pass `{disableNewBridge: true}` to `new SQLiteAdapter()` **and file an issue**.\nWe plan to remove the old implementation in 0.27 or 0.28 release.\n\n**New documentation**\n\nWe have a brand new documentation page, built with Docusaurus (contributed by @ErickLuizA).\n\nWe plan to expand guides, add typing to examples, and add a proper API reference, but we need your\nhelp to do this! See: https://github.com/Nozbe/WatermelonDB/issues/1481\n\n### BREAKING CHANGES\n\n- [iOS] You should remove import of WatermelonDB's `SupportingFiles/Bridging.h` from your app project's `Bridging.h`.\n  If this removal causes build issues, please file an issue.\n- [iOS] In your Podfile, replace previous WatermelonDB's pod imports with this:\n\n  ```rb\n  # Uncomment this line if you're not using auto-linking\n  # pod 'WatermelonDB', path: '../node_modules/@nozbe/watermelondb'\n  # WatermelonDB dependency\n  pod 'simdjson', path: '../node_modules/@nozbe/simdjson', modular_headers: true\n  ```\n- Removed functions deprecated for 2+ years:\n  - `Collection.unsafeFetchRecordsWithSQL()`. Use `.query(Q.unsafeSqlQuery('select * from...')).fetch()` instead.\n  - `Database.action()`. Use `Database.write()` instead.\n  - `.subAction()`. Use `.callWriter()` instead.\n  - `@action` decorator. Use `@writer` instead.\n\n### Deprecations\n\n### New features\n\n- [Android] Added `experimentalUnsafeNativeReuse` option to SQLiteAdapter. See `src/adapters/sqlite/type.js` for more details\n- You can now pass an array to `Q.and(conditions)`, `Q.or(conditions)`, `collection.query(conditions)`, `query.extend(conditions)` in addition to spreading multiple arguments\n- Added JSDoc comments to many APIs\n\n### Fixes\n\n- Improved resiliency to \"Maximum call stack size exceeded\" errors\n- [JSI] Improved reliability when reloading RCTBridge\n- [iOS] Fix \"range of supported deployment targets\" Xcode warning\n- `randomId` uses better randum number generator\n- Fixed \"no such index\" when using non-standard schemas and >1k bulk updates\n- Fixes and changes included in `@nozbe/with-observables@1.5.0`\n- [Flow] `query.batch([model, falsy])` no longer raises an error\n\n### Performance\n\n- Warning is now given if a large number of arguments is passed to `Q.and, Q.or, Collection.query, Database.batch` instead of a single array\n- `randomId()` is now 2x faster on Chrome, 10x faster on Safari, 2x faster on iOS (Hermes)\n\n### Changes\n\n- `randomId`: now also generates upper-case letters\n- Simplified CocoaPods/iOS integration\n- Docs improvements: SQLite versions, Flow declarations, Installation\n- Improved diagnostic warnings and errors: JSI, Writer/Reader\n- Remove old diagnostic warnings no longer relevant: `multiple Q.on()s`, `Database`, `LokiJSAdapter`, `SQLiteAdapter`\n- Updated `flow-bin` to 0.200. This shouldn't have an impact on you, but could fix or break Flow if you don't have WatermelonDB set to `[declarations]` mode\n- Updated `@babel/runtime` to 7.20.13\n- Updated `rxjs` to 7.8.0\n- Updated `sqlite` (SQLite used on Android in JSI mode) to 3.40.1\n- Updated `simdjson` to 3.1.0\n\n### Internal\n\n- Cleaned up QueryDescription, ios folder structure, JSI implementation by splitting them into smaller parts.\n- [Android] [jsi] Simplify CMakeLists\n- Improve release script\n\n## 0.25.5 - 2023-02-01\n\n- Fix Android auto-linking\n\n## 0.25.4 - 2023-01-31\n\n- [Sync] Improve memory consumption (less likely to get \"Maximum callstack exceeded\" error)\n- [TypeScript] Fix type of `DirtyRaw` to `{ [key: string]: any }` (from `Object`)\n\n## 0.25.3 - 2023-01-30\n\n- Fixed TypeError regression\n\n## 0.25.2 - 2023-01-30\n\n### Fixes\n\n- Fix TypeScript issues (@paulrostorp feat. @enahum)\n- Fix compilation on Kotlin 1.7\n- Fix regression in Sync that could cause `Record ID xxx#yyy was sent over the bridge, but it's not cached` error\n\n### Internal\n\n- Update internal dependencies\n- Fix Android CI\n- Improve TypeScript CI\n\n## 0.25.1 - 2023-01-23\n\n- Fix React Native 0.71+ Android broken build\n\n## 0.25 - 2023-01-20\n\n### Highlights\n\n- Fix broken build on React Native 0.71+\n- [Expo] Fixes Expo SDK 44+ build errors (@Kudo)\n- [JSI] Fix an issue that sometimes led to crashing app upon database close\n\n### BREAKING CHANGES\n\n- [Query] `Q.where(xxx, undefined)` will now throw an error. This is a bug fix, since comparing to\n  undefined was never allowed and would either error out or produce a wrong result in some cases.\n  However, it could technically break an app that relied on existing buggy behavior\n- [JSI+Swift] If you use `watermelondbProvideSyncJson()` native iOS API, you might need to add `import WatermelonDB`\n\n### New features\n\n- [adapters] Adapter objects can now be distinguished by checking their `static adapterType`\n- [Query] New `Q.includes('foo')` query for case-sensitive exact string includes comparison\n- [adapters] Adapter objects now returns `dbName`\n- [Sync] Replacement Sync - a new advanced sync feature. Server can now send a full dataset (same as\n  during initial sync) and indicate with `{ experimentalStrategy: 'replacement' }` that instead of applying a diff,\n  local database should be replaced with the dataset sent. Local records not present in the changeset\n  will be deleted. However, unlike clearing database and logging in again, unpushed local changes\n  (to records that are kept after replacement) are preserved. This is useful for recovering from a\n  corrupted local database, or as a hack to deal with very large state changes such that server doesn't\n  know how to efficiently send incremental changes and wants to send a full dataset instead. See docs\n  for more details.\n- [Sync] Added `onWillApplyRemoteChanges` callback\n\n### Performance\n\n- [LokiJS] Updated Loki with some performance improvements\n- [iOS] JSLockPerfHack now works on iOS 15\n- [Sync] Improved performance of processing large pulls\n- Improved `@json` decorator, now with optional `{ memo: true }` parameter\n\n### Changes\n\n- [Docs] Added additional Android JSI installation step\n\n### Fixes\n\n- [TypeScript] Improve typings: add unsafeExecute method, localStorage property to Database\n- [android] Fixed compilation on some setups due to a missing `<cassert>` import\n- [sync] Fixed marking changes as synced for users that don't keep globally unique (only per-table unique) IDs\n- Fix `Model.experimentalMarkAsDeleted/experimentalDestroyPermanently()` throwing an error in some cases\n- Fixes included in updated `withObservables`\n\n## 0.24 - 2021-10-28\n\n### BREAKING CHANGES\n\n- `Q.experimentalSortBy`, `Q.experimentalSkip`, `Q.experimentalTake` have been renamed to `Q.sortBy`, `Q.skip`, `Q.take` respectively\n- **RxJS has been updated to 7.3.0**. If you're not importing from `rxjs` in your app, this doesn't apply to you. If you are, read RxJS 7 breaking changes: https://rxjs.dev/deprecations/breaking-changes\n\n### New features\n\n- **LocalStorage**. `database.localStorage` is now available\n- **sortBy, skip, take** are now available in LokiJSAdapter as well\n- **Disposable records**. Read-only records that cannot be saved in the database, updated, or deleted and only exist for as long as you keep a reference to them in memory can now be created using `collection.disposableFromDirtyRaw()`. This is useful when you're adding online-only features to an otherwise offline-first app.\n- [Sync] `experimentalRejectedIds` parameter now available in push response to allow partial rejection of an otherwise successful sync\n\n### Fixes\n\n- Fixes an issue when using Headless JS on Android with JSI mode enabled - pass `usesExclusiveLocking: true` to SQLiteAdapter to enable\n- Fixes Typescript annotations for Collection and adapters/sqlite\n\n## 0.23 - 2021-07-22\n\nThis is a big release to WatermelonDB with new advanced features, great performance improvements, and important fixes to JSI on Android.\n\nPlease don't get scared off the long list of breaking changes - they are all either simple Find&Replace renames or changes to internals you probably don't use. It shouldn't take you more than 15 minutes to upgrade to 0.23.\n\n### BREAKING CHANGES\n\n- **iOS Installation change**. You need to add this line to your Podfile: `pod 'simdjson', path: '../node_modules/@nozbe/simdjson'`\n- Deprecated `new Database({ actionsEnabled: false })` options is now removed. Actions are always enabled.\n- Deprecated `new SQLiteAdapter({ synchronous: true })` option is now removed. Use `{ jsi: true }` instead.\n- Deprecated `Q.unsafeLokiFilter` is now removed. Use `Q.unsafeLokiTransform((raws, loki) => raws.filter(raw => ...))` instead.\n- Deprecated `Query.hasJoins` is now removed\n- Changes to `LokiJSAdapter` constructor options:\n  - `indexedDBSerializer` -> `extraIncrementalIDBOptions: { serializeChunk, deserializeChunk }`\n  - `onIndexedDBFetchStart` -> `extraIncrementalIDBOptions: { onFetchStart }`\n  - `onIndexedDBVersionChange` -> `extraIncrementalIDBOptions: { onversionchange }`\n  - `autosave: false` -> `extraLokiOptions: { autosave: false }`\n- Changes to Internal APIs. These were never meant to be public, and so are unlikely to affect you:\n  - `Model._isCommited`, `._hasPendingUpdate`, `._hasPendingDelete` have been removed and changed to `Model._pendingState`\n  - `Collection.unsafeClearCache()` is no longer exposed\n- Values passed to `adapter.setLocal()` are now validated to be strings. This is technically a bug fix, since local storage was always documented to only accept strings, however applications may have relied on this lack of validation. Adding this validation was necessary to achieve consistent behavior between SQLiteAdapter and LokiJSAdapter\n- `unsafeSql` passed to `appSchema` will now also be called when dropping and later recreating all database indices on large batches. A second argument was added so you can distinguish between these cases. See Schema docs for more details.\n- **Changes to sync change tracking**. The behavior of `record._raw._changed` and `record._raw._status` (a.k.a. `record.syncStatus`) has changed. This is unlikely to be a breaking change to you, unless you're writing your own sync engine or rely on these low-level details.\n  - Previously, \\_changed was always empty when \\_status=created. Now, \\_changed is not populated during initial creation of a record, but a later update will add changed fields to \\_changed. This change was necessary to fix a long-standing Sync bug.\n\n### Deprecations\n\n- `database.action(() => {})` is now deprecated. Use `db.write(() => {})` instead (or `db.read(() => {})` if you only need consistency but are not writing any changes to DB)\n- `@action` is now deprecated. Use `@writer` or `@reader` instead\n- `.subAction()` is now deprecated. Use `.callReader()` or `.callWriter()` instead\n- `Collection.unsafeFetchRecordsWithSQL()` is now deprecated. Use `collection.query(Q.unsafeSqlQuery(\"select * from...\")).fetch()` instead.\n\n### New features\n\n- `db.write(writer => { ... writer.batch() })` - you can now call batch on the interface passed to a writer block\n- **Fetching record IDs and unsafe raws.** You can now optimize fetching of queries that only require IDs, not full cached records:\n  - `await query.fetchIds()` will return an array of record ids\n  - `await query.unsafeFetchRaw()` will return an array of unsanitized, unsafe raw objects (use alongside `Q.unsafeSqlQuery` to exclude unnecessary or include extra columns)\n  - advanced `adapter.queryIds()`, `adapter.unsafeQueryRaw` are also available\n- **Raw SQL queries**. New syntax for running unsafe raw SQL queries:\n  - `collection.query(Q.unsafeSqlQuery(\"select * from tasks where foo = ?\", ['bar'])).fetch()`\n  - You can now also run `.fetchCount()`, `.fetchIds()` on SQL queries\n  - You can now safely pass values for SQL placeholders by passing an array\n  - You can also observe an unsafe raw SQL query -- with some caveats! refer to documentation for more details\n- **Unsafe raw execute**. You can now execute arbitrary SQL queries (SQLiteAdapter) or access Loki object directly (LokiJSAdapter) using `adapter.unsafeExecute` -- see docs for more details\n- **Turbo Login**. You can now speed up the initial (login) sync by up to 5.3x with Turbo Login. See Sync docs for more details.\n- New diagnostic tool - **debugPrintChanges**. See Sync documentation for more details\n\n### Performance\n\n- The order of Q. clauses in a query is now preserved - previously, the clauses could get rearranged and produce a suboptimal query\n- [SQLite] `adapter.batch()` with large numbers of created/updated/deleted records is now between 16-48% faster\n- [LokiJS] Querying and finding is now faster - unnecessary data copy is skipped\n- [jsi] 15-30% faster querying on JSC (iOS) when the number of returned records is large\n- [jsi] up to 52% faster batch creation (yes, that's on top of the improvement listed above!)\n- Fixed a performance bug that caused observed items on a list observer with `.observeWithColumns()` to be unnecessarily re-rendered just before they were removed from the list\n\n### Changes\n\n- All Watermelon console logs are prepended with a 🍉 tag\n- Extra protections against improper use of writers/readers (formerly actions) have been added\n- Queries with multiple top-level `Q.on('table', ...)` now produce a warning. Use `Q.on('table', [condition1, condition2, ...])` syntax instead.\n- [jsi] WAL mode is now used\n\n### Fixes\n\n- [jsi] Fix a race condition where commands sent to the database right after instantiating SQLiteAdapter would fail\n- [jsi] Fix incorrect error reporting on some sqlite errors\n- [jsi] Fix issue where app would crash on Android/Hermes on reload\n- [jsi] Fix IO errors on Android\n- [sync] Fixed a long-standing bug that would cause records that are created before a sync and updated during sync's push to lose their most recent changes on a subsequent sync\n\n### Internal\n\n- Internal changes to SQLiteAdapter:\n  - .batch is no longer available on iOS implementation\n  - .batch/.batchJSON internal format has changed\n  - .getDeletedRecords, destroyDeletedRecords, setLocal, removeLocal is no longer available\n- encoded SQLiteAdapter schema has changed\n- LokiJSAdapter has had many internal changes\n\n## 0.22 - 2021-05-07\n\n### BREAKING CHANGES\n\n- [SQLite] `experimentalUseJSI: true` option has been renamed to `jsi: true`\n\n### Deprecations\n\n- [LokiJS] `Q.unsafeLokiFilter` is now deprecated and will be removed in a future version.\n  Use `Q.unsafeLokiTransform((raws, loki) => raws.filter(raw => ...))` instead.\n\n### New features\n\n- [SQLite] [JSI] `jsi: true` now works on Android - see docs for installation info\n\n### Performance\n\n- Removed dependency on rambdax and made the util library smaller\n- Faster withObservables\n\n### Changes\n\n- Synchronization: `pushChanges` is optional, will not calculate local changes if not specified.\n- withObservables is now a dependency of WatermelonDB for simpler installation and consistent updates. You can (and generally should) delete `@nozbe/with-observables` from your app's package.json\n- [Docs] Add advanced tutorial to share database across iOS targets - @thiagobrez\n- [SQLite] Allowed callbacks (within the migrationEvents object) to be passed so as to track the migration events status ( onStart, onSuccess, onError ) - @avinashlng1080\n- [SQLite] Added a dev-only `Query._sql()` method for quickly extracting SQL from Queries for debugging purposes\n\n### Fixes\n\n- Non-react statics hoisting in `withDatabase()`\n- Fixed incorrect reference to `process`, which can break apps in some environments (e.g. webpack5)\n- [SQLite] [JSI] Fixed JSI mode when running on Hermes\n- Fixed a race condition when using standard fetch methods alongside `Collection.unsafeFetchRecordsWithSQL` - @jspizziri\n- withObservables shouldn't cause any RxJS issues anymore as it no longer imports RxJS\n- [Typescript] Added `onSetUpError` and `onIndexedDBFetchStart` fields to `LokiAdapterOptions`; fixes TS error - @3DDario\n- [Typescript] Removed duplicated identifiers `useWebWorker` and `useIncrementalIndexedDB` in `LokiAdapterOptions` - @3DDario\n- [Typescript] Fix default export in logger util\n\n## 0.21 - 2021-03-24\n\n### BREAKING CHANGES\n\n- [LokiJS] `useWebWorker` and `useIncrementalIndexedDB` options are now required (previously, skipping them would only trigger a warning)\n\n### New features\n\n- [Model] `Model.update` method now returns updated record\n- [adapters] `onSetUpError: Error => void` option is added to both `SQLiteAdapter` and `LokiJSAdapter`. Supply this option to catch initialization errors and offer the user to reload or log out\n- [LokiJS] new `extraLokiOptions` and `extraIncrementalIDBOptions` options\n- [Android] Autolinking is now supported.\n  - If You upgrade to `<= v0.21.0` **AND** are on a version of React Native which supports Autolinking, you will need to remove the config manually linking WatermelonDB.\n  - You can resolve this issue by **REMOVING** the lines of config from your project which are _added_ in the `Manual Install ONLY` section of the [Android Install docs](https://nozbe.github.io/WatermelonDB/Installation.html#android-react-native).\n\n### Performance\n\n- [LokiJS] Improved performance of launching the app\n\n### Changes\n\n- [LokiJS] `useWebWorker: true` and `useIncrementalIndexedDB: false` options are now deprecated. If you rely on these features, please file an issue!\n- [Sync] Optional `log` passed to sync now has more helpful diagnostic information\n- [Sync] Open-sourced a simple SyncLogger you can optionally use. See docs for more info.\n- [SQLiteAdapter] `synchronous:true` option is now deprecated and will be replaced with `experimentalUseJSI: true` in the future. Please test if your app compiles and works well with `experimentalUseJSI: true`, and if not - file an issue!\n- [LokiJS] Changed default autosave interval from 250 to 500ms\n- [Typescript] Add `experimentalNestedJoin` definition and `unsafeSqlExpr` clause\n\n### Fixes\n\n- [LokiJS] Fixed a case where IndexedDB could get corrupted over time\n- [Resilience] Added extra diagnostics for when you encounter the `Record ID aa#bb was sent over the bridge, but it's not cached` error and a recovery path (LokiJSAdapter-only). Please file an issue if you encounter this issue!\n- [Typescript] Fixed type on OnFunction to accept `and` in join\n- [Typescript] Fixed type `database#batch(records)`'s argument `records` to accept mixed types\n\n### Internal\n\n- Added an experimental mode where a broken database state is detected, further mutations prevented, and the user notified\n\n## 0.20 - 2020-10-05\n\n### BREAKING CHANGES\n\nThis release has unintentionally broken RxJS for some apps using `with-observables`. If you have this issue, please update `@nozbe/with-observables` to the latest version.\n\n### New features\n\n- [Sync] Conflict resolution can now be customized. See docs for more details\n- [Android] Autolinking is now supported\n- [LokiJS] Adapter autosave option is now configurable\n\n### Changes\n\n- Interal RxJS imports have been refactor such that rxjs-compat should never be used now\n- [Performance] Tweak Babel config to produce smaller code\n- [Performance] LokiJS-based apps will now take up to 30% less time to load the database (id and unique indicies are generated lazily)\n\n### Fixes\n\n- [iOS] Fixed crash on database reset in apps linked against iOS 14 SDK\n- [LokiJS] Fix `Q.like` being broken for multi-line strings on web\n- Fixed warn \"import cycle\" from DialogProvider (#786) by @gmonte.\n- Fixed cache date as instance of Date (#828) by @djorkaeffalexandre.\n\n## 0.19 - 2020-08-17\n\n### New features\n\n- [iOS] Added CocoaPods support - @leninlin\n- [NodeJS] Introducing a new SQLite Adapter based integration to NodeJS. This requires a\n  peer dependency on [better-sqlite3](https://github.com/JoshuaWise/better-sqlite3)\n  and should work with the same configuration as iOS/Android - @sidferreira\n- [Android] `exerimentalUseJSI` option has been enabled on Android. However, it requires some app-specific setup which is not yet documented - stay tuned for upcoming releases\n- [Schema] [Migrations] You can now pass `unsafeSql` parameters to schema builder and migration steps to modify SQL generated to set up the database or perform migrations. There's also new `unsafeExecuteSql` migration step. Please use this only if you know what you're doing — you shouldn't need this in 99% of cases. See Schema and Migrations docs for more details\n- [LokiJS] [Performance] Added experimental `onIndexedDBFetchStart` and `indexedDBSerializer` options to `LokiJSAdapter`. These can be used to improve app launch time. See `src/adapters/lokijs/index.js` for more details.\n\n### Changes\n\n- [Performance] findAndObserve is now able to emit a value synchronously. By extension, this makes Relations put into withObservables able to render the child component in one shot. Avoiding the extra unnecessary render cycles avoids a lot of DOM and React commit-phase work, which can speed up loading some views by 30%\n- [Performance] LokiJS is now faster (refactored encodeQuery, skipped unnecessary clone operations)\n\n## 0.18 - 2020-06-30\n\nAnother WatermelonDB release after just a week? Yup! And it's jam-packed full of features!\n\n### New features\n\n- [Query] `Q.on` queries are now far more flexible. Previously, they could only be placed at the top\n  level of a query. See Docs for more details. Now, you can:\n\n  - Pass multiple conditions on the related query, like so:\n\n    ```js\n    collection.query(Q.on('projects', [Q.where('foo', 'bar'), Q.where('bar', 'baz')]))\n    ```\n\n  - You can place `Q.on` deeper inside the query (nested inside `Q.and()`, `Q.or()`). However, you\n    must explicitly list all tables you're joining on at the beginning of a query, using:\n    `Q.experimentalJoinTables(['join_table1', 'join_table2'])`.\n  - You can nest `Q.on` conditions inside `Q.on`, e.g. to make a condition on a grandchild.\n    To do so, it's required to pass `Q.experimentalNestedJoin('parent_table', 'grandparent_table')` at the beginning\n    of a query\n\n- [Query] `Q.unsafeSqlExpr()` and `Q.unsafeLokiExpr()` are introduced to allow adding bits of queries\n  that are not supported by the WatermelonDB query language without having to use `unsafeFetchRecordsWithSQL()`.\n  See docs for more details\n- [Query] `Q.unsafeLokiFilter((rawRecord, loki) => boolean)` can now be used as an escape hatch to make\n  queries with LokiJSAdapter that are not otherwise possible (e.g. multi-table column comparisons).\n  See docs for more details\n\n### Changes\n\n- [Performance] [LokiJS] Improved performance of queries containing query comparisons on LokiJSAdapter\n- [Docs] Added Contributing guide for Query language improvements\n- [Deprecation] `Query.hasJoins` is deprecated\n- [DX] Queries with bad associations now show more helpful error message\n- [Query] Counting queries that contain `Q.experimentalTake` / `Q.experimentalSkip` is currently broken - previously it would return incorrect results, but\n  now it will throw an error to avoid confusion. Please contribute to fix the root cause!\n\n### Fixes\n\n- [Typescript] Fixed types of Relation\n\n### Internal\n\n- `QueryDescription` structure has been changed.\n\n## 0.17.1 - 2020-06-24\n\n- Fixed broken iOS build - @mlecoq\n\n## 0.17 - 2020-06-22\n\n### New features\n\n- [Sync] Introducing Migration Syncs - this allows fully consistent synchronization when migrating\n  between schema versions. Previously, there was no mechanism to incrementally fetch all remote changes in\n  new tables and columns after a migration - so local copy was likely inconsistent, requiring a re-login.\n  After adopting migration syncs, Watermelon Sync will request from backend all missing information.\n  See Sync docs for more details.\n- [iOS] Introducing a new native SQLite database integration, rewritten from scratch in C++, based\n  on React Native's JSI (JavaScript Interface). It is to be considered experimental, however\n  we intend to make it the default (and eventually, the only) implementation. In a later release,\n  Android version will be introduced.\n\n       The new adapter is up to 3x faster than the previously fastest `synchronous: true` option,\n       however this speedup is only achieved with some unpublished React Native patches.\n\n       To try out JSI, add `experimentalUseJSI: true` to `SQLiteAdapter` constructor.\n\n- [Query] Added `Q.experimentalSortBy(sortColumn, sortOrder)`, `Q.experimentalTake(count)`,\n  `Q.experimentalSkip(count)` methods (only availble with SQLiteAdapter) - @Kenneth-KT\n- `Database.batch()` can now be called with a single array of models\n- [DX] `Database.get(tableName)` is now a shortcut for `Database.collections.get(tableName)`\n- [DX] Query is now thenable - you can now use `await query` and `await query.count` instead of `await query.fetch()` and `await query.fetchCount()`\n- [DX] Relation is now thenable - you can now use `await relation` instead of `await relation.fetch()`\n- [DX] Exposed `collection.db` and `model.db` as shortcuts to get to their Database object\n\n### Changes\n\n- [Hardening] Column and table names starting with `__`, Object property names (e.g. `constructor`), and some reserved keywords are now forbidden\n- [DX] [Hardening] QueryDescription builder methods do tighter type checks, catching more bugs, and\n  preventing users from unwisely passing unsanitized user data into Query builder methods\n- [DX] [Hardening] Adapters check early if table names are valid\n- [DX] Collection.find reports an error more quickly if an obviously invalid ID is passed\n- [DX] Intializing Database with invalid model classes will now show a helpful error\n- [DX] DatabaseProvider shows a more helpful error if used improperly\n- [Sync] Sync no longer fails if pullChanges returns collections that don't exist on the frontend - shows a warning instead. This is to make building backwards-compatible backends less error-prone\n- [Sync] [Docs] Sync documentation has been rewritten, and is now closer in detail to a formal specification\n- [Hardening] database.collections.get() better validates passed value\n- [Hardening] Prevents unsafe strings from being passed as column name/table name arguments in QueryDescription\n\n### Fixes\n\n- [Sync] Fixed `RangeError: Maximum call stack size exceeded` when syncing large amounts of data - @leninlin\n- [iOS] Fixed a bug that could cause a database operation to fail with an (6) SQLITE_LOCKED error\n- [iOS] Fixed 'jsi/jsi.h' file not found when building at the consumer level. Added path `$(SRCROOT)/../../../../../ios/Pods/Headers/Public/React-jsi` to Header Search Paths (issue #691) - @victorbutler\n- [Native] SQLite keywords used as table or column names no longer crash\n- Fixed potential issues when subscribing to database, collection, model, queries passing a subscriber function with the same identity more than once\n\n### Internal\n\n- Fixed broken adapter tests\n\n## 0.15.1, 0.16.1-fix, 0.16.2 - 2020-06-03\n\nThis is a security patch for a vulnerability that could cause maliciously crafted record IDs to\ncause all or some of user's data to be deleted. More information available via GitHub security advisory\n\n## 0.16.1 - 2020-05-18\n\n### Changes\n\n- `Database.unsafeResetDatabase()` is now less unsafe — more application bugs are being caught\n\n### Fixes\n\n- [iOS] Fix build in apps using Flipper\n- [Typescript] Added type definition for `setGenerator`.\n- [Typescript] Fixed types of decorators.\n- [Typescript] Add Tests to test Types.\n- Fixed typo in learn-to-use docs.\n- [Typescript] Fixed types of changes.\n\n### Internal\n\n- [SQLite] Infrastruture for a future JSI adapter has been added\n\n## 0.16 - 2020-03-06\n\n### ⚠️ Breaking\n\n- `experimentalUseIncrementalIndexedDB` has been renamed to `useIncrementalIndexedDB`\n\n#### Low breakage risk\n\n- [adapters] Adapter API has changed from returning Promise to taking callbacks as the last argument. This won't affect you unless you call on adapter methods directly. `database.adapter` returns a new `DatabaseAdapterCompat` which has the same shape as old adapter API. You can use `database.adapter.underlyingAdapter` to get back `SQLiteAdapter` / `LokiJSAdapter`\n- [Collection] `Collection.fetchQuery` and `Collection.fetchCount` are removed. Please use `Query.fetch()` and `Query.fetchCount()`.\n\n### New features\n\n- [SQLiteAdapter] [iOS] Add new `synchronous` option to adapter: `new SQLiteAdapter({ ..., synchronous: true })`.\n  When enabled, database operations will block JavaScript thread. Adapter actions will resolve in the\n  next microtask, which simplifies building flicker-free interfaces. Adapter will fall back to async\n  operation when synchronous adapter is not available (e.g. when doing remote debugging)\n- [LokiJS] Added new `onQuotaExceededError?: (error: Error) => void` option to `LokiJSAdapter` constructor.\n  This is called when underlying IndexedDB encountered a quota exceeded error (ran out of allotted disk space for app)\n  This means that app can't save more data or that it will fall back to using in-memory database only\n  Note that this only works when `useWebWorker: false`\n\n### Changes\n\n- [Performance] Watermelon internals have been rewritten not to rely on Promises and allow some fetch/observe calls to resolve synchronously. Do not rely on this -- external API is still based on Rx and Promises and may resolve either asynchronously or synchronously depending on capabilities. This is meant as a internal performance optimization only for the time being.\n- [LokiJS] [Performance] Improved worker queue implementation for performance\n- [observation] Refactored observer implementations for performance\n\n### Fixes\n\n- Fixed a possible cause for \"Record ID xxx#yyy was sent over the bridge, but it's not cached\" error\n- [LokiJS] Fixed an issue preventing database from saving when using `experimentalUseIncrementalIndexedDB`\n- Fixed a potential issue when using `database.unsafeResetDatabase()`\n- [iOS] Fixed issue with clearing database under experimental synchronous mode\n\n### New features (Experimental)\n\n- [Model] Added experimental `model.experimentalSubscribe((isDeleted) => { ... })` method as a vanilla JS alternative to Rx based `model.observe()`. Unlike the latter, it does not notify the subscriber immediately upon subscription.\n- [Collection] Added internal `collection.experimentalSubscribe((changeSet) => { ... })` method as a vanilla JS alternative to Rx based `collection.changes` (you probably shouldn't be using this API anyway)\n- [Database] Added experimental `database.experimentalSubscribe(['table1', 'table2'], () => { ... })` method as a vanilla JS alternative to Rx-based `database.withChangesForTables()`. Unlike the latter, `experimentalSubscribe` notifies the subscriber only once after a batch that makes a change in multiple collections subscribed to. It also doesn't notify the subscriber immediately upon subscription, and doesn't send details about the changes, only a signal.\n- Added `experimentalDisableObserveCountThrottling()` to `@nozbe/watermelondb/observation/observeCount` that globally disables count observation throttling. We think that throttling on WatermelonDB level is not a good feature and will be removed in a future release - and will be better implemented on app level if necessary\n- [Query] Added experimental `query.experimentalSubscribe(records => { ... })`, `query.experimentalSubscribeWithColumns(['col1', 'col2'], records => { ... })`, and `query.experimentalSubscribeToCount(count => { ... })` methods\n\n## 0.15 - 2019-11-08\n\n### Highlights\n\nThis is a **massive** new update to WatermelonDB! 🍉\n\n- **Up to 23x faster sync**. You heard that right. We've made big improvements to performance.\n  In our tests, with a massive sync (first login, 45MB of data / 65K records) we got a speed up of:\n\n  - 5.7s -> 1.2s on web (5x)\n  - 142s -> 6s on iOS (23x)\n\n  Expect more improvements in the coming releases!\n\n- **Improved LokiJS adapter**. Option to disable web workers, important Safari 13 fix, better performance,\n  and now works in Private Modes. We recommend adding `useWebWorker: false, experimentalUseIncrementalIndexedDB: true` options to the `LokiJSAdapter` constructor to take advantage of the improvements, but please read further changelog to understand the implications of this.\n- **Raw SQL queries** now available on iOS and Android thanks to the community\n- **Improved TypeScript support** — thanks to the community\n\n### ⚠️ Breaking\n\n- Deprecated `bool` schema column type is removed -- please change to `boolean`\n- Experimental `experimentalSetOnlyMarkAsChangedIfDiffers(false)` API is now removed\n\n### New featuers\n\n- [Collection] Add `Collection.unsafeFetchRecordsWithSQL()` method. You can use it to fetch record using\n  raw SQL queries on iOS and Android. Please be careful to avoid SQL injection and other pitfalls of\n  raw queries\n- [LokiJS] Introduces new `new LokiJSAdapter({ ..., experimentalUseIncrementalIndexedDB: true })` option.\n  When enabled, database will be saved to browser's IndexedDB using a new adapter that only saves the\n  changed records, instead of the entire database.\n\n  **This works around a serious bug in Safari 13** (https://bugs.webkit.org/show_bug.cgi?id=202137) that causes large\n  databases to quickly balloon to gigabytes of temporary trash\n\n  This also improves performance of incremental saves, although initial page load or very, very large saves\n  might be slightly slower.\n\n  This is intended to become the new default option, but it's not backwards compatible (if enabled, old database\n  will be lost). **You're welcome to contribute an automatic migration code.**\n\n  Note that this option is still experimental, and might change in breaking ways at any time.\n\n- [LokiJS] Introduces new `new LokiJSAdapter({ ..., useWebWorker: false })` option. Before, web workers\n  were always used with `LokiJSAdapter`. Although web workers may have some performance benefits, disabling them\n  may lead to lower memory consumption, lower latency, and easier debugging. YMMV.\n- [LokiJS] Added `onIndexedDBVersionChange` option to `LokiJSAdapter`. This is a callback that's called\n  when internal IDB version changed (most likely the database was deleted in another browser tab).\n  Pass a callback to force log out in this copy of the app as well. Note that this only works when\n  using incrementalIDB and not using web workers\n- [Model] Add `Model._dangerouslySetRawWithoutMarkingColumnChange()` method. You probably shouldn't use it,\n  but if you know what you're doing and want to live-update records from server without marking record as updated,\n  this is useful\n- [Collection] Add `Collection.prepareCreateFromDirtyRaw()`\n- @json decorator sanitizer functions take an optional second argument, with a reference to the model\n\n### Fixes\n\n- Pinned required `rambdax` version to 2.15.0 to avoid console logging bug. In a future release we will switch to our own fork of `rambdax` to avoid future breakages like this.\n\n### Improvements\n\n- [Performance] Make large batches a lot faster (1.3s shaved off on a 65K insert sample)\n- [Performance] [iOS] Make large batch inserts an order of magnitude faster\n- [Performance] [iOS] Make encoding very large queries (with thousands of parameters) 20x faster\n- [Performance] [LokiJS] Make batch inserts faster (1.5s shaved off on a 65K insert sample)\n- [Performance] [LokiJS] Various performance improvements\n- [Performance] [Sync] Make Sync faster\n- [Performance] Make observation faster\n- [Performance] [Android] Make batches faster\n- Fix app glitches and performance issues caused by race conditions in `Query.observeWithColumns()`\n- [LokiJS] Persistence adapter will now be automatically selected based on availability. By default,\n  IndexedDB is used. But now, if unavailable (e.g. in private mode), ephemeral memory adapter will be used.\n- Disabled console logs regarding new observations (it never actually counted all observations) and\n  time to query/count/batch (the measures were wildly inaccurate because of asynchronicity - actual\n  times are much lower)\n- [withObservables] Improved performance and debuggability (update withObservables package separately)\n- Improved debuggability of Watermelon -- shortened Rx stacks and added function names to aid in understanding\n  call stacks and profiles\n- [adapters] The adapters interface has changed. `query()` and `count()` methods now receive a `SerializedQuery`, and `batch()` now takes `TableName<any>` and `RawRecord` or `RecordId` instead of `Model`.\n- [Typescript] Typing improvements\n  - Added 3 missing properties `collections`, `database` and `asModel` in Model type definition.\n  - Removed optional flag on `actionsEnabled` in the Database constructor options since its mandatory since 0.13.0.\n  - fixed several further typing issues in Model, Relation and lazy decorator\n- Changed how async functions are transpiled in the library. This could break on really old Android phones\n  but shouldn't matter if you use latest version of React Native. Please report an issue if you see a problem.\n- Avoid `database` prop drilling in the web demo\n\n## 0.14.1 - 2019-08-31\n\nHotfix for rambdax crash\n\n- [Schema] Handle invalid table schema argument in appSchema\n- [withObservables] Added TypeScript support ([changelog](https://github.com/Nozbe/withObservables/blob/master/CHANGELOG.md))\n- [Electron] avoid `Uncaught ReferenceError: global is not defined` in electron runtime ([#453](https://github.com/Nozbe/WatermelonDB/issues/453))\n- [rambdax] Replaces `contains` with `includes` due to `contains` deprecation https://github.com/selfrefactor/rambda/commit/1dc1368f81e9f398664c9d95c2efbc48b5cdff9b#diff-04c6e90faac2675aa89e2176d2eec7d8R2209\n\n## 0.14.0 - 2019-08-02\n\n### New features\n\n- [Query] Added support for `notLike` queries 🎉\n- [Actions] You can now batch delete record with all descendants using experimental functions `experimentalMarkAsDeleted` or `experimentalDestroyPermanently`\n\n## 0.13.0 - 2019-07-18\n\n### ⚠️ Breaking\n\n- [Database] It is now mandatory to pass `actionsEnabled:` option to Database constructor.\n  It is recommended that you enable this option:\n\n  ```js\n  const database = new Database({\n    adapter: ...,\n    modelClasses: [...],\n    actionsEnabled: true\n  })\n  ```\n\n  See `docs/Actions.md` for more details about Actions. You can also pass `false` to maintain\n  backward compatibility, but this option **will be removed** in a later version\n\n- [Adapters] `migrationsExperimental` prop of `SQLiteAdapter` and `LokiJSAdapter` has been renamed\n  to `migrations`.\n\n### New features\n\n- [Actions] You can now batch deletes by using `prepareMarkAsDeleted` or `prepareDestroyPermanently`\n- [Sync] Performance: `synchronize()` no longer calls your `pushChanges()` function if there are no\n  local changes to push. This is meant to save unnecessary network bandwidth. ⚠️ Note that this\n  could be a breaking change if you rely on it always being called\n- [Sync] When setting new values to fields on a record, the field (and record) will no longer be\n  marked as changed if the field's value is the same. This is meant to improve performance and avoid\n  unnecessary code in the app. ⚠️ Note that this could be a breaking change if you rely on the old\n  behavior. For now you can import `experimentalSetOnlyMarkAsChangedIfDiffers` from\n  `@nozbe/watermelondb/Model/index` and call if with `(false)` to bring the old behavior back, but\n  this will be removed in the later version -- create a new issue explaining why you need this\n- [Sync] Small perf improvements\n\n### Improvements\n\n- [Typescript] Improved types for SQLite and LokiJS adapters, migrations, models, the database and the logger.\n\n## 0.12.3 - 2019-05-06\n\n### Changes\n\n- [Database] You can now update the random id schema by importing\n  `import { setGenerator } from '@nozbe/watermelondb/utils/common/randomId'` and then calling `setGenerator(newGenenerator)`.\n  This allows WatermelonDB to create specific IDs for example if your backend uses UUIDs.\n- [Typescript] Type improvements to SQLiteAdapter and Database\n- [Tests] remove cleanup for react-hooks-testing-library@0.5.0 compatibility\n\n## 0.12.2 - 2019-04-19\n\n### Fixes\n\n- [TypeScript] 'Cannot use 'in' operator to search for 'initializer'; decorator fix\n\n### Changes\n\n- [Database] You can now pass falsy values to `Database.batch(...)` (false, null, undefined). This is\n  useful in keeping code clean when doing operations conditionally. (Also works with `model.batch(...)`)\n- [Decorators]. You can now use `@action` on methods of any object that has a `database: Database`\n  property, and `@field @children @date @relation @immutableRelation @json @text @nochange` decorators on\n  any object with a `asModel: Model` property.\n- [Sync] Adds a temporary/experimental `_unsafeBatchPerCollection: true` flag to `synchronize()`. This\n  causes server changes to be committed to database in multiple batches, and not one. This is NOT preferred\n  for reliability and performance reasons, but it works around a memory issue that might cause your app\n  to crash on very large syncs (>20,000 records). Use this only if necessary. Note that this option\n  might be removed at any time if a better solution is found.\n\n## 0.12.1 - 2019-04-01\n\n### ⚠️ Hotfix\n\n- [iOS] Fix runtime crash when built with Xcode 10.2 (Swift 5 runtime).\n\n  **⚠️ Note**: You need to upgrade to React Native 0.59.3 for this to work. If you can't upgrade\n  React Native yet, either stick to Xcode 10.1 or manually apply this patch:\n  https://github.com/Nozbe/WatermelonDB/pull/302/commits/aa4e08ad0fa55f434da2a94407c51fc5ff18e506\n\n### Changes\n\n- [Sync] Adds basic sync logging capability to Sync. Pass an empty object to `synchronize()` to populate it with diagnostic information:\n  ```js\n  const log = {}\n  await synchronize({ database, log, ...})\n  console.log(log.startedAt)\n  ```\n  See Sync documentation for more details.\n\n## 0.12.0 - 2019-03-18\n\n### Added\n\n- [Hooks] new `useDatabase` hook for consuming the Database Context:\n  ```js\n  import { useDatabase } from '@nozbe/watermelondb/hooks'\n  const Component = () => {\n    const database = useDatabase()\n  }\n  ```\n- [TypeScript] added `.d.ts` files. Please note: TypeScript definitions are currently incomplete and should be used as a guide only. **PRs for improvements would be greatly appreciated!**\n\n### Performance\n\n- Improved UI performance by consolidating multiple observation emissions into a single per-collection batch emission when doing batch changes\n\n## 0.11.0 - 2019-03-12\n\n### Breaking\n\n- ⚠️ Potentially BREAKING fix: a `@date` field now returns a Jan 1, 1970 date instead of `null` if the field's raw value is `0`.\n  This is considered a bug fix, since it's unexpected to receive a `null` from a getter of a field whose column schema doesn't say `isOptional: true`.\n  However, if you relied on this behavior, this might be a breaking change.\n- ⚠️ BREAKING: `Database.unsafeResetDatabase()` now requires that you run it inside an Action\n\n### Bug fixes\n\n- [Sync] Fixed an issue where synchronization would continue running despite `unsafeResetDatabase` being called\n- [Android] fix compile error for kotlin 1.3+\n\n### Other changes\n\n- Actions are now aborted when `unsafeResetDatabase()` is called, making reseting database a little bit safer\n- Updated demo dependencies\n- LokiJS is now a dependency of WatermelonDB (although it's only required for use on the web)\n- [Android] removed unused test class\n- [Android] updated ktlint to `0.30.0`\n\n## 0.10.1 - 2019-02-12\n\n### Changes\n\n- [Android] Changed `compile` to `implementation` in Library Gradle file\n  - ⚠️ might break build if you are using Android Gradle Plugin <3.X\n- Updated `peerDependency` `react-native` to `0.57.0`\n- [Sync] Added `hasUnsyncedChanges()` helper method\n- [Sync] Improved documentation for backends that can't distinguish between `created` and `updated` records\n- [Sync] Improved diagnostics / protection against edge cases\n- [iOS] Add missing `header search path` to support **ejected** expo project.\n- [Android] Fix crash on android < 5.0\n- [iOS] `SQLiteAdapter`'s `dbName` path now allows you to pass an absolute path to a file, instead of a name\n- [Web] Add adaptive layout for demo example with smooth scrolling for iOS\n\n## 0.10.0 - 2019-01-18\n\n### Breaking\n\n- **BREAKING:** Table column `last_modified` is no longer automatically added to all database tables. If\n  you don't use this column (e.g. in your custom sync code), you don't have to do anything.\n  If you do, manually add this column to all table definitions in your Schema:\n  ```\n  { name: 'last_modified', type: 'number', isOptional: true }\n  ```\n  **Don't** bump schema version or write a migration for this.\n\n### New\n\n- **Actions API**.\n\n  This was actually released in 0.8.0 but is now documented.\n  With Actions enabled, all create/update/delete/batch calls must be wrapped in an Action.\n\n  To use Actions, call `await database.action(async () => { /* perform writes here */ }`, and in\n  Model instance methods, you can just decorate the whole method with `@action`.\n\n  This is necessary for Watermelon Sync, and also to enable greater safety and consistency.\n\n  To enable actions, add `actionsEnabled: true` to `new Database({ ... })`. In a future release this\n  will be enabled by default, and later, made mandatory.\n\n  See documentation for more details.\n\n- **Watermelon Sync Adapter** (Experimental)\n\n  Added `synchronize()` function that allows you to easily add full synchronization capabilities to\n  your Watermelon app. You only need to provide two fetch calls to your remote server that conforms\n  to Watermelon synchronization protocol, and all the client-side processing (applying remote changes,\n  resolving conflicts, finding local changes, and marking them as synced) is done by Watermelon.\n\n  See documentation for more details.\n\n- **Support caching for non-global IDs at Native level**\n\n## 0.9.0 - 2018-11-23\n\n### New\n\n- Added `Q.like` - you can now make queries similar to SQL `LIKE`\n\n## 0.8.0 - 2018-11-16\n\n### New\n\n- Added `DatabaseProvider` and `withDatabase` Higher-Order Component to reduce prop drilling\n- Added experimental Actions API. This will be documented in a future release.\n\n### Fixes\n\n- Fixes crash on older Android React Native targets without `jsc-android` installed\n\n## 0.7.0 - 2018-10-31\n\n### Deprecations\n\n- [Schema] Column type 'bool' is deprecated — change to 'boolean'\n\n### New\n\n- Added support for Schema Migrations. See documentation for more details.\n- Added fundaments for integration of Danger with Jest\n\n### Changes\n\n- Fixed \"dependency cycle\" warning\n- [SQLite] Fixed rare cases where database could be left in an unusable state (added missing transaction)\n- [Flow] Fixes `oneOf()` typing and some other variance errors\n- [React Native] App should launch a little faster, because schema is only compiled on demand now\n- Fixed typos in README.md\n- Updated Flow to 0.85\n\n## 0.6.2 - 2018-10-04\n\n### Deprecations\n\n- The `@nozbe/watermelondb/babel/cjs` / `@nozbe/watermelondb/babel/esm` Babel plugin that ships with Watermelon is deprecated and no longer necessary. Delete it from your Babel config as it will be removed in a future update\n\n### Refactoring\n\n- Removed dependency on `async` (Web Worker should be ~30KB smaller)\n- Refactored `Collection` and `simpleObserver` for getting changes in an array and also adds CollectionChangeTypes for differentiation between different changes\n- Updated dependencies\n- Simplified build system by using relative imports\n- Simplified build package by outputting CJS-only files\n\n## 0.6.1 - 2018-09-20\n\n### Added\n\n- Added iOS and Android integration tests and lint checks to TravisCI\n\n### Changed\n\n- Changed Flow setup for apps using Watermelon - see docs/Advanced/Flow.md\n- Improved documentation, and demo code\n- Updated dependencies\n\n### Fixed\n\n- Add quotes to all names in sql queries to allow keywords as table or column names\n- Fixed running model tests in apps with Watermelon in the loop\n- Fixed Flow when using Watermelon in apps\n\n## 0.6.0 - 2018-09-05\n\nInitial release of WatermelonDB\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "<img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/needyou.jpg\" alt=\"We need you\" width=\"220\" />\n\n**WatermelonDB is an open-source project and it needs your help to thrive!**\n\nIf there's a missing feature, a bug, or other improvement you'd like, we encourage you to contribute! Feel free to open an issue to get some guidance and see [Contributing guide](./CONTRIBUTING.md) for details about project setup, testing, etc.\n\nIf you're just getting started, see [good first issues](https://github.com/Nozbe/WatermelonDB/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) that are easy to contribute to. If you make a non-trivial contribution, email me, and I'll send you a nice 🍉 sticker!\n\nIf you make or are considering making an app using WatermelonDB, please let us know!\n\n<br />\n\n\n## Before you send a pull request\n\n1. Did you add or changed some functionality?\n\n   Add (or modify) tests!\n2. Check if the automated tests pass\n   ```bash\n   yarn ci:check\n   ```\n3. Format the files you changed\n   ```bash\n   yarn prettier\n   ```\n4. Mark your changes in CHANGELOG\n\n   Put a one-line description of your change under Added/Changed section. See [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).\n\n## Running Watermelon in development\n\n### Download source and dependencies\n\n```bash\ngit clone https://github.com/Nozbe/WatermelonDB.git\ncd WatermelonDB\nyarn\n```\n\n### Developing Watermelon alongside your app\n\nTo work on Watermelon code in the sandbox of your app:\n\n```bash\nyarn dev\n```\n\nThis will create a `dev/` folder in Watermelon and observe changes to source files (only JavaScript files) and recompile them as needed.\n\nThen in your app:\n\n```bash\ncd node_modules/@nozbe\nrm -fr watermelondb\nln -s path-to-watermelondb/dev watermelondb\n```\n\n**This will work in Webpack but not in Metro** (React Native). Metro doesn't follow symlinks. Instead, you can compile WatermelonDB directly to your project:\n\n```bash\nDEV_PATH=\"/path/to/your/app/node_modules/@nozbe/watermelondb\" yarn dev\n```\n\n### Running tests\n\nThis runs Jest, ESLint and Flow:\n\n```bash\nyarn ci:check\n```\n\nYou can also run them separately:\n\n```bash\nyarn test\nyarn eslint\nyarn flow\n```\n\n### Editing files\n\nWe recommend VS Code with ESLint, Flow, and Prettier (with prettier-eslint enabled) plugins for best development experience. (To see lint/type issues inline + have automatic reformatting of code)\n\n## Editing native code\n\nIn `native/ios` and `native/android` you'll find the native bridge code for React Native.\n\nIt's recommended to use the latest stable version of Xcode / Android Studio to work on that code.\n\n### Integration tests\n\nIf you change native bridge code or `adapter/sqlite` code, it's recommended to run integration tests that run the entire Watermelon code with SQLite and React Native in the loop:\n\n```bash\nyarn test:ios\nyarn test:android\n```\n\n### Running tests manualy\n\n- For iOS open the `native/iosTest/WatermelonTester.xcworkspace` project and hit Cmd+U.\n- For Android open `native/androidTest` in AndroidStudio navigate to `app/src/androidTest/java/com.nozbe.watermelonTest/BridgeTest` and click green arrow near `class BridgeTest`\n\n### Native linting\n\nMake sure the native code you're editing conforms to Watermelon standards:\n\n```bash\nyarn ktlint\n```\n\n### Native code troubleshooting\n\n1. If `test:ios` fails in terminal:\n- Run tests in Xcode first before running from terminal\n- Make sure you have the right version of Xcode CLI tools set in Preferences -> Locations\n1. Make sure you're on the most recent stable version of Xcode / Android Studio\n1. Remove native caches:\n- Xcode: `~/Library/Developer/Xcode/DerivedData`:\n- Android: `.gradle` and `build` folders in `native/android` and `native/androidTest`\n- `node_modules` (because of React Native precompiled third party libraries)\n\n\n"
  },
  {
    "path": "Gemfile",
    "content": "source 'https://rubygems.org'\n\nruby \">= 2.6.10\"\n\ngem 'pry'\n\n# Cocoapods 1.15 introduced a bug which break the build. (RN 0.72) We will remove the upper\n# bound in the template on Cocoapods with next React Native release.\ngem 'cocoapods', '>= 1.13', '< 1.15'\ngem 'activesupport', '>= 6.1.7.5', '< 7.1.0' # temporary?\ngem 'xcodeproj', '< 1.26.0'\n\n# NOTE: TEMPORARY, for darwin-arm64 compatibility\ngem 'ffi', '>1.14.2'\ngem 'ethon', git: 'https://github.com/radex/ethon.git', ref: '301517d087830569985eb3945fa5a6c74866863f'\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) Nozbe\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "<p align=\"center\">\n  <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/logo-horizontal2.png\" alt=\"WatermelonDB\" width=\"539\" />\n</p>\n\n<h4 align=\"center\">\n  A reactive database framework\n</h4>\n\n<p align=\"center\">\n  Build powerful React and React Native apps that scale from hundreds to tens of thousands of records and remain <em>fast</em> ⚡️\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/Nozbe/WatermelonDB/blob/master/LICENSE\">\n    <img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\"/>\n  </a>\n\n  <a href=\"https://www.npmjs.com/package/@nozbe/watermelondb\">\n    <img src=\"https://img.shields.io/npm/v/@nozbe/watermelondb.svg\" alt=\"npm\"/>\n  </a>\n\n  <a href=\"https://gurubase.io/g/watermelondb\">\n    <img src=\"https://img.shields.io/badge/Gurubase-Ask%20WatermelonDB%20Guru-006BFF\" alt=\"Gurubase\"/>\n  </a>\n</p>\n\n|   | WatermelonDB |\n| - | ------------ |\n| ⚡️ | **Launch your app instantly** no matter how much data you have |\n| 📈 | **Highly scalable** from hundreds to tens of thousands of records |\n| 😎 | **Lazy loaded**. Only load data when you need it |\n| 🔄 | **Offline-first.** [Sync](https://watermelondb.dev/docs/Sync/Intro) with your own backend |\n| 📱 | **Multiplatform**. iOS, Android, Windows, web, and Node.js |\n| ⚛️ | **Optimized for React.** Easily plug data into components |\n| 🧰 | **Framework-agnostic.** Use JS API to plug into other UI frameworks |\n| ⏱ | **Fast.** And getting faster with every release! |\n| ✅ | **Proven.** Powers [Nozbe](https://nozbe.com/teams) since 2017 (and [many others](#who-uses-watermelondb)) |\n| ✨ | **Reactive.** (Optional) [RxJS](https://github.com/ReactiveX/rxjs) API |\n| 🔗 | **Relational.** Built on rock-solid [SQLite](https://www.sqlite.org) foundation |\n| ⚠️ | **Static typing** with [Flow](https://flow.org) or [TypeScript](https://typescriptlang.org) |\n\n## Why Watermelon?\n\n**WatermelonDB** is a new way of dealing with user data in React Native and React web apps.\n\nIt's optimized for building **complex applications** in React Native, and the number one goal is **real-world performance**. In simple words, _your app must launch fast_.\n\nFor simple apps, using Redux or MobX with a persistence adapter is the easiest way to go. But when you start scaling to thousands or tens of thousands of database records, your app will now be slow to launch (especially on slower Android devices). Loading a full database into JavaScript is expensive!\n\nWatermelon fixes it **by being lazy**. Nothing is loaded until it's requested. And since all querying is performed directly on the rock-solid [SQLite database](https://www.sqlite.org/index.html) on a separate native thread, most queries resolve in an instant.\n\nBut unlike using SQLite directly, Watermelon is **fully observable**. So whenever you change a record, all UI that depends on it will automatically re-render. For example, completing a task in a to-do app will re-render the task component, the list (to reorder), and all relevant task counters. [**Learn more**](https://www.youtube.com/watch?v=UlZ1QnFF4Cw).\n\n| <a href=\"https://www.youtube.com/watch?v=UlZ1QnFF4Cw\"><img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/watermelon-talk-thumbnail.jpg\" alt=\"React Native EU: Next-generation React Databases\" width=\"300\" /></a> |\n| ---- |\n| <p align=\"center\"><a href=\"https://www.youtube.com/watch?v=UlZ1QnFF4Cw\">📺 <strong>Next-generation React databases</strong><br/>(a talk about WatermelonDB)</a></p> |\n\n## Usage\n\n**Quick (over-simplified) example:** an app with posts and comments.\n\nFirst, you define Models:\n\n```js\nclass Post extends Model {\n  @field('name') name\n  @field('body') body\n  @children('comments') comments\n}\n\nclass Comment extends Model {\n  @field('body') body\n  @field('author') author\n}\n```\n\nThen, you connect components to the data:\n\n```js\nconst Comment = ({ comment }) => (\n  <View style={styles.commentBox}>\n    <Text>{comment.body} — by {comment.author}</Text>\n  </View>\n)\n\n// This is how you make your app reactive! ✨\nconst enhance = withObservables(['comment'], ({ comment }) => ({\n  comment,\n}))\nconst EnhancedComment = enhance(Comment)\n```\n\nAnd now you can render the whole Post:\n\n```js\nconst Post = ({ post, comments }) => (\n  <View>\n    <Text>{post.name}</Text>\n    <Text>Comments:</Text>\n    {comments.map(comment =>\n      <EnhancedComment key={comment.id} comment={comment} />\n    )}\n  </View>\n)\n\nconst enhance = withObservables(['post'], ({ post }) => ({\n  post,\n  comments: post.comments\n}))\n```\n\nThe result is fully reactive! Whenever a post or comment is added, changed, or removed, the right components **will automatically re-render** on screen. Doesn't matter if a change occurred in a totally different part of the app, it all just works out of the box!\n\n### ➡️ **Learn more:** [see full documentation](https://nozbe.github.io/WatermelonDB/)\n\n## Who uses WatermelonDB\n\n  <a href=\"https://nozbe.com/?c=watermelon\">\n    <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/apps/nozbe.png\" alt=\"Nozbe Teams\" width=\"300\" />\n  </a>\n\n  <br/>\n\n  <a href=\"https://capmo.de\">\n    <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/apps/capmo.png\" alt=\"CAPMO\" width=\"300\" />\n  </a>\n\n  <br/>\n\n  <a href=\"https://mattermost.com/\">\n    <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/apps/mattermost.png\" alt=\"Mattermost\" width=\"300\" />\n  </a>\n\n  <br/>\n\n  <a href=\"https://rocket.chat/\">\n    <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/apps/rocketchat.png\" alt=\"Rocket Chat\" width=\"300\" />\n  </a>\n\n  <br/>\n\n  <a href=\"https://steady.health\">\n    <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/apps/steady.png\" alt=\"Steady\" width=\"150\"/>\n  </a>\n\n  <br/>\n\n  <a href=\"https://aerobotics.com\">\n    <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/apps/aerobotics.png\" alt=\"Aerobotics\" width=\"300\" />\n  </a>\n\n  <br/>\n\n  <a href=\"https://smashappz.com\">\n    <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/apps/smashappz.jpg\" alt=\"Smash Appz\" width=\"300\" />\n  </a>\n\n  <br/>\n\n  <a href=\"https://halogo.com.au/\">\n    <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/apps/halogo_logo.png\" alt=\"HaloGo\" width=\"300\" />\n  </a>\n\n  <br/>\n\n  <a href=\"https://sportsrecruits.com/\">\n    <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/apps/sportsrecruits-logo.png\" alt=\"SportsRecruits\" width=\"300\" />\n  </a>\n\n  <br/>\n\n  <a href=\"https://chatable.io/\">\n    <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/apps/chatable_logo.png\" alt=\"Chatable\" width=\"300\" />\n  </a>\n\n  <br/>\n\n  <a href=\"https://todorant.com/\">\n    <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/apps/todorant-logo.png\" alt=\"Todorant\" width=\"300\" />\n  </a>\n\n  <br/>\n\n  <a href=\"https://blastworkout.app/\">\n    <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/apps/blastworkout-logo.png\" alt=\"Blast Workout\" width=\"300\" />\n  </a>\n\n  <br/>\n\n  <a href=\"https://dayful.app/\">\n    <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/apps/dayful.png\" alt=\"Dayful\" width=\"300\" />\n  </a>\n\n  <br/>\n\n  <a href=\"https://learnthewords.app/\">\n    <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/apps/learn-the-words.png\" alt=\"Learn The Words\" width=\"300\" />\n  </a>\n\n  <br/>\n\n  <a href=\"https://ezypack.app/\">\n    <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/apps/ezypack.png\" alt=\"ezypack\" width=\"300\" />\n  </a>\n\n  <br/>\n\n_Does your company or app use 🍉? Open a pull request and add your logo/icon with link here!_\n\n## Contributing\n\n<img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/needyou.jpg\" alt=\"We need you\" width=\"220\" />\n\n**WatermelonDB is an open-source project and it needs your help to thrive!**\n\nIf there's a missing feature, a bug, or other improvement you'd like, we encourage you to contribute! Feel free to open an issue to get some guidance and see [Contributing guide](./CONTRIBUTING.md) for details about project setup, testing, etc.\n\nIf you're just getting started, see [good first issues](https://github.com/Nozbe/WatermelonDB/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) that are easy to contribute to. If you make a non-trivial contribution, email me, and I'll send you a nice 🍉 sticker!\n\nIf you make or are considering making an app using WatermelonDB, please let us know!\n\n## Author and license\n\n**WatermelonDB** was created by [@Nozbe](https://github.com/Nozbe).\n\n**WatermelonDB's** main author and maintainer is [Radek Pietruszewski](https://github.com/radex) ([website](https://radex.io) ⋅ [𝕏 (Twitter)](https://twitter.com/radexp))\n\n[See all contributors](https://github.com/Nozbe/WatermelonDB/graphs/contributors).\n\nWatermelonDB is available under the MIT license. See the [LICENSE file](https://github.com/Nozbe/WatermelonDB/LICENSE) for more info.\n"
  },
  {
    "path": "SECURITY.md",
    "content": "# Reporting Security Issues\n\nIf you believe you've found a security vulnerability in WatermelonDB, let us know right away.\n\nMore details on how to responsibly disclose issues: https://nozbe.com/bug-bounty/\n\n## How WatermelonDB reports security vulnerabilities\n\nIf vulnerabilities are found, we'll post security advisories via GitHub once a confirmed patch is available.\n\nWe may choose to send a heads-up to a select list of higher-profile projects/organizations to alert them about a vulnerability before the public. Inclusion into this list is entirely at our own discretion. If we do send a heads-up before a public patch, we'll include the least amount of detail possible - only enough to work around an issue.\n\nIf we determine that it's in the best interest of all WatermelonDB users, we may choose to advise users to update to a new version of WatermelonDB or apply a workaround without revealing all details about the vulnerability. This may happen if we believe there's a very serious issue that's easy to patch but difficult to discover. If we do so, we will post a detailed explanation after a few weeks.\n"
  },
  {
    "path": "WatermelonDB.podspec",
    "content": "require \"json\"\n\npackage = JSON.parse(File.read(File.join(__dir__, 'package.json')))\n\nPod::Spec.new do |s|\n  s.name         = \"WatermelonDB\"\n  s.version      = package[\"version\"]\n  s.summary      = package[\"description\"]\n  s.description  = package[\"description\"]\n  s.homepage     = package[\"homepage\"]\n  s.license      = package[\"license\"]\n  s.author       = { \"author\" => package[\"author\"] }\n  s.platforms    = { :ios => \"12.0\", :tvos => \"12.0\" }\n  s.source = { :git => \"https://github.com/Nozbe/WatermelonDB.git\", :tag => \"v#{s.version}\" }\n  s.source_files = \"native/ios/**/*.{h,m,mm,swift,c,cpp}\", \"native/shared/**/*.{h,c,cpp}\"\n  s.public_header_files = [\n    # FIXME: I don't think we should be exporting all headers as public\n    # (although that is CocoaPods default behavior)\n    # but this is needed for WatermelonDB to work in use_frameworks! mode\n    # 'native/ios/**/*.h',\n    'native/ios/WatermelonDB/JSIInstaller.h',\n    'native/ios/WatermelonDB/WatermelonDB.h',\n  ]\n  s.pod_target_xcconfig = {\n    # FIXME: This is a workaround for broken build in use_frameworks mode\n    # I don't think this is a correct fix, but… seems to work?\n    # 'OTHER_SWIFT_FLAGS' => '-Xcc -Wno-error=non-modular-include-in-framework-module'\n  }\n  s.requires_arc = true\n  # simdjson is annoyingly slow without compiler optimization, disable for debugging\n  s.compiler_flags = '-Os'\n\n  s.dependency \"React\"\n\n  s.libraries = 'sqlite3'\n\n  # NOTE: This dependency doesn't seem to be needed anymore (tested on RN 0.66, 0.71), file an issue\n  # if this causes issues for you\n  # s.dependency \"React-jsi\"\n\n  # NOTE: NPM-vendored @nozbe/simdjson must be used, not the CocoaPods version\n  s.dependency \"simdjson\"\nend\n"
  },
  {
    "path": "babel.config.js",
    "content": "const plugins = [\n  [\n    '@babel/plugin-transform-runtime',\n    {\n      helpers: true,\n      // regenerator: true,\n    },\n  ],\n  [\n    '@babel/plugin-transform-modules-commonjs',\n    {\n      loose: true, // improves speed & code size; unlikely to be a problem\n      strict: false,\n      strictMode: true,\n      allowTopLevelThis: true,\n      // this would improve speed&code size but breaks 3rd party code. can we apply it to our paths only?\n      // (same with struct: true)\n      // noInterop: true,\n    },\n  ],\n  ['@babel/plugin-proposal-decorators', { legacy: true }],\n  '@babel/plugin-transform-flow-strip-types',\n  ['@babel/plugin-proposal-class-properties', { loose: true }],\n  [\n    '@babel/plugin-transform-classes',\n    {\n      loose: true, // spits out cleaner and faster output\n    },\n  ],\n  '@babel/plugin-syntax-dynamic-import',\n  '@babel/plugin-transform-block-scoping',\n  '@babel/plugin-proposal-json-strings',\n  '@babel/plugin-proposal-unicode-property-regex',\n  // See http://incaseofstairs.com/six-speed/ for speed comparison between native and transpiled ES6\n  '@babel/plugin-proposal-optional-chaining',\n  ['@babel/plugin-proposal-private-methods', { loose: true }],\n  '@babel/plugin-transform-template-literals',\n  '@babel/plugin-transform-literals',\n  '@babel/plugin-transform-function-name',\n  '@babel/plugin-transform-arrow-functions',\n  '@babel/plugin-proposal-nullish-coalescing-operator',\n  '@babel/plugin-transform-shorthand-properties',\n  '@babel/plugin-transform-spread',\n  [\n    '@babel/plugin-proposal-object-rest-spread',\n    {\n      // use fast Object.assign\n      loose: true,\n    },\n  ],\n  '@babel/plugin-transform-react-jsx',\n  [\n    '@babel/plugin-transform-computed-properties',\n    {\n      // 2-3x faster, unlikely to be an issue\n      loose: true,\n    },\n  ],\n  '@babel/plugin-transform-sticky-regex',\n  '@babel/plugin-transform-unicode-regex',\n  // TODO: fast-async is faster and cleaner, but causes a weird issue on older Android RN targets without jsc-android\n  // '@babel/plugin-transform-async-to-generator',\n  [\n    // TODO: We can get this faster by tweaking with options, but have to test thoroughly...\n    'module:fast-async',\n    {\n      spec: true,\n    },\n  ],\n]\n\nmodule.exports = {\n  env: {\n    development: {\n      plugins,\n    },\n    production: {\n      plugins: [\n        ...plugins,\n        'minify-flip-comparisons',\n        'minify-guarded-expressions',\n        'minify-dead-code-elimination',\n      ],\n    },\n    test: {\n      plugins: [...plugins, '@babel/plugin-syntax-jsx'],\n    },\n  },\n}\n"
  },
  {
    "path": "docs-website/.gitignore",
    "content": "# Dependencies\n/node_modules\n\n# Production\n/build\n\n# Generated files\n.docusaurus\n.cache-loader\n\n# Misc\n.DS_Store\n.env.local\n.env.development.local\n.env.test.local\n.env.production.local\n\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n"
  },
  {
    "path": "docs-website/README.md",
    "content": "# Website\n\nThis website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator.\n\n### Installation\n\n```\n$ yarn\n```\n\n### Local Development\n\n```\n$ yarn start\n```\n\nThis command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.\n\n### Build\n\n```\n$ yarn build\n```\n\nThis command generates static content into the `build` directory and can be served using any static contents hosting service.\n\n### Deployment\n\nUsing SSH:\n\n```\n$ USE_SSH=true yarn deploy\n```\n\nNot using SSH:\n\n```\n$ GIT_USER=<Your GitHub username> yarn deploy\n```\n\nIf you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch.\n"
  },
  {
    "path": "docs-website/babel.config.js",
    "content": "module.exports = {\n  presets: [require.resolve('@docusaurus/core/lib/babel/preset')],\n};\n"
  },
  {
    "path": "docs-website/blog/2021-08-01-mdx-blog-post.mdx",
    "content": "---\nslug: mdx-blog-post\ntitle: MDX Blog Post\nauthors: [radex]\ntags: [docusaurus]\n---\n\nBlog posts support [Docusaurus Markdown features](https://docusaurus.io/docs/markdown-features), such as [MDX](https://mdxjs.com/).\n\n<!--truncate-->\n\n:::tip\n\nUse the power of React to create interactive blog posts.\n\n```js\n<button onClick={() => alert('button clicked!')}>Click me!</button>\n```\n\n<button onClick={() => alert('button clicked!')}>Click me!</button>\n\n:::\n"
  },
  {
    "path": "docs-website/blog/authors.yml",
    "content": "radex:\n  name: Radek Pietruszewski\n  title: Maintainer of WatermelonDB\n  url: https://github.com/radex\n  image_url: https://avatars.githubusercontent.com/u/183747?v=4\n"
  },
  {
    "path": "docs-website/docs/docs/Advanced/AdvancedFields.md",
    "content": "# Advanced Fields\n\n## `@json`\n\nIf you have a lot of metadata about a record (say, an object with many keys, or an array of values), you can use a `@json` field to contain that information in a single string column (serialized to JSON) instead of adding multiple columns or a relation to another table.\n\n⚠️ This is an advanced feature that comes with downsides — make sure you really need it\n\nFirst, add a string column to [the schema](../Schema.md):\n\n```js\ntableSchema({\n  name: 'comments',\n  columns: [\n    { name: 'reactions', type: 'string' }, // You can add isOptional: true, if appropriate\n  ],\n})\n```\n\nThen in the Model definition:\n\n```js\nimport { json } from '@nozbe/watermelondb/decorators'\n\nclass Comment extends Model {\n  // ...\n  @json('reactions', sanitizeReactions) reactions\n}\n```\n\nNow you can set complex JSON values to a field:\n\n```js\ncomment.update(() => {\n  comment.reactions = ['up', 'down', 'down']\n})\n```\n\nAs the second argument, pass a **sanitizer function**. This is a function that receives whatever `JSON.parse()` returns for the serialized JSON, and returns whatever type you expect in your app. In other words, it turns raw, dirty, untrusted data (that might be missing, or malformed by a bug in previous version of the app) into trusted format.\n\nThe sanitizer might also receive `null` if the column is nullable, or `undefined` if the field doesn't contain valid JSON.\n\nFor example, if you need the field to be an array of strings, you can ensure it like so:\n\n```js\nconst sanitizeReactions = rawReactions => {\n  return Array.isArray(rawReactions) ? rawReactions.map(String) : []\n}\n```\n\nIf you don't want to sanitize JSON, pass an identity function:\n\n```js\nconst sanitizeReactions = json => json\n```\n\nThe sanitizer function takes an optional second argument, which is a reference to the model. This is useful is your sanitization logic depends on the other fields in the model.\n\n**Warning about JSON fields**:\n\nJSON fields go against relational, lazy nature of Watermelon, because **you can't query or count by the contents of JSON fields**. If you need or might need in the future to query records by some piece of data, don't use JSON.\n\nOnly use JSON fields when you need the flexibility of complex freeform data, or the speed of having metadata without querying another table, and you are sure that you won't need to query by those metadata.\n\n## `@nochange`\n\nFor extra protection, you can mark fields as `@nochange` to ensure they can't be modified. Always put `@nochange` before `@field` / `@date` / `@text`\n\n```js\nimport { field, nochange } from '@nozbe/watermelondb/decorators'\n\nclass User extends Model {\n  // ...\n  @nochange @field('is_owner') isOwner\n}\n```\n\n`user.isOwner` can only be set in the `collection.create()` block, but will throw an error if you try to set a new value in `user.update()` block.\n\n### `@readonly`\n\nSimilar to `@nochange`, you can use the `@readonly` decorator to ensure a field cannot be set at all. Use this for [create/update tracking](./CreateUpdateTracking.md), but it might also be useful if you use Watermelon with a [Sync engine](../Sync/Intro.md) and a field can only be set by the server.\n\n## Custom observable fields\n\nYou're in advanced [RxJS](https://github.com/ReactiveX/rxjs) territory now! You have been warned.\n\nSay, you have a Post model that has many Comments. And a Post is considered to be \"popular\" if it has more than 10 comments.\n\nYou can add a \"popular\" badge to a Post component in two ways.\n\nOne is to simply observe how many comments there are [in the component](../Components.md):\n\n```js\nconst enhance = withObservables(['post'], ({ post }) => ({\n  post: post.observe(),\n  commentCount: post.comments.observeCount()\n}))\n```\n\nAnd in the `render` method, if `props.commentCount > 10`, show the badge.\n\nAnother way is to define an observable property on the Model layer, like so:\n\n```js\nimport { distinctUntilChanged, map as map$ } from 'rxjs/operators'\nimport { lazy } from '@nozbe/watermelondb/decorators'\n\nclass Post extends Model {\n  @lazy isPopular = this.comments.observeCount().pipe(\n    map$(comments => comments > 10),\n    distinctUntilChanged()\n  )\n}\n```\n\nAnd then you can directly connect this to the component:\n\n```js\nconst enhance = withObservables(['post'], ({ post }) => ({\n  isPopular: post.isPopular,\n}))\n```\n\n`props.isPopular` will reflect whether or not the Post is popular. Note that this is fully observable, i.e. if the number of comments rises above/falls below the popularity threshold, the component will re-render. Let's break it down:\n\n- `this.comments.observeCount()` - take the Observable number of comments\n- `map$(comments => comments > 10)` - transform this into an Observable of boolean (popular or not)\n- `distinctUntilChanged()` - this is so that if the comment count changes, but the popularity doesn't (it's still below/above 10), components won't be unnecessarily re-rendered\n- `@lazy` - also for performance (we only define this Observable once, so we can re-use it for free)\n\nLet's make this example more complicated. Say the post is **always** popular if it's marked as starred. So if `post.isStarred`, then we don't have to do unnecessary work of fetching comment count:\n\n```js\nimport { of as of$ } from 'rxjs/observable/of'\nimport { distinctUntilChanged, map as map$ } from 'rxjs/operators'\nimport { lazy } from '@nozbe/watermelondb/decorators'\n\nclass Post extends Model {\n  @lazy isPopular = this.observe().pipe(\n    distinctUntilKeyChanged('isStarred'),\n    switchMap(post =>\n      post.isStarred ?\n        of$(true) :\n        this.comments.observeCount().pipe(map$(comments => comments > 10))\n    ),\n    distinctUntilChanged(),\n  )\n}\n```\n\n- `this.observe()` - if the Post changes, it might change its popularity status, so we observe it\n- `this.comments.observeCount().pipe(map$(comments => comments > 10))` - this part is the same, but we only observe it if the post is starred\n- `switchMap(post => post.isStarred ? of$(true) : ...)` - if the post is starred, we just return an Observable that emits `true` and never changes.\n- `distinctUntilKeyChanged('isStarred')` - for performance, so that we don't re-subscribe to comment count Observable if the post changes (only if the `isStarred` field changes)\n- `distinctUntilChanged()` - again, don't emit new values, if popularity doesn't change\n"
  },
  {
    "path": "docs-website/docs/docs/Advanced/CreateUpdateTracking.md",
    "content": "---\ntitle: Automatic create/update tracking\nhide_title: true\n---\n\n# Create/Update tracking\n\nYou can add per-table support for create/update tracking. When you do this, the Model will have information about when it was created, and when it was last updated.\n\n:warning: **Note:** WatermelonDB automatically sets and persists the `created_at`/`updated_at` fields if they are present as _millisecond_ epoch's. If you intend to interact with these properties in any way you should always treat them as such.\n\n### When to use this\n\n**Use create tracking**:\n\n- When you display to the user when a thing (e.g. a Post, Comment, Task) was created\n- If you sort created items chronologically (Note that Record IDs are random strings, not auto-incrementing integers, so you need create tracking to sort chronologically)\n\n**Use update tracking**:\n\n- When you display to the user when a thing (e.g. a Post) was modified\n\n**Notes**:\n - you _don't have to_ enable both create and update tracking. You can do either, both, or none.\n - In your model, these fields need to be called createdAt and updatedAt respectively.\n\n### How to do this\n\n**Step 1:** Add to the [schema](../Schema.md):\n\n```js\ntableSchema({\n  name: 'posts',\n  columns: [\n    // other columns\n    { name: 'created_at', type: 'number' },\n    { name: 'updated_at', type: 'number' },\n  ]\n}),\n```\n\n**Step 2:** Add this to the Model definition:\n\n```js\nimport { date, readonly } from '@nozbe/watermelondb/decorators'\n\nclass Post extends Model {\n  // ...\n  @readonly @date('created_at') createdAt\n  @readonly @date('updated_at') updatedAt\n}\n```\n\nAgain, you can add just `created_at` column and field if you don't need update tracking.\n\n### How this behaves\n\nIf you have the magic `createdAt` field defined on the Model, the current timestamp will be set when you first call `collection.create()` or `collection.prepareCreate()`. It will never be modified again.\n\nIf the magic `updatedAt` field is also defined, then after creation, `model.updatedAt` will have the same value as `model.createdAt`. Then every time you call `model.update()` or `model.prepareUpdate()`, `updatedAt` will be changed to the current timestamp.\n"
  },
  {
    "path": "docs-website/docs/docs/Advanced/Flow.md",
    "content": "---\ntitle: Flow\nhide_title: true\n---\n\n# Watermelon ❤️ Flow\n\nWatermelon was developed with [Flow](https://flow.org) in mind.\n\nIf you're a Flow user yourself (and we highly recommend it!), here's some things you need to keep in mind:\n\n## Setup\n\nAdd this to your `.flowconfig` file so that Flow can see Watermelon's types.\n\n```ini\n[declarations]\n<PROJECT_ROOT>/node_modules/@nozbe/watermelondb/.*\n\n[options]\n\nmodule.name_mapper='^@nozbe/watermelondb\\(.*\\)$' -> '<PROJECT_ROOT>/node_modules/@nozbe/watermelondb/src\\1'\n```\n\nNote that this won't work if you put the entire `node_modules/` folder under the `[ignore]` section. In that case, change it to only ignore the specific node modules that throw errors in your app, so that Flow can scan Watermelon files.\n\n## Tables and columns\n\nTable and column names are **opaque types** in Flow.\n\nSo if you try to use simple strings, like so:\n\n```js\nclass Comment extends Model {\n  static table = 'comments'\n\n  @text('body') body\n}\n```\n\nYou'll get errors, because you're passing `'comments'` (a `string`) where `TableName<Comment>` is expected, and `'body'` (again, a `string`) where `ColumnName` is expected.\n\nWhen using Watermelon with Flow, you must pre-define all your table and column names in one place, then only use those symbols (and not strings) in all other places.\n\nWe recommend defining symbols like this:\n\n```js\n// File: model/schema.js\n// @flow\n\nimport { tableName, columnName, type TableName, appSchema, tableSchema } from '@nozbe/watermelondb'\nimport type Comment from './Comment.js'\n\nexport const Tables = {\n  comments: (tableName('comments'): TableName<Comment>),\n  // ...\n}\n\nexport const Columns = {\n  comments: {\n    body: columnName('body'),\n    // ...\n  }\n}\n\nexport const appSchema = appSchema({\n  version: 1,\n  tables: [\n    tableSchema({\n      name: Tables.comments,\n      columns: [\n        { name: Columns.comments.body, type: 'string' },\n      ],\n    }),\n    // ...\n  ]\n})\n```\n\nAnd then using them like so:\n\n```js\n// File: model/Comment.js\n// @flow\n\nimport { Model } from '@nozbe/watermelondb'\nimport { text } from '@nozbe/watermelondb/decorators'\n\nimport { Tables, Columns } from './schema.js'\n\nconst Column = Columns.comments\n\nexport default class Comment extends Model {\n  static table = Tables.comments\n\n  @text(Column.body) body: string\n}\n```\n\n### But isn't that a lot of boilerplate?\n\nYes, it looks more boilerplate'y than the non-Flow examples, however:\n\n- you're protected from typos — strings are defined once\n- easier refactoring — you only change column name in one place\n- no orphan columns or tables — no way to accidentally refer to a column or table that was removed from the schema\n- `TableName` is typed with the model class it refers to, which allows Flow to find other mistakes in your code\n\nIn general, we find that untyped string constants lead to bugs, and defining typed constants is a good practice.\n\n### associations\n\nWhen using Flow, you define model associations like this:\n\n```js\nimport { Model, associations } from '@nozbe/watermelondb'\nimport { Tables, Columns } from './schema.js'\n\nconst Column = Columns.posts\n\nclass Post extends Model {\n  static table = Tables.posts\n  static associations = associations(\n    [Tables.comments, { type: 'has_many', foreignKey: Columns.comments.postId }],\n    [Tables.users, { type: 'belongs_to', key: Column.authorId }],\n  )\n}\n```\n\n## Common types\n\nMany types are tagged with the model class the type refers to:\n\n```js\nTableName<Post> // a table name referring to posts\nCollection<Post> // the Collection for posts\nRelation<Comment> // a relation that can fetch a Comment\nRelation<?Comment> // a relation that can fetch a Comment or `null`\nQuery<Comment> // a query that can fetch many Comments\n```\n\nAlways mark the type of model fields. Remember to include `?` if the underlying table column is optional. Flow can't check if model fields match the schema or if they match the decorator's signature.\n\n```js\n@text(Column.body) body: string\n@date(Column.createdAt) createdAt: Date\n@date(Column.archivedAt) archivedAt: ?Date\n```\n\nIf you need to refer to an ID of a record, always use the `RecordId` type alias, not `string` (they're the same, but the former is self-documenting).\n\nIf you ever access the record's raw data (DON'T do that unless you *really* know what you're doing), use `DirtyRaw` to refer to raw data from external sources (database, server), and `RawRecord` after it was passed through `sanitizedRaw`.\n"
  },
  {
    "path": "docs-website/docs/docs/Advanced/LocalStorage.md",
    "content": "---\ntitle: LocalStorage\nhide_title: true\n---\n\n# Local storage\n\nWatermelonDB has a simple key/value store, similar to [localStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage):\n\n```js\n// setting a value\nawait database.localStorage.set(\"user_id\", \"abcdef\")\n\n// retrieving a value\nconst userId = await database.localStorage.get(\"user_id\") // string or undefined if no value for this key\n\n// removing a value\nawait database.localStorage.remove(\"user_id\")\n```\n\n**When to use it**. For things like the ID of the logged-in user, or the route to the last-viewed screen in the app. You should generally avoid it and stick to standard Watermelon records.\n\n**This is a low-level API**. You can't do things like observe changes of a value over time. If you need that, just use standard WatermelonDB records. You can only store JSON-serializable values\n\n**What to be aware of**. DO NOT let the local storage key be a user-supplied value. Only allow predefined/whitelisted keys. Key names starting with `__` are reserved for WatermelonDB use (e.g. used by Sync to remember time of last sync)\n\n**Why not use localStorage/AsyncStorage?** Because this way, you have only one source of truth — one database that, say, stores the logged-in user ID and the information about all users. So there's a lower risk that the two sets of values get out of sync.\n"
  },
  {
    "path": "docs-website/docs/docs/Advanced/Logging.md",
    "content": "# Logging\n\nBy default, Watermelon ships with basic logging enabled that may be useful for debugging. When the application is started, basic information\nabout the location and setup of the database will be logged. As each query is executed, timing information will be logged.\n\n## Disabling logging \n\nDisabling all logging is simple. Before your app starts, typically in your `database.js` file, import the logger and silence it:\n\n```js\nimport logger from '@nozbe/watermelondb/utils/common/logger';\nlogger.silence();\n```\n\n## Overriding logging behavior\n\n> **Note**: This class is not yet formally documented and its specifications may change. This method is for advanced users only, with\n> some tolerance for potential breaking changes in the future.\n\nThe logger is a singleton instance of the Logger class, which exposes three methods: `log()`, `warn()`, and `error()`. Advanced users\nmay monkey-patch the logger methods to change their behavior, such as to route messages to an alternate logger: \n\n```js\nimport Cabin from 'cabin';\nimport logger from '@nozbe/watermelondb/utils/common/logger';\n\nconst cabin = new Cabin();\nlogger.log = (...messages) => cabin.info(...messages);\nlogger.warn = (...messages) => cabin.error(...messages);\nlogger.error = (...messages) => cabin.error(...messages);\n```\n"
  },
  {
    "path": "docs-website/docs/docs/Advanced/Migrations.md",
    "content": "# Migrations\n\n**Schema migrations** is the mechanism by which you can add new tables and columns to the database in a backward-compatible way.\n\nWithout migrations, if a user of your app upgrades from one version to another, their local database will be cleared at launch, and they will lose all their data.\n\n⚠️ Always use migrations!\n\n## Migrations setup\n\n1. Add a new file for migrations:\n\n   ```js\n   // app/model/migrations.js\n\n   import { schemaMigrations } from '@nozbe/watermelondb/Schema/migrations'\n\n   export default schemaMigrations({\n     migrations: [\n       // We'll add migration definitions here later\n     ],\n   })\n   ```\n\n2. Hook up migrations to the Database adapter setup:\n\n   ```js\n   // index.js\n   import migrations from 'model/migrations'\n\n   const adapter = new SQLiteAdapter({\n     schema: mySchema,\n     migrations,\n   })\n   ```\n\n## Migrations workflow\n\nWhen you make schema changes when you use migrations, be sure to do this in this specific order, to minimize the likelihood of making an error.\n\n### Step 1: Add a new migration\n\nFirst, define the migration - that is, define the **change** that occurs between two versions of schema (such as adding a new table, or a new table column).\n\nDon't change the schema file yet!\n\n```js\n// app/model/migrations.js\n\nimport { schemaMigrations, createTable } from '@nozbe/watermelondb/Schema/migrations'\n\nexport default schemaMigrations({\n  migrations: [\n    {\n      // ⚠️ Set this to a number one larger than the current schema version\n      toVersion: 2,\n      steps: [\n        // See \"Migrations API\" for more details\n        createTable({\n          name: 'comments',\n          columns: [\n            { name: 'post_id', type: 'string', isIndexed: true },\n            { name: 'body', type: 'string' },\n          ],\n        }),\n      ],\n    },\n  ],\n})\n```\n\nRefresh your simulator/browser. You should see this error:\n\n> Migrations can't be newer than schema. Schema is version 1 and migrations cover range from 1 to 2\n\nIf so, good, move to the next step!\n\nBut you might also see an error like \"Missing table name in schema\", which means you made an error in defining migrations. See [\"Migrations API\" below](#migrations-api) for details.\n\n### Step 2: Make matching changes in schema\n\nNow it's time to make the actual changes to the schema file — add the same tables or columns as in your migration definition\n\n⚠️ Please double and triple check that your changes to schema match exactly the change you defined in the migration. Otherwise you risk that the app will work when the user migrates, but will fail if it's a fresh install — or vice versa.\n\n⚠️ Don't change the schema version yet\n\n```js\n// model/schema.js\n\nexport default appSchema({\n  version: 1,\n  tables: [\n    // This is our new table!\n    tableSchema({\n      name: 'comments',\n      columns: [\n        { name: 'post_id', type: 'string', isIndexed: true },\n        { name: 'body', type: 'string' },\n      ],\n    }),\n    // ...\n  ]\n})\n```\n\nRefresh the simulator. You should again see the same \"Migrations can't be newer than schema\" error. If you see a different error, you made a syntax error.\n\n### Step 3: Bump schema version\n\nNow that we made matching changes in the schema (source of truth about tables and columns) and migrations (the change in tables and columns), it's time to commit the change by bumping the version:\n\n```js\n// model/schema.js\n\nexport default appSchema({\n  version: 2,\n  tables: [\n    // ...\n  ]\n})\n```\n\nIf you refresh again, your app should show up without issues — but now you can use the new tables/columns\n\n### Step 4: Test your migrations\n\nBefore shipping a new version of the app, please check that your database changes are all compatible:\n\n1. Migrations test: Install the previous version of your app, then update to the version you're about to ship, and make sure it still works\n2. Fresh schema install test: Remove the app, and then install the _new_ version of the app, and make sure it works\n\n### Why is this order important\n\nIt's simply because React Native simulator (and often React web projects) are configured to automatically refresh when you save a file. You don't want the database to accidentally migrate (upgrade) with changes that have a mistake, or changes you haven't yet completed making. By making migrations first, and bumping version last, you can double check you haven't made a mistake.\n\n## Migrations API\n\nEach migration must migrate to a version one above the previous migration, and have multiple _steps_ (such as adding a new table, or new columns). Larger example:\n\n```js\nschemaMigrations({\n  migrations: [\n    {\n      toVersion: 3,\n      steps: [\n        createTable({\n          name: 'comments',\n          columns: [\n            { name: 'post_id', type: 'string', isIndexed: true },\n            { name: 'body', type: 'string' },\n          ],\n        }),\n        addColumns({\n          table: 'posts',\n          columns: [\n            { name: 'subtitle', type: 'string', isOptional: true },\n            { name: 'is_pinned', type: 'boolean' },\n          ],\n        }),\n      ],\n    },\n    {\n      toVersion: 2,\n      steps: [\n        // ...\n      ],\n    },\n  ],\n})\n```\n\n### Migration steps:\n\n- `createTable({ name: 'table_name', columns: [ ... ] })` - same API as `tableSchema()`\n- `addColumns({ table: 'table_name', columns: [ ... ] })` - you can add one or multiple columns to an existing table. The columns table has the same format as in schema definitions\n- Other types of migrations (e.g. deleting or renaming tables and columns) are not yet implemented. See [`migrations/index.js`](https://github.com/Nozbe/WatermelonDB/blob/master/src/Schema/migrations/index.js). Please contribute!\n\n## Database reseting and other edge cases\n\n1. When you're **not** using migrations, the database will reset (delete all its contents) whenever you change the schema version.\n2. If the migration fails, the database will fail to initialize, and will roll back to previous version. This is unlikely, but could happen if you, for example, create a migration that tries to create the same table twice. The reason why the database will fail instead of reset is to avoid losing user data (also it's less confusing in development). You can notice the problem, fix the migration, and ship it again without data loss.\n3. When database in the running app has *newer* database version than the schema version defined in code, the database will reset (clear its contents). This is useful in development.\n4. If there's no available migrations path (e.g. user has app with database version 4, but oldest migration is from version 10 to 11), the database will reset.\n\n### Rolling back changes\n\nThere's no automatic \"rollback\" feature in Watermelon. If you make a mistake in migrations during development, roll back in this order:\n\n1. Comment out any changes made to schema.js\n2. Comment out any changes made to migrations.js\n3. Decrement schema version number (bring back the original number)\n\nAfter refreshing app, the database should reset to previous state. Now you can correct your mistake and apply changes again (please do it in order described in \"Migrations workflow\").\n\n### Unsafe SQL migrations\n\nSimilar to [Schema](../Schema.md), you can add `unsafeSql` parameter to every migration step to modify or replace SQL generated by WatermelonDB to perform the migration. There is also an `unsafeExecuteSql('some sql;')` step you can use to append extra SQL. Those are ignored with LokiJSAdapter and for the purposes of [migration syncs](../Sync/Intro.md).\n"
  },
  {
    "path": "docs-website/docs/docs/Advanced/Performance.md",
    "content": "---\ntitle: Performance Tips\nhide_title: true\n---\n\n# Performance\n\nPerformance tips — TODO\n"
  },
  {
    "path": "docs-website/docs/docs/Advanced/ProTips.md",
    "content": "---\ntitle: Pro Tips\nhide_title: true\n---\n\n# Various Pro Tips\n\n## Database viewer\n\n[See discussion](https://github.com/Nozbe/WatermelonDB/issues/710)\n\n**Android** - you can use the new [App Inspector](https://medium.com/androiddevelopers/database-inspector-9e91aa265316) in modern versions of Android Studio.\n\n**Via Flipper** You can also use Facebook Flipper [with a plugin](https://github.com/panz3r/react-native-flipper-databases#readme). See [discussion](https://github.com/Nozbe/WatermelonDB/issues/653).\n\n**iOS** - check open database path in iOS System Log (via Console for plugged-in device, or Xcode logs, or [by using `find`](https://github.com/Nozbe/WatermelonDB/issues/710#issuecomment-776255654)), then open it via `sqlite3` in the console, or an external tool like [sqlitebrowser](https://sqlitebrowser.org)\n\n## Which SQLite version am I using?\n\nThis usually only matters if you use raw SQL to use new SQLite versions:\n\n- On iOS, we use whatever SQLite version is bundled with the OS. [Here's a table of iOS version - SQLite version matches](https://github.com/yapstudios/YapDatabase/wiki/SQLite-version-(bundled-with-OS))\n- On Android in JSI mode, we use SQLite bundled with WatermelonDB. See `@nozbe/sqlite` NPM dependency version to see which SQLite version is bundled.\n- On Android NOT in JSI mode, we use the SQLite bundled with the OS\n\nBTW: We're happy to accept contributions so that you can choose custom version or build of SQLite in all modes and on all platforms, but it needs to be opt-in (this adds to build time and binary size and most people don't need this)\n\n## Prepopulating database on native\n\nThere's no built-in support for this. One way is to generate a SQLite DB (you can use the the Node SQLite support in 0.19.0-2 pre-release or extract it from an ios/android app), bundle it with the app, and then use a bit of code to check if the DB you're expecting it available, and if not, making a copy of the default DB — before you attempt loading DB from JS side. [See discussion](https://github.com/Nozbe/WatermelonDB/issues/774#issuecomment-667981361)\n\n## Override entity ID generator\n\nYou can optionally overide WatermelonDB's id generator with your own custom id generator in order to create specific random id formats (e.g. if UUIDs are used in the backend). In your database index file, pass a function with your custom ID generator to `setGenerator`:\n\n```\n// Define a custom ID generator.\nfunction randomString(): string {\n  return 'RANDOM STRING';\n}\nsetGenerator(randomString);\n\n// or as anonymous function:\nsetGenerator(() => 'RANDOM STRING');\n```\n\nTo get UUIDs specifically, install [uuid](https://github.com/uuidjs/uuid) and then pass their id generator to `setGenerator`:\n\n```\nimport { v4 as uuidv4 } from 'uuid';\n\nsetGenerator(() => uuidv4());\n```\n"
  },
  {
    "path": "docs-website/docs/docs/Advanced/SharingDatabaseAcrossTargets.md",
    "content": "# iOS - Sharing database across targets\n\nIn case you have multiple Xcode targets and want to share your WatermelonDB instance across them, there are 2 options to be followed: via JS or via native Swift / Objective-C.\n\n### When to use this\n\nWhen you want to access the same database data in 2 or more Xcode targets (Notification Service Extension, Share Extension, iMessage stickers, etc).\n\n### How to do this\n\n**Step 1:** Setting up an App Group\n\nThrough Xcode, repeat this process for your **main target** and **every other target** that you want to share the database with:\n- Click on target name\n- Click **Signing and Capabilities**\n- Click **+ Capability**\n- Select **App Groups**\n- Provide your App Group name, usually `group.$(PRODUCT_BUNDLE_IDENTIFIER)` (e.g.: `group.com.example.MyAwesomeApp`)\n\n> Note: the App Group name must be the **exact same** for every target\n\nThis tells iOS to share storage directories between your targets, and in this case, also the Watermelon database.\n\n**Step 2**: Setting up `dbName`:\n\n**Option A**: Via JS\n\n> Note: although this method is simpler, it has the disadvantage of breaking Chrome remote debugging\n\n1. Install [rn-fetch-blob](https://github.com/joltup/rn-fetch-blob#installation)\n\n2. In your JS, when creating the database, get the App Group path using `rn-fetch-blob`:\n\n    ```ts\n    import { NativeModules, Platform } from 'react-native';\n    import { Database } from '@nozbe/watermelondb';\n    import SQLiteAdapter from '@nozbe/watermelondb/adapters/sqlite';\n    import schema from './schema';\n    import RNFetchBlob from 'rn-fetch-blob';\n\n    const getAppGroupPath = (): string => {\n      let path = '';\n\n      if (Platform.OS === 'ios') {\n        path = `${RNFetchBlob.fs.syncPathAppGroup('group.com.example.MyAwesomeApp')}/`;\n      }\n\n      return path;\n    }\n\n    const adapter = new SQLiteAdapter({\n      dbName: `${getAppGroupPath()}default.db`,\n      schema,\n    });\n\n    const database = new Database({\n      adapter,\n      modelClasses: [\n        ...\n      ],\n    });\n\n    export default database;\n    ```\n\n**Option B**: Via native Swift / Objective-C\n\n1. Through Xcode, repeat this process for your **main target** and **every other target** that you want to share the database with:\n    - Edit `Info.plist`\n    - Add a new row with `AppGroup` as key and `group.$(PRODUCT_BUNDLE_IDENTIFIER)` (set up in Step 1) as value.\n\n2. Right-click your project name and click **New Group**.\n3. Add a file named `AppGroup.m` and paste the following:\n    ```\n    #import \"React/RCTBridgeModule.h\"\n    @interface RCT_EXTERN_MODULE(AppGroup, NSObject)\n    @end\n    ```\n4. Add a file named `AppGroup.swift` and paste the following:\n    ```\n   import Foundation\n\n   @objc(AppGroup)\n   class AppGroup: NSObject {\n\n     @objc\n     func constantsToExport() -> [AnyHashable : Any]! {\n       var path = \"\"\n       if let suiteName = Bundle.main.object(forInfoDictionaryKey: \"AppGroup\") as? String {\n         if let directory = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: suiteName) {\n           path = directory.path\n         }\n       }\n\n       return [\"path\": \"\\(path)/\"]\n     }\n   }\n    ```\n   This reads your new `Info.plist` row and exports a constant called `path` with your App Group path (shared directory path), to be used in your JS code.\n\n5. In your JS, when creating the database, import the `path` constant from your new `AppGroup` module and prepend to your `dbName`:\n\n    ```ts\n    import { NativeModules, Platform } from 'react-native';\n    import { Database } from '@nozbe/watermelondb';\n    import SQLiteAdapter from '@nozbe/watermelondb/adapters/sqlite';\n    import schema from './schema';\n\n    const getAppGroupPath = (): string => {\n      let path = '';\n\n      if (Platform.OS === 'ios') {\n        path = NativeModules.AppGroup.path;\n      }\n\n      return path;\n    }\n\n    const adapter = new SQLiteAdapter({\n      dbName: `${getAppGroupPath()}default.db`,\n      schema,\n    });\n\n    const database = new Database({\n      adapter,\n      modelClasses: [\n        ...\n      ],\n    });\n\n    export default database;\n    ```\n\nThis way you're telling Watermelon to store your database into the shared directories, you're ready to go!\n"
  },
  {
    "path": "docs-website/docs/docs/CHANGELOG.md",
    "content": "# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nContributors: Please add your changes to CHANGELOG-Unreleased.md\n\n## 0.28 - 2025-04-07\n\n### BREAKING CHANGES\n\n- [iOS] Podspec deployment target was bumped from iOS 11 to iOS 12\n- [Android] Installation of Android JSI adapter has changed. To migrate, remove `getJSIModulePackage()` override in your `MainApplication.{java,kt}`, and add `new WatermelonDBJSIPackage()` to `getPackages()` override instead. See Installation docs for details.\n\n### New features\n\n- Added `Database#experimentalIsVerbose` option\n- Support for React Native 0.74+\n\n### Fixes\n\n- [ts] Improved LocalStorage type definition\n- [ts] Add missing .d.ts for experimentalFailsafe decorator\n- [migrations] `unsafeExecuteSql` migration is now validate to ensure it ends with a semicolon (#1811)\n\n### Changes\n\n- Minimum supported Node.js version is now 18.x\n- Improved Model diagnostic errors now always contain `table#id` of offending record\n- Update `better-sqlite3` to 11.x\n- Update sqlite (used by Android in JSI mode) to 3.46.0\n- [docs] Improved Android installation docs\n- [docs] Removed examples from the codebase as they were unmaintained\n\n### Internal\n\n- Update internal dependencies\n\n## 0.27.1 - 2023-10-15\n\nFix missing Changelog for 0.27 release\n\n## 0.27 - 2023-08-29\n\n### Highlights\n\n**Removed legacy Swift and Kotlin React Native Modules**\n\nFollowing the addition of new Native Modules in 0.26, we're removing the old implementations. We expect this to simplify installation process and remove a ton of compatibility and configuration issues due to Kotlin version mismatchs and the CocoaPods-Swift issues when using `use_frameworks!` or Expo.\n\n**Experimental React Native Windows support**\n\nWatermelonDB now has _experimental_ support for React Native Windows. See Installation docs for details.\n\n**Introducing Watermelon React**\n\nAll React/React Native helpers for Watermelon are now available from a new `@nozbe/watermelodb/react` folder:\n\n- `DatabaseProvider`, `useDatabase`, `withDatabase`\n- NEW: `withObservables` - `@nozbe/with-observables` as a separate package is deprecated, and is now bundled with WatermelonDB\n- NEW: HOC helpers: `compose`, `withHooks`\n- NEW: `&lt;WithObservables />` component, a component version of `withObservables` HOC. Useful when a value being observed is localized to a small part of a larger component, because you can effortlessly narrow down which parts of the component are re-rendered when the value changes without having to extract a new component.\n\nImports from previous `@nozbe/watermelondb/DatabaseProvider` and `@nozbe/watermelondb/hooks` folders are deprecated and will be removed in a future version.\n\n**Introducing Watermelon Diagnostics**\n\nAll debug/dev/diagnostics tools for Watermelon are now available from a new `@nozbe/watermelondb/diagnostics` folder:\n\n- NEW: `censorRaw` - takes a `RawRecord/DirtyRaw` and censors its string values, while preserving IDs, _status, _changed, and numeric/boolean values. Helpful when viewing database contents in context that could expose private user information\n- NEW: `diagnoseDatabaseStructure` - analyzes database to find inconsistencies, such as orphaned records (`belongs_to` relations on model that point to records that don't exist) or broken LokiJS database. Use this to find bugs in your data model.\n- NEW: `diagnoseSyncConsistency` - compares local database with the server version (contents of first/full sync) to find inconsistencies, missing and excess records. Use this to find bugs in your backend sync implementation.\n\n### BREAKING CHANGES\n\n- `@nozbe/with-observables` is no longer a WatermelonDB dependency. Change your imports to `import { withObservables } from '@nozbe/watermelondb/react'`\n\nChanges unlikely to cause issues:\n\n- [iOS] If `import WatermelonDB` is used in your Swift app (for Turbo sync), remove it and replace with `#import &lt;WatermelonDB/WatermelonDB.h>` in the bridging header\n- [iOS] If you use `_watermelonDBLoggingHook`, remove it. No replacement is provided at this time, feel free to contribute if you need this\n- [iOS] If you use `-DENABLE_JSLOCK_PERFORMANCE_HACK`, remove it. JSLockPerfHack has been non-functional for some time already, and has now been removed. Please file an issue if you relied on it.\n\n### Deprecations\n\n- Imports from `@nozbe/watermelondb/DatabaseProvider` and `@nozbe/watermelondb/hooks`. Change to `@nozbe/watermelondb/react`\n\n### New features\n\n- New `@experimentalFailsafe` decorator you can apply before `@relation/@immutableRelation` so that if relation points to a record that does not exist, `.fetch()/.observe()` yield `undefined` instead of throwing an error\n\n### Fixes\n\n- [Flow/TS] Improved typing of DatabaseContext\n- Fixed `Cannot read property 'getRandomIds' of null`. This error occured if native modules were not correctly installed, however the location of the error caused a lot of confusion.\n\n## 0.26 - 2023-04-28\n\n### Highlights\n\n**New Native Modules**\n\nWe're transitioning SQLite adapters for React Native **from Kotlin and Swift to Java and Objective-C**.\n\nThis is only a small part of WatermelonDB, yet is responsible for a disproportionate amount of issues\nraised, such as Kotlin version conflicts, Expo build failures, CocoaPods use_frameworks! issues. It\nmakes library installation and updates more complicated for users. It complicates maintenance.\nSwift doesn't play nicely with either React Native's legacy Native Module system, nor can it interact\ncleanly with C++ (JSI/New Architecture) without going through Objective-C++.\n\nIn other words, in the context of a React Native library, the benefit of these modern, nicer to use\nlanguages is far outweighed by the downsides. That's why we (@radex & @rozpierog) decided to rewrite\nthe iOS and Android implementations to Objective-C and Java respectively.\n\n0.26 is a transition release, and it contains both implementations. If you find a regression caused\nby the new bridge, pass `{disableNewBridge: true}` to `new SQLiteAdapter()` **and file an issue**.\nWe plan to remove the old implementation in 0.27 or 0.28 release.\n\n**New documentation**\n\nWe have a brand new documentation page, built with Docusaurus (contributed by @ErickLuizA).\n\nWe plan to expand guides, add typing to examples, and add a proper API reference, but we need your\nhelp to do this! See: https://github.com/Nozbe/WatermelonDB/issues/1481\n\n### BREAKING CHANGES\n\n- [iOS] You should remove import of WatermelonDB's `SupportingFiles/Bridging.h` from your app project's `Bridging.h`.\n  If this removal causes build issues, please file an issue.\n- [iOS] In your Podfile, replace previous WatermelonDB's pod imports with this:\n\n  ```rb\n  # Uncomment this line if you're not using auto-linking\n  # pod 'WatermelonDB', path: '../node_modules/@nozbe/watermelondb'\n  # WatermelonDB dependency\n  pod 'simdjson', path: '../node_modules/@nozbe/simdjson', modular_headers: true\n  ```\n- Removed functions deprecated for 2+ years:\n  - `Collection.unsafeFetchRecordsWithSQL()`. Use `.query(Q.unsafeSqlQuery('select * from...')).fetch()` instead.\n  - `Database.action()`. Use `Database.write()` instead.\n  - `.subAction()`. Use `.callWriter()` instead.\n  - `@action` decorator. Use `@writer` instead.\n\n### Deprecations\n\n### New features\n\n- [Android] Added `experimentalUnsafeNativeReuse` option to SQLiteAdapter. See `src/adapters/sqlite/type.js` for more details\n- You can now pass an array to `Q.and(conditions)`, `Q.or(conditions)`, `collection.query(conditions)`, `query.extend(conditions)` in addition to spreading multiple arguments\n- Added JSDoc comments to many APIs\n\n### Fixes\n\n- Improved resiliency to \"Maximum call stack size exceeded\" errors\n- [JSI] Improved reliability when reloading RCTBridge\n- [iOS] Fix \"range of supported deployment targets\" Xcode warning\n- `randomId` uses better randum number generator\n- Fixed \"no such index\" when using non-standard schemas and >1k bulk updates\n- Fixes and changes included in `@nozbe/with-observables@1.5.0`\n- [Flow] `query.batch([model, falsy])` no longer raises an error\n\n### Performance\n\n- Warning is now given if a large number of arguments is passed to `Q.and, Q.or, Collection.query, Database.batch` instead of a single array\n- `randomId()` is now 2x faster on Chrome, 10x faster on Safari, 2x faster on iOS (Hermes)\n\n### Changes\n\n- `randomId`: now also generates upper-case letters\n- Simplified CocoaPods/iOS integration\n- Docs improvements: SQLite versions, Flow declarations, Installation\n- Improved diagnostic warnings and errors: JSI, Writer/Reader\n- Remove old diagnostic warnings no longer relevant: `multiple Q.on()s`, `Database`, `LokiJSAdapter`, `SQLiteAdapter`\n- Updated `flow-bin` to 0.200. This shouldn't have an impact on you, but could fix or break Flow if you don't have WatermelonDB set to `[declarations]` mode\n- Updated `@babel/runtime` to 7.20.13\n- Updated `rxjs` to 7.8.0\n- Updated `sqlite` (SQLite used on Android in JSI mode) to 3.40.1\n- Updated `simdjson` to 3.1.0\n\n### Internal\n\n- Cleaned up QueryDescription, ios folder structure, JSI implementation by splitting them into smaller parts.\n- [Android] [jsi] Simplify CMakeLists\n- Improve release script\n\n## 0.25.5 - 2023-02-01\n\n- Fix Android auto-linking\n\n## 0.25.4 - 2023-01-31\n\n- [Sync] Improve memory consumption (less likely to get \"Maximum callstack exceeded\" error)\n- [TypeScript] Fix type of `DirtyRaw` to `{ [key: string]: any }` (from `Object`)\n\n## 0.25.3 - 2023-01-30\n\n- Fixed TypeError regression\n\n## 0.25.2 - 2023-01-30\n\n### Fixes\n\n- Fix TypeScript issues (@paulrostorp feat. @enahum)\n- Fix compilation on Kotlin 1.7\n- Fix regression in Sync that could cause `Record ID xxx#yyy was sent over the bridge, but it's not cached` error\n\n### Internal\n\n- Update internal dependencies\n- Fix Android CI\n- Improve TypeScript CI\n\n## 0.25.1 - 2023-01-23\n\n- Fix React Native 0.71+ Android broken build\n\n## 0.25 - 2023-01-20\n\n### Highlights\n\n- Fix broken build on React Native 0.71+\n- [Expo] Fixes Expo SDK 44+ build errors (@Kudo)\n- [JSI] Fix an issue that sometimes led to crashing app upon database close\n\n### BREAKING CHANGES\n\n- [Query] `Q.where(xxx, undefined)` will now throw an error. This is a bug fix, since comparing to\n  undefined was never allowed and would either error out or produce a wrong result in some cases.\n  However, it could technically break an app that relied on existing buggy behavior\n- [JSI+Swift] If you use `watermelondbProvideSyncJson()` native iOS API, you might need to add `import WatermelonDB`\n\n### New features\n\n- [adapters] Adapter objects can now be distinguished by checking their `static adapterType`\n- [Query] New `Q.includes('foo')` query for case-sensitive exact string includes comparison\n- [adapters] Adapter objects now returns `dbName`\n- [Sync] Replacement Sync - a new advanced sync feature. Server can now send a full dataset (same as\n  during initial sync) and indicate with `{ experimentalStrategy: 'replacement' }` that instead of applying a diff,\n  local database should be replaced with the dataset sent. Local records not present in the changeset\n  will be deleted. However, unlike clearing database and logging in again, unpushed local changes\n  (to records that are kept after replacement) are preserved. This is useful for recovering from a\n  corrupted local database, or as a hack to deal with very large state changes such that server doesn't\n  know how to efficiently send incremental changes and wants to send a full dataset instead. See docs\n  for more details.\n- [Sync] Added `onWillApplyRemoteChanges` callback\n\n### Performance\n\n- [LokiJS] Updated Loki with some performance improvements\n- [iOS] JSLockPerfHack now works on iOS 15\n- [Sync] Improved performance of processing large pulls\n- Improved `@json` decorator, now with optional `{ memo: true }` parameter\n\n### Changes\n\n- [Docs] Added additional Android JSI installation step\n\n### Fixes\n\n- [TypeScript] Improve typings: add unsafeExecute method, localStorage property to Database\n- [android] Fixed compilation on some setups due to a missing `&lt;cassert>` import\n- [sync] Fixed marking changes as synced for users that don't keep globally unique (only per-table unique) IDs\n- Fix `Model.experimentalMarkAsDeleted/experimentalDestroyPermanently()` throwing an error in some cases\n- Fixes included in updated `withObservables`\n\n## 0.24 - 2021-10-28\n\n### BREAKING CHANGES\n\n- `Q.experimentalSortBy`, `Q.experimentalSkip`, `Q.experimentalTake` have been renamed to `Q.sortBy`, `Q.skip`, `Q.take` respectively\n- **RxJS has been updated to 7.3.0**. If you're not importing from `rxjs` in your app, this doesn't apply to you. If you are, read RxJS 7 breaking changes: https://rxjs.dev/deprecations/breaking-changes\n\n### New features\n\n- **LocalStorage**. `database.localStorage` is now available\n- **sortBy, skip, take** are now available in LokiJSAdapter as well\n- **Disposable records**. Read-only records that cannot be saved in the database, updated, or deleted and only exist for as long as you keep a reference to them in memory can now be created using `collection.disposableFromDirtyRaw()`. This is useful when you're adding online-only features to an otherwise offline-first app.\n- [Sync] `experimentalRejectedIds` parameter now available in push response to allow partial rejection of an otherwise successful sync\n\n### Fixes\n\n- Fixes an issue when using Headless JS on Android with JSI mode enabled - pass `usesExclusiveLocking: true` to SQLiteAdapter to enable\n- Fixes Typescript annotations for Collection and adapters/sqlite\n\n## 0.23 - 2021-07-22\n\nThis is a big release to WatermelonDB with new advanced features, great performance improvements, and important fixes to JSI on Android.\n\nPlease don't get scared off the long list of breaking changes - they are all either simple Find&Replace renames or changes to internals you probably don't use. It shouldn't take you more than 15 minutes to upgrade to 0.23.\n\n### BREAKING CHANGES\n\n- **iOS Installation change**. You need to add this line to your Podfile: `pod 'simdjson', path: '../node_modules/@nozbe/simdjson'`\n- Deprecated `new Database({ actionsEnabled: false })` options is now removed. Actions are always enabled.\n- Deprecated `new SQLiteAdapter({ synchronous: true })` option is now removed. Use `{ jsi: true }` instead.\n- Deprecated `Q.unsafeLokiFilter` is now removed. Use `Q.unsafeLokiTransform((raws, loki) => raws.filter(raw => ...))` instead.\n- Deprecated `Query.hasJoins` is now removed\n- Changes to `LokiJSAdapter` constructor options:\n  - `indexedDBSerializer` -> `extraIncrementalIDBOptions: { serializeChunk, deserializeChunk }`\n  - `onIndexedDBFetchStart` -> `extraIncrementalIDBOptions: { onFetchStart }`\n  - `onIndexedDBVersionChange` -> `extraIncrementalIDBOptions: { onversionchange }`\n  - `autosave: false` -> `extraLokiOptions: { autosave: false }`\n- Changes to Internal APIs. These were never meant to be public, and so are unlikely to affect you:\n  - `Model._isCommited`, `._hasPendingUpdate`, `._hasPendingDelete` have been removed and changed to `Model._pendingState`\n  - `Collection.unsafeClearCache()` is no longer exposed\n- Values passed to `adapter.setLocal()` are now validated to be strings. This is technically a bug fix, since local storage was always documented to only accept strings, however applications may have relied on this lack of validation. Adding this validation was necessary to achieve consistent behavior between SQLiteAdapter and LokiJSAdapter\n- `unsafeSql` passed to `appSchema` will now also be called when dropping and later recreating all database indices on large batches. A second argument was added so you can distinguish between these cases. See Schema docs for more details.\n- **Changes to sync change tracking**. The behavior of `record._raw._changed` and `record._raw._status` (a.k.a. `record.syncStatus`) has changed. This is unlikely to be a breaking change to you, unless you're writing your own sync engine or rely on these low-level details.\n  - Previously, \\_changed was always empty when \\_status=created. Now, \\_changed is not populated during initial creation of a record, but a later update will add changed fields to \\_changed. This change was necessary to fix a long-standing Sync bug.\n\n### Deprecations\n\n- `database.action(() => {})` is now deprecated. Use `db.write(() => {})` instead (or `db.read(() => {})` if you only need consistency but are not writing any changes to DB)\n- `@action` is now deprecated. Use `@writer` or `@reader` instead\n- `.subAction()` is now deprecated. Use `.callReader()` or `.callWriter()` instead\n- `Collection.unsafeFetchRecordsWithSQL()` is now deprecated. Use `collection.query(Q.unsafeSqlQuery(\"select * from...\")).fetch()` instead.\n\n### New features\n\n- `db.write(writer => { ... writer.batch() })` - you can now call batch on the interface passed to a writer block\n- **Fetching record IDs and unsafe raws.** You can now optimize fetching of queries that only require IDs, not full cached records:\n  - `await query.fetchIds()` will return an array of record ids\n  - `await query.unsafeFetchRaw()` will return an array of unsanitized, unsafe raw objects (use alongside `Q.unsafeSqlQuery` to exclude unnecessary or include extra columns)\n  - advanced `adapter.queryIds()`, `adapter.unsafeQueryRaw` are also available\n- **Raw SQL queries**. New syntax for running unsafe raw SQL queries:\n  - `collection.query(Q.unsafeSqlQuery(\"select * from tasks where foo = ?\", ['bar'])).fetch()`\n  - You can now also run `.fetchCount()`, `.fetchIds()` on SQL queries\n  - You can now safely pass values for SQL placeholders by passing an array\n  - You can also observe an unsafe raw SQL query -- with some caveats! refer to documentation for more details\n- **Unsafe raw execute**. You can now execute arbitrary SQL queries (SQLiteAdapter) or access Loki object directly (LokiJSAdapter) using `adapter.unsafeExecute` -- see docs for more details\n- **Turbo Login**. You can now speed up the initial (login) sync by up to 5.3x with Turbo Login. See Sync docs for more details.\n- New diagnostic tool - **debugPrintChanges**. See Sync documentation for more details\n\n### Performance\n\n- The order of Q. clauses in a query is now preserved - previously, the clauses could get rearranged and produce a suboptimal query\n- [SQLite] `adapter.batch()` with large numbers of created/updated/deleted records is now between 16-48% faster\n- [LokiJS] Querying and finding is now faster - unnecessary data copy is skipped\n- [jsi] 15-30% faster querying on JSC (iOS) when the number of returned records is large\n- [jsi] up to 52% faster batch creation (yes, that's on top of the improvement listed above!)\n- Fixed a performance bug that caused observed items on a list observer with `.observeWithColumns()` to be unnecessarily re-rendered just before they were removed from the list\n\n### Changes\n\n- All Watermelon console logs are prepended with a 🍉 tag\n- Extra protections against improper use of writers/readers (formerly actions) have been added\n- Queries with multiple top-level `Q.on('table', ...)` now produce a warning. Use `Q.on('table', [condition1, condition2, ...])` syntax instead.\n- [jsi] WAL mode is now used\n\n### Fixes\n\n- [jsi] Fix a race condition where commands sent to the database right after instantiating SQLiteAdapter would fail\n- [jsi] Fix incorrect error reporting on some sqlite errors\n- [jsi] Fix issue where app would crash on Android/Hermes on reload\n- [jsi] Fix IO errors on Android\n- [sync] Fixed a long-standing bug that would cause records that are created before a sync and updated during sync's push to lose their most recent changes on a subsequent sync\n\n### Internal\n\n- Internal changes to SQLiteAdapter:\n  - .batch is no longer available on iOS implementation\n  - .batch/.batchJSON internal format has changed\n  - .getDeletedRecords, destroyDeletedRecords, setLocal, removeLocal is no longer available\n- encoded SQLiteAdapter schema has changed\n- LokiJSAdapter has had many internal changes\n\n## 0.22 - 2021-05-07\n\n### BREAKING CHANGES\n\n- [SQLite] `experimentalUseJSI: true` option has been renamed to `jsi: true`\n\n### Deprecations\n\n- [LokiJS] `Q.unsafeLokiFilter` is now deprecated and will be removed in a future version.\n  Use `Q.unsafeLokiTransform((raws, loki) => raws.filter(raw => ...))` instead.\n\n### New features\n\n- [SQLite] [JSI] `jsi: true` now works on Android - see docs for installation info\n\n### Performance\n\n- Removed dependency on rambdax and made the util library smaller\n- Faster withObservables\n\n### Changes\n\n- Synchronization: `pushChanges` is optional, will not calculate local changes if not specified.\n- withObservables is now a dependency of WatermelonDB for simpler installation and consistent updates. You can (and generally should) delete `@nozbe/with-observables` from your app's package.json\n- [Docs] Add advanced tutorial to share database across iOS targets - @thiagobrez\n- [SQLite] Allowed callbacks (within the migrationEvents object) to be passed so as to track the migration events status ( onStart, onSuccess, onError ) - @avinashlng1080\n- [SQLite] Added a dev-only `Query._sql()` method for quickly extracting SQL from Queries for debugging purposes\n\n### Fixes\n\n- Non-react statics hoisting in `withDatabase()`\n- Fixed incorrect reference to `process`, which can break apps in some environments (e.g. webpack5)\n- [SQLite] [JSI] Fixed JSI mode when running on Hermes\n- Fixed a race condition when using standard fetch methods alongside `Collection.unsafeFetchRecordsWithSQL` - @jspizziri\n- withObservables shouldn't cause any RxJS issues anymore as it no longer imports RxJS\n- [Typescript] Added `onSetUpError` and `onIndexedDBFetchStart` fields to `LokiAdapterOptions`; fixes TS error - @3DDario\n- [Typescript] Removed duplicated identifiers `useWebWorker` and `useIncrementalIndexedDB` in `LokiAdapterOptions` - @3DDario\n- [Typescript] Fix default export in logger util\n\n## 0.21 - 2021-03-24\n\n### BREAKING CHANGES\n\n- [LokiJS] `useWebWorker` and `useIncrementalIndexedDB` options are now required (previously, skipping them would only trigger a warning)\n\n### New features\n\n- [Model] `Model.update` method now returns updated record\n- [adapters] `onSetUpError: Error => void` option is added to both `SQLiteAdapter` and `LokiJSAdapter`. Supply this option to catch initialization errors and offer the user to reload or log out\n- [LokiJS] new `extraLokiOptions` and `extraIncrementalIDBOptions` options\n- [Android] Autolinking is now supported.\n  - If You upgrade to `&lt;= v0.21.0` **AND** are on a version of React Native which supports Autolinking, you will need to remove the config manually linking WatermelonDB.\n  - You can resolve this issue by **REMOVING** the lines of config from your project which are _added_ in the `Manual Install ONLY` section of the [Android Install docs](https://nozbe.github.io/WatermelonDB/Installation.html#android-react-native).\n\n### Performance\n\n- [LokiJS] Improved performance of launching the app\n\n### Changes\n\n- [LokiJS] `useWebWorker: true` and `useIncrementalIndexedDB: false` options are now deprecated. If you rely on these features, please file an issue!\n- [Sync] Optional `log` passed to sync now has more helpful diagnostic information\n- [Sync] Open-sourced a simple SyncLogger you can optionally use. See docs for more info.\n- [SQLiteAdapter] `synchronous:true` option is now deprecated and will be replaced with `experimentalUseJSI: true` in the future. Please test if your app compiles and works well with `experimentalUseJSI: true`, and if not - file an issue!\n- [LokiJS] Changed default autosave interval from 250 to 500ms\n- [Typescript] Add `experimentalNestedJoin` definition and `unsafeSqlExpr` clause\n\n### Fixes\n\n- [LokiJS] Fixed a case where IndexedDB could get corrupted over time\n- [Resilience] Added extra diagnostics for when you encounter the `Record ID aa#bb was sent over the bridge, but it's not cached` error and a recovery path (LokiJSAdapter-only). Please file an issue if you encounter this issue!\n- [Typescript] Fixed type on OnFunction to accept `and` in join\n- [Typescript] Fixed type `database#batch(records)`'s argument `records` to accept mixed types\n\n### Internal\n\n- Added an experimental mode where a broken database state is detected, further mutations prevented, and the user notified\n\n## 0.20 - 2020-10-05\n\n### BREAKING CHANGES\n\nThis release has unintentionally broken RxJS for some apps using `with-observables`. If you have this issue, please update `@nozbe/with-observables` to the latest version.\n\n### New features\n\n- [Sync] Conflict resolution can now be customized. See docs for more details\n- [Android] Autolinking is now supported\n- [LokiJS] Adapter autosave option is now configurable\n\n### Changes\n\n- Interal RxJS imports have been refactor such that rxjs-compat should never be used now\n- [Performance] Tweak Babel config to produce smaller code\n- [Performance] LokiJS-based apps will now take up to 30% less time to load the database (id and unique indicies are generated lazily)\n\n### Fixes\n\n- [iOS] Fixed crash on database reset in apps linked against iOS 14 SDK\n- [LokiJS] Fix `Q.like` being broken for multi-line strings on web\n- Fixed warn \"import cycle\" from DialogProvider (#786) by @gmonte.\n- Fixed cache date as instance of Date (#828) by @djorkaeffalexandre.\n\n## 0.19 - 2020-08-17\n\n### New features\n\n- [iOS] Added CocoaPods support - @leninlin\n- [NodeJS] Introducing a new SQLite Adapter based integration to NodeJS. This requires a\n  peer dependency on [better-sqlite3](https://github.com/JoshuaWise/better-sqlite3)\n  and should work with the same configuration as iOS/Android - @sidferreira\n- [Android] `exerimentalUseJSI` option has been enabled on Android. However, it requires some app-specific setup which is not yet documented - stay tuned for upcoming releases\n- [Schema] [Migrations] You can now pass `unsafeSql` parameters to schema builder and migration steps to modify SQL generated to set up the database or perform migrations. There's also new `unsafeExecuteSql` migration step. Please use this only if you know what you're doing — you shouldn't need this in 99% of cases. See Schema and Migrations docs for more details\n- [LokiJS] [Performance] Added experimental `onIndexedDBFetchStart` and `indexedDBSerializer` options to `LokiJSAdapter`. These can be used to improve app launch time. See `src/adapters/lokijs/index.js` for more details.\n\n### Changes\n\n- [Performance] findAndObserve is now able to emit a value synchronously. By extension, this makes Relations put into withObservables able to render the child component in one shot. Avoiding the extra unnecessary render cycles avoids a lot of DOM and React commit-phase work, which can speed up loading some views by 30%\n- [Performance] LokiJS is now faster (refactored encodeQuery, skipped unnecessary clone operations)\n\n## 0.18 - 2020-06-30\n\nAnother WatermelonDB release after just a week? Yup! And it's jam-packed full of features!\n\n### New features\n\n- [Query] `Q.on` queries are now far more flexible. Previously, they could only be placed at the top\n  level of a query. See Docs for more details. Now, you can:\n\n  - Pass multiple conditions on the related query, like so:\n\n    ```js\n    collection.query(Q.on('projects', [Q.where('foo', 'bar'), Q.where('bar', 'baz')]))\n    ```\n\n  - You can place `Q.on` deeper inside the query (nested inside `Q.and()`, `Q.or()`). However, you\n    must explicitly list all tables you're joining on at the beginning of a query, using:\n    `Q.experimentalJoinTables(['join_table1', 'join_table2'])`.\n  - You can nest `Q.on` conditions inside `Q.on`, e.g. to make a condition on a grandchild.\n    To do so, it's required to pass `Q.experimentalNestedJoin('parent_table', 'grandparent_table')` at the beginning\n    of a query\n\n- [Query] `Q.unsafeSqlExpr()` and `Q.unsafeLokiExpr()` are introduced to allow adding bits of queries\n  that are not supported by the WatermelonDB query language without having to use `unsafeFetchRecordsWithSQL()`.\n  See docs for more details\n- [Query] `Q.unsafeLokiFilter((rawRecord, loki) => boolean)` can now be used as an escape hatch to make\n  queries with LokiJSAdapter that are not otherwise possible (e.g. multi-table column comparisons).\n  See docs for more details\n\n### Changes\n\n- [Performance] [LokiJS] Improved performance of queries containing query comparisons on LokiJSAdapter\n- [Docs] Added Contributing guide for Query language improvements\n- [Deprecation] `Query.hasJoins` is deprecated\n- [DX] Queries with bad associations now show more helpful error message\n- [Query] Counting queries that contain `Q.experimentalTake` / `Q.experimentalSkip` is currently broken - previously it would return incorrect results, but\n  now it will throw an error to avoid confusion. Please contribute to fix the root cause!\n\n### Fixes\n\n- [Typescript] Fixed types of Relation\n\n### Internal\n\n- `QueryDescription` structure has been changed.\n\n## 0.17.1 - 2020-06-24\n\n- Fixed broken iOS build - @mlecoq\n\n## 0.17 - 2020-06-22\n\n### New features\n\n- [Sync] Introducing Migration Syncs - this allows fully consistent synchronization when migrating\n  between schema versions. Previously, there was no mechanism to incrementally fetch all remote changes in\n  new tables and columns after a migration - so local copy was likely inconsistent, requiring a re-login.\n  After adopting migration syncs, Watermelon Sync will request from backend all missing information.\n  See Sync docs for more details.\n- [iOS] Introducing a new native SQLite database integration, rewritten from scratch in C++, based\n  on React Native's JSI (JavaScript Interface). It is to be considered experimental, however\n  we intend to make it the default (and eventually, the only) implementation. In a later release,\n  Android version will be introduced.\n\n       The new adapter is up to 3x faster than the previously fastest `synchronous: true` option,\n       however this speedup is only achieved with some unpublished React Native patches.\n\n       To try out JSI, add `experimentalUseJSI: true` to `SQLiteAdapter` constructor.\n\n- [Query] Added `Q.experimentalSortBy(sortColumn, sortOrder)`, `Q.experimentalTake(count)`,\n  `Q.experimentalSkip(count)` methods (only availble with SQLiteAdapter) - @Kenneth-KT\n- `Database.batch()` can now be called with a single array of models\n- [DX] `Database.get(tableName)` is now a shortcut for `Database.collections.get(tableName)`\n- [DX] Query is now thenable - you can now use `await query` and `await query.count` instead of `await query.fetch()` and `await query.fetchCount()`\n- [DX] Relation is now thenable - you can now use `await relation` instead of `await relation.fetch()`\n- [DX] Exposed `collection.db` and `model.db` as shortcuts to get to their Database object\n\n### Changes\n\n- [Hardening] Column and table names starting with `__`, Object property names (e.g. `constructor`), and some reserved keywords are now forbidden\n- [DX] [Hardening] QueryDescription builder methods do tighter type checks, catching more bugs, and\n  preventing users from unwisely passing unsanitized user data into Query builder methods\n- [DX] [Hardening] Adapters check early if table names are valid\n- [DX] Collection.find reports an error more quickly if an obviously invalid ID is passed\n- [DX] Intializing Database with invalid model classes will now show a helpful error\n- [DX] DatabaseProvider shows a more helpful error if used improperly\n- [Sync] Sync no longer fails if pullChanges returns collections that don't exist on the frontend - shows a warning instead. This is to make building backwards-compatible backends less error-prone\n- [Sync] [Docs] Sync documentation has been rewritten, and is now closer in detail to a formal specification\n- [Hardening] database.collections.get() better validates passed value\n- [Hardening] Prevents unsafe strings from being passed as column name/table name arguments in QueryDescription\n\n### Fixes\n\n- [Sync] Fixed `RangeError: Maximum call stack size exceeded` when syncing large amounts of data - @leninlin\n- [iOS] Fixed a bug that could cause a database operation to fail with an (6) SQLITE_LOCKED error\n- [iOS] Fixed 'jsi/jsi.h' file not found when building at the consumer level. Added path `$(SRCROOT)/../../../../../ios/Pods/Headers/Public/React-jsi` to Header Search Paths (issue #691) - @victorbutler\n- [Native] SQLite keywords used as table or column names no longer crash\n- Fixed potential issues when subscribing to database, collection, model, queries passing a subscriber function with the same identity more than once\n\n### Internal\n\n- Fixed broken adapter tests\n\n## 0.15.1, 0.16.1-fix, 0.16.2 - 2020-06-03\n\nThis is a security patch for a vulnerability that could cause maliciously crafted record IDs to\ncause all or some of user's data to be deleted. More information available via GitHub security advisory\n\n## 0.16.1 - 2020-05-18\n\n### Changes\n\n- `Database.unsafeResetDatabase()` is now less unsafe — more application bugs are being caught\n\n### Fixes\n\n- [iOS] Fix build in apps using Flipper\n- [Typescript] Added type definition for `setGenerator`.\n- [Typescript] Fixed types of decorators.\n- [Typescript] Add Tests to test Types.\n- Fixed typo in learn-to-use docs.\n- [Typescript] Fixed types of changes.\n\n### Internal\n\n- [SQLite] Infrastruture for a future JSI adapter has been added\n\n## 0.16 - 2020-03-06\n\n### ⚠️ Breaking\n\n- `experimentalUseIncrementalIndexedDB` has been renamed to `useIncrementalIndexedDB`\n\n#### Low breakage risk\n\n- [adapters] Adapter API has changed from returning Promise to taking callbacks as the last argument. This won't affect you unless you call on adapter methods directly. `database.adapter` returns a new `DatabaseAdapterCompat` which has the same shape as old adapter API. You can use `database.adapter.underlyingAdapter` to get back `SQLiteAdapter` / `LokiJSAdapter`\n- [Collection] `Collection.fetchQuery` and `Collection.fetchCount` are removed. Please use `Query.fetch()` and `Query.fetchCount()`.\n\n### New features\n\n- [SQLiteAdapter] [iOS] Add new `synchronous` option to adapter: `new SQLiteAdapter({ ..., synchronous: true })`.\n  When enabled, database operations will block JavaScript thread. Adapter actions will resolve in the\n  next microtask, which simplifies building flicker-free interfaces. Adapter will fall back to async\n  operation when synchronous adapter is not available (e.g. when doing remote debugging)\n- [LokiJS] Added new `onQuotaExceededError?: (error: Error) => void` option to `LokiJSAdapter` constructor.\n  This is called when underlying IndexedDB encountered a quota exceeded error (ran out of allotted disk space for app)\n  This means that app can't save more data or that it will fall back to using in-memory database only\n  Note that this only works when `useWebWorker: false`\n\n### Changes\n\n- [Performance] Watermelon internals have been rewritten not to rely on Promises and allow some fetch/observe calls to resolve synchronously. Do not rely on this -- external API is still based on Rx and Promises and may resolve either asynchronously or synchronously depending on capabilities. This is meant as a internal performance optimization only for the time being.\n- [LokiJS] [Performance] Improved worker queue implementation for performance\n- [observation] Refactored observer implementations for performance\n\n### Fixes\n\n- Fixed a possible cause for \"Record ID xxx#yyy was sent over the bridge, but it's not cached\" error\n- [LokiJS] Fixed an issue preventing database from saving when using `experimentalUseIncrementalIndexedDB`\n- Fixed a potential issue when using `database.unsafeResetDatabase()`\n- [iOS] Fixed issue with clearing database under experimental synchronous mode\n\n### New features (Experimental)\n\n- [Model] Added experimental `model.experimentalSubscribe((isDeleted) => { ... })` method as a vanilla JS alternative to Rx based `model.observe()`. Unlike the latter, it does not notify the subscriber immediately upon subscription.\n- [Collection] Added internal `collection.experimentalSubscribe((changeSet) => { ... })` method as a vanilla JS alternative to Rx based `collection.changes` (you probably shouldn't be using this API anyway)\n- [Database] Added experimental `database.experimentalSubscribe(['table1', 'table2'], () => { ... })` method as a vanilla JS alternative to Rx-based `database.withChangesForTables()`. Unlike the latter, `experimentalSubscribe` notifies the subscriber only once after a batch that makes a change in multiple collections subscribed to. It also doesn't notify the subscriber immediately upon subscription, and doesn't send details about the changes, only a signal.\n- Added `experimentalDisableObserveCountThrottling()` to `@nozbe/watermelondb/observation/observeCount` that globally disables count observation throttling. We think that throttling on WatermelonDB level is not a good feature and will be removed in a future release - and will be better implemented on app level if necessary\n- [Query] Added experimental `query.experimentalSubscribe(records => { ... })`, `query.experimentalSubscribeWithColumns(['col1', 'col2'], records => { ... })`, and `query.experimentalSubscribeToCount(count => { ... })` methods\n\n## 0.15 - 2019-11-08\n\n### Highlights\n\nThis is a **massive** new update to WatermelonDB! 🍉\n\n- **Up to 23x faster sync**. You heard that right. We've made big improvements to performance.\n  In our tests, with a massive sync (first login, 45MB of data / 65K records) we got a speed up of:\n\n  - 5.7s -> 1.2s on web (5x)\n  - 142s -> 6s on iOS (23x)\n\n  Expect more improvements in the coming releases!\n\n- **Improved LokiJS adapter**. Option to disable web workers, important Safari 13 fix, better performance,\n  and now works in Private Modes. We recommend adding `useWebWorker: false, experimentalUseIncrementalIndexedDB: true` options to the `LokiJSAdapter` constructor to take advantage of the improvements, but please read further changelog to understand the implications of this.\n- **Raw SQL queries** now available on iOS and Android thanks to the community\n- **Improved TypeScript support** — thanks to the community\n\n### ⚠️ Breaking\n\n- Deprecated `bool` schema column type is removed -- please change to `boolean`\n- Experimental `experimentalSetOnlyMarkAsChangedIfDiffers(false)` API is now removed\n\n### New featuers\n\n- [Collection] Add `Collection.unsafeFetchRecordsWithSQL()` method. You can use it to fetch record using\n  raw SQL queries on iOS and Android. Please be careful to avoid SQL injection and other pitfalls of\n  raw queries\n- [LokiJS] Introduces new `new LokiJSAdapter({ ..., experimentalUseIncrementalIndexedDB: true })` option.\n  When enabled, database will be saved to browser's IndexedDB using a new adapter that only saves the\n  changed records, instead of the entire database.\n\n  **This works around a serious bug in Safari 13** (https://bugs.webkit.org/show_bug.cgi?id=202137) that causes large\n  databases to quickly balloon to gigabytes of temporary trash\n\n  This also improves performance of incremental saves, although initial page load or very, very large saves\n  might be slightly slower.\n\n  This is intended to become the new default option, but it's not backwards compatible (if enabled, old database\n  will be lost). **You're welcome to contribute an automatic migration code.**\n\n  Note that this option is still experimental, and might change in breaking ways at any time.\n\n- [LokiJS] Introduces new `new LokiJSAdapter({ ..., useWebWorker: false })` option. Before, web workers\n  were always used with `LokiJSAdapter`. Although web workers may have some performance benefits, disabling them\n  may lead to lower memory consumption, lower latency, and easier debugging. YMMV.\n- [LokiJS] Added `onIndexedDBVersionChange` option to `LokiJSAdapter`. This is a callback that's called\n  when internal IDB version changed (most likely the database was deleted in another browser tab).\n  Pass a callback to force log out in this copy of the app as well. Note that this only works when\n  using incrementalIDB and not using web workers\n- [Model] Add `Model._dangerouslySetRawWithoutMarkingColumnChange()` method. You probably shouldn't use it,\n  but if you know what you're doing and want to live-update records from server without marking record as updated,\n  this is useful\n- [Collection] Add `Collection.prepareCreateFromDirtyRaw()`\n- @json decorator sanitizer functions take an optional second argument, with a reference to the model\n\n### Fixes\n\n- Pinned required `rambdax` version to 2.15.0 to avoid console logging bug. In a future release we will switch to our own fork of `rambdax` to avoid future breakages like this.\n\n### Improvements\n\n- [Performance] Make large batches a lot faster (1.3s shaved off on a 65K insert sample)\n- [Performance] [iOS] Make large batch inserts an order of magnitude faster\n- [Performance] [iOS] Make encoding very large queries (with thousands of parameters) 20x faster\n- [Performance] [LokiJS] Make batch inserts faster (1.5s shaved off on a 65K insert sample)\n- [Performance] [LokiJS] Various performance improvements\n- [Performance] [Sync] Make Sync faster\n- [Performance] Make observation faster\n- [Performance] [Android] Make batches faster\n- Fix app glitches and performance issues caused by race conditions in `Query.observeWithColumns()`\n- [LokiJS] Persistence adapter will now be automatically selected based on availability. By default,\n  IndexedDB is used. But now, if unavailable (e.g. in private mode), ephemeral memory adapter will be used.\n- Disabled console logs regarding new observations (it never actually counted all observations) and\n  time to query/count/batch (the measures were wildly inaccurate because of asynchronicity - actual\n  times are much lower)\n- [withObservables] Improved performance and debuggability (update withObservables package separately)\n- Improved debuggability of Watermelon -- shortened Rx stacks and added function names to aid in understanding\n  call stacks and profiles\n- [adapters] The adapters interface has changed. `query()` and `count()` methods now receive a `SerializedQuery`, and `batch()` now takes `TableName&lt;any>` and `RawRecord` or `RecordId` instead of `Model`.\n- [Typescript] Typing improvements\n  - Added 3 missing properties `collections`, `database` and `asModel` in Model type definition.\n  - Removed optional flag on `actionsEnabled` in the Database constructor options since its mandatory since 0.13.0.\n  - fixed several further typing issues in Model, Relation and lazy decorator\n- Changed how async functions are transpiled in the library. This could break on really old Android phones\n  but shouldn't matter if you use latest version of React Native. Please report an issue if you see a problem.\n- Avoid `database` prop drilling in the web demo\n\n## 0.14.1 - 2019-08-31\n\nHotfix for rambdax crash\n\n- [Schema] Handle invalid table schema argument in appSchema\n- [withObservables] Added TypeScript support ([changelog](https://github.com/Nozbe/withObservables/blob/master/CHANGELOG.md))\n- [Electron] avoid `Uncaught ReferenceError: global is not defined` in electron runtime ([#453](https://github.com/Nozbe/WatermelonDB/issues/453))\n- [rambdax] Replaces `contains` with `includes` due to `contains` deprecation https://github.com/selfrefactor/rambda/commit/1dc1368f81e9f398664c9d95c2efbc48b5cdff9b#diff-04c6e90faac2675aa89e2176d2eec7d8R2209\n\n## 0.14.0 - 2019-08-02\n\n### New features\n\n- [Query] Added support for `notLike` queries 🎉\n- [Actions] You can now batch delete record with all descendants using experimental functions `experimentalMarkAsDeleted` or `experimentalDestroyPermanently`\n\n## 0.13.0 - 2019-07-18\n\n### ⚠️ Breaking\n\n- [Database] It is now mandatory to pass `actionsEnabled:` option to Database constructor.\n  It is recommended that you enable this option:\n\n  ```js\n  const database = new Database({\n    adapter: ...,\n    modelClasses: [...],\n    actionsEnabled: true\n  })\n  ```\n\n  See `docs/Actions.md` for more details about Actions. You can also pass `false` to maintain\n  backward compatibility, but this option **will be removed** in a later version\n\n- [Adapters] `migrationsExperimental` prop of `SQLiteAdapter` and `LokiJSAdapter` has been renamed\n  to `migrations`.\n\n### New features\n\n- [Actions] You can now batch deletes by using `prepareMarkAsDeleted` or `prepareDestroyPermanently`\n- [Sync] Performance: `synchronize()` no longer calls your `pushChanges()` function if there are no\n  local changes to push. This is meant to save unnecessary network bandwidth. ⚠️ Note that this\n  could be a breaking change if you rely on it always being called\n- [Sync] When setting new values to fields on a record, the field (and record) will no longer be\n  marked as changed if the field's value is the same. This is meant to improve performance and avoid\n  unnecessary code in the app. ⚠️ Note that this could be a breaking change if you rely on the old\n  behavior. For now you can import `experimentalSetOnlyMarkAsChangedIfDiffers` from\n  `@nozbe/watermelondb/Model/index` and call if with `(false)` to bring the old behavior back, but\n  this will be removed in the later version -- create a new issue explaining why you need this\n- [Sync] Small perf improvements\n\n### Improvements\n\n- [Typescript] Improved types for SQLite and LokiJS adapters, migrations, models, the database and the logger.\n\n## 0.12.3 - 2019-05-06\n\n### Changes\n\n- [Database] You can now update the random id schema by importing\n  `import { setGenerator } from '@nozbe/watermelondb/utils/common/randomId'` and then calling `setGenerator(newGenenerator)`.\n  This allows WatermelonDB to create specific IDs for example if your backend uses UUIDs.\n- [Typescript] Type improvements to SQLiteAdapter and Database\n- [Tests] remove cleanup for react-hooks-testing-library@0.5.0 compatibility\n\n## 0.12.2 - 2019-04-19\n\n### Fixes\n\n- [TypeScript] 'Cannot use 'in' operator to search for 'initializer'; decorator fix\n\n### Changes\n\n- [Database] You can now pass falsy values to `Database.batch(...)` (false, null, undefined). This is\n  useful in keeping code clean when doing operations conditionally. (Also works with `model.batch(...)`)\n- [Decorators]. You can now use `@action` on methods of any object that has a `database: Database`\n  property, and `@field @children @date @relation @immutableRelation @json @text @nochange` decorators on\n  any object with a `asModel: Model` property.\n- [Sync] Adds a temporary/experimental `_unsafeBatchPerCollection: true` flag to `synchronize()`. This\n  causes server changes to be committed to database in multiple batches, and not one. This is NOT preferred\n  for reliability and performance reasons, but it works around a memory issue that might cause your app\n  to crash on very large syncs (>20,000 records). Use this only if necessary. Note that this option\n  might be removed at any time if a better solution is found.\n\n## 0.12.1 - 2019-04-01\n\n### ⚠️ Hotfix\n\n- [iOS] Fix runtime crash when built with Xcode 10.2 (Swift 5 runtime).\n\n  **⚠️ Note**: You need to upgrade to React Native 0.59.3 for this to work. If you can't upgrade\n  React Native yet, either stick to Xcode 10.1 or manually apply this patch:\n  https://github.com/Nozbe/WatermelonDB/pull/302/commits/aa4e08ad0fa55f434da2a94407c51fc5ff18e506\n\n### Changes\n\n- [Sync] Adds basic sync logging capability to Sync. Pass an empty object to `synchronize()` to populate it with diagnostic information:\n  ```js\n  const log = {}\n  await synchronize({ database, log, ...})\n  console.log(log.startedAt)\n  ```\n  See Sync documentation for more details.\n\n## 0.12.0 - 2019-03-18\n\n### Added\n\n- [Hooks] new `useDatabase` hook for consuming the Database Context:\n  ```js\n  import { useDatabase } from '@nozbe/watermelondb/hooks'\n  const Component = () => {\n    const database = useDatabase()\n  }\n  ```\n- [TypeScript] added `.d.ts` files. Please note: TypeScript definitions are currently incomplete and should be used as a guide only. **PRs for improvements would be greatly appreciated!**\n\n### Performance\n\n- Improved UI performance by consolidating multiple observation emissions into a single per-collection batch emission when doing batch changes\n\n## 0.11.0 - 2019-03-12\n\n### Breaking\n\n- ⚠️ Potentially BREAKING fix: a `@date` field now returns a Jan 1, 1970 date instead of `null` if the field's raw value is `0`.\n  This is considered a bug fix, since it's unexpected to receive a `null` from a getter of a field whose column schema doesn't say `isOptional: true`.\n  However, if you relied on this behavior, this might be a breaking change.\n- ⚠️ BREAKING: `Database.unsafeResetDatabase()` now requires that you run it inside an Action\n\n### Bug fixes\n\n- [Sync] Fixed an issue where synchronization would continue running despite `unsafeResetDatabase` being called\n- [Android] fix compile error for kotlin 1.3+\n\n### Other changes\n\n- Actions are now aborted when `unsafeResetDatabase()` is called, making reseting database a little bit safer\n- Updated demo dependencies\n- LokiJS is now a dependency of WatermelonDB (although it's only required for use on the web)\n- [Android] removed unused test class\n- [Android] updated ktlint to `0.30.0`\n\n## 0.10.1 - 2019-02-12\n\n### Changes\n\n- [Android] Changed `compile` to `implementation` in Library Gradle file\n  - ⚠️ might break build if you are using Android Gradle Plugin &lt;3.X\n- Updated `peerDependency` `react-native` to `0.57.0`\n- [Sync] Added `hasUnsyncedChanges()` helper method\n- [Sync] Improved documentation for backends that can't distinguish between `created` and `updated` records\n- [Sync] Improved diagnostics / protection against edge cases\n- [iOS] Add missing `header search path` to support **ejected** expo project.\n- [Android] Fix crash on android &lt; 5.0\n- [iOS] `SQLiteAdapter`'s `dbName` path now allows you to pass an absolute path to a file, instead of a name\n- [Web] Add adaptive layout for demo example with smooth scrolling for iOS\n\n## 0.10.0 - 2019-01-18\n\n### Breaking\n\n- **BREAKING:** Table column `last_modified` is no longer automatically added to all database tables. If\n  you don't use this column (e.g. in your custom sync code), you don't have to do anything.\n  If you do, manually add this column to all table definitions in your Schema:\n  ```\n  { name: 'last_modified', type: 'number', isOptional: true }\n  ```\n  **Don't** bump schema version or write a migration for this.\n\n### New\n\n- **Actions API**.\n\n  This was actually released in 0.8.0 but is now documented.\n  With Actions enabled, all create/update/delete/batch calls must be wrapped in an Action.\n\n  To use Actions, call `await database.action(async () => { /* perform writes here */ }`, and in\n  Model instance methods, you can just decorate the whole method with `@action`.\n\n  This is necessary for Watermelon Sync, and also to enable greater safety and consistency.\n\n  To enable actions, add `actionsEnabled: true` to `new Database({ ... })`. In a future release this\n  will be enabled by default, and later, made mandatory.\n\n  See documentation for more details.\n\n- **Watermelon Sync Adapter** (Experimental)\n\n  Added `synchronize()` function that allows you to easily add full synchronization capabilities to\n  your Watermelon app. You only need to provide two fetch calls to your remote server that conforms\n  to Watermelon synchronization protocol, and all the client-side processing (applying remote changes,\n  resolving conflicts, finding local changes, and marking them as synced) is done by Watermelon.\n\n  See documentation for more details.\n\n- **Support caching for non-global IDs at Native level**\n\n## 0.9.0 - 2018-11-23\n\n### New\n\n- Added `Q.like` - you can now make queries similar to SQL `LIKE`\n\n## 0.8.0 - 2018-11-16\n\n### New\n\n- Added `DatabaseProvider` and `withDatabase` Higher-Order Component to reduce prop drilling\n- Added experimental Actions API. This will be documented in a future release.\n\n### Fixes\n\n- Fixes crash on older Android React Native targets without `jsc-android` installed\n\n## 0.7.0 - 2018-10-31\n\n### Deprecations\n\n- [Schema] Column type 'bool' is deprecated — change to 'boolean'\n\n### New\n\n- Added support for Schema Migrations. See documentation for more details.\n- Added fundaments for integration of Danger with Jest\n\n### Changes\n\n- Fixed \"dependency cycle\" warning\n- [SQLite] Fixed rare cases where database could be left in an unusable state (added missing transaction)\n- [Flow] Fixes `oneOf()` typing and some other variance errors\n- [React Native] App should launch a little faster, because schema is only compiled on demand now\n- Fixed typos in README.md\n- Updated Flow to 0.85\n\n## 0.6.2 - 2018-10-04\n\n### Deprecations\n\n- The `@nozbe/watermelondb/babel/cjs` / `@nozbe/watermelondb/babel/esm` Babel plugin that ships with Watermelon is deprecated and no longer necessary. Delete it from your Babel config as it will be removed in a future update\n\n### Refactoring\n\n- Removed dependency on `async` (Web Worker should be ~30KB smaller)\n- Refactored `Collection` and `simpleObserver` for getting changes in an array and also adds CollectionChangeTypes for differentiation between different changes\n- Updated dependencies\n- Simplified build system by using relative imports\n- Simplified build package by outputting CJS-only files\n\n## 0.6.1 - 2018-09-20\n\n### Added\n\n- Added iOS and Android integration tests and lint checks to TravisCI\n\n### Changed\n\n- Changed Flow setup for apps using Watermelon - see docs/Advanced/Flow.md\n- Improved documentation, and demo code\n- Updated dependencies\n\n### Fixed\n\n- Add quotes to all names in sql queries to allow keywords as table or column names\n- Fixed running model tests in apps with Watermelon in the loop\n- Fixed Flow when using Watermelon in apps\n\n## 0.6.0 - 2018-09-05\n\nInitial release of WatermelonDB\n"
  },
  {
    "path": "docs-website/docs/docs/CONTRIBUTING.md",
    "content": "---\ntitle: Contributing\nhide_title: true\n---\n\n<img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/needyou.jpg\" alt=\"We need you\" width=\"220\" />\n\n**WatermelonDB is an open-source project and it needs your help to thrive!**\n\nIf there's a missing feature, a bug, or other improvement you'd like, we encourage you to contribute! Feel free to open an issue to get some guidance and see [Contributing guide](./CONTRIBUTING.md) for details about project setup, testing, etc.\n\nIf you're just getting started, see [good first issues](https://github.com/Nozbe/WatermelonDB/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) that are easy to contribute to. If you make a non-trivial contribution, email me, and I'll send you a nice 🍉 sticker!\n\nIf you make or are considering making an app using WatermelonDB, please let us know!\n\n<br />\n\n\n## Before you send a pull request\n\n1. Did you add or changed some functionality?\n\n   Add (or modify) tests!\n2. Check if the automated tests pass\n   ```bash\n   yarn ci:check\n   ```\n3. Format the files you changed\n   ```bash\n   yarn prettier\n   ```\n4. Mark your changes in CHANGELOG\n\n   Put a one-line description of your change under Added/Changed section. See [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).\n\n## Running Watermelon in development\n\n### Download source and dependencies\n\n```bash\ngit clone https://github.com/Nozbe/WatermelonDB.git\ncd WatermelonDB\nyarn\n```\n\n### Developing Watermelon alongside your app\n\nTo work on Watermelon code in the sandbox of your app:\n\n```bash\nyarn dev\n```\n\nThis will create a `dev/` folder in Watermelon and observe changes to source files (only JavaScript files) and recompile them as needed.\n\nThen in your app:\n\n```bash\ncd node_modules/@nozbe\nrm -fr watermelondb\nln -s path-to-watermelondb/dev watermelondb\n```\n\n**This will work in Webpack but not in Metro** (React Native). Metro doesn't follow symlinks. Instead, you can compile WatermelonDB directly to your project:\n\n```bash\nDEV_PATH=\"/path/to/your/app/node_modules/@nozbe/watermelondb\" yarn dev\n```\n\n### Running tests\n\nThis runs Jest, ESLint and Flow:\n\n```bash\nyarn ci:check\n```\n\nYou can also run them separately:\n\n```bash\nyarn test\nyarn eslint\nyarn flow\n```\n\n### Editing files\n\nWe recommend VS Code with ESLint, Flow, and Prettier (with prettier-eslint enabled) plugins for best development experience. (To see lint/type issues inline + have automatic reformatting of code)\n\n## Editing native code\n\nIn `native/ios` and `native/android` you'll find the native bridge code for React Native.\n\nIt's recommended to use the latest stable version of Xcode / Android Studio to work on that code.\n\n### Integration tests\n\nIf you change native bridge code or `adapter/sqlite` code, it's recommended to run integration tests that run the entire Watermelon code with SQLite and React Native in the loop:\n\n```bash\nyarn test:ios\nyarn test:android\n```\n\n### Running tests manualy\n\n- For iOS open the `native/iosTest/WatermelonTester.xcworkspace` project and hit Cmd+U.\n- For Android open `native/androidTest` in AndroidStudio navigate to `app/src/androidTest/java/com.nozbe.watermelonTest/BridgeTest` and click green arrow near `class BridgeTest`\n\n### Native linting\n\nMake sure the native code you're editing conforms to Watermelon standards:\n\n```bash\nyarn ktlint\n```\n\n### Native code troubleshooting\n\n1. If `test:ios` fails in terminal:\n- Run tests in Xcode first before running from terminal\n- Make sure you have the right version of Xcode CLI tools set in Preferences -> Locations\n1. Make sure you're on the most recent stable version of Xcode / Android Studio\n1. Remove native caches:\n- Xcode: `~/Library/Developer/Xcode/DerivedData`:\n- Android: `.gradle` and `build` folders in `native/android` and `native/androidTest`\n- `node_modules` (because of React Native precompiled third party libraries)\n\n\n"
  },
  {
    "path": "docs-website/docs/docs/CRUD.md",
    "content": "# Create, Read, Update, Delete\n\nWhen you have your [Schema](./Schema.md) and [Models](./Model.md) defined, learn how to manipulate them!\n\n## Reading\n\n#### Get a collection\n\nThe `Collection` object is how you find, query, and create new records of a given type.\n\n```js\nconst postsCollection = database.get('posts')\n```\n\nPass the [table name](./Schema.md) as the argument.\n\n#### Find a record (by ID)\n\n```js\nconst postId = 'abcdefgh'\nconst post = await database.get('posts').find(postId)\n```\n\n`find()` returns a Promise. If the record cannot be found, the Promise will be rejected.\n\n#### Query records\n\nFind a list of records matching given conditions by making a Query and then fetching it:\n\n```js\nconst allPosts = await database.get('posts').query().fetch()\nconst numberOfStarredPosts = await database.get('posts').query(\n  Q.where('is_starred', true)\n).fetchCount()\n```\n\n**➡️ Learn more:** [Queries](./Query.md)\n\n## Modifying the database\n\nAll modifications to the database (like creating, updating, deleting records) must be done **in a Writer**, either by wrapping your work in `database.write()`:\n\n```js\nawait database.write(async () => {\n  const someComment = await database.get('comments').find(commentId)\n  await someComment.update((comment) => {\n    comment.isSpam = true\n  })\n})\n```\n\nOr by defining a `@writer` method on a Model:\n\n```js\nimport { writer } from '@nozbe/watermelondb/decorators'\n\nclass Comment extends Model {\n  // (...)\n  @writer async markAsSpam() {\n    await this.update(comment => {\n      comment.isSpam = true\n    })\n  }\n}\n```\n\n**➡️ Learn more:** [Writers](./Writers.md)\n\n### Create a new record\n\n```js\nconst newPost = await database.get('posts').create(post => {\n  post.title = 'New post'\n  post.body = 'Lorem ipsum...'\n})\n```\n\n`.create()` takes a \"builder function\". In the example above, the builder will get a `Post` object as an argument. Use this object to set values for [fields you defined](./Model.md).\n\n**Note:** Always `await` the Promise returned by `create` before you access the created record.\n\n**Note:** You can only set fields inside `create()` or `update()` builder functions.\n\n### Update a record\n\n```js\nawait somePost.update(post => {\n  post.title = 'Updated title'\n})\n```\n\nLike creating, updating takes a builder function, where you can use field setters.\n\n**Note:** Always `await` the Promise returned by `update` before you access the modified record.\n\n### Delete a record\n\nThere are two ways of deleting records: syncable (mark as deleted), and permanent.\n\nIf you only use Watermelon as a local database, destroy records permanently, if you [synchronize](./Sync/Intro.md), mark as deleted instead.\n\n```js\nawait somePost.markAsDeleted() // syncable\nawait somePost.destroyPermanently() // permanent\n```\n\n**Note:** Do not access, update, or observe records after they're deleted.\n\n## Advanced\n\n- `Model.observe()` - usually you only use this [when connecting records to components](./Components.md), but you can manually observe a record outside of React components. The returned [RxJS](https://github.com/reactivex/rxjs) `Observable` will emit the record immediately upon subscription, and then every time the record is updated. If the record is deleted, the Observable will complete.\n- `Query.observe()`, `Relation.observe()` — analagous to the above, but for [Queries](./Query.md) and [Relations](./Relation.md)\n- `Query.observeWithColumns()` - used for [sorted lists](./Components.md)\n- `Collection.findAndObserve(id)` — same as using `.find(id)` and then calling `record.observe()`\n- `Model.prepareUpdate()`, `Collection.prepareCreate`, `Database.batch` — used for [batch updates](./Writers.md)\n- `Database.unsafeResetDatabase()` destroys the whole database - [be sure to see this comment before using it](https://github.com/Nozbe/WatermelonDB/blob/22188ee5b6e3af08e48e8af52d14e0d90db72925/src/Database/index.js#L131)\n- To override the `record.id` during the creation, e.g. to sync with a remote database, you can do it by `record._raw` property. Be aware that the `id` must be of type `string`.\n    ```js\n    await database.get('posts').create(post => {\n      post._raw.id = serverId\n    })\n    ```\n\n### Advanced: Unsafe raw execute\n\n⚠️ Do not use this if you don't know what you're doing...\n\nThere is an escape hatch to drop down from WatermelonDB to underlying database level to execute arbitrary commands. Use as a last resort tool:\n\n```js\nawait database.write(() => {\n  // sqlite:\n  await database.adapter.unsafeExecute({\n    sqls: [\n      // [sql_query, [placeholder arguments, ...]]\n      ['create table temporary_test (id, foo, bar)', []],\n      ['insert into temporary_test (id, foo, bar) values (?, ?, ?)', ['t1', true, 3.14]],\n    ]\n  })\n\n  // lokijs:\n  await database.adapter.unsafeExecute({\n    loki: loki => {\n      loki.addCollection('temporary_test', { unique: ['id'], indices: [], disableMeta: true })\n      loki.getCollection('temporary_test').insert({ id: 't1', foo: true, bar: 3.14 })\n    }\n  })\n})\n```\n\n* * *\n\n## Next steps\n\n➡️ Now that you can create and update records, [**connect them to React components**](./Components.md)\n\n"
  },
  {
    "path": "docs-website/docs/docs/Components.md",
    "content": "# Connecting Components\n\nAfter you [define some Models](./Model.md), it's time to connect Watermelon to your app's interface. We're using React in this guide, however WatermelonDB can be used with any UI framework.\n\n**Note:** If you're not familiar with higher-order components, read [React documentation](https://reactjs.org/docs/higher-order-components.html), check out [`recompose`](https://github.com/acdlite/recompose)… or just read the examples below to see it in practice!\n\n## Reactive components\n\nHere's a very simple React component rendering a `Comment` record:\n\n```jsx\nconst Comment = ({ comment }) => (\n  <div>\n    <p>{comment.body}</p>\n  </div>\n)\n```\n\nNow we can fetch a comment: `const comment = await commentsCollection.find(id)` and then render it: `<Comment comment={comment} />`. The only problem is that this is **not reactive**. If the Comment is updated or deleted, the component will not re-render to reflect the changes. (Unless an update is forced manually or the parent component re-renders).\n\nLet's enhance the component to make it _observe_ the `Comment` automatically:\n\n```jsx\nimport { withObservables } from '@nozbe/watermelondb/react'\n\nconst enhance = withObservables(['comment'], ({ comment }) => ({\n  comment // shortcut syntax for `comment: comment.observe()`\n}))\nconst EnhancedComment = enhance(Comment)\nexport default EnhancedComment\n```\n\nNow, if we render `<EnhancedComment comment={comment} />`, it **will** update every time the comment changes.\n\n### Reactive lists\n\nLet's render the whole `Post` with comments:\n\n```jsx\nimport { withObservables } from '@nozbe/watermelondb/react'\nimport EnhancedComment from 'components/Comment'\n\nconst Post = ({ post, comments }) => (\n  <article>\n    <h1>{post.name}</h1>\n    <p>{post.body}</p>\n    <h2>Comments</h2>\n    {comments.map(comment =>\n      <EnhancedComment key={comment.id} comment={comment} />\n    )}\n  </article>\n)\n\nconst enhance = withObservables(['post'], ({ post }) => ({\n  post,\n  comments: post.comments, // Shortcut syntax for `post.comments.observe()`\n}))\n\nconst EnhancedPost = enhance(Post)\nexport default EnhancedPost\n```\n\nNotice a couple of things:\n\n1. We're starting with a simple non-reactive `Post` component\n2. Like before, we enhance it by observing the `Post`. If the post name or body changes, it will re-render.\n3. To access comments, we fetch them from the database and observe using `post.comments.observe()` and inject a new prop `comments`. (`post.comments` is a Query created using `@children`).\n\n   Note that we can skip `.observe()` and just pass `post.comments` for convenience — `withObservables` will call observe for us\n4. By **observing the Query**, the `<Post>` component will re-render if a comment is created or deleted\n5. However, observing the comments Query will not re-render `<Post>` if a comment is _updated_ — we render the `<EnhancedComment>` so that _it_ observes the comment and re-renders if necessary.\n\n### Reactive relations\n\nThe `<Comment>` component we made previously only renders the body of the comment but doesn't say who posted it.\n\nAssume the `Comment` model has a `@relation('users', 'author_id') author` field. Let's render it:\n\n```jsx\nconst Comment = ({ comment, author }) => (\n  <div>\n    <p>{comment.body} — by {author.name}</p>\n  </div>\n)\n\nconst enhance = withObservables(['comment'], ({ comment }) => ({\n  comment,\n  author: comment.author, // shortcut syntax for `comment.author.observe()`\n}))\nconst EnhancedComment = enhance(Comment)\n```\n\n`comment.author` is a [Relation object](./Relation.md), and we can call `.observe()` on it to fetch the `User` and then observe changes to it. If author's name changes, the component will re-render.\n\n**Note** again that we can also pass `Relation` objects directly for convenience, skipping `.observe()`\n\n### Reactive optional relations\n\nContinuing the above example, if the comment has no author, the `comment.author_id` must be null. If `comment.author_id` has a value, the author record it refers to must be stored in the database, otherwise `withObservables` will throw an error that the record was not found.\n\n\n### Reactive counters\n\nLet's make a `<PostExcerpt>` component to display on a *list* of Posts, with only a brief summary of the contents and only the number of comments it has:\n\n```jsx\nconst PostExcerpt = ({ post, commentCount }) => (\n  <div>\n    <h1>{post.name}</h1>\n    <p>{getExcerpt(post.body)}</p>\n    <span>{commentCount} comments</span>\n  </div>\n)\n\nconst enhance = withObservables(['post'], ({ post }) => ({\n  post,\n  commentCount: post.comments.observeCount()\n}))\n\nconst EnhancedPostExcerpt = enhance(PostExcerpt)\n```\n\nThis is very similar to normal `<Post>`. We take the `Query` for post's comments, but instead of observing the _list_ of comments, we call `observeCount()`. This is far more efficient. And as always, if a new comment is posted, or one is deleted, the component will re-render with the updated count.\n\n## Hey, what about React Hooks?\n\nWe get it — HOCs are so 2017, and Hooks are the future! And we agree.\n\nHowever, Hooks are not compatible with WatermelonDB's asynchronous API. You _could_ use alternative open-source Hooks for Rx Observables, however we don't recommend that. They won't work correctly in all cases and won't be as optimized for performance with WatermelonDB as `withObservables`. In the future, once Concurrent React is fully developed and published, WatermelonDB will have official hooks.\n\n**[See discussion about official `useObservables` Hook](https://github.com/Nozbe/withObservables/issues/16)**\n\n## Understanding `withObservables`\n\nLet's unpack this:\n\n```js\nwithObservables(['post'], ({ post }) => ({\n  post: post.observe(),\n  commentCount: post.comments.observeCount()\n}))\n```\n\n1. Starting from the second argument, `({ post })` are the input props for the component. Here, we receive `post` prop with a `Post` object.\n2. These:\n    ```js\n    ({\n      post: post.observe(),\n      commentCount: post.comments.observeCount()\n    })\n    ```\n    are the enhanced props we inject. The keys are props' names, and values are `Observable` objects. Here, we override the `post` prop with an observable version, and create a new `commentCount` prop.\n3. The first argument: `['post']` is a list of props that trigger observation restart. So if a different `post` is passed, that new post will be observed. If you pass `[]`, the rendered Post will not change. You can pass multiple prop names if any of them should cause observation to re-start. Think of it the same way as the `deps` argument you pass to `useEffect` hook.\n4. **Rule of thumb**: If you want to use a prop in the second arg function, pass its name in the first arg array\n\n## Advanced\n\n1. **findAndObserve**. If you have, say, a post ID from your Router (URL in the browser), you can use:\n   ```js\n   withObservables(['postId'], ({ postId, database }) => ({\n     post: database.get('posts').findAndObserve(postId)\n   }))\n   ```\n1. **RxJS transformations**. The values returned by `Model.observe()`, `Query.observe()`, `Relation.observe()` are [RxJS Observables](https://github.com/ReactiveX/rxjs). You can use standard transforms like mapping, filtering, throttling, startWith to change when and how the component is re-rendered.\n1. **Custom Observables**. `withObservables` is a general-purpose HOC for Observables, not just Watermelon. You can create new props from any `Observable`.\n\n### Advanced: observing sorted lists\n\nIf you have a list that's dynamically sorted (e.g. sort comments by number of likes), use `Query.observeWithColumns` to ensure the list is re-rendered when its order changes:\n\n```jsx\n// This is a function that sorts an array of comments according to its `likes` field\n// I'm using `ramda` functions for this example, but you can do sorting however you like\nconst sortComments = sortWith([\n  descend(prop('likes'))\n])\n\nconst CommentList = ({ comments }) => (\n  <div>\n    {sortComments(comments).map(comment =>\n      <EnhancedComment key={comment.id} comment={comment} />\n    )}\n  </div>\n)\n\nconst enhance = withObservables(['post'], ({ post }) => ({\n  comments: post.comments.observeWithColumns(['likes'])\n}))\n\nconst EnhancedCommentList = enhance(CommentList)\n```\n\nIf you inject `post.comments.observe()` into the component, the list will not re-render to change its order, only if comments are added or removed. Instead, use `query.observeWithColumns()` with an array of [**column names**](./Schema.md) you use for sorting to re-render whenever a record on the list has any of those fields changed.\n\n### Advanced: observing 2nd level relations\n\nIf you have 2nd level relations, like author's `Contact` info, and want to connect it to a component as well, you cannot simply use `post.author.contact.observe()` in `withObservables`. Remember, `post.author` is not a `User` object, but a `Relation` that has to be asynchronously fetched.\n\nBefore accessing and observing the `Contact` relation, you need to resolve the `author` itself. Here is the simplest way to do it:\n\n```js\nimport { compose } from '@nozbe/watermelondb/react'\n\nconst enhance = compose(\n  withObservables(['post'], ({ post }) => ({\n    post,\n    author: post.author,\n  })),\n  withObservables(['author'], ({ author }) => ({\n    contact: author.contact,\n  })),\n)\n\nconst EnhancedPost = enhance(PostComponent);\n```\n\nIf you're not familiar with function composition, read the `enhance` function from top to bottom:\n\n- first, the PostComponent is enhanced by changing the incoming `post` prop into its observable version, and by adding a new `author` prop that will contain the fetched contents of `post.author`\n- then, the enhanced component is enhanced once again, by adding a `contact` prop containing the fetched contents of `author.contact`.\n\n#### Alternative method of observing 2nd level relations\n\nIf you are familiar with `rxjs`, another way to achieve the same result is using `switchMap` operator:\n\n```js\nimport { switchMap } from 'rxjs/operators'\n\nconst enhance = withObservables(['post'], ({post}) => ({\n  post: post,\n  author: post.author,\n  contact: post.author.observe().pipe(switchMap(author => author.contact.observe()))\n}))\n\nconst EnhancedPost = enhance(PostComponent)\n```\n\nNow `PostComponent` will have `Post`, `Author` and `Contact` props.\n\n#### 2nd level optional relations\n\nIf you have an optional relation between `Post` and `Author`, the enhanced component might receive `null` as `author` prop. As you must always return an observable for the `contact` prop, you can use `rxjs`'s `of` function to create a default or empty `Contact` prop:\n\n```js\nimport { of as of$ } from 'rxjs'\nimport { withObservables, compose } from '@nozbe/watermelondb/react'\n\nconst enhance = compose(\n  withObservables(['post'], ({ post }) => ({\n    post,\n    author: post.author,\n  })),\n  withObservables(['author'], ({ author }) => ({\n    contact: author ? author.contact.observe() : of$(null),\n  })),\n)\n```\n\nWith the `switchMap` approach, you can do:\n\n```js\nconst enhance = withObservables(['post'], ({post}) => ({\n  post: post,\n  author: post.author,\n  contact: post.author.observe().pipe(\n    switchMap(author => author ? author.contact : of$(null))\n  )\n}))\n```\n\n## Database Provider\n\nTo prevent prop drilling you can use the Database Provider and the `withDatabase` Higher-Order Component.\n\n```jsx\nimport { DatabaseProvider } from '@nozbe/watermelondb/react'\n\n// ...\n\nconst database = new Database({\n  adapter,\n  modelClasses: [Blog, Post, Comment],\n})\n\nrender(\n  <DatabaseProvider database={database}>\n    <Root />\n  </DatabaseProvider>, document.getElementById('application')\n)\n\n```\n\nTo consume the database in your components you just wrap your component like so:\n\n```jsx\nimport { withDatabase, compose } from '@nozbe/watermelondb/react'\n\n// ...\n\nexport default compose(\n  withDatabase,\n  withObservables([], ({ database }) => ({\n    blogs: database.get('blogs').query(),\n  })),\n)(BlogList)\n\n```\n\nThe database prop in the `withObservables` Higher-Order Component is provided by the database provider.\n\n### `useDatabase`\n\nYou can also consume `Database` object using React Hooks syntax:\n\n```js\nimport { useDatabase } from '@nozbe/watermelondb/react'\n\nconst Component = () => {\n   const database = useDatabase()\n}\n```\n\n* * *\n\n## Next steps\n\n➡️ Next, learn more about [**custom Queries**](./Query.md)\n"
  },
  {
    "path": "docs-website/docs/docs/Implementation/Architecture.md",
    "content": "# Architecture\n\n## Base objects\n\n`Database` is the root object of Watermelon. It owns:\n\n- a `DatabaseAdapter`\n- a map of `Collection`s\n\n`DatabaseAdapter` connects Watermelon's reactive world to low-level imperative world of databases. See [Adapters](./DatabaseAdapters.md).\n\n`Collection` manages all records of a given kind:\n\n- it has a cache of records already fetched from the database (`RecordCache`)\n- it has the public API to `find`, `query` and `create` existing records\n- it implements fetch/update/delete operations on records\n\n`Model` is an instance of a collection record. A model _class_ describes a _kind_ of a record. `Model` is the base class for your concrete models (e.g. `Post`, `Comment`, `Task`):\n\n- it describes the specific instance - `id` + all custom fields and actions\n- it has public API to `update`, `markAsDeleted` and `destroyPermanently`\n- implements record-level observation `observe()`\n- static fields describe base information about a model (`table`, `associations`) - See [Defining models](../Model.md)\n\nAs a general rule, `Model` manages the state of a specific instance, and `Collection` of the entire collection of records. So for example, `model.markAsDeleted()` changes the local state of called record, but then delegates to its collection to notify collection observers and actually remove from the database\n\n`Query` is a helper object that gives us a nice API to perform queries (`query.observe()`, `query.fetchCount()`):\n\n- created via `collection.query()`\n- encapsulates a `QueryDescription` structure which actually describes the query conditions\n- fetch/observe methods actually delegate to `Collection` to perform database operations\n- caches `Observable`s created by `observe/observeCount` methods so they can be reused and shared\n\n## Helper functions\n\nWatermelon's objects and classes are meant to be as minimal as possible — only manage their own state and be an API for your app. Most logic should be stateless, and implemented as pure functions:\n\n`QueryDescription` is a structure (object) describing the query, built using `Q.*` helper functions\n\n`encodeMatcher()`, `simpleObserver()`, `reloadingObserver()`, `fieldObserver()` implement query observation logic.\n\nModel decorators transform simple class properties into Watermelon-aware record fields.\n\nMuch of Adapters' logic is implemented as pure functions too. See [Adapters](./DatabaseAdapters.md).\n"
  },
  {
    "path": "docs-website/docs/docs/Implementation/DatabaseAdapters.md",
    "content": "# Database Adapters\n\nIn this guide, you'll learn how to add support for new databases and new platforms to WatermelonDB.\n\n## Introduction\n\nWatermelonDB is designed to be database-agnostic. It's a frontend JavaScript database framework, but its high-level abstractions can be plugged in to any underlying database, platform, or UI framework. We call the translation layer between underlying databases and high-level WatermelonDB APIs **database adapters**.\n\n## Currently supported databases\n\n### SQLite\n\nSupported frameworks:\n\n- React Native:\n  - Operating systems:\n    - iOS\n    - Android\n  - Implementations:\n    - JSI adapter\n    - New NativeModule (added in 0.26)\n    - Legacy NativeModule (deprecated in 0.26)\n- NodeJS\n  - via `better-sqlite3` - contributed by Sid Ferreira\n\n### LokiJS\n\nSupported frameworks:\n\n- Web\n  - Storage: IndexedDB\n- NodeJS\n  - Storage: in-memory only\n\nWhy [LokiJS](http://techfort.github.io/LokiJS/)? WebSQL would be a perfect fit for Watermelon, but sadly is a dead API, so we must use IndexedDB, but its querying capabilities make it unsuitable as a serious database. LokiJS implements a very fast in-memory querying API, using IndexedDB as storage.\n\n## Contribute these adapters!\n\nPlease contribute to WatermelonDB. We'd love to support these platforms and databases:\n\n- [React Native for Windows and macOS](https://microsoft.github.io/react-native-windows/)\n- [Realm database](https://github.com/realm/realm-cpp)\n- SQLite for web ([sql.js](https://github.com/sql-js/sql.js/) or [absurd-sql](https://github.com/jlongster/absurd-sql))\n- LokiJS NodeJS storage option\n- SQLite for [Electron](https://www.electronjs.org), Tauri, etc.\n- SQLite for [Capacitor](https://capacitorjs.com)\n\n## Adding new React Native operating systems\n\nThanks to our cross-platform JSI (C++) SQLite adapter, it takes very little code to add support for new React Native platforms (like macOS or Windows).\n\nAll you have to do is this:\n\n- Compile `.cpp` files in `native/shared` folder\n- Link library with `sqlite3`\n  - Use system-provided sqlite3 if possible (we do that on iOS)\n  - If not, we ship sqlite source code via NPM `@nozbe/sqlite` package. Just add `node_modules/@nozbe/sqlite/**` to search paths and compile `node_modules/@nozbe/sqlite/*/sqlite3.c`\n- Provide implementation for `native/shared/DatabasePlatform.h`\n  - Please note that most of these functions can remain unimplemented (empty) for basic operation - e.g. you can skip logging, memory, turbo json support\n- Provide a React Native hook that calls `Database::install(jsi::Runtime *)`\n\nCheck out `native/android-jsi` and `native/ios` for two implementation examples. You might be able to reuse some code from these, e.g. platform support stubs or `CMakeLists.txt`.\n\n## Adding new frameworks to SQLite adapter\n\nLet's say you want to add support for a new JS+native framework, like Electron, Tauri, NativeScript or Capacitor.\n\nThis takes more work, but ultimately, given that (iOS, Android, JS, C++, Objective-C, Java) are supported already (just for React Native and Node), you only need to develop the glue code necessary to bridge the gap between `src/adapters/sqlite` JS code, and the native but non-React-Native-specific bits. You'll need some familiarity with the platform you're trying to support, but little WatermelonDB/React Native/C++ familiary will be needed to get this done.\n\n### JS-side glue\n\nThe general SQLite implementation is in `src/adapters/sqlite/index.js`. It forwards database calls to `this._dispatcher`. The dispatcher is the JS-side bridge/glue code.\n\nSee `src/adapters/sqlite/makeDispatcher` to see concrete dispatchers and add your own, depending on the platform's convention of calling native code. For example:\n\n- `makeDispatcher/index.js` (Node JS) just imports more JS code, since native=JS in this case\n- `makeDispatcher/index.native.js` (React Native) calls `require('react-native').NativeModules`\n\n### Native-side glue\n\nDepending on the capabilities of the framework you want to support, there's a few ways to go about this:\n\n**The easy (JS-only) way**. If your framework has existing SQLite bindings in JavaScript **that work synchronously** (similar to [better-sqlite3](https://github.com/WiseLibs/better-sqlite3) in Node), you can reuse code in `src/adapters/sqlite/sqlite-node`\n\n**The Java/Objective-C way**. If your framework targets iOS, macOS, or Android, and you're terrified of C++, you can reuse the React Native NativeModule implementation.\n\n  - Look at `native/ios/WatermelonDB/objc/WMDatabase.{h,m}` and `WMDatabaseDriver.{h,m}` for the iOS implementation. These files contain SQLite, WatermelonDB, and iOS-specific logic, but without React Native details. You need to provide an equivalent of `WMDatabaseBridge` (the React Native glue between `WMDatabaseDriver` and JS) for your framework\n  - For Android, look at `native/android/src/main/java/com/nozbe/watermelondb/WMDatabase.java` and `WMDatabaseDriver.java`\n\n**The C++ way**. The best way is to refactor the React Native C++ JSI module to split off React Native-specific logic and leave a framework-independent core. Doing this way ensures that your port will receive support for new operating systems, and all the new features, as the core React Native module will focus on the C++ implementation in the long term. Contact @radex for guidance about this.\n\n## Adding new databases\n\nIf you want to contribute support to new underlying databases (i.e. not SQL or LokiJS-based), this is a rough sketch of what's required:\n\n- A new `FoodbAdapter` that conforms to `DatabaseAdapter` (`src/adapters/type.js`). You can initially skip some method implementations for basic support, most basic are `find, query, count, batch`.\n- Some way to convert WatermelonDB's query language into queries specific for your database. For reference, see:\n  - `src/adapters/sqlite/encodeQuery` for generating SQL\n  - `src/adapters/lokijs/worker/encodeQuery` for generating LokiJS queries + `executeQuery` which executes joins (which Loki does not natively support)\n"
  },
  {
    "path": "docs-website/docs/docs/Implementation/Publishing.md",
    "content": "# Publishing WatermelonDB\n\n### Step 1: Run all automated tests\n\n```bash\nyarn ci:check && yarn test:ios && yarn test:android && yarn ktlint\n```\n\n### Step 2: Test manually in a real app\n\n```bash\nyarn build\n```\n\nThen copy `dist/` and replace `app/node_modules/@nozbe/watermelondb` with it.\n\nIf a quick smoke test passes, proceed to publish.\n\n### Step 3: Update CHANGELOG\n\nChange `Unreleased` header to the new version, add new Unreleased\n\n### Step 4: Publish\n\n```bash\nnpm run release\n\n# skips checks (only use on prerelease)\nnpm run release --skip-checks\n```\n\nDon't use `yarn release` (or `yarn publish`) — it won't work (yarn doesn't support NPM 2FA).\n"
  },
  {
    "path": "docs-website/docs/docs/Implementation/SyncImpl.md",
    "content": "---\ntitle: Sync implementation\nhide_title: true\n---\n\n# Sync implementation details\n\nIf you're looking for a guide to implement Watermelon Sync in your app, see [**Synchronization**](../Sync/Intro.md).\n\nIf you want to contribute to Watermelon Sync, or implement your own synchronization engine from scratch, read this.\n\n## Implementing your own sync from scratch\n\nFor basic details about how changes tracking works, see: [📺 Digging deeper into WatermelonDB](https://www.youtube.com/watch?v=uFvHURTRLxQ)\n\nWhy you might want to implement a custom sync engine? If you have an existing remote server architecture that's difficult to adapt to Watermelon sync protocol, or you specifically want a different architecture (e.g. single HTTP request -- server resolves conflicts). Be warned, however, that **implementing sync that works reliably** is a hard problem, so we recommend sticking to Watermelon Sync and tweaking it as needed.\n\nThe rest of this document contains details about how Watermelon Sync works - you can use that as a blueprint for your own work.\n\nIf possible, please use sync implementation helpers from `sync/*.js` to keep your custom sync implementation have as much commonality as possible with the standard implementation. This is good both for you and for the rest of WatermelonDB community, as we get to share improvements and bug fixes. If the helpers are _almost_ what you need, but not quite, please send pull requests with improvements!\n\n## Watermelon Sync -- Details\n\n### General design\n\n- master/replica - server is the source of truth, client has a full copy and syncs back to server (no peer-to-peer syncs)\n- two phase sync: first pull remote changes to local app, then push local changes to server\n- client resolves conflicts\n- content-based, not time-based conflict resolution\n- conflicts are resolved using per-column client-wins strategy: in conflict, server version is taken\n  except for any column that was changed locally since last sync.\n- local app tracks its changes using a _status (synced/created/updated/deleted) field and _changes\n  field (which specifies columns changed since last sync)\n- server only tracks timestamps (or version numbers) of every record, not specific changes\n- sync is performed for the entire database at once, not per-collection\n- eventual consistency (client and server are consistent at the moment of successful pull if no\n  local changes need to be pushed)\n- non-blocking: local database writes (but not reads) are only momentarily locked when writing data\n  but user can safely make new changes throughout the process\n\n### Sync procedure\n\n1. Pull phase\n  - get `lastPulledAt` timestamp locally (null if first sync)\n  - call `pullChanges` function, passing `lastPulledAt`\n    - server responds with all changes (create/update/delete) that occured since `lastPulledAt`\n    - server serves us with its current timestamp\n  - IN ACTION (lock local writes):\n    - ensure no concurrent syncs\n    - apply remote changes locally\n      - insert new records\n        - if already exists (error), update\n        - if locally marked as deleted (error), un-delete and update\n      - update records\n        - if synced, just replace contents with server version\n        - if locally updated, we have a conflict!\n          - take remote version, apply local fields that have been changed locally since last sync\n            (per-column client wins strategy)\n          - record stays marked as updated, because local changes still need to be pushed\n        - if locally marked as deleted, ignore (deletion will be pushed later)\n        - if doesn't exist locally (error), create\n      - destroy records\n        - if already deleted, ignore\n        - if locally changed, destroy anyway\n        - ignore children (server ought to schedule children to be destroyed)\n    - if successful, save server's timestamp as new `lastPulledAt`\n2. Push phase\n  - Fetch local changes\n    - Find all locally changed records (created/updated record + deleted IDs) for all collections\n    - Strip _status, _changed\n  - Call `pushChanges` function, passing local changes object, and the new `lastPulledAt` timestamp\n    - Server applies local changes to database, and sends OK\n    - If one of the pushed records has changed *on the server* since `lastPulledAt`, push is aborted,\n      all changes reverted, and server responds with an error\n  - IN ACTION (lock local writes):\n    - markLocalChangesAsSynced:\n      - take local changes fetched in previous step, and:\n      - permanently destroy records marked as deleted\n      - mark created/updated records as synced and reset their _changed field\n      - note: *do not* mark record as synced if it changed locally since `fetch local changes` step\n        (user could have made new changes that need syncing)\n\n### Notes\n\n- This procedure is designed such that if sync fails at any moment, and even leaves local app in\n  inconsistent (not fully synced) state, we should still achieve consistency with the next sync:\n  - applyRemoteChanges is designed such that if all changes are applied, but `lastPulledAt` doesn't get\n    saved — so during next pull server will serve us the same changes, second applyRemoteChanges will\n    arrive at the same result\n  - local changes before \"fetch local changes\" step don't matter at all - user can do anything\n  - local changes between \"fetch local changes\" and \"mark local changes as synced\" will be ignored\n    (won't be marked as synced) - will be pushed during next sync\n  - if changes don't get marked as synced, and are pushed again, server should apply them the same way\n  - remote changes between pull and push phase will be locally ignored (will be pulled next sync)\n    unless there's a per-record conflict (then push fails, but next sync resolves both pull and push)\n\n### Migration Syncs\n\nSchema versioning and migrations complicate sync, because a client might not be able to sync some tables and columns, but after upgrade to the newest version, it should be able to get consistent sync. To be able\nto do that, we need to know what's the schema version at which the last sync occured. Unfortunately,\nWatermelon Sync didn't track that from the first version, so backwards-compat is required.\n\n```\nsynchronize({ migrationsEnabledAtVersion: XXX })\n\n. . . .\n\nLPA = last pulled at\nMEA = migrationsEnabledAtVersion, schema version at which future migration support was introduced\nLS = last synced schema version (may be null due to backwards compat)\nCV = current schema version\n\nLPA     MEA     LS      CV      migration   set LS=CV?   comment\n\nnull    X       X       10      null        YES          first sync. regardless of whether the app\n                                                         is migration sync aware, we can note LS=CV\n                                                         to fetch all migrations once available\n\n100     null    X       X       null        NO           indicates app is not migration sync aware so\n                                                         we're not setting LS to allow future migration sync\n\n100     X       10      10      null        NO           up to date, no migration\n100     9       9       10      {9-10}      YES          correct migration sync\n100     9       null    10      {9-10}      YES          fallback migration. might not contain all\n                                                         necessary migrations, since we can't know for sure\n                                                         that user logged in at then-current-version==MEA\n\n100     9       11      10      ERROR       NO           LS > CV indicates programmer error\n100     11      X       10      ERROR       NO           MEA > CV indicates programmer error\n```\n\n### Reference\n\nThis design has been informed by:\n\n- 10 years of experience building synchronization at Nozbe\n- Kinto & Kinto.js\n  - https://github.com/Kinto/kinto.js/blob/master/src/collection.js\n  - https://kintojs.readthedocs.io/en/latest/api/#fetching-and-publishing-changes\n- Histo - https://github.com/mirkokiefer/syncing-thesis\n"
  },
  {
    "path": "docs-website/docs/docs/Installation.mdx",
    "content": "import Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n# Installation\n\nFirst, add Watermelon to your project:\n\n```bash\nyarn add @nozbe/watermelondb\n\n# (or with npm:)\nnpm install @nozbe/watermelondb\n```\n\n## React Native setup\n\n1. Install the Babel plugin for decorators if you haven't already:\n\n   ```bash\n   yarn add --dev @babel/plugin-proposal-decorators\n\n   # (or with npm:)\n   npm install -D @babel/plugin-proposal-decorators\n   ```\n\n2. Add ES6 decorators support to your `.babelrc` file:\n   ```json\n   {\n     \"presets\": [\"module:metro-react-native-babel-preset\"],\n     \"plugins\": [[\"@babel/plugin-proposal-decorators\", { \"legacy\": true }]]\n   }\n   ```\n3. Set up your iOS or Android project — see instructions below\n\n### iOS (React Native)\n\nAt least Xcode 15.x is recommended for building (earlier versions are likely to work, but not tested for compatibility).\n\n1. **Set up Babel config in your project**\n\n   See instructions above ⬆️\n\n2. **Link WatermelonDB's native library (using CocoaPods)**\n\n   Open your `Podfile` and add this:\n\n   ```ruby\n   # Uncomment this line if you're not using auto-linking or if auto-linking causes trouble\n   # pod 'WatermelonDB', path: '../node_modules/@nozbe/watermelondb'\n\n   # WatermelonDB dependency, should not be needed on modern React Native\n   # (please file an issue if this causes issues for you)\n   # pod 'React-jsi', path: '../node_modules/react-native/ReactCommon/jsi', modular_headers: true\n\n   # WatermelonDB dependency\n   pod 'simdjson', path: '../node_modules/@nozbe/simdjson', modular_headers: true\n   ```\n\n   Make sure you run `pod install` (or `bundle exec pod install`) after updating `Podfile`.\n\n   We highly recommend that you _do not_ use frameworks. If WatermelonDB fails to build in the frameworks mode for you, [use this workaround](https://github.com/Nozbe/WatermelonDB/issues/1285#issuecomment-1381323060) to force building it in static library mode.\n\n   Manual (non-CocoaPods) linking is not supported.\n\n### Android (React Native)\n\n**Set up Babel config in your project**\n\nSee instructions above ⬆️\n\n<details>\n  <summary>Linking Manually</summary>\n\nBy default, React Native uses **autolinking**, and **you don't need the steps below**! Only use this with old versions of React Native or if you opt out of autolinking.\n\n1. In `android/settings.gradle`, add:\n\n```gradle\ninclude ':watermelondb'\nproject(':watermelondb').projectDir =\n    new File(rootProject.projectDir, '../node_modules/@nozbe/watermelondb/native/android')\n```\n\n2. In `android/app/build.gradle`, add:\n\n```gradle\n// ...\ndependencies {\n    // ...\n    implementation project(':watermelondb')  // ⬅️ This!\n}\n```\n\n3. And finally, in `android/app/src/main/java/{YOUR_APP_PACKAGE}/MainApplication.java`, add:\n\n```java\n// ...\nimport com.nozbe.watermelondb.WatermelonDBPackage; // ⬅️ This!\n// ...\n@Override\nprotected List<ReactPackage> getPackages() {\n  return Arrays.<ReactPackage>asList(\n    new MainReactPackage(),\n    new WatermelonDBPackage() // ⬅️ Here!\n  );\n}\n```\n\n</details>\n\n<details>\n  <summary>Using with react-native-screens or react-native-gesture-handler</summary>\n  If you are using recent versions of react-native-screens or react-native-gesture-handler, you will\n  need to set the kotlin version to 1.5.20 or above (see section above)\n</details>\n\n<details>\n  <summary>Troubleshooting</summary>\n  If you get this error:\n\n> `Can't find variable: Symbol`\n\nYou're using an ancient version of JSC. Install [`jsc-android`](https://github.com/react-community/jsc-android-buildscripts) or Hermes.\n\n</details>\n\n<details>\n  <summary>JSI Installation (Optional, recommended)</summary>\n\nTo enable fast, highly performant, synchronous JSI operation on Android, you need to take a few\nadditional steps manually.\n\n1.  Make sure you have NDK installed (version `20.1.5948944` has been tested to work when writing this guide)\n2.  In `android/settings.gradle`, add:\n\n    ```gradle\n    include ':watermelondb-jsi'\n    project(':watermelondb-jsi').projectDir =\n        new File(rootProject.projectDir, '../node_modules/@nozbe/watermelondb/native/android-jsi')\n    ```\n\n3.  In `android/app/build.gradle`, add:\n\n    ```gradle\n    // ...\n    android {\n      // ...\n      packagingOptions {\n         pickFirst '**/libc++_shared.so' // ⬅️ This (if missing)\n      }\n    }\n\n    dependencies {\n        // ...\n        implementation project(':watermelondb-jsi') // ⬅️ This!\n    }\n    ```\n\n4.  If you're using Proguard, in `android/app/proguard-rules.pro` add:\n    ```\n    -keep class com.nozbe.watermelondb.** { *; }\n    ```\n5.  And finally, in `android/app/src/main/java/{YOUR_APP_PACKAGE}/MainApplication.{java|kt}`, add:\n\n  <Tabs>\n    <TabItem value=\"java\" label=\"Java\" default>\n\n    ```\n    // ...\n    import com.nozbe.watermelondb.jsi.WatermelonDBJSIPackage; // ⬅️ This!\n    // ...\n\n    @Override\n    protected List<ReactPackage> getPackages() {\n      return Arrays.<ReactPackage>asList(\n        // new MyReactNativePackage(),\n        new WatermelonDBJSIPackage() // ⬅️ Here!\n      );\n    }\n\n    ```\n\n    </TabItem>\n    <TabItem value=\"kotlin\" label=\"Kotlin\">\n\n    ```\n    // ...\n    import com.nozbe.watermelondb.jsi.WatermelonDBJSIPackage // ⬅️ This!\n    // ...\n    override val reactNativeHost: ReactNativeHost =\n      object : DefaultReactNativeHost(this) {\n        override fun getPackages(): List<ReactPackage> {\n          return PackageList(this).packages.apply {\n              // Packages that cannot be autolinked yet can be added manually here, for example:\n              // add(new MyReactNativePackage());\n              add(WatermelonDBJSIPackage())\n          }\n        }\n      }\n\n    ```\n\n    </TabItem>\n\n  </Tabs>\n\n#### Troubleshooting JSI issues\n\nIf you see a crash at launch similar to this after updating React Native:\n\n```\nsignal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0x79193ac4a9\n(...)\nbacktrace:\n      (...)\n      watermelondb::createMethod(facebook::jsi::Runtime&, facebook::jsi::Object&, char const*, unsigned int, std::__ndk1::function<facebook::jsi::Value (facebook::jsi::Runtime&, facebook::jsi::Value const*)>)+88\n      watermelondb::Database::install(facebook::jsi::Runtime*)+96)\n      (...)\n```\n\n… this is most likely due to broken `libc++_shared`. Run `./gradlew clean` from `native/android`, then try again.\n\n</details>\n\n## Web setup\n\nIf you haven't already, install Babel plugins for decorators, static class properties, and async/await to get the most out of Watermelon. This assumes you use Babel 7 and already support ES6 syntax.\n\n   ```bash\n   yarn add --dev @babel/plugin-proposal-decorators\n   yarn add --dev @babel/plugin-proposal-class-properties\n   yarn add --dev @babel/plugin-transform-runtime\n\n   # (or with npm:)\n   npm install -D @babel/plugin-proposal-decorators\n   npm install -D @babel/plugin-proposal-class-properties\n   npm install -D @babel/plugin-transform-runtime\n   ```\n\n### Webpack\nIf you're using Webpack, add ES7 support to your `.babelrc` file:\n   ```json\n   {\n     \"plugins\": [\n       [\"@babel/plugin-proposal-decorators\", { \"legacy\": true }],\n       [\"@babel/plugin-proposal-class-properties\", { \"loose\": true }],\n       [\n         \"@babel/plugin-transform-runtime\",\n         {\n           \"helpers\": true,\n           \"regenerator\": true\n         }\n       ]\n     ]\n   }\n   ```\n\n### Vite\nIf you're using Vite, you'll need to edit your vite.config.js file.\n\nIf you're working with React, ensure your config looks something like this:\n```js\nimport { defineConfig } from 'vite';\nimport react from '@vitejs/plugin-react';\n\nexport default defineConfig({\n    plugins: [\n        react({\n            babel: {\n                plugins: [\n                    [\"@babel/plugin-proposal-decorators\", { \"legacy\": true }],\n                    [\"@babel/plugin-proposal-class-properties\", { \"loose\": true }],\n                    [\n                        \"@babel/plugin-transform-runtime\",\n                        {\n                            \"helpers\": true,\n                            \"regenerator\": true\n                        }\n                    ]\n                ],\n            }\n        }),\n    ]\n});\n```\nIf you're not using React, you can try this (untested):\n```js\nimport { defineConfig } from 'vite';\nimport babel from 'vite-plugin-babel';\n\nexport default defineConfig({\n    plugins: [\n        babel({\n            babelConfig: {\n              babelrc: false,\n              configFile: false,\n              plugins: [\n                [\"@babel/plugin-proposal-decorators\", { \"legacy\": true }],\n                [\"@babel/plugin-proposal-class-properties\", { \"loose\": true }],\n                [\n                    \"@babel/plugin-transform-runtime\",\n                    {\n                        \"helpers\": true,\n                        \"regenerator\": true\n                    }\n                ]\n              ],\n            },\n        }),\n    ]\n});\n```\n\n## Windows (React Native)\n\nWatermelonDB has **experimental** support for [React Native Windows](https://microsoft.github.io/react-native-windows/), added in v0.27.\n\nNOTE: As of v0.28, Windows support is not maintained due to lack of resources, minimal demand, and difficulty maintaining support over React Native upgrades. If you're interested in sponsoring Windows support, please email me.\n\nTo set up:\n\n1. Set up Babel config in your project - See instructions above for all React Native platforms\n2. Run `npx react-native autolink-windows` to perform autolinking. See section below if you don't use autolinking.\n\nCaveats to keep in mind about React Native Windows support:\n\n- Windows support is new and experimental\n- Only JSI port is available, so you must initialize `SQLiteAdapter` with `{ jsi: true }`\n- JSI means that Remote Debugging (WebDebugger) is not available. Use direct debugging.\n- Enable Hermes when using WatermelonDB on RNW. Chakra has not been tested and may not work.\n- Turbo Sync has not been implemented\n- onDestroy event has not been implemented. This only causes issues if you need to reload JS bundle\n  at runtime (other than in development).\n\n<details>\n  <summary>Linking Manually</summary>\n\nBy default, React Native uses **autolinking**, and **you don't need the steps below**!\n\nFollow [instructions on React Native Windows website](https://microsoft.github.io/react-native-windows/docs/native-modules-using), noting that:\n\n- Path to vcxproj: `node_modules\\@nozbe\\watermelondb\\native\\windows\\WatermelonDB\\WatermelonDB.vcxproj`\n- Name of project to reference: `WatermelonDB`\n- Header for PCH: `#include \"winrt/WatermelonDB.h\"`\n- Package provider: `PackageProviders().Append(winrt::WatermelonDB::ReactPackageProvider());`\n\n</details>\n\n## NodeJS (SQLite) setup\n\nYou only need this if you want to use WatermelonDB in NodeJS with SQLite (e.g. for scripts that share code with your web/React Native app)\n\n1. Install [better-sqlite3](https://github.com/JoshuaWise/better-sqlite3) peer dependency\n\n   ```sh\n   yarn add --dev better-sqlite3\n\n   # (or with npm:)\n   npm install -D better-sqlite3\n   ```\n\n---\n\n## Next steps\n\n➡️ After Watermelon is installed, [**set it up**](./Setup.md)\n"
  },
  {
    "path": "docs-website/docs/docs/Model.md",
    "content": "# Model\n\nA **Model** class represents a type of thing in your app. For example, `Post`, `Comment`, `User`.\n\nBefore defining a Model, make sure you [defined its schema](./Schema.md).\n\n## Create a Model\n\nLet's define the `Post` model:\n\n```js\n// model/Post.js\nimport { Model } from '@nozbe/watermelondb'\n\nexport default class Post extends Model {\n  static table = 'posts'\n}\n```\n\nSpecify the table name for this Model — the same you defined [in the schema](./Schema.md).\n\nNow add the new Model to `Database`:\n\n```js\n// index.js\nimport Post from 'model/Post'\n\nconst database = new Database({\n  // ...\n  modelClasses: [Post],\n})\n```\n\n### Associations\n\nMany models relate to one another. A `Post` has many `Comment`s. And every `Comment` belongs to a `Post`. (Every relation is double-sided). Define those associations like so:\n\n```js\nclass Post extends Model {\n  static table = 'posts'\n  static associations = {\n    comments: { type: 'has_many', foreignKey: 'post_id' },\n  }\n}\n\nclass Comment extends Model {\n  static table = 'comments'\n  static associations = {\n    posts: { type: 'belongs_to', key: 'post_id' },\n  }\n}\n```\n\nOn the \"child\" side (`comments`) you define a `belongs_to` association, and pass a column name (key) that points to the parent (`post_id` is the ID of the post the comment belongs to).\n\nOn the \"parent\" side (`posts`) you define an equivalent `has_many` association and pass the same column name (⚠️ note that the name here is `foreignKey`).\n\n## Add fields\n\nNext, define the Model's _fields_ (properties). Those correspond to [table columns](./Schema.md) defined earlier in the schema.\n\n```js\nimport { field, text } from '@nozbe/watermelondb/decorators'\n\nclass Post extends Model {\n  static table = 'posts'\n  static associations = {\n    comments: { type: 'has_many', foreignKey: 'post_id' },\n  }\n\n  @text('title') title\n  @text('body') body\n  @field('is_pinned') isPinned\n}\n```\n\nFields are defined using ES6 decorators. Pass **column name** you defined in Schema as the argument to `@field`.\n\n**Field types**. Fields are guaranteed to be the same type (string/number/boolean) as the column type defined in Schema. If column is marked `isOptional: true`, fields may also be null.\n\n**User text fields**. For fields that contain arbitrary text specified by the user (e.g. names, titles, comment bodies), use `@text` - a simple extension of `@field` that also trims whitespace.\n\n**Note:** Why do I have to type the field/column name twice? The database convention is to use `snake_case` for names, and the JavaScript convention is to use camelCase. So for any multi-word name, the two differ. Also, for resiliency, we believe it's better to be explicit, because over time, you might want to refactor how you name your JavaScript field names, but column names must stay the same for backward compatibility.\n\n### Date fields\n\nFor date fields, use `@date` instead of `@field`. This will return a JavaScript `Date` object (instead of Unix timestamp integer).\n\n```js\nimport { date } from '@nozbe/watermelondb/decorators'\n\nclass Post extends Model {\n  // ...\n  @date('last_event_at') lastEventAt\n}\n```\n\n### Derived fields\n\nUse ES6 getters to define model properties that can be calculated based on database fields:\n\n```js\nimport { field, text } from '@nozbe/watermelondb/decorators'\n\nclass Post extends Model {\n  static table = 'posts'\n\n  @date('archived_at') archivedAt\n\n  get isRecentlyArchived() {\n    // in the last 7 days\n    return this.archivedAt &&\n      this.archivedAt.getTime() > Date.now() - 7 * 24 * 3600 * 1000\n  }\n}\n```\n\n### To-one relation fields\n\nTo point to a related record, e.g. `Post` a `Comment` belongs to, or author (`User`) of a `Comment`, use `@relation` or `@immutableRelation`:\n\n```js\nimport { relation, immutableRelation } from '@nozbe/watermelondb/decorators'\n\nclass Comment extends Model {\n  // ...\n  @relation('posts', 'post_id') post\n  @immutableRelation('users', 'author_id') author\n}\n```\n\n**➡️ Learn more:** [Relation API](./Relation.md)\n\n### Children (to-many relation fields)\n\nTo point to a list of records that belong to this Model, e.g. all `Comment`s that belong to a `Post`, you can define a simple `Query` using `@children`:\n\n```js\nimport { children } from '@nozbe/watermelondb/decorators'\n\nclass Post extends Model {\n  static table = 'posts'\n  static associations = {\n    comments: { type: 'has_many', foreignKey: 'post_id' },\n  }\n\n  @children('comments') comments\n}\n```\n\nPass the _table name_ of the related records as an argument to `@children`. The resulting property will be a `Query` you can fetch, observe, or count.\n\n**Note:** You must define a `has_many` association in `static associations` for this to work\n\n**➡️ Learn more:** [Queries](./Query.md)\n\n### Custom Queries\n\nIn addition to `@children`, you can define custom Queries or extend existing ones, for example:\n\n```js\nimport { children } from '@nozbe/watermelondb/decorators'\nimport { Q } from '@nozbe/watermelondb'\n\nclass Post extends Model {\n  static table = 'posts'\n  static associations = {\n    comments: { type: 'has_many', foreignKey: 'post_id' },\n  }\n\n  @children('comments') comments\n  @lazy verifiedComments = this.comments.extend(\n    Q.where('is_verified', true)\n  )\n}\n```\n\n**➡️ Learn more:** [Queries](./Query.md)\n\n### Writer methods\n\nDefine **writers** to simplify creating and updating records, for example:\n\n```js\nimport { writer } from '@nozbe/watermelondb/decorators'\n\nclass Comment extends Model {\n  static table = 'comments'\n\n  @field('is_spam') isSpam\n\n  @writer async markAsSpam() {\n    await this.update(comment => {\n      comment.isSpam = true\n    })\n  }\n}\n```\n\nMethods must be marked as `@writer` to be able to modify the database.\n\n**➡️ Learn more:** [Writers](./Writers.md)\n\n## Advanced fields\n\nYou can also use these decorators:\n\n- `@json` for complex serialized data\n- `@readonly` to make the field read-only\n- `@nochange` to disallow changes to the field _after the first creation_\n\nAnd you can make observable compound properties using RxJS...\n\n**➡️ Learn more:** [Advanced fields](./Advanced/AdvancedFields.md)\n\n* * *\n\n## Next steps\n\n➡️ After you define some Models, learn the [**Create / Read / Update / Delete API**](./CRUD.md)\n"
  },
  {
    "path": "docs-website/docs/docs/Query.md",
    "content": "---\ntitle: Querying\nhide_title: true\n---\n\n# Query API\n\n**Querying** is how you find records that match certain conditions, for example:\n\n- Find all comments that belong to a certain post\n- Find all _verified_ comments made by John\n- Count all verified comments made by John or Lucy published under posts made in the last two weeks\n\nBecause queries are executed on the database, and not in JavaScript, they're really fast. It's also how Watermelon can be fast even at large scales, because even with tens of thousands of records _total_, you rarely need to load more than a few dozen records at app launch.\n\n## Defining Queries\n\n### @children\n\nThe simplest query is made using `@children`. This defines a `Query` for all comments that belong to a `Post`:\n\n```js\nclass Post extends Model {\n  // ...\n  @children('comments') comments\n}\n```\n\n**➡️ Learn more:** [Defining Models](./Model.md)\n\n### Extended Query\n\nTo **narrow down** a `Query` (add [extra conditions](#query-conditions) to an existing Query), use `.extend()`:\n\n```js\nimport { Q } from '@nozbe/watermelondb'\nimport { children, lazy } from '@nozbe/watermelondb/decorators'\n\nclass Post extends Model {\n  // ...\n  @children('comments') comments\n\n  @lazy verifiedComments = this.comments.extend(\n    Q.where('is_verified', true)\n  )\n\n  @lazy verifiedAwesomeComments = this.verifiedComments.extend(\n    Q.where('is_awesome', true)\n  )\n}\n```\n\n**Note:** Use `@lazy` when extending or defining new Queries for performance\n\n### Custom Queries\n\nYou can query any table like so:\n\n```js\nimport { Q } from '@nozbe/watermelondb'\n\nconst users = await database.get('users').query(\n  // conditions that a user must match:\n  Q.on('comments', 'post_id', somePostId)\n).fetch()\n```\n\nThis fetches all users that made a comment under a post with `id = somePostId`.\n\nYou can define custom queries on a Model like so:\n\n```js\nclass Post extends Model {\n  // ...\n  @lazy commenters = this.collections.get('users').query(\n    Q.on('comments', 'post_id', this.id)\n  )\n}\n```\n\n## Executing Queries\n\nMost of the time, you execute Queries by connecting them to React Components like so:\n\n```js\nwithObservables(['post'], ({ post }) => ({\n  post,\n  comments: post.comments,\n  verifiedCommentCount: post.verifiedComments.observeCount(),\n}))\n```\n\n**➡️ Learn more:** [Connecting to Components](./Components.md)\n\n#### Fetch\n\nTo simply get the current list or current count (without observing future changes), use `fetch` / `fetchCount`.\n\n```js\nconst comments = await post.comments.fetch()\nconst verifiedCommentCount = await post.verifiedComments.fetchCount()\n\n// Shortcut syntax:\nconst comments = await post.comments\nconst verifiedCommentCount = await post.verifiedComments.count\n```\n\n## Query conditions\n\n```js\nimport { Q } from '@nozbe/watermelondb'\n// ...\ndatabase.get('comments').query(\n  Q.where('is_verified', true)\n)\n```\n\nThis will query **all** comments that are verified (all comments with one condition: the `is_verified` column of a comment must be `true`).\n\nWhen making conditions, you refer to [**column names**](./Schema.md) of a table (i.e. `is_verified`, not `isVerified`). This is because queries are executed directly on the underlying database.\n\nThe second argument is the value we want to query for. Note that the passed argument must be the same type as the column (`string`, `number`, or `boolean`; `null` is allowed only if the column is marked as `isOptional: true` in the schema).\n\n#### Empty query\n\n```js\nconst allComments = await database.get('comments').query().fetch()\n```\n\nA Query with no conditions will find **all** records in the collection.\n\n**Note:** Don't do this unless necessary. It's generally more efficient to only query the exact records you need.\n\n#### Multiple conditions\n\n```js\ndatabase.get('comments').query(\n  Q.where('is_verified', true),\n  Q.where('is_awesome', true)\n)\n```\n\nThis queries all comments that are **both** verified **and** awesome.\n\n### Conditions with other operators\n\n| Query | JavaScript equivalent |\n| ------------- | ------------- |\n| `Q.where('is_verified', true)` | `is_verified === true` (shortcut syntax) |\n| `Q.where('is_verified', Q.eq(true))` | `is_verified === true` |\n| `Q.where('archived_at', Q.notEq(null))` | `archived_at !== null` |\n| `Q.where('likes', Q.gt(0))` | `likes > 0`  |\n| `Q.where('likes', Q.weakGt(0))` | `likes > 0` (slightly different semantics — [see \"null behavior\"](#null-behavior) for details) |\n| `Q.where('likes', Q.gte(100))` | `likes >= 100` |\n| `Q.where('dislikes', Q.lt(100))` | `dislikes < 100` |\n| `Q.where('dislikes', Q.lte(100))` | `dislikes <= 100` |\n| `Q.where('likes', Q.between(10, 100))` | `likes >= 10 && likes <= 100` |\n| `Q.where('status', Q.oneOf(['published', 'draft']))` | `['published', 'draft'].includes(status)` |\n| `Q.where('status', Q.notIn(['archived', 'deleted']))` | `status !== 'archived' && status !== 'deleted'` |\n| `Q.where('status', Q.like('%bl_sh%'))` | `/.*bl.sh.*/i` (See note below!) |\n| `Q.where('status', Q.notLike('%bl_sh%'))` | `/^((!?.*bl.sh.*).)*$/i` (Inverse regex match) (See note below!) |\n| `Q.where('status', Q.includes('promoted'))` | `status.includes('promoted')` |\n\n### LIKE / NOT LIKE\n\nYou can use `Q.like` for search-related tasks. For example, to find all users whose username start with \"jas\" (case-insensitive) you can write\n\n```js\nusersCollection.query(\n  Q.where(\"username\", Q.like(`${Q.sanitizeLikeString(\"jas\")}%`)\n)\n```\n\nwhere `\"jas\"` can be changed dynamically with user input.\n\nNote that the behavior of `Q.like` is not exact and can differ somewhat between implementations (SQLite vs LokiJS). For instance, while the comparison is case-insensitive, SQLite cannot by default compare non-ASCII characters case-insensitively (unless you install ICU extension). Use `Q.like` for user input search, but not for tasks that require a precise matching behavior.\n\n**Note:** It's NOT SAFE to use `Q.like` and `Q.notLike` with user input directly, because special characters like `%` or `_` are not escaped. Always sanitize user input like so:\n```js\nQ.like(`%${Q.sanitizeLikeString(userInput)}%`)\nQ.notLike(`%${Q.sanitizeLikeString(userInput)}%`)\n```\n\n### AND/OR nesting\n\nYou can nest multiple conditions using `Q.and` and `Q.or`:\n\n```js\ndatabase.get('comments').query(\n  Q.where('archived_at', Q.notEq(null)),\n  Q.or(\n    Q.where('is_verified', true),\n    Q.and(\n      Q.where('likes', Q.gt(10)),\n      Q.where('dislikes', Q.lt(5))\n    )\n  )\n)\n```\n\nThis is equivalent to `archivedAt !== null && (isVerified || (likes > 10 && dislikes < 5))`.\n\n### Conditions on related tables (\"JOIN queries\")\n\nFor example: query all comments under posts published by John:\n\n```js\n// Shortcut syntax:\ndatabase.get('comments').query(\n  Q.on('posts', 'author_id', john.id),\n)\n\n// Full syntax:\ndatabase.get('comments').query(\n  Q.on('posts', Q.where('author_id', Q.eq(john.id))),\n)\n```\n\nNormally you set conditions on the table you're querying. Here we're querying **comments**, but we have a condition on the **post** the comment belongs to.\n\nThe first argument for `Q.on` is the table name you're making a condition on. The other two arguments are same as for `Q.where`.\n\n**Note:** The two tables [must be associated](./Model.md) before you can use `Q.on`.\n\n#### Multiple conditions on a related table\n\nFor example: query all comments under posts that are written by John *and* are either published or belong to `draftBlog`\n\n```js\ndatabase.get('comments').query(\n  Q.on('posts', [\n    Q.where('author_id', john.id)\n    Q.or(\n      Q.where('published', true),\n      Q.where('blog_id', draftBlog.id),\n    )\n  ]),\n)\n```\n\nInstead of an array of conditions, you can also pass `Q.and`, `Q.or`, `Q.where`, or `Q.on` as the second argument to `Q.on`.\n\n#### Nesting `Q.on` within AND/OR\n\nIf you want to place `Q.on` nested within `Q.and` and `Q.or`, you must explicitly define all tables you're joining on. (NOTE: The `Q.experimentalJoinTables` API is subject to change)\n\n```js\ntasksCollection.query(\n  Q.experimentalJoinTables(['projects']),\n  Q.or(\n    Q.where('is_followed', true),\n    Q.on('projects', 'is_followed', true),\n  ),\n)\n```\n\n#### Deep `Q.on`s\n\nYou can also nest `Q.on` within `Q.on`, e.g. to make a condition on a grandparent. You must explicitly define the tables you're joining on. (NOTE: The `Q.experimentalNestedJoin` API is subject to change). Multiple levels of nesting are allowed.\n\n```js\n// this queries tasks that are inside projects that are inside teams where team.foo == 'bar'\ntasksCollection.query(\n  Q.experimentalNestedJoin('projects', 'teams'),\n  Q.on('projects', Q.on('teams', 'foo', 'bar')),\n)\n```\n\n## Advanced Queries\n\n### Advanced observing\n\nCall `query.observeWithColumns(['foo', 'bar'])` to create an Observable that emits a value not only when the list of matching records changes (new records/deleted records), but also when any of the matched records changes its `foo` or `bar` column. [Use this for observing sorted lists](./Components.md)\n\n#### Count throttling\n\nBy default, calling `query.observeCount()` returns an Observable that is throttled to emit at most once every 250ms. You can disable throttling using `query.observeCount(false)`.\n\n### Column comparisons\n\nThis queries comments that have more likes than dislikes. Note that we're comparing `likes` column to another column instead of a value.\n\n```js\ndatabase.get('comments').query(\n  Q.where('likes', Q.gt(Q.column('dislikes')))\n)\n```\n\n### sortBy, take, skip\n\nYou can use these clauses to sort the query by one or more columns. Note that only simple ascending/descending criteria for columns are supported.\n\n```js\ndatabase.get('comments').query(\n  // sorts by number of likes from the most likes to the fewest\n  Q.sortBy('likes', Q.desc),\n  // if two comments have the same number of likes, the one with fewest dislikes will be at the top\n  Q.sortBy('dislikes', Q.asc),\n  // limit number of comments to 100, skipping the first 50\n  Q.skip(50),\n  Q.take(100),\n)\n```\n\nIt isn't _necessarily_ better or more efficient to sort on query level instead of in JavaScript, **however** the most important use case for `Q.sortBy` is when used alongside `Q.skip` and `Q.take` to implement paging - to limit the number of records loaded from database to memory on very long lists\n\n### Fetch IDs\n\nIf you only need IDs of records matching a query, you can optimize the query by calling `await query.fetchIds()` instead of `await query.fetch()`\n\n### Security\n\nRemember that Queries are a sensitive subject, security-wise. Never trust user input and pass it directly into queries. In particular:\n\n- Never pass into queries values you don't know for sure are the right type (e.g. value passed to `Q.eq()` should be a string, number, boolean, or null -- but not an Object. If the value comes from JSON, you must validate it before passing it!)\n- Never pass column names (without whitelisting) from user input\n- Values passed to `oneOf`, `notIn` should be arrays of simple types - be careful they don't contain objects\n- Do not use `Q.like` / `Q.notLike` without `Q.sanitizeLikeString`\n- Do not use `unsafe raw queries` without knowing what you're doing and sanitizing all user input\n\n### Unsafe SQL queries\n\n```js\nconst records = await database.get('comments').query(\n  Q.unsafeSqlQuery(`select * from comments where foo is not ? and _status is not 'deleted'`, ['bar'])\n).fetch()\n\nconst recordCount = await database.get('comments').query(\n  Q.unsafeSqlQuery(`select count(*) as count from comments where foo is not ? and _status is not 'deleted'`, ['bar'])\n).fetchCount()\n```\n\nYou can also observe unsafe raw SQL queries, however, if it contains `JOIN` statements, you must explicitly specify all other tables using `Q.experimentalJoinTables` and/or `Q.experimentalNestedJoin`, like so:\n\n```js\nconst records = await database.get('comments').query(\n  Q.experimentalJoinTables(['posts']),\n  Q.experimentalNestedJoin('posts', 'blogs'),\n  Q.unsafeSqlQuery(\n    'select comments.* from comments ' +\n      'left join posts on comments.post_id is posts.id ' +\n      'left join blogs on posts.blog_id is blogs.id' +\n      'where ...',\n  ),\n).observe()\n```\n\n⚠️ Please note:\n\n- Do not use this if you don't know what you're doing\n- Do not pass user input directly to avoid SQL Injection - use `?` placeholders and pass array of placeholder values\n- You must filter out deleted record using `where _status is not 'deleted'` clause\n- If you're going to fetch count of the query, use `count(*) as count` as the select result\n\n### Unsafe fetch raw\n\nIn addition to `.fetch()` and `.fetchIds()`, there is also `.unsafeFetchRaw()`. Instead of returning an array of `Model` class instances, it returns an array of raw objects.\n\nYou can use it as an unsafe optimization, or alongside `Q.unsafeSqlQuery`/`Q.unsafeLokiTransform` to create an advanced query that either skips fetching unnecessary columns or includes extra computed columns. For example:\n\n```js\nconst rawData = await database.get('posts').query(\n  Q.unsafeSqlQuery(\n    'select posts.text1, count(tag_assignments.id) as tag_count, sum(tag_assignments.rank) as tag_rank from posts' +\n      ' left join tag_assignments on posts.id = tag_assignments.post_id' +\n      ' group by posts.id' +\n      ' order by posts.position desc',\n  )\n).unsafeFetchRaw()\n```\n\n⚠️ You MUST NOT mutate returned objects. Doing so will corrupt the database.\n\n### Unsafe SQL/Loki expressions\n\nYou can also include smaller bits of SQL and Loki expressions so that you can still use as much of Watermelon query builder as possible:\n\n```js\n// SQL example:\npostsCollection.query(\n  Q.where('is_published', true),\n  Q.unsafeSqlExpr('tasks.num1 not between 1 and 5'),\n)\n\n// LokiJS example:\npostsCollection.query(\n  Q.where('is_published', true),\n  Q.unsafeLokiExpr({ text1: { $contains: 'hey' } })\n)\n```\n\nFor SQL, be sure to prefix column names with table name when joining with other tables.\n\n⚠️ Please do not use this if you don't know what you're doing. Do not pass user input directly to avoid SQL injection.\n\n### Multi-table column comparisons and `Q.unsafeLokiTransform`\n\nExample: we want to query comments posted more than 14 days after the post it belongs to was published.\n\nThere's sadly no built-in syntax for this, but can be worked around using unsafe expressions like so:\n\n```js\n// SQL example:\ncommentsCollection.query(\n  Q.on('posts', 'published_at', Q.notEq(null)),\n  Q.unsafeSqlExpr(`comments.createad_at > posts.published_at + ${14 * 24 * 3600 * 1000}`)\n)\n\n// LokiJS example:\ncommentsCollection.query(\n  Q.on('posts', 'published_at', Q.notEq(null)),\n  Q.unsafeLokiTransform((rawRecords, loki) => {\n    return rawRecords.filter(rawRecord => {\n      const post = loki.getCollection('posts').by('id', rawRecord.post_id)\n      return post && rawRecord.created_at > post.published_at + 14 * 24 * 3600 * 1000\n    })\n  }),\n)\n```\n\nFor LokiJS, remember that `rawRecord` is an unsanitized, unsafe object and must not be mutated. `Q.unsafeLokiTransform` only works when using `LokiJSAdapter` with `useWebWorkers: false`. There can only be one `Q.unsafeLokiTransform` clause per query.\n\n### `null` behavior\n\nThere are some gotchas you should be aware of. The `Q.gt`, `gte`, `lt`, `lte`, `oneOf`, `notIn`, `like` operators match the semantics of SQLite in terms of how they treat `null`. Those are different from JavaScript.\n\n**Rule of thumb:** No null comparisons are allowed.\n\nFor example, if you query `comments` for `Q.where('likes', Q.lt(10))`, a comment with 8 likes and 0 likes will be included, but a comment with `null` likes will not! In Watermelon queries, `null` is not less than any number. That's why you should avoid [making table columns optional](./Schema.md) unless you actually need it.\n\nSimilarly, if you query with a column comparison, like `Q.where('likes', Q.gt(Q.column('dislikes')))`, only comments where both `likes` and `dislikes` are not null will be compared. A comment with 5 likes and `null` dislikes will NOT be included. 5 is not greater than `null` here.\n\n**`Q.oneOf` operator**: It is not allowed to pass `null` as an argument to `Q.oneOf`. Instead of `Q.oneOf([null, 'published', 'draft'])` you need to explicitly allow `null` as a value like so:\n\n```js\npostsCollection.query(\n  Q.or(\n    Q.where('status', Q.oneOf(['published', 'draft'])),\n    Q.where('status', null)\n  )\n)\n```\n\n**`Q.notIn` operator**: If you query, say, posts with `Q.where('status', Q.notIn(['published', 'draft']))`, it will match posts with a status different than `published` or `draft`, however, it will NOT match posts with `status == null`. If you want to include such posts, query for that explicitly like with the example above.\n\n**`Q.weakGt` operator**: This is weakly typed version of `Q.gt` — one that allows null comparisons. So if you query `comments` with `Q.where('likes', Q.weakGt(Q.column('dislikes')))`, it WILL match comments with 5 likes and `null` dislikes. (For `weakGt`, unlike standard operators, any number is greater than `null`).\n\n## Contributing improvements to Watermelon query language\n\nHere are files that are relevant. This list may look daunting, but adding new matchers is actually quite simple and multiple first-time contributors made these improvements (including like, sort, take, skip). The implementation is just split into multiple files (and their test files), but when you look at them, it'll be easy to add matchers by analogy.\n\nWe recommend starting from writing tests first to check expected behavior, then implement the actual behavior.\n\n- `src/QueryDescription/test.js` - Test clause builder (`Q.myThing`) output and test that it rejects bad/unsafe parameters\n- `src/QueryDescription/index.js` - Add clause builder and type definition\n- `src/__tests__/databaseTests.js` - Add test (\"join\" if it requires conditions on related tables; \"match\" otherwise) that checks that the new clause matches expected records. From this, tests running against SQLite, LokiJS, and Matcher are generated. (If one of those is not supported, add `skip{Loki,Sql,Count,Matcher}: true` to your test)\n- `src/adapters/sqlite/encodeQuery/test.js` - Test that your query generates SQL you expect. (If your clause is Loki-only, test that error is thrown)\n- `src/adapters/sqlite/encodeQuery/index.js` - Generate SQL\n- `src/adapters/lokijs/worker/encodeQuery/test.js` - Test that your query generates the Loki query you expect (If your clause is SQLite-only, test that an error is thrown)\n- `src/adapters/lokijs/worker/encodeQuery/index.js` - Generate Loki query\n- `src/adapters/lokijs/worker/{performJoins/*.js,executeQuery.js}` - May be relevant for some Loki queries, but most likely you don't need to look here.\n- `src/observation/encodeMatcher/` - If your query can be checked against a record in JavaScript (e.g. you're adding new \"by regex\" matcher), implement this behavior here (`index.js`, `operators.js`). This is used for efficient \"simple observation\". You don't need to write tests - `databaseTests` are used automatically. If you can't or won't implement encodeMatcher for your query, add a check to `canEncode.js` so that it returns `false` for your query (Less efficient \"reloading observation\" will be used then). Add your query to `test.js`'s \"unencodable queries\" then.\n\n* * *\n\n## Next steps\n\n➡️ Now that you've mastered Queries, [**make more Relations**](./Relation.md)\n"
  },
  {
    "path": "docs-website/docs/docs/README.md",
    "content": "---\ntitle: Check out the README\nhide_title: true\n---\n\n<p align=\"center\">\n  <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/logo-horizontal2.png\" alt=\"WatermelonDB\" width=\"539\" />\n</p>\n\n<h4 align=\"center\">\n  A reactive database framework\n</h4>\n\n<p align=\"center\">\n  Build powerful React and React Native apps that scale from hundreds to tens of thousands of records and remain <em>fast</em> ⚡️\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/Nozbe/WatermelonDB/blob/master/LICENSE\">\n    <img src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\"/>\n  </a>\n\n  <a href=\"https://www.npmjs.com/package/@nozbe/watermelondb\">\n    <img src=\"https://img.shields.io/npm/v/@nozbe/watermelondb.svg\" alt=\"npm\"/>\n  </a>\n\n  <a href=\"https://gurubase.io/g/watermelondb\">\n    <img src=\"https://img.shields.io/badge/Gurubase-Ask%20WatermelonDB%20Guru-006BFF\" alt=\"Gurubase\"/>\n  </a>\n</p>\n\n|   | WatermelonDB |\n| - | ------------ |\n| ⚡️ | **Launch your app instantly** no matter how much data you have |\n| 📈 | **Highly scalable** from hundreds to tens of thousands of records |\n| 😎 | **Lazy loaded**. Only load data when you need it |\n| 🔄 | **Offline-first.** [Sync](https://watermelondb.dev/docs/Sync/Intro) with your own backend |\n| 📱 | **Multiplatform**. iOS, Android, Windows, web, and Node.js |\n| ⚛️ | **Optimized for React.** Easily plug data into components |\n| 🧰 | **Framework-agnostic.** Use JS API to plug into other UI frameworks |\n| ⏱ | **Fast.** And getting faster with every release! |\n| ✅ | **Proven.** Powers [Nozbe](https://nozbe.com/teams) since 2017 (and [many others](#who-uses-watermelondb)) |\n| ✨ | **Reactive.** (Optional) [RxJS](https://github.com/ReactiveX/rxjs) API |\n| 🔗 | **Relational.** Built on rock-solid [SQLite](https://www.sqlite.org) foundation |\n| ⚠️ | **Static typing** with [Flow](https://flow.org) or [TypeScript](https://typescriptlang.org) |\n\n## Why Watermelon?\n\n**WatermelonDB** is a new way of dealing with user data in React Native and React web apps.\n\nIt's optimized for building **complex applications** in React Native, and the number one goal is **real-world performance**. In simple words, _your app must launch fast_.\n\nFor simple apps, using Redux or MobX with a persistence adapter is the easiest way to go. But when you start scaling to thousands or tens of thousands of database records, your app will now be slow to launch (especially on slower Android devices). Loading a full database into JavaScript is expensive!\n\nWatermelon fixes it **by being lazy**. Nothing is loaded until it's requested. And since all querying is performed directly on the rock-solid [SQLite database](https://www.sqlite.org/index.html) on a separate native thread, most queries resolve in an instant.\n\nBut unlike using SQLite directly, Watermelon is **fully observable**. So whenever you change a record, all UI that depends on it will automatically re-render. For example, completing a task in a to-do app will re-render the task component, the list (to reorder), and all relevant task counters. [**Learn more**](https://www.youtube.com/watch?v=UlZ1QnFF4Cw).\n\n| <a href=\"https://www.youtube.com/watch?v=UlZ1QnFF4Cw\"><img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/watermelon-talk-thumbnail.jpg\" alt=\"React Native EU: Next-generation React Databases\" width=\"300\" /></a> |\n| ---- |\n| <p align=\"center\"><a href=\"https://www.youtube.com/watch?v=UlZ1QnFF4Cw\">📺 <strong>Next-generation React databases</strong><br/>(a talk about WatermelonDB)</a></p> |\n\n## Usage\n\n**Quick (over-simplified) example:** an app with posts and comments.\n\nFirst, you define Models:\n\n```js\nclass Post extends Model {\n  @field('name') name\n  @field('body') body\n  @children('comments') comments\n}\n\nclass Comment extends Model {\n  @field('body') body\n  @field('author') author\n}\n```\n\nThen, you connect components to the data:\n\n```js\nconst Comment = ({ comment }) => (\n  <View style={styles.commentBox}>\n    <Text>{comment.body} — by {comment.author}</Text>\n  </View>\n)\n\n// This is how you make your app reactive! ✨\nconst enhance = withObservables(['comment'], ({ comment }) => ({\n  comment,\n}))\nconst EnhancedComment = enhance(Comment)\n```\n\nAnd now you can render the whole Post:\n\n```js\nconst Post = ({ post, comments }) => (\n  <View>\n    <Text>{post.name}</Text>\n    <Text>Comments:</Text>\n    {comments.map(comment =>\n      <EnhancedComment key={comment.id} comment={comment} />\n    )}\n  </View>\n)\n\nconst enhance = withObservables(['post'], ({ post }) => ({\n  post,\n  comments: post.comments\n}))\n```\n\nThe result is fully reactive! Whenever a post or comment is added, changed, or removed, the right components **will automatically re-render** on screen. Doesn't matter if a change occurred in a totally different part of the app, it all just works out of the box!\n\n### ➡️ **Learn more:** [see full documentation](https://nozbe.github.io/WatermelonDB/)\n\n## Who uses WatermelonDB\n\n  <a href=\"https://nozbe.com/?c=watermelon\">\n    <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/apps/nozbe.png\" alt=\"Nozbe Teams\" width=\"300\" />\n  </a>\n\n  <br/>\n\n  <a href=\"https://capmo.de\">\n    <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/apps/capmo.png\" alt=\"CAPMO\" width=\"300\" />\n  </a>\n\n  <br/>\n\n  <a href=\"https://mattermost.com/\">\n    <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/apps/mattermost.png\" alt=\"Mattermost\" width=\"300\" />\n  </a>\n\n  <br/>\n\n  <a href=\"https://rocket.chat/\">\n    <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/apps/rocketchat.png\" alt=\"Rocket Chat\" width=\"300\" />\n  </a>\n\n  <br/>\n\n  <a href=\"https://steady.health\">\n    <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/apps/steady.png\" alt=\"Steady\" width=\"150\"/>\n  </a>\n\n  <br/>\n\n  <a href=\"https://aerobotics.com\">\n    <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/apps/aerobotics.png\" alt=\"Aerobotics\" width=\"300\" />\n  </a>\n\n  <br/>\n\n  <a href=\"https://smashappz.com\">\n    <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/apps/smashappz.jpg\" alt=\"Smash Appz\" width=\"300\" />\n  </a>\n\n  <br/>\n\n  <a href=\"https://halogo.com.au/\">\n    <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/apps/halogo_logo.png\" alt=\"HaloGo\" width=\"300\" />\n  </a>\n\n  <br/>\n\n  <a href=\"https://sportsrecruits.com/\">\n    <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/apps/sportsrecruits-logo.png\" alt=\"SportsRecruits\" width=\"300\" />\n  </a>\n\n  <br/>\n\n  <a href=\"https://chatable.io/\">\n    <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/apps/chatable_logo.png\" alt=\"Chatable\" width=\"300\" />\n  </a>\n\n  <br/>\n\n  <a href=\"https://todorant.com/\">\n    <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/apps/todorant-logo.png\" alt=\"Todorant\" width=\"300\" />\n  </a>\n\n  <br/>\n\n  <a href=\"https://blastworkout.app/\">\n    <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/apps/blastworkout-logo.png\" alt=\"Blast Workout\" width=\"300\" />\n  </a>\n\n  <br/>\n\n  <a href=\"https://dayful.app/\">\n    <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/apps/dayful.png\" alt=\"Dayful\" width=\"300\" />\n  </a>\n\n  <br/>\n\n  <a href=\"https://learnthewords.app/\">\n    <img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/apps/learn-the-words.png\" alt=\"Learn The Words\" width=\"300\" />\n  </a>\n\n  <br/>\n\n_Does your company or app use 🍉? Open a pull request and add your logo/icon with link here!_\n\n## Contributing\n\n<img src=\"https://github.com/Nozbe/WatermelonDB/raw/master/assets/needyou.jpg\" alt=\"We need you\" width=\"220\" />\n\n**WatermelonDB is an open-source project and it needs your help to thrive!**\n\nIf there's a missing feature, a bug, or other improvement you'd like, we encourage you to contribute! Feel free to open an issue to get some guidance and see [Contributing guide](./CONTRIBUTING.md) for details about project setup, testing, etc.\n\nIf you're just getting started, see [good first issues](https://github.com/Nozbe/WatermelonDB/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) that are easy to contribute to. If you make a non-trivial contribution, email me, and I'll send you a nice 🍉 sticker!\n\nIf you make or are considering making an app using WatermelonDB, please let us know!\n\n## Author and license\n\n**WatermelonDB** was created by [@Nozbe](https://github.com/Nozbe).\n\n**WatermelonDB's** main author and maintainer is [Radek Pietruszewski](https://github.com/radex) ([website](https://radex.io) ⋅ [𝕏 (Twitter)](https://twitter.com/radexp))\n\n[See all contributors](https://github.com/Nozbe/WatermelonDB/graphs/contributors).\n\nWatermelonDB is available under the MIT license. See the [LICENSE file](https://github.com/Nozbe/WatermelonDB/LICENSE) for more info.\n"
  },
  {
    "path": "docs-website/docs/docs/Relation.md",
    "content": "# Relations\n\nA `Relation` object represents one record pointing to another — such as the author (`User`) of a `Comment`, or the `Post` the comment belongs to.\n\n### Defining Relations\n\nThere's two steps to defining a relation:\n\n1. A [**table column**](./Schema.md) for the related record's ID\n\n   ```js\n   tableSchema({\n     name: 'comments',\n     columns: [\n       // ...\n       { name: 'author_id', type: 'string' },\n     ]\n   }),\n   ```\n2. A `@relation` field [defined on a `Model`](./Model.md) class:\n\n   ```js\n   import { relation } from '@nozbe/watermelondb/decorators'\n\n   class Comment extends Model {\n     // ...\n     @relation('users', 'author_id') author\n   }\n   ```\n\n   The first argument is the _table name_ of the related record, and the second is the _column name_ with an ID for the related record.\n\n### immutableRelation\n\nIf you have a relation that cannot change (for example, a comment can't change its author), use `@immutableRelation` for extra protection and performance:\n\n```js\nimport { immutableRelation } from '@nozbe/watermelondb/decorators'\n\nclass Comment extends Model {\n  // ...\n  @immutableRelation('posts', 'post_id') post\n  @immutableRelation('users', 'author_id') author\n}\n```\n\n## Relation API\n\nIn the example above, `comment.author` returns a `Relation` object.\n\n> Remember, WatermelonDB is a lazily-loaded database, so you don't get the related `User` record immediately, only when you explicitly fetch it\n\n### Observing\n\nMost of the time, you [connect Relations to Components](./Components.md) by using `observe()` (the same [as with Queries](./Query.md)):\n\n```js\nwithObservables(['comment'], ({ comment }) => ({\n  comment,\n  author: comment.author, // shortcut syntax for `author: comment.author.observe()`\n}))\n```\n\nThe component will now have an `author` prop containing a `User`, and will re-render both when the user changes (e.g. comment's author changes its name), but also when a new author is assigned to the comment (if that was possible).\n\n### Fetching\n\nTo simply get the related record, use `fetch`. You might need it [in a Writer](./Writers.md)\n\n```js\nconst author = await comment.author.fetch()\n\n// Shortcut syntax:\nconst author = await comment.author\n```\n\n**Note**: If the relation column (in this example, `author_id`) is marked as `isOptional: true`, `fetch()` might return `null`.\n\n### ID\n\nIf you only need the ID of a related record (e.g. to use in an URL or for the `key=` React prop), use `id`.\n\n```js\nconst authorId = comment.author.id\n```\n\n### Assigning\n\nUse `set()` to assign a new record to the relation\n\n```js\nawait database.get('comments').create(comment => {\n  comment.author.set(someUser)\n  // ...\n})\n```\n\n**Note**: you can only do this in the `.create()` or `.update()` block.\n\nYou can also use `set id` if you only have the ID for the record to assign\n\n```js\nawait comment.update(() => {\n  comment.author.id = userId\n})\n```\n\n## Advanced relations\n\n### Many-To-Many Relation\n\nIf for instance, our app `Post`s can be authored by many `User`s and a user can author many `Post`s. We would create such a relation following these steps:-\n\n1. Create a pivot schema and model that both the `User` model and `Post` model has association to; say `PostAuthor`\n2. Create has_many association on both `User` and `Post` pointing to `PostAuthor` Model\n3. Create belongs_to association on `PostAuthor` pointing to both `User` and `Post`\n4. Retrieve all `Posts` for a user by defining a query that uses the pivot `PostAuthor` to infer the `Post`s that were authored by the User.\n\n```js\nimport { lazy } from '@nozbe/watermelondb/decorators'\n\nclass Post extends Model {\n  static table = 'posts'\n  static associations = {\n    post_authors: { type: 'has_many', foreignKey: 'post_id' },\n  }\n\n  @lazy\n  authors = this.collections\n    .get('users')\n    .query(Q.on('post_authors', 'post_id', this.id));\n}\n```\n\n```js\nimport { immutableRelation } from '@nozbe/watermelondb/decorators'\n\nclass PostAuthor extends Model {\n  static table = 'post_authors'\n  static associations = {\n    posts: { type: 'belongs_to', key: 'post_id' },\n    users: { type: 'belongs_to', key: 'user_id' },\n  }\n  @immutableRelation('posts', 'post_id') post\n  @immutableRelation('users', 'user_id') user\n}\n\n```\n\n```js\nimport { lazy } from '@nozbe/watermelondb/decorators'\n\nclass User extends Model {\n  static table = 'users'\n  static associations = {\n    post_authors: { type: 'has_many', foreignKey: 'user_id' },\n  }\n\n  @lazy\n  posts = this.collections\n    .get('posts')\n    .query(Q.on('post_authors', 'user_id', this.id));\n\n}\n```\n\n```js\nwithObservables(['post'], ({ post }) => ({\n  authors: post.authors,\n}))\n```\n\n* * *\n\n## Next steps\n\n➡️ Now the last step of this guide: [**understand Writers (and Readers)**](./Writers.md)\n"
  },
  {
    "path": "docs-website/docs/docs/Roadmap.md",
    "content": "---\ntitle: Roadmap\nhide_title: true\n---\n# WatermelonDB Roadmap\n\nDespite being called 0.xx, WatermelonDB is essentially feature-complete and relatively API stable. It's used in production by [Nozbe Teams](https://nozbe.com) and many others.\n\nWe don't call it 1.0 mostly out of convenience, to allow rapid development without incrementing `major` version counter (as dictated by SemVer). We do intend to call WatermelonDB a 1.0 once we can reach a long-term stable API.\n\n### v1.0\n\n- Optimized tree deleting\n- Long term stable API\n\n### Beyond 1.0\n\n- Full transactionality (atomicity) support?\n- Field sanitizers\n"
  },
  {
    "path": "docs-website/docs/docs/Schema.md",
    "content": "# Schema\n\nWhen using WatermelonDB, you're dealing with **Models** and **Collections**. However, underneath Watermelon sits an **underlying database** (SQLite or LokiJS) which speaks a different language: **tables and columns**. Together, those are called a **database schema** and we must define it first.\n\n## Defining a Schema\n\nSay you want Models `Post`, `Comment` in your app. For each of those Models, you define a table. And for every field of a Model (e.g. name of the blog post, author of the comment) you define a column. For example:\n\n```js\n// model/schema.js\nimport { appSchema, tableSchema } from '@nozbe/watermelondb'\n\nexport const mySchema = appSchema({\n  version: 1,\n  tables: [\n    tableSchema({\n      name: 'posts',\n      columns: [\n        { name: 'title', type: 'string' },\n        { name: 'subtitle', type: 'string', isOptional: true },\n        { name: 'body', type: 'string' },\n        { name: 'is_pinned', type: 'boolean' },\n      ]\n    }),\n    tableSchema({\n      name: 'comments',\n      columns: [\n        { name: 'body', type: 'string' },\n        { name: 'post_id', type: 'string', isIndexed: true },\n      ]\n    }),\n  ]\n})\n```\n\n**Note:** It is database convention to use plural and snake_case names for table names. Column names are also snake_case. So `Post` become `posts` and `createdAt` becomes `created_at`.\n\n### Column types\n\nColumns have one of three types: `string`, `number`, or `boolean`.\n\nFields of those types will default to `''`, `0`, or `false` respectively, if you create a record with a missing field.\n\nTo allow fields to be `null`, mark the column as `isOptional: true`.\n\n### Naming conventions\n\nTo add a relation to a table (e.g. `Post` where a `Comment` was published, or author of a comment), add a string column ending with `_id`:\n\n```js\n{ name: 'post_id', type: 'string' },\n{ name: 'author_id', type: 'string' },\n```\n\nBoolean columns should have names starting with `is_`:\n\n```js\n{ name: 'is_pinned', type: 'boolean' }\n```\n\nDate fields should be `number` (dates are stored as Unix timestamps) and have names ending with `_at`:\n\n```js\n{ name: 'last_seen_at', type: 'number', isOptional: true }\n```\n\n### Special columns\n\nAll tables _automatically_ have a string column `id` (of `string` type) to uniquely identify records -- therefore you cannot declare a column named `id` yourself. (There are also special `_status` and `_changed` columns used for [synchronization](./Sync/Intro.md) - you shouldn't touch them yourself).\n\nYou can add special `created_at` / `updated_at` columns to enable [automatic create/update tracking](./Advanced/CreateUpdateTracking.md).\n\n### Modifying Schema\n\nWatermelon cannot automatically detect Schema changes. Therefore, whenever you change the Schema, you must increment its version number (`version:` field).\n\nDuring early development, this is all you need to do - on app reload, this will cause the database to be cleared completely.\n\nTo seamlessly update the schema (without deleting user data), use [Migrations](./Advanced/Migrations.md).\n\n⚠️ Always use Migrations if you already shipped your app.\n\n### Indexing\n\nTo enable database indexing, add `isIndexed: true` to a column.\n\nIndexing makes querying by a column faster, at the expense of create/update speed and database size.\n\nFor example, if you often query all comments belonging to a post (that is, query comments by its `post_id` column), you should mark the `post_id` column as indexed.\n\nHowever, if you rarely query all comments by its author, indexing `author_id` is probably not worth it.\n\nIn general, most `_id` fields are indexed. Occasionally, `boolean` fields are worth indexing (but it's a \"low quality index\"). However, you should almost never index date (`_at`) columns or `string` columns. You definitely do not want to index long-form user text.\n\n⚠️ Do not mark all columns as indexed to \"make Watermelon faster\". Indexing has a real performance cost and should be used only when appropriate.\n\n## Advanced\n\n### Unsafe SQL schema\n\nIf you want to modify the SQL used to set up the SQLite database, you can pass `unsafeSql` parameter\nto `tableSchema` and `appSchema`. This parameter is a function that receives SQL generated by Watermelon,\nand you can return whatever you want - so you can append, prepend, replace parts of SQL, or return\nyour own SQL altogether. When passed to `tableSchema`, it receives SQL generated for just that table,\nand when to `appSchema` - the entire schema SQL.\n\n⚠️  Note that SQL generated by WatermelonDB is not considered to be a stable API, so be careful about your transforms as they can break at any time.\n\n```js\nappSchema({\n  ...\n  tables: [\n    tableSchema({\n      name: 'tasks',\n      columns: [...],\n      unsafeSql: sql => sql.replace(/create table [^)]+\\)/, '$& without rowid'),\n    }),\n  ],\n  unsafeSql: (sql, kind) => {\n    // Note that this function is called not just when first setting up the database\n    // Additionally, when running very large batches, all database indices may be dropped and later\n    // recreated as an optimization. More kinds may be added in the future.\n    switch (kind) {\n      case 'setup':\n        return `create blabla;${sql}`\n      case 'create_indices':\n      case 'drop_indices':\n        return sql\n      default:\n        throw new Error('unexpected unsafeSql kind')\n    }\n  },\n})\n```\n\n* * *\n\n## Next steps\n\n➡️ After you define your schema, go ahead and [**define your Models**](./Model.md)\n"
  },
  {
    "path": "docs-website/docs/docs/Setup.md",
    "content": "---\ntitle: 'Setup'\nhide_title: true\n---\n\n# Set up your app for WatermelonDB\n\nMake sure you [installed Watermelon](./Installation.mdx) before proceeding.\n\nCreate `model/schema.js` in your project. You'll need it for [the next step](./Schema.md).\n\n```js\nimport { appSchema, tableSchema } from '@nozbe/watermelondb'\n\nexport default appSchema({\n  version: 1,\n  tables: [\n    // We'll add tableSchemas here later\n  ]\n})\n```\n\nSimilarly, create `model/migrations.js`. ([More information about migrations](./Advanced/Migrations.md)):\n\n```js\nimport { schemaMigrations } from '@nozbe/watermelondb/Schema/migrations'\n\nexport default schemaMigrations({\n  migrations: [\n    // We'll add migration definitions here later\n  ],\n})\n```\n\nNow, in your `index.native.js`:\n\n```js\nimport { Platform } from 'react-native'\nimport { Database } from '@nozbe/watermelondb'\nimport SQLiteAdapter from '@nozbe/watermelondb/adapters/sqlite'\n\nimport schema from './model/schema'\nimport migrations from './model/migrations'\n// import Post from './model/Post' // ⬅️ You'll import your Models here\n\n// First, create the adapter to the underlying database:\nconst adapter = new SQLiteAdapter({\n  schema,\n  // (You might want to comment it out for development purposes -- see Migrations documentation)\n  migrations,\n  // (optional database name or file system path)\n  // dbName: 'myapp',\n  // (recommended option, should work flawlessly out of the box on iOS. On Android,\n  // additional installation steps have to be taken - disable if you run into issues...)\n  jsi: true, /* Platform.OS === 'ios' */\n  // (optional, but you should implement this method)\n  onSetUpError: error => {\n    // Database failed to load -- offer the user to reload the app or log out\n  }\n})\n\n// Then, make a Watermelon database from it!\nconst database = new Database({\n  adapter,\n  modelClasses: [\n    // Post, // ⬅️ You'll add Models to Watermelon here\n  ],\n})\n```\n\nThe above will work on React Native (iOS/Android) and NodeJS. For the web, instead of `SQLiteAdapter` use `LokiJSAdapter`:\n\n```js\nimport LokiJSAdapter from '@nozbe/watermelondb/adapters/lokijs'\n\nconst adapter = new LokiJSAdapter({\n  schema,\n  // (You might want to comment out migrations for development purposes -- see Migrations documentation)\n  migrations,\n  useWebWorker: false,\n  useIncrementalIndexedDB: true,\n  // dbName: 'myapp', // optional db name\n\n  // --- Optional, but recommended event handlers:\n\n  onQuotaExceededError: (error) => {\n    // Browser ran out of disk space -- offer the user to reload the app or log out\n  },\n  onSetUpError: (error) => {\n    // Database failed to load -- offer the user to reload the app or log out\n  },\n  extraIncrementalIDBOptions: {\n    onDidOverwrite: () => {\n      // Called when this adapter is forced to overwrite contents of IndexedDB.\n      // This happens if there's another open tab of the same app that's making changes.\n      // Try to synchronize the app now, and if user is offline, alert them that if they close this\n      // tab, some data may be lost\n    },\n    onversionchange: () => {\n      // database was deleted in another browser tab (user logged out), so we must make sure we delete\n      // it in this tab as well - usually best to just refresh the page\n      if (checkIfUserIsLoggedIn()) {\n        window.location.reload()\n      }\n    },\n  }\n})\n\n// The rest is the same!\n```\n\n* * *\n\n## Next steps\n\n➡️ After Watermelon is installed, [**define your app's schema**](./Schema.md)\n"
  },
  {
    "path": "docs-website/docs/docs/Sync/Backend.md",
    "content": "---\ntitle: Backend\nhide_title: true\n---\n\n## Implementing your Sync backend\n\n### Understanding `changes` objects\n\nSynchronized changes (received by the app in `pullChanges` and sent to the backend in `pushChanges`) are represented as an object with _raw records_. Those only use raw table and column names, and raw values (strings/numbers/booleans) — the same as in [Schema](../Schema.md).\n\nDeleted objects are always only represented by their IDs.\n\nExample:\n\n```js\n{\n  projects: {\n    created: [\n      { id: 'aaaa', name: 'Foo', is_favorite: true },\n      { id: 'bbbb', name: 'Bar', is_favorite: false },\n    ],\n    updated: [\n      { id: 'ccc', name: 'Baz', is_favorite: true },\n    ],\n    deleted: ['ddd'],\n  },\n  tasks: {\n    created: [],\n    updated: [\n      { id: 'tttt', name: 'Buy eggs' },\n    ],\n    deleted: [],\n  },\n  ...\n}\n```\n\nAgain, notice the properties returned have the format defined in the [Schema](../Schema.md) (e.g. `is_favorite`, not `isFavorite`).\n\nValid changes objects MUST conform to this shape:\n\n```js\nChanges = {\n  [table_name: string]: {\n    created: RawRecord[],\n    updated: RawRecord[],\n    deleted: string[],\n  }\n}\n```\n\n### Implementing pull endpoint\n\nExpected parameters:\n\n```js\n{\n  lastPulledAt: Timestamp,\n  schemaVersion: int,\n  migration: null | { from: int, tables: string[], columns: { table: string, columns: string[] }[] }\n}\n```\n\nExpected response:\n\n```js\n{ changes: Changes, timestamp: Timestamp }\n```\n\n1. The pull endpoint SHOULD take parameters and return a response matching the shape specified above.\n   This shape MAY be different if negotiated with the frontend (however, frontend-side `pullChanges()` MUST conform to this)\n2. The pull endpoint MUST return all record changes in all collections since `lastPulledAt`, specifically:\n    - all records that were created on the server since `lastPulledAt`\n    - all records that were updated on the server since `lastPulledAt`\n    - IDs of all records that were deleted on the server since `lastPulledAt`\n    - record IDs MUST NOT be duplicated\n3. If `lastPulledAt` is null or 0, you MUST return all accessible records (first sync)\n4. The timestamp returned by the server MUST be a value that, if passed again to `pullChanges()` as `lastPulledAt`, will return all changes that happened since this moment.\n5. The pull endpoint MUST provide a consistent view of changes since `lastPulledAt`\n    - You should perform all queries synchronously or in a write lock to ensure that returned changes are consistent\n    - You should also mark the current server time synchronously with the queries\n    - This is to ensure that no changes are made to the database while you're fetching changes (otherwise some records would never be returned in a pull query)\n    - If it's absolutely not possible to do so, and you have to query each collection separately, be sure to return a `lastPulledAt` timestamp marked BEFORE querying starts. You still risk inconsistent responses (that may break app's consistency assumptions), but the next pull will fetch whatever changes occured during previous pull.\n    - An alternative solution is to check for the newest change before and after all queries are made, and if there's been a change during the pull, return an error code, or retry.\n6. If `migration` is not null, you MUST include records needed to get a consistent view after a local database migration\n    - Specifically, you MUST include all records in tables that were added to the local database between the last user sync and `schemaVersion`\n    - For all columns that were added to the local app database between the last sync and `schemaVersion`, you MUST include all records for which the added column has a value other than the default value (`0`, `''`, `false`, or `null` depending on column type and nullability)\n    - You can determine what schema changes were made to the local app in two ways:\n        - You can compare `migration.from` (local schema version at the time of the last sync) and `schemaVersion` (current local schema version). This requires you to negotiate with the frontend what schema changes are made at which schema versions, but gives you more control\n        - Or you can ignore `migration.from` and only look at `migration.tables` (which indicates which tables were added to the local database since the last sync) and `migration.columns` (which indicates which columns were added to the local database to which tables since last sync).\n        - If you use `migration.tables` and `migration.columns`, you MUST whitelist values a client can request. Take care not to leak any internal fields to the client.\n7. Returned raw records MUST match your app's [Schema](../Schema.md)\n8. Returned raw records MUST NOT not contain special `_status`, `_changed` fields.\n9. Returned raw records MAY contain fields (columns) that are not yet present in the local app (at `schemaVersion` -- but added in a later version). They will be safely ignored.\n10. Returned raw records MUST NOT contain arbitrary column names, as they may be unsafe (e.g. `__proto__` or `constructor`). You should whitelist acceptable column names.\n11. Returned record IDs MUST only contain safe characters\n    - Default WatermelonDB IDs conform to `/^[a-zA-Z0-9]{16}$/`\n    - `_-.` are also allowed if you override default ID generator, but `'\"\\/$` are unsafe\n12. Changes SHOULD NOT contain collections that are not yet present in the local app (at `schemaVersion`). They will, however, be safely ignored.\n    - NOTE: This is true for WatermelonDB v0.17 and above. If you support clients using earlier versions, you MUST NOT return collections not known by them.\n13. Changes MUST NOT contain collections with arbitrary names, as they may be unsafe. You should whitelist acceptable collection names.\n\n### Implementing push endpoint\n\n1. The push endpoint MUST apply local changes (passed as a `changes` object) to the database. Specifically:\n    - create new records as specified by the changes object\n    - update existing records as specified by the changes object\n    - delete records by the specified IDs\n2. If the `changes` object contains a new record with an ID that already exists, you MUST update it, and MUST NOT return an error code.\n    - (This happens if previous push succeeded on the backend, but not on frontend)\n3. If the `changes` object contains an update to a record that does not exist, then:\n    - If you can determine that this record no longer exists because it was deleted, you SHOULD return an error code (to force frontend to pull the information about this deleted ID)\n    - Otherwise, you MUST create it, and MUST NOT return an error code. (This scenario should not happen, but in case of frontend or backend bugs, it would keep sync from ever succeeding.)\n4. If the `changes` object contains a record to delete that doesn't exist, you MUST ignore it and MUST NOT return an error code\n    - (This may happen if previous push succeeded on the backend, but not on frontend, or if another user deleted this record in between user's pull and push calls)\n5. If the `changes` object contains a record that has been modified on the server after `lastPulledAt`, you MUST abort push and return an error code\n    - This scenario means that there's a conflict, and record was updated remotely between user's pull and push calls. Returning an error forces frontend to call pull endpoint again to resolve the conflict\n6. If application of all local changes succeeds, the endpoint MUST return a success status code.\n7. The push endpoint MUST be fully transactional. If there is an error, all local changes MUST be reverted on the server, and en error code MUST be returned.\n8. You MUST ignore `_status` and `_changed` fields contained in records in `changes` object\n9. You SHOULD validate data passed to the endpoint. In particular, collection and column names ought to be whitelisted, as well as ID format — and of course any application-specific invariants, such as permissions to access and modify records\n10. You SHOULD sanitize record fields passed to the endpoint. If there's something slightly wrong with the contents (but not shape) of the data (e.g. `user.role` should be `owner`, `admin`, or `member`, but user sent empty string or `abcdef`), you SHOULD NOT send an error code. Instead, prefer to \"fix\" errors (sanitize to correct format).\n    - Rationale: Synchronization should be reliable, and should not fail other than transiently, or for serious programming errors. Otherwise, the user will have a permanently unsyncable app, and may have to log out/delete it and lose unsynced data. You don't want a bug 5 versions ago to create a persistently failing sync.\n11. You SHOULD delete all descendants of deleted records\n    - Frontend should ask the push endpoint to do so as well, but if it's buggy, you may end up with permanent orphans\n\n## Tips on implementing server-side changes tracking\n\nIf you're wondering how to _actually_ implement consistent pulling of all changes since the last pull, or how to detect that a record being pushed by the user changed after `lastPulledAt`, here's what we recommend:\n\n- Add a `last_modified` field to all your server database tables, and bump it to `NOW()` every time you create or update a record.\n- This way, when you want to get all changes since `lastPulledAt`, you query records whose `last_modified > lastPulledAt`.\n- The timestamp should be at least millisecond resolution, and you should add (for extra safety) a MySQL/PostgreSQL procedure that will ensure `last_modified` uniqueness and monotonicity\n    - Specificaly, check that there is no record with a `last_modified` equal to or greater than `NOW()`, and if there is, increment the new timestamp by 1 (or however much you need to ensure it's the greatest number)\n    - [An example of this for PostgreSQL can be found in Kinto](https://github.com/Kinto/kinto/blob/814c30c5dd745717b8ea50d708d9163a38d2a9ec/kinto/core/storage/postgresql/schema.sql#L64-L116)\n    - This protects against weird edge cases - such as records being lost due to server clock time changes (NTP time sync, leap seconds, etc.)\n- Of course, remember to ignore `last_modified` from the user if you do it this way.\n- An alternative to using timestamps is to use an auto-incrementing counter sequence, but you must ensure that this sequence is consistent across all collections. You also leak to users the amount of traffic to your sync server (number of changes in the sequence)\n- To distinguish between `created` and `updated` records, you can also store server-side `server_created_at` timestamp (if it's greater than `last_pulled_at` supplied to sync, then record is to be `created` on client, if less than — client already has it and it is to be `updated` on client). Note that this timestamp must be consistent with last_modified — and you must not use client-created `created_at` field, since you can never trust local timestamps.\n    - Alternatively, you can send all non-deleted records as all `updated` and Watermelon will do the right thing in 99% of cases (you will be slightly less protected against weird edge cases — treatment of locally deleted records is different). If you do this, pass `sendCreatedAsUpdated: true` to `synchronize()` to supress warnings about records to be updated not existing locally.\n- You do need to implement a mechanism to track when records were deleted on the server, otherwise you wouldn't know to push them\n    - One possible implementation is to not fully delete records, but mark them as DELETED=true\n    - Or, you can have a `deleted_xxx` table with just the record ID and timestamp (consistent with last_modified)\n    - Or, you can treat it the same way as \"revoked permissions\"\n- If you have a collaborative app with any sort of permissions, you also need to track granting and revoking of permissions the same way as changes to records\n    - If permission to access records has been granted, the pull endpoint must add those records to `created`\n    - If permission to access records has been revoked, the pull endpoint must add those records to `deleted`\n    - Remember to also return all descendants of a record in those cases\n\n## Existing Backend Implementations\n\nNote that those are not maintained by WatermelonDB, and we make no endorsements about quality of these projects:\n\n- [How to Build WatermelonDB Sync Backend in Elixir](https://fahri.id/posts/how-to-build-watermelondb-sync-backend-in-elixir/)\n- [Firemelon](https://github.com/AliAllaf/firemelon)\n- [Laravel Watermelon](https://github.com/nathanheffley/laravel-watermelon)\n\nDid you make one? Please contribute a link!\n"
  },
  {
    "path": "docs-website/docs/docs/Sync/Contribute.md",
    "content": "\n1. If you implement Watermelon sync but found this guide confusing, please contribute improvements!\n2. Please help out with solving the current limitations!\n3. If you write server-side code made to be compatible with Watermelon, especially for popular platforms (Node, Ruby on Rails, Kinto, etc.) - please open source it and let us know! This would dramatically simplify implementing sync for people\n4. If you find Watermelon sync bugs, please report the issue! And if possible, write regression tests to make sure it never happens again\n"
  },
  {
    "path": "docs-website/docs/docs/Sync/FAQ.md",
    "content": "---\ntitle: FAQ\nhide_title: true\n---\n\n# Frequently Asked Questions\n\n### Sync primitives and implementing your own sync entirely from scratch\n\nSee: [Sync implementation details](../Implementation/SyncImpl.md)\n\n\n### Local vs Remote IDs\n\nWatermelonDB has been designed with the assumption that there is no difference between Local IDs (IDs of records and their relations in a WatermelonDB database) and Remote IDs (IDs on the backend server). So a local app can create new records, generating their IDs, and the backend server will use this ID as the true ID. This greatly simplifies synchronization, as you don't have to replace local with remote IDs on the record and all records that point to it.\n\nWe highly recommend that you adopt this practice.\n\nSome people are skeptical about this approach due to conflicts, since backend can guarantee unique IDs, and the local app can't. However, in practice, a standard Watermelon ID has 8,000,000,000,000,000,000,000,000 possible combinations. That's enough entropy to make conflicts extremely unlikely. At [Nozbe](https://nozbe.com), we've done it this way at scale for more than 15 years, and not once did we encounter a genuine ID conflict or had other issues due to this approach.\n\n> Using the birthday problem, we can calculate that for 36^16 possible IDs, if your system grows to a billion records, the probability of a single conflict is 6e-8. At 100B records, the probability grows to 0.06%. But if you grow to that many records, you're probably a very rich company and can start worrying about things like this _then_.\n\nIf you absolutely can't adopt this practice, there's a number of production apps using WatermelonDB that keep local and remote IDs separate — however, more work is required this way. Search Issues to find discussions about this topic — and consider contributing to WatermelonDB to make managing separate local IDs easier for everyone!\n"
  },
  {
    "path": "docs-website/docs/docs/Sync/Frontend.md",
    "content": "---\ntitle: Frontend\nhide_title: true\n---\n\n## Implementing sync in frontend\n\n## Using `synchronize()` in your app\n\nTo synchronize, you need to pass `pullChanges` and `pushChanges` _(optional)_ that talk to your backend and are compatible with Watermelon Sync Protocol. The frontend code will look something like this:\n\n```js\nimport { synchronize } from '@nozbe/watermelondb/sync'\n\nasync function mySync() {\n  await synchronize({\n    database,\n    pullChanges: async ({ lastPulledAt, schemaVersion, migration }) => {\n      const urlParams = `last_pulled_at=${lastPulledAt}&schema_version=${schemaVersion}&migration=${encodeURIComponent(\n        JSON.stringify(migration),\n      )}`\n      const response = await fetch(`https://my.backend/sync?${urlParams}`)\n      if (!response.ok) {\n        throw new Error(await response.text())\n      }\n\n      const { changes, timestamp } = await response.json()\n      return { changes, timestamp }\n    },\n    pushChanges: async ({ changes, lastPulledAt }) => {\n      const response = await fetch(`https://my.backend/sync?last_pulled_at=${lastPulledAt}`, {\n        method: 'POST',\n        body: JSON.stringify(changes),\n      })\n      if (!response.ok) {\n        throw new Error(await response.text())\n      }\n    },\n    migrationsEnabledAtVersion: 1,\n  })\n}\n```\n\n#### Who calls `synchronize()`?\n\nUpon looking at the example above, one question that may arise is who will call `synchronize()` -- or, in the example above `mySync()`. WatermelonDB does not manage the moment of invocation of the `synchronize()` function in any way. The database assumes every call of `pullChanges` will return _all_ the changes that haven't yet been replicated (up to `last_pulled_at`). The application code is responsible for calling `synchronize()` in the frequency it deems necessary.\n\n### Implementing `pullChanges()`\n\nWatermelon will call this function to ask for changes that happened on the server since the last pull.\n\nArguments:\n\n- `lastPulledAt` is a timestamp for the last time client pulled changes from server (or `null` if first sync)\n- `schemaVersion` is the current schema version of the local database\n- `migration` is an object representing schema changes since last sync (or `null` if up to date or not supported)\n\nThis function should fetch from the server the list of ALL changes in all collections since `lastPulledAt`.\n\n1. You MUST pass an async function or return a Promise that eventually resolves or rejects\n2. You MUST pass `lastPulledAt`, `schemaVersion`, and `migration` to an endpoint that conforms to Watermelon Sync Protocol\n3. You MUST return a promise resolving to an object of this shape (your backend SHOULD return this shape already):\n   ```js\n   {\n     changes: { ... }, // valid changes object\n     timestamp: 100000, // integer with *server's* current time\n   }\n   ```\n4. You MUST NOT store the object returned in `pullChanges()`. If you need to do any processing on it, do it before returning the object. Watermelon treats this object as \"consumable\" and can mutate it (for performance reasons)\n\n### Implementing `pushChanges()`\n\nWatermelon will call this function with a list of changes that happened locally since the last push so you can post it to your backend.\n\nArguments passed:\n\n```js\n{\n  changes: { ... }, // valid changes object\n  lastPulledAt: 10000, // the timestamp of the last successful pull (timestamp returned in pullChanges)\n}\n```\n\n1. You MUST pass `changes` and `lastPulledAt` to a push sync endpoint conforming to Watermelon Sync Protocol\n2. You MUST pass an async function or return a Promise from `pushChanges()`\n3. `pushChanges()` MUST resolve after and only after the backend confirms it successfully received local changes\n4. `pushChanges()` MUST reject if backend failed to apply local changes\n5. You MUST NOT resolve sync prematurely or in case of backend failure\n6. You MUST NOT mutate or store arguments passed to `pushChanges()`. If you need to do any processing on it, do it before returning the object. Watermelon treats this object as \"consumable\" and can mutate it (for performance reasons)\n\n## Checking unsynced changes\n\nWatermelonDB has a built in function to check whether there are any unsynced changes. The frontend code will look something like this\n\n```js\nimport { hasUnsyncedChanges } from '@nozbe/watermelondb/sync'\n\nasync function checkUnsyncedChanges() {\n  const database = useDatabase()\n  await hasUnsyncedChanges({ database })\n}\n```\n\n## General information and tips\n\n1. You MUST NOT connect to backend endpoints you don't control using `synchronize()`. WatermelonDB assumes pullChanges/pushChanges are friendly and correct and does not guarantee secure behavior if data returned is malformed.\n2. You SHOULD NOT call `synchronize()` while synchronization is already in progress (it will safely abort)\n3. You MUST NOT reset local database while synchronization is in progress (push to server will be safely aborted, but consistency of the local database may be compromised)\n4. You SHOULD wrap `synchronize()` in a \"retry once\" block - if sync fails, try again once. This will resolve push failures due to server-side conflicts by pulling once again before pushing.\n5. You can use `database.withChangesForTables` to detect when local changes occured to call sync. If you do this, you should debounce (or throttle) this signal to avoid calling `synchronize()` too often.\n\n## Adopting Migration Syncs\n\nFor Watermelon Sync to maintain consistency after [migrations](../Advanced/Migrations.md), you must support Migration Syncs (introduced in WatermelonDB v0.17). This allows Watermelon to request from backend the tables and columns it needs to have all the data.\n\n1. For new apps, pass `{migrationsEnabledAtVersion: 1}` to `synchronize()` (or the first schema version that shipped / the oldest schema version from which it's possible to migrate to the current version)\n2. To enable migration syncs, the database MUST be configured with [migrations spec](../Advanced/Migrations.md) (even if it's empty)\n3. For existing apps, set `migrationsEnabledAtVersion` to the current schema version before making any schema changes. In other words, this version should be the last schema version BEFORE the first migration that should support migration syncs.\n4. Note that for apps that shipped before WatermelonDB v0.17, it's not possible to determine what was the last schema version at which the sync happened. `migrationsEnabledAtVersion` is used as a placeholder in this case. It's not possible to guarantee that all necessary tables and columns will be requested. (If user logged in when schema version was lower than `migrationsEnabledAtVersion`, tables or columns were later added, and new records in those tables/changes in those columns occured on the server before user updated to an app version that has them, those records won't sync). To work around this, you may specify `migrationsEnabledAtVersion` to be the oldest schema version from which it's possible to migrate to the current version. However, this means that users, after updating to an app version that supports Migration Syncs, will request from the server all the records in new tables. This may be unacceptably inefficient.\n5. WatermelonDB >=0.17 will note the schema version at which the user logged in, even if migrations are not enabled, so it's possible for app to request from backend changes from schema version lower than `migrationsEnabledAtVersion`\n6. You MUST NOT delete old [migrations](../Advanced/Migrations.md), otherwise it's possible that the app is permanently unable to sync.\n\n## (Advanced) Adopting Turbo Login\n\nWatermelonDB v0.23 introduced an advanced optimization called \"Turbo Login\". Syncing using Turbo is up to 5.3x faster than the traditional method and uses a lot less memory, so it's suitable for even very large syncs. Keep in mind:\n\n1. This can only be used for the initial (login) sync, not for incremental syncs. It is a serious programmer error to run sync in Turbo mode if the database is not empty.\n2. Syncs with `deleted: []` fields not empty will fail.\n3. Turbo only works with SQLiteAdapter with JSI enabled and running - it does not work on web, or if e.g. Chrome Remote Debugging is enabled\n4. While Turbo Login is stable, it's marked as \"unsafe\", meaning that the exact API may change in a future version\n\nHere's basic usage:\n\n```js\nconst isFirstSync = ...\nconst useTurbo = isFirstSync\nawait synchronize({\n  database,\n  pullChanges: async ({ lastPulledAt, schemaVersion, migration }) => {\n    const response = await fetch(`https://my.backend/sync?${...}`)\n    if (!response.ok) {\n      throw new Error(await response.text())\n    }\n\n    if (useTurbo) {\n      // NOTE: DO NOT parse JSON, we want raw text\n      const json = await response.text()\n      return { syncJson: json }\n    } else {\n      const { changes, timestamp } = await response.json()\n      return { changes, timestamp }\n    }\n  },\n  unsafeTurbo: useTurbo,\n  // ...\n})\n```\n\nRaw JSON text is required, so it is not expected that you need to do any processing in pullChanges() - doing that defeats much of the point of using Turbo Login!\n\nIf you're using pullChanges to send additional data to your app other than Watermelon Sync's `changes` and `timestamp`, you won't be able to process it in pullChanges. However, WatermelonDB can still pass extra keys in sync response back to the app - you can process them using `onDidPullChanges`. This works both with and without turbo mode:\n\n```js\nawait synchronize({\n  database,\n  pullChanges: async ({ lastPulledAt, schemaVersion, migration }) => {\n    // ...\n  },\n  unsafeTurbo: useTurbo,\n  onDidPullChanges: async ({ messages }) => {\n    if (messages) {\n      messages.forEach((message) => {\n        alert(message)\n      })\n    }\n  },\n  // ...\n})\n```\n\nThere's a way to make Turbo Login even more _turbo_! However, it requires native development skills. You need to develop your own native networking code, so that raw JSON can go straight from your native code to WatermelonDB's native code - skipping JavaScript processing altogether.\n\n```js\nawait synchronize({\n  database,\n  pullChanges: async ({ lastPulledAt, schemaVersion, migration }) => {\n    // NOTE: You need the standard JS code path for incremental syncs\n\n    // Create a unique id for this sync request\n    const syncId = Math.floor(Math.random() * 1000000000)\n\n    await NativeModules.MyNetworkingPlugin.pullSyncChanges(\n      // Pass the id\n      syncId,\n      // Pass whatever information your plugin needs to make the request\n      lastPulledAt,\n      schemaVersion,\n      migration,\n    )\n\n    // If successful, return the sync id\n    return { syncJsonId: syncId }\n  },\n  unsafeTurbo: true,\n  // ...\n})\n```\n\nIn native code, perform network request and if successful, extract raw response body data - `NSData *` on iOS, `byte[]` on Android. Avoid extracting the response as a string or parsing the JSON. Then pass it to WatermelonDB's native code:\n\n```java\n// On Android (Java):\nimport com.nozbe.watermelondb.jsi.WatermelonJSI;\n\nWatermelonJSI.provideSyncJson(/* id */ syncId, /* byte[] */ data);\n```\n\n```objc\n// On iOS (Objective-C):\n// (If using Swift, add the import to the bridging header)\n#import <WatermelonDB/WatermelonDB.h>\n\nwatermelondbProvideSyncJson(syncId, data, &error)\n```\n\n## Adding logging to your sync\n\nYou can add basic sync logs to the sync process by passing an empty object to `synchronize()`. Sync will then mutate the object, populating it with diagnostic information (start/finish time, resolved conflicts, number of remote/local changes, any errors that occured, and more):\n\n```js\n// Using built-in SyncLogger\nimport SyncLogger from '@nozbe/watermelondb/sync/SyncLogger'\nconst logger = new SyncLogger(10 /* limit of sync logs to keep in memory */ )\nawait synchronize({ database, log: logger.newLog(), ... })\n\n// this returns all logs (censored and safe to use in production code)\nconsole.log(logger.logs)\n// same, but pretty-formatted to a string (a user can easy copy this for diagnostic purposes)\nconsole.log(logger.formattedLogs)\n\n\n// You don't have to use SyncLogger, just pass a plain object to synchronize()\nconst log = {}\nawait synchronize({ database, log, ... })\nconsole.log(log.startedAt)\nconsole.log(log.finishedAt)\n```\n\n⚠️ Remember to act responsibly with logs, since they might contain your user's private information. Don't display, save, or send the log unless you censor the log.\n\n## Debugging `changes`\n\nIf you want to conveniently see incoming and outgoing changes in sync in the console, add these lines to your pullChanges/pushChanges:\n\n⚠️ Leaving such logging committed and running in production is a huge security vulnerability and a performance hog.\n\n```js\n// UNDER NO CIRCUMSTANCES SHOULD YOU COMMIT THESE LINES UNCOMMENTED!!!\nrequire('@nozbe/watermelondb/sync/debugPrintChanges').default(changes, isPush)\n```\n\nPass `true` for second parameter if you're checking outgoing changes (pushChanges), `false` otherwise. Make absolutely sure you don't commit this debug tool. For best experience, run this on web (Chrome) -- the React Native experience is not as good.\n\n## (Advanced) Replacement Sync\n\nAdded in WatermelonDB 0.25, there is an alternative way to synchronize changes with the server called \"Replacement Sync\". You should only use this as last resort for cases difficult to deal with in an incremental fashion, due to performance implications.\n\nNormally, `pullChanges` is expected to only return changes to data that had occured since `lastPulledAt`. During Replacement Sync, server sends the full dataset - _all_ records that user has access to, same as during initial (first/login) sync.\n\nInstead of applying these changes normally, the app will replace its database with the data set received, except that local unpushed changes will be preserved. In other words:\n\n- App will create records that are new locally, and update the rest to the server state as per usual\n- Records that have unpushed changes locally will go through conflict resolution as per usual\n- HOWEVER, instead of server passing a list of records to delete, app will delete local records not present in the dataset received\n- Details on how unpushed changes are preserved:\n    - Records marked as `created` are preserved so they have a chance to sync\n    - Records marked as `updated` or `deleted` will be preserved if they're contained in dataset received. Otherwise, they're deleted (since they were remotely deleted/server no longer grants you accecss to them, these changes would be ignored anyway if pushed).\n\nIf there are no local (unpushed) changes before or during sync, replacement sync should yield the same state as clearing database and performing initial sync. In case replacement sync is performed with an empty dataset (and there are no local changes), the result should be equivalent to clearing database.\n\n**When should you use Replacement Sync?**\n\n- You can use it as a way to fix a bad sync state (mismatch between local and remote state)\n- You can use it in case you have a very large state change and your server doesn't know how to correctly calculate incremental changes since last sync (e.g. accessible records changed in a very complex permissions system)\n\nIn such cases, you could alternatively relogin (clear the database, then perform initial sync again), however:\n\n- Replacement Sync preserves local changes to records (and other state such as Local Storage), so there's minimal risk for data loss\n- When clearing the database, you need to give up all references to Watermelon objects and stop all observation. Therefore, you need to unmount all UI that touches Watermelon, leading to poor UX. This is not required for Replacement Sync\n- On the other hand, Replacement Sync is much, much slower than Turbo Login (it's not possible to combine the two techniques), so this technique might not scale to very large datasets\n\n**Using Replacement Sync**\n\nIn `pullChanges`, return an object with an extra `strategy` field\n\n    ```js\n    {\n      changes: { ... },\n      timestamp: ...,\n      experimentalStrategy: 'replacement',\n    }\n    ```\n\n## Additional `synchronize()` flags\n\n- `_unsafeBatchPerCollection: boolean` - if true, changes will be saved to the database in multiple batches. This is unsafe and breaks transactionality, however may be required for very large syncs due to memory issues\n- `sendCreatedAsUpdated: boolean` - if your backend can't differentiate between created and updated records, set this to `true` to supress warnings. Sync will still work well, however error reporting, and some edge cases will not be handled as well.\n- `conflictResolver: (TableName, local: DirtyRaw, remote: DirtyRaw, resolved: DirtyRaw) => DirtyRaw` - can be passed to customize how records are updated when they change during sync. See `src/sync/index.js` for details.\n- `onWillApplyRemoteChanges` - called after pullChanges is done, but before these changes are applied. Some stats about the pulled changes are passed as arguments. An advanced user can use this for example to show some UI to the user when processing a very large sync (could be useful for replacement syncs). Note that remote change count is NaN in turbo mode.\n\n\n"
  },
  {
    "path": "docs-website/docs/docs/Sync/Intro.md",
    "content": "---\ntitle: Intro\nhide_title: true\n---\n\n# Synchronization\n\nWatermelonDB has been designed from scratch to be able to seamlessly synchronize with a remote database (and, therefore, keep multiple copies of data synced with each other).\n\nNote that Watermelon is only a local database — you need to **bring your own backend**. What Watermelon provides are:\n\n- **Synchronization primitives** — information about which records were created, updated, or deleted locally since the last sync — and which columns exactly were modified. You can build your own custom sync engine using those primitives\n- **Built-in sync adapter** — You can use the sync engine Watermelon provides out of the box, and you only need to provide two API endpoints on your backend that conform to Watermelon sync protocol\n\nTo implement synchronization between your client side database (WatermelonDB) and your server, you need to implement synchronization in the [frontend](../Sync/Frontend.md) & the [backend](../Sync/Backend.md).\n"
  },
  {
    "path": "docs-website/docs/docs/Sync/Limitations.md",
    "content": "\n1. If a record being pushed changes remotely between pull and push, push will just fail. It would be better if it failed with a list of conflicts, so that `synchronize()` can automatically respond. Alternatively, sync could only send changed fields and server could automatically always just apply those changed fields to the server version (since that's what per-column client-wins resolver will do anyway)\n2. During next sync pull, changes we've just pushed will be pulled again, which is unnecessary. It would be better if server, during push, also pulled local changes since `lastPulledAt` and responded with NEW timestamp to be treated as `lastPulledAt`.\n3. It shouldn't be necessary to push the whole updated record — just changed fields + ID should be enough\n   > Note: That might conflict with \"If client wants to update a record that doesn’t exist, create it\"\n\n<br/>\n\nDon't like these limitations?\nGood, neither do we! Please [contribute](../Sync/Contribute.md) - we'll give you guidance.\n"
  },
  {
    "path": "docs-website/docs/docs/Sync/Troubleshoot.md",
    "content": "\n**⚠️ Note about a React Native / UglifyES bug**. When you import Watermelon Sync, your app might fail to compile in release mode. To fix this, configure Metro bundler to use Terser instead of UglifyES. Run:\n\n```bash\nyarn add metro-minify-terser\n```\n\nThen, update `metro.config.js`:\n\n```js\nmodule.exports = {\n    // ...\n    transformer: {\n        // ...\n        minifierPath: 'metro-minify-terser',\n    },\n}\n```\n\nYou might also need to switch to Terser in Webpack if you use Watermelon for web.\n"
  },
  {
    "path": "docs-website/docs/docs/Writers.md",
    "content": "---\ntitle: Writers, Readers, Batching\nhide_title: true\n---\n\n# Writers, Readers, and batching\n\nThink of this guide as a part two of [Create, Read, Update, Delete](./CRUD.md).\n\nAs mentioned previously, you can't just modify WatermelonDB's database anywhere. All changes must be done within a **Writer**.\n\nThere are two ways of defining a writer: inline and by defining a **writer method**.\n\n### Inline writers\n\nHere is an inline writer, you can invoke it anywhere you have access to the `database` object:\n\n```js\n// Note: function passed to `database.write()` MUST be asynchronous\nconst newPost = await database.write(async => {\n  const post = await database.get('posts').create(post => {\n    post.title = 'New post'\n    post.body = 'Lorem ipsum...'\n  })\n  const comment = await database.get('comments').create(comment => {\n    comment.post.set(post)\n    comment.author.id = someUserId\n    comment.body = 'Great post!'\n  })\n\n  // Note: Value returned from the wrapped function will be returned to `database.write` caller\n  return post\n})\n```\n\n### Writer methods\n\nWriter methods can be defined on `Model` subclasses by using the `@writer` decorator:\n\n```js\nimport { writer } from '@nozbe/watermelondb/decorators'\n\nclass Post extends Model {\n  // ...\n\n  @writer async addComment(body, author) {\n    const newComment = await this.collections.get('comments').create(comment => {\n      comment.post.set(this)\n      comment.author.set(author)\n      comment.body = body\n    })\n    return newComment\n  }\n}\n```\n\nWe highly recommend defining writer methods on `Models` to organize all code that changes the database in one place, and only use inline writers sporadically.\n\nNote that this is the same as defining a simple method that wraps all work in `database.write()` - using `@writer` is simply more convenient.\n\n**Note:**\n\n- Always mark actions as `async` and remember to `await` on `.create()` and `.update()`\n- You can use `this.collections` to access `Database.collections`\n\n**Another example**: updater action on `Comment`:\n\n```js\nclass Comment extends Model {\n  // ...\n  @field('is_spam') isSpam\n\n  @writer async markAsSpam() {\n    await this.update(comment => {\n      comment.isSpam = true\n    })\n  }\n}\n```\n\nNow we can create a comment and immediately mark it as spam:\n\n```js\nconst comment = await post.addComment('Lorem ipsum', someUser)\nawait comment.markAsSpam()\n```\n\n## Batch updates\n\nWhen you make multiple changes in a writer, it's best to **batch them**.\n\nBatching means that the app doesn't have to go back and forth with the database (sending one command, waiting for the response, then sending another), but instead sends multiple commands in one big batch. This is faster, safer, and can avoid subtle bugs in your app\n\nTake an action that changes a `Post` into spam:\n\n```js\nclass Post extends Model {\n  // ...\n  @writer async createSpam() {\n    await this.update(post => {\n      post.title = `7 ways to lose weight`\n    })\n    await this.collections.get('comments').create(comment => {\n      comment.post.set(this)\n      comment.body = \"Don't forget to comment, like, and subscribe!\"\n    })\n  }\n}\n```\n\nLet's modify it to use batching:\n\n```js\nclass Post extends Model {\n  // ...\n  @writer async createSpam() {\n    await this.batch(\n      this.prepareUpdate(post => {\n        post.title = `7 ways to lose weight`\n      }),\n      this.collections.get('comments').prepareCreate(comment => {\n        comment.post.set(this)\n        comment.body = \"Don't forget to comment, like, and subscribe!\"\n      })\n    )\n  }\n}\n```\n\n**Note**:\n\n- You can call `await this.batch` within `@writer` methods only. You can also call `database.batch()` within a `database.write()` block.\n- Pass the list of **prepared operations** as arguments:\n  - Instead of calling `await record.update()`, pass `record.prepareUpdate()` — note lack of `await`\n  - Instead of `await collection.create()`, use `collection.prepareCreate()`\n  - Instead of `await record.markAsDeleted()`, use `record.prepareMarkAsDeleted()`\n  - Instead of `await record.destroyPermanently()`, use `record.prepareDestroyPermanently()`\n  - Advanced: you can pass `collection.prepareCreateFromDirtyRaw({ put your JSON here })`\n  - You can pass falsy values (null, undefined, false) to batch — they will simply be ignored.\n  - You can also pass a single array argument instead of a list of arguments\n\n## Delete action\n\nWhen you delete, say, a `Post`, you generally want all `Comment`s that belong to it to be deleted as well.\n\nTo do this, override `markAsDeleted()` (or `destroyPermanently()` if you don't sync) to explicitly delete all children as well.\n\n```js\nclass Post extends Model {\n  static table = 'posts'\n  static associations = {\n    comments: { type: 'has_many', foreignKey: 'post_id' },\n  }\n\n  @children('comments') comments\n\n  async markAsDeleted() {\n    await this.comments.destroyAllPermanently()\n    await super.markAsDeleted()\n  }\n}\n```\n\nThen to actually delete the post:\n\n```js\ndatabase.write(async () => {\n  await post.markAsDeleted()\n})\n```\n\n**Note:**\n\n- Use `Query.destroyAllPermanently()` on all dependent `@children` you want to delete\n- Remember to call `super.markAsDeleted` — at the end of the method!\n\n## Advanced: Why are readers and writers necessary?\n\nWatermelonDB is highly asynchronous, which is a BIG challange in terms of achieving consistent data. Read this only if you are curious:\n\n<details>\n  <summary>Why are readers and writers necessary?</summary>\n\n  Consider a function `markCommentsAsSpam` that fetches a list of comments on a post, and then marks them all as spam. The two operations (fetching, and then updating) are asynchronous, and some other operation that modifies the database could run in between. And it could just happen to be a function that adds a new comment on this post. Even though the function completes *successfully*, it wasn't *actually* successful at its job.\n\n  This example is trivial. But others may be far more dangerous. If a function fetches a record to perform an update on, this very record could be deleted midway through, making the action fail (and potentially causing the app to crash, if not handled properly). Or a function could have invariants determining whether the user is allowed to perform an action, that would be invalidated during action's execution. Or, in a collaborative app where access permissions are represented by another object, parallel execution of different actions could cause those access relations to be left in an inconsistent state.\n\n  The worst part is that analyzing all *possible* interactions for dangers is very hard, and having sync that runs automatically makes them very likely.\n\n  Solution? Group together related reads and writes together in an Writer, enforce that all writes MUST occur in a Writer, and only allow one Writer to run at the time. This way, it's guaranteed that in a Writer, you're looking at a consistent view of the world. Most simple reads are safe to do without groupping them, however if you have multiple related reads, you also need to wrap them in a Reader.\n</details>\n\n## Advanced: Readers\n\nReaders are an advanced feature you'll rarely need.\n\nBecause WatermelonDB is asynchronous, if you make multiple separate queries, normally you have no guarantee that no records were created, updated, or deleted between fetching these queries.\n\nCode within a Reader, however, has a guarantee that for the duration of the Reader, no changes will be made to the database (more precisely, no Writer can execute during Reader's work).\n\nFor example, if you were writing a custom XML data export feature for your app, you'd want the information there to be fully consistent. Therefore, you'd wrap all queries within a Reader:\n\n```js\ndatabase.read(async () => {\n  // no changes will happen to the database until this function exits\n})\n\n// alternatively:\nclass Blog extends Model {\n  // ...\n\n  @reader async exportBlog() {\n    const posts = await this.posts.fetch()\n    const comments = await this.allComments.fetch()\n    // ...\n  }\n}\n```\n\n## Advanced: nesting writers or readers\n\nIf you try to call a Writer from another Writer, you'll notice that it won't work. This is because while a Writer is running, no other Writer can run simultaneously. To override this behavior, wrap the Writer call in `this.callWriter`:\n\n```js\nclass Comment extends Model {\n  // ...\n\n  @writer async appendToPost() {\n    const post = await this.post.fetch()\n    // `appendToBody` is an `@writer` on `Post`, so we call callWriter to allow it\n    await this.callWriter(() => post.appendToBody(this.body))\n  }\n}\n\n// alternatively:\ndatabase.write(async writer => {\n  const post = await database.get('posts').find('abcdef')\n  await writer.callWriter(() => post.appendToBody('Lorem ipsum...')) // appendToBody is a @writer\n})\n```\n\nThe same is true with Readers - use `callReader` to nest readers.\n\n* * *\n\n## Next steps\n\n➡️ Now that you've mastered all basics of Watermelon, go create some powerful apps — or keep reading [**advanced guides**](./README.md)\n"
  },
  {
    "path": "docs-website/docusaurus.config.js",
    "content": "// @ts-check\n// Note: type annotations allow type checking and IDEs autocompletion\n\nconst { themes } = require('prism-react-renderer')\nconst lightTheme = themes.github\nconst darkTheme = themes.dracula\nconst { version } = require('./package.json')\n\n/** @type {import('@docusaurus/types').Config} */\nconst config = {\n  title: 'WatermelonDB',\n  tagline: 'A reactive database framework',\n  favicon: 'img/favicon.ico',\n\n  // Set the production url of your site here\n  url: 'https://watermelondb.dev',\n  // Set the /<baseUrl>/ pathname under which your site is served\n  // For GitHub pages deployment, it is often '/<projectName>/'\n  baseUrl: '/',\n\n  // GitHub pages deployment config.\n  // If you aren't using GitHub pages, you don't need these.\n  organizationName: 'Nozbe', // Usually your GitHub org/user name.\n  projectName: 'WatermelonDB', // Usually your repo name.\n\n  trailingSlash: false,\n\n  onBrokenLinks: 'throw',\n  onBrokenMarkdownLinks: 'warn',\n\n  // Even if you don't use internalization, you can use this field to set useful\n  // metadata like html lang. For example, if your site is Chinese, you may want\n  // to replace \"en\" with \"zh-Hans\".\n  i18n: {\n    defaultLocale: 'en',\n    locales: ['en'],\n  },\n\n  presets: [\n    [\n      'classic',\n      /** @type {import('@docusaurus/preset-classic').Options} */\n      ({\n        docs: {\n          sidebarPath: require.resolve('./sidebars.js'),\n          // Please change this to your repo.\n          // Remove this to remove the \"edit this page\" links.\n          editUrl: 'https://github.com/nozbe/WatermelonDB/edit/master/docs-website/',\n          routeBasePath: '/',\n          path: 'docs',\n          lastVersion: 'current',\n          versions: {\n            current: {\n              label: `${version}`,\n              badge: true,\n            },\n          },\n        },\n        // blog: {\n        //   showReadingTime: true,\n        //   // Please change this to your repo.\n        //   // Remove this to remove the \"edit this page\" links.\n        //   editUrl:\n        //     'https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/',\n        // },\n        theme: {\n          customCss: require.resolve('./src/css/custom.css'),\n        },\n      }),\n    ],\n  ],\n\n  themeConfig:\n    /** @type {import('@docusaurus/preset-classic').ThemeConfig} */\n    ({\n      // Replace with your project's social card\n      image: 'img/watermelon-social-card.png',\n      navbar: {\n        title: 'WatermelonDB',\n        logo: {\n          alt: 'WatermelonDB Logo',\n          src: 'img/logo.svg',\n        },\n        items: [\n          {\n            type: 'doc',\n            position: 'left',\n            label: 'Docs',\n            docId: 'docs/README',\n          },\n          {\n            type: 'docsVersionDropdown',\n            position: 'left',\n          },\n          // {to: '/blog', label: 'Blog', position: 'left'},\n          {\n            href: 'https://github.com/nozbe/WatermelonDB',\n            label: 'GitHub',\n            position: 'right',\n          },\n        ],\n      },\n      footer: {\n        style: 'dark',\n        links: [\n          {\n            title: 'Docs',\n            items: [\n              {\n                label: 'Installation',\n                to: '/docs/Installation',\n              },\n              // {\n              //   label: 'Advanced Guides',\n              //   to: '/docs/Advanced/Migrations',\n              // },\n              {\n                label: 'Contributing',\n                to: '/docs/CONTRIBUTING',\n              },\n            ],\n          },\n          {\n            title: 'Community',\n            items: [\n              {\n                label: 'Stack Overflow',\n                href: 'https://stackoverflow.com/questions/tagged/watermelondb',\n              },\n              // {\n              //   label: 'Discord',\n              //   href: 'https://discordapp.com/invite/docusaurus',\n              // },\n              {\n                label: 'Twitter',\n                href: 'https://twitter.com/radexp',\n              },\n            ],\n          },\n          {\n            title: 'More',\n            items: [\n              // {\n              //   label: 'Blog',\n              //   to: '/blog',\n              // },\n              {\n                label: 'GitHub',\n                href: 'https://github.com/nozbe/WatermelonDB',\n              },\n            ],\n          },\n        ],\n        copyright: `WatermelonDB by <a href=\"https://radex.io\">Radek Pietruszewski</a> and <a href=\"https://nozbe.com\">Nozbe</a>.`,\n      },\n      prism: {\n        theme: lightTheme,\n        darkTheme: darkTheme,\n      },\n    }),\n}\n\nmodule.exports = config\n"
  },
  {
    "path": "docs-website/package.json",
    "content": "{\n  \"name\": \"docs-website\",\n  \"version\": \"0.28.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"docusaurus\": \"docusaurus\",\n    \"start\": \"docusaurus start\",\n    \"build\": \"docusaurus build\",\n    \"swizzle\": \"docusaurus swizzle\",\n    \"deploy\": \"docusaurus deploy\",\n    \"clear\": \"docusaurus clear\",\n    \"serve\": \"docusaurus serve\",\n    \"write-translations\": \"docusaurus write-translations\",\n    \"write-heading-ids\": \"docusaurus write-heading-ids\"\n  },\n  \"dependencies\": {\n    \"@docusaurus/core\": \"3.7.0\",\n    \"@docusaurus/preset-classic\": \"3.7.0\",\n    \"@mdx-js/react\": \"^3.0.0\",\n    \"clsx\": \"^1.2.1\",\n    \"prism-react-renderer\": \"^2.1.0\",\n    \"react\": \"^18.2.0\",\n    \"react-dom\": \"^18.2.0\"\n  },\n  \"devDependencies\": {\n    \"@docusaurus/module-type-aliases\": \"3.7.0\"\n  },\n  \"browserslist\": {\n    \"production\": [\n      \">0.5%\",\n      \"not dead\",\n      \"not op_mini all\"\n    ],\n    \"development\": [\n      \"last 1 chrome version\",\n      \"last 1 firefox version\",\n      \"last 1 safari version\"\n    ]\n  },\n  \"engines\": {\n    \"node\": \">=18.0\"\n  }\n}\n"
  },
  {
    "path": "docs-website/sidebars.js",
    "content": "/**\n * Creating a sidebar enables you to:\n - create an ordered group of docs\n - render a sidebar for each doc of that group\n - provide next/previous navigation\n\n The sidebars can be generated from the filesystem, or explicitly defined here.\n\n Create as many sidebars as you want.\n */\n\n// @ts-check\n\n/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */\nconst sidebars = {\n  docs: {\n    About: [\n      'docs/README',\n      // 'docs/Why',\n      // 'docs/WhoUses',\n      // 'docs/Example',\n      // 'docs/Demo',\n    ],\n    Setup: [\n      'docs/Installation',\n      'docs/Setup',\n      'docs/Schema',\n      'docs/Model',\n      'docs/Advanced/Migrations',\n    ],\n    Usage: ['docs/Relation', 'docs/CRUD', 'docs/Components', 'docs/Query', 'docs/Writers'],\n    Sync: [\n      'docs/Sync/Intro',\n      'docs/Sync/Frontend',\n      'docs/Sync/Backend',\n      'docs/Sync/Limitations',\n      'docs/Sync/FAQ',\n      'docs/Sync/Troubleshoot',\n      'docs/Sync/Contribute',\n    ],\n    Advanced: [\n      'docs/Advanced/CreateUpdateTracking',\n      'docs/Advanced/AdvancedFields',\n      'docs/Advanced/Flow',\n      'docs/Advanced/LocalStorage',\n      'docs/Advanced/ProTips',\n      'docs/Advanced/Performance',\n      'docs/Advanced/SharingDatabaseAcrossTargets',\n    ],\n    Contributing: [\n      {\n        type: 'autogenerated',\n        dirName: 'docs/Implementation',\n      },\n    ],\n    Other: ['docs/Roadmap', 'docs/CONTRIBUTING', 'docs/CHANGELOG'],\n  },\n}\n\nmodule.exports = sidebars\n"
  },
  {
    "path": "docs-website/src/components/HomepageFeatures/index.js",
    "content": "import clsx from 'clsx'\nimport React from 'react'\nimport styles from './styles.module.css'\n\nconst FeatureList = [\n  {\n    title: 'Fast',\n    description: (\n      <>\n        WatemerlonDB was designed from the ground up to be blazing fast ⚡️ and launch your app\n        instantly no matter how much data you have.\n      </>\n    ),\n  },\n  {\n    title: 'Highly scalable',\n    description: (\n      <>\n        WatermelonDB is built on rock-solid SQLite foundation and optimized to handle from hundreds\n        to tens of thousands of records.\n      </>\n    ),\n  },\n  {\n    title: 'Offline-first',\n    description: (\n      <>\n        Ideal for offline-first apps, sync with your own server using WatermelonDB Powerful Sync\n        Engine.\n      </>\n    ),\n  },\n]\n\nfunction Feature({\n  // Svg,\n  title,\n  description,\n}) {\n  return (\n    <div className={clsx('col col--4')}>\n      {/* <div className=\"text--center\">\n        <Svg className={styles.featureSvg} role=\"img\" />\n      </div> */}\n      <div className=\"text--center padding-horiz--md\">\n        <h3>{title}</h3>\n        <p>{description}</p>\n      </div>\n    </div>\n  )\n}\n\nexport default function HomepageFeatures() {\n  return (\n    <section className={styles.features}>\n      <div className=\"container\">\n        <div className=\"row\">\n          {FeatureList.map((props) => (\n            <Feature key={props.title} {...props} />\n          ))}\n        </div>\n      </div>\n    </section>\n  )\n}\n"
  },
  {
    "path": "docs-website/src/components/HomepageFeatures/styles.module.css",
    "content": ".features {\n  display: flex;\n  align-items: center;\n  padding: 2rem 0;\n  width: 100%;\n}\n\n.featureSvg {\n  height: 200px;\n  width: 200px;\n}\n"
  },
  {
    "path": "docs-website/src/css/custom.css",
    "content": "/**\n * Any CSS included here will be global. The classic template\n * bundles Infima by default. Infima is a CSS framework designed to\n * work well for content-centric websites.\n */\n\n/* You can override the default Infima variables here. */\n:root {\n  --ifm-color-primary: #5e983d;\n  --ifm-color-primary-dark: #558937;\n  --ifm-color-primary-darker: #508134;\n  --ifm-color-primary-darkest: #426a2b;\n  --ifm-color-primary-light: #67a743;\n  --ifm-color-primary-lighter: #6caf46;\n  --ifm-color-primary-lightest: #7dbc59;\n}\n\n/* For readability concerns, you should choose a lighter palette in dark mode. */\n[data-theme='dark'] {\n  --ifm-color-primary: #de4156;\n  --ifm-color-primary-dark: #da2940;\n  --ifm-color-primary-darker: #d0243b;\n  --ifm-color-primary-darkest: #ab1e31;\n  --ifm-color-primary-light: #e2596c;\n  --ifm-color-primary-lighter: #e46677;\n  --ifm-color-primary-lightest: #eb8a97;\n}\n\n/* \nUse this tool to generate colors: https://docusaurus.io/docs/2.0.1/migration/manual#updated-fields\n*/\n"
  },
  {
    "path": "docs-website/src/pages/index.js",
    "content": "import Link from '@docusaurus/Link'\nimport useDocusaurusContext from '@docusaurus/useDocusaurusContext'\nimport HomepageFeatures from '@site/src/components/HomepageFeatures'\nimport { Redirect } from '@docusaurus/router'\nimport Layout from '@theme/Layout'\nimport clsx from 'clsx'\nimport React from 'react'\n\nimport styles from './index.module.css'\n\nfunction HomepageHeader() {\n  const { siteConfig } = useDocusaurusContext()\n  return (\n    <header className={clsx('hero hero--primary', styles.heroBanner)}>\n      <div className=\"container\">\n        <h1 className=\"hero__title\">{siteConfig.title}</h1>\n        <p className=\"hero__subtitle\">{siteConfig.tagline}</p>\n        <div className={styles.buttons}>\n          <Link className=\"button button--secondary button--lg\" to=\"/docs/\">\n            Get Started\n          </Link>\n        </div>\n      </div>\n    </header>\n  )\n}\n\nexport default function Home() {\n  // TODO: Build actual home page\n  return <Redirect to=\"/docs\" />\n  // return (\n  //   <Layout\n  //     description=\"WatermelonDB is a performant, scalable, and easy-to-use database for React and React Native apps.\">\n  //     <HomepageHeader />\n  //     <main>\n  //       <HomepageFeatures />\n  //     </main>\n  //   </Layout>\n  // )\n}\n"
  },
  {
    "path": "docs-website/src/pages/index.module.css",
    "content": "/**\n * CSS files with the .module.css suffix will be treated as CSS modules\n * and scoped locally.\n */\n\n.heroBanner {\n  padding: 4rem 0;\n  text-align: center;\n  position: relative;\n  overflow: hidden;\n}\n\n@media screen and (max-width: 996px) {\n  .heroBanner {\n    padding: 2rem;\n  }\n}\n\n.buttons {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n"
  },
  {
    "path": "docs-website/static/.nojekyll",
    "content": ""
  },
  {
    "path": "docs-website/static/CNAME",
    "content": "watermelondb.dev"
  },
  {
    "path": "examples/typescript/AppSchema.ts",
    "content": "import { appSchema, tableSchema } from \"@nozbe/watermelondb\"\nimport { TableName } from \"./ts-example\"\n\nexport const AppSchema = appSchema({\n  version: 1,\n  tables: [\n    tableSchema({\n      name: TableName.BLOGS,\n      columns: [{ name: 'name', type: 'string' }],\n    }),\n    tableSchema({\n      name: TableName.POSTS,\n      columns: [\n        { name: 'title', type: 'string' },\n        { name: 'body', type: 'string' },\n        { name: 'blog_id', type: 'string', isIndexed: true },\n        { name: 'is_nasty', type: 'boolean' },\n      ],\n    }),\n  ],\n})\n"
  },
  {
    "path": "examples/typescript/__typetests__/README.md",
    "content": "Files here are not meant to be executed, only type-checked.\n\nNote: You MUST add imports to new files from index.ts\n\nMirror changes here with src/__typetests__\n"
  },
  {
    "path": "examples/typescript/__typetests__/index.ts",
    "content": "import './query'\nimport './withObservables'\n"
  },
  {
    "path": "examples/typescript/__typetests__/query.ts",
    "content": "import { Collection, Q, type ColumnName, type TableName } from '@nozbe/watermelondb'\n\nconst collection: Collection<any> = null as any\nconst t: TableName<any> = null as any\nconst c: ColumnName = null as any\n\n// Check that queries don't break\ncollection.query()\ncollection.query(Q.where(c, true))\ncollection.query(Q.and(Q.where(c, true)))\ncollection.query(Q.or(Q.where(c, true)))\ncollection.query(Q.on(t, Q.where(c, true)))\ncollection.query().extend(Q.where(c, true))\n\n// Same as above, but as an array\ncollection.query([])\ncollection.query([Q.where(c, true)])\ncollection.query(Q.and([Q.where(c, true)]))\ncollection.query(Q.or([Q.where(c, true)]))\ncollection.query(Q.on(t, [Q.where(c, true)]))\ncollection.query().extend([Q.where(c, true)])\n"
  },
  {
    "path": "examples/typescript/__typetests__/withObservables.tsx",
    "content": "import * as React from 'react'\nimport { withObservables, ExtractedObservables } from '@nozbe/watermelondb/src/react'\nimport { Model, Database, tableName } from '@nozbe/watermelondb'\nimport { expectType } from 'tsd-check'\n\nconst TableName_BLOGS = tableName<Blog>('blogs')\n\nclass Blog extends Model {\n  static table = TableName_BLOGS\n}\n\nconst TABLE_NAME = 'table'\n\nconst getObservables = ({\n  id,\n  model,\n  database,\n}: {\n  id: string\n  model: Blog\n  database: Database\n}) => {\n  const model$ = database.collections.get(TableName_BLOGS).findAndObserve(id)\n  return {\n    model: model,\n    keyChanged: model,\n    observedModel: model.observe(),\n    secondModel: model$,\n  }\n}\n\ninterface ChildProps extends ExtractedObservables<ReturnType<typeof getObservables>> {\n  passThrough: string\n}\nclass Child extends React.PureComponent<ChildProps> {\n  static options = {\n    header: 'Header Text',\n  }\n  render() {\n    const { model, keyChanged, observedModel, secondModel, passThrough } = this.props\n    return (\n      <>\n        <>{passThrough}</>\n        <>{model.id}</>\n        <>{keyChanged.id}</>\n        <>{observedModel.id}</>\n        <>{secondModel.id}</>\n      </>\n    )\n  }\n}\n\nconst WrappedChild = withObservables(['id'], getObservables)(Child)\n\n// @ts-ignore\nconst database!: Database\n\nconst element = (\n  <WrappedChild passThrough=\"abc\" id=\"123\" model={null as unknown as Blog} database={database} />\n)\n\nexpectType<string>(WrappedChild.options.header)\n"
  },
  {
    "path": "examples/typescript/package.json",
    "content": "{\n  \"name\": \"typescript-example\",\n  \"version\": \"1.0.0\",\n  \"license\": \"MIT\",\n  \"scripts\": {\n    \"test\": \"tsc --noEmit\"\n  },\n  \"devDependencies\": {\n    \"@nozbe/watermelondb\": \"link:../../\",\n    \"@types/lokijs\": \"^1.5.3\",\n    \"tsd-check\": \"^0.6.0\",\n    \"typescript\": \"^4.5.0\"\n  }\n}\n"
  },
  {
    "path": "examples/typescript/ts-example.ts",
    "content": "// tslint:disable: max-classes-per-file\nimport { Database, Model, Q, Query, Relation } from '@nozbe/watermelondb'\nimport { action, children, field, lazy, relation, text } from '@nozbe/watermelondb/decorators'\nimport { addColumns, schemaMigrations } from '@nozbe/watermelondb/Schema/migrations'\nimport { setGenerator } from '@nozbe/watermelondb/utils/common/randomId'\nimport SQLiteAdapter from \"@nozbe/watermelondb/adapters/sqlite\"\nimport { Associations } from '@nozbe/watermelondb/Model'\nimport { SyncDatabaseChangeSet, synchronize } from \"@nozbe/watermelondb/sync\"\nimport { AppSchema } from \"./AppSchema\"\nimport './__typetests__'\n// Create an enum for all Table Names.\n// This will help in documenting where all exact table names need to be passed.\nexport enum TableName {\n  BLOGS = 'blogs',\n  POSTS = 'posts',\n}\n\nclass Blog extends Model {\n  static table = TableName.BLOGS\n\n  static associations: Associations = {\n    [TableName.POSTS]: { type: 'has_many', foreignKey: 'blog_id' },\n  }\n\n  @field('name') name!: string;\n\n  @children(TableName.POSTS) posts!: Query<Post>;\n\n  @lazy nastyPosts = this.posts\n    .extend(Q.where('is_nasty', true));\n\n  @action async moderateAll() {\n    await this.nastyPosts.destroyAllPermanently()\n  }\n}\n\nclass Post extends Model {\n  static table = TableName.POSTS\n\n  static associations: Associations = {\n    [TableName.BLOGS]: { type: 'belongs_to', key: 'blog_id' },\n  }\n\n  @field('name') name!: string;\n  @text(\"body\") content!: string;\n  @field('is_nasty') isNasty!: boolean;\n\n  @relation(TableName.BLOGS, 'blog_id') blog!: Relation<Blog>;\n}\n\n// Define a custom ID generator.\nfunction randomString(): string {\n  return 'RANDOM STRING'\n}\n\nsetGenerator(randomString)\n\n// or as anonymous function:\nsetGenerator(() => 'RANDOM STRING')\n\nconst adapter = new SQLiteAdapter({\n  schema: AppSchema,\n  migrations: schemaMigrations({\n    migrations: [\n      {\n        toVersion: 1,\n        steps: [\n          addColumns({\n            table: TableName.POSTS,\n            columns: [{ name: \"body\", type: \"string\", isIndexed: true, isOptional: false }],\n          }),\n        ],\n      },\n    ],\n  }),\n  onSetUpError: (error): void => { },\n})\n\nconst db = new Database({\n  adapter,\n  modelClasses: [Blog, Post],\n\n})\n\nconst sync = async () => {\n  return synchronize({\n    database: db,\n    async pullChanges({ lastPulledAt, schemaVersion, migration }) {\n      // just for demo purposes, this should come from the server\n      const serverTS = new Date().getTime()\n      const serverChanges: SyncDatabaseChangeSet = {\n        posts: {\n          created: [],\n          updated: [],\n          deleted: [\"some-id\"],\n        },\n      }\n\n      return { changes: serverChanges, timestamp: serverTS }\n    },\n    async pushChanges({ changes, lastPulledAt }) {\n      return undefined\n    },\n  })\n}"
  },
  {
    "path": "examples/typescript/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"lib\": [\"ES2016\", \"DOM\"],\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true,\n    \"strict\": true,\n    \"target\": \"ES5\",\n    \"paths\": {\n      // this allows sub-package imports from src; fx. '@nozbe/watermelondb/decorators'\n      \"@nozbe/watermelondb/*\": [\"../../src/*\"]\n    }\n  },\n  \"include\": [\n    \"./*.ts\",\n    \"../../src/**/*.ts\" // this is just used to validate everything, not just imported declarations\n  ]\n}\n"
  },
  {
    "path": "flow-typed/custom/lokijs.js",
    "content": "declare module 'lokijs' {\n  declare module.exports: any;\n}\n\ndeclare module 'lokijs/src/loki-indexed-adapter' {\n  declare module.exports: any;\n}\n"
  },
  {
    "path": "flow-typed/custom/react-native.js",
    "content": "declare module 'react-native' {\n  declare module.exports: any;\n}\n"
  },
  {
    "path": "flow-typed/npm/rxjs_v6.x.js",
    "content": "type rxjs$PartialObserver<-T> =\n  | {\n  +next: (value: T) => mixed,\n  +error?: (error: any) => mixed,\n  +complete?: () => mixed\n}\n  | {\n  +next?: (value: T) => mixed,\n  +error: (error: any) => mixed,\n  +complete?: () => mixed\n}\n  | {\n  +next?: (value: T) => mixed,\n  +error?: (error: any) => mixed,\n  +complete: () => mixed\n};\n\ndeclare interface rxjs$ISubscription {\n  unsubscribe(): void;\n}\n\ntype rxjs$TeardownLogic = rxjs$ISubscription | (() => void);\n\ntype rxjs$EventListenerOptions =\n  | {\n  capture?: boolean,\n  passive?: boolean,\n  once?: boolean\n}\n  | boolean;\n\ntype rxjs$ObservableInput<T> = rxjs$Observable<T> | Promise<T> | Iterable<T>;\n\ntype rxjs$OperatorFunction<T, R> = (rxjs$Observable<T>) => rxjs$Observable<R>;\ntype rxjs$OperatorFunctionLast<T, R: rxjs$Observable<*>> = (\n  rxjs$Observable<T>\n) => R;\n\ndeclare class rxjs$Observable<+T> {\n  static create(\n    subscribe: (\n      observer: rxjs$Observer<T>\n    ) => rxjs$ISubscription | Function | void\n  ): rxjs$Observable<T>;\n\n  let<U>(\n    project: (self: rxjs$Observable<T>) => rxjs$Observable<U>\n  ): rxjs$Observable<U>;\n\n  observeOn(scheduler: rxjs$SchedulerClass): rxjs$Observable<T>;\n\n  pipe(): rxjs$Observable<T>;\n\n  pipe<A>(op1: rxjs$OperatorFunctionLast<T, A>): A;\n\n  pipe<A, B>(\n    op1: rxjs$OperatorFunction<T, A>,\n    op2: rxjs$OperatorFunctionLast<A, B>\n  ): B;\n\n  pipe<A, B, C>(\n    op1: rxjs$OperatorFunction<T, A>,\n    op2: rxjs$OperatorFunction<A, B>,\n    op3: rxjs$OperatorFunctionLast<B, C>\n  ): C;\n\n  pipe<A, B, C, D>(\n    op1: rxjs$OperatorFunction<T, A>,\n    op2: rxjs$OperatorFunction<A, B>,\n    op3: rxjs$OperatorFunction<B, C>,\n    op4: rxjs$OperatorFunctionLast<C, D>\n  ): D;\n\n  pipe<A, B, C, D, E>(\n    op1: rxjs$OperatorFunction<T, A>,\n    op2: rxjs$OperatorFunction<A, B>,\n    op3: rxjs$OperatorFunction<B, C>,\n    op4: rxjs$OperatorFunction<C, D>,\n    op5: rxjs$OperatorFunctionLast<D, E>\n  ): E;\n\n  pipe<A, B, C, D, E, F>(\n    op1: rxjs$OperatorFunction<T, A>,\n    op2: rxjs$OperatorFunction<A, B>,\n    op3: rxjs$OperatorFunction<B, C>,\n    op4: rxjs$OperatorFunction<C, D>,\n    op5: rxjs$OperatorFunction<D, E>,\n    op6: rxjs$OperatorFunctionLast<E, F>\n  ): F;\n\n  pipe<A, B, C, D, E, F, G>(\n    op1: rxjs$OperatorFunction<T, A>,\n    op2: rxjs$OperatorFunction<A, B>,\n    op3: rxjs$OperatorFunction<B, C>,\n    op4: rxjs$OperatorFunction<C, D>,\n    op5: rxjs$OperatorFunction<D, E>,\n    op6: rxjs$OperatorFunction<E, F>,\n    op7: rxjs$OperatorFunctionLast<F, G>\n  ): G;\n\n  pipe<A, B, C, D, E, F, G>(\n    op1: rxjs$OperatorFunction<T, A>,\n    op2: rxjs$OperatorFunction<A, B>,\n    op3: rxjs$OperatorFunction<B, C>,\n    op4: rxjs$OperatorFunction<C, D>,\n    op5: rxjs$OperatorFunction<D, E>,\n    op6: rxjs$OperatorFunction<E, F>,\n    op7: rxjs$OperatorFunction<F, G>,\n    ...operations: rxjs$OperatorFunctionLast<any, any>[]\n  ): any;\n\n  toArray(): rxjs$Observable<T[]>;\n\n  toPromise(): Promise<T>;\n\n  subscribe(observer: rxjs$PartialObserver<T>): rxjs$Subscription;\n  subscribe(\n    onNext: ?(value: T) => mixed,\n    onError: ?(error: any) => mixed,\n    onCompleted: ?() => mixed\n  ): rxjs$Subscription;\n\n  _subscribe(observer: rxjs$Subscriber<T>): rxjs$Subscription;\n\n  _isScalar: boolean;\n  source: ?rxjs$Observable<any>;\n  operator: ?rxjs$Operator<any, any>;\n}\n\ndeclare module 'rxjs/observable/bindCallback' {\n  declare module.exports: {\n    bindCallback(\n      callbackFunc: (callback: (_: void) => any) => any,\n      selector?: void,\n      scheduler?: rxjs$SchedulerClass\n    ): () => rxjs$Observable<void>;\n    bindCallback<U>(\n      callbackFunc: (callback: (result: U) => any) => any,\n      selector?: void,\n      scheduler?: rxjs$SchedulerClass\n    ): () => rxjs$Observable<U>;\n    bindCallback<T, U>(\n      callbackFunc: (v1: T, callback: (result: U) => any) => any,\n      selector?: void,\n      scheduler?: rxjs$SchedulerClass\n    ): (v1: T) => rxjs$Observable<U>;\n    bindCallback<T, T2, U>(\n      callbackFunc: (v1: T, v2: T2, callback: (result: U) => any) => any,\n      selector?: void,\n      scheduler?: rxjs$SchedulerClass\n    ): (v1: T, v2: T2) => rxjs$Observable<U>;\n    bindCallback<T, T2, T3, U>(\n      callbackFunc: (v1: T, v2: T2, v3: T3, callback: (result: U) => any) => any,\n      selector?: void,\n      scheduler?: rxjs$SchedulerClass\n    ): (v1: T, v2: T2, v3: T3) => rxjs$Observable<U>;\n    bindCallback<T, T2, T3, T4, U>(\n      callbackFunc: (\n        v1: T,\n        v2: T2,\n        v3: T3,\n        v4: T4,\n        callback: (result: U) => any\n      ) => any,\n      selector?: void,\n      scheduler?: rxjs$SchedulerClass\n    ): (v1: T, v2: T2, v3: T3, v4: T4) => rxjs$Observable<U>;\n    bindCallback<T, T2, T3, T4, T5, U>(\n      callbackFunc: (\n        v1: T,\n        v2: T2,\n        v3: T3,\n        v4: T4,\n        v5: T5,\n        callback: (result: U) => any\n      ) => any,\n      selector?: void,\n      scheduler?: rxjs$SchedulerClass\n    ): (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => rxjs$Observable<U>;\n    bindCallback<T, T2, T3, T4, T5, T6, U>(\n      callbackFunc: (\n        v1: T,\n        v2: T2,\n        v3: T3,\n        v4: T4,\n        v5: T5,\n        v6: T6,\n        callback: (result: U) => any\n      ) => any,\n      selector?: void,\n      scheduler?: rxjs$SchedulerClass\n    ): (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => rxjs$Observable<U>;\n    bindCallback<U>(\n      callbackFunc: (callback: (...args: Array<any>) => any) => any,\n      selector: (...args: Array<any>) => U,\n      scheduler?: rxjs$SchedulerClass\n    ): () => rxjs$Observable<U>;\n    bindCallback<T, U>(\n      callbackFunc: (v1: T, callback: (...args: Array<any>) => any) => any,\n      selector: (...args: Array<any>) => U,\n      scheduler?: rxjs$SchedulerClass\n    ): (v1: T) => rxjs$Observable<U>;\n    bindCallback<T, T2, U>(\n      callbackFunc: (\n        v1: T,\n        v2: T2,\n        callback: (...args: Array<any>) => any\n      ) => any,\n      selector: (...args: Array<any>) => U,\n      scheduler?: rxjs$SchedulerClass\n    ): (v1: T, v2: T2) => rxjs$Observable<U>;\n    bindCallback<T, T2, T3, U>(\n      callbackFunc: (\n        v1: T,\n        v2: T2,\n        v3: T3,\n        callback: (...args: Array<any>) => any\n      ) => any,\n      selector: (...args: Array<any>) => U,\n      scheduler?: rxjs$SchedulerClass\n    ): (v1: T, v2: T2, v3: T3) => rxjs$Observable<U>;\n    bindCallback<T, T2, T3, T4, U>(\n      callbackFunc: (\n        v1: T,\n        v2: T2,\n        v3: T3,\n        v4: T4,\n        callback: (...args: Array<any>) => any\n      ) => any,\n      selector: (...args: Array<any>) => U,\n      scheduler?: rxjs$SchedulerClass\n    ): (v1: T, v2: T2, v3: T3, v4: T4) => rxjs$Observable<U>;\n    bindCallback<T, T2, T3, T4, T5, U>(\n      callbackFunc: (\n        v1: T,\n        v2: T2,\n        v3: T3,\n        v4: T4,\n        v5: T5,\n        callback: (...args: Array<any>) => any\n      ) => any,\n      selector: (...args: Array<any>) => U,\n      scheduler?: rxjs$SchedulerClass\n    ): (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => rxjs$Observable<U>;\n    bindCallback<T, T2, T3, T4, T5, T6, U>(\n      callbackFunc: (\n        v1: T,\n        v2: T2,\n        v3: T3,\n        v4: T4,\n        v5: T5,\n        v6: T6,\n        callback: (...args: Array<any>) => any\n      ) => any,\n      selector: (...args: Array<any>) => U,\n      scheduler?: rxjs$SchedulerClass\n    ): (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => rxjs$Observable<U>;\n    bindCallback<T>(\n      callbackFunc: Function,\n      selector?: void,\n      scheduler?: rxjs$SchedulerClass\n    ): (...args: Array<any>) => rxjs$Observable<T>;\n    bindCallback<T>(\n      callbackFunc: Function,\n      selector?: (...args: Array<any>) => T,\n      scheduler?: rxjs$SchedulerClass\n    ): (...args: Array<any>) => rxjs$Observable<T>;\n  }\n}\ndeclare module 'rxjs/observable/bindNodeCallback' {\n  declare module.exports: {\n    bindNodeCallback<U>(\n      callbackFunc: (callback: (err: any, result: U) => any) => any,\n      selector?: void,\n      scheduler?: rxjs$SchedulerClass\n    ): () => rxjs$Observable<U>;\n    bindNodeCallback<T, U>(\n      callbackFunc: (v1: T, callback: (err: any, result: U) => any) => any,\n      selector?: void,\n      scheduler?: rxjs$SchedulerClass\n    ): (v1: T) => rxjs$Observable<U>;\n    bindNodeCallback<T, T2, U>(\n      callbackFunc: (\n        v1: T,\n        v2: T2,\n        callback: (err: any, result: U) => any\n      ) => any,\n      selector?: void,\n      scheduler?: rxjs$SchedulerClass\n    ): (v1: T, v2: T2) => rxjs$Observable<U>;\n    bindNodeCallback<T, T2, T3, U>(\n      callbackFunc: (\n        v1: T,\n        v2: T2,\n        v3: T3,\n        callback: (err: any, result: U) => any\n      ) => any,\n      selector?: void,\n      scheduler?: rxjs$SchedulerClass\n    ): (v1: T, v2: T2, v3: T3) => rxjs$Observable<U>;\n    bindNodeCallback<T, T2, T3, T4, U>(\n      callbackFunc: (\n        v1: T,\n        v2: T2,\n        v3: T3,\n        v4: T4,\n        callback: (err: any, result: U) => any\n      ) => any,\n      selector?: void,\n      scheduler?: rxjs$SchedulerClass\n    ): (v1: T, v2: T2, v3: T3, v4: T4) => rxjs$Observable<U>;\n    bindNodeCallback<T, T2, T3, T4, T5, U>(\n      callbackFunc: (\n        v1: T,\n        v2: T2,\n        v3: T3,\n        v4: T4,\n        v5: T5,\n        callback: (err: any, result: U) => any\n      ) => any,\n      selector?: void,\n      scheduler?: rxjs$SchedulerClass\n    ): (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => rxjs$Observable<U>;\n    bindNodeCallback<T, T2, T3, T4, T5, T6, U>(\n      callbackFunc: (\n        v1: T,\n        v2: T2,\n        v3: T3,\n        v4: T4,\n        v5: T5,\n        v6: T6,\n        callback: (err: any, result: U) => any\n      ) => any,\n      selector?: void,\n      scheduler?: rxjs$SchedulerClass\n    ): (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => rxjs$Observable<U>;\n    bindNodeCallback<T>(\n      callbackFunc: Function,\n      selector?: void,\n      scheduler?: rxjs$SchedulerClass\n    ): (...args: Array<any>) => rxjs$Observable<T>;\n    bindNodeCallback<T>(\n      callbackFunc: Function,\n      selector?: (...args: Array<any>) => T,\n      scheduler?: rxjs$SchedulerClass\n    ): (...args: Array<any>) => rxjs$Observable<T>;\n  }\n}\n\ntype rxjs$Static$combineLatest = (<A, B>(\n  a: rxjs$Observable<A>,\n  resultSelector: (a: A) => B\n) => rxjs$Observable<B>) &\n  (<A, B, C>(\n  a: rxjs$Observable<A>,\n  b: rxjs$Observable<B>,\n  resultSelector: (a: A, b: B) => C\n) => rxjs$Observable<C>) &\n  (<A, B, C, D>(\n  a: rxjs$Observable<A>,\n  b: rxjs$Observable<B>,\n  c: rxjs$Observable<C>,\n  resultSelector: (a: A, b: B, c: C) => D\n) => rxjs$Observable<D>) &\n  (<A, B, C, D, E>(\n  a: rxjs$Observable<A>,\n  b: rxjs$Observable<B>,\n  c: rxjs$Observable<C>,\n  d: rxjs$Observable<D>,\n  resultSelector: (a: A, b: B, c: C, d: D) => E\n) => rxjs$Observable<E>) &\n  (<A, B, C, D, E, F>(\n  a: rxjs$Observable<A>,\n  b: rxjs$Observable<B>,\n  c: rxjs$Observable<C>,\n  d: rxjs$Observable<D>,\n  e: rxjs$Observable<E>,\n  resultSelector: (a: A, b: B, c: C, d: D, e: E) => F\n) => rxjs$Observable<F>) &\n  (<A, B, C, D, E, F, G>(\n  a: rxjs$Observable<A>,\n  b: rxjs$Observable<B>,\n  c: rxjs$Observable<C>,\n  d: rxjs$Observable<D>,\n  e: rxjs$Observable<E>,\n  f: rxjs$Observable<F>,\n  resultSelector: (a: A, b: B, c: C, d: D, e: E, f: F) => G\n) => rxjs$Observable<G>) &\n  (<A, B, C, D, E, F, G, H>(\n  a: rxjs$Observable<A>,\n  b: rxjs$Observable<B>,\n  c: rxjs$Observable<C>,\n  d: rxjs$Observable<D>,\n  e: rxjs$Observable<E>,\n  f: rxjs$Observable<F>,\n  g: rxjs$Observable<G>,\n  resultSelector: (a: A, b: B, c: C, d: D, e: E, f: F, g: G) => H\n) => rxjs$Observable<H>) &\n  (<A>(a: rxjs$Observable<A>, _: void) => rxjs$Observable<[A]>) &\n  (<A, B>(\n  a: rxjs$Observable<A>,\n  b: rxjs$Observable<B>,\n  _: void\n) => rxjs$Observable<[A, B]>) &\n  (<A, B, C>(\n  a: rxjs$Observable<A>,\n  b: rxjs$Observable<B>,\n  c: rxjs$Observable<C>,\n  _: void\n) => rxjs$Observable<[A, B, C]>) &\n  (<A, B, C, D>(\n  a: rxjs$Observable<A>,\n  b: rxjs$Observable<B>,\n  c: rxjs$Observable<C>,\n  d: rxjs$Observable<D>,\n  _: void\n) => rxjs$Observable<[A, B, C, D]>) &\n  (<A, B, C, D, E>(\n  a: rxjs$Observable<A>,\n  b: rxjs$Observable<B>,\n  c: rxjs$Observable<C>,\n  d: rxjs$Observable<D>,\n  e: rxjs$Observable<E>,\n  _: void\n) => rxjs$Observable<[A, B, C, D, E]>) &\n  (<A, B, C, D, E, F>(\n  a: rxjs$Observable<A>,\n  b: rxjs$Observable<B>,\n  c: rxjs$Observable<C>,\n  d: rxjs$Observable<D>,\n  e: rxjs$Observable<E>,\n  f: rxjs$Observable<F>,\n  _: void\n) => rxjs$Observable<[A, B, C, D, E, F]>) &\n  (<A, B, C, D, E, F, G>(\n  a: rxjs$Observable<A>,\n  b: rxjs$Observable<B>,\n  c: rxjs$Observable<C>,\n  d: rxjs$Observable<D>,\n  e: rxjs$Observable<E>,\n  f: rxjs$Observable<F>,\n  g: rxjs$Observable<G>,\n  _: void\n) => rxjs$Observable<[A, B, C, D, E, F, G]>) &\n  (<A, B, C, D, E, F, G, H>(\n  a: rxjs$Observable<A>,\n  b: rxjs$Observable<B>,\n  c: rxjs$Observable<C>,\n  d: rxjs$Observable<D>,\n  e: rxjs$Observable<E>,\n  f: rxjs$Observable<F>,\n  g: rxjs$Observable<G>,\n  h: rxjs$Observable<H>,\n  _: void\n) => rxjs$Observable<[A, B, C, D, E, F, G, H]>);\ndeclare module 'rxjs/observable/combineLatest' {\n  declare module.exports: {\n    combineLatest: rxjs$Static$combineLatest;\n  }\n}\n\ndeclare module 'rxjs/observable/concat' {\n  declare module.exports: {\n    concat<+T>(...sources: rxjs$Observable<T>[]): rxjs$Observable<T>;\n  }\n}\ndeclare module 'rxjs/observable/defer' {\n  declare module.exports: {\n    defer<+T>(\n      observableFactory: () => rxjs$Observable<T> | Promise<T>\n    ): rxjs$Observable<T>;\n  }\n}\ndeclare module 'rxjs/observable/empty' {\n  declare module.exports: {\n    empty<U>(): rxjs$Observable<U>;\n  }\n}\ndeclare module 'rxjs/observable/forkJoin' {\n  declare module.exports: {\n    forkJoin<A, B>(\n      a: rxjs$Observable<A>,\n      resultSelector: (a: A) => B\n    ): rxjs$Observable<B>;\n\n    forkJoin<A, B, C>(\n      a: rxjs$Observable<A>,\n      b: rxjs$Observable<B>,\n      resultSelector: (a: A, b: B) => C\n    ): rxjs$Observable<C>;\n\n    forkJoin<A, B, C, D>(\n      a: rxjs$Observable<A>,\n      b: rxjs$Observable<B>,\n      c: rxjs$Observable<C>,\n      resultSelector: (a: A, b: B, c: C) => D\n    ): rxjs$Observable<D>;\n\n    forkJoin<A, B, C, D, E>(\n      a: rxjs$Observable<A>,\n      b: rxjs$Observable<B>,\n      c: rxjs$Observable<C>,\n      d: rxjs$Observable<D>,\n      resultSelector: (a: A, b: B, c: C, d: D) => E\n    ): rxjs$Observable<E>;\n\n    forkJoin<A, B, C, D, E, F>(\n      a: rxjs$Observable<A>,\n      b: rxjs$Observable<B>,\n      c: rxjs$Observable<C>,\n      d: rxjs$Observable<D>,\n      e: rxjs$Observable<E>,\n      resultSelector: (a: A, b: B, c: C, d: D, e: E) => F\n    ): rxjs$Observable<F>;\n\n    forkJoin<A, B, C, D, E, F, G>(\n      a: rxjs$Observable<A>,\n      b: rxjs$Observable<B>,\n      c: rxjs$Observable<C>,\n      d: rxjs$Observable<D>,\n      e: rxjs$Observable<E>,\n      f: rxjs$Observable<F>,\n      resultSelector: (a: A, b: B, c: C, d: D, e: E, f: F) => G\n    ): rxjs$Observable<G>;\n\n    forkJoin<A, B, C, D, E, F, G, H>(\n      a: rxjs$Observable<A>,\n      b: rxjs$Observable<B>,\n      c: rxjs$Observable<C>,\n      d: rxjs$Observable<D>,\n      e: rxjs$Observable<E>,\n      f: rxjs$Observable<F>,\n      g: rxjs$Observable<G>,\n      resultSelector: (a: A, b: B, c: C, d: D, e: E, f: F, g: G) => H\n    ): rxjs$Observable<H>;\n\n    forkJoin<A, B>(\n      a: rxjs$Observable<A>,\n      b: rxjs$Observable<B>,\n      _: void\n    ): rxjs$Observable<[A, B]>;\n\n    forkJoin<A, B, C>(\n      a: rxjs$Observable<A>,\n      b: rxjs$Observable<B>,\n      c: rxjs$Observable<C>,\n      _: void\n    ): rxjs$Observable<[A, B, C]>;\n\n    forkJoin<A, B, C, D>(\n      a: rxjs$Observable<A>,\n      b: rxjs$Observable<B>,\n      c: rxjs$Observable<C>,\n      d: rxjs$Observable<D>,\n      _: void\n    ): rxjs$Observable<[A, B, C, D]>;\n\n    forkJoin<A, B, C, D, E>(\n      a: rxjs$Observable<A>,\n      b: rxjs$Observable<B>,\n      c: rxjs$Observable<C>,\n      d: rxjs$Observable<D>,\n      e: rxjs$Observable<E>,\n      _: void\n    ): rxjs$Observable<[A, B, C, D, E]>;\n\n    forkJoin<A, B, C, D, E, F>(\n      a: rxjs$Observable<A>,\n      b: rxjs$Observable<B>,\n      c: rxjs$Observable<C>,\n      d: rxjs$Observable<D>,\n      e: rxjs$Observable<E>,\n      f: rxjs$Observable<F>,\n      _: void\n    ): rxjs$Observable<[A, B, C, D, E, F]>;\n\n    forkJoin<A, B, C, D, E, F, G>(\n      a: rxjs$Observable<A>,\n      b: rxjs$Observable<B>,\n      c: rxjs$Observable<C>,\n      d: rxjs$Observable<D>,\n      e: rxjs$Observable<E>,\n      f: rxjs$Observable<F>,\n      g: rxjs$Observable<G>,\n      _: void\n    ): rxjs$Observable<[A, B, C, D, E, F, G]>;\n\n    forkJoin<A, B, C, D, E, F, G, H>(\n      a: rxjs$Observable<A>,\n      b: rxjs$Observable<B>,\n      c: rxjs$Observable<C>,\n      d: rxjs$Observable<D>,\n      e: rxjs$Observable<E>,\n      f: rxjs$Observable<F>,\n      g: rxjs$Observable<G>,\n      h: rxjs$Observable<H>,\n      _: void\n    ): rxjs$Observable<[A, B, C, D, E, F, G, H]>;\n\n    forkJoin<A>(\n      a: Array<rxjs$Observable<A>>,\n      _: void\n    ): rxjs$Observable<Array<A>>;\n\n    forkJoin<A>(\n      a: Array<rxjs$Observable<any>>,\n      _: void\n    ): rxjs$Observable<A>;\n\n    forkJoin<A, B>(\n      a: Array<rxjs$Observable<A>>,\n      resultSelector: (...values: Array<A>) => B\n    ): rxjs$Observable<B>;\n\n    forkJoin<A>(\n      a: Array<rxjs$Observable<any>>,\n      resultSelector: (...values: Array<any>) => A\n    ): rxjs$Observable<A>;\n  }\n}\ndeclare module 'rxjs/observable/from' {\n  declare module.exports: {\n    from<+T>(\n      input: rxjs$ObservableInput<T>,\n      scheduler?: rxjs$SchedulerClass\n    ): rxjs$Observable<T>;\n  }\n}\ndeclare module 'rxjs/observable/fromPromise' {\n  declare module.exports: {\n    fromPromise<+T>(promise: Promise<T>): rxjs$Observable<T>;\n  }\n}\ndeclare module 'rxjs/observable/fromEvent' {\n  declare module.exports: {\n    fromEvent: (<+T>(\n      element: any,\n      eventName: string,\n      ...none: Array<void>\n    ) => rxjs$Observable<T>) & (<+T>(\n      element: any,\n      eventName: string,\n      options: rxjs$EventListenerOptions,\n      ...none: Array<void>\n    ) => rxjs$Observable<T>) & (<+T>(\n      element: any,\n      eventName: string,\n      selector: () => T,\n      ...none: Array<void>\n    ) => rxjs$Observable<T>) & (<+T>(\n      element: any,\n      eventName: string,\n      options: rxjs$EventListenerOptions,\n      selector: () => T\n    ) => rxjs$Observable<T>);\n  }\n}\ndeclare module 'rxjs/observable/fromEventPattern' {\n  declare module.exports: {\n    fromEventPattern<+T>(\n      addHandler: (handler: (item: T) => void) => void,\n      removeHandler: (handler: (item: T) => void) => void,\n      selector?: () => T\n    ): rxjs$Observable<T>;\n  }\n}\ndeclare module 'rxjs/observable/generate' {\n  declare module.exports: {\n    // TODO\n  }\n}\ndeclare module 'rxjs/observable/iif' {\n  declare module.exports: {\n    // TODO\n  }\n}\ndeclare module 'rxjs/observable/interval' {\n  declare module.exports: {\n    interval(period: number): rxjs$Observable<number>;\n  }\n}\ndeclare module 'rxjs/observable/merge' {\n  declare module.exports: {\n    merge: (<+T, U>(\n      source0: rxjs$Observable<T>,\n      source1: rxjs$Observable<U>\n    ) => rxjs$Observable<T | U>) &\n      (<+T, U, V>(\n      source0: rxjs$Observable<T>,\n      source1: rxjs$Observable<U>,\n      source2: rxjs$Observable<V>\n    ) => rxjs$Observable<T | U | V>) &\n      (<+T>(...sources: rxjs$Observable<T>[]) => rxjs$Observable<T>)\n  }\n}\ndeclare module 'rxjs/observable/never' {\n  declare module.exports: {\n    never<U>(): rxjs$Observable<U>;\n  }\n}\ndeclare module 'rxjs/observable/of' {\n  declare module.exports: {\n    of<+T>(...values: T[]): rxjs$Observable<T>;\n  }\n}\ndeclare module 'rxjs/observable/onErrorResumeNext' {\n  declare module.exports: {\n    // TODO\n  }\n}\ndeclare module 'rxjs/observable/pairs' {\n  declare module.exports: {\n    // TODO\n  }\n}\ndeclare module 'rxjs/observable/race' {\n  declare module.exports: {\n    // TODO\n  }\n}\ndeclare module 'rxjs/observable/range' {\n  declare module.exports: {\n    range(\n      start?: number,\n      count?: number,\n      scheduler?: rxjs$SchedulerClass\n    ): rxjs$Observable<number>;\n  }\n}\ndeclare module 'rxjs/observable/throwError' {\n  declare module.exports: {\n    throwError(error: any): rxjs$Observable<any>;\n  }\n}\ndeclare module 'rxjs/observable/timer' {\n  declare module.exports: {\n    timer(\n      initialDelay: number | Date,\n      period?: number,\n      scheduler?: rxjs$SchedulerClass\n    ): rxjs$Observable<number>;\n  }\n}\ndeclare module 'rxjs/observable/using' {\n  declare module.exports: {\n    using<+T, R: rxjs$ISubscription>(\n      resourceFactory: () => ?R,\n      observableFactory: (resource: R) => rxjs$Observable<T> | Promise<T> | void\n    ): rxjs$Observable<T>;\n  }\n}\ndeclare module 'rxjs/observable/zip' {\n  declare module.exports: {\n    zip<A, B>(\n      a: rxjs$Observable<A>,\n      resultSelector: (a: A) => B\n    ): rxjs$Observable<B>;\n\n    zip<A, B, C>(\n      a: rxjs$Observable<A>,\n      b: rxjs$Observable<B>,\n      resultSelector: (a: A, b: B) => C\n    ): rxjs$Observable<C>;\n\n    zip<A, B, C, D>(\n      a: rxjs$Observable<A>,\n      b: rxjs$Observable<B>,\n      c: rxjs$Observable<C>,\n      resultSelector: (a: A, b: B, c: C) => D\n    ): rxjs$Observable<D>;\n\n    zip<A, B, C, D, E>(\n      a: rxjs$Observable<A>,\n      b: rxjs$Observable<B>,\n      c: rxjs$Observable<C>,\n      d: rxjs$Observable<D>,\n      resultSelector: (a: A, b: B, c: C, d: D) => E\n    ): rxjs$Observable<E>;\n\n    zip<A, B, C, D, E, F>(\n      a: rxjs$Observable<A>,\n      b: rxjs$Observable<B>,\n      c: rxjs$Observable<C>,\n      d: rxjs$Observable<D>,\n      e: rxjs$Observable<E>,\n      resultSelector: (a: A, b: B, c: C, d: D, e: E) => F\n    ): rxjs$Observable<F>;\n\n    zip<A, B, C, D, E, F, G>(\n      a: rxjs$Observable<A>,\n      b: rxjs$Observable<B>,\n      c: rxjs$Observable<C>,\n      d: rxjs$Observable<D>,\n      e: rxjs$Observable<E>,\n      f: rxjs$Observable<F>,\n      resultSelector: (a: A, b: B, c: C, d: D, e: E, f: F) => G\n    ): rxjs$Observable<G>;\n\n    zip<A, B, C, D, E, F, G, H>(\n      a: rxjs$Observable<A>,\n      b: rxjs$Observable<B>,\n      c: rxjs$Observable<C>,\n      d: rxjs$Observable<D>,\n      e: rxjs$Observable<E>,\n      f: rxjs$Observable<F>,\n      g: rxjs$Observable<G>,\n      resultSelector: (a: A, b: B, c: C, d: D, e: E, f: F, g: G) => H\n    ): rxjs$Observable<H>;\n\n    zip<A>(a: rxjs$Observable<A>, _: void): rxjs$Observable<[A]>;\n\n    zip<A, B>(\n      a: rxjs$Observable<A>,\n      b: rxjs$Observable<B>,\n      _: void\n    ): rxjs$Observable<[A, B]>;\n\n    zip<A, B, C>(\n      a: rxjs$Observable<A>,\n      b: rxjs$Observable<B>,\n      c: rxjs$Observable<C>,\n      _: void\n    ): rxjs$Observable<[A, B, C]>;\n\n    zip<A, B, C, D>(\n      a: rxjs$Observable<A>,\n      b: rxjs$Observable<B>,\n      c: rxjs$Observable<C>,\n      d: rxjs$Observable<D>,\n      _: void\n    ): rxjs$Observable<[A, B, C, D]>;\n\n    zip<A, B, C, D, E>(\n      a: rxjs$Observable<A>,\n      b: rxjs$Observable<B>,\n      c: rxjs$Observable<C>,\n      d: rxjs$Observable<D>,\n      e: rxjs$Observable<E>,\n      _: void\n    ): rxjs$Observable<[A, B, C, D, E]>;\n\n    zip<A, B, C, D, E, F>(\n      a: rxjs$Observable<A>,\n      b: rxjs$Observable<B>,\n      c: rxjs$Observable<C>,\n      d: rxjs$Observable<D>,\n      e: rxjs$Observable<E>,\n      f: rxjs$Observable<F>,\n      _: void\n    ): rxjs$Observable<[A, B, C, D, E, F]>;\n\n    zip<A, B, C, D, E, F, G>(\n      a: rxjs$Observable<A>,\n      b: rxjs$Observable<B>,\n      c: rxjs$Observable<C>,\n      d: rxjs$Observable<D>,\n      e: rxjs$Observable<E>,\n      f: rxjs$Observable<F>,\n      g: rxjs$Observable<G>,\n      _: void\n    ): rxjs$Observable<[A, B, C, D, E, F, G]>;\n\n    zip<A, B, C, D, E, F, G, H>(\n      a: rxjs$Observable<A>,\n      b: rxjs$Observable<B>,\n      c: rxjs$Observable<C>,\n      d: rxjs$Observable<D>,\n      e: rxjs$Observable<E>,\n      f: rxjs$Observable<F>,\n      g: rxjs$Observable<G>,\n      h: rxjs$Observable<H>,\n      _: void\n    ): rxjs$Observable<[A, B, C, D, E, F, G, H]>;\n  }\n}\n\ndeclare class rxjs$ConnectableObservable<T> extends rxjs$Observable<T> {\n  connect(): rxjs$Subscription;\n  refCount(): rxjs$Observable<T>;\n}\n\ndeclare module \"rxjs/operators\" {\n  declare module.exports: {\n    audit<+T>(\n      durationSelector: (value: T) => rxjs$Observable<any> | Promise<any>\n    ): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    auditTime<+T>(\n      duration: number,\n      scheduler?: rxjs$SchedulerClass\n    ): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    race<+T>(other: rxjs$Observable<T>): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    repeat<+T>(count?: number): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    buffer<+T>(bufferBoundaries: rxjs$Observable<any>): rxjs$Observable<T> => rxjs$Observable<Array<T>>;\n\n    bufferCount<+T>(\n      bufferSize: number,\n      startBufferEvery?: number\n    ): rxjs$Observable<T> => rxjs$Observable<Array<T>>;\n\n    bufferTime<+T>(\n      bufferTimeSpan: number,\n      bufferCreationInterval?: number,\n      maxBufferSize?: number,\n      scheduler?: rxjs$SchedulerClass\n    ): rxjs$Observable<T> => rxjs$Observable<Array<T>>;\n\n    bufferToggle<+T, U>(\n      openings: rxjs$Observable<U> | Promise<U>,\n      closingSelector: (value: U) => rxjs$Observable<any> | Promise<any>\n    ): rxjs$Observable<T> => rxjs$Observable<Array<T>>;\n\n    bufferWhen<+T>(\n      closingSelector: () => rxjs$Observable<any>\n    ): rxjs$Observable<T> => rxjs$Observable<Array<T>>;\n\n    catchError<+T, U>(\n      selector: (err: any, caught: rxjs$Observable<T>) => rxjs$Observable<U>\n    ): rxjs$Observable<T> => rxjs$Observable<U>;\n\n    concat<+T, U>(...sources: rxjs$Observable<U>[]): rxjs$Observable<T> => rxjs$Observable<T | U>;\n\n    concatAll<+T, U>(): rxjs$Observable<T> => rxjs$Observable<U>;\n\n    concatMap<+T, U>(\n      f: (value: T, index: number) => rxjs$ObservableInput<U>,\n      _: void\n    ): rxjs$Observable<T> => rxjs$Observable<U>;\n    concatMap<+T, U, V>(\n      f: (value: T, index: number) => rxjs$ObservableInput<U>,\n      resultSelector: (\n        outerValue: T,\n        innerValue: U,\n        outerIndex: number,\n        innerIndex: number\n      ) => V\n    ): rxjs$Observable<T> => rxjs$Observable<V>;\n\n    debounceTime<+T>(\n      dueTime: number,\n      scheduler?: rxjs$SchedulerClass\n    ): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    defaultIfEmpty<+T, U>(defaultValue: U): rxjs$Observable<T> => rxjs$Observable<T | U>;\n\n    delay<+T>(dueTime: number, scheduler?: rxjs$SchedulerClass): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    delayWhen<+T>(\n      delayDurationSelector: (value: T) => rxjs$Observable<any>,\n      subscriptionDelay?: rxjs$Observable<any>\n    ): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    distinctUntilChanged<+T>(compare?: (x: T, y: T) => boolean): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    distinct<+T, U>(\n      keySelector?: (value: T) => U,\n      flushes?: rxjs$Observable<mixed>\n    ): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    distinctUntilKeyChanged<+T>(\n      key: string,\n      compare?: (x: mixed, y: mixed) => boolean\n    ): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    elementAt<+T>(index: number, defaultValue?: T): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    exhaustMap<+T, U>(\n      project: (value: T, index: number) => rxjs$ObservableInput<U>,\n      _: void\n    ): rxjs$Observable<T> => rxjs$Observable<U>;\n    exhaustMap<+T, U, V>(\n      project: (value: T, index: number) => rxjs$ObservableInput<U>,\n      resultSelector: (\n        outerValue: T,\n        innerValue: U,\n        outerIndex: number,\n        innerIndex: number\n      ) => V\n    ): rxjs$Observable<T> => rxjs$Observable<V>;\n\n    expand<+T>(\n      project: (value: T, index: number) => rxjs$Observable<T>,\n      concurrent?: number,\n      scheduler?: rxjs$SchedulerClass\n    ): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    filter<+T>(\n      predicate: (value: T, index: number) => boolean,\n      thisArg?: any\n    ): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    finalize<+T>(f: () => mixed): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    first<+T, U>(\n      predicate: ?(\n        value: T,\n        index: number,\n        source: rxjs$Observable<T>\n      ) => boolean,\n      resultSelector: (value: T, index: number) => U\n    ): rxjs$Observable<T> => rxjs$Observable<U>;\n    first<+T, U>(\n      predicate: ?(\n        value: T,\n        index: number,\n        source: rxjs$Observable<T>\n      ) => boolean,\n      resultSelector: ?(value: T, index: number) => U,\n      defaultValue: U\n    ): rxjs$Observable<T> => rxjs$Observable<U>;\n    first<+T>(\n      predicate?: (value: T, index: number, source: rxjs$Observable<T>) => boolean\n    ): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    groupBy: (<+T, K>(\n      keySelector: (value: T) => K,\n      _: void\n    ) => rxjs$Observable<T> => rxjs$Observable<rxjs$GroupedObservable<K, T>>) &\n      (<+T, K, V>(\n      keySelector: (value: T) => K,\n      elementSelector: (value: T) => V,\n      durationSelector?: (\n        grouped: rxjs$GroupedObservable<K, V>\n      ) => rxjs$Observable<any>\n    ) => rxjs$Observable<T> => rxjs$Observable<rxjs$GroupedObservable<K, V>>);\n\n    ignoreElements<+T, U>(): rxjs$Observable<T> => rxjs$Observable<U>;\n\n    last<+T>(\n      predicate?: (value: T, index: number, source: rxjs$Observable<T>) => boolean\n    ): rxjs$Observable<T> => rxjs$Observable<T>;\n    last<+T, U>(\n      predicate: ?(\n        value: T,\n        index: number,\n        source: rxjs$Observable<T>\n      ) => boolean,\n      resultSelector: (value: T, index: number) => U\n    ): rxjs$Observable<T> => rxjs$Observable<U>;\n    last<+T, U>(\n      predicate: ?(\n        value: T,\n        index: number,\n        source: rxjs$Observable<T>\n      ) => boolean,\n      resultSelector: ?(value: T, index: number) => U,\n      defaultValue: U\n    ): rxjs$Observable<T> => rxjs$Observable<U>;\n\n    startWith<+T>(...values: Array<T>): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    // Alias for `mergeMap`\n    flatMap<+T, U>(\n      project: (value: T, index: number) => rxjs$ObservableInput<U>,\n      concurrency?: number\n    ): rxjs$Observable<T> => rxjs$Observable<U>;\n    flatMap<+T, U, V>(\n      project: (value: T, index: number) => rxjs$ObservableInput<U>,\n      resultSelector: (\n        outerValue: T,\n        innerValue: U,\n        outerIndex: number,\n        innerIndex: number\n      ) => V,\n      concurrency?: number\n    ): rxjs$Observable<T> => rxjs$Observable<V>;\n\n    flatMapTo<+T, U>(innerObservable: rxjs$Observable<U>): rxjs$Observable<T> => rxjs$Observable<U>;\n\n    flatMapTo<+T, U, V>(\n      innerObservable: rxjs$Observable<U>,\n      resultSelector: (\n        outerValue: T,\n        innerValue: U,\n        outerIndex: number,\n        innerIndex: number\n      ) => V,\n      concurrent?: number\n    ): rxjs$Observable<T> => rxjs$Observable<V>;\n\n    switchMap: (<+T, U, V>(\n      project: (value: T, index: number) => rxjs$ObservableInput<U>,\n      resultSelector: (\n        outerValue: T,\n        innerValue: U,\n        outerIndex: number,\n        innerIndex: number\n      ) => V\n    ) => rxjs$Observable<T> => rxjs$Observable<V>) &\n      (<+T, U>(\n      project: (value: T, index: number) => rxjs$ObservableInput<U>\n    ) => rxjs$Observable<T> => rxjs$Observable<U>);\n\n    switchMapTo<+T, U>(innerObservable: rxjs$Observable<U>): rxjs$Observable<T> => rxjs$Observable<U>;\n\n    map<+T, U>(f: (value: T, index: number) => U, thisArg?: any): rxjs$Observable<T> => rxjs$Observable<U>;\n\n    mapTo<+T, U>(value: U): rxjs$Observable<T> => rxjs$Observable<U>;\n\n    merge<+T>(other: rxjs$Observable<T>): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    mergeAll<+T, U>(): rxjs$Observable<T> => rxjs$Observable<U>;\n\n    mergeMap: (<+T, U>(\n      project: (value: T, index: number) => rxjs$ObservableInput<U>,\n      concurrency?: number\n    ) => rxjs$Observable<T> => rxjs$Observable<U>) &\n      (<+T, U, V>(\n      project: (value: T, index: number) => rxjs$ObservableInput<U>,\n      resultSelector: (\n        outerValue: T,\n        innerValue: U,\n        outerIndex: number,\n        innerIndex: number\n      ) => V,\n      concurrency?: number\n    ) => rxjs$Observable<T> => rxjs$Observable<V>);\n\n    mergeMapTo<+T, U>(innerObservable: rxjs$Observable<U>): rxjs$Observable<T> => rxjs$Observable<U>;\n\n    mergeMapTo<+T, U, V>(\n      innerObservable: rxjs$Observable<U>,\n      resultSelector: (\n        outerValue: T,\n        innerValue: U,\n        outerIndex: number,\n        innerIndex: number\n      ) => V,\n      concurrent?: number\n    ): rxjs$Observable<T> => rxjs$Observable<V>;\n\n    multicast<+T>(\n      subjectOrSubjectFactory: rxjs$Subject<T> | (() => rxjs$Subject<T>)\n    ): rxjs$Observable<T> => rxjs$ConnectableObservable<T>;\n\n    pairwise<+T>(): rxjs$Observable<T> => rxjs$Observable<[T, T]>;\n\n    partition<+T>(\n      predicate: (value: T, index: number) => boolean,\n      thisArg: any\n    ): rxjs$Observable<T> => [rxjs$Observable<T>, rxjs$Observable<T>];\n\n    publish<+T>(): rxjs$Observable<T> => rxjs$ConnectableObservable<T>;\n\n    publishLast<+T>(): rxjs$Observable<T> => rxjs$ConnectableObservable<T>;\n\n    reduce<+T, U>(\n      accumulator: (\n        acc: U,\n        currentValue: T,\n        index: number,\n        source: rxjs$Observable<T>\n      ) => U,\n      seed: U\n    ): rxjs$Observable<T> => rxjs$Observable<U>;\n\n    sample<+T>(notifier: rxjs$Observable<any>): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    sampleTime<+T>(\n      delay: number,\n      scheduler?: rxjs$SchedulerClass\n    ): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    publishReplay<+T>(\n      bufferSize?: number,\n      windowTime?: number,\n      scheduler?: rxjs$SchedulerClass\n    ): rxjs$Observable<T> => rxjs$ConnectableObservable<T>;\n\n    retry<+T>(retryCount: ?number): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    retryWhen<+T>(\n      notifier: (errors: rxjs$Observable<Error>) => rxjs$Observable<any>\n    ): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    scan<+T, U>(f: (acc: U, value: T) => U, initialValue: U): rxjs$Observable<T> => rxjs$Observable<U>;\n\n    share<+T>(): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    skip<+T>(count: number): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    skipUntil<+T>(other: rxjs$Observable<any> | Promise<any>): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    skipWhile<+T>(\n      predicate: (value: T, index: number) => boolean\n    ): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    startWith<+T>(...values: Array<T>): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    subscribeOn<+T>(scheduler: rxjs$SchedulerClass): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    take<+T>(count: number): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    takeUntil<+T>(other: rxjs$Observable<any>): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    takeWhile<+T>(\n      predicate: (value: T, index: number) => boolean\n    ): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    tap: (<+T>(\n      onNext?: (value: T) => mixed,\n      onError?: (error: any) => mixed,\n      onCompleted?: () => mixed\n    ) => rxjs$Observable<T> => rxjs$Observable<T>) &\n      (<+T>(observer: {\n      next?: (value: T) => mixed,\n      error?: (error: any) => mixed,\n      complete?: () => mixed\n    }) => rxjs$Observable<T> => rxjs$Observable<T>);\n\n    throttleTime<+T>(duration: number): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    timeout<+T>(due: number | Date, _: void): rxjs$Observable<T> => rxjs$Observable<T>;\n\n    timeoutWith<+T, U>(\n      due: number | Date,\n      withObservable: rxjs$Observable<U>,\n      scheduler?: rxjs$SchedulerClass\n    ): rxjs$Observable<T> => rxjs$Observable<T | U>;\n\n    toArray<+T>(): rxjs$Observable<T> => rxjs$Observable<T[]>;\n\n    window<+T>(\n      windowBoundaries: rxjs$Observable<any>\n    ): rxjs$Observable<T> => rxjs$Observable<rxjs$Observable<T>>;\n    windowCount<+T>(\n      windowSize: number,\n      startWindowEvery?: number\n    ): rxjs$Observable<T> => rxjs$Observable<rxjs$Observable<T>>;\n    windowToggle<+T, A>(\n      openings: rxjs$Observable<A>,\n      closingSelector: (value: A) => rxjs$Observable<any>\n    ): rxjs$Observable<T> => rxjs$Observable<rxjs$Observable<T>>;\n    windowWhen<+T>(\n      closingSelector: () => rxjs$Observable<any>\n    ): rxjs$Observable<T> => rxjs$Observable<rxjs$Observable<T>>;\n\n    withLatestFrom: rxjs$Operators$withLatestFrom;\n\n    // deprecated in favor of static zip\n    // see: https://rxjs-dev.firebaseapp.com/api/operators/zip\n    zip: rxjs$Operators$zip;\n\n    // deprecated in favor of static combineLatest\n    // see: https://rxjs-dev.firebaseapp.com/api/operators/combineLatest\n    combineLatest: rxjs$Operators$combineLatest;\n\n    refCount<T>(): rxjs$ConnectableObservable<T> => rxjs$Observable<T>;\n  };\n}\n\ntype rxjs$Operators$withLatestFrom = {\n  <T, A, B, C, D, E, F, G, H>(\n    a: rxjs$Observable<A>,\n    b: rxjs$Observable<B>,\n    c: rxjs$Observable<C>,\n    d: rxjs$Observable<D>,\n    e: rxjs$Observable<E>,\n    f: rxjs$Observable<F>,\n    g: rxjs$Observable<G>,\n    resultSelector: (t: T, a: A, b: B, c: C, d: D, e: E, f: F, g: G) => H\n  ): rxjs$Observable<T> => rxjs$Observable<H>;\n\n  <T, A, B, C, D, E, F, G>(\n    a: rxjs$Observable<A>,\n    b: rxjs$Observable<B>,\n    c: rxjs$Observable<C>,\n    d: rxjs$Observable<D>,\n    e: rxjs$Observable<E>,\n    f: rxjs$Observable<F>,\n    resultSelector: (t: T, a: A, b: B, c: C, d: D, e: E, f: F) => G\n  ): rxjs$Observable<T> => rxjs$Observable<G>;\n\n  <T, A, B, C, D, E, F>(\n    a: rxjs$Observable<A>,\n    b: rxjs$Observable<B>,\n    c: rxjs$Observable<C>,\n    d: rxjs$Observable<D>,\n    e: rxjs$Observable<E>,\n    resultSelector: (t: T, a: A, b: B, c: C, d: D, e: E) => F\n  ): rxjs$Observable<T> => rxjs$Observable<F>;\n\n  <T, A, B, C, D, E>(\n    a: rxjs$Observable<A>,\n    b: rxjs$Observable<B>,\n    c: rxjs$Observable<C>,\n    d: rxjs$Observable<D>,\n    resultSelector: (t: T, a: A, b: B, c: C, d: D) => E\n  ): rxjs$Observable<T> => rxjs$Observable<E>;\n\n  <T, A, B, C, D>(\n    a: rxjs$Observable<A>,\n    b: rxjs$Observable<B>,\n    c: rxjs$Observable<C>,\n    resultSelector: (t: T, a: A, b: B, c: C) => D\n  ): rxjs$Observable<T> => rxjs$Observable<D>;\n\n  <T, A, B, C>(\n    a: rxjs$Observable<A>,\n    b: rxjs$Observable<B>,\n    resultSelector: (t: T, a: A, b: B) => C\n  ): rxjs$Observable<T> => rxjs$Observable<C>;\n\n  <T, A, B>(\n    a: rxjs$Observable<A>,\n    resultSelector: (t: T, a: A) => B\n  ): rxjs$Observable<T> => rxjs$Observable<B>;\n\n  <T, A>(\n    resultSelector: (t: T) => A\n  ): rxjs$Observable<T> => rxjs$Observable<A>;\n\n  <T, A, B, C, D, E, F, G>(\n    a: rxjs$Observable<A>,\n    b: rxjs$Observable<B>,\n    c: rxjs$Observable<C>,\n    d: rxjs$Observable<D>,\n    e: rxjs$Observable<E>,\n    f: rxjs$Observable<F>,\n    g: rxjs$Observable<G>,\n    _: void\n  ): rxjs$Observable<T> => rxjs$Observable<[T, A, B, C, D, E, E, F, G]>;\n\n  <T, A, B, C, D, E, F>(\n    a: rxjs$Observable<A>,\n    b: rxjs$Observable<B>,\n    c: rxjs$Observable<C>,\n    d: rxjs$Observable<D>,\n    e: rxjs$Observable<E>,\n    f: rxjs$Observable<F>,\n    _: void\n  ): rxjs$Observable<T> => rxjs$Observable<[T, A, B, C, D, E, F]>;\n\n  <T, A, B, C, D, E>(\n    a: rxjs$Observable<A>,\n    b: rxjs$Observable<B>,\n    c: rxjs$Observable<C>,\n    d: rxjs$Observable<D>,\n    e: rxjs$Observable<E>,\n    _: void\n  ): rxjs$Observable<T> => rxjs$Observable<[T, A, B, C, D, E]>;\n\n  <T, A, B, C, D>(\n    a: rxjs$Observable<A>,\n    b: rxjs$Observable<B>,\n    c: rxjs$Observable<C>,\n    d: rxjs$Observable<D>,\n    _: void\n  ): rxjs$Observable<T> => rxjs$Observable<[T, A, B, C, D]>;\n\n  <T, A, B, C>(\n    a: rxjs$Observable<A>,\n    b: rxjs$Observable<B>,\n    c: rxjs$Observable<C>,\n    _: void\n  ): rxjs$Observable<T> => rxjs$Observable<[T, A, B, C]>;\n\n  <T, A, B>(\n    a: rxjs$Observable<A>,\n    b: rxjs$Observable<B>,\n    _: void\n  ): rxjs$Observable<T> => rxjs$Observable<[T, A, B]>;\n\n  <T, A>(a: rxjs$Observable<A>, _: void): rxjs$Observable<T> => rxjs$Observable<[T, A]>;\n\n  <T, R>(\n    ...args: rxjs$Observable<any>[]\n  ): rxjs$Observable<T> => rxjs$Observable<any[]>;\n\n  <T, R>(\n    ...args: (rxjs$Observable<any> | (t: T, ...obs: any[]) => R)[]\n  ): rxjs$Observable<T> => rxjs$Observable<R>;\n}\n\ntype rxjs$Operators$zip = rxjs$Operators$withLatestFrom;\ntype rxjs$Operators$combineLatest = rxjs$Operators$withLatestFrom;\n\ndeclare class rxjs$GroupedObservable<K, V> extends rxjs$Observable<V> {\n  key: K;\n}\n\ndeclare class rxjs$Observer<-T> {\n  next(value: T): mixed;\n  error(error: any): mixed;\n  complete(): mixed;\n}\n\ndeclare interface rxjs$Operator<T, R> {\n  call(subscriber: rxjs$Subscriber<R>, source: any): rxjs$TeardownLogic;\n}\n\ndeclare class rxjs$Subject<T> mixins rxjs$Observable<T>, rxjs$Observer<T> {\n  static create<T>(\n    destination: rxjs$Observer<T>,\n    source: rxjs$Observable<T>\n  ): rxjs$AnonymousSubject<T>;\n\n  asObservable(): rxjs$Observable<T>;\n  observers: Array<rxjs$Observer<T>>;\n  unsubscribe(): void;\n\n  // For use in subclasses only:\n  _next(value: T): void;\n}\n\ndeclare class rxjs$AnonymousSubject<T> extends rxjs$Subject<T> {\n  source: ?rxjs$Observable<T>;\n  destination: ?rxjs$Observer<T>;\n\n  constructor(\n    destination?: rxjs$Observer<T>,\n    source?: rxjs$Observable<T>\n  ): void;\n}\n\ndeclare class rxjs$BehaviorSubject<T> extends rxjs$Subject<T> {\n  constructor(initialValue: T): void;\n\n  getValue(): T;\n}\n\ndeclare class rxjs$ReplaySubject<T> extends rxjs$Subject<T> {\n  constructor(\n    bufferSize?: number,\n    windowTime?: number,\n    scheduler?: rxjs$SchedulerClass\n  ): void;\n}\n\ndeclare class rxjs$Subscription {\n  unsubscribe(): void;\n  add(teardown: rxjs$TeardownLogic): rxjs$Subscription;\n}\n\ndeclare class rxjs$Subscriber<T> extends rxjs$Subscription {\n  static create<T>(\n    next?: (x?: T) => void,\n    error?: (e?: any) => void,\n    complete?: () => void\n  ): rxjs$Subscriber<T>;\n\n  constructor(\n    destinationOrNext?: rxjs$PartialObserver<any> | ((value: T) => void),\n    error?: (e?: any) => void,\n    complete?: () => void\n  ): void;\n  next(value?: T): void;\n  error(err?: any): void;\n  complete(): void;\n  unsubscribe(): void;\n}\n\ndeclare class rxjs$SchedulerClass {\n  schedule<T>(\n    work: (state?: T) => void,\n    delay?: number,\n    state?: T\n  ): rxjs$Subscription;\n}\n\ndeclare class rxjs$ArgumentOutOfRangeError extends Error {}\ndeclare class rxjs$EmptyError extends Error {}\ndeclare class rxjs$ObjectUnsubscribedError extends Error {}\ndeclare class rxjs$TimeoutError extends Error {}\ndeclare class rxjs$UnsubscriptionError extends Error {}\n\ndeclare module \"rxjs\" {\n  declare module.exports: {\n    concat<+T>(...sources: rxjs$Observable<T>[]): rxjs$Observable<T>,\n    from<+T>(\n      input: rxjs$ObservableInput<T>,\n      scheduler?: rxjs$SchedulerClass\n    ): rxjs$Observable<T>,\n    of<+T>(...values: T[]): rxjs$Observable<T>,\n    defer<+T>(factory: () => ?rxjs$ObservableInput<T>): rxjs$Observable<T>,\n    empty<+T>(): rxjs$Observable<T>,\n    never<+T>(): rxjs$Observable<T>,\n    bindNodeCallback<U>(\n      callbackFunc: (callback: (err: any, result: U) => any) => any,\n      selector?: void,\n      scheduler?: rxjs$SchedulerClass\n    ): () => rxjs$Observable<U>,\n    bindNodeCallback<T, U>(\n      callbackFunc: (v1: T, callback: (err: any, result: U) => any) => any,\n      selector?: void,\n      scheduler?: rxjs$SchedulerClass\n    ): (v1: T) => rxjs$Observable<U>,\n    bindNodeCallback<T, T2, U>(\n      callbackFunc: (\n        v1: T,\n        v2: T2,\n        callback: (err: any, result: U) => any\n      ) => any,\n      selector?: void,\n      scheduler?: rxjs$SchedulerClass\n    ): (v1: T, v2: T2) => rxjs$Observable<U>,\n    bindNodeCallback<T, T2, T3, U>(\n      callbackFunc: (\n        v1: T,\n        v2: T2,\n        v3: T3,\n        callback: (err: any, result: U) => any\n      ) => any,\n      selector?: void,\n      scheduler?: rxjs$SchedulerClass\n    ): (v1: T, v2: T2, v3: T3) => rxjs$Observable<U>,\n    bindNodeCallback<T, T2, T3, T4, U>(\n      callbackFunc: (\n        v1: T,\n        v2: T2,\n        v3: T3,\n        v4: T4,\n        callback: (err: any, result: U) => any\n      ) => any,\n      selector?: void,\n      scheduler?: rxjs$SchedulerClass\n    ): (v1: T, v2: T2, v3: T3, v4: T4) => rxjs$Observable<U>,\n    bindNodeCallback<T, T2, T3, T4, T5, U>(\n      callbackFunc: (\n        v1: T,\n        v2: T2,\n        v3: T3,\n        v4: T4,\n        v5: T5,\n        callback: (err: any, result: U) => any\n      ) => any,\n      selector?: void,\n      scheduler?: rxjs$SchedulerClass\n    ): (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => rxjs$Observable<U>,\n    bindNodeCallback<T, T2, T3, T4, T5, T6, U>(\n      callbackFunc: (\n        v1: T,\n        v2: T2,\n        v3: T3,\n        v4: T4,\n        v5: T5,\n        v6: T6,\n        callback: (err: any, result: U) => any\n      ) => any,\n      selector?: void,\n      scheduler?: rxjs$SchedulerClass\n    ): (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => rxjs$Observable<U>,\n    bindNodeCallback<T>(\n      callbackFunc: Function,\n      selector?: void,\n      scheduler?: rxjs$SchedulerClass\n    ): (...args: Array<any>) => rxjs$Observable<T>,\n    bindNodeCallback<T>(\n      callbackFunc: Function,\n      selector?: (...args: Array<any>) => T,\n      scheduler?: rxjs$SchedulerClass\n    ): (...args: Array<any>) => rxjs$Observable<T>,\n    timer(\n      initialDelay: number | Date,\n      period?: number,\n      scheduler?: rxjs$SchedulerClass\n    ): rxjs$Observable<number>,\n    interval(\n      period?: number,\n      scheduler?: rxjs$SchedulerClass\n    ): rxjs$Observable<number>,\n    range(\n      start?: number,\n      count?: number,\n      scheduler?: rxjs$SchedulerClass\n    ): rxjs$Observable<number>,\n    merge: (<+T, U>(\n      source0: rxjs$Observable<T>,\n      source1: rxjs$Observable<U>\n    ) => rxjs$Observable<T | U>) &\n      (<+T, U, V>(\n      source0: rxjs$Observable<T>,\n      source1: rxjs$Observable<U>,\n      source2: rxjs$Observable<V>\n    ) => rxjs$Observable<T | U | V>) &\n      (<+T>(...sources: rxjs$Observable<T>[]) => rxjs$Observable<T>),\n    fromEvent: (<+T>(\n      element: any,\n      eventName: string,\n      ...none: Array<void>\n    ) => rxjs$Observable<T>) & (<+T>(\n      element: any,\n      eventName: string,\n      options: rxjs$EventListenerOptions,\n      ...none: Array<void>\n    ) => rxjs$Observable<T>) & (<+T>(\n      element: any,\n      eventName: string,\n      selector: () => T,\n      ...none: Array<void>\n    ) => rxjs$Observable<T>) & (<+T>(\n      element: any,\n      eventName: string,\n      options: rxjs$EventListenerOptions,\n      selector: () => T\n    ) => rxjs$Observable<T>);\n    combineLatest: rxjs$Static$combineLatest,\n    Observable: typeof rxjs$Observable,\n    Observer: typeof rxjs$Observer,\n    ConnectableObservable: typeof rxjs$ConnectableObservable,\n    Subject: typeof rxjs$Subject,\n    Subscriber: typeof rxjs$Subscriber,\n    AnonymousSubject: typeof rxjs$AnonymousSubject,\n    BehaviorSubject: typeof rxjs$BehaviorSubject,\n    ReplaySubject: typeof rxjs$ReplaySubject,\n    Scheduler: {\n      asap: rxjs$SchedulerClass,\n      queue: rxjs$SchedulerClass,\n      animationFrame: rxjs$SchedulerClass,\n      async: rxjs$SchedulerClass\n    },\n    Subscription: typeof rxjs$Subscription,\n    ArgumentOutOfRangeError: typeof rxjs$ArgumentOutOfRangeError,\n    EmptyError: typeof rxjs$EmptyError,\n    ObjectUnsubscribedError: typeof rxjs$ObjectUnsubscribedError,\n    TimeoutError: typeof rxjs$TimeoutError,\n    UnsubscriptionError: typeof rxjs$UnsubscriptionError,\n    throwError(error: any): rxjs$Observable<any>,\n  };\n}\n\ndeclare module \"rxjs/Observable\" {\n  declare module.exports: {\n    Observable: typeof rxjs$Observable\n  };\n}\n\ndeclare module \"rxjs/Observer\" {\n  declare module.exports: {\n    Observer: typeof rxjs$Observer\n  };\n}\n\ndeclare module \"rxjs/BehaviorSubject\" {\n  declare module.exports: {\n    BehaviorSubject: typeof rxjs$BehaviorSubject\n  };\n}\n\ndeclare module \"rxjs/ReplaySubject\" {\n  declare module.exports: {\n    ReplaySubject: typeof rxjs$ReplaySubject\n  };\n}\n\ndeclare module \"rxjs/Subject\" {\n  declare module.exports: {\n    Subject: typeof rxjs$Subject,\n    AnonymousSubject: typeof rxjs$AnonymousSubject\n  };\n}\n\ndeclare module \"rxjs/Subscriber\" {\n  declare module.exports: {\n    Subscriber: typeof rxjs$Subscriber\n  };\n}\n\ndeclare module \"rxjs/Subscription\" {\n  declare module.exports: {\n    Subscription: typeof rxjs$Subscription\n  };\n}\n\ndeclare module \"rxjs/testing\" {\n  declare module.exports: {\n    TestScheduler: typeof rxjs$SchedulerClass\n  };\n}\n\ndeclare module \"rxjs/util/ArgumentOutOfRangeError\" {\n  declare module.exports: {\n    ArgumentOutOfRangeError: typeof rxjs$ArgumentOutOfRangeError,\n  };\n}\n\ndeclare module \"rxjs/util/EmptyError\" {\n  declare module.exports: {\n    EmptyError: typeof rxjs$EmptyError,\n  };\n}\n\ndeclare module \"rxjs/util/ObjectUnsubscribedError\" {\n  declare module.exports: {\n    ObjectUnsubscribedError: typeof rxjs$ObjectUnsubscribedError,\n  };\n}\n\ndeclare module \"rxjs/util/TimeoutError\" {\n  declare module.exports: {\n    TimeoutError: typeof rxjs$TimeoutError,\n  };\n}\n\ndeclare module \"rxjs/util/UnsubscriptionError\" {\n  declare module.exports: {\n    UnsubscriptionError: typeof rxjs$UnsubscriptionError,\n  };\n}"
  },
  {
    "path": "jest.config.js",
    "content": "module.exports = {\n  verbose: true,\n  bail: true,\n  moduleNameMapper: {},\n  setupFilesAfterEnv: ['<rootDir>/src/__tests__/setup.js'],\n  rootDir: __dirname,\n  modulePaths: ['<rootDir>/src'],\n  moduleDirectories: ['<rootDir>/node_modules'],\n  restoreMocks: true,\n  testMatch: ['**/__tests__/**/?(spec|test).js', '**/?(*.)(spec|test).js'],\n  moduleFileExtensions: ['js'],\n  modulePathIgnorePatterns: ['<rootDir>/dist', '<rootDir>/dev'],\n  // collectCoverage: true,\n  // collectCoverageFrom: ['!**/node_modules/**', 'src/**'],\n  // coverageDirectory: 'coverage',\n  // coverageReporters: ['html', 'json'],\n  cacheDirectory: '.cache/jest',\n}\n"
  },
  {
    "path": "metro.config.js",
    "content": "const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config')\nconst exclusionList = require('metro-config/src/defaults/exclusionList')\n// const fs = require('fs')\nconst path = require('path')\nconst glob = require('glob-to-regexp')\nconst metroCache = require('metro-cache')\n\n// const rnwPath = fs.realpathSync(\n//   path.resolve(require.resolve('react-native-windows/package.json'), '..'),\n// )\n\nconst getBlockList = () => {\n  const defaultPattern = exclusionList([\n    // ignore dist/, dev/\n    glob(`${path.resolve(__dirname, '..')}/dist/*`),\n    glob(`${path.resolve(__dirname, '..')}/dev/*`),\n    glob(`${path.resolve(__dirname, '..')}/example/*`),\n    // This stops \"react-native run-windows\" from causing the metro server to crash if its already running\n    // TODO: Shouldn't it be native/windowsTest?\n    new RegExp(`${path.resolve(__dirname, 'windows').replace(/[/\\\\]/g, '/')}.*`),\n    // This prevents \"react-native run-windows\" from hitting: EBUSY: resource busy or locked, open msbuild.ProjectImports.zip or other files produced by msbuild\n    // new RegExp(`${rnwPath}/build/.*`),\n    // new RegExp(`${rnwPath}/target/.*`),\n    // /.*\\.ProjectImports\\.zip/,\n  ])\n    .toString()\n    .slice(1, -1)\n\n  // delete __tests__ from the default blacklist\n  const newPattern = defaultPattern.replace(`|\\\\${path.sep}__tests__\\\\${path.sep}.*`, '')\n\n  return RegExp(newPattern)\n}\n\nconst config = {\n  projectRoot: path.resolve(__dirname),\n  watchFolders: [\n    path.resolve(__dirname, 'native'),\n    path.resolve(__dirname, 'node_modules', '@babel'),\n  ],\n  resolver: {\n    extraNodeModules: {\n      // We need `expect` package for RN integration tests… but the damn thing expects to be in jest\n      // (Node) environment… so we have to mock a bunch of stuff for this to work\n      fs: path.resolve(__dirname, 'src/__tests__/emptyMock'),\n      'graceful-fs': path.resolve(__dirname, 'src/__tests__/emptyMock'),\n      module: path.resolve(__dirname, 'src/__tests__/emptyMock'),\n      assert: path.resolve(__dirname, 'src/__tests__/emptyMock'),\n      stream: path.resolve(__dirname, 'src/__tests__/emptyMock'),\n      constants: path.resolve(__dirname, 'src/__tests__/emptyMock'),\n    },\n    blockList: getBlockList(),\n  },\n  transformer: {\n    babelTransformerPath: path.resolve(__dirname, 'native/metro-transformer.js'),\n  },\n  cacheStores: [\n    new metroCache.FileStore({\n      root: path.resolve(__dirname, '.cache/metro'),\n    }),\n  ],\n}\n\nmodule.exports = mergeConfig(getDefaultConfig(__dirname), config)\n"
  },
  {
    "path": "native/.clang-format",
    "content": "AccessModifierOffset: 0\nAlignEscapedNewlinesLeft: true\nAlignTrailingComments: false\nAllowAllParametersOfDeclarationOnNextLine: false\nAllowShortFunctionsOnASingleLine: false\nAllowShortIfStatementsOnASingleLine: true\nAllowShortLoopsOnASingleLine: false\nAlwaysBreakBeforeMultilineStrings: false\nAlwaysBreakTemplateDeclarations: false\nBinPackParameters: false\nBreakBeforeBinaryOperators: false\nBreakBeforeBraces: Attach\nBreakBeforeTernaryOperators: false\nBreakConstructorInitializersBeforeComma: false\nColumnLimit: 120\nCommentPragmas: ''\nConstructorInitializerAllOnOneLineOrOnePerLine: false\nConstructorInitializerIndentWidth: 0\nContinuationIndentWidth: 0\nCpp11BracedListStyle: false\nDerivePointerBinding: false\nIndentCaseLabels: false\nIndentFunctionDeclarationAfterType: false\nIndentWidth: 4\nLanguage: Cpp\nMaxEmptyLinesToKeep: 2\nNamespaceIndentation: None\nObjCSpaceAfterProperty: true\nObjCSpaceBeforeProtocolList: true\nPenaltyBreakBeforeFirstCallParameter: 100\nPenaltyBreakComment: 100\nPenaltyBreakFirstLessLess: 0\nPenaltyBreakString: 100\nPenaltyExcessCharacter: 1\nPenaltyReturnTypeOnItsOwnLine: 20\n# PointerBindsToType: 100\nSpaceBeforeAssignmentOperators: true\nSpaceBeforeParens: ControlStatements\nSpaceInEmptyParentheses: false\nSpacesBeforeTrailingComments: 1\nSpacesInAngles: false\nSpacesInCStyleCastParentheses: false\nSpacesInContainerLiterals: false\nSpacesInParentheses: false\nStandard: Cpp11\nTabWidth: 4\nUseTab: Never\n"
  },
  {
    "path": "native/.gitignore",
    "content": "# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n*.xccheckout\n*.moved-aside\nDerivedData\n*.hmap\n*.ipa\n*.dSYM.zip\n*.xcuserstate\nproject.xcworkspace\n**/.xcode.env.local\n\n# CocoaPods that are too big to reasonably commit\n**/Pods/boost-for-react-native\n**/Pods/boost\n**/Pods/RCT-Folly\n**/Pods/hermes-engine\n**/Pods/libevent\n**/Pods/Sentry\n**/Pods/hermes-engine-artifacts\n\n# Android/IntelliJ\n#\nbuild/\n.idea\n.gradle\n.settings\n.project\n.classpath\nlocal.properties\n*.iml\n\ntestPath*\n\n# BUCK\nbuck-out/\n\\.buckd/\n*.keystore\n\n# fastlane\n#\n# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the\n# screenshots whenever they are needed.\n# For more information about the recommended setup visit:\n# https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md\n\nfastlane/report.xml\nfastlane/Preview.html\nfastlane/screenshots\nfastlane/README.md\nfastlane/test_output\n\n!DemoKeystore.keystore\n"
  },
  {
    "path": "native/android/.gitignore",
    "content": "*.iml\n.gradle\n/local.properties\n/.idea/workspace.xml\n/.idea/libraries\n.DS_Store\n/build\n/captures\n.externalNativeBuild\n\ntestPath*\n"
  },
  {
    "path": "native/android/build.gradle",
    "content": "\nbuildscript {\n    ext.getExtOrDefault = {name ->\n        return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties['ReactNativeWatermelonDB_' + name]\n    }\n\n    ext.getExtOrIntegerDefault = {name ->\n        return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties['ReactNativeWatermelonDB_' + name]).toInteger()\n    }\n\n    repositories {\n        mavenCentral()\n    }\n\n    dependencies {\n        classpath(\"org.jetbrains.kotlin:kotlin-gradle-plugin:${getExtOrDefault('kotlinVersion')}\")\n    }\n}\n\napply plugin: 'com.android.library'\napply plugin: 'kotlin-android'\n\nandroid {\n    compileSdkVersion getExtOrIntegerDefault('compileSdkVersion')\n    buildToolsVersion getExtOrDefault('buildToolsVersion')\n\n    namespace \"com.nozbe.watermelondb\"\n\n    defaultConfig {\n        minSdkVersion getExtOrIntegerDefault('minSdkVersion')\n        targetSdkVersion getExtOrIntegerDefault('targetSdkVersion')\n        versionCode 1\n        versionName \"1.0\"\n    }\n}\n\ndependencies {\n    //noinspection GradleDynamicVersion\n    implementation 'com.facebook.react:react-native:+'\n    implementation \"org.jetbrains.kotlin:kotlin-stdlib-jdk7:${getExtOrDefault('kotlinVersion')}\"\n}\n\nrepositories {\n    mavenCentral()\n}\n\n"
  },
  {
    "path": "native/android/gradle.properties",
    "content": "ReactNativeWatermelonDB_kotlinVersion=1.3.50\nReactNativeWatermelonDB_compileSdkVersion=31\nReactNativeWatermelonDB_buildToolsVersion=28.0.3\nReactNativeWatermelonDB_targetSdkVersion=28\nReactNativeWatermelonDB_minSdkVersion=16\n"
  },
  {
    "path": "native/android/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest />\n"
  },
  {
    "path": "native/android/src/main/java/com/nozbe/watermelondb/Connection.java",
    "content": "package com.nozbe.watermelondb;\n\nimport java.util.ArrayList;\n\npublic abstract class Connection {\n    public static class Connected extends Connection {\n        public final WMDatabaseDriver driver;\n        public Connected(WMDatabaseDriver driver) {\n            this.driver = driver;\n        }\n    }\n\n    public static class Waiting extends Connection {\n        public final ArrayList<Runnable> queueInWaiting;\n        public Waiting(ArrayList<Runnable> queueInWaiting) {\n            this.queueInWaiting = queueInWaiting;\n        }\n    }\n\n    public ArrayList<Runnable> getQueue() {\n        if (this instanceof Connected) {\n            return new ArrayList<>();\n        } else if (this instanceof Waiting) {\n            return ((Waiting) this).queueInWaiting;\n        }\n        return null;\n    }\n}"
  },
  {
    "path": "native/android/src/main/java/com/nozbe/watermelondb/DatabaseUtils.java",
    "content": "package com.nozbe.watermelondb;\n\nimport android.database.Cursor;\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.WritableMap;\n\npublic class DatabaseUtils {\n    public static WritableMap cursorToMap(Cursor cursor) {\n        WritableMap map = Arguments.createMap();\n        for (int i = 0; i < cursor.getColumnCount(); i++) {\n            switch (cursor.getType(i)) {\n                case Cursor.FIELD_TYPE_NULL:\n                    map.putNull(cursor.getColumnName(i));\n                    break;\n                case Cursor.FIELD_TYPE_INTEGER:\n                case Cursor.FIELD_TYPE_FLOAT:\n                    map.putDouble(cursor.getColumnName(i), cursor.getDouble(i));\n                    break;\n                case Cursor.FIELD_TYPE_STRING:\n                    map.putString(cursor.getColumnName(i), cursor.getString(i));\n                    break;\n                case Cursor.FIELD_TYPE_BLOB:\n                default:\n                    map.putString(cursor.getColumnName(i), \"\");\n                    break;\n            }\n        }\n        return map;\n    }\n\n    public static <T> boolean arrayContains(final T[] array, final T value) {\n        if (value == null) {\n            for (final T e : array) {\n                if (e == null) {\n                    return true;\n                }\n            }\n        }\n        else {\n            for (final T e : array) {\n                if (e == value || value.equals(e)) {\n                    return true;\n                }\n            }\n        }\n\n        return false;\n    }\n}\n"
  },
  {
    "path": "native/android/src/main/java/com/nozbe/watermelondb/MigrationNeededError.java",
    "content": "package com.nozbe.watermelondb;\n\npublic class MigrationNeededError extends RuntimeException {\n    public int databaseVersion;\n\n    public MigrationNeededError(int databaseVersion) {\n        this.databaseVersion = databaseVersion;\n    }\n}\n"
  },
  {
    "path": "native/android/src/main/java/com/nozbe/watermelondb/Queries.java",
    "content": "package com.nozbe.watermelondb;\n\npublic class Queries {\n    public static final String select_local_storage = \"select value from local_storage where key = ?\";\n    public static final String select_tables = \"select * from sqlite_master where type='table'\";\n    public static String dropTable(String table) {\n        return \"drop table if exists `\" + table + \"`\";\n    }\n}\n"
  },
  {
    "path": "native/android/src/main/java/com/nozbe/watermelondb/SchemaNeededError.java",
    "content": "package com.nozbe.watermelondb;\n\npublic class SchemaNeededError extends RuntimeException {\n}\n"
  },
  {
    "path": "native/android/src/main/java/com/nozbe/watermelondb/WMDatabase.java",
    "content": "package com.nozbe.watermelondb;\n\nimport android.content.Context;\nimport android.database.Cursor;\nimport android.database.sqlite.SQLiteCursor;\nimport android.database.sqlite.SQLiteDatabase;\n\nimport java.io.File;\nimport java.util.ArrayList;\nimport java.util.Arrays;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class WMDatabase {\n    private final SQLiteDatabase db;\n\n    private WMDatabase(SQLiteDatabase db) {\n        this.db = db;\n    }\n\n    public static Map<String, WMDatabase> INSTANCES = new HashMap<>();\n\n    public static WMDatabase getInstance(String name, Context context) {\n        return getInstance(name, context, SQLiteDatabase.CREATE_IF_NECESSARY | SQLiteDatabase.ENABLE_WRITE_AHEAD_LOGGING);\n    }\n\n    public static WMDatabase getInstance(String name, Context context, int openFlags) {\n        synchronized (WMDatabase.class) {\n            WMDatabase instance = INSTANCES.getOrDefault(name, null);\n            if (instance == null || !instance.isOpen()) {\n                WMDatabase database = buildDatabase(name, context, openFlags);\n                INSTANCES.put(name, database);\n                return database;\n            } else {\n                return instance;\n            }\n        }\n    }\n\n    public static WMDatabase buildDatabase(String name, Context context, int openFlags) {\n        SQLiteDatabase sqLiteDatabase = WMDatabase.createSQLiteDatabase(name, context, openFlags);\n        return new WMDatabase(sqLiteDatabase);\n    }\n\n    private static SQLiteDatabase createSQLiteDatabase(String name, Context context, int openFlags) {\n        String path;\n        if (name.equals(\":memory:\") || name.contains(\"mode=memory\")) {\n            context.getCacheDir().delete();\n            path = new File(context.getCacheDir(), name).getPath();\n        } else {\n            // On some systems there is some kind of lock on `/databases` folder ¯\\_(ツ)_/¯\n            path = context.getDatabasePath(\"\" + name + \".db\").getPath().replace(\"/databases\", \"\");\n        }\n        return SQLiteDatabase.openDatabase(path, null, openFlags);\n    }\n\n    public void setUserVersion(int version) {\n        db.setVersion(version);\n    }\n\n    public int getUserVersion() {\n        return db.getVersion();\n    }\n\n    public void unsafeExecuteStatements(String statements) {\n        this.transaction(() -> {\n            // NOTE: This must NEVER be allowed to take user input - split by `;` is not grammar-aware\n            // and so is unsafe. Only works with Watermelon-generated strings known to be safe\n            for (String statement : statements.split(\";\")) {\n                if (!statement.trim().isEmpty()) {\n                    this.execute(statement);\n                }\n            }\n        });\n    }\n\n    public void execute(String query, Object[] args) {\n        db.execSQL(query, args);\n    }\n\n    public void execute(String query) {\n        db.execSQL(query);\n    }\n\n    public void delete(String query, Object[] args) {\n        db.execSQL(query, args);\n    }\n\n    public Cursor rawQuery(String sql, Object[] args) {\n        // HACK: db.rawQuery only supports String args, and there's no clean way AFAIK to construct\n        // a query with arbitrary args (like with execSQL). However, we can misuse cursor factory\n        // to get the reference of a SQLiteQuery before it's executed\n        // https://github.com/aosp-mirror/platform_frameworks_base/blob/0799624dc7eb4b4641b4659af5b5ec4b9f80dd81/core/java/android/database/sqlite/SQLiteDirectCursorDriver.java#L30\n        // https://github.com/aosp-mirror/platform_frameworks_base/blob/0799624dc7eb4b4641b4659af5b5ec4b9f80dd81/core/java/android/database/sqlite/SQLiteProgram.java#L32\n        String[] rawArgs = new String[args.length];\n        Arrays.fill(rawArgs, \"\");\n        return db.rawQueryWithFactory(\n                (db1, driver, editTable, query) -> {\n                    for (int i = 0; i < args.length; i++) {\n                        Object arg = args[i];\n                        if (arg instanceof String) {\n                            query.bindString(i + 1, (String) arg);\n                        } else if (arg instanceof Boolean) {\n                            query.bindLong(i + 1, (Boolean) arg ? 1 : 0);\n                        } else if (arg instanceof Double) {\n                            query.bindDouble(i + 1, (Double) arg);\n                        } else if (arg == null) {\n                            query.bindNull(i + 1);\n                        } else {\n                            throw new IllegalArgumentException(\"Bad query arg type: \" + arg.getClass().getCanonicalName());\n                        }\n                    }\n                    return new SQLiteCursor(driver, editTable, query);\n                }, sql, rawArgs, null, null\n        );\n    }\n\n    public Cursor rawQuery(String sql) {\n        return rawQuery(sql, new Object[] {});\n    }\n\n    public int count(String query, Object[] args) {\n        try (Cursor cursor = rawQuery(query, args)) {\n            cursor.moveToFirst();\n            int columnIndex = cursor.getColumnIndex(\"count\");\n            if (cursor.getCount() > 0) {\n                return cursor.getInt(columnIndex);\n            } else {\n                return 0;\n            }\n        }\n    }\n\n    public int count(String query) {\n        return this.count(query, new Object[]{});\n    }\n\n    public String getFromLocalStorage(String key) {\n        try (Cursor cursor = rawQuery(Queries.select_local_storage, new Object[]{key})) {\n            cursor.moveToFirst();\n            if (cursor.getCount() > 0) {\n                return cursor.getString(0);\n            } else {\n                return null;\n            }\n        }\n    }\n\n    private ArrayList<String> getAllTables() {\n        ArrayList<String> allTables = new ArrayList<>();\n        try (Cursor cursor = rawQuery(Queries.select_tables)) {\n            cursor.moveToFirst();\n            int nameIndex = cursor.getColumnIndex(\"name\");\n            if (nameIndex > -1) {\n                do {\n                    allTables.add(cursor.getString(nameIndex));\n                } while (cursor.moveToNext());\n            }\n        }\n        return allTables;\n    }\n\n    public void unsafeDestroyEverything() {\n        this.transaction(() -> {\n            for (String tableName : getAllTables()) {\n                execute(Queries.dropTable(tableName));\n            }\n            execute(\"pragma writable_schema=1\");\n            execute(\"delete from sqlite_master where type in ('table', 'index', 'trigger')\");\n            execute(\"pragma user_version=0\");\n            execute(\"pragma writable_schema=0\");\n        });\n    }\n\n    interface TransactionFunction {\n        void applyTransactionFunction();\n    }\n\n    public void transaction(TransactionFunction function) {\n        db.beginTransaction();\n        try {\n            function.applyTransactionFunction();\n            db.setTransactionSuccessful();\n        } finally {\n            db.endTransaction();\n        }\n    }\n\n    public Boolean isOpen() {\n        return db.isOpen();\n    }\n\n    public void close() {\n        db.close();\n    }\n}\n"
  },
  {
    "path": "native/android/src/main/java/com/nozbe/watermelondb/WMDatabaseBridge.java",
    "content": "package com.nozbe.watermelondb;\n\nimport android.content.Context;\nimport android.os.Trace;\nimport androidx.annotation.NonNull;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\nimport com.nozbe.watermelondb.utils.MigrationSet;\nimport com.nozbe.watermelondb.utils.Schema;\n\nimport java.lang.reflect.Method;\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.logging.Logger;\nimport java.security.SecureRandom;\n\npublic class WMDatabaseBridge extends ReactContextBaseJavaModule {\n    ReactApplicationContext reactContext;\n\n    public WMDatabaseBridge(ReactApplicationContext reactContext) {\n        super(reactContext);\n        this.reactContext = reactContext;\n    }\n\n\n    public static final String NAME = \"WMDatabaseBridge\";\n\n    @NonNull\n    @Override\n    public String getName() {\n        return NAME;\n    }\n\n    private final Map<Integer, Connection> connections = new HashMap<>();\n\n    @ReactMethod\n    public void initialize(final Integer tag, final String databaseName, final int schemaVersion, final boolean unsafeNativeReuse, final Promise promise) {\n        if (connections.containsKey(tag)) {\n            throw new IllegalStateException(\"A driver with tag \" + tag + \" already set up\");\n        }\n        final WritableMap promiseMap = Arguments.createMap();\n        try {\n            connections.put(tag, new Connection.Connected(new WMDatabaseDriver((Context) reactContext, databaseName, schemaVersion, unsafeNativeReuse)));\n            promiseMap.putString(\"code\", \"ok\");\n            promise.resolve(promiseMap);\n        } catch (SchemaNeededError e) {\n            connections.put(tag, new Connection.Waiting(new ArrayList<>()));\n            promiseMap.putString(\"code\", \"schema_needed\");\n            promise.resolve(promiseMap);\n        } catch (MigrationNeededError e) {\n            connections.put(tag, new Connection.Waiting(new ArrayList<>()));\n            promiseMap.putString(\"code\", \"migrations_needed\");\n            promiseMap.putInt(\"databaseVersion\", e.databaseVersion);\n            promise.resolve(promiseMap);\n        } catch (Exception e) {\n            promise.reject(e);\n        }\n    }\n\n    @ReactMethod\n    public void setUpWithSchema(final Integer tag, final String databaseName, final String schema, final int schemaVersion, final boolean unsafeNativeReuse, final Promise promise) {\n        connectDriver(tag, new WMDatabaseDriver(reactContext, databaseName, new Schema(schemaVersion, schema), unsafeNativeReuse), promise);\n    }\n\n    @ReactMethod\n    public void setUpWithMigrations(final Integer tag, final String databaseName, final String migrations, final int fromVersion, final int toVersion, final boolean unsafeNativeReuse, final Promise promise) {\n        try {\n            connectDriver(tag, new WMDatabaseDriver(reactContext, databaseName, new MigrationSet(fromVersion, toVersion, migrations), unsafeNativeReuse), promise);\n        } catch (Exception e) {\n            disconnectDriver(tag);\n            promise.reject(e);\n        }\n    }\n\n    @ReactMethod\n    private void find(int tag, String table, String id, Promise promise) {\n        withDriver(tag, promise, (driver) -> driver.find(table, id), \"find \" + id);\n    }\n\n    @ReactMethod\n    public void query(int tag, String table, String query, ReadableArray args, Promise promise) {\n        withDriver(tag, promise, (driver) -> driver.cachedQuery(table, query, args.toArrayList().toArray()), \"query\");\n    }\n\n    @ReactMethod\n    public void queryIds(int tag, String query, ReadableArray args, Promise promise) {\n        withDriver(tag, promise, (driver) -> driver.queryIds(query, args.toArrayList().toArray()), \"queryIds\");\n    }\n\n    @ReactMethod\n    public void unsafeQueryRaw(int tag, String query, ReadableArray args, Promise promise) {\n        withDriver(tag, promise, (driver) -> driver.unsafeQueryRaw(query, args.toArrayList().toArray()), \"unsafeQueryRaw\");\n    }\n\n    @ReactMethod\n    public void count(int tag, String query, ReadableArray args, Promise promise) {\n        withDriver(tag, promise, (driver) -> driver.count(query, args.toArrayList().toArray()), \"count\");\n    }\n\n    @ReactMethod\n    public void batch(int tag, ReadableArray operations, Promise promise) {\n        withDriver(tag, promise, (driver) -> {\n            driver.batch(operations);\n            return true;\n        }, \"batch\");\n    }\n\n    @ReactMethod\n    public void unsafeResetDatabase(int tag, String schema, int schemaVersion, Promise promise) {\n        withDriver(tag, promise, (driver) -> {\n            driver.unsafeResetDatabase(new Schema(schemaVersion, schema));\n            return null;\n        }, \"unsafeResetDatabase\");\n    }\n\n    @ReactMethod\n    public void getLocal(int tag, String key, Promise promise) {\n        withDriver(tag, promise, (driver) -> driver.getLocal(key), \"getLocal\");\n    }\n\n    @ReactMethod(isBlockingSynchronousMethod = true)\n    public WritableArray unsafeGetLocalSynchronously(int tag, String key) {\n        try {\n            Connection connection = connections.get(tag);\n            if (connection == null) {\n                throw new Exception(\"No driver with tag \" + tag + \" available\");\n            }\n            if (connection instanceof Connection.Connected) {\n                String value = ((Connection.Connected) connection).driver.getLocal(key);\n                WritableArray result = Arguments.createArray();\n                result.pushString(\"result\");\n                result.pushString(value);\n                return result;\n            } else if (connection instanceof Connection.Waiting) {\n                throw new Exception(\"Waiting connection unexpected for unsafeGetLocalSynchronously\");\n            }\n        } catch (Exception e) {\n            WritableArray result = Arguments.createArray();\n            result.pushString(\"error\");\n            result.pushString(e.getMessage());\n            return result;\n        }\n        return null;\n    }\n\n    private List<Runnable> getQueue(int connectionTag) {\n        List<Runnable> queue;\n        if (connections.containsKey(connectionTag)) {\n            Connection connection = connections.get(connectionTag);\n            if (connection != null) {\n                queue = connection.getQueue();\n            } else {\n                queue = new ArrayList<>();\n            }\n        } else {\n            queue = new ArrayList<>();\n        }\n        return queue;\n    }\n\n    interface ParamFunction {\n        Object applyParamFunction(WMDatabaseDriver arg);\n    }\n\n    private void withDriver(final int tag, final Promise promise, final ParamFunction function, String functionName) {\n        try {\n            Trace.beginSection(\"WMDatabaseBridge.\" + functionName);\n            Connection connection = connections.get(tag);\n            if (connection == null) {\n                promise.reject(new Exception(\"No driver with tag \" + tag + \" available\"));\n            } else if (connection instanceof Connection.Connected) {\n                Object result = function.applyParamFunction(((Connection.Connected) connection).driver);\n                promise.resolve(result == Void.TYPE ? true : result);\n            } else if (connection instanceof Connection.Waiting) {\n                // try again when driver is ready\n                connection.getQueue().add(() -> withDriver(tag, promise, function, functionName));\n                connections.put(tag, new Connection.Waiting(connection.getQueue()));\n            }\n        } catch (Exception e) {\n            promise.reject(functionName, e);\n        } finally {\n            Trace.endSection();\n        }\n    }\n\n\n    private void connectDriver(int connectionTag, WMDatabaseDriver driver, Promise promise) {\n        List<Runnable> queue = getQueue(connectionTag);\n        connections.put(connectionTag, new Connection.Connected(driver));\n\n        for (Runnable operation : queue) {\n            operation.run();\n        }\n        promise.resolve(true);\n    }\n\n    private void disconnectDriver(int connectionTag) {\n        List<Runnable> queue = getQueue(connectionTag);\n\n        connections.remove(connectionTag);\n\n        for (Runnable operation : queue) {\n            operation.run();\n        }\n    }\n\n    @ReactMethod\n    public void provideSyncJson(int id, String json, Promise promise) {\n        // Note: WatermelonJSI is optional on Android, but we don't want users to have to set up\n        // yet another NativeModule, so we're using Reflection to access it from here\n        try {\n            Class<?> clazz = Class.forName(\"com.nozbe.watermelondb.jsi.WatermelonJSI\");\n            Method method = clazz.getDeclaredMethod(\"provideSyncJson\", int.class, byte[].class);\n            method.invoke(null, id, json.getBytes());\n            promise.resolve(true);\n        } catch (Exception e) {\n            promise.reject(e);\n        }\n    }\n\n    @ReactMethod(isBlockingSynchronousMethod = true)\n    public WritableArray getRandomBytes(int count) {\n        if (count != 256) {\n            throw new IllegalStateException(\"Expected getRandomBytes to be called with 256\");\n        }\n\n        byte[] randomBytes = new byte[256];\n        SecureRandom random = new SecureRandom();\n        random.nextBytes(randomBytes);\n\n        WritableArray result = Arguments.createArray();\n        for (byte value : randomBytes) {\n            result.pushInt(Byte.toUnsignedInt(value));\n        }\n        return result;\n    }\n\n    @Override\n    public void invalidate() {\n        // NOTE: See Database::install() for explanation\n        super.invalidate();\n        reactContext.runOnJSQueueThread(() -> {\n            try {\n                Class<?> clazz = Class.forName(\"com.nozbe.watermelondb.jsi.WatermelonJSI\");\n                Method method = clazz.getDeclaredMethod(\"onCatalystInstanceDestroy\");\n                method.invoke(null);\n            } catch (Exception e) {\n                if (BuildConfig.DEBUG) {\n                    Logger logger = Logger.getLogger(\"DB_Bridge\");\n                    logger.info(\"Could not find JSI onCatalystInstanceDestroy\");\n                }\n            }\n        });\n    }\n\n    @Deprecated\n    @Override\n    public void onCatalystInstanceDestroy() {\n        // NOTE: See Database::install() for explanation\n        super.onCatalystInstanceDestroy();\n        reactContext.getCatalystInstance().getReactQueueConfiguration().getJSQueueThread().runOnQueue(() -> {\n            try {\n                Class<?> clazz = Class.forName(\"com.nozbe.watermelondb.jsi.WatermelonJSI\");\n                Method method = clazz.getDeclaredMethod(\"onCatalystInstanceDestroy\");\n                method.invoke(null);\n            } catch (Exception e) {\n                if (BuildConfig.DEBUG) {\n                    Logger logger = Logger.getLogger(\"DB_Bridge\");\n                    logger.info(\"Could not find JSI onCatalystInstanceDestroy\");\n                }\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "native/android/src/main/java/com/nozbe/watermelondb/WMDatabaseDriver.java",
    "content": "package com.nozbe.watermelondb;\n\nimport android.content.Context;\nimport android.database.Cursor;\nimport android.database.sqlite.SQLiteDatabase;\n\nimport android.os.Trace;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.WritableArray;\nimport com.nozbe.watermelondb.utils.MigrationSet;\nimport com.nozbe.watermelondb.utils.Pair;\nimport com.nozbe.watermelondb.utils.Schema;\n\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.logging.Logger;\n\npublic class WMDatabaseDriver {\n    private final WMDatabase database;\n\n    private final Logger log;\n    private final Map<String, List<String>> cachedRecords;\n\n    public WMDatabaseDriver(Context context, String dbName) {\n        this(context, dbName, false);\n    }\n\n    public WMDatabaseDriver(Context context, String dbName, int schemaVersion, boolean unsafeNativeReuse) {\n        this(context, dbName, unsafeNativeReuse);\n        SchemaCompatibility compatibility = isCompatible(schemaVersion);\n        if (compatibility instanceof SchemaCompatibility.NeedsSetup) {\n            throw new SchemaNeededError();\n        } else if (compatibility instanceof SchemaCompatibility.NeedsMigration) {\n            throw new MigrationNeededError(\n                    ((SchemaCompatibility.NeedsMigration) compatibility).fromVersion\n            );\n\n        }\n\n    }\n\n    public WMDatabaseDriver(Context context, String dbName, Schema schema, boolean unsafeNativeReuse) {\n        this(context, dbName, unsafeNativeReuse);\n        unsafeResetDatabase(schema);\n    }\n\n    public WMDatabaseDriver(Context context, String dbName, MigrationSet migrations, boolean unsafeNativeReuse) {\n        this(context, dbName, unsafeNativeReuse);\n        migrate(migrations);\n    }\n\n    public WMDatabaseDriver(Context context, String dbName, boolean unsafeNativeReuse) {\n        this.database = unsafeNativeReuse ? WMDatabase.getInstance(dbName, context,\n                SQLiteDatabase.CREATE_IF_NECESSARY |\n                        SQLiteDatabase.ENABLE_WRITE_AHEAD_LOGGING) :\n                WMDatabase.buildDatabase(dbName, context,\n                        SQLiteDatabase.CREATE_IF_NECESSARY |\n                                SQLiteDatabase.ENABLE_WRITE_AHEAD_LOGGING);\n        if (BuildConfig.DEBUG) {\n            this.log = Logger.getLogger(\"DB_Driver\");\n        } else {\n            this.log = null;\n        }\n        this.cachedRecords = new HashMap<>();\n    }\n\n    public Object find(String table, String id) {\n        if (isCached(table, id)) {\n            return id;\n        }\n        Object[] args = {id};\n        try (Cursor cursor =\n                     database.rawQuery(\"select * from `\" + table + \"` where id == ? limit 1\", args)) {\n            if (cursor.getCount() <= 0) {\n                return null;\n            }\n            markAsCached(table, id);\n            cursor.moveToFirst();\n            return DatabaseUtils.cursorToMap(cursor);\n        }\n    }\n\n    public WritableArray cachedQuery(String table, String query, Object[] args) {\n        WritableArray resultArray = Arguments.createArray();\n        try (Cursor cursor = database.rawQuery(query, args)) {\n            if (cursor.getCount() > 0 && DatabaseUtils.arrayContains(cursor.getColumnNames(), \"id\")) {\n                int idColumnIndex = cursor.getColumnIndex(\"id\");\n                while (cursor.moveToNext()) {\n                    String id = cursor.getString(idColumnIndex);\n                    if (isCached(table, id)) {\n                        resultArray.pushString(id);\n                    } else {\n                        markAsCached(table, id);\n                        resultArray.pushMap(DatabaseUtils.cursorToMap(cursor));\n                    }\n                }\n            }\n        }\n        return resultArray;\n    }\n\n    public WritableArray queryIds(String query, Object[] args) {\n        WritableArray resultArray = Arguments.createArray();\n        try (Cursor cursor = database.rawQuery(query, args)) {\n            if (cursor.getCount() > 0 && DatabaseUtils.arrayContains(cursor.getColumnNames(), \"id\")) {\n                while (cursor.moveToNext()) {\n                    int columnIndex = cursor.getColumnIndex(\"id\");\n                    resultArray.pushString(cursor.getString(columnIndex));\n                }\n            }\n        }\n        return resultArray;\n    }\n\n    public WritableArray unsafeQueryRaw(String query, Object[] args) {\n        WritableArray resultArray = Arguments.createArray();\n        try (Cursor cursor = database.rawQuery(query, args)) {\n            if (cursor.getCount() > 0) {\n                while (cursor.moveToNext()) {\n                    resultArray.pushMap(DatabaseUtils.cursorToMap(cursor));\n                }\n            }\n        }\n        return resultArray;\n    }\n\n    public int count(String query, Object[] args) {\n        return database.count(query, args);\n    }\n\n    public String getLocal(String key) {\n        return database.getFromLocalStorage(key);\n    }\n\n    public void batch(ReadableArray operations) {\n        List<Pair<String, String>> newIds = new ArrayList<>();\n        List<Pair<String, String>> removedIds = new ArrayList<>();\n\n        Trace.beginSection(\"Batch\");\n        try {\n            database.transaction(() -> {\n                for (int i = 0; i < operations.size(); i++) {\n                    ReadableArray operation = operations.getArray(i);\n                    int cacheBehavior = operation.getInt(0);\n                    String table = cacheBehavior != 0 ? operation.getString(1) : \"\";\n                    String sql = operation.getString(2);\n                    ReadableArray argBatches = operation.getArray(3);\n\n                    for (int j = 0; j < argBatches.size(); j++) {\n                        Object[] args = argBatches.getArray(j).toArrayList().toArray();\n                        database.execute(sql, args);\n                        if (cacheBehavior != 0) {\n                            String id = (String) args[0];\n                            if (cacheBehavior == 1) {\n                                newIds.add(Pair.create(table, id));\n                            } else if (cacheBehavior == -1) {\n                                removedIds.add(Pair.create(table, id));\n                            }\n                        }\n                    }\n                }\n            });\n        } finally {\n            Trace.endSection();\n        }\n\n        Trace.beginSection(\"updateCaches\");\n        for (Pair<String, String> it : newIds) {\n            markAsCached(it.first, it.second);\n        }\n        for (Pair<String, String> it : removedIds) {\n            removeFromCache(it.first, it.second);\n        }\n        Trace.endSection();\n    }\n\n\n    private void markAsCached(String table, String id) {\n        // log.info(\"Mark as cached \" + id);\n        List<String> cache = cachedRecords.get(table);\n        if (cache == null) {\n            cache = new ArrayList<>();\n        }\n        cache.add(id);\n        cachedRecords.put(table, cache);\n    }\n\n    private boolean isCached(String table, String id) {\n        List<String> cache = cachedRecords.get(table);\n        return cache != null && cache.contains(id);\n    }\n\n    private void removeFromCache(String table, String id) {\n        List<String> cache = cachedRecords.get(table);\n        if (cache != null) {\n            cache.remove(id);\n            cachedRecords.put(table, cache);\n        }\n    }\n\n    public void close() {\n        database.close();\n    }\n\n    private void migrate(MigrationSet migrations) {\n        int databaseVersion = database.getUserVersion();\n        if (databaseVersion != migrations.from) {\n            throw new IllegalArgumentException(\"Incompatible migration set applied. \" +\n                    \"DB: \" + databaseVersion + \", migration: \" + migrations.from);\n        }\n        database.transaction(() -> {\n            database.unsafeExecuteStatements(migrations.sql);\n            database.setUserVersion(migrations.to);\n        });\n    }\n\n    public void unsafeResetDatabase(Schema schema) {\n        if (log != null) {\n            log.info(\"Unsafe reset database\");\n        }\n        database.unsafeDestroyEverything();\n        cachedRecords.clear();\n        database.transaction(() -> {\n            database.unsafeExecuteStatements(schema.sql);\n            database.setUserVersion(schema.version);\n        });\n    }\n\n    private static class SchemaCompatibility {\n        static class Compatible extends SchemaCompatibility {\n        }\n\n        static class NeedsSetup extends SchemaCompatibility {\n        }\n\n        static class NeedsMigration extends SchemaCompatibility {\n            final int fromVersion;\n\n            NeedsMigration(int fromVersion) {\n                this.fromVersion = fromVersion;\n            }\n        }\n    }\n\n    private SchemaCompatibility isCompatible(int schemaVersion) {\n        int databaseVersion = database.getUserVersion();\n        if (databaseVersion == schemaVersion) {\n            return new SchemaCompatibility.Compatible();\n        } else if (databaseVersion == 0) {\n            return new SchemaCompatibility.NeedsSetup();\n        } else if (databaseVersion < schemaVersion) {\n            return new SchemaCompatibility.NeedsMigration(databaseVersion);\n        } else {\n            log.info(\"com.nozbe.watermelondb.Database has newer version (\" + databaseVersion + \") than what the \" +\n                    \"app supports (\" + schemaVersion + \"). Will reset database.\");\n            return new SchemaCompatibility.NeedsSetup();\n        }\n    }\n}\n"
  },
  {
    "path": "native/android/src/main/java/com/nozbe/watermelondb/WatermelonDBPackage.java",
    "content": "package com.nozbe.watermelondb;\n\nimport androidx.annotation.NonNull;\nimport com.facebook.react.ReactPackage;\nimport com.facebook.react.bridge.NativeModule;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.uimanager.ViewManager;\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.List;\n\npublic class WatermelonDBPackage implements ReactPackage {\n    @NonNull\n    @Override\n    public List<NativeModule> createNativeModules(@NonNull ReactApplicationContext reactAppContext) {\n        List<NativeModule> modules = new ArrayList<>();\n        modules.add(new WMDatabaseBridge(reactAppContext));\n        return modules;\n    }\n\n    @NonNull\n    @Override\n    public List<ViewManager> createViewManagers(@NonNull ReactApplicationContext reactAppContext) {\n        return Collections.emptyList();\n    }\n}\n"
  },
  {
    "path": "native/android/src/main/java/com/nozbe/watermelondb/utils/MigrationSet.java",
    "content": "package com.nozbe.watermelondb.utils;\n\npublic class MigrationSet {\n    public int from;\n    public int to;\n    public String sql;\n\n    public MigrationSet(int from, int to, String sql) {\n        this.from = from;\n        this.to = to;\n        this.sql = sql;\n    }\n}\n"
  },
  {
    "path": "native/android/src/main/java/com/nozbe/watermelondb/utils/Pair.java",
    "content": "package com.nozbe.watermelondb.utils;\n\npublic class Pair<K,V> {\n    public K first;\n    public V second;\n\n    private Pair(K key, V value) {\n        first = key;\n        second = value;\n    }\n\n    public static <K,V> Pair<K,V> create(K key, V value) {\n        return new Pair<>(key, value);\n    }\n}\n"
  },
  {
    "path": "native/android/src/main/java/com/nozbe/watermelondb/utils/Schema.java",
    "content": "package com.nozbe.watermelondb.utils;\n\npublic class Schema {\n    public int version;\n    public String sql;\n\n    public Schema(int version, String sql) {\n        this.version = version;\n        this.sql = sql;\n    }\n}\n"
  },
  {
    "path": "native/android-jsi/.gitignore",
    "content": "*.iml\n.gradle\n/local.properties\n/.idea/workspace.xml\n/.idea/libraries\n.DS_Store\n/build\n/captures\n.externalNativeBuild\n.cxx\n\ntestPath*\n"
  },
  {
    "path": "native/android-jsi/build.gradle",
    "content": "apply plugin: 'com.android.library'\n\n\ndef DEFAULT_COMPILE_SDK_VERSION = 28\ndef DEFAULT_BUILD_TOOLS_VERSION = \"28.0.3\"\ndef DEFAULT_MIN_SDK_VERSION = 16\ndef DEFAULT_TARGET_SDK_VERSION = 28\ndef DEFAULT_NDK_VERSION = \"20.1.5948944\"\n\nandroid {\n    compileSdkVersion rootProject.hasProperty('compileSdkVersion') ? rootProject.compileSdkVersion : DEFAULT_COMPILE_SDK_VERSION\n    buildToolsVersion rootProject.hasProperty('buildToolsVersion') ? rootProject.buildToolsVersion : DEFAULT_BUILD_TOOLS_VERSION\n    ndkVersion rootProject.hasProperty('ndkVersion') ? rootProject.ndkVersion : DEFAULT_NDK_VERSION\n\n    namespace \"com.nozbe.watermelondb.jsi\"\n\n    defaultConfig {\n        minSdkVersion rootProject.hasProperty('minSdkVersion') ? rootProject.minSdkVersion : DEFAULT_MIN_SDK_VERSION\n        targetSdkVersion rootProject.hasProperty('targetSdkVersion') ? rootProject.targetSdkVersion : DEFAULT_TARGET_SDK_VERSION\n        versionCode 1\n        versionName \"1.0\"\n        externalNativeBuild {\n            cmake {\n                // Not sure if this is necessary. I added this in attempt to fix catching\n                // C++ errors across .so bounds, but it still doesn't work, so can probably get rid\n                // of this\n                // NOTE: It appears that doing this causes some ABI compatibility issues (or something):\n                //   libc++_shared.so\n                //   libc++_shared.so (__gxx_personality_v0+416)\n                //   libreactnativejni.so\n                //   libreactnativejni.so (_Unwind_RaiseException+263)\n                //   libfbjni.so (__cxa_throw+108)\n                //   libc++_shared.so (std::__ndk1::locale::use_facet(std::__ndk1::locale::id&) const+212)\n                //   libwatermelondb-jsi.so (std::__ndk1::basic_ostream<char, std::__ndk1::char_traits<char>>::operator<<(long long)+124)\n                //   libwatermelondb-jsi.so (std::__ndk1::basic_string<char, watermelondb::to_json_string<simdjson::fallback::ondemand::value&>::char_traits<char>, watermelondb::to_json_string<simdjson::fallback::ondemand::value&>::allocator<char>> watermelondb::to_json_string<simdjson::fallback::ondemand::value&>(simdjson::fallback::ondemand::value&&&)+3486)\n                // arguments \"-DANDROID_STL=c++_shared\"\n            }\n        }\n    }\n    externalNativeBuild {\n        cmake {\n            // version '3.10.2'\n            path \"src/main/cpp/CMakeLists.txt\"\n        }\n    }\n\n    packagingOptions {\n        // TODO: This only seems necessary if c++_shared is enabled in cmake\n        // pickFirst '**/libc++_shared.so'\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: 'libs', include: ['*.jar'])\n    implementation 'com.facebook.react:react-native:+'\n}\n"
  },
  {
    "path": "native/android-jsi/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest />\n"
  },
  {
    "path": "native/android-jsi/src/main/cpp/CMakeLists.txt",
    "content": "PROJECT(watermelondb-jsi C CXX)\ncmake_minimum_required(VERSION 3.4.1)\n\n# inspired by https://github.com/ericlewis/react-native-hostobject-demo/blob/6f16c01db80f928ccd294c8cc5d4668b0f8c15ec/android/app/CMakeLists.txt\n# execute_process (COMMAND ln \"-s\" \"src\" \"../../../../../node_modules/react-native/third-party/double-conversion-1.1.6/double-conversion\")\n\n# NOTE: This may need to be bumped sometimes to force CMake caches to clear\nset(WMELON_JSI_BUMP 4)\n\n# -------------------------------------------------\n# Figure out where node_modules is\n# (surely there's a better way to do this)\n# This has to work with standard RN project, Nozbe's unusual folder structure and internal Watermelon tester\n\nget_filename_component(_nativeTesterPath \"../../../../../node_modules/@nozbe/sqlite/\" REALPATH)\nget_filename_component(_nozbePath \"../../../../../../../../../native/node_modules/react-native/ReactCommon/jsi/jsi/\" REALPATH)\n\nif(EXISTS \"${_nativeTesterPath}\")\n        # these paths work for WatermelonDB native tester\n        set(NODE_MODULES_PATH_WM ../../../../../node_modules/)\n        set(NODE_MODULES_PATH_RN ../../../../../node_modules/)\nelseif(EXISTS \"${_nozbePath}\")\n        # these paths work for Nozbe\n        set(NODE_MODULES_PATH_WM ../../../../../../../)\n        set(NODE_MODULES_PATH_RN ../../../../../../../../../native/node_modules/)\nelse()\n        # these paths should work for a standard RN project\n        set(NODE_MODULES_PATH_WM ../../../../../../../)\n        set(NODE_MODULES_PATH_RN ../../../../../../../)\nendif()\n\n# -------------------------------------------------\n# Header search paths\n# FIXME: <simdjson/simdjson.h> should work…\n\nset(SQLITE_VERSION sqlite-amalgamation-3460000)\n\ninclude_directories(\n        ../../../../shared\n        ${NODE_MODULES_PATH_WM}/@nozbe/sqlite/${SQLITE_VERSION}/\n        ${NODE_MODULES_PATH_WM}/@nozbe/simdjson/src/\n        ${NODE_MODULES_PATH_RN}/react-native/React\n        ${NODE_MODULES_PATH_RN}/react-native/React/Base\n        ${NODE_MODULES_PATH_RN}/react-native/ReactCommon\n        ${NODE_MODULES_PATH_RN}/react-native/ReactCommon/jsi\n        # these seem necessary only if we import <jsi/JSIDynamic.h>\n        #  ../../../../../node_modules/react-native/third-party/folly-2018.10.22.00\n        #  ../../../../../node_modules/react-native/third-party/double-conversion-1.1.6\n        #  ../../../../../node_modules/react-native/third-party/boost_1_63_0\n        #  ../../../../../node_modules/react-native/third-party/glog-0.3.5/src\n)\n\n# -------------------------------------------------\n# Build configuration\n\n#add_definitions(\n#        -DFOLLY_USE_LIBCPP=1\n#        -DFOLLY_NO_CONFIG=1\n#        -DFOLLY_HAVE_MEMRCHR=1\n#)\n\n# simdjson is slow without optimization\nset(CMAKE_CXX_FLAGS_DEBUG \"-Os\") # comment out for JSI debugging\nset(CMAKE_CXX_FLAGS_RELEASE \"-Os\")\n\n# TODO: Configure sqlite with compile-time options\n# https://www.sqlite.org/compile.html\n\n# -------------------------------------------------\n# Source files\n\nfile(GLOB ANDROID_JSI_SRC_FILES ./*.cpp)\nfile(GLOB SHARED_SRC_FILES ../../../../shared/*.cpp)\n\nadd_library(watermelondb-jsi SHARED\n        # vendor files\n        ${NODE_MODULES_PATH_WM}/@nozbe/sqlite/${SQLITE_VERSION}/sqlite3.c\n        ${NODE_MODULES_PATH_WM}/@nozbe/simdjson/src/simdjson.cpp\n        # our sources\n        ${ANDROID_JSI_SRC_FILES}\n        ${SHARED_SRC_FILES}\n        # this seems necessary to use almost any JSI API - otherwise we get linker errors\n        # seems wrong to compile a file that's already getting compiled as part of the app, but ¯\\_(ツ)_/¯\n        ${NODE_MODULES_PATH_RN}/react-native/ReactCommon/jsi/jsi/jsi.cpp)\n\n# Enable Android 16kb native library alignment\ntarget_link_options(watermelondb-jsi PRIVATE \"-Wl,-z,max-page-size=16384\")\n\ntarget_link_libraries(watermelondb-jsi\n                      # link with these libraries:\n                      android\n                      log)\n"
  },
  {
    "path": "native/android-jsi/src/main/cpp/DatabasePlatformAndroid.cpp",
    "content": "#include <android/log.h>\n#include <mutex>\n#include <unordered_map>\n#include <sqlite3.h>\n#include <cassert>\n\n#include \"DatabasePlatform.h\"\n#include \"DatabasePlatformAndroid.h\"\n\n#define LOG_TAG \"watermelondb.jsi\"\n#define SQLITE_LOG_TAG \"watermelondb.sqlite\"\n\nnamespace watermelondb {\nnamespace platform {\n\nvoid consoleLog(std::string message) {\n    __android_log_print(ANDROID_LOG_INFO, LOG_TAG, \"%s\\n\", message.c_str());\n}\n\nvoid consoleError(std::string message) {\n    __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, \"%s\\n\", message.c_str());\n}\n\njint verbose_level;\n\nbool isVerboseLogEnabled() {\n    // TODO: Available since API level 30\n    // return __android_log_is_loggable(verbose_level, SQLITE_LOG_TAG, ANDROID_LOG_INFO);\n    return false;\n}\n\n// Based on https://github.com/aosp-mirror/platform_frameworks_base/blob/6bebb8418ceecf44d2af40033870f3aabacfe36e/core/jni/android_database_SQLiteGlobal.cpp#L38\nstatic void sqliteLogCallback(void *data, int err, const char *message) {\n    bool isVerbose = !!data;\n    int errType = err & 255;\n    if (errType == 0 || errType == SQLITE_CONSTRAINT || errType == SQLITE_SCHEMA || errType == SQLITE_NOTICE ||\n        err == SQLITE_WARNING_AUTOINDEX) {\n        if (isVerbose) {\n            __android_log_print(ANDROID_LOG_VERBOSE, SQLITE_LOG_TAG, \"(%d) %s\\n\", err, message);\n        }\n    } else if (errType == SQLITE_WARNING) {\n        __android_log_print(ANDROID_LOG_WARN, SQLITE_LOG_TAG, \"(%d) %s\\n\", err, message);\n    } else {\n        __android_log_print(ANDROID_LOG_ERROR, SQLITE_LOG_TAG, \"(%d) %s\\n\", err, message);\n    }\n}\n\nstd::once_flag sqliteInitialization;\n\nvoid initializeSqlite() {\n    std::call_once(sqliteInitialization, []() {\n        // Redirect sqlite messages to Android log\n        if (sqlite3_config(SQLITE_CONFIG_LOG, &sqliteLogCallback, isVerboseLogEnabled()) != SQLITE_OK) {\n            consoleError(\"Failed to configure SQLite to redirect messages to Android log\");\n        }\n\n        // Enable file URI syntax https://www.sqlite.org/uri.html (e.g. ?mode=memory&cache=shared)\n        if (sqlite3_config(SQLITE_CONFIG_URI, 1) != SQLITE_OK) {\n            consoleError(\"Failed to configure SQLite to support file URI syntax - shared cache will not work\");\n        }\n\n        // sqlite should do its best to stay <8MB of heap allocations\n        // 8MB is what android uses by default:\n        // https://github.com/aosp-mirror/platform_frameworks_base/blob/6bebb8418ceecf44d2af40033870f3aabacfe36e/core/jni/android_database_SQLiteGlobal.cpp#L68\n        sqlite3_soft_heap_limit(8 * 1024 * 1024);\n\n        if (sqlite3_initialize() != SQLITE_OK) {\n            consoleError(\"Failed to initialize sqlite - this probably means sqlite was already initialized\");\n        }\n    });\n}\n\nstatic JavaVM *jvm;\n\nvoid configureJNI(JNIEnv *env) {\n    assert(env);\n    if (env->GetJavaVM(&jvm) != JNI_OK) {\n        consoleError(\"Could not initialize WatermelonDB JSI - cannot get JavaVM\");\n        std::abort();\n    }\n    assert(jvm);\n\n    // // find magic constant needed for verbose logs\n    // jclass logClass = env->FindClass(\"android/util/Log\");\n    // if (logClass == NULL) {\n    //     throw std::runtime_error(\"Unable to find android/util/Log\");\n    // }\n    // jfieldID logVerboseFieldId = env->GetStaticFieldID(logClass, \"VERBOSE\", \"I\");\n    // if (logVerboseFieldId == NULL) {\n    //     throw std::runtime_error(\"Unable to find android/util/Log's VERBOSE\");\n    // }\n    // verbose_level = env->GetStaticIntField(logClass, logVerboseFieldId);\n}\n\nstd::string resolveDatabasePath(std::string path) {\n    JNIEnv *env;\n    assert(jvm);\n    if (jvm->AttachCurrentThread(&env, NULL) != JNI_OK) {\n        throw std::runtime_error(\"Unable to resolve db path - JVM thread attach failed\");\n    }\n    assert(env);\n\n    jclass clazz = env->FindClass(\"com/nozbe/watermelondb/jsi/JSIInstaller\");\n    if (clazz == NULL) {\n        throw std::runtime_error(\"Unable to resolve db path - missing JSIInstaller class\");\n    }\n    jmethodID mid = env->GetStaticMethodID(clazz, \"_resolveDatabasePath\", \"(Ljava/lang/String;)Ljava/lang/String;\");\n    if (mid == NULL) {\n        throw std::runtime_error(\"Unable to resolve db path - missing Java _resolveDatabasePath method\");\n    }\n\n    jobject jniPath = env->NewStringUTF(path.c_str());\n    if (jniPath == NULL) {\n        throw std::runtime_error(\"Unable to resolve db path - could not construct a Java string\");\n    }\n    jstring jniResolvedPath = (jstring)env->CallStaticObjectMethod(clazz, mid, jniPath);\n    if (env->ExceptionCheck()) {\n        throw std::runtime_error(\"Unable to resolve db path - exception occured while resolving path\");\n    }\n    const char *cResolvedPath = env->GetStringUTFChars(jniResolvedPath, 0);\n    if (cResolvedPath == NULL) {\n        throw std::runtime_error(\"Unable to resolve db path - failed to get path string\");\n    }\n    std::string resolvedPath(cResolvedPath);\n    env->ReleaseStringUTFChars(jniResolvedPath, cResolvedPath);\n    return resolvedPath;\n}\n\nvoid deleteDatabaseFile(std::string path, bool warnIfDoesNotExist) {\n    // TODO: Unimplemented\n}\n\nvoid onMemoryAlert(std::function<void(void)> callback) {\n    // TODO: Unimplemented\n    // NOTE: https://developer.android.com/reference/android/app/Application#onTrimMemory(int)\n}\n\nstruct ProvidedSyncJson {\n    jbyteArray array;\n    jbyte *bytes;\n    jsize length;\n};\n\nstd::unordered_map<int, ProvidedSyncJson> providedSyncJsons;\nstd::mutex providedSyncJsonsMutex;\n\nvoid provideJson(int id, jbyteArray array) {\n    const std::lock_guard<std::mutex> lock(providedSyncJsonsMutex);\n\n    JNIEnv *env;\n    assert(jvm);\n    if (jvm->AttachCurrentThread(&env, NULL) != JNI_OK) {\n        return;\n    }\n    assert(env);\n\n    if (providedSyncJsons.find(id) != providedSyncJsons.end()) {\n        jclass exceptionClass = env->FindClass(\"java/lang/Exception\");\n        env->ThrowNew(exceptionClass, \"sync json is already provided\");\n        return;\n    }\n\n    jbyte* bytes = env->GetByteArrayElements(array, NULL);\n    jsize length = env->GetArrayLength(array);\n    jbyteArray arrayGlobalRef = static_cast<jbyteArray>(env->NewGlobalRef(array));\n\n    ProvidedSyncJson json = { arrayGlobalRef, bytes, length };\n    providedSyncJsons[id] = json;\n}\n\nstd::string_view getSyncJson(int id) {\n    const std::lock_guard<std::mutex> lock(providedSyncJsonsMutex);\n\n    auto jsonSearch = providedSyncJsons.find(id);\n    if (jsonSearch == providedSyncJsons.end()) {\n        throw std::runtime_error(\"Sync json \" + std::to_string(id) + \" does not exist\");\n    }\n\n    auto json = jsonSearch->second;\n    std::string_view view((char *) json.bytes, json.length);\n    return view;\n}\n\nvoid deleteSyncJson(int id) {\n    const std::lock_guard<std::mutex> lock(providedSyncJsonsMutex);\n\n    JNIEnv *env;\n    assert(jvm);\n    if (jvm->AttachCurrentThread(&env, NULL) != JNI_OK) {\n        throw std::runtime_error(\"JVM thread attach failed\");\n    }\n    assert(env);\n\n    auto jsonSearch = providedSyncJsons.find(id);\n    if (jsonSearch != providedSyncJsons.end()) {\n        auto json = jsonSearch->second;\n        env->ReleaseByteArrayElements(json.array, json.bytes, JNI_ABORT);\n        providedSyncJsons.erase(id);\n        env->DeleteGlobalRef(json.array);\n    }\n}\n\nstd::vector<std::function<void()>> destroyListeners;\n\nvoid destroy() {\n    for (auto listener : destroyListeners) {\n        listener();\n    }\n    destroyListeners.clear();\n}\n\nvoid onDestroy(std::function<void()> callback) {\n    destroyListeners.push_back(callback);\n}\n\n} // namespace platform\n} // namespace watermelondb\n"
  },
  {
    "path": "native/android-jsi/src/main/cpp/DatabasePlatformAndroid.h",
    "content": "#pragma once\n\n#include <jni.h>\n\nnamespace watermelondb {\nnamespace platform {\n\nvoid configureJNI(JNIEnv *env);\nvoid provideJson(int id, jbyteArray array);\nvoid destroy();\n\n} // namespace platform\n} // namespace watermelondb\n"
  },
  {
    "path": "native/android-jsi/src/main/cpp/JSIInstaller.cpp",
    "content": "\n#include <jni.h>\n#include <jsi/jsi.h>\n\n#include \"Database.h\"\n#include \"DatabasePlatformAndroid.h\"\n\nusing namespace facebook;\n\nextern \"C\" JNIEXPORT void JNICALL Java_com_nozbe_watermelondb_jsi_JSIInstaller_installBinding(JNIEnv *env, jobject thiz, jlong runtimePtr) {\n    jsi::Runtime *runtime = (jsi::Runtime *)runtimePtr;\n    assert(runtime != nullptr);\n    watermelondb::platform::configureJNI(env);\n    watermelondb::Database::install(runtime);\n}\n\nextern \"C\" JNIEXPORT void JNICALL Java_com_nozbe_watermelondb_jsi_JSIInstaller_provideSyncJson(JNIEnv *env, jclass clazz, jint id, jbyteArray array) {\n    watermelondb::platform::provideJson(id, array);\n}\n\nextern \"C\" JNIEXPORT void JNICALL Java_com_nozbe_watermelondb_jsi_JSIInstaller_destroy(JNIEnv *env, jclass clazz) {\n    watermelondb::platform::destroy();\n}\n"
  },
  {
    "path": "native/android-jsi/src/main/java/com/nozbe/watermelondb/WatermelonDBJSIModule.java",
    "content": "package com.nozbe.watermelondb.jsi;\n\nimport android.util.Log;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport com.facebook.react.bridge.JavaScriptContextHolder;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.module.annotations.ReactModule;\n\n@ReactModule(name = WatermelonDBJSIModule.NAME)\npublic class WatermelonDBJSIModule extends ReactContextBaseJavaModule {\n  ReactApplicationContext reactContext;\n  public static final String NAME = \"WMDatabaseJSIBridge\";\n\n   public WatermelonDBJSIModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        this.reactContext = reactContext;\n    }\n\n  @NonNull\n  @Override\n  public String getName() {\n    return NAME;\n  }\n\n  @ReactMethod(isBlockingSynchronousMethod = true)\n  public boolean install() {\n    try {\n      JavaScriptContextHolder jsContext = getReactApplicationContext().getJavaScriptContextHolder();\n      JSIInstaller.install(getReactApplicationContext(), jsContext.get());\n      Log.i(NAME, \"Successfully installed Watermelon DB JSI Bindings!\");\n      return true;\n    } catch (Exception exception) {\n      Log.e(NAME, \"Failed to install Watermelon DB JSI Bindings!\", exception);\n      return false;\n    }\n  }\n}"
  },
  {
    "path": "native/android-jsi/src/main/java/com/nozbe/watermelondb/jsi/JSIInstaller.java",
    "content": "package com.nozbe.watermelondb.jsi;\n\nimport android.content.Context;\nclass JSIInstaller {\n    static void install(Context context, long javaScriptContextHolder) {\n        JSIInstaller.context = context;\n        new JSIInstaller().installBinding(javaScriptContextHolder);\n\n        // call methods we're going to need from JNI - if we don't, Proguard/R8 will strip it from\n        // release binaries. We could use @Keep or configure Proguard to keep it but that would be\n        // error prone for lib users\n        _resolveDatabasePath(\"\");\n    }\n\n    // Helper method called from C++\n    static String _resolveDatabasePath(String dbName) {\n        // On some systems there is some kind of lock on `/databases` folder ¯\\_(ツ)_/¯\n        return context.getDatabasePath(dbName + \".db\").getPath().replace(\"/databases\", \"\");\n    }\n\n    private native void installBinding(long javaScriptContextHolder);\n\n    static native void provideSyncJson(int id, byte[] json);\n\n    static native void destroy();\n\n    private static Context context;\n\n    static {\n        System.loadLibrary(\"watermelondb-jsi\");\n    }\n}\n"
  },
  {
    "path": "native/android-jsi/src/main/java/com/nozbe/watermelondb/jsi/WatermelonDBJSIPackage.java",
    "content": "package com.nozbe.watermelondb.jsi;\n\nimport androidx.annotation.NonNull;\nimport com.facebook.react.ReactPackage;\nimport com.facebook.react.bridge.NativeModule;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.uimanager.ViewManager;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.List;\n\npublic class WatermelonDBJSIPackage implements ReactPackage {\n\n    @NonNull\n    @Override\n    public List<NativeModule> createNativeModules(@NonNull ReactApplicationContext reactAppContext) {\n        List<NativeModule> modules = new ArrayList<>();\n        modules.add(new WatermelonDBJSIModule(reactAppContext));\n        return modules;\n    }\n\n    @NonNull\n    @Override\n    public List<ViewManager> createViewManagers(@NonNull ReactApplicationContext reactAppContext) {\n        return Collections.emptyList();\n    }\n\n}"
  },
  {
    "path": "native/android-jsi/src/main/java/com/nozbe/watermelondb/jsi/WatermelonJSI.java",
    "content": "package com.nozbe.watermelondb.jsi;\n\nimport android.app.Application;\n\n// Public interface to JSI-based Watermelon\npublic class WatermelonJSI {\n    public static void onTrimMemory(int level) {\n      // TODO: Unimplemented\n    }\n\n    public static void provideSyncJson(int id, byte[] json) {\n        JSIInstaller.provideSyncJson(id, json);\n    }\n\n    public static void onCatalystInstanceDestroy() {\n        JSIInstaller.destroy();\n    }\n}\n"
  },
  {
    "path": "native/androidTest/.gitignore",
    "content": "*.iml\n/.gradle\n/local.properties\n/.idea\n.DS_Store\n/build\n/captures\n.externalNativeBuild\n\ntestPath*\n"
  },
  {
    "path": "native/androidTest/app/BUCK",
    "content": "# To learn about Buck see [Docs](https://buckbuild.com/).\n# To run your application with Buck:\n# - install Buck\n# - `npm start` - to start the packager\n# - `cd android`\n# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname \"CN=Android Debug,O=Android,C=US\"`\n# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck\n# - `buck install -r android/app` - compile, install and run application\n#\n\nlib_deps = []\n\nfor jarfile in glob(['libs/*.jar']):\n  name = 'jars__' + jarfile[jarfile.rindex('/') + 1: jarfile.rindex('.jar')]\n  lib_deps.append(':' + name)\n  prebuilt_jar(\n    name = name,\n    binary_jar = jarfile,\n  )\n\nfor aarfile in glob(['libs/*.aar']):\n  name = 'aars__' + aarfile[aarfile.rindex('/') + 1: aarfile.rindex('.aar')]\n  lib_deps.append(':' + name)\n  android_prebuilt_aar(\n    name = name,\n    aar = aarfile,\n  )\n\nandroid_library(\n    name = \"all-libs\",\n    exported_deps = lib_deps,\n)\n\nandroid_library(\n    name = \"app-code\",\n    srcs = glob([\n        \"src/main/java/**/*.java\",\n    ]),\n    deps = [\n        \":all-libs\",\n        \":build_config\",\n        \":res\",\n    ],\n)\n\nandroid_build_config(\n    name = \"build_config\",\n    package = \"com.nozbe.watermelondb\",\n)\n\nandroid_resource(\n    name = \"res\",\n    package = \"com.nozbe.watermelondb\",\n    res = \"src/main/res\",\n)\n\nandroid_binary(\n    name = \"app\",\n    keystore = \"//android/keystores:debug\",\n    manifest = \"src/main/AndroidManifest.xml\",\n    package_type = \"debug\",\n    deps = [\n        \":app-code\",\n    ],\n)\n"
  },
  {
    "path": "native/androidTest/app/build.gradle",
    "content": "apply plugin: \"com.android.application\"\napply plugin: \"com.facebook.react\"\napply plugin: 'kotlin-android'\n\nimport com.android.build.OutputFile\n\n/**\n * This is the configuration block to customize your React Native Android app.\n * By default you don't need to apply any configuration, just uncomment the lines you need.\n */\nreact {\n    /* Folders */\n    //   The root of your project, i.e. where \"package.json\" lives. Default is '..'\n    root = file(\"$rootDir/../../\")\n    //   The folder where the react-native NPM package is. Default is ../node_modules/react-native\n    // reactNativeDir = file(\"../node_modules/react-native\")\n    //   The folder where the react-native Codegen package is. Default is ../node_modules/react-native-codegen\n    // codegenDir = file(\"../node_modules/react-native-codegen\")\n    //   The cli.js file which is the React Native CLI entrypoint. Default is ../node_modules/react-native/cli.js\n    // cliFile = file(\"../node_modules/react-native/cli.js\")\n\n    /* Variants */\n    //   The list of variants to that are debuggable. For those we're going to\n    //   skip the bundling of the JS bundle and the assets. By default is just 'debug'.\n    //   If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants.\n    // FIXME: New React gradle plugin doesn't seem to have \"bundleInDebug\" option…\n    // debuggableVariants = []\n\n    /* Bundling */\n    //   A list containing the node command and its flags. Default is just 'node'.\n    // nodeExecutableAndArgs = [\"node\"]\n    //\n    //   The command to run when bundling. By default is 'bundle'\n    // bundleCommand = \"ram-bundle\"\n    //\n    //   The path to the CLI configuration file. Default is empty.\n    // bundleConfig = file(../rn-cli.config.js)\n    //\n    //   The name of the generated asset file containing your JS bundle\n    // bundleAssetName = \"MyApplication.android.bundle\"\n    //\n\n    //   The entry file for bundle generation. Default is 'index.android.js' or 'index.js'\n    entryFile = file(\"$rootDir/../../src/index.integrationTests.native.js\")\n    //\n    //   A list of extra flags to pass to the 'bundle' commands.\n    //   See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle\n    // extraPackagerArgs = []\n\n    /* Hermes Commands */\n    //   The hermes compiler command to run. By default it is 'hermesc'\n    // hermesCommand = \"$rootDir/../../node_modules/react-native/sdks/hermesc/%OS-BIN%/hermesc\"\n    //\n    //   The list of flags to pass to the Hermes compiler. By default is \"-O\", \"-output-source-map\"\n    // hermesFlags = [\"-O\", \"-output-source-map\"]\n}\n\n\n/**\n * Set this to true to create four separate APKs instead of one,\n * one for each native architecture. This is useful if you don't\n * use App Bundles (https://developer.android.com/guide/app-bundle/)\n * and want to have separate APKs to upload to the Play Store.\n */\ndef enableSeparateBuildPerCPUArchitecture = false\n\n/**\n * Run Proguard to shrink the Java bytecode in release builds.\n */\ndef enableProguardInReleaseBuilds = false\n\nandroid {\n    testBuildType \"debug\"\n\n    compileSdkVersion rootProject.compileSdkVersion\n    buildToolsVersion rootProject.buildToolsVersion\n\n    namespace \"com.nozbe.watermelonTest\"\n\n    defaultConfig {\n        applicationId \"com.nozbe.watermelondb\"\n        minSdkVersion rootProject.minSdkVersion\n        targetSdkVersion rootProject.targetSdkVersion\n        versionCode 1\n        versionName \"1.0\"\n        ndk {\n            abiFilters \"armeabi-v7a\", \"arm64-v8a\", \"x86\"\n        }\n        testInstrumentationRunner \"androidx.test.runner.AndroidJUnitRunner\"\n    }\n    signingConfigs {\n        release {\n            if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {\n                storeFile file(MYAPP_RELEASE_STORE_FILE)\n                storePassword MYAPP_RELEASE_STORE_PASSWORD\n                keyAlias MYAPP_RELEASE_KEY_ALIAS\n                keyPassword MYAPP_RELEASE_KEY_PASSWORD\n            }\n        }\n    }\n    splits {\n        abi {\n            reset()\n            enable enableSeparateBuildPerCPUArchitecture\n            universalApk false  // If true, also generate a universal APK\n            include \"armeabi-v7a\", \"arm64-v8a\", \"x86\"\n        }\n    }\n    buildTypes {\n        release {\n            debuggable true\n            minifyEnabled enableProguardInReleaseBuilds\n            proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n            signingConfig signingConfigs.release\n            applicationIdSuffix \".release\"\n            versionNameSuffix '-RELEASE'\n        }\n\n        debug {\n            debuggable true\n        }\n\n    }\n    // applicationVariants are e.g. debug, release\n    applicationVariants.all { variant ->\n        variant.outputs.each { output ->\n            // For each separate APK per architecture, set a unique version code as described here:\n            // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits\n            def versionCodes = [\"armeabi-v7a\": 1, \"x86\": 2, \"arm64-v8a\": 3, \"x86_64\": 4]\n            def abi = output.getFilter(OutputFile.ABI)\n            if (abi != null) {  // null for the universal-debug, universal-release variants\n                output.versionCodeOverride =\n                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode\n            }\n        }\n    }\n\n    packagingOptions {\n//        jniLibs {\n//            pickFirsts += ['**/libc++_shared.so', 'META-INF/**']\n//        }\n        pickFirst '**/libhermes.so'\n        pickFirst '**/libc++_shared.so'\n    }\n}\n\nconfigurations {\n    ktlint\n}\n\ndependencies {\n    // The version of react-native is set by the React Native Gradle Plugin\n    implementation(\"com.facebook.react:react-android\")\n\n    ktlint(\"com.pinterest:ktlint:0.48.2\") {\n        attributes {\n            attribute(Bundling.BUNDLING_ATTRIBUTE, getObjects().named(Bundling, Bundling.EXTERNAL))\n        }\n    }\n    // implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n    implementation project(':watermelondb')\n    implementation project(':watermelondb-jsi')\n    implementation 'androidx.appcompat:appcompat:1.6.0'\n\n    implementation(\"com.facebook.react:hermes-android\")\n\n    implementation \"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion\"\n    androidTestImplementation 'androidx.annotation:annotation:1.3.0'\n    androidTestImplementation 'androidx.test:runner:1.5.2'\n    androidTestImplementation 'androidx.test:rules:1.5.0'\n    androidTestImplementation 'androidx.test:core-ktx:1.5.0'\n}\n\n// apply from: file(\"../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesAppBuildGradle(project)\n\ntask ktlint(type: JavaExec, group: \"verification\") {\n    description = \"Check Kotlin code style.\"\n    classpath = configurations.ktlint\n    mainClass.set(\"com.pinterest.ktlint.Main\")\n    args \"src/**/*.kt\"\n    // see https://pinterest.github.io/ktlint/install/cli/#command-line-usage for more information\n}\ncheck.dependsOn ktlint\n\ntask ktlintFormat(type: JavaExec, group: \"formatting\") {\n    description = \"Fix Kotlin code style deviations.\"\n    classpath = configurations.ktlint\n    mainClass.set(\"com.pinterest.ktlint.Main\")\n    args \"-F\", \"src/**/*.kt\"\n    // see https://pinterest.github.io/ktlint/install/cli/#command-line-usage for more information\n}\n\n\nrepositories {\n    mavenCentral()\n}\n"
  },
  {
    "path": "native/androidTest/app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Disabling obfuscation is useful if you collect stack traces from production crashes\n# (unless you are using a system that supports de-obfuscate the stack traces).\n-dontobfuscate\n\n# React Native\n\n# Keep our interfaces so they can be used by other ProGuard rules.\n# See http://sourceforge.net/p/proguard/bugs/466/\n-keep,allowobfuscation @interface com.facebook.proguard.annotations.DoNotStrip\n-keep,allowobfuscation @interface com.facebook.proguard.annotations.KeepGettersAndSetters\n-keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip\n\n# Do not strip any method/class that is annotated with @DoNotStrip\n-keep @com.facebook.proguard.annotations.DoNotStrip class *\n-keep @com.facebook.common.internal.DoNotStrip class *\n-keepclassmembers class * {\n    @com.facebook.proguard.annotations.DoNotStrip *;\n    @com.facebook.common.internal.DoNotStrip *;\n}\n\n-keepclassmembers @com.facebook.proguard.annotations.KeepGettersAndSetters class * {\n  void set*(***);\n  *** get*();\n}\n\n-keep class * extends com.facebook.react.bridge.JavaScriptModule { *; }\n-keep class * extends com.facebook.react.bridge.NativeModule { *; }\n-keepclassmembers,includedescriptorclasses class * { native <methods>; }\n-keepclassmembers class *  { @com.facebook.react.uimanager.UIProp <fields>; }\n-keepclassmembers class *  { @com.facebook.react.uimanager.annotations.ReactProp <methods>; }\n-keepclassmembers class *  { @com.facebook.react.uimanager.annotations.ReactPropGroup <methods>; }\n\n-keep class com.facebook.hermes.unicode.** { *; }\n-keep class com.facebook.jni.** { *; }\n\n-dontwarn com.facebook.react.**\n\n# TextLayoutBuilder uses a non-public Android constructor within StaticLayout.\n# See libs/proxy/src/main/java/com/facebook/fbui/textlayoutbuilder/proxy for details.\n-dontwarn android.text.StaticLayout\n\n# okhttp\n\n-keepattributes Signature\n-keepattributes *Annotation*\n-keep class okhttp3.** { *; }\n-keep interface okhttp3.** { *; }\n-dontwarn okhttp3.**\n\n# okio\n\n-keep class sun.misc.Unsafe { *; }\n-dontwarn java.nio.file.*\n-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement\n-dontwarn okio.**\n\n# watermelondb\n-keep class com.nozbe.watermelondb.** { *; }\n"
  },
  {
    "path": "native/androidTest/app/src/androidTest/java/com/nozbe/watermelonTest/BridgeTest.kt",
    "content": "package com.nozbe.watermelonTest\n\nimport android.util.Log\nimport androidx.test.core.app.launchActivity\nimport org.junit.Assert\nimport org.junit.Test\n\nclass BridgeTest {\n    @Test\n    fun testBridge() {\n        launchActivity<MainActivity>()\n        synchronized(BridgeTestReporter.testFinishedNotification) {\n            BridgeTestReporter.testFinishedNotification.wait(5 * 60 * 1000)\n        }\n        try {\n            when (val result = BridgeTestReporter.result) {\n                is BridgeTestReporter.Result.Success -> {\n                    result.result.filter { it.isNotEmpty() }.forEach { Log.d(\"BridgeTest\", it) }\n                }\n                is BridgeTestReporter.Result.Failure -> {\n                    val failureString = result.errors.asSequence().filter {\n                        it.isNotEmpty()\n                    }.joinToString(separator = \"\\n\")\n                    Assert.fail(failureString)\n                }\n            }\n        } catch (e: UninitializedPropertyAccessException) {\n            Assert.fail(\"Bridge tests timed out and a report could not have been obtained. Either JS code could not be run at all or one of the asynchronous tests never returned\")\n        }\n    }\n}\n"
  },
  {
    "path": "native/androidTest/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n\n    <application\n        android:name=\".MainApplication\"\n        android:label=\"@string/app_name\"\n        android:theme=\"@style/Theme.AppCompat.Light\"\n        android:usesCleartextTraffic=\"true\"\n        tools:ignore=\"GoogleAppIndexingWarning\">\n        <activity\n            android:name=\".MainActivity\"\n            android:label=\"@string/app_name\"\n            android:windowSoftInputMode=\"adjustResize\"\n            android:exported=\"true\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "native/androidTest/app/src/main/java/com/nozbe/watermelonTest/BridgeTestReporter.kt",
    "content": "package com.nozbe.watermelonTest\n\nimport com.facebook.react.bridge.ReactApplicationContext\nimport com.facebook.react.bridge.ReactContextBaseJavaModule\nimport com.facebook.react.bridge.ReactMethod\nimport com.facebook.react.bridge.ReadableMap\nimport java.util.logging.Logger\n\nclass BridgeTestReporter(reactContext: ReactApplicationContext) :\n    ReactContextBaseJavaModule(reactContext) {\n\n    sealed class Result {\n        class Success(val result: List<String>) : Result()\n        class Failure(val errors: List<String>) : Result()\n    }\n\n    override fun getName() = \"BridgeTestReporter\"\n\n    companion object {\n        lateinit var result: Result\n        val testFinishedNotification = Object()\n    }\n\n    @Suppress(\"UNCHECKED_CAST\")\n    @ReactMethod\n    fun testsFinished(report: ReadableMap) {\n        Logger.getLogger(name).info(report.toString())\n        val tempResult = report.toHashMap()[\"results\"] as ArrayList<HashMap<String, Any>>\n        result = if (report.getInt(\"errorCount\") > 0) {\n            val messages = tempResult.map {\n                if (!(it[\"passed\"] as Boolean)) {\n                    it[\"message\"] as String? ?: \"\"\n                } else {\n                    \"\"\n                }\n            }\n            Result.Failure(messages)\n        } else {\n            val messages = tempResult.map {\n                if (it[\"passed\"] as Boolean) {\n                    it[\"message\"] as String? ?: \"\"\n                } else {\n                    \"\"\n                }\n            }\n            Result.Success(messages)\n        }\n        synchronized(testFinishedNotification) {\n            testFinishedNotification.notify()\n        }\n    }\n}\n"
  },
  {
    "path": "native/androidTest/app/src/main/java/com/nozbe/watermelonTest/MainActivity.kt",
    "content": "package com.nozbe.watermelonTest\n\nimport com.facebook.react.ReactActivity\nimport com.facebook.react.ReactActivityDelegate\nimport com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled\nimport com.facebook.react.defaults.DefaultReactActivityDelegate\nimport com.nozbe.watermelondb.jsi.WatermelonJSI\n\nclass MainActivity : ReactActivity() {\n    override fun getMainComponentName(): String = \"watermelonTest\"\n\n    override fun onTrimMemory(level: Int) {\n        super.onTrimMemory(level)\n        WatermelonJSI.onTrimMemory(level)\n    }\n\n    override fun createReactActivityDelegate(): ReactActivityDelegate =\n        DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled)\n}\n"
  },
  {
    "path": "native/androidTest/app/src/main/java/com/nozbe/watermelonTest/MainApplication.kt",
    "content": "package com.nozbe.watermelonTest\n\nimport android.app.Application\nimport com.facebook.react.ReactApplication\nimport com.facebook.react.ReactHost\nimport com.facebook.react.ReactPackage\nimport com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost\nimport com.facebook.react.defaults.DefaultReactNativeHost\nimport com.facebook.react.shell.MainReactPackage\nimport com.facebook.soloader.SoLoader\nimport com.nozbe.watermelondb.WatermelonDBPackage\nimport com.nozbe.watermelondb.jsi.WatermelonDBJSIPackage\n\nclass MainApplication : Application(), ReactApplication {\n\n    override val reactNativeHost = object : DefaultReactNativeHost(this) {\n        override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG\n\n        override fun getPackages(): List<ReactPackage> =\n            listOf(MainReactPackage(), NativeModulesPackage(), WatermelonDBPackage(), WatermelonDBJSIPackage())\n\n        override fun getJSMainModuleName(): String = \"src/index.integrationTests.native\"\n    }\n\n    override fun onCreate() {\n        super.onCreate()\n        SoLoader.init(this, false)\n    }\n\n    override val reactHost: ReactHost\n        get() = getDefaultReactHost(applicationContext, reactNativeHost)\n}\n"
  },
  {
    "path": "native/androidTest/app/src/main/java/com/nozbe/watermelonTest/NativeModulesPackage.kt",
    "content": "package com.nozbe.watermelonTest\n\nimport com.facebook.react.ReactPackage\nimport com.facebook.react.bridge.NativeModule\nimport com.facebook.react.bridge.ReactApplicationContext\nimport com.facebook.react.uimanager.ViewManager\n\nclass NativeModulesPackage : ReactPackage {\n\n    override fun createViewManagers(reactContext: ReactApplicationContext):\n        List<ViewManager<*, *>> = emptyList()\n\n    override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> =\n        listOf(BridgeTestReporter(reactContext))\n}\n"
  },
  {
    "path": "native/androidTest/app/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">Watermelon Tests</string>\n</resources>\n"
  },
  {
    "path": "native/androidTest/build.gradle",
    "content": "// import org.apache.tools.ant.taskdefs.condition.Os\n\n// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    project.ext {\n        buildToolsVersion = \"34.0.0\"\n        minSdkVersion = 23\n        compileSdkVersion = 34\n        targetSdkVersion = 34\n        ndkVersion = \"26.1.10909125\"\n        kotlinVersion = '1.9.22'\n    }\n\n    repositories {\n        google()\n        mavenCentral()\n    }\n    dependencies {\n        classpath(\"com.android.tools.build:gradle\")\n        classpath(\"com.facebook.react:react-native-gradle-plugin\")\n        // classpath(\"de.undercouch:gradle-download-task:5.0.1\")\n        classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion\"\n\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nconfigurations.all {\n    resolutionStrategy {\n        force \"com.facebook.soloader:soloader:0.8.2\"\n    }\n}\n\napply plugin: \"com.facebook.react.rootproject\"\n\n// allprojects {\n//     repositories {\n//         exclusiveContent {\n//             // We get React Native's Android binaries exclusively through npm,\n//             // from a local Maven repo inside node_modules/react-native/.\n//             // (The use of exclusiveContent prevents looking elsewhere like Maven Central\n//             // and potentially getting a wrong version.)\n//             filter {\n//                 includeGroup \"com.facebook.react\"\n//             }\n//             forRepository {\n//                 maven {\n//                     url \"$rootDir/../../node_modules/react-native/android\"\n//                 }\n//             }\n//         }\n//         mavenLocal()\n//         maven {\n//             // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n//             url \"$rootDir/../../node_modules/react-native/android\"\n//         }\n//         maven {\n//             // Local Maven repo containing AARs with JSC library built for Android\n//             url \"$rootDir/../../node_modules/jsc-android/dist\"\n//         }\n//         mavenCentral {\n//             // We don't want to fetch react-native from Maven Central as there are\n//             // older versions over there.\n//             content {\n//                 excludeGroup \"com.facebook.react\"\n//             }\n//         }\n//         google()\n//         maven { url 'https://www.jitpack.io' }\n//     }\n// }\n"
  },
  {
    "path": "native/androidTest/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-8.6-all.zip\nnetworkTimeout=10000\nvalidateDistributionUrl=true\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "native/androidTest/gradle.properties",
    "content": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\n# Default value: -Xmx10248m -XX:MaxPermSize=256m\n# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8\norg.gradle.jvmargs=-Xmx4g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8\n\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\norg.gradle.parallel=true\n\nMYAPP_RELEASE_STORE_FILE=DemoKeystore.keystore\nMYAPP_RELEASE_KEY_ALIAS=DemoKeystoreAlias\nMYAPP_RELEASE_STORE_PASSWORD=DemoKeystore\nMYAPP_RELEASE_KEY_PASSWORD=DemoKeystore\n\nandroid.useAndroidX=true\nandroid.enableJetifier=true\n#android.useDeprecatedNdk=true\n\n# Use this property to specify which architecture you want to build.\n# You can also override it from the CLI using\n# ./gradlew <task> -PreactNativeArchitectures=x86_64\nreactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64\n\n# Use this property to enable support to the new architecture.\n# This will allow you to use TurboModules and the Fabric render in\n# your application. You should enable this flag either if you want\n# to write custom TurboModules/Fabric components OR use libraries that\n# are providing them.\nnewArchEnabled=false\n\n# Use this property to enable or disable the Hermes JS engine.\n# If set to false, you will be using JSC instead.\nhermesEnabled=true\n"
  },
  {
    "path": "native/androidTest/gradlew",
    "content": "#!/bin/sh\n\n#\n# Copyright © 2015-2021 the original authors.\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#      https://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.\n#\n\n##############################################################################\n#\n#   Gradle start up script for POSIX generated by Gradle.\n#\n#   Important for running:\n#\n#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is\n#       noncompliant, but you have some other compliant shell such as ksh or\n#       bash, then to run this script, type that shell name before the whole\n#       command line, like:\n#\n#           ksh Gradle\n#\n#       Busybox and similar reduced shells will NOT work, because this script\n#       requires all of these POSIX shell features:\n#         * functions;\n#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,\n#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;\n#         * compound commands having a testable exit status, especially «case»;\n#         * various built-in commands including «command», «set», and «ulimit».\n#\n#   Important for patching:\n#\n#   (2) This script targets any POSIX shell, so it avoids extensions provided\n#       by Bash, Ksh, etc; in particular arrays are avoided.\n#\n#       The \"traditional\" practice of packing multiple parameters into a\n#       space-separated string is a well documented source of bugs and security\n#       problems, so this is (mostly) avoided, by progressively accumulating\n#       options in \"$@\", and eventually passing that to Java.\n#\n#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,\n#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;\n#       see the in-line comments for details.\n#\n#       There are tweaks for specific operating systems such as AIX, CygWin,\n#       Darwin, MinGW, and NonStop.\n#\n#   (3) This script is generated from the Groovy template\n#       https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n#       within the Gradle project.\n#\n#       You can find Gradle at https://github.com/gradle/gradle/.\n#\n##############################################################################\n\n# Attempt to set APP_HOME\n\n# Resolve links: $0 may be a link\napp_path=$0\n\n# Need this for daisy-chained symlinks.\nwhile\n    APP_HOME=${app_path%\"${app_path##*/}\"}  # leaves a trailing /; empty if no leading path\n    [ -h \"$app_path\" ]\ndo\n    ls=$( ls -ld \"$app_path\" )\n    link=${ls#*' -> '}\n    case $link in             #(\n      /*)   app_path=$link ;; #(\n      *)    app_path=$APP_HOME$link ;;\n    esac\ndone\n\n# This is normally unused\n# shellcheck disable=SC2034\nAPP_BASE_NAME=${0##*/}\n# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)\nAPP_HOME=$( cd \"${APP_HOME:-./}\" > /dev/null && pwd -P ) || exit\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=maximum\n\nwarn () {\n    echo \"$*\"\n} >&2\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n} >&2\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"$( uname )\" in                #(\n  CYGWIN* )         cygwin=true  ;; #(\n  Darwin* )         darwin=true  ;; #(\n  MSYS* | MINGW* )  msys=true    ;; #(\n  NONSTOP* )        nonstop=true ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=$JAVA_HOME/jre/sh/java\n    else\n        JAVACMD=$JAVA_HOME/bin/java\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=java\n    if ! command -v java >/dev/null 2>&1\n    then\n        die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nfi\n\n# Increase the maximum file descriptors if we can.\nif ! \"$cygwin\" && ! \"$darwin\" && ! \"$nonstop\" ; then\n    case $MAX_FD in #(\n      max*)\n        # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.\n        # shellcheck disable=SC2039,SC3045\n        MAX_FD=$( ulimit -H -n ) ||\n            warn \"Could not query maximum file descriptor limit\"\n    esac\n    case $MAX_FD in  #(\n      '' | soft) :;; #(\n      *)\n        # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.\n        # shellcheck disable=SC2039,SC3045\n        ulimit -n \"$MAX_FD\" ||\n            warn \"Could not set maximum file descriptor limit to $MAX_FD\"\n    esac\nfi\n\n# Collect all arguments for the java command, stacking in reverse order:\n#   * args from the command line\n#   * the main class name\n#   * -classpath\n#   * -D...appname settings\n#   * --module-path (only if needed)\n#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif \"$cygwin\" || \"$msys\" ; then\n    APP_HOME=$( cygpath --path --mixed \"$APP_HOME\" )\n    CLASSPATH=$( cygpath --path --mixed \"$CLASSPATH\" )\n\n    JAVACMD=$( cygpath --unix \"$JAVACMD\" )\n\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    for arg do\n        if\n            case $arg in                                #(\n              -*)   false ;;                            # don't mess with options #(\n              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath\n                    [ -e \"$t\" ] ;;                      #(\n              *)    false ;;\n            esac\n        then\n            arg=$( cygpath --path --ignore --mixed \"$arg\" )\n        fi\n        # Roll the args list around exactly as many times as the number of\n        # args, so each arg winds up back in the position where it started, but\n        # possibly modified.\n        #\n        # NB: a `for` loop captures its iteration list before it begins, so\n        # changing the positional parameters here affects neither the number of\n        # iterations, nor the values presented in `arg`.\n        shift                   # remove old arg\n        set -- \"$@\" \"$arg\"      # push replacement arg\n    done\nfi\n\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Collect all arguments for the java command:\n#   * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n#     and any embedded shellness will be escaped.\n#   * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be\n#     treated as '${Hostname}' itself on the command line.\n\nset -- \\\n        \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n        -classpath \"$CLASSPATH\" \\\n        org.gradle.wrapper.GradleWrapperMain \\\n        \"$@\"\n\n# Stop when \"xargs\" is not available.\nif ! command -v xargs >/dev/null 2>&1\nthen\n    die \"xargs is not available\"\nfi\n\n# Use \"xargs\" to parse quoted args.\n#\n# With -n1 it outputs one arg per line, with the quotes and backslashes removed.\n#\n# In Bash we could simply go:\n#\n#   readarray ARGS < <( xargs -n1 <<<\"$var\" ) &&\n#   set -- \"${ARGS[@]}\" \"$@\"\n#\n# but POSIX shell has neither arrays nor command substitution, so instead we\n# post-process each arg (as a line of input to sed) to backslash-escape any\n# character that might be a shell metacharacter, then use eval to reverse\n# that process (while maintaining the separation between arguments), and wrap\n# the whole thing up as a single \"set\" statement.\n#\n# This will of course break if any of these variables contains a newline or\n# an unmatched quote.\n#\n\neval \"set -- $(\n        printf '%s\\n' \"$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS\" |\n        xargs -n1 |\n        sed ' s~[^-[:alnum:]+,./:=@_]~\\\\&~g; ' |\n        tr '\\n' ' '\n    )\" '\"$@\"'\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "native/androidTest/gradlew.bat",
    "content": "@rem\r\n@rem Copyright 2015 the original author or authors.\r\n@rem\r\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\r\n@rem you may not use this file except in compliance with the License.\r\n@rem You may obtain a copy of the License at\r\n@rem\r\n@rem      https://www.apache.org/licenses/LICENSE-2.0\r\n@rem\r\n@rem Unless required by applicable law or agreed to in writing, software\r\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\r\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n@rem See the License for the specific language governing permissions and\r\n@rem limitations under the License.\r\n@rem\r\n\r\n@if \"%DEBUG%\"==\"\" @echo off\r\n@rem ##########################################################################\r\n@rem\r\n@rem  Gradle startup script for Windows\r\n@rem\r\n@rem ##########################################################################\r\n\r\n@rem Set local scope for the variables with windows NT shell\r\nif \"%OS%\"==\"Windows_NT\" setlocal\r\n\r\nset DIRNAME=%~dp0\r\nif \"%DIRNAME%\"==\"\" set DIRNAME=.\r\n@rem This is normally unused\r\nset APP_BASE_NAME=%~n0\r\nset APP_HOME=%DIRNAME%\r\n\r\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\r\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\r\n\r\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\r\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\r\n\r\n@rem Find java.exe\r\nif defined JAVA_HOME goto findJavaFromJavaHome\r\n\r\nset JAVA_EXE=java.exe\r\n%JAVA_EXE% -version >NUL 2>&1\r\nif %ERRORLEVEL% equ 0 goto execute\r\n\r\necho. 1>&2\r\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2\r\necho. 1>&2\r\necho Please set the JAVA_HOME variable in your environment to match the 1>&2\r\necho location of your Java installation. 1>&2\r\n\r\ngoto fail\r\n\r\n:findJavaFromJavaHome\r\nset JAVA_HOME=%JAVA_HOME:\"=%\r\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\r\n\r\nif exist \"%JAVA_EXE%\" goto execute\r\n\r\necho. 1>&2\r\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2\r\necho. 1>&2\r\necho Please set the JAVA_HOME variable in your environment to match the 1>&2\r\necho location of your Java installation. 1>&2\r\n\r\ngoto fail\r\n\r\n:execute\r\n@rem Setup the command line\r\n\r\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n\r\n\r\n@rem Execute Gradle\r\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\r\n\r\n:end\r\n@rem End local scope for the variables with windows NT shell\r\nif %ERRORLEVEL% equ 0 goto mainEnd\r\n\r\n:fail\r\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\r\nrem the _cmd.exe /c_ return code!\r\nset EXIT_CODE=%ERRORLEVEL%\r\nif %EXIT_CODE% equ 0 set EXIT_CODE=1\r\nif not \"\"==\"%GRADLE_EXIT_CONSOLE%\" exit %EXIT_CODE%\r\nexit /b %EXIT_CODE%\r\n\r\n:mainEnd\r\nif \"%OS%\"==\"Windows_NT\" endlocal\r\n\r\n:omega\r\n"
  },
  {
    "path": "native/androidTest/keystores/BUCK",
    "content": "keystore(\n    name = \"debug\",\n    properties = \"debug.keystore.properties\",\n    store = \"debug.keystore\",\n    visibility = [\n        \"PUBLIC\",\n    ],\n)\n"
  },
  {
    "path": "native/androidTest/keystores/debug.keystore.properties",
    "content": "key.store=debug.keystore\nkey.alias=androiddebugkey\nkey.store.password=android\nkey.alias.password=android\n"
  },
  {
    "path": "native/androidTest/settings.gradle",
    "content": "rootProject.name = 'watermelonTest'\ninclude ':watermelondb'\nproject(':watermelondb').projectDir = new File(rootProject.projectDir, '../../native/android')\n\ninclude ':watermelondb-jsi'\nproject(':watermelondb-jsi').projectDir = new File(rootProject.projectDir, '../../native/android-jsi')\n\ninclude ':app'\n\nincludeBuild('../../node_modules/@react-native/gradle-plugin')\n"
  },
  {
    "path": "native/ios/WatermelonDB/DatabasePlatformIOS.mm",
    "content": "#include \"DatabasePlatform.h\"\n#import <Foundation/Foundation.h>\n#import <React/RCTBridge.h>\n#include <mutex>\n\nnamespace watermelondb {\nnamespace platform {\n\nvoid consoleLog(std::string message) {\n    NSLog(@\"%s\", message.c_str());\n}\n\nvoid consoleError(std::string message) {\n    NSLog(@\"Error: %s\", message.c_str());\n}\n\nvoid initializeSqlite() {\n    // Nothing to do\n}\n\nstd::string resolveDatabasePath(std::string path) {\n    // Default: app documents/<name>.db\n    NSError *err = nil;\n    NSURL *documentsUrl = [NSFileManager.defaultManager URLForDirectory:NSDocumentDirectory\n                                                             inDomain:NSUserDomainMask\n                                                    appropriateForURL:nil\n                                                               create:false\n                                                                error:&err];\n\n    if (err) {\n        NSLog(@\"Error: %@\", err);\n        throw std::runtime_error(\"Failed to resolve database path - could not find documentsUrl\");\n    }\n\n    NSString *dbPath = [documentsUrl URLByAppendingPathComponent:\n                      [NSString stringWithFormat:@\"%s.db\", path.c_str()]].path;\n\n    return std::string([dbPath cStringUsingEncoding:NSUTF8StringEncoding]);\n}\n\nvoid deleteDatabaseFile(std::string path, bool warnIfDoesNotExist) {\n    NSString *nsPath = [NSString stringWithCString:path.c_str() encoding:NSUTF8StringEncoding];\n    NSFileManager *manager = NSFileManager.defaultManager;\n\n    if (![manager fileExistsAtPath:nsPath]) {\n        if (warnIfDoesNotExist) {\n            NSLog(@\"Warning: Skipping deleting %@, because it does not exist\", nsPath);\n        } else {\n            throw std::runtime_error(\"Could not delete database file \" + path + \" because it does not exist\");\n        }\n        return;\n    }\n\n    NSError *err = nil;\n    [manager removeItemAtPath:nsPath error:&err];\n\n    if (err) {\n        throw std::runtime_error(\"Could not delete database file - \" +\n                                 std::string([err.description cStringUsingEncoding:NSUTF8StringEncoding]));\n    }\n}\n\nvoid onMemoryAlert(std::function<void(void)> callback) {\n    // TODO: Unimplemented\n}\n\nNSMutableDictionary<NSNumber *, NSData *> *providedSyncJsons = [NSMutableDictionary new];\nstd::mutex providedSyncJsonsMutex;\n\nextern \"C\" void watermelondbProvideSyncJson(int id, NSData *json, NSError **errorPtr) {\n    const std::lock_guard<std::mutex> lock(providedSyncJsonsMutex);\n\n    if (providedSyncJsons[@(id)]) {\n        NSString *errorMsg = [NSString stringWithFormat:@\"Sync json %i is already provided\", id];\n        *errorPtr = [NSError errorWithDomain:@\"com.nozbe.watermelondb.error\"\n                                        code:-1\n                                    userInfo:@{ @\"NSLocalizedDescriptionKey\": errorMsg }];\n        return;\n    }\n\n    providedSyncJsons[@(id)] = json;\n}\n\nstd::string_view getSyncJson(int id) {\n    const std::lock_guard<std::mutex> lock(providedSyncJsonsMutex);\n\n    NSData *json = providedSyncJsons[@(id)];\n    if (!json) {\n        throw std::runtime_error(\"Sync json \" + std::to_string(id) + \" does not exist\");\n    }\n    std::string_view view((char *) json.bytes, json.length);\n    return view;\n}\n\nvoid deleteSyncJson(int id) {\n    const std::lock_guard<std::mutex> lock(providedSyncJsonsMutex);\n    [providedSyncJsons removeObjectForKey: @(id)];\n}\n\nvoid onDestroy(std::function<void()> callback) {\n    [NSNotificationCenter.defaultCenter addObserverForName:RCTBridgeWillReloadNotification\n                                                    object:nil\n                                                     queue:nil\n                                                usingBlock: ^(NSNotification *note) {\n        callback();\n    }];\n}\n\n} // namespace platform\n} // namespace watermelondb\n"
  },
  {
    "path": "native/ios/WatermelonDB/FMDB/LICENSE.txt",
    "content": "If you are using FMDB in your project, I'd love to hear about it.  Let Gus know\nby sending an email to gus@flyingmeat.com.\n\nAnd if you happen to come across either Gus Mueller or Rob Ryan in a bar, you\nmight consider purchasing a drink of their choosing if FMDB has been useful to\nyou.\n\nFinally, and shortly, this is the MIT License.\n\nCopyright (c) 2008-2014 Flying Meat Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE."
  },
  {
    "path": "native/ios/WatermelonDB/FMDB/README.markdown",
    "content": "# FMDB v2.7\n<!--[![Platform](https://img.shields.io/cocoapods/p/FMDB.svg?style=flat)](http://cocoadocs.org/docsets/Alamofire)-->\n[![CocoaPods Compatible](https://img.shields.io/cocoapods/v/FMDB.svg)](https://img.shields.io/cocoapods/v/FMDB.svg)\n[![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)\n\nThis is an Objective-C wrapper around SQLite: http://sqlite.org/\n\n## The FMDB Mailing List:\nhttp://groups.google.com/group/fmdb\n\n## Read the SQLite FAQ:\nhttp://www.sqlite.org/faq.html\n\nSince FMDB is built on top of SQLite, you're going to want to read this page top to bottom at least once.  And while you're there, make sure to bookmark the SQLite Documentation page: http://www.sqlite.org/docs.html\n\n## Contributing\nDo you have an awesome idea that deserves to be in FMDB?  You might consider pinging ccgus first to make sure he hasn't already ruled it out for some reason.  Otherwise pull requests are great, and make sure you stick to the local coding conventions.  However, please be patient and if you haven't heard anything from ccgus for a week or more, you might want to send a note asking what's up.\n\n## Installing\n\n### CocoaPods\n\n[![Dependency Status](https://www.versioneye.com/objective-c/fmdb/2.3/badge.svg?style=flat)](https://www.versioneye.com/objective-c/fmdb/2.3)\n[![Reference Status](https://www.versioneye.com/objective-c/fmdb/reference_badge.svg?style=flat)](https://www.versioneye.com/objective-c/fmdb/references)\n\nFMDB can be installed using [CocoaPods](https://cocoapods.org/).\n\nIf you haven't done so already, you might want to initialize the project, to have it produce a `Podfile` template for you:\n\n```\n$ pod init\n```\n\nThen, edit the `Podfile`, adding `FMDB`:\n\n```ruby\n# Uncomment the next line to define a global platform for your project\n# platform :ios, '9.0'\n\ntarget 'MyApp' do\n    # Comment the next line if you're not using Swift and don't want to use dynamic frameworks\n    use_frameworks!\n\n    # Pods for MyApp2\n\n    pod 'FMDB'\n    # pod 'FMDB/FTS'   # FMDB with FTS\n    # pod 'FMDB/standalone'   # FMDB with latest SQLite amalgamation source\n    # pod 'FMDB/standalone/FTS'   # FMDB with latest SQLite amalgamation source and FTS\n    # pod 'FMDB/SQLCipher'   # FMDB with SQLCipher\nend\n```\n\nThen install the pods:\n\n```\n$ pod install\n```\n\nThen open the `.xcworkspace` rather than the `.xcodeproj`.\n\nFor more information on Cocoapods visit https://cocoapods.org.\n\n**If using FMDB with [SQLCipher](https://www.zetetic.net/sqlcipher/) you must use the FMDB/SQLCipher subspec. The FMDB/SQLCipher subspec declares SQLCipher as a dependency, allowing FMDB to be compiled with the `-DSQLITE_HAS_CODEC` flag.**\n\n### Carthage\n\nOnce you make sure you have [the latest version of Carthage](https://github.com/Carthage/Carthage/releases), you can open up a command line terminal, navigate to your project's main directory, and then do the following commands:\n\n```\n$ echo ' github \"ccgus/fmdb\" ' > ./Cartfile\n$ carthage update\n```\n\nYou can then configure your project as outlined in Carthage's [Getting Started](https://github.com/Carthage/Carthage#getting-started) (i.e. for iOS, adding the framework to the \"Link Binary with Libraries\" in your target and adding the `copy-frameworks` script; in macOS, adding the framework to the list of \"Embedded Binaries\").\n\n## FMDB Class Reference:\nhttp://ccgus.github.io/fmdb/html/index.html\n\n## Automatic Reference Counting (ARC) or Manual Memory Management?\nYou can use either style in your Cocoa project.  FMDB will figure out which you are using at compile time and do the right thing.\n\n## What's New in FMDB 2.7\n\nFMDB 2.7 attempts to support a more natural interface. This represents a fairly significant change for Swift developers (audited for nullability; shifted to properties in external interfaces where possible rather than methods; etc.). For Objective-C developers, this should be a fairly seamless transition (unless you were using the ivars that were previously exposed in the public interface, which you shouldn't have been doing, anyway!). \n\n### Nullability and Swift Optionals\n\nFMDB 2.7 is largely the same as prior versions, but has been audited for nullability. For Objective-C users, this simply means that if you perform a static analysis of your FMDB-based project, you may receive more meaningful warnings as you review your project, but there are likely to be few, if any, changes necessary in your code.\n\nFor Swift users, this nullability audit results in changes that are not entirely backward compatible with FMDB 2.6, but is a little more Swifty. Before FMDB was audited for nullability, Swift was forced to defensively assume that variables were optional, but the library now more accurately knows which properties and method parameters are optional, and which are not.\n\nThis means, though, that Swift code written for FMDB 2.7 may require changes. For example, consider the following Swift 3/Swift 4 code for FMDB 2.6:\n\n```swift\nqueue.inTransaction { db, rollback in\n    do {\n        guard let db == db else {\n            // handle error here\n            return\n        }\n\n        try db.executeUpdate(\"INSERT INTO foo (bar) VALUES (?)\", values: [1])\n        try db.executeUpdate(\"INSERT INTO foo (bar) VALUES (?)\", values: [2])\n    } catch {\n        rollback?.pointee = true\n    }\n}\n```\n\nBecause FMDB 2.6 was not audited for nullability, Swift inferred that `db` and `rollback` were optionals. But, now, in FMDB 2.7, Swift now knows that, for example, neither `db` nor `rollback` above can be `nil`, so they are no longer optionals. Thus it becomes:\n\n```swift\nqueue.inTransaction { db, rollback in\n    do {\n        try db.executeUpdate(\"INSERT INTO foo (bar) VALUES (?)\", values: [1])\n        try db.executeUpdate(\"INSERT INTO foo (bar) VALUES (?)\", values: [2])\n    } catch {\n        rollback.pointee = true\n    }\n}\n```\n\n### Custom Functions\n\nIn the past, when writing custom functions, you would have to generally include your own `@autoreleasepool` block to avoid problems when writing functions that scanned through a large table. Now, FMDB will automatically wrap it in an autorelease pool, so you don't have to.\n\nAlso, in the past, when retrieving the values passed to the function, you had to drop down to the SQLite C API and include your own `sqlite3_value_XXX` calls. There are now `FMDatabase` methods, `valueInt`, `valueString`, etc., so you can stay within Swift and/or Objective-C, without needing to call the C functions yourself. Likewise, when specifying the return values, you no longer need to call `sqlite3_result_XXX` C API, but rather you can use `FMDatabase` methods, `resultInt`, `resultString`, etc. There is a new `enum` for `valueType` called `SqliteValueType`, which can be used for checking the type of parameter passed to the custom function.\n\nThus, you can do something like (as of Swift 3):\n\n```swift\ndb.makeFunctionNamed(\"RemoveDiacritics\", arguments: 1) { context, argc, argv in\n    guard db.valueType(argv[0]) == .text || db.valueType(argv[0]) == .null else {\n        db.resultError(\"Expected string parameter\", context: context)\n        return\n    }\n\n    if let string = db.valueString(argv[0])?.folding(options: .diacriticInsensitive, locale: nil) {\n        db.resultString(string, context: context)\n    } else {\n        db.resultNull(context: context)\n    }\n}\n```\n\nAnd you can then use that function in your SQL (in this case, matching both \"Jose\" and \"José\"):\n\n```sql\nSELECT * FROM employees WHERE RemoveDiacritics(first_name) LIKE 'jose'\n```\n\nNote, the method `makeFunctionNamed:maximumArguments:withBlock:` has been renamed to `makeFunctionNamed:arguments:block:`, to more accurately reflect the functional intent of the second parameter.\n\n### API Changes\n\nIn addition to the `makeFunctionNamed` noted above, there are a few other API changes. Specifically, \n\n - To become consistent with the rest of the API, the methods `objectForColumnName` and `UTF8StringForColumnName` have been renamed to `objectForColumn` and `UTF8StringForColumn`.\n\n - Note, the `objectForColumn` (and the associted subscript operator) now returns `nil` if an invalid column name/index is passed to it. It used to return `NSNull`.\n\n - To avoid confusion with `FMDatabaseQueue` method `inTransaction`, which performs transactions, the `FMDatabase` method to determine whether you are in a transaction or not, `inTransaction`, has been replaced with a read-only property, `isInTransaction`. \n\n - Several functions have been converted to properties, namely, `databasePath`, `maxBusyRetryTimeInterval`, `shouldCacheStatements`, `sqliteHandle`, `hasOpenResultSets`, `lastInsertRowId`, `changes`, `goodConnection`, `columnCount`, `resultDictionary`, `applicationID`, `applicationIDString`, `userVersion`, `countOfCheckedInDatabases`, `countOfCheckedOutDatabases`, and `countOfOpenDatabases`. For Objective-C users, this has little material impact, but for Swift users, it results in a slightly more natural interface. Note: For Objective-C developers, previously versions of FMDB exposed many ivars (but we hope you weren't using them directly, anyway!), but the implmentation details for these are no longer exposed.\n\n### URL Methods\n\nIn keeping with Apple's shift from paths to URLs, there are now `NSURL` renditions of the various `init` methods, previously only accepting paths. \n\n## Usage\nThere are three main classes in FMDB:\n\n1. `FMDatabase` - Represents a single SQLite database.  Used for executing SQL statements.\n2. `FMResultSet` - Represents the results of executing a query on an `FMDatabase`.\n3. `FMDatabaseQueue` - If you're wanting to perform queries and updates on multiple threads, you'll want to use this class.  It's described in the \"Thread Safety\" section below.\n\n### Database Creation\nAn `FMDatabase` is created with a path to a SQLite database file.  This path can be one of these three:\n\n1. A file system path.  The file does not have to exist on disk.  If it does not exist, it is created for you.\n2. An empty string (`@\"\"`).  An empty database is created at a temporary location.  This database is deleted when the `FMDatabase` connection is closed.\n3. `NULL`.  An in-memory database is created.  This database will be destroyed when the `FMDatabase` connection is closed.\n\n(For more information on temporary and in-memory databases, read the sqlite documentation on the subject: http://www.sqlite.org/inmemorydb.html)\n\n```objc\nNSString *path = [NSTemporaryDirectory() stringByAppendingPathComponent:@\"tmp.db\"];\nFMDatabase *db = [FMDatabase databaseWithPath:path];\n```\n\n### Opening\n\nBefore you can interact with the database, it must be opened.  Opening fails if there are insufficient resources or permissions to open and/or create the database.\n\n```objc\nif (![db open]) {\n    // [db release];   // uncomment this line in manual referencing code; in ARC, this is not necessary/permitted\n    db = nil;\n    return;\n}\n```\n\n### Executing Updates\n\nAny sort of SQL statement which is not a `SELECT` statement qualifies as an update.  This includes `CREATE`, `UPDATE`, `INSERT`, `ALTER`, `COMMIT`, `BEGIN`, `DETACH`, `DELETE`, `DROP`, `END`, `EXPLAIN`, `VACUUM`, and `REPLACE` statements (plus many more).  Basically, if your SQL statement does not begin with `SELECT`, it is an update statement.\n\nExecuting updates returns a single value, a `BOOL`.  A return value of `YES` means the update was successfully executed, and a return value of `NO` means that some error was encountered.  You may invoke the `-lastErrorMessage` and `-lastErrorCode` methods to retrieve more information.\n\n### Executing Queries\n\nA `SELECT` statement is a query and is executed via one of the `-executeQuery...` methods.\n\nExecuting queries returns an `FMResultSet` object if successful, and `nil` upon failure.  You should use the `-lastErrorMessage` and `-lastErrorCode` methods to determine why a query failed.\n\nIn order to iterate through the results of your query, you use a `while()` loop.  You also need to \"step\" from one record to the other.  With FMDB, the easiest way to do that is like this:\n\n```objc\nFMResultSet *s = [db executeQuery:@\"SELECT * FROM myTable\"];\nwhile ([s next]) {\n    //retrieve values for each record\n}\n```\n\nYou must always invoke `-[FMResultSet next]` before attempting to access the values returned in a query, even if you're only expecting one:\n\n```objc\nFMResultSet *s = [db executeQuery:@\"SELECT COUNT(*) FROM myTable\"];\nif ([s next]) {\n    int totalCount = [s intForColumnIndex:0];\n}\n```\n\n`FMResultSet` has many methods to retrieve data in an appropriate format:\n\n- `intForColumn:`\n- `longForColumn:`\n- `longLongIntForColumn:`\n- `boolForColumn:`\n- `doubleForColumn:`\n- `stringForColumn:`\n- `dateForColumn:`\n- `dataForColumn:`\n- `dataNoCopyForColumn:`\n- `UTF8StringForColumn:`\n- `objectForColumn:`\n\nEach of these methods also has a `{type}ForColumnIndex:` variant that is used to retrieve the data based on the position of the column in the results, as opposed to the column's name.\n\nTypically, there's no need to `-close` an `FMResultSet` yourself, since that happens when either the result set is deallocated, or the parent database is closed.\n\n### Closing\n\nWhen you have finished executing queries and updates on the database, you should `-close` the `FMDatabase` connection so that SQLite will relinquish any resources it has acquired during the course of its operation.\n\n```objc\n[db close];\n```\n\n### Transactions\n\n`FMDatabase` can begin and commit a transaction by invoking one of the appropriate methods or executing a begin/end transaction statement.\n\n### Multiple Statements and Batch Stuff\n\nYou can use `FMDatabase`'s executeStatements:withResultBlock: to do multiple statements in a string:\n\n```objc\nNSString *sql = @\"create table bulktest1 (id integer primary key autoincrement, x text);\"\n                 \"create table bulktest2 (id integer primary key autoincrement, y text);\"\n                 \"create table bulktest3 (id integer primary key autoincrement, z text);\"\n                 \"insert into bulktest1 (x) values ('XXX');\"\n                 \"insert into bulktest2 (y) values ('YYY');\"\n                 \"insert into bulktest3 (z) values ('ZZZ');\";\n\nsuccess = [db executeStatements:sql];\n\nsql = @\"select count(*) as count from bulktest1;\"\n       \"select count(*) as count from bulktest2;\"\n       \"select count(*) as count from bulktest3;\";\n\nsuccess = [self.db executeStatements:sql withResultBlock:^int(NSDictionary *dictionary) {\n    NSInteger count = [dictionary[@\"count\"] integerValue];\n    XCTAssertEqual(count, 1, @\"expected one record for dictionary %@\", dictionary);\n    return 0;\n}];\n```\n\n### Data Sanitization\n\nWhen providing a SQL statement to FMDB, you should not attempt to \"sanitize\" any values before insertion.  Instead, you should use the standard SQLite binding syntax:\n\n```sql\nINSERT INTO myTable VALUES (?, ?, ?, ?)\n```\n\nThe `?` character is recognized by SQLite as a placeholder for a value to be inserted.  The execution methods all accept a variable number of arguments (or a representation of those arguments, such as an `NSArray`, `NSDictionary`, or a `va_list`), which are properly escaped for you.\n\nAnd, to use that SQL with the `?` placeholders from Objective-C:\n\n```objc\nNSInteger identifier = 42;\nNSString *name = @\"Liam O'Flaherty (\\\"the famous Irish author\\\")\";\nNSDate *date = [NSDate date];\nNSString *comment = nil;\n\nBOOL success = [db executeUpdate:@\"INSERT INTO authors (identifier, name, date, comment) VALUES (?, ?, ?, ?)\", @(identifier), name, date, comment ?: [NSNull null]];\nif (!success) {\n    NSLog(@\"error = %@\", [db lastErrorMessage]);\n}\n```\n\n> **Note:** Fundamental data types, like the `NSInteger` variable `identifier`, should be as a `NSNumber` objects, achieved by using the `@` syntax, shown above. Or you can use the `[NSNumber numberWithInt:identifier]` syntax, too.\n>\n> Likewise, SQL `NULL` values should be inserted as `[NSNull null]`. For example, in the case of `comment` which might be `nil` (and is in this example), you can use the `comment ?: [NSNull null]` syntax, which will insert the string if `comment` is not `nil`, but will insert `[NSNull null]` if it is `nil`.\n\nIn Swift, you would use `executeUpdate(values:)`, which not only is a concise Swift syntax, but also `throws` errors for proper error handling:\n\n```swift\ndo {\n    let identifier = 42\n    let name = \"Liam O'Flaherty (\\\"the famous Irish author\\\")\"\n    let date = Date()\n    let comment: String? = nil\n\n    try db.executeUpdate(\"INSERT INTO authors (identifier, name, date, comment) VALUES (?, ?, ?, ?)\", values: [identifier, name, date, comment ?? NSNull()])\n} catch {\n    print(\"error = \\(error)\")\n}\n```\n\n> **Note:** In Swift, you don't have to wrap fundamental numeric types like you do in Objective-C. But if you are going to insert an optional string, you would probably use the `comment ?? NSNull()` syntax (i.e., if it is `nil`, use `NSNull`, otherwise use the string).\n\nAlternatively, you may use named parameters syntax:\n\n```sql\nINSERT INTO authors (identifier, name, date, comment) VALUES (:identifier, :name, :date, :comment)\n```\n\nThe parameters *must* start with a colon. SQLite itself supports other characters, but internally the dictionary keys are prefixed with a colon, do **not** include the colon in your dictionary keys.\n\n```objc\nNSDictionary *arguments = @{@\"identifier\": @(identifier), @\"name\": name, @\"date\": date, @\"comment\": comment ?: [NSNull null]};\nBOOL success = [db executeUpdate:@\"INSERT INTO authors (identifier, name, date, comment) VALUES (:identifier, :name, :date, :comment)\" withParameterDictionary:arguments];\nif (!success) {\n    NSLog(@\"error = %@\", [db lastErrorMessage]);\n}\n```\n\nThe key point is that one should not use `NSString` method `stringWithFormat` to manually insert values into the SQL statement, itself. Nor should one Swift string interpolation to insert values into the SQL. Use `?` placeholders for values to be inserted into the database (or used in `WHERE` clauses in `SELECT` statements).\n\n<h2 id=\"threads\">Using FMDatabaseQueue and Thread Safety.</h2>\n\nUsing a single instance of `FMDatabase` from multiple threads at once is a bad idea.  It has always been OK to make a `FMDatabase` object *per thread*.  Just don't share a single instance across threads, and definitely not across multiple threads at the same time.  Bad things will eventually happen and you'll eventually get something to crash, or maybe get an exception, or maybe meteorites will fall out of the sky and hit your Mac Pro.  *This would suck*.\n\n**So don't instantiate a single `FMDatabase` object and use it across multiple threads.**\n\nInstead, use `FMDatabaseQueue`. Instantiate a single `FMDatabaseQueue` and use it across multiple threads. The `FMDatabaseQueue` object will synchronize and coordinate access across the multiple threads. Here's how to use it:\n\nFirst, make your queue.\n\n```objc\nFMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:aPath];\n```\n\nThen use it like so:\n\n\n```objc\n[queue inDatabase:^(FMDatabase *db) {\n    [db executeUpdate:@\"INSERT INTO myTable VALUES (?)\", @1];\n    [db executeUpdate:@\"INSERT INTO myTable VALUES (?)\", @2];\n    [db executeUpdate:@\"INSERT INTO myTable VALUES (?)\", @3];\n\n    FMResultSet *rs = [db executeQuery:@\"select * from foo\"];\n    while ([rs next]) {\n        …\n    }\n}];\n```\n\nAn easy way to wrap things up in a transaction can be done like this:\n\n```objc\n[queue inTransaction:^(FMDatabase *db, BOOL *rollback) {\n    [db executeUpdate:@\"INSERT INTO myTable VALUES (?)\", @1];\n    [db executeUpdate:@\"INSERT INTO myTable VALUES (?)\", @2];\n    [db executeUpdate:@\"INSERT INTO myTable VALUES (?)\", @3];\n\n    if (whoopsSomethingWrongHappened) {\n        *rollback = YES;\n        return;\n    }\n\n    // etc ...\n}];\n```\n\nThe Swift equivalent would be:\n\n```swift\nqueue.inTransaction { db, rollback in\n    do {\n        try db.executeUpdate(\"INSERT INTO myTable VALUES (?)\", values: [1])\n        try db.executeUpdate(\"INSERT INTO myTable VALUES (?)\", values: [2])\n        try db.executeUpdate(\"INSERT INTO myTable VALUES (?)\", values: [3])\n\n        if whoopsSomethingWrongHappened {\n            rollback.pointee = true\n            return\n        }\n\n        // etc ...\n    } catch {\n        rollback.pointee = true\n        print(error)\n    }\n}\n```\n\n(Note, as of Swift 3, use `pointee`. But in Swift 2.3, use `memory` rather than `pointee`.)\n\n`FMDatabaseQueue` will run the blocks on a serialized queue (hence the name of the class).  So if you call `FMDatabaseQueue`'s methods from multiple threads at the same time, they will be executed in the order they are received.  This way queries and updates won't step on each other's toes, and every one is happy.\n\n**Note:** The calls to `FMDatabaseQueue`'s methods are blocking.  So even though you are passing along blocks, they will **not** be run on another thread.\n\n## Making custom sqlite functions, based on blocks.\n\nYou can do this!  For an example, look for `-makeFunctionNamed:` in main.m\n\n## Swift\n\nYou can use FMDB in Swift projects too.\n\nTo do this, you must:\n\n1. Copy the relevant `.m` and `.h` files from the FMDB `src` folder into your project.\n\n You can copy all of them (which is easiest), or only the ones you need. Likely you will need [`FMDatabase`](http://ccgus.github.io/fmdb/html/Classes/FMDatabase.html) and [`FMResultSet`](http://ccgus.github.io/fmdb/html/Classes/FMResultSet.html) at a minimum. [`FMDatabaseAdditions`](http://ccgus.github.io/fmdb/html/Categories/FMDatabase+FMDatabaseAdditions.html) provides some very useful convenience methods, so you will likely want that, too. If you are doing multithreaded access to a database, [`FMDatabaseQueue`](http://ccgus.github.io/fmdb/html/Classes/FMDatabaseQueue.html) is quite useful, too. If you choose to not copy all of the files from the `src` directory, though, you may want to update `FMDB.h` to only reference the files that you included in your project.\n\n Note, if you're copying all of the files from the `src` folder into to your project (which is recommended), you may want to drag the individual files into your project, not the folder, itself, because if you drag the folder, you won't be prompted to add the bridging header (see next point).\n\n2. If prompted to create a \"bridging header\", you should do so. If not prompted and if you don't already have a bridging header, add one.\n\n For more information on bridging headers, see [Swift and Objective-C in the Same Project](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-XID_76).\n\n3. In your bridging header, add a line that says:\n    ```objc\n    #import \"FMDB.h\"\n    ```\n\n4. Use the variations of `executeQuery` and `executeUpdate` with the `sql` and `values` parameters with `try` pattern, as shown below. These renditions of `executeQuery` and `executeUpdate` both `throw` errors in true Swift fashion.\n\nIf you do the above, you can then write Swift code that uses `FMDatabase`. For example, as of Swift 3:\n\n```swift\nlet fileURL = try! FileManager.default\n    .url(for: .applicationSupportDirectory, in: .userDomainMask, appropriateFor: nil, create: true)\n    .appendingPathComponent(\"test.sqlite\")\n\nlet database = FMDatabase(url: fileURL)\n\nguard database.open() else {\n    print(\"Unable to open database\")\n    return\n}\n\ndo {\n    try database.executeUpdate(\"create table test(x text, y text, z text)\", values: nil)\n    try database.executeUpdate(\"insert into test (x, y, z) values (?, ?, ?)\", values: [\"a\", \"b\", \"c\"])\n    try database.executeUpdate(\"insert into test (x, y, z) values (?, ?, ?)\", values: [\"e\", \"f\", \"g\"])\n\n    let rs = try database.executeQuery(\"select x, y, z from test\", values: nil)\n    while rs.next() {\n        if let x = rs.string(forColumn: \"x\"), let y = rs.string(forColumn: \"y\"), let z = rs.string(forColumn: \"z\") {\n            print(\"x = \\(x); y = \\(y); z = \\(z)\")\n        }\n    }\n} catch {\n    print(\"failed: \\(error.localizedDescription)\")\n}\n\ndatabase.close()\n```\n\n## History\n\nThe history and changes are availbe on its [GitHub page](https://github.com/ccgus/fmdb) and are summarized in the \"CHANGES_AND_TODO_LIST.txt\" file.\n\n## Contributors\n\nThe contributors to FMDB are contained in the \"Contributors.txt\" file.\n\n## Additional projects using FMDB, which might be interesting to the discerning developer.\n\n * FMDBMigrationManager, A SQLite schema migration management system for FMDB: https://github.com/layerhq/FMDBMigrationManager\n * FCModel, An alternative to Core Data for people who like having direct SQL access: https://github.com/marcoarment/FCModel\n\n## Quick notes on FMDB's coding style\n\nSpaces, not tabs.  Square brackets, not dot notation.  Look at what FMDB already does with curly brackets and such, and stick to that style.\n\n## Reporting bugs\n\nReduce your bug down to the smallest amount of code possible.  You want to make it super easy for the developers to see and reproduce your bug.  If it helps, pretend that the person who can fix your bug is active on shipping 3 major products, works on a handful of open source projects, has a newborn baby, and is generally very very busy.\n\nAnd we've even added a template function to main.m (FMDBReportABugFunction) in the FMDB distribution to help you out:\n\n* Open up fmdb project in Xcode.\n* Open up main.m and modify the FMDBReportABugFunction to reproduce your bug.\n    * Setup your table(s) in the code.\n    * Make your query or update(s).\n    * Add some assertions which demonstrate the bug.\n\nThen you can bring it up on the FMDB mailing list by showing your nice and compact FMDBReportABugFunction, or you can report the bug via the github FMDB bug reporter.\n\n**Optional:**\n\nFigure out where the bug is, fix it, and send a patch in or bring that up on the mailing list.  Make sure all the other tests run after your modifications.\n\n## Support\n\nThe support channels for FMDB are the mailing list (see above), filing a bug here, or maybe on Stack Overflow.  So that is to say, support is provided by the community and on a voluntary basis.\n\nFMDB development is overseen by Gus Mueller of Flying Meat.  If FMDB been helpful to you, consider purchasing an app from FM or telling all your friends about it.\n\n## License\n\nThe license for FMDB is contained in the \"License.txt\" file.\n\nIf you happen to come across either Gus Mueller or Rob Ryan in a bar, you might consider purchasing a drink of their choosing if FMDB has been useful to you.\n\n(The drink is for them of course, shame on you for trying to keep it.)\n"
  },
  {
    "path": "native/ios/WatermelonDB/FMDB/src/fmdb/FMDB.h",
    "content": "#import <Foundation/Foundation.h>\n\nFOUNDATION_EXPORT double FMDBVersionNumber;\nFOUNDATION_EXPORT const unsigned char FMDBVersionString[];\n\n#import \"FMDatabase.h\"\n#import \"FMResultSet.h\"\n#import \"FMDatabaseAdditions.h\"\n#import \"FMDatabaseQueue.h\"\n#import \"FMDatabasePool.h\"\n"
  },
  {
    "path": "native/ios/WatermelonDB/FMDB/src/fmdb/FMDatabase.h",
    "content": "#import <Foundation/Foundation.h>\n#import \"FMResultSet.h\"\n#import \"FMDatabasePool.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n\n#if ! __has_feature(objc_arc)\n    #define FMDBAutorelease(__v) ([__v autorelease]);\n    #define FMDBReturnAutoreleased FMDBAutorelease\n\n    #define FMDBRetain(__v) ([__v retain]);\n    #define FMDBReturnRetained FMDBRetain\n\n    #define FMDBRelease(__v) ([__v release]);\n\n    #define FMDBDispatchQueueRelease(__v) (dispatch_release(__v));\n#else\n    // -fobjc-arc\n    #define FMDBAutorelease(__v)\n    #define FMDBReturnAutoreleased(__v) (__v)\n\n    #define FMDBRetain(__v)\n    #define FMDBReturnRetained(__v) (__v)\n\n    #define FMDBRelease(__v)\n\n// If OS_OBJECT_USE_OBJC=1, then the dispatch objects will be treated like ObjC objects\n// and will participate in ARC.\n// See the section on \"Dispatch Queues and Automatic Reference Counting\" in \"Grand Central Dispatch (GCD) Reference\" for details. \n    #if OS_OBJECT_USE_OBJC\n        #define FMDBDispatchQueueRelease(__v)\n    #else\n        #define FMDBDispatchQueueRelease(__v) (dispatch_release(__v));\n    #endif\n#endif\n\n#if !__has_feature(objc_instancetype)\n    #define instancetype id\n#endif\n\n\ntypedef int(^FMDBExecuteStatementsCallbackBlock)(NSDictionary *resultsDictionary);\n\ntypedef NS_ENUM(int, FMDBCheckpointMode) {\n    FMDBCheckpointModePassive  = 0, // SQLITE_CHECKPOINT_PASSIVE,\n    FMDBCheckpointModeFull     = 1, // SQLITE_CHECKPOINT_FULL,\n    FMDBCheckpointModeRestart  = 2, // SQLITE_CHECKPOINT_RESTART,\n    FMDBCheckpointModeTruncate = 3  // SQLITE_CHECKPOINT_TRUNCATE\n};\n\n/** A SQLite ([http://sqlite.org/](http://sqlite.org/)) Objective-C wrapper.\n \n ### Usage\n The three main classes in FMDB are:\n\n - `FMDatabase` - Represents a single SQLite database.  Used for executing SQL statements.\n - `<FMResultSet>` - Represents the results of executing a query on an `FMDatabase`.\n - `<FMDatabaseQueue>` - If you want to perform queries and updates on multiple threads, you'll want to use this class.\n\n ### See also\n \n - `<FMDatabasePool>` - A pool of `FMDatabase` objects.\n - `<FMStatement>` - A wrapper for `sqlite_stmt`.\n \n ### External links\n \n - [FMDB on GitHub](https://github.com/ccgus/fmdb) including introductory documentation\n - [SQLite web site](http://sqlite.org/)\n - [FMDB mailing list](http://groups.google.com/group/fmdb)\n - [SQLite FAQ](http://www.sqlite.org/faq.html)\n \n @warning Do not instantiate a single `FMDatabase` object and use it across multiple threads. Instead, use `<FMDatabaseQueue>`.\n\n */\n\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wobjc-interface-ivars\"\n\n\n@interface FMDatabase : NSObject\n\n///-----------------\n/// @name Properties\n///-----------------\n\n/** Whether should trace execution */\n\n@property (atomic, assign) BOOL traceExecution;\n\n/** Whether checked out or not */\n\n@property (atomic, assign) BOOL checkedOut;\n\n/** Crash on errors */\n\n@property (atomic, assign) BOOL crashOnErrors;\n\n/** Logs errors */\n\n@property (atomic, assign) BOOL logsErrors;\n\n/** Dictionary of cached statements */\n\n@property (atomic, retain, nullable) NSMutableDictionary *cachedStatements;\n\n///---------------------\n/// @name Initialization\n///---------------------\n\n/** Create a `FMDatabase` object.\n \n An `FMDatabase` is created with a path to a SQLite database file.  This path can be one of these three:\n\n 1. A file system path.  The file does not have to exist on disk.  If it does not exist, it is created for you.\n 2. An empty string (`@\"\"`).  An empty database is created at a temporary location.  This database is deleted with the `FMDatabase` connection is closed.\n 3. `nil`.  An in-memory database is created.  This database will be destroyed with the `FMDatabase` connection is closed.\n\n For example, to create/open a database in your Mac OS X `tmp` folder:\n\n    FMDatabase *db = [FMDatabase databaseWithPath:@\"/tmp/tmp.db\"];\n\n Or, in iOS, you might open a database in the app's `Documents` directory:\n\n    NSString *docsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];\n    NSString *dbPath   = [docsPath stringByAppendingPathComponent:@\"test.db\"];\n    FMDatabase *db     = [FMDatabase databaseWithPath:dbPath];\n\n (For more information on temporary and in-memory databases, read the sqlite documentation on the subject: [http://www.sqlite.org/inmemorydb.html](http://www.sqlite.org/inmemorydb.html))\n\n @param inPath Path of database file\n\n @return `FMDatabase` object if successful; `nil` if failure.\n\n */\n\n+ (instancetype)databaseWithPath:(NSString * _Nullable)inPath;\n\n/** Create a `FMDatabase` object.\n \n An `FMDatabase` is created with a path to a SQLite database file.  This path can be one of these three:\n \n 1. A file system URL.  The file does not have to exist on disk.  If it does not exist, it is created for you.\n 2. `nil`.  An in-memory database is created.  This database will be destroyed with the `FMDatabase` connection is closed.\n \n For example, to create/open a database in your Mac OS X `tmp` folder:\n \n    FMDatabase *db = [FMDatabase databaseWithPath:@\"/tmp/tmp.db\"];\n \n Or, in iOS, you might open a database in the app's `Documents` directory:\n \n    NSString *docsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];\n    NSString *dbPath   = [docsPath stringByAppendingPathComponent:@\"test.db\"];\n    FMDatabase *db     = [FMDatabase databaseWithPath:dbPath];\n \n (For more information on temporary and in-memory databases, read the sqlite documentation on the subject: [http://www.sqlite.org/inmemorydb.html](http://www.sqlite.org/inmemorydb.html))\n \n @param url The local file URL (not remote URL) of database file\n \n @return `FMDatabase` object if successful; `nil` if failure.\n \n */\n\n+ (instancetype)databaseWithURL:(NSURL * _Nullable)url;\n\n/** Initialize a `FMDatabase` object.\n \n An `FMDatabase` is created with a path to a SQLite database file.  This path can be one of these three:\n\n 1. A file system path.  The file does not have to exist on disk.  If it does not exist, it is created for you.\n 2. An empty string (`@\"\"`).  An empty database is created at a temporary location.  This database is deleted with the `FMDatabase` connection is closed.\n 3. `nil`.  An in-memory database is created.  This database will be destroyed with the `FMDatabase` connection is closed.\n\n For example, to create/open a database in your Mac OS X `tmp` folder:\n\n    FMDatabase *db = [FMDatabase databaseWithPath:@\"/tmp/tmp.db\"];\n\n Or, in iOS, you might open a database in the app's `Documents` directory:\n\n    NSString *docsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];\n    NSString *dbPath   = [docsPath stringByAppendingPathComponent:@\"test.db\"];\n    FMDatabase *db     = [FMDatabase databaseWithPath:dbPath];\n\n (For more information on temporary and in-memory databases, read the sqlite documentation on the subject: [http://www.sqlite.org/inmemorydb.html](http://www.sqlite.org/inmemorydb.html))\n\n @param path Path of database file.\n \n @return `FMDatabase` object if successful; `nil` if failure.\n\n */\n\n- (instancetype)initWithPath:(NSString * _Nullable)path;\n\n/** Initialize a `FMDatabase` object.\n \n An `FMDatabase` is created with a local file URL to a SQLite database file.  This path can be one of these three:\n \n 1. A file system URL.  The file does not have to exist on disk.  If it does not exist, it is created for you.\n 2. `nil`.  An in-memory database is created.  This database will be destroyed with the `FMDatabase` connection is closed.\n \n For example, to create/open a database in your Mac OS X `tmp` folder:\n \n FMDatabase *db = [FMDatabase databaseWithPath:@\"/tmp/tmp.db\"];\n \n Or, in iOS, you might open a database in the app's `Documents` directory:\n \n NSString *docsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];\n NSString *dbPath   = [docsPath stringByAppendingPathComponent:@\"test.db\"];\n FMDatabase *db     = [FMDatabase databaseWithPath:dbPath];\n \n (For more information on temporary and in-memory databases, read the sqlite documentation on the subject: [http://www.sqlite.org/inmemorydb.html](http://www.sqlite.org/inmemorydb.html))\n \n @param url The file `NSURL` of database file.\n \n @return `FMDatabase` object if successful; `nil` if failure.\n \n */\n\n- (instancetype)initWithURL:(NSURL * _Nullable)url;\n\n///-----------------------------------\n/// @name Opening and closing database\n///-----------------------------------\n\n/// Is the database open or not?\n\n@property (nonatomic) BOOL isOpen;\n\n/** Opening a new database connection\n \n The database is opened for reading and writing, and is created if it does not already exist.\n\n @return `YES` if successful, `NO` on error.\n\n @see [sqlite3_open()](http://sqlite.org/c3ref/open.html)\n @see openWithFlags:\n @see close\n */\n\n- (BOOL)open;\n\n/** Opening a new database connection with flags and an optional virtual file system (VFS)\n\n @param flags one of the following three values, optionally combined with the `SQLITE_OPEN_NOMUTEX`, `SQLITE_OPEN_FULLMUTEX`, `SQLITE_OPEN_SHAREDCACHE`, `SQLITE_OPEN_PRIVATECACHE`, and/or `SQLITE_OPEN_URI` flags:\n\n `SQLITE_OPEN_READONLY`\n\n The database is opened in read-only mode. If the database does not already exist, an error is returned.\n \n `SQLITE_OPEN_READWRITE`\n \n The database is opened for reading and writing if possible, or reading only if the file is write protected by the operating system. In either case the database must already exist, otherwise an error is returned.\n \n `SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE`\n \n The database is opened for reading and writing, and is created if it does not already exist. This is the behavior that is always used for `open` method.\n  \n @return `YES` if successful, `NO` on error.\n\n @see [sqlite3_open_v2()](http://sqlite.org/c3ref/open.html)\n @see open\n @see close\n */\n\n- (BOOL)openWithFlags:(int)flags;\n\n/** Opening a new database connection with flags and an optional virtual file system (VFS)\n \n @param flags one of the following three values, optionally combined with the `SQLITE_OPEN_NOMUTEX`, `SQLITE_OPEN_FULLMUTEX`, `SQLITE_OPEN_SHAREDCACHE`, `SQLITE_OPEN_PRIVATECACHE`, and/or `SQLITE_OPEN_URI` flags:\n \n `SQLITE_OPEN_READONLY`\n \n The database is opened in read-only mode. If the database does not already exist, an error is returned.\n \n `SQLITE_OPEN_READWRITE`\n \n The database is opened for reading and writing if possible, or reading only if the file is write protected by the operating system. In either case the database must already exist, otherwise an error is returned.\n \n `SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE`\n \n The database is opened for reading and writing, and is created if it does not already exist. This is the behavior that is always used for `open` method.\n \n @param vfsName   If vfs is given the value is passed to the vfs parameter of sqlite3_open_v2.\n \n @return `YES` if successful, `NO` on error.\n \n @see [sqlite3_open_v2()](http://sqlite.org/c3ref/open.html)\n @see open\n @see close\n */\n\n- (BOOL)openWithFlags:(int)flags vfs:(NSString * _Nullable)vfsName;\n\n/** Closing a database connection\n \n @return `YES` if success, `NO` on error.\n \n @see [sqlite3_close()](http://sqlite.org/c3ref/close.html)\n @see open\n @see openWithFlags:\n */\n\n- (BOOL)close;\n\n/** Test to see if we have a good connection to the database.\n \n This will confirm whether:\n \n - is database open\n - if open, it will try a simple SELECT statement and confirm that it succeeds.\n\n @return `YES` if everything succeeds, `NO` on failure.\n */\n\n@property (nonatomic, readonly) BOOL goodConnection;\n\n\n///----------------------\n/// @name Perform updates\n///----------------------\n\n/** Execute single update statement\n \n This method executes a single SQL update statement (i.e. any SQL that does not return results, such as `UPDATE`, `INSERT`, or `DELETE`. This method employs [`sqlite3_prepare_v2`](http://sqlite.org/c3ref/prepare.html), [`sqlite3_bind`](http://sqlite.org/c3ref/bind_blob.html) to bind values to `?` placeholders in the SQL with the optional list of parameters, and [`sqlite_step`](http://sqlite.org/c3ref/step.html) to perform the update.\n\n The optional values provided to this method should be objects (e.g. `NSString`, `NSNumber`, `NSNull`, `NSDate`, and `NSData` objects), not fundamental data types (e.g. `int`, `long`, `NSInteger`, etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object's `description` method.\n\n @param sql The SQL to be performed, with optional `?` placeholders.\n \n @param outErr A reference to the `NSError` pointer to be updated with an auto released `NSError` object if an error if an error occurs. If `nil`, no `NSError` object will be returned.\n \n @param ... Optional parameters to bind to `?` placeholders in the SQL statement. These should be Objective-C objects (e.g. `NSString`, `NSNumber`, etc.), not fundamental C data types (e.g. `int`, `char *`, etc.).\n\n @return `YES` upon success; `NO` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.\n\n @see lastError\n @see lastErrorCode\n @see lastErrorMessage\n @see [`sqlite3_bind`](http://sqlite.org/c3ref/bind_blob.html)\n */\n\n- (BOOL)executeUpdate:(NSString*)sql withErrorAndBindings:(NSError * _Nullable *)outErr, ...;\n\n/** Execute single update statement\n \n @see executeUpdate:withErrorAndBindings:\n \n @warning **Deprecated**: Please use `<executeUpdate:withErrorAndBindings>` instead.\n */\n\n- (BOOL)update:(NSString*)sql withErrorAndBindings:(NSError * _Nullable*)outErr, ...  __deprecated_msg(\"Use executeUpdate:withErrorAndBindings: instead\");;\n\n/** Execute single update statement\n\n This method executes a single SQL update statement (i.e. any SQL that does not return results, such as `UPDATE`, `INSERT`, or `DELETE`. This method employs [`sqlite3_prepare_v2`](http://sqlite.org/c3ref/prepare.html), [`sqlite3_bind`](http://sqlite.org/c3ref/bind_blob.html) to bind values to `?` placeholders in the SQL with the optional list of parameters, and [`sqlite_step`](http://sqlite.org/c3ref/step.html) to perform the update.\n\n The optional values provided to this method should be objects (e.g. `NSString`, `NSNumber`, `NSNull`, `NSDate`, and `NSData` objects), not fundamental data types (e.g. `int`, `long`, `NSInteger`, etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object's `description` method.\n \n @param sql The SQL to be performed, with optional `?` placeholders.\n\n @param ... Optional parameters to bind to `?` placeholders in the SQL statement. These should be Objective-C objects (e.g. `NSString`, `NSNumber`, etc.), not fundamental C data types (e.g. `int`, `char *`, etc.).\n\n @return `YES` upon success; `NO` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.\n \n @see lastError\n @see lastErrorCode\n @see lastErrorMessage\n @see [`sqlite3_bind`](http://sqlite.org/c3ref/bind_blob.html)\n \n @note This technique supports the use of `?` placeholders in the SQL, automatically binding any supplied value parameters to those placeholders. This approach is more robust than techniques that entail using `stringWithFormat` to manually build SQL statements, which can be problematic if the values happened to include any characters that needed to be quoted.\n \n @note You cannot use this method from Swift due to incompatibilities between Swift and Objective-C variadic implementations. Consider using `<executeUpdate:values:>` instead.\n */\n\n- (BOOL)executeUpdate:(NSString*)sql, ...;\n\n/** Execute single update statement\n\n This method executes a single SQL update statement (i.e. any SQL that does not return results, such as `UPDATE`, `INSERT`, or `DELETE`. This method employs [`sqlite3_prepare_v2`](http://sqlite.org/c3ref/prepare.html) and [`sqlite_step`](http://sqlite.org/c3ref/step.html) to perform the update. Unlike the other `executeUpdate` methods, this uses printf-style formatters (e.g. `%s`, `%d`, etc.) to build the SQL. Do not use `?` placeholders in the SQL if you use this method.\n\n @param format The SQL to be performed, with `printf`-style escape sequences.\n\n @param ... Optional parameters to bind to use in conjunction with the `printf`-style escape sequences in the SQL statement.\n\n @return `YES` upon success; `NO` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.\n\n @see executeUpdate:\n @see lastError\n @see lastErrorCode\n @see lastErrorMessage\n \n @note This method does not technically perform a traditional printf-style replacement. What this method actually does is replace the printf-style percent sequences with a SQLite `?` placeholder, and then bind values to that placeholder. Thus the following command\n\n    [db executeUpdateWithFormat:@\"INSERT INTO test (name) VALUES (%@)\", @\"Gus\"];\n\n is actually replacing the `%@` with `?` placeholder, and then performing something equivalent to `<executeUpdate:>`\n\n    [db executeUpdate:@\"INSERT INTO test (name) VALUES (?)\", @\"Gus\"];\n\n There are two reasons why this distinction is important. First, the printf-style escape sequences can only be used where it is permissible to use a SQLite `?` placeholder. You can use it only for values in SQL statements, but not for table names or column names or any other non-value context. This method also cannot be used in conjunction with `pragma` statements and the like. Second, note the lack of quotation marks in the SQL. The `VALUES` clause was _not_ `VALUES ('%@')` (like you might have to do if you built a SQL statement using `NSString` method `stringWithFormat`), but rather simply `VALUES (%@)`.\n */\n\n- (BOOL)executeUpdateWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2);\n\n/** Execute single update statement\n \n This method executes a single SQL update statement (i.e. any SQL that does not return results, such as `UPDATE`, `INSERT`, or `DELETE`. This method employs [`sqlite3_prepare_v2`](http://sqlite.org/c3ref/prepare.html) and [`sqlite3_bind`](http://sqlite.org/c3ref/bind_blob.html) binding any `?` placeholders in the SQL with the optional list of parameters.\n \n The optional values provided to this method should be objects (e.g. `NSString`, `NSNumber`, `NSNull`, `NSDate`, and `NSData` objects), not fundamental data types (e.g. `int`, `long`, `NSInteger`, etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object's `description` method.\n \n @param sql The SQL to be performed, with optional `?` placeholders.\n \n @param arguments A `NSArray` of objects to be used when binding values to the `?` placeholders in the SQL statement.\n \n @return `YES` upon success; `NO` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.\n \n @see executeUpdate:values:error:\n @see lastError\n @see lastErrorCode\n @see lastErrorMessage\n */\n\n- (BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments;\n\n/** Execute single update statement\n \n This method executes a single SQL update statement (i.e. any SQL that does not return results, such as `UPDATE`, `INSERT`, or `DELETE`. This method employs [`sqlite3_prepare_v2`](http://sqlite.org/c3ref/prepare.html) and [`sqlite3_bind`](http://sqlite.org/c3ref/bind_blob.html) binding any `?` placeholders in the SQL with the optional list of parameters.\n \n The optional values provided to this method should be objects (e.g. `NSString`, `NSNumber`, `NSNull`, `NSDate`, and `NSData` objects), not fundamental data types (e.g. `int`, `long`, `NSInteger`, etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object's `description` method.\n \n This is similar to `<executeUpdate:withArgumentsInArray:>`, except that this also accepts a pointer to a `NSError` pointer, so that errors can be returned.\n\n In Swift, this throws errors, as if it were defined as follows:\n \n `func executeUpdate(sql: String, values: [Any]?) throws -> Bool`\n \n @param sql The SQL to be performed, with optional `?` placeholders.\n \n @param values A `NSArray` of objects to be used when binding values to the `?` placeholders in the SQL statement.\n\n @param error A `NSError` object to receive any error object (if any).\n\n @return `YES` upon success; `NO` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.\n \n @see lastError\n @see lastErrorCode\n @see lastErrorMessage\n \n */\n\n- (BOOL)executeUpdate:(NSString*)sql values:(NSArray * _Nullable)values error:(NSError * _Nullable __autoreleasing *)error;\n\n/** Execute single update statement\n\n This method executes a single SQL update statement (i.e. any SQL that does not return results, such as `UPDATE`, `INSERT`, or `DELETE`. This method employs [`sqlite3_prepare_v2`](http://sqlite.org/c3ref/prepare.html) and [`sqlite_step`](http://sqlite.org/c3ref/step.html) to perform the update. Unlike the other `executeUpdate` methods, this uses printf-style formatters (e.g. `%s`, `%d`, etc.) to build the SQL.\n\n The optional values provided to this method should be objects (e.g. `NSString`, `NSNumber`, `NSNull`, `NSDate`, and `NSData` objects), not fundamental data types (e.g. `int`, `long`, `NSInteger`, etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object's `description` method.\n\n @param sql The SQL to be performed, with optional `?` placeholders.\n\n @param arguments A `NSDictionary` of objects keyed by column names that will be used when binding values to the `?` placeholders in the SQL statement.\n\n @return `YES` upon success; `NO` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.\n\n @see lastError\n @see lastErrorCode\n @see lastErrorMessage\n*/\n\n- (BOOL)executeUpdate:(NSString*)sql withParameterDictionary:(NSDictionary *)arguments;\n\n\n/** Execute single update statement\n\n This method executes a single SQL update statement (i.e. any SQL that does not return results, such as `UPDATE`, `INSERT`, or `DELETE`. This method employs [`sqlite3_prepare_v2`](http://sqlite.org/c3ref/prepare.html) and [`sqlite_step`](http://sqlite.org/c3ref/step.html) to perform the update. Unlike the other `executeUpdate` methods, this uses printf-style formatters (e.g. `%s`, `%d`, etc.) to build the SQL.\n\n The optional values provided to this method should be objects (e.g. `NSString`, `NSNumber`, `NSNull`, `NSDate`, and `NSData` objects), not fundamental data types (e.g. `int`, `long`, `NSInteger`, etc.). This method automatically handles the aforementioned object types, and all other object types will be interpreted as text values using the object's `description` method.\n\n @param sql The SQL to be performed, with optional `?` placeholders.\n\n @param args A `va_list` of arguments.\n\n @return `YES` upon success; `NO` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.\n\n @see lastError\n @see lastErrorCode\n @see lastErrorMessage\n */\n\n- (BOOL)executeUpdate:(NSString*)sql withVAList: (va_list)args;\n\n/** Execute multiple SQL statements\n \n This executes a series of SQL statements that are combined in a single string (e.g. the SQL generated by the `sqlite3` command line `.dump` command). This accepts no value parameters, but rather simply expects a single string with multiple SQL statements, each terminated with a semicolon. This uses `sqlite3_exec`. \n\n @param  sql  The SQL to be performed\n \n @return      `YES` upon success; `NO` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.\n\n @see executeStatements:withResultBlock:\n @see [sqlite3_exec()](http://sqlite.org/c3ref/exec.html)\n\n */\n\n- (BOOL)executeStatements:(NSString *)sql;\n\n/** Execute multiple SQL statements with callback handler\n \n This executes a series of SQL statements that are combined in a single string (e.g. the SQL generated by the `sqlite3` command line `.dump` command). This accepts no value parameters, but rather simply expects a single string with multiple SQL statements, each terminated with a semicolon. This uses `sqlite3_exec`.\n\n @param sql       The SQL to be performed.\n @param block     A block that will be called for any result sets returned by any SQL statements. \n                  Note, if you supply this block, it must return integer value, zero upon success (this would be a good opportunity to use SQLITE_OK),\n                  non-zero value upon failure (which will stop the bulk execution of the SQL).  If a statement returns values, the block will be called with the results from the query in NSDictionary *resultsDictionary.\n                  This may be `nil` if you don't care to receive any results.\n\n @return          `YES` upon success; `NO` upon failure. If failed, you can call `<lastError>`,\n                  `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.\n \n @see executeStatements:\n @see [sqlite3_exec()](http://sqlite.org/c3ref/exec.html)\n\n */\n\n- (BOOL)executeStatements:(NSString *)sql withResultBlock:(__attribute__((noescape)) FMDBExecuteStatementsCallbackBlock _Nullable)block;\n\n/** Last insert rowid\n \n Each entry in an SQLite table has a unique 64-bit signed integer key called the \"rowid\". The rowid is always available as an undeclared column named `ROWID`, `OID`, or `_ROWID_` as long as those names are not also used by explicitly declared columns. If the table has a column of type `INTEGER PRIMARY KEY` then that column is another alias for the rowid.\n \n This routine returns the rowid of the most recent successful `INSERT` into the database from the database connection in the first argument. As of SQLite version 3.7.7, this routines records the last insert rowid of both ordinary tables and virtual tables. If no successful `INSERT`s have ever occurred on that database connection, zero is returned.\n \n @return The rowid of the last inserted row.\n \n @see [sqlite3_last_insert_rowid()](http://sqlite.org/c3ref/last_insert_rowid.html)\n\n */\n\n@property (nonatomic, readonly) int64_t lastInsertRowId;\n\n/** The number of rows changed by prior SQL statement.\n \n This function returns the number of database rows that were changed or inserted or deleted by the most recently completed SQL statement on the database connection specified by the first parameter. Only changes that are directly specified by the INSERT, UPDATE, or DELETE statement are counted.\n \n @return The number of rows changed by prior SQL statement.\n \n @see [sqlite3_changes()](http://sqlite.org/c3ref/changes.html)\n \n */\n\n@property (nonatomic, readonly) int changes;\n\n\n///-------------------------\n/// @name Retrieving results\n///-------------------------\n\n/** Execute select statement\n\n Executing queries returns an `<FMResultSet>` object if successful, and `nil` upon failure.  Like executing updates, there is a variant that accepts an `NSError **` parameter.  Otherwise you should use the `<lastErrorMessage>` and `<lastErrorMessage>` methods to determine why a query failed.\n \n In order to iterate through the results of your query, you use a `while()` loop.  You also need to \"step\" (via `<[FMResultSet next]>`) from one record to the other.\n \n This method employs [`sqlite3_bind`](http://sqlite.org/c3ref/bind_blob.html) for any optional value parameters. This  properly escapes any characters that need escape sequences (e.g. quotation marks), which eliminates simple SQL errors as well as protects against SQL injection attacks. This method natively handles `NSString`, `NSNumber`, `NSNull`, `NSDate`, and `NSData` objects. All other object types will be interpreted as text values using the object's `description` method.\n\n @param sql The SELECT statement to be performed, with optional `?` placeholders.\n\n @param ... Optional parameters to bind to `?` placeholders in the SQL statement. These should be Objective-C objects (e.g. `NSString`, `NSNumber`, etc.), not fundamental C data types (e.g. `int`, `char *`, etc.).\n\n @return A `<FMResultSet>` for the result set upon success; `nil` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.\n \n @see FMResultSet\n @see [`FMResultSet next`](<[FMResultSet next]>)\n @see [`sqlite3_bind`](http://sqlite.org/c3ref/bind_blob.html)\n \n @note You cannot use this method from Swift due to incompatibilities between Swift and Objective-C variadic implementations. Consider using `<executeQuery:values:>` instead.\n */\n\n- (FMResultSet * _Nullable)executeQuery:(NSString*)sql, ...;\n\n/** Execute select statement\n\n Executing queries returns an `<FMResultSet>` object if successful, and `nil` upon failure.  Like executing updates, there is a variant that accepts an `NSError **` parameter.  Otherwise you should use the `<lastErrorMessage>` and `<lastErrorMessage>` methods to determine why a query failed.\n \n In order to iterate through the results of your query, you use a `while()` loop.  You also need to \"step\" (via `<[FMResultSet next]>`) from one record to the other.\n \n @param format The SQL to be performed, with `printf`-style escape sequences.\n\n @param ... Optional parameters to bind to use in conjunction with the `printf`-style escape sequences in the SQL statement.\n\n @return A `<FMResultSet>` for the result set upon success; `nil` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.\n\n @see executeQuery:\n @see FMResultSet\n @see [`FMResultSet next`](<[FMResultSet next]>)\n\n @note This method does not technically perform a traditional printf-style replacement. What this method actually does is replace the printf-style percent sequences with a SQLite `?` placeholder, and then bind values to that placeholder. Thus the following command\n \n    [db executeQueryWithFormat:@\"SELECT * FROM test WHERE name=%@\", @\"Gus\"];\n \n is actually replacing the `%@` with `?` placeholder, and then performing something equivalent to `<executeQuery:>`\n \n    [db executeQuery:@\"SELECT * FROM test WHERE name=?\", @\"Gus\"];\n \n There are two reasons why this distinction is important. First, the printf-style escape sequences can only be used where it is permissible to use a SQLite `?` placeholder. You can use it only for values in SQL statements, but not for table names or column names or any other non-value context. This method also cannot be used in conjunction with `pragma` statements and the like. Second, note the lack of quotation marks in the SQL. The `WHERE` clause was _not_ `WHERE name='%@'` (like you might have to do if you built a SQL statement using `NSString` method `stringWithFormat`), but rather simply `WHERE name=%@`.\n \n */\n\n- (FMResultSet * _Nullable)executeQueryWithFormat:(NSString*)format, ... NS_FORMAT_FUNCTION(1,2);\n\n/** Execute select statement\n\n Executing queries returns an `<FMResultSet>` object if successful, and `nil` upon failure.  Like executing updates, there is a variant that accepts an `NSError **` parameter.  Otherwise you should use the `<lastErrorMessage>` and `<lastErrorMessage>` methods to determine why a query failed.\n \n In order to iterate through the results of your query, you use a `while()` loop.  You also need to \"step\" (via `<[FMResultSet next]>`) from one record to the other.\n \n @param sql The SELECT statement to be performed, with optional `?` placeholders.\n\n @param arguments A `NSArray` of objects to be used when binding values to the `?` placeholders in the SQL statement.\n\n @return A `<FMResultSet>` for the result set upon success; `nil` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.\n\n @see -executeQuery:values:error:\n @see FMResultSet\n @see [`FMResultSet next`](<[FMResultSet next]>)\n */\n\n- (FMResultSet * _Nullable)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)arguments;\n\n/** Execute select statement\n \n Executing queries returns an `<FMResultSet>` object if successful, and `nil` upon failure.  Like executing updates, there is a variant that accepts an `NSError **` parameter.  Otherwise you should use the `<lastErrorMessage>` and `<lastErrorMessage>` methods to determine why a query failed.\n \n In order to iterate through the results of your query, you use a `while()` loop.  You also need to \"step\" (via `<[FMResultSet next]>`) from one record to the other.\n \n This is similar to `<executeQuery:withArgumentsInArray:>`, except that this also accepts a pointer to a `NSError` pointer, so that errors can be returned.\n \n In Swift, this throws errors, as if it were defined as follows:\n \n `func executeQuery(sql: String, values: [Any]?) throws  -> FMResultSet!`\n\n @param sql The SELECT statement to be performed, with optional `?` placeholders.\n \n @param values A `NSArray` of objects to be used when binding values to the `?` placeholders in the SQL statement.\n\n @param error A `NSError` object to receive any error object (if any).\n\n @return A `<FMResultSet>` for the result set upon success; `nil` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.\n \n @see FMResultSet\n @see [`FMResultSet next`](<[FMResultSet next]>)\n \n @note When called from Swift, only use the first two parameters, `sql` and `values`. This but throws the error.\n\n */\n\n- (FMResultSet * _Nullable)executeQuery:(NSString *)sql values:(NSArray * _Nullable)values error:(NSError * _Nullable __autoreleasing *)error;\n\n/** Execute select statement\n\n Executing queries returns an `<FMResultSet>` object if successful, and `nil` upon failure.  Like executing updates, there is a variant that accepts an `NSError **` parameter.  Otherwise you should use the `<lastErrorMessage>` and `<lastErrorMessage>` methods to determine why a query failed.\n \n In order to iterate through the results of your query, you use a `while()` loop.  You also need to \"step\" (via `<[FMResultSet next]>`) from one record to the other.\n \n @param sql The SELECT statement to be performed, with optional `?` placeholders.\n\n @param arguments A `NSDictionary` of objects keyed by column names that will be used when binding values to the `?` placeholders in the SQL statement.\n\n @return A `<FMResultSet>` for the result set upon success; `nil` upon failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.\n\n @see FMResultSet\n @see [`FMResultSet next`](<[FMResultSet next]>)\n */\n\n- (FMResultSet * _Nullable)executeQuery:(NSString *)sql withParameterDictionary:(NSDictionary * _Nullable)arguments;\n\n\n// Documentation forthcoming.\n- (FMResultSet * _Nullable)executeQuery:(NSString *)sql withVAList:(va_list)args;\n\n///-------------------\n/// @name Transactions\n///-------------------\n\n/** Begin a transaction\n \n @return `YES` on success; `NO` on failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.\n \n @see commit\n @see rollback\n @see beginDeferredTransaction\n @see isInTransaction\n \n @warning    Unlike SQLite's `BEGIN TRANSACTION`, this method currently performs\n             an exclusive transaction, not a deferred transaction. This behavior\n             is likely to change in future versions of FMDB, whereby this method\n             will likely eventually adopt standard SQLite behavior and perform\n             deferred transactions. If you really need exclusive tranaction, it is\n             recommended that you use `beginExclusiveTransaction`, instead, not\n             only to make your intent explicit, but also to future-proof your code.\n\n */\n\n- (BOOL)beginTransaction;\n\n/** Begin a deferred transaction\n \n @return `YES` on success; `NO` on failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.\n \n @see commit\n @see rollback\n @see beginTransaction\n @see isInTransaction\n */\n\n- (BOOL)beginDeferredTransaction;\n\n/** Begin an immediate transaction\n \n @return `YES` on success; `NO` on failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.\n \n @see commit\n @see rollback\n @see beginTransaction\n @see isInTransaction\n */\n\n- (BOOL)beginImmediateTransaction;\n\n/** Begin an exclusive transaction\n \n @return `YES` on success; `NO` on failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.\n \n @see commit\n @see rollback\n @see beginTransaction\n @see isInTransaction\n */\n\n- (BOOL)beginExclusiveTransaction;\n\n/** Commit a transaction\n\n Commit a transaction that was initiated with either `<beginTransaction>` or with `<beginDeferredTransaction>`.\n \n @return `YES` on success; `NO` on failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.\n \n @see beginTransaction\n @see beginDeferredTransaction\n @see rollback\n @see isInTransaction\n */\n\n- (BOOL)commit;\n\n/** Rollback a transaction\n\n Rollback a transaction that was initiated with either `<beginTransaction>` or with `<beginDeferredTransaction>`.\n\n @return `YES` on success; `NO` on failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.\n \n @see beginTransaction\n @see beginDeferredTransaction\n @see commit\n @see isInTransaction\n */\n\n- (BOOL)rollback;\n\n/** Identify whether currently in a transaction or not\n  \n @see beginTransaction\n @see beginDeferredTransaction\n @see commit\n @see rollback\n */\n\n@property (nonatomic, readonly) BOOL isInTransaction;\n\n- (BOOL)inTransaction __deprecated_msg(\"Use isInTransaction property instead\");\n\n\n///----------------------------------------\n/// @name Cached statements and result sets\n///----------------------------------------\n\n/** Clear cached statements */\n\n- (void)clearCachedStatements;\n\n/** Close all open result sets */\n\n- (void)closeOpenResultSets;\n\n/** Whether database has any open result sets\n \n @return `YES` if there are open result sets; `NO` if not.\n */\n\n@property (nonatomic, readonly) BOOL hasOpenResultSets;\n\n/** Whether should cache statements or not\n  */\n\n@property (nonatomic) BOOL shouldCacheStatements;\n\n/** Interupt pending database operation\n \n This method causes any pending database operation to abort and return at its earliest opportunity\n \n @return `YES` on success; `NO` on failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.\n \n */\n\n- (BOOL)interrupt;\n\n///-------------------------\n/// @name Encryption methods\n///-------------------------\n\n/** Set encryption key.\n \n @param key The key to be used.\n\n @return `YES` if success, `NO` on error.\n\n @see https://www.zetetic.net/sqlcipher/\n \n @warning You need to have purchased the sqlite encryption extensions for this method to work.\n */\n\n- (BOOL)setKey:(NSString*)key;\n\n/** Reset encryption key\n\n @param key The key to be used.\n\n @return `YES` if success, `NO` on error.\n\n @see https://www.zetetic.net/sqlcipher/\n\n @warning You need to have purchased the sqlite encryption extensions for this method to work.\n */\n\n- (BOOL)rekey:(NSString*)key;\n\n/** Set encryption key using `keyData`.\n \n @param keyData The `NSData` to be used.\n\n @return `YES` if success, `NO` on error.\n\n @see https://www.zetetic.net/sqlcipher/\n \n @warning You need to have purchased the sqlite encryption extensions for this method to work.\n */\n\n- (BOOL)setKeyWithData:(NSData *)keyData;\n\n/** Reset encryption key using `keyData`.\n\n @param keyData The `NSData` to be used.\n\n @return `YES` if success, `NO` on error.\n\n @see https://www.zetetic.net/sqlcipher/\n\n @warning You need to have purchased the sqlite encryption extensions for this method to work.\n */\n\n- (BOOL)rekeyWithData:(NSData *)keyData;\n\n\n///------------------------------\n/// @name General inquiry methods\n///------------------------------\n\n/** The path of the database file\n */\n\n@property (nonatomic, readonly, nullable) NSString *databasePath;\n\n/** The file URL of the database file.\n */\n\n@property (nonatomic, readonly, nullable) NSURL *databaseURL;\n\n/** The underlying SQLite handle \n \n @return The `sqlite3` pointer.\n \n */\n\n@property (nonatomic, readonly) void *sqliteHandle;\n\n\n///-----------------------------\n/// @name Retrieving error codes\n///-----------------------------\n\n/** Last error message\n \n Returns the English-language text that describes the most recent failed SQLite API call associated with a database connection. If a prior API call failed but the most recent API call succeeded, this return value is undefined.\n\n @return `NSString` of the last error message.\n \n @see [sqlite3_errmsg()](http://sqlite.org/c3ref/errcode.html)\n @see lastErrorCode\n @see lastError\n \n */\n\n- (NSString*)lastErrorMessage;\n\n/** Last error code\n \n Returns the numeric result code or extended result code for the most recent failed SQLite API call associated with a database connection. If a prior API call failed but the most recent API call succeeded, this return value is undefined.\n \n @return Integer value of the last error code.\n \n @see [sqlite3_errcode()](http://sqlite.org/c3ref/errcode.html)\n @see lastErrorMessage\n @see lastError\n \n */\n\n- (int)lastErrorCode;\n\n/** Last extended error code\n \n Returns the numeric extended result code for the most recent failed SQLite API call associated with a database connection. If a prior API call failed but the most recent API call succeeded, this return value is undefined.\n \n @return Integer value of the last extended error code.\n \n @see [sqlite3_errcode()](http://sqlite.org/c3ref/errcode.html)\n @see [2. Primary Result Codes versus Extended Result Codes](http://sqlite.org/rescode.html#primary_result_codes_versus_extended_result_codes)\n @see [5. Extended Result Code List](http://sqlite.org/rescode.html#extrc)\n @see lastErrorMessage\n @see lastError\n \n */\n\n- (int)lastExtendedErrorCode;\n\n/** Had error\n\n @return `YES` if there was an error, `NO` if no error.\n \n @see lastError\n @see lastErrorCode\n @see lastErrorMessage\n \n */\n\n- (BOOL)hadError;\n\n/** Last error\n\n @return `NSError` representing the last error.\n \n @see lastErrorCode\n @see lastErrorMessage\n \n */\n\n- (NSError *)lastError;\n\n\n// description forthcoming\n@property (nonatomic) NSTimeInterval maxBusyRetryTimeInterval;\n\n\n///------------------\n/// @name Save points\n///------------------\n\n/** Start save point\n \n @param name Name of save point.\n \n @param outErr A `NSError` object to receive any error object (if any).\n \n @return `YES` on success; `NO` on failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.\n \n @see releaseSavePointWithName:error:\n @see rollbackToSavePointWithName:error:\n */\n\n- (BOOL)startSavePointWithName:(NSString*)name error:(NSError * _Nullable *)outErr;\n\n/** Release save point\n\n @param name Name of save point.\n \n @param outErr A `NSError` object to receive any error object (if any).\n \n @return `YES` on success; `NO` on failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.\n\n @see startSavePointWithName:error:\n @see rollbackToSavePointWithName:error:\n \n */\n\n- (BOOL)releaseSavePointWithName:(NSString*)name error:(NSError * _Nullable *)outErr;\n\n/** Roll back to save point\n\n @param name Name of save point.\n @param outErr A `NSError` object to receive any error object (if any).\n \n @return `YES` on success; `NO` on failure. If failed, you can call `<lastError>`, `<lastErrorCode>`, or `<lastErrorMessage>` for diagnostic information regarding the failure.\n \n @see startSavePointWithName:error:\n @see releaseSavePointWithName:error:\n \n */\n\n- (BOOL)rollbackToSavePointWithName:(NSString*)name error:(NSError * _Nullable *)outErr;\n\n/** Start save point\n\n @param block Block of code to perform from within save point.\n \n @return The NSError corresponding to the error, if any. If no error, returns `nil`.\n\n @see startSavePointWithName:error:\n @see releaseSavePointWithName:error:\n @see rollbackToSavePointWithName:error:\n \n */\n\n- (NSError * _Nullable)inSavePoint:(__attribute__((noescape)) void (^)(BOOL *rollback))block;\n\n\n///-----------------\n/// @name Checkpoint\n///-----------------\n\n/** Performs a WAL checkpoint\n \n @param checkpointMode The checkpoint mode for sqlite3_wal_checkpoint_v2\n @param error The NSError corresponding to the error, if any.\n @return YES on success, otherwise NO.\n */\n- (BOOL)checkpoint:(FMDBCheckpointMode)checkpointMode error:(NSError * _Nullable *)error;\n\n/** Performs a WAL checkpoint\n \n @param checkpointMode The checkpoint mode for sqlite3_wal_checkpoint_v2\n @param name The db name for sqlite3_wal_checkpoint_v2\n @param error The NSError corresponding to the error, if any.\n @return YES on success, otherwise NO.\n */\n- (BOOL)checkpoint:(FMDBCheckpointMode)checkpointMode name:(NSString * _Nullable)name error:(NSError * _Nullable *)error;\n\n/** Performs a WAL checkpoint\n \n @param checkpointMode The checkpoint mode for sqlite3_wal_checkpoint_v2\n @param name The db name for sqlite3_wal_checkpoint_v2\n @param error The NSError corresponding to the error, if any.\n @param logFrameCount If not NULL, then this is set to the total number of frames in the log file or to -1 if the checkpoint could not run because of an error or because the database is not in WAL mode.\n @param checkpointCount If not NULL, then this is set to the total number of checkpointed frames in the log file (including any that were already checkpointed before the function was called) or to -1 if the checkpoint could not run due to an error or because the database is not in WAL mode.\n @return YES on success, otherwise NO.\n */\n- (BOOL)checkpoint:(FMDBCheckpointMode)checkpointMode name:(NSString * _Nullable)name logFrameCount:(int * _Nullable)logFrameCount checkpointCount:(int * _Nullable)checkpointCount error:(NSError * _Nullable *)error;\n\n///----------------------------\n/// @name SQLite library status\n///----------------------------\n\n/** Test to see if the library is threadsafe\n\n @return `NO` if and only if SQLite was compiled with mutexing code omitted due to the SQLITE_THREADSAFE compile-time option being set to 0.\n\n @see [sqlite3_threadsafe()](http://sqlite.org/c3ref/threadsafe.html)\n */\n\n+ (BOOL)isSQLiteThreadSafe;\n\n/** Run-time library version numbers\n \n @return The sqlite library version string.\n \n @see [sqlite3_libversion()](http://sqlite.org/c3ref/libversion.html)\n */\n\n+ (NSString*)sqliteLibVersion;\n\n\n+ (NSString*)FMDBUserVersion;\n\n+ (SInt32)FMDBVersion;\n\n\n///------------------------\n/// @name Make SQL function\n///------------------------\n\n/** Adds SQL functions or aggregates or to redefine the behavior of existing SQL functions or aggregates.\n \n For example:\n \n    [db makeFunctionNamed:@\"RemoveDiacritics\" arguments:1 block:^(void *context, int argc, void **argv) {\n        SqliteValueType type = [self.db valueType:argv[0]];\n        if (type == SqliteValueTypeNull) {\n            [self.db resultNullInContext:context];\n             return;\n        }\n        if (type != SqliteValueTypeText) {\n            [self.db resultError:@\"Expected text\" context:context];\n            return;\n        }\n        NSString *string = [self.db valueString:argv[0]];\n        NSString *result = [string stringByFoldingWithOptions:NSDiacriticInsensitiveSearch locale:nil];\n        [self.db resultString:result context:context];\n    }];\n\n    FMResultSet *rs = [db executeQuery:@\"SELECT * FROM employees WHERE RemoveDiacritics(first_name) LIKE 'jose'\"];\n    NSAssert(rs, @\"Error %@\", [db lastErrorMessage]);\n \n @param name Name of function.\n\n @param arguments Maximum number of parameters.\n\n @param block The block of code for the function.\n\n @see [sqlite3_create_function()](http://sqlite.org/c3ref/create_function.html)\n */\n\n- (void)makeFunctionNamed:(NSString *)name arguments:(int)arguments block:(void (^)(void *context, int argc, void * _Nonnull * _Nonnull argv))block;\n\n- (void)makeFunctionNamed:(NSString *)name maximumArguments:(int)count withBlock:(void (^)(void *context, int argc, void * _Nonnull * _Nonnull argv))block __deprecated_msg(\"Use makeFunctionNamed:arguments:block:\");\n\ntypedef NS_ENUM(int, SqliteValueType) {\n    SqliteValueTypeInteger = 1,\n    SqliteValueTypeFloat   = 2,\n    SqliteValueTypeText    = 3,\n    SqliteValueTypeBlob    = 4,\n    SqliteValueTypeNull    = 5\n};\n\n- (SqliteValueType)valueType:(void *)argv;\n\n/**\n Get integer value of parameter in custom function.\n \n @param value The argument whose value to return.\n @return The integer value.\n \n @see makeFunctionNamed:arguments:block:\n */\n- (int)valueInt:(void *)value;\n\n/**\n Get long value of parameter in custom function.\n \n @param value The argument whose value to return.\n @return The long value.\n \n @see makeFunctionNamed:arguments:block:\n */\n- (long long)valueLong:(void *)value;\n\n/**\n Get double value of parameter in custom function.\n \n @param value The argument whose value to return.\n @return The double value.\n \n @see makeFunctionNamed:arguments:block:\n */\n- (double)valueDouble:(void *)value;\n\n/**\n Get `NSData` value of parameter in custom function.\n \n @param value The argument whose value to return.\n @return The data object.\n \n @see makeFunctionNamed:arguments:block:\n */\n- (NSData * _Nullable)valueData:(void *)value;\n\n/**\n Get string value of parameter in custom function.\n \n @param value The argument whose value to return.\n @return The string value.\n \n @see makeFunctionNamed:arguments:block:\n */\n- (NSString * _Nullable)valueString:(void *)value;\n\n/**\n Return null value from custom function.\n \n @param context The context to which the null value will be returned.\n \n @see makeFunctionNamed:arguments:block:\n */\n- (void)resultNullInContext:(void *)context NS_SWIFT_NAME(resultNull(context:));\n\n/**\n Return integer value from custom function.\n \n @param value The integer value to be returned.\n @param context The context to which the value will be returned.\n \n @see makeFunctionNamed:arguments:block:\n */\n- (void)resultInt:(int) value context:(void *)context;\n\n/**\n Return long value from custom function.\n \n @param value The long value to be returned.\n @param context The context to which the value will be returned.\n \n @see makeFunctionNamed:arguments:block:\n */\n- (void)resultLong:(long long)value context:(void *)context;\n\n/**\n Return double value from custom function.\n \n @param value The double value to be returned.\n @param context The context to which the value will be returned.\n \n @see makeFunctionNamed:arguments:block:\n */\n- (void)resultDouble:(double)value context:(void *)context;\n\n/**\n Return `NSData` object from custom function.\n \n @param data The `NSData` object to be returned.\n @param context The context to which the value will be returned.\n \n @see makeFunctionNamed:arguments:block:\n */\n- (void)resultData:(NSData *)data context:(void *)context;\n\n/**\n Return string value from custom function.\n \n @param value The string value to be returned.\n @param context The context to which the value will be returned.\n \n @see makeFunctionNamed:arguments:block:\n */\n- (void)resultString:(NSString *)value context:(void *)context;\n\n/**\n Return error string from custom function.\n \n @param error The error string to be returned.\n @param context The context to which the error will be returned.\n \n @see makeFunctionNamed:arguments:block:\n */\n- (void)resultError:(NSString *)error context:(void *)context;\n\n/**\n Return error code from custom function.\n \n @param errorCode The integer error code to be returned.\n @param context The context to which the error will be returned.\n \n @see makeFunctionNamed:arguments:block:\n */\n- (void)resultErrorCode:(int)errorCode context:(void *)context;\n\n/**\n Report memory error in custom function.\n \n @param context The context to which the error will be returned.\n \n @see makeFunctionNamed:arguments:block:\n */\n- (void)resultErrorNoMemoryInContext:(void *)context NS_SWIFT_NAME(resultErrorNoMemory(context:));\n\n/**\n Report that string or BLOB is too long to represent in custom function.\n \n @param context The context to which the error will be returned.\n \n @see makeFunctionNamed:arguments:block:\n */\n- (void)resultErrorTooBigInContext:(void *)context NS_SWIFT_NAME(resultErrorTooBig(context:));\n\n///---------------------\n/// @name Date formatter\n///---------------------\n\n/** Generate an `NSDateFormatter` that won't be broken by permutations of timezones or locales.\n \n Use this method to generate values to set the dateFormat property.\n \n Example:\n\n    myDB.dateFormat = [FMDatabase storeableDateFormat:@\"yyyy-MM-dd HH:mm:ss\"];\n\n @param format A valid NSDateFormatter format string.\n \n @return A `NSDateFormatter` that can be used for converting dates to strings and vice versa.\n \n @see hasDateFormatter\n @see setDateFormat:\n @see dateFromString:\n @see stringFromDate:\n @see storeableDateFormat:\n\n @warning Note that `NSDateFormatter` is not thread-safe, so the formatter generated by this method should be assigned to only one FMDB instance and should not be used for other purposes.\n\n */\n\n+ (NSDateFormatter *)storeableDateFormat:(NSString *)format;\n\n/** Test whether the database has a date formatter assigned.\n \n @return `YES` if there is a date formatter; `NO` if not.\n \n @see hasDateFormatter\n @see setDateFormat:\n @see dateFromString:\n @see stringFromDate:\n @see storeableDateFormat:\n */\n\n- (BOOL)hasDateFormatter;\n\n/** Set to a date formatter to use string dates with sqlite instead of the default UNIX timestamps.\n \n @param format Set to nil to use UNIX timestamps. Defaults to nil. Should be set using a formatter generated using FMDatabase::storeableDateFormat.\n \n @see hasDateFormatter\n @see setDateFormat:\n @see dateFromString:\n @see stringFromDate:\n @see storeableDateFormat:\n \n @warning Note there is no direct getter for the `NSDateFormatter`, and you should not use the formatter you pass to FMDB for other purposes, as `NSDateFormatter` is not thread-safe.\n */\n\n- (void)setDateFormat:(NSDateFormatter * _Nullable)format;\n\n/** Convert the supplied NSString to NSDate, using the current database formatter.\n \n @param s `NSString` to convert to `NSDate`.\n \n @return The `NSDate` object; or `nil` if no formatter is set.\n \n @see hasDateFormatter\n @see setDateFormat:\n @see dateFromString:\n @see stringFromDate:\n @see storeableDateFormat:\n */\n\n- (NSDate * _Nullable)dateFromString:(NSString *)s;\n\n/** Convert the supplied NSDate to NSString, using the current database formatter.\n \n @param date `NSDate` of date to convert to `NSString`.\n\n @return The `NSString` representation of the date; `nil` if no formatter is set.\n \n @see hasDateFormatter\n @see setDateFormat:\n @see dateFromString:\n @see stringFromDate:\n @see storeableDateFormat:\n */\n\n- (NSString * _Nullable)stringFromDate:(NSDate *)date;\n\n@end\n\n\n/** Objective-C wrapper for `sqlite3_stmt`\n \n This is a wrapper for a SQLite `sqlite3_stmt`. Generally when using FMDB you will not need to interact directly with `FMStatement`, but rather with `<FMDatabase>` and `<FMResultSet>` only.\n \n ### See also\n \n - `<FMDatabase>`\n - `<FMResultSet>`\n - [`sqlite3_stmt`](http://www.sqlite.org/c3ref/stmt.html)\n */\n\n@interface FMStatement : NSObject {\n    void *_statement;\n    NSString *_query;\n    long _useCount;\n    BOOL _inUse;\n}\n\n///-----------------\n/// @name Properties\n///-----------------\n\n/** Usage count */\n\n@property (atomic, assign) long useCount;\n\n/** SQL statement */\n\n@property (atomic, retain) NSString *query;\n\n/** SQLite sqlite3_stmt\n \n @see [`sqlite3_stmt`](http://www.sqlite.org/c3ref/stmt.html)\n */\n\n@property (atomic, assign) void *statement;\n\n/** Indication of whether the statement is in use */\n\n@property (atomic, assign) BOOL inUse;\n\n///----------------------------\n/// @name Closing and Resetting\n///----------------------------\n\n/** Close statement */\n\n- (void)close;\n\n/** Reset statement */\n\n- (void)reset;\n\n@end\n\n#pragma clang diagnostic pop\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/ios/WatermelonDB/FMDB/src/fmdb/FMDatabase.m",
    "content": "#import \"FMDatabase.h\"\n#import <unistd.h>\n#import <objc/runtime.h>\n\n#if FMDB_SQLITE_STANDALONE\n#import <sqlite3/sqlite3.h>\n#else\n#import <sqlite3.h>\n#endif\n\n@interface FMDatabase () {\n    void*               _db;\n    BOOL                _isExecutingStatement;\n    NSTimeInterval      _startBusyRetryTime;\n    \n    NSMutableSet        *_openResultSets;\n    NSMutableSet        *_openFunctions;\n    \n    NSDateFormatter     *_dateFormat;\n}\n\nNS_ASSUME_NONNULL_BEGIN\n\n- (FMResultSet * _Nullable)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray * _Nullable)arrayArgs orDictionary:(NSDictionary * _Nullable)dictionaryArgs orVAList:(va_list)args;\n- (BOOL)executeUpdate:(NSString *)sql error:(NSError * _Nullable *)outErr withArgumentsInArray:(NSArray * _Nullable)arrayArgs orDictionary:(NSDictionary * _Nullable)dictionaryArgs orVAList:(va_list)args;\n\nNS_ASSUME_NONNULL_END\n\n@end\n\n@implementation FMDatabase\n\n// Because these two properties have all of their accessor methods implemented,\n// we have to synthesize them to get the corresponding ivars. The rest of the\n// properties have their ivars synthesized automatically for us.\n\n@synthesize shouldCacheStatements = _shouldCacheStatements;\n@synthesize maxBusyRetryTimeInterval = _maxBusyRetryTimeInterval;\n\n#pragma mark FMDatabase instantiation and deallocation\n\n+ (instancetype)databaseWithPath:(NSString *)aPath {\n    return FMDBReturnAutoreleased([[self alloc] initWithPath:aPath]);\n}\n\n+ (instancetype)databaseWithURL:(NSURL *)url {\n    return FMDBReturnAutoreleased([[self alloc] initWithURL:url]);\n}\n\n- (instancetype)init {\n    return [self initWithPath:nil];\n}\n\n- (instancetype)initWithURL:(NSURL *)url {\n    return [self initWithPath:url.path];\n}\n\n- (instancetype)initWithPath:(NSString *)path {\n    \n    assert(sqlite3_threadsafe()); // whoa there big boy- gotta make sure sqlite it happy with what we're going to do.\n    \n    self = [super init];\n    \n    if (self) {\n        _databasePath               = [path copy];\n        _openResultSets             = [[NSMutableSet alloc] init];\n        _db                         = nil;\n        _logsErrors                 = YES;\n        _crashOnErrors              = NO;\n        _maxBusyRetryTimeInterval   = 2;\n        _isOpen                     = NO;\n    }\n    \n    return self;\n}\n\n#if ! __has_feature(objc_arc)\n- (void)finalize {\n    [self close];\n    [super finalize];\n}\n#endif\n\n- (void)dealloc {\n    [self close];\n    FMDBRelease(_openResultSets);\n    FMDBRelease(_cachedStatements);\n    FMDBRelease(_dateFormat);\n    FMDBRelease(_databasePath);\n    FMDBRelease(_openFunctions);\n    \n#if ! __has_feature(objc_arc)\n    [super dealloc];\n#endif\n}\n\n- (NSURL *)databaseURL {\n    return _databasePath ? [NSURL fileURLWithPath:_databasePath] : nil;\n}\n\n+ (NSString*)FMDBUserVersion {\n    return @\"2.7.5\";\n}\n\n// returns 0x0240 for version 2.4.  This makes it super easy to do things like:\n// /* need to make sure to do X with FMDB version 2.4 or later */\n// if ([FMDatabase FMDBVersion] >= 0x0240) { … }\n\n+ (SInt32)FMDBVersion {\n    \n    // we go through these hoops so that we only have to change the version number in a single spot.\n    static dispatch_once_t once;\n    static SInt32 FMDBVersionVal = 0;\n    \n    dispatch_once(&once, ^{\n        NSString *prodVersion = [self FMDBUserVersion];\n        \n        if ([[prodVersion componentsSeparatedByString:@\".\"] count] < 3) {\n            prodVersion = [prodVersion stringByAppendingString:@\".0\"];\n        }\n        \n        NSString *junk = [prodVersion stringByReplacingOccurrencesOfString:@\".\" withString:@\"\"];\n        \n        char *e = nil;\n        FMDBVersionVal = (int) strtoul([junk UTF8String], &e, 16);\n        \n    });\n    \n    return FMDBVersionVal;\n}\n\n#pragma mark SQLite information\n\n+ (NSString*)sqliteLibVersion {\n    return [NSString stringWithFormat:@\"%s\", sqlite3_libversion()];\n}\n\n+ (BOOL)isSQLiteThreadSafe {\n    // make sure to read the sqlite headers on this guy!\n    return sqlite3_threadsafe() != 0;\n}\n\n- (void*)sqliteHandle {\n    return _db;\n}\n\n- (const char*)sqlitePath {\n    \n    if (!_databasePath) {\n        return \":memory:\";\n    }\n    \n    if ([_databasePath length] == 0) {\n        return \"\"; // this creates a temporary database (it's an sqlite thing).\n    }\n    \n    return [_databasePath fileSystemRepresentation];\n    \n}\n\n#pragma mark Open and close database\n\n- (BOOL)open {\n    if (_isOpen) {\n        return YES;\n    }\n    \n    // if we previously tried to open and it failed, make sure to close it before we try again\n    \n    if (_db) {\n        [self close];\n    }\n    \n    // now open database\n\n    int err = sqlite3_open([self sqlitePath], (sqlite3**)&_db );\n    if(err != SQLITE_OK) {\n        NSLog(@\"error opening!: %d\", err);\n        return NO;\n    }\n    \n    if (_maxBusyRetryTimeInterval > 0.0) {\n        // set the handler\n        [self setMaxBusyRetryTimeInterval:_maxBusyRetryTimeInterval];\n    }\n    \n    _isOpen = YES;\n    \n    return YES;\n}\n\n- (BOOL)openWithFlags:(int)flags {\n    return [self openWithFlags:flags vfs:nil];\n}\n\n- (BOOL)openWithFlags:(int)flags vfs:(NSString *)vfsName {\n#if SQLITE_VERSION_NUMBER >= 3005000\n    if (_isOpen) {\n        return YES;\n    }\n    \n    // if we previously tried to open and it failed, make sure to close it before we try again\n    \n    if (_db) {\n        [self close];\n    }\n    \n    // now open database\n    \n    int err = sqlite3_open_v2([self sqlitePath], (sqlite3**)&_db, flags, [vfsName UTF8String]);\n    if(err != SQLITE_OK) {\n        NSLog(@\"error opening!: %d\", err);\n        return NO;\n    }\n    \n    if (_maxBusyRetryTimeInterval > 0.0) {\n        // set the handler\n        [self setMaxBusyRetryTimeInterval:_maxBusyRetryTimeInterval];\n    }\n    \n    _isOpen = YES;\n    \n    return YES;\n#else\n    NSLog(@\"openWithFlags requires SQLite 3.5\");\n    return NO;\n#endif\n}\n\n- (BOOL)close {\n    \n    [self clearCachedStatements];\n    [self closeOpenResultSets];\n    \n    if (!_db) {\n        return YES;\n    }\n    \n    int  rc;\n    BOOL retry;\n    BOOL triedFinalizingOpenStatements = NO;\n    \n    do {\n        retry   = NO;\n        rc      = sqlite3_close(_db);\n        if (SQLITE_BUSY == rc || SQLITE_LOCKED == rc) {\n            if (!triedFinalizingOpenStatements) {\n                triedFinalizingOpenStatements = YES;\n                sqlite3_stmt *pStmt;\n                while ((pStmt = sqlite3_next_stmt(_db, nil)) !=0) {\n                    NSLog(@\"Closing leaked statement\");\n                    sqlite3_finalize(pStmt);\n                    retry = YES;\n                }\n            }\n        }\n        else if (SQLITE_OK != rc) {\n            NSLog(@\"error closing!: %d\", rc);\n        }\n    }\n    while (retry);\n    \n    _db = nil;\n    _isOpen = false;\n    \n    return YES;\n}\n\n#pragma mark Busy handler routines\n\n// NOTE: appledoc seems to choke on this function for some reason;\n//       so when generating documentation, you might want to ignore the\n//       .m files so that it only documents the public interfaces outlined\n//       in the .h files.\n//\n//       This is a known appledoc bug that it has problems with C functions\n//       within a class implementation, but for some reason, only this\n//       C function causes problems; the rest don't. Anyway, ignoring the .m\n//       files with appledoc will prevent this problem from occurring.\n\nstatic int FMDBDatabaseBusyHandler(void *f, int count) {\n    FMDatabase *self = (__bridge FMDatabase*)f;\n    \n    if (count == 0) {\n        self->_startBusyRetryTime = [NSDate timeIntervalSinceReferenceDate];\n        return 1;\n    }\n    \n    NSTimeInterval delta = [NSDate timeIntervalSinceReferenceDate] - (self->_startBusyRetryTime);\n    \n    if (delta < [self maxBusyRetryTimeInterval]) {\n        int requestedSleepInMillseconds = (int) arc4random_uniform(50) + 50;\n        int actualSleepInMilliseconds = sqlite3_sleep(requestedSleepInMillseconds);\n        if (actualSleepInMilliseconds != requestedSleepInMillseconds) {\n            NSLog(@\"WARNING: Requested sleep of %i milliseconds, but SQLite returned %i. Maybe SQLite wasn't built with HAVE_USLEEP=1?\", requestedSleepInMillseconds, actualSleepInMilliseconds);\n        }\n        return 1;\n    }\n    \n    return 0;\n}\n\n- (void)setMaxBusyRetryTimeInterval:(NSTimeInterval)timeout {\n    \n    _maxBusyRetryTimeInterval = timeout;\n    \n    if (!_db) {\n        return;\n    }\n    \n    if (timeout > 0) {\n        sqlite3_busy_handler(_db, &FMDBDatabaseBusyHandler, (__bridge void *)(self));\n    }\n    else {\n        // turn it off otherwise\n        sqlite3_busy_handler(_db, nil, nil);\n    }\n}\n\n- (NSTimeInterval)maxBusyRetryTimeInterval {\n    return _maxBusyRetryTimeInterval;\n}\n\n\n// we no longer make busyRetryTimeout public\n// but for folks who don't bother noticing that the interface to FMDatabase changed,\n// we'll still implement the method so they don't get suprise crashes\n- (int)busyRetryTimeout {\n    NSLog(@\"%s:%d\", __FUNCTION__, __LINE__);\n    NSLog(@\"FMDB: busyRetryTimeout no longer works, please use maxBusyRetryTimeInterval\");\n    return -1;\n}\n\n- (void)setBusyRetryTimeout:(int)i {\n#pragma unused(i)\n    NSLog(@\"%s:%d\", __FUNCTION__, __LINE__);\n    NSLog(@\"FMDB: setBusyRetryTimeout does nothing, please use setMaxBusyRetryTimeInterval:\");\n}\n\n#pragma mark Result set functions\n\n- (BOOL)hasOpenResultSets {\n    return [_openResultSets count] > 0;\n}\n\n- (void)closeOpenResultSets {\n    \n    //Copy the set so we don't get mutation errors\n    NSSet *openSetCopy = FMDBReturnAutoreleased([_openResultSets copy]);\n    for (NSValue *rsInWrappedInATastyValueMeal in openSetCopy) {\n        FMResultSet *rs = (FMResultSet *)[rsInWrappedInATastyValueMeal pointerValue];\n        \n        [rs setParentDB:nil];\n        [rs close];\n        \n        [_openResultSets removeObject:rsInWrappedInATastyValueMeal];\n    }\n}\n\n- (void)resultSetDidClose:(FMResultSet *)resultSet {\n    NSValue *setValue = [NSValue valueWithNonretainedObject:resultSet];\n    \n    [_openResultSets removeObject:setValue];\n}\n\n#pragma mark Cached statements\n\n- (void)clearCachedStatements {\n    \n    for (NSMutableSet *statements in [_cachedStatements objectEnumerator]) {\n        for (FMStatement *statement in [statements allObjects]) {\n            [statement close];\n        }\n    }\n    \n    [_cachedStatements removeAllObjects];\n}\n\n- (FMStatement*)cachedStatementForQuery:(NSString*)query {\n    \n    NSMutableSet* statements = [_cachedStatements objectForKey:query];\n    \n    return [[statements objectsPassingTest:^BOOL(FMStatement* statement, BOOL *stop) {\n        \n        *stop = ![statement inUse];\n        return *stop;\n        \n    }] anyObject];\n}\n\n\n- (void)setCachedStatement:(FMStatement*)statement forQuery:(NSString*)query {\n    NSParameterAssert(query);\n    if (!query) {\n        NSLog(@\"API misuse, -[FMDatabase setCachedStatement:forQuery:] query must not be nil\");\n        return;\n    }\n    \n    query = [query copy]; // in case we got handed in a mutable string...\n    [statement setQuery:query];\n    \n    NSMutableSet* statements = [_cachedStatements objectForKey:query];\n    if (!statements) {\n        statements = [NSMutableSet set];\n    }\n    \n    [statements addObject:statement];\n    \n    [_cachedStatements setObject:statements forKey:query];\n    \n    FMDBRelease(query);\n}\n\n#pragma mark Key routines\n\n- (BOOL)rekey:(NSString*)key {\n    NSData *keyData = [NSData dataWithBytes:(void *)[key UTF8String] length:(NSUInteger)strlen([key UTF8String])];\n    \n    return [self rekeyWithData:keyData];\n}\n\n- (BOOL)rekeyWithData:(NSData *)keyData {\n#ifdef SQLITE_HAS_CODEC\n    if (!keyData) {\n        return NO;\n    }\n    \n    int rc = sqlite3_rekey(_db, [keyData bytes], (int)[keyData length]);\n    \n    if (rc != SQLITE_OK) {\n        NSLog(@\"error on rekey: %d\", rc);\n        NSLog(@\"%@\", [self lastErrorMessage]);\n    }\n    \n    return (rc == SQLITE_OK);\n#else\n#pragma unused(keyData)\n    return NO;\n#endif\n}\n\n- (BOOL)setKey:(NSString*)key {\n    NSData *keyData = [NSData dataWithBytes:[key UTF8String] length:(NSUInteger)strlen([key UTF8String])];\n    \n    return [self setKeyWithData:keyData];\n}\n\n- (BOOL)setKeyWithData:(NSData *)keyData {\n#ifdef SQLITE_HAS_CODEC\n    if (!keyData) {\n        return NO;\n    }\n    \n    int rc = sqlite3_key(_db, [keyData bytes], (int)[keyData length]);\n    \n    return (rc == SQLITE_OK);\n#else\n#pragma unused(keyData)\n    return NO;\n#endif\n}\n\n#pragma mark Date routines\n\n+ (NSDateFormatter *)storeableDateFormat:(NSString *)format {\n    \n    NSDateFormatter *result = FMDBReturnAutoreleased([[NSDateFormatter alloc] init]);\n    result.dateFormat = format;\n    result.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];\n    result.locale = FMDBReturnAutoreleased([[NSLocale alloc] initWithLocaleIdentifier:@\"en_US\"]);\n    return result;\n}\n\n\n- (BOOL)hasDateFormatter {\n    return _dateFormat != nil;\n}\n\n- (void)setDateFormat:(NSDateFormatter *)format {\n    FMDBAutorelease(_dateFormat);\n    _dateFormat = FMDBReturnRetained(format);\n}\n\n- (NSDate *)dateFromString:(NSString *)s {\n    return [_dateFormat dateFromString:s];\n}\n\n- (NSString *)stringFromDate:(NSDate *)date {\n    return [_dateFormat stringFromDate:date];\n}\n\n#pragma mark State of database\n\n- (BOOL)goodConnection {\n    \n    if (!_isOpen) {\n        return NO;\n    }\n    \n    FMResultSet *rs = [self executeQuery:@\"select name from sqlite_master where type='table'\"];\n    \n    if (rs) {\n        [rs close];\n        return YES;\n    }\n    \n    return NO;\n}\n\n- (void)warnInUse {\n    NSLog(@\"The FMDatabase %@ is currently in use.\", self);\n    \n#ifndef NS_BLOCK_ASSERTIONS\n    if (_crashOnErrors) {\n        NSAssert(false, @\"The FMDatabase %@ is currently in use.\", self);\n        abort();\n    }\n#endif\n}\n\n- (BOOL)databaseExists {\n    \n    if (!_isOpen) {\n        \n        NSLog(@\"The FMDatabase %@ is not open.\", self);\n        \n#ifndef NS_BLOCK_ASSERTIONS\n        if (_crashOnErrors) {\n            NSAssert(false, @\"The FMDatabase %@ is not open.\", self);\n            abort();\n        }\n#endif\n        \n        return NO;\n    }\n    \n    return YES;\n}\n\n#pragma mark Error routines\n\n- (NSString *)lastErrorMessage {\n    return [NSString stringWithUTF8String:sqlite3_errmsg(_db)];\n}\n\n- (BOOL)hadError {\n    int lastErrCode = [self lastErrorCode];\n    \n    return (lastErrCode > SQLITE_OK && lastErrCode < SQLITE_ROW);\n}\n\n- (int)lastErrorCode {\n    return sqlite3_errcode(_db);\n}\n\n- (int)lastExtendedErrorCode {\n    return sqlite3_extended_errcode(_db);\n}\n\n- (NSError*)errorWithMessage:(NSString *)message {\n    NSDictionary* errorMessage = [NSDictionary dictionaryWithObject:message forKey:NSLocalizedDescriptionKey];\n    \n    return [NSError errorWithDomain:@\"FMDatabase\" code:sqlite3_errcode(_db) userInfo:errorMessage];\n}\n\n- (NSError*)lastError {\n    return [self errorWithMessage:[self lastErrorMessage]];\n}\n\n#pragma mark Update information routines\n\n- (sqlite_int64)lastInsertRowId {\n    \n    if (_isExecutingStatement) {\n        [self warnInUse];\n        return NO;\n    }\n    \n    _isExecutingStatement = YES;\n    \n    sqlite_int64 ret = sqlite3_last_insert_rowid(_db);\n    \n    _isExecutingStatement = NO;\n    \n    return ret;\n}\n\n- (int)changes {\n    if (_isExecutingStatement) {\n        [self warnInUse];\n        return 0;\n    }\n    \n    _isExecutingStatement = YES;\n    \n    int ret = sqlite3_changes(_db);\n    \n    _isExecutingStatement = NO;\n    \n    return ret;\n}\n\n#pragma mark SQL manipulation\n\n- (void)bindObject:(id)obj toColumn:(int)idx inStatement:(sqlite3_stmt*)pStmt {\n    \n    if ((!obj) || ((NSNull *)obj == [NSNull null])) {\n        sqlite3_bind_null(pStmt, idx);\n    }\n    \n    // FIXME - someday check the return codes on these binds.\n    else if ([obj isKindOfClass:[NSData class]]) {\n        const void *bytes = [obj bytes];\n        if (!bytes) {\n            // it's an empty NSData object, aka [NSData data].\n            // Don't pass a NULL pointer, or sqlite will bind a SQL null instead of a blob.\n            bytes = \"\";\n        }\n        sqlite3_bind_blob(pStmt, idx, bytes, (int)[obj length], SQLITE_STATIC);\n    }\n    else if ([obj isKindOfClass:[NSDate class]]) {\n        if (self.hasDateFormatter)\n            sqlite3_bind_text(pStmt, idx, [[self stringFromDate:obj] UTF8String], -1, SQLITE_STATIC);\n        else\n            sqlite3_bind_double(pStmt, idx, [obj timeIntervalSince1970]);\n    }\n    else if ([obj isKindOfClass:[NSNumber class]]) {\n        \n        if (strcmp([obj objCType], @encode(char)) == 0) {\n            sqlite3_bind_int(pStmt, idx, [obj charValue]);\n        }\n        else if (strcmp([obj objCType], @encode(unsigned char)) == 0) {\n            sqlite3_bind_int(pStmt, idx, [obj unsignedCharValue]);\n        }\n        else if (strcmp([obj objCType], @encode(short)) == 0) {\n            sqlite3_bind_int(pStmt, idx, [obj shortValue]);\n        }\n        else if (strcmp([obj objCType], @encode(unsigned short)) == 0) {\n            sqlite3_bind_int(pStmt, idx, [obj unsignedShortValue]);\n        }\n        else if (strcmp([obj objCType], @encode(int)) == 0) {\n            sqlite3_bind_int(pStmt, idx, [obj intValue]);\n        }\n        else if (strcmp([obj objCType], @encode(unsigned int)) == 0) {\n            sqlite3_bind_int64(pStmt, idx, (long long)[obj unsignedIntValue]);\n        }\n        else if (strcmp([obj objCType], @encode(long)) == 0) {\n            sqlite3_bind_int64(pStmt, idx, [obj longValue]);\n        }\n        else if (strcmp([obj objCType], @encode(unsigned long)) == 0) {\n            sqlite3_bind_int64(pStmt, idx, (long long)[obj unsignedLongValue]);\n        }\n        else if (strcmp([obj objCType], @encode(long long)) == 0) {\n            sqlite3_bind_int64(pStmt, idx, [obj longLongValue]);\n        }\n        else if (strcmp([obj objCType], @encode(unsigned long long)) == 0) {\n            sqlite3_bind_int64(pStmt, idx, (long long)[obj unsignedLongLongValue]);\n        }\n        else if (strcmp([obj objCType], @encode(float)) == 0) {\n            sqlite3_bind_double(pStmt, idx, [obj floatValue]);\n        }\n        else if (strcmp([obj objCType], @encode(double)) == 0) {\n            sqlite3_bind_double(pStmt, idx, [obj doubleValue]);\n        }\n        else if (strcmp([obj objCType], @encode(BOOL)) == 0) {\n            sqlite3_bind_int(pStmt, idx, ([obj boolValue] ? 1 : 0));\n        }\n        else {\n            sqlite3_bind_text(pStmt, idx, [[obj description] UTF8String], -1, SQLITE_STATIC);\n        }\n    }\n    else {\n        sqlite3_bind_text(pStmt, idx, [[obj description] UTF8String], -1, SQLITE_STATIC);\n    }\n}\n\n- (void)extractSQL:(NSString *)sql argumentsList:(va_list)args intoString:(NSMutableString *)cleanedSQL arguments:(NSMutableArray *)arguments {\n    \n    NSUInteger length = [sql length];\n    unichar last = '\\0';\n    for (NSUInteger i = 0; i < length; ++i) {\n        id arg = nil;\n        unichar current = [sql characterAtIndex:i];\n        unichar add = current;\n        if (last == '%') {\n            switch (current) {\n                case '@':\n                    arg = va_arg(args, id);\n                    break;\n                case 'c':\n                    // warning: second argument to 'va_arg' is of promotable type 'char'; this va_arg has undefined behavior because arguments will be promoted to 'int'\n                    arg = [NSString stringWithFormat:@\"%c\", va_arg(args, int)];\n                    break;\n                case 's':\n                    arg = [NSString stringWithUTF8String:va_arg(args, char*)];\n                    break;\n                case 'd':\n                case 'D':\n                case 'i':\n                    arg = [NSNumber numberWithInt:va_arg(args, int)];\n                    break;\n                case 'u':\n                case 'U':\n                    arg = [NSNumber numberWithUnsignedInt:va_arg(args, unsigned int)];\n                    break;\n                case 'h':\n                    i++;\n                    if (i < length && [sql characterAtIndex:i] == 'i') {\n                        //  warning: second argument to 'va_arg' is of promotable type 'short'; this va_arg has undefined behavior because arguments will be promoted to 'int'\n                        arg = [NSNumber numberWithShort:(short)(va_arg(args, int))];\n                    }\n                    else if (i < length && [sql characterAtIndex:i] == 'u') {\n                        // warning: second argument to 'va_arg' is of promotable type 'unsigned short'; this va_arg has undefined behavior because arguments will be promoted to 'int'\n                        arg = [NSNumber numberWithUnsignedShort:(unsigned short)(va_arg(args, uint))];\n                    }\n                    else {\n                        i--;\n                    }\n                    break;\n                case 'q':\n                    i++;\n                    if (i < length && [sql characterAtIndex:i] == 'i') {\n                        arg = [NSNumber numberWithLongLong:va_arg(args, long long)];\n                    }\n                    else if (i < length && [sql characterAtIndex:i] == 'u') {\n                        arg = [NSNumber numberWithUnsignedLongLong:va_arg(args, unsigned long long)];\n                    }\n                    else {\n                        i--;\n                    }\n                    break;\n                case 'f':\n                    arg = [NSNumber numberWithDouble:va_arg(args, double)];\n                    break;\n                case 'g':\n                    // warning: second argument to 'va_arg' is of promotable type 'float'; this va_arg has undefined behavior because arguments will be promoted to 'double'\n                    arg = [NSNumber numberWithFloat:(float)(va_arg(args, double))];\n                    break;\n                case 'l':\n                    i++;\n                    if (i < length) {\n                        unichar next = [sql characterAtIndex:i];\n                        if (next == 'l') {\n                            i++;\n                            if (i < length && [sql characterAtIndex:i] == 'd') {\n                                //%lld\n                                arg = [NSNumber numberWithLongLong:va_arg(args, long long)];\n                            }\n                            else if (i < length && [sql characterAtIndex:i] == 'u') {\n                                //%llu\n                                arg = [NSNumber numberWithUnsignedLongLong:va_arg(args, unsigned long long)];\n                            }\n                            else {\n                                i--;\n                            }\n                        }\n                        else if (next == 'd') {\n                            //%ld\n                            arg = [NSNumber numberWithLong:va_arg(args, long)];\n                        }\n                        else if (next == 'u') {\n                            //%lu\n                            arg = [NSNumber numberWithUnsignedLong:va_arg(args, unsigned long)];\n                        }\n                        else {\n                            i--;\n                        }\n                    }\n                    else {\n                        i--;\n                    }\n                    break;\n                default:\n                    // something else that we can't interpret. just pass it on through like normal\n                    break;\n            }\n        }\n        else if (current == '%') {\n            // percent sign; skip this character\n            add = '\\0';\n        }\n        \n        if (arg != nil) {\n            [cleanedSQL appendString:@\"?\"];\n            [arguments addObject:arg];\n        }\n        else if (add == (unichar)'@' && last == (unichar) '%') {\n            [cleanedSQL appendFormat:@\"NULL\"];\n        }\n        else if (add != '\\0') {\n            [cleanedSQL appendFormat:@\"%C\", add];\n        }\n        last = current;\n    }\n}\n\n#pragma mark Execute queries\n\n- (FMResultSet *)executeQuery:(NSString *)sql withParameterDictionary:(NSDictionary *)arguments {\n    return [self executeQuery:sql withArgumentsInArray:nil orDictionary:arguments orVAList:nil];\n}\n\n- (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray*)arrayArgs orDictionary:(NSDictionary *)dictionaryArgs orVAList:(va_list)args {\n    \n    if (![self databaseExists]) {\n        return 0x00;\n    }\n    \n    if (_isExecutingStatement) {\n        [self warnInUse];\n        return 0x00;\n    }\n    \n    _isExecutingStatement = YES;\n    \n    int rc                  = 0x00;\n    sqlite3_stmt *pStmt     = 0x00;\n    FMStatement *statement  = 0x00;\n    FMResultSet *rs         = 0x00;\n    \n    if (_traceExecution && sql) {\n        NSLog(@\"%@ executeQuery: %@\", self, sql);\n    }\n    \n    if (_shouldCacheStatements) {\n        statement = [self cachedStatementForQuery:sql];\n        pStmt = statement ? [statement statement] : 0x00;\n        [statement reset];\n    }\n    \n    if (!pStmt) {\n        \n        rc = sqlite3_prepare_v2(_db, [sql UTF8String], -1, &pStmt, 0);\n        \n        if (SQLITE_OK != rc) {\n            if (_logsErrors) {\n                NSLog(@\"DB Error: %d \\\"%@\\\"\", [self lastErrorCode], [self lastErrorMessage]);\n                NSLog(@\"DB Query: %@\", sql);\n                NSLog(@\"DB Path: %@\", _databasePath);\n            }\n            \n            if (_crashOnErrors) {\n                NSAssert(false, @\"DB Error: %d \\\"%@\\\"\", [self lastErrorCode], [self lastErrorMessage]);\n                abort();\n            }\n            \n            sqlite3_finalize(pStmt);\n            _isExecutingStatement = NO;\n            return nil;\n        }\n    }\n    \n    id obj;\n    int idx = 0;\n    int queryCount = sqlite3_bind_parameter_count(pStmt); // pointed out by Dominic Yu (thanks!)\n    \n    // If dictionaryArgs is passed in, that means we are using sqlite's named parameter support\n    if (dictionaryArgs) {\n        \n        for (NSString *dictionaryKey in [dictionaryArgs allKeys]) {\n            \n            // Prefix the key with a colon.\n            NSString *parameterName = [[NSString alloc] initWithFormat:@\":%@\", dictionaryKey];\n            \n            if (_traceExecution) {\n                NSLog(@\"%@ = %@\", parameterName, [dictionaryArgs objectForKey:dictionaryKey]);\n            }\n            \n            // Get the index for the parameter name.\n            int namedIdx = sqlite3_bind_parameter_index(pStmt, [parameterName UTF8String]);\n            \n            FMDBRelease(parameterName);\n            \n            if (namedIdx > 0) {\n                // Standard binding from here.\n                [self bindObject:[dictionaryArgs objectForKey:dictionaryKey] toColumn:namedIdx inStatement:pStmt];\n                // increment the binding count, so our check below works out\n                idx++;\n            }\n            else {\n                NSLog(@\"Could not find index for %@\", dictionaryKey);\n            }\n        }\n    }\n    else {\n        \n        while (idx < queryCount) {\n            \n            if (arrayArgs && idx < (int)[arrayArgs count]) {\n                obj = [arrayArgs objectAtIndex:(NSUInteger)idx];\n            }\n            else if (args) {\n                obj = va_arg(args, id);\n            }\n            else {\n                //We ran out of arguments\n                break;\n            }\n            \n            if (_traceExecution) {\n                if ([obj isKindOfClass:[NSData class]]) {\n                    NSLog(@\"data: %ld bytes\", (unsigned long)[(NSData*)obj length]);\n                }\n                else {\n                    NSLog(@\"obj: %@\", obj);\n                }\n            }\n            \n            idx++;\n            \n            [self bindObject:obj toColumn:idx inStatement:pStmt];\n        }\n    }\n    \n    if (idx != queryCount) {\n        NSLog(@\"Error: the bind count is not correct for the # of variables (executeQuery)\");\n        sqlite3_finalize(pStmt);\n        _isExecutingStatement = NO;\n        return nil;\n    }\n    \n    FMDBRetain(statement); // to balance the release below\n    \n    if (!statement) {\n        statement = [[FMStatement alloc] init];\n        [statement setStatement:pStmt];\n        \n        if (_shouldCacheStatements && sql) {\n            [self setCachedStatement:statement forQuery:sql];\n        }\n    }\n    \n    // the statement gets closed in rs's dealloc or [rs close];\n    rs = [FMResultSet resultSetWithStatement:statement usingParentDatabase:self];\n    [rs setQuery:sql];\n    \n    NSValue *openResultSet = [NSValue valueWithNonretainedObject:rs];\n    [_openResultSets addObject:openResultSet];\n    \n    [statement setUseCount:[statement useCount] + 1];\n    \n    FMDBRelease(statement);\n    \n    _isExecutingStatement = NO;\n    \n    return rs;\n}\n\n- (FMResultSet *)executeQuery:(NSString*)sql, ... {\n    va_list args;\n    va_start(args, sql);\n    \n    id result = [self executeQuery:sql withArgumentsInArray:nil orDictionary:nil orVAList:args];\n    \n    va_end(args);\n    return result;\n}\n\n- (FMResultSet *)executeQueryWithFormat:(NSString*)format, ... {\n    va_list args;\n    va_start(args, format);\n    \n    NSMutableString *sql = [NSMutableString stringWithCapacity:[format length]];\n    NSMutableArray *arguments = [NSMutableArray array];\n    [self extractSQL:format argumentsList:args intoString:sql arguments:arguments];\n    \n    va_end(args);\n    \n    return [self executeQuery:sql withArgumentsInArray:arguments];\n}\n\n- (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)arguments {\n    return [self executeQuery:sql withArgumentsInArray:arguments orDictionary:nil orVAList:nil];\n}\n\n- (FMResultSet *)executeQuery:(NSString *)sql values:(NSArray *)values error:(NSError * __autoreleasing *)error {\n    FMResultSet *rs = [self executeQuery:sql withArgumentsInArray:values orDictionary:nil orVAList:nil];\n    if (!rs && error) {\n        *error = [self lastError];\n    }\n    return rs;\n}\n\n- (FMResultSet *)executeQuery:(NSString*)sql withVAList:(va_list)args {\n    return [self executeQuery:sql withArgumentsInArray:nil orDictionary:nil orVAList:args];\n}\n\n#pragma mark Execute updates\n\n- (BOOL)executeUpdate:(NSString*)sql error:(NSError**)outErr withArgumentsInArray:(NSArray*)arrayArgs orDictionary:(NSDictionary *)dictionaryArgs orVAList:(va_list)args {\n    \n    if (![self databaseExists]) {\n        return NO;\n    }\n    \n    if (_isExecutingStatement) {\n        [self warnInUse];\n        return NO;\n    }\n    \n    _isExecutingStatement = YES;\n    \n    int rc                   = 0x00;\n    sqlite3_stmt *pStmt      = 0x00;\n    FMStatement *cachedStmt  = 0x00;\n    \n    if (_traceExecution && sql) {\n        NSLog(@\"%@ executeUpdate: %@\", self, sql);\n    }\n    \n    if (_shouldCacheStatements) {\n        cachedStmt = [self cachedStatementForQuery:sql];\n        pStmt = cachedStmt ? [cachedStmt statement] : 0x00;\n        [cachedStmt reset];\n    }\n    \n    if (!pStmt) {\n        rc = sqlite3_prepare_v2(_db, [sql UTF8String], -1, &pStmt, 0);\n        \n        if (SQLITE_OK != rc) {\n            if (_logsErrors) {\n                NSLog(@\"DB Error: %d \\\"%@\\\"\", [self lastErrorCode], [self lastErrorMessage]);\n                NSLog(@\"DB Query: %@\", sql);\n                NSLog(@\"DB Path: %@\", _databasePath);\n            }\n            \n            if (_crashOnErrors) {\n                NSAssert(false, @\"DB Error: %d \\\"%@\\\"\", [self lastErrorCode], [self lastErrorMessage]);\n                abort();\n            }\n            \n            if (outErr) {\n                *outErr = [self errorWithMessage:[NSString stringWithUTF8String:sqlite3_errmsg(_db)]];\n            }\n            \n            sqlite3_finalize(pStmt);\n            \n            _isExecutingStatement = NO;\n            return NO;\n        }\n    }\n    \n    id obj;\n    int idx = 0;\n    int queryCount = sqlite3_bind_parameter_count(pStmt);\n    \n    // If dictionaryArgs is passed in, that means we are using sqlite's named parameter support\n    if (dictionaryArgs) {\n        \n        for (NSString *dictionaryKey in [dictionaryArgs allKeys]) {\n            \n            // Prefix the key with a colon.\n            NSString *parameterName = [[NSString alloc] initWithFormat:@\":%@\", dictionaryKey];\n            \n            if (_traceExecution) {\n                NSLog(@\"%@ = %@\", parameterName, [dictionaryArgs objectForKey:dictionaryKey]);\n            }\n            // Get the index for the parameter name.\n            int namedIdx = sqlite3_bind_parameter_index(pStmt, [parameterName UTF8String]);\n            \n            FMDBRelease(parameterName);\n            \n            if (namedIdx > 0) {\n                // Standard binding from here.\n                [self bindObject:[dictionaryArgs objectForKey:dictionaryKey] toColumn:namedIdx inStatement:pStmt];\n                \n                // increment the binding count, so our check below works out\n                idx++;\n            }\n            else {\n                NSString *message = [NSString stringWithFormat:@\"Could not find index for %@\", dictionaryKey];\n                \n                if (_logsErrors) {\n                    NSLog(@\"%@\", message);\n                }\n                if (outErr) {\n                    *outErr = [self errorWithMessage:message];\n                }\n            }\n        }\n    }\n    else {\n        \n        while (idx < queryCount) {\n            \n            if (arrayArgs && idx < (int)[arrayArgs count]) {\n                obj = [arrayArgs objectAtIndex:(NSUInteger)idx];\n            }\n            else if (args) {\n                obj = va_arg(args, id);\n            }\n            else {\n                //We ran out of arguments\n                break;\n            }\n            \n            if (_traceExecution) {\n                if ([obj isKindOfClass:[NSData class]]) {\n                    NSLog(@\"data: %ld bytes\", (unsigned long)[(NSData*)obj length]);\n                }\n                else {\n                    NSLog(@\"obj: %@\", obj);\n                }\n            }\n            \n            idx++;\n            \n            [self bindObject:obj toColumn:idx inStatement:pStmt];\n        }\n    }\n    \n    \n    if (idx != queryCount) {\n        NSString *message = [NSString stringWithFormat:@\"Error: the bind count (%d) is not correct for the # of variables in the query (%d) (%@) (executeUpdate)\", idx, queryCount, sql];\n        if (_logsErrors) {\n            NSLog(@\"%@\", message);\n        }\n        if (outErr) {\n            *outErr = [self errorWithMessage:message];\n        }\n        \n        sqlite3_finalize(pStmt);\n        _isExecutingStatement = NO;\n        return NO;\n    }\n    \n    /* Call sqlite3_step() to run the virtual machine. Since the SQL being\n     ** executed is not a SELECT statement, we assume no data will be returned.\n     */\n    \n    rc      = sqlite3_step(pStmt);\n    \n    if (SQLITE_DONE == rc) {\n        // all is well, let's return.\n    }\n    else if (SQLITE_INTERRUPT == rc) {\n        if (_logsErrors) {\n            NSLog(@\"Error calling sqlite3_step. Query was interrupted (%d: %s) SQLITE_INTERRUPT\", rc, sqlite3_errmsg(_db));\n            NSLog(@\"DB Query: %@\", sql);\n        }\n    }\n    else if (rc == SQLITE_ROW) {\n        NSString *message = [NSString stringWithFormat:@\"A executeUpdate is being called with a query string '%@'\", sql];\n        if (_logsErrors) {\n            NSLog(@\"%@\", message);\n            NSLog(@\"DB Query: %@\", sql);\n        }\n        if (outErr) {\n            *outErr = [self errorWithMessage:message];\n        }\n    }\n    else {\n        if (outErr) {\n            *outErr = [self errorWithMessage:[NSString stringWithUTF8String:sqlite3_errmsg(_db)]];\n        }\n        \n        if (SQLITE_ERROR == rc) {\n            if (_logsErrors) {\n                NSLog(@\"Error calling sqlite3_step (%d: %s) SQLITE_ERROR\", rc, sqlite3_errmsg(_db));\n                NSLog(@\"DB Query: %@\", sql);\n            }\n        }\n        else if (SQLITE_MISUSE == rc) {\n            // uh oh.\n            if (_logsErrors) {\n                NSLog(@\"Error calling sqlite3_step (%d: %s) SQLITE_MISUSE\", rc, sqlite3_errmsg(_db));\n                NSLog(@\"DB Query: %@\", sql);\n            }\n        }\n        else {\n            // wtf?\n            if (_logsErrors) {\n                NSLog(@\"Unknown error calling sqlite3_step (%d: %s) eu\", rc, sqlite3_errmsg(_db));\n                NSLog(@\"DB Query: %@\", sql);\n            }\n        }\n    }\n    \n    if (_shouldCacheStatements && !cachedStmt) {\n        cachedStmt = [[FMStatement alloc] init];\n        \n        [cachedStmt setStatement:pStmt];\n        \n        [self setCachedStatement:cachedStmt forQuery:sql];\n        \n        FMDBRelease(cachedStmt);\n    }\n    \n    int closeErrorCode;\n    \n    if (cachedStmt) {\n        [cachedStmt setUseCount:[cachedStmt useCount] + 1];\n        closeErrorCode = sqlite3_reset(pStmt);\n    }\n    else {\n        /* Finalize the virtual machine. This releases all memory and other\n         ** resources allocated by the sqlite3_prepare() call above.\n         */\n        closeErrorCode = sqlite3_finalize(pStmt);\n    }\n    \n    if (closeErrorCode != SQLITE_OK) {\n        if (_logsErrors) {\n            NSLog(@\"Unknown error finalizing or resetting statement (%d: %s)\", closeErrorCode, sqlite3_errmsg(_db));\n            NSLog(@\"DB Query: %@\", sql);\n        }\n    }\n    \n    _isExecutingStatement = NO;\n    return (rc == SQLITE_DONE || rc == SQLITE_OK);\n}\n\n\n- (BOOL)executeUpdate:(NSString*)sql, ... {\n    va_list args;\n    va_start(args, sql);\n    \n    BOOL result = [self executeUpdate:sql error:nil withArgumentsInArray:nil orDictionary:nil orVAList:args];\n    \n    va_end(args);\n    return result;\n}\n\n- (BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments {\n    return [self executeUpdate:sql error:nil withArgumentsInArray:arguments orDictionary:nil orVAList:nil];\n}\n\n- (BOOL)executeUpdate:(NSString*)sql values:(NSArray *)values error:(NSError * __autoreleasing *)error {\n    return [self executeUpdate:sql error:error withArgumentsInArray:values orDictionary:nil orVAList:nil];\n}\n\n- (BOOL)executeUpdate:(NSString*)sql withParameterDictionary:(NSDictionary *)arguments {\n    return [self executeUpdate:sql error:nil withArgumentsInArray:nil orDictionary:arguments orVAList:nil];\n}\n\n- (BOOL)executeUpdate:(NSString*)sql withVAList:(va_list)args {\n    return [self executeUpdate:sql error:nil withArgumentsInArray:nil orDictionary:nil orVAList:args];\n}\n\n- (BOOL)executeUpdateWithFormat:(NSString*)format, ... {\n    va_list args;\n    va_start(args, format);\n    \n    NSMutableString *sql      = [NSMutableString stringWithCapacity:[format length]];\n    NSMutableArray *arguments = [NSMutableArray array];\n    \n    [self extractSQL:format argumentsList:args intoString:sql arguments:arguments];\n    \n    va_end(args);\n    \n    return [self executeUpdate:sql withArgumentsInArray:arguments];\n}\n\n\nint FMDBExecuteBulkSQLCallback(void *theBlockAsVoid, int columns, char **values, char **names); // shhh clang.\nint FMDBExecuteBulkSQLCallback(void *theBlockAsVoid, int columns, char **values, char **names) {\n    \n    if (!theBlockAsVoid) {\n        return SQLITE_OK;\n    }\n    \n    int (^execCallbackBlock)(NSDictionary *resultsDictionary) = (__bridge int (^)(NSDictionary *__strong))(theBlockAsVoid);\n    \n    NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithCapacity:(NSUInteger)columns];\n    \n    for (NSInteger i = 0; i < columns; i++) {\n        NSString *key = [NSString stringWithUTF8String:names[i]];\n        id value = values[i] ? [NSString stringWithUTF8String:values[i]] : [NSNull null];\n        value = value ? value : [NSNull null];\n        [dictionary setObject:value forKey:key];\n    }\n    \n    return execCallbackBlock(dictionary);\n}\n\n- (BOOL)executeStatements:(NSString *)sql {\n    return [self executeStatements:sql withResultBlock:nil];\n}\n\n- (BOOL)executeStatements:(NSString *)sql withResultBlock:(__attribute__((noescape)) FMDBExecuteStatementsCallbackBlock)block {\n    \n    int rc;\n    char *errmsg = nil;\n    \n    rc = sqlite3_exec([self sqliteHandle], [sql UTF8String], block ? FMDBExecuteBulkSQLCallback : nil, (__bridge void *)(block), &errmsg);\n    \n    if (errmsg && [self logsErrors]) {\n        NSLog(@\"Error inserting batch: %s\", errmsg);\n        sqlite3_free(errmsg);\n    }\n    \n    return (rc == SQLITE_OK);\n}\n\n- (BOOL)executeUpdate:(NSString*)sql withErrorAndBindings:(NSError**)outErr, ... {\n    \n    va_list args;\n    va_start(args, outErr);\n    \n    BOOL result = [self executeUpdate:sql error:outErr withArgumentsInArray:nil orDictionary:nil orVAList:args];\n    \n    va_end(args);\n    return result;\n}\n\n\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wdeprecated-implementations\"\n- (BOOL)update:(NSString*)sql withErrorAndBindings:(NSError**)outErr, ... {\n    va_list args;\n    va_start(args, outErr);\n    \n    BOOL result = [self executeUpdate:sql error:outErr withArgumentsInArray:nil orDictionary:nil orVAList:args];\n    \n    va_end(args);\n    return result;\n}\n\n#pragma clang diagnostic pop\n\n#pragma mark Transactions\n\n- (BOOL)rollback {\n    BOOL b = [self executeUpdate:@\"rollback transaction\"];\n    \n    if (b) {\n        _isInTransaction = NO;\n    }\n    \n    return b;\n}\n\n- (BOOL)commit {\n    BOOL b =  [self executeUpdate:@\"commit transaction\"];\n    \n    if (b) {\n        _isInTransaction = NO;\n    }\n    \n    return b;\n}\n\n- (BOOL)beginTransaction {\n    \n    BOOL b = [self executeUpdate:@\"begin exclusive transaction\"];\n    if (b) {\n        _isInTransaction = YES;\n    }\n    \n    return b;\n}\n\n- (BOOL)beginDeferredTransaction {\n    \n    BOOL b = [self executeUpdate:@\"begin deferred transaction\"];\n    if (b) {\n        _isInTransaction = YES;\n    }\n    \n    return b;\n}\n\n- (BOOL)beginImmediateTransaction {\n    \n    BOOL b = [self executeUpdate:@\"begin immediate transaction\"];\n    if (b) {\n        _isInTransaction = YES;\n    }\n    \n    return b;\n}\n\n- (BOOL)beginExclusiveTransaction {\n    \n    BOOL b = [self executeUpdate:@\"begin exclusive transaction\"];\n    if (b) {\n        _isInTransaction = YES;\n    }\n    \n    return b;\n}\n\n- (BOOL)inTransaction {\n    return _isInTransaction;\n}\n\n- (BOOL)interrupt\n{\n    if (_db) {\n        sqlite3_interrupt([self sqliteHandle]);\n        return YES;\n    }\n    return NO;\n}\n\nstatic NSString *FMDBEscapeSavePointName(NSString *savepointName) {\n    return [savepointName stringByReplacingOccurrencesOfString:@\"'\" withString:@\"''\"];\n}\n\n- (BOOL)startSavePointWithName:(NSString*)name error:(NSError**)outErr {\n#if SQLITE_VERSION_NUMBER >= 3007000\n    NSParameterAssert(name);\n    \n    NSString *sql = [NSString stringWithFormat:@\"savepoint '%@';\", FMDBEscapeSavePointName(name)];\n    \n    return [self executeUpdate:sql error:outErr withArgumentsInArray:nil orDictionary:nil orVAList:nil];\n#else\n    NSString *errorMessage = NSLocalizedStringFromTable(@\"Save point functions require SQLite 3.7\", @\"FMDB\", nil);\n    if (self.logsErrors) NSLog(@\"%@\", errorMessage);\n    return NO;\n#endif\n}\n\n- (BOOL)releaseSavePointWithName:(NSString*)name error:(NSError**)outErr {\n#if SQLITE_VERSION_NUMBER >= 3007000\n    NSParameterAssert(name);\n    \n    NSString *sql = [NSString stringWithFormat:@\"release savepoint '%@';\", FMDBEscapeSavePointName(name)];\n\n    return [self executeUpdate:sql error:outErr withArgumentsInArray:nil orDictionary:nil orVAList:nil];\n#else\n    NSString *errorMessage = NSLocalizedStringFromTable(@\"Save point functions require SQLite 3.7\", @\"FMDB\", nil);\n    if (self.logsErrors) NSLog(@\"%@\", errorMessage);\n    return NO;\n#endif\n}\n\n- (BOOL)rollbackToSavePointWithName:(NSString*)name error:(NSError**)outErr {\n#if SQLITE_VERSION_NUMBER >= 3007000\n    NSParameterAssert(name);\n    \n    NSString *sql = [NSString stringWithFormat:@\"rollback transaction to savepoint '%@';\", FMDBEscapeSavePointName(name)];\n\n    return [self executeUpdate:sql error:outErr withArgumentsInArray:nil orDictionary:nil orVAList:nil];\n#else\n    NSString *errorMessage = NSLocalizedStringFromTable(@\"Save point functions require SQLite 3.7\", @\"FMDB\", nil);\n    if (self.logsErrors) NSLog(@\"%@\", errorMessage);\n    return NO;\n#endif\n}\n\n- (NSError*)inSavePoint:(__attribute__((noescape)) void (^)(BOOL *rollback))block {\n#if SQLITE_VERSION_NUMBER >= 3007000\n    static unsigned long savePointIdx = 0;\n    \n    NSString *name = [NSString stringWithFormat:@\"dbSavePoint%ld\", savePointIdx++];\n    \n    BOOL shouldRollback = NO;\n    \n    NSError *err = 0x00;\n    \n    if (![self startSavePointWithName:name error:&err]) {\n        return err;\n    }\n    \n    if (block) {\n        block(&shouldRollback);\n    }\n    \n    if (shouldRollback) {\n        // We need to rollback and release this savepoint to remove it\n        [self rollbackToSavePointWithName:name error:&err];\n    }\n    [self releaseSavePointWithName:name error:&err];\n    \n    return err;\n#else\n    NSString *errorMessage = NSLocalizedStringFromTable(@\"Save point functions require SQLite 3.7\", @\"FMDB\", nil);\n    if (self.logsErrors) NSLog(@\"%@\", errorMessage);\n    return [NSError errorWithDomain:@\"FMDatabase\" code:0 userInfo:@{NSLocalizedDescriptionKey : errorMessage}];\n#endif\n}\n\n- (BOOL)checkpoint:(FMDBCheckpointMode)checkpointMode error:(NSError * __autoreleasing *)error {\n    return [self checkpoint:checkpointMode name:nil logFrameCount:NULL checkpointCount:NULL error:error];\n}\n\n- (BOOL)checkpoint:(FMDBCheckpointMode)checkpointMode name:(NSString *)name error:(NSError * __autoreleasing *)error {\n    return [self checkpoint:checkpointMode name:name logFrameCount:NULL checkpointCount:NULL error:error];\n}\n\n- (BOOL)checkpoint:(FMDBCheckpointMode)checkpointMode name:(NSString *)name logFrameCount:(int *)logFrameCount checkpointCount:(int *)checkpointCount error:(NSError * __autoreleasing *)error\n{\n    const char* dbName = [name UTF8String];\n#if SQLITE_VERSION_NUMBER >= 3007006\n    int err = sqlite3_wal_checkpoint_v2(_db, dbName, checkpointMode, logFrameCount, checkpointCount);\n#else\n    NSLog(@\"sqlite3_wal_checkpoint_v2 unavailable before sqlite 3.7.6. Ignoring checkpoint mode: %d\", mode);\n    int err = sqlite3_wal_checkpoint(_db, dbName);\n#endif\n    if(err != SQLITE_OK) {\n        if (error) {\n            *error = [self lastError];\n        }\n        if (self.logsErrors) NSLog(@\"%@\", [self lastErrorMessage]);\n        if (self.crashOnErrors) {\n            NSAssert(false, @\"%@\", [self lastErrorMessage]);\n            abort();\n        }\n        return NO;\n    } else {\n        return YES;\n    }\n}\n\n#pragma mark Cache statements\n\n- (BOOL)shouldCacheStatements {\n    return _shouldCacheStatements;\n}\n\n- (void)setShouldCacheStatements:(BOOL)value {\n    \n    _shouldCacheStatements = value;\n    \n    if (_shouldCacheStatements && !_cachedStatements) {\n        [self setCachedStatements:[NSMutableDictionary dictionary]];\n    }\n    \n    if (!_shouldCacheStatements) {\n        [self setCachedStatements:nil];\n    }\n}\n\n#pragma mark Callback function\n\nvoid FMDBBlockSQLiteCallBackFunction(sqlite3_context *context, int argc, sqlite3_value **argv); // -Wmissing-prototypes\nvoid FMDBBlockSQLiteCallBackFunction(sqlite3_context *context, int argc, sqlite3_value **argv) {\n#if ! __has_feature(objc_arc)\n    void (^block)(sqlite3_context *context, int argc, sqlite3_value **argv) = (id)sqlite3_user_data(context);\n#else\n    void (^block)(sqlite3_context *context, int argc, sqlite3_value **argv) = (__bridge id)sqlite3_user_data(context);\n#endif\n    if (block) {\n        @autoreleasepool {\n            block(context, argc, argv);\n        }\n    }\n}\n\n// deprecated because \"arguments\" parameter is not maximum argument count, but actual argument count.\n\n- (void)makeFunctionNamed:(NSString *)name maximumArguments:(int)arguments withBlock:(void (^)(void *context, int argc, void **argv))block {\n    [self makeFunctionNamed:name arguments:arguments block:block];\n}\n\n- (void)makeFunctionNamed:(NSString *)name arguments:(int)arguments block:(void (^)(void *context, int argc, void **argv))block {\n    \n    if (!_openFunctions) {\n        _openFunctions = [NSMutableSet new];\n    }\n    \n    id b = FMDBReturnAutoreleased([block copy]);\n    \n    [_openFunctions addObject:b];\n    \n    /* I tried adding custom functions to release the block when the connection is destroyed- but they seemed to never be called, so we use _openFunctions to store the values instead. */\n#if ! __has_feature(objc_arc)\n    sqlite3_create_function([self sqliteHandle], [name UTF8String], arguments, SQLITE_UTF8, (void*)b, &FMDBBlockSQLiteCallBackFunction, 0x00, 0x00);\n#else\n    sqlite3_create_function([self sqliteHandle], [name UTF8String], arguments, SQLITE_UTF8, (__bridge void*)b, &FMDBBlockSQLiteCallBackFunction, 0x00, 0x00);\n#endif\n}\n\n- (SqliteValueType)valueType:(void *)value {\n    return sqlite3_value_type(value);\n}\n\n- (int)valueInt:(void *)value {\n    return sqlite3_value_int(value);\n}\n\n- (long long)valueLong:(void *)value {\n    return sqlite3_value_int64(value);\n}\n\n- (double)valueDouble:(void *)value {\n    return sqlite3_value_double(value);\n}\n\n- (NSData *)valueData:(void *)value {\n    const void *bytes = sqlite3_value_blob(value);\n    int length = sqlite3_value_bytes(value);\n    return bytes ? [NSData dataWithBytes:bytes length:(NSUInteger)length] : nil;\n}\n\n- (NSString *)valueString:(void *)value {\n    const char *cString = (const char *)sqlite3_value_text(value);\n    return cString ? [NSString stringWithUTF8String:cString] : nil;\n}\n\n- (void)resultNullInContext:(void *)context {\n    sqlite3_result_null(context);\n}\n\n- (void)resultInt:(int) value context:(void *)context {\n    sqlite3_result_int(context, value);\n}\n\n- (void)resultLong:(long long)value context:(void *)context {\n    sqlite3_result_int64(context, value);\n}\n\n- (void)resultDouble:(double)value context:(void *)context {\n    sqlite3_result_double(context, value);\n}\n\n- (void)resultData:(NSData *)data context:(void *)context {\n    sqlite3_result_blob(context, data.bytes, (int)data.length, SQLITE_TRANSIENT);\n}\n\n- (void)resultString:(NSString *)value context:(void *)context {\n    sqlite3_result_text(context, [value UTF8String], -1, SQLITE_TRANSIENT);\n}\n\n- (void)resultError:(NSString *)error context:(void *)context {\n    sqlite3_result_error(context, [error UTF8String], -1);\n}\n\n- (void)resultErrorCode:(int)errorCode context:(void *)context {\n    sqlite3_result_error_code(context, errorCode);\n}\n\n- (void)resultErrorNoMemoryInContext:(void *)context {\n    sqlite3_result_error_nomem(context);\n}\n\n- (void)resultErrorTooBigInContext:(void *)context {\n    sqlite3_result_error_toobig(context);\n}\n\n@end\n\n\n\n@implementation FMStatement\n\n#if ! __has_feature(objc_arc)\n- (void)finalize {\n    [self close];\n    [super finalize];\n}\n#endif\n\n- (void)dealloc {\n    [self close];\n    FMDBRelease(_query);\n#if ! __has_feature(objc_arc)\n    [super dealloc];\n#endif\n}\n\n- (void)close {\n    if (_statement) {\n        sqlite3_finalize(_statement);\n        _statement = 0x00;\n    }\n    \n    _inUse = NO;\n}\n\n- (void)reset {\n    if (_statement) {\n        sqlite3_reset(_statement);\n    }\n    \n    _inUse = NO;\n}\n\n- (NSString*)description {\n    return [NSString stringWithFormat:@\"%@ %ld hit(s) for query %@\", [super description], _useCount, _query];\n}\n\n@end\n\n"
  },
  {
    "path": "native/ios/WatermelonDB/FMDB/src/fmdb/FMDatabaseAdditions.h",
    "content": "//\n//  FMDatabaseAdditions.h\n//  fmdb\n//\n//  Created by August Mueller on 10/30/05.\n//  Copyright 2005 Flying Meat Inc.. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import \"FMDatabase.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n\n/** Category of additions for `<FMDatabase>` class.\n \n ### See also\n\n - `<FMDatabase>`\n */\n\n@interface FMDatabase (FMDatabaseAdditions)\n\n///----------------------------------------\n/// @name Return results of SQL to variable\n///----------------------------------------\n\n/** Return `int` value for query\n \n @param query The SQL query to be performed. \n @param ... A list of parameters that will be bound to the `?` placeholders in the SQL query.\n\n @return `int` value.\n \n @note This is not available from Swift.\n */\n\n- (int)intForQuery:(NSString*)query, ...;\n\n/** Return `long` value for query\n\n @param query The SQL query to be performed.\n @param ... A list of parameters that will be bound to the `?` placeholders in the SQL query.\n\n @return `long` value.\n \n @note This is not available from Swift.\n */\n\n- (long)longForQuery:(NSString*)query, ...;\n\n/** Return `BOOL` value for query\n\n @param query The SQL query to be performed.\n @param ... A list of parameters that will be bound to the `?` placeholders in the SQL query.\n\n @return `BOOL` value.\n \n @note This is not available from Swift.\n */\n\n- (BOOL)boolForQuery:(NSString*)query, ...;\n\n/** Return `double` value for query\n\n @param query The SQL query to be performed.\n @param ... A list of parameters that will be bound to the `?` placeholders in the SQL query.\n\n @return `double` value.\n \n @note This is not available from Swift.\n */\n\n- (double)doubleForQuery:(NSString*)query, ...;\n\n/** Return `NSString` value for query\n\n @param query The SQL query to be performed.\n @param ... A list of parameters that will be bound to the `?` placeholders in the SQL query.\n\n @return `NSString` value.\n \n @note This is not available from Swift.\n */\n\n- (NSString * _Nullable)stringForQuery:(NSString*)query, ...;\n\n/** Return `NSData` value for query\n\n @param query The SQL query to be performed.\n @param ... A list of parameters that will be bound to the `?` placeholders in the SQL query.\n\n @return `NSData` value.\n \n @note This is not available from Swift.\n */\n\n- (NSData * _Nullable)dataForQuery:(NSString*)query, ...;\n\n/** Return `NSDate` value for query\n\n @param query The SQL query to be performed.\n @param ... A list of parameters that will be bound to the `?` placeholders in the SQL query.\n\n @return `NSDate` value.\n \n @note This is not available from Swift.\n */\n\n- (NSDate * _Nullable)dateForQuery:(NSString*)query, ...;\n\n\n// Notice that there's no dataNoCopyForQuery:.\n// That would be a bad idea, because we close out the result set, and then what\n// happens to the data that we just didn't copy?  Who knows, not I.\n\n\n///--------------------------------\n/// @name Schema related operations\n///--------------------------------\n\n/** Does table exist in database?\n\n @param tableName The name of the table being looked for.\n\n @return `YES` if table found; `NO` if not found.\n */\n\n- (BOOL)tableExists:(NSString*)tableName;\n\n/** The schema of the database.\n \n This will be the schema for the entire database. For each entity, each row of the result set will include the following fields:\n \n - `type` - The type of entity (e.g. table, index, view, or trigger)\n - `name` - The name of the object\n - `tbl_name` - The name of the table to which the object references\n - `rootpage` - The page number of the root b-tree page for tables and indices\n - `sql` - The SQL that created the entity\n\n @return `FMResultSet` of schema; `nil` on error.\n \n @see [SQLite File Format](http://www.sqlite.org/fileformat.html)\n */\n\n- (FMResultSet * _Nullable)getSchema;\n\n/** The schema of the database.\n\n This will be the schema for a particular table as report by SQLite `PRAGMA`, for example:\n \n    PRAGMA table_info('employees')\n \n This will report:\n \n - `cid` - The column ID number\n - `name` - The name of the column\n - `type` - The data type specified for the column\n - `notnull` - whether the field is defined as NOT NULL (i.e. values required)\n - `dflt_value` - The default value for the column\n - `pk` - Whether the field is part of the primary key of the table\n\n @param tableName The name of the table for whom the schema will be returned.\n \n @return `FMResultSet` of schema; `nil` on error.\n \n @see [table_info](http://www.sqlite.org/pragma.html#pragma_table_info)\n */\n\n- (FMResultSet * _Nullable)getTableSchema:(NSString*)tableName;\n\n/** Test to see if particular column exists for particular table in database\n \n @param columnName The name of the column.\n \n @param tableName The name of the table.\n \n @return `YES` if column exists in table in question; `NO` otherwise.\n */\n\n- (BOOL)columnExists:(NSString*)columnName inTableWithName:(NSString*)tableName;\n\n/** Test to see if particular column exists for particular table in database\n\n @param columnName The name of the column.\n\n @param tableName The name of the table.\n\n @return `YES` if column exists in table in question; `NO` otherwise.\n \n @see columnExists:inTableWithName:\n \n @warning Deprecated - use `<columnExists:inTableWithName:>` instead.\n */\n\n- (BOOL)columnExists:(NSString*)tableName columnName:(NSString*)columnName __deprecated_msg(\"Use columnExists:inTableWithName: instead\");\n\n\n/** Validate SQL statement\n \n This validates SQL statement by performing `sqlite3_prepare_v2`, but not returning the results, but instead immediately calling `sqlite3_finalize`.\n \n @param sql The SQL statement being validated.\n \n @param error This is a pointer to a `NSError` object that will receive the autoreleased `NSError` object if there was any error. If this is `nil`, no `NSError` result will be returned.\n \n @return `YES` if validation succeeded without incident; `NO` otherwise.\n \n */\n\n- (BOOL)validateSQL:(NSString*)sql error:(NSError * _Nullable *)error;\n\n\n///-----------------------------------\n/// @name Application identifier tasks\n///-----------------------------------\n\n/** Retrieve application ID\n \n @return The `uint32_t` numeric value of the application ID.\n \n @see setApplicationID:\n */\n\n@property (nonatomic) uint32_t applicationID;\n\n#if TARGET_OS_MAC && !TARGET_OS_IPHONE\n\n/** Retrieve application ID string\n\n @see setApplicationIDString:\n */\n\n@property (nonatomic, retain) NSString *applicationIDString;\n\n#endif\n\n///-----------------------------------\n/// @name user version identifier tasks\n///-----------------------------------\n\n/** Retrieve user version\n \n @see setUserVersion:\n */\n\n@property (nonatomic) uint32_t userVersion;\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/ios/WatermelonDB/FMDB/src/fmdb/FMDatabaseAdditions.m",
    "content": "//\n//  FMDatabaseAdditions.m\n//  fmdb\n//\n//  Created by August Mueller on 10/30/05.\n//  Copyright 2005 Flying Meat Inc.. All rights reserved.\n//\n\n#import \"FMDatabase.h\"\n#import \"FMDatabaseAdditions.h\"\n#import \"TargetConditionals.h\"\n\n#if FMDB_SQLITE_STANDALONE\n#import <sqlite3/sqlite3.h>\n#else\n#import <sqlite3.h>\n#endif\n\n@interface FMDatabase (PrivateStuff)\n- (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray * _Nullable)arrayArgs orDictionary:(NSDictionary * _Nullable)dictionaryArgs orVAList:(va_list)args;\n@end\n\n@implementation FMDatabase (FMDatabaseAdditions)\n\n#define RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(type, sel)             \\\nva_list args;                                                        \\\nva_start(args, query);                                               \\\nFMResultSet *resultSet = [self executeQuery:query withArgumentsInArray:0x00 orDictionary:0x00 orVAList:args];   \\\nva_end(args);                                                        \\\nif (![resultSet next]) { return (type)0; }                           \\\ntype ret = [resultSet sel:0];                                        \\\n[resultSet close];                                                   \\\n[resultSet setParentDB:nil];                                         \\\nreturn ret;\n\n\n- (NSString *)stringForQuery:(NSString*)query, ... {\n    RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(NSString *, stringForColumnIndex);\n}\n\n- (int)intForQuery:(NSString*)query, ... {\n    RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(int, intForColumnIndex);\n}\n\n- (long)longForQuery:(NSString*)query, ... {\n    RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(long, longForColumnIndex);\n}\n\n- (BOOL)boolForQuery:(NSString*)query, ... {\n    RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(BOOL, boolForColumnIndex);\n}\n\n- (double)doubleForQuery:(NSString*)query, ... {\n    RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(double, doubleForColumnIndex);\n}\n\n- (NSData*)dataForQuery:(NSString*)query, ... {\n    RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(NSData *, dataForColumnIndex);\n}\n\n- (NSDate*)dateForQuery:(NSString*)query, ... {\n    RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(NSDate *, dateForColumnIndex);\n}\n\n\n- (BOOL)tableExists:(NSString*)tableName {\n    \n    tableName = [tableName lowercaseString];\n    \n    FMResultSet *rs = [self executeQuery:@\"select [sql] from sqlite_master where [type] = 'table' and lower(name) = ?\", tableName];\n    \n    //if at least one next exists, table exists\n    BOOL returnBool = [rs next];\n    \n    //close and free object\n    [rs close];\n    \n    return returnBool;\n}\n\n/*\n get table with list of tables: result colums: type[STRING], name[STRING],tbl_name[STRING],rootpage[INTEGER],sql[STRING]\n check if table exist in database  (patch from OZLB)\n*/\n- (FMResultSet * _Nullable)getSchema {\n    \n    //result colums: type[STRING], name[STRING],tbl_name[STRING],rootpage[INTEGER],sql[STRING]\n    FMResultSet *rs = [self executeQuery:@\"SELECT type, name, tbl_name, rootpage, sql FROM (SELECT * FROM sqlite_master UNION ALL SELECT * FROM sqlite_temp_master) WHERE type != 'meta' AND name NOT LIKE 'sqlite_%' ORDER BY tbl_name, type DESC, name\"];\n    \n    return rs;\n}\n\n/* \n get table schema: result colums: cid[INTEGER], name,type [STRING], notnull[INTEGER], dflt_value[],pk[INTEGER]\n*/\n- (FMResultSet * _Nullable)getTableSchema:(NSString*)tableName {\n    \n    //result colums: cid[INTEGER], name,type [STRING], notnull[INTEGER], dflt_value[],pk[INTEGER]\n    FMResultSet *rs = [self executeQuery:[NSString stringWithFormat: @\"pragma table_info('%@')\", tableName]];\n    \n    return rs;\n}\n\n- (BOOL)columnExists:(NSString*)columnName inTableWithName:(NSString*)tableName {\n    \n    BOOL returnBool = NO;\n    \n    tableName  = [tableName lowercaseString];\n    columnName = [columnName lowercaseString];\n    \n    FMResultSet *rs = [self getTableSchema:tableName];\n    \n    //check if column is present in table schema\n    while ([rs next]) {\n        if ([[[rs stringForColumn:@\"name\"] lowercaseString] isEqualToString:columnName]) {\n            returnBool = YES;\n            break;\n        }\n    }\n    \n    //If this is not done FMDatabase instance stays out of pool\n    [rs close];\n    \n    return returnBool;\n}\n\n\n\n- (uint32_t)applicationID {\n#if SQLITE_VERSION_NUMBER >= 3007017\n    uint32_t r = 0;\n    \n    FMResultSet *rs = [self executeQuery:@\"pragma application_id\"];\n    \n    if ([rs next]) {\n        r = (uint32_t)[rs longLongIntForColumnIndex:0];\n    }\n    \n    [rs close];\n    \n    return r;\n#else\n    NSString *errorMessage = NSLocalizedStringFromTable(@\"Application ID functions require SQLite 3.7.17\", @\"FMDB\", nil);\n    if (self.logsErrors) NSLog(@\"%@\", errorMessage);\n    return 0;\n#endif\n}\n\n- (void)setApplicationID:(uint32_t)appID {\n#if SQLITE_VERSION_NUMBER >= 3007017\n    NSString *query = [NSString stringWithFormat:@\"pragma application_id=%d\", appID];\n    FMResultSet *rs = [self executeQuery:query];\n    [rs next];\n    [rs close];\n#else\n    NSString *errorMessage = NSLocalizedStringFromTable(@\"Application ID functions require SQLite 3.7.17\", @\"FMDB\", nil);\n    if (self.logsErrors) NSLog(@\"%@\", errorMessage);\n#endif\n}\n\n\n#if TARGET_OS_MAC && !TARGET_OS_IPHONE\n\n- (NSString*)applicationIDString {\n#if SQLITE_VERSION_NUMBER >= 3007017\n    NSString *s = NSFileTypeForHFSTypeCode([self applicationID]);\n    \n    assert([s length] == 6);\n    \n    s = [s substringWithRange:NSMakeRange(1, 4)];\n    \n    \n    return s;\n#else\n    NSString *errorMessage = NSLocalizedStringFromTable(@\"Application ID functions require SQLite 3.7.17\", @\"FMDB\", nil);\n    if (self.logsErrors) NSLog(@\"%@\", errorMessage);\n    return nil;\n#endif\n}\n\n- (void)setApplicationIDString:(NSString*)s {\n#if SQLITE_VERSION_NUMBER >= 3007017\n    if ([s length] != 4) {\n        NSLog(@\"setApplicationIDString: string passed is not exactly 4 chars long. (was %ld)\", [s length]);\n    }\n    \n    [self setApplicationID:NSHFSTypeCodeFromFileType([NSString stringWithFormat:@\"'%@'\", s])];\n#else\n    NSString *errorMessage = NSLocalizedStringFromTable(@\"Application ID functions require SQLite 3.7.17\", @\"FMDB\", nil);\n    if (self.logsErrors) NSLog(@\"%@\", errorMessage);\n#endif\n}\n\n#endif\n\n- (uint32_t)userVersion {\n    uint32_t r = 0;\n    \n    FMResultSet *rs = [self executeQuery:@\"pragma user_version\"];\n    \n    if ([rs next]) {\n        r = (uint32_t)[rs longLongIntForColumnIndex:0];\n    }\n    \n    [rs close];\n    return r;\n}\n\n- (void)setUserVersion:(uint32_t)version {\n    NSString *query = [NSString stringWithFormat:@\"pragma user_version = %d\", version];\n    FMResultSet *rs = [self executeQuery:query];\n    [rs next];\n    [rs close];\n}\n\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wdeprecated-implementations\"\n\n- (BOOL)columnExists:(NSString*)tableName columnName:(NSString*)columnName __attribute__ ((deprecated)) {\n    return [self columnExists:columnName inTableWithName:tableName];\n}\n\n#pragma clang diagnostic pop\n\n- (BOOL)validateSQL:(NSString*)sql error:(NSError**)error {\n    sqlite3_stmt *pStmt = NULL;\n    BOOL validationSucceeded = YES;\n    \n    int rc = sqlite3_prepare_v2([self sqliteHandle], [sql UTF8String], -1, &pStmt, 0);\n    if (rc != SQLITE_OK) {\n        validationSucceeded = NO;\n        if (error) {\n            *error = [NSError errorWithDomain:NSCocoaErrorDomain\n                                         code:[self lastErrorCode]\n                                     userInfo:[NSDictionary dictionaryWithObject:[self lastErrorMessage]\n                                                                          forKey:NSLocalizedDescriptionKey]];\n        }\n    }\n    \n    sqlite3_finalize(pStmt);\n    \n    return validationSucceeded;\n}\n\n@end\n"
  },
  {
    "path": "native/ios/WatermelonDB/FMDB/src/fmdb/FMDatabasePool.h",
    "content": "//\n//  FMDatabasePool.h\n//  fmdb\n//\n//  Created by August Mueller on 6/22/11.\n//  Copyright 2011 Flying Meat Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\n@class FMDatabase;\n\n/** Pool of `<FMDatabase>` objects.\n\n ### See also\n \n - `<FMDatabaseQueue>`\n - `<FMDatabase>`\n\n @warning Before using `FMDatabasePool`, please consider using `<FMDatabaseQueue>` instead.\n\n If you really really really know what you're doing and `FMDatabasePool` is what\n you really really need (ie, you're using a read only database), OK you can use\n it.  But just be careful not to deadlock!\n\n For an example on deadlocking, search for:\n `ONLY_USE_THE_POOL_IF_YOU_ARE_DOING_READS_OTHERWISE_YOULL_DEADLOCK_USE_FMDATABASEQUEUE_INSTEAD`\n in the main.m file.\n */\n\n@interface FMDatabasePool : NSObject\n\n/** Database path */\n\n@property (atomic, copy, nullable) NSString *path;\n\n/** Delegate object */\n\n@property (atomic, assign, nullable) id delegate;\n\n/** Maximum number of databases to create */\n\n@property (atomic, assign) NSUInteger maximumNumberOfDatabasesToCreate;\n\n/** Open flags */\n\n@property (atomic, readonly) int openFlags;\n\n/**  Custom virtual file system name */\n\n@property (atomic, copy, nullable) NSString *vfsName;\n\n\n///---------------------\n/// @name Initialization\n///---------------------\n\n/** Create pool using path.\n \n @param aPath The file path of the database.\n \n @return The `FMDatabasePool` object. `nil` on error.\n */\n\n+ (instancetype)databasePoolWithPath:(NSString * _Nullable)aPath;\n\n/** Create pool using file URL.\n \n @param url The file `NSURL` of the database.\n \n @return The `FMDatabasePool` object. `nil` on error.\n */\n\n+ (instancetype)databasePoolWithURL:(NSURL * _Nullable)url;\n\n/** Create pool using path and specified flags\n \n @param aPath The file path of the database.\n @param openFlags Flags passed to the openWithFlags method of the database.\n \n @return The `FMDatabasePool` object. `nil` on error.\n */\n\n+ (instancetype)databasePoolWithPath:(NSString * _Nullable)aPath flags:(int)openFlags;\n\n/** Create pool using file URL and specified flags\n \n @param url The file `NSURL` of the database.\n @param openFlags Flags passed to the openWithFlags method of the database.\n \n @return The `FMDatabasePool` object. `nil` on error.\n */\n\n+ (instancetype)databasePoolWithURL:(NSURL * _Nullable)url flags:(int)openFlags;\n\n/** Create pool using path.\n \n @param aPath The file path of the database.\n \n @return The `FMDatabasePool` object. `nil` on error.\n */\n\n- (instancetype)initWithPath:(NSString * _Nullable)aPath;\n\n/** Create pool using file URL.\n \n @param url The file `NSURL of the database.\n \n @return The `FMDatabasePool` object. `nil` on error.\n */\n\n- (instancetype)initWithURL:(NSURL * _Nullable)url;\n\n/** Create pool using path and specified flags.\n \n @param aPath The file path of the database.\n @param openFlags Flags passed to the openWithFlags method of the database\n \n @return The `FMDatabasePool` object. `nil` on error.\n */\n\n- (instancetype)initWithPath:(NSString * _Nullable)aPath flags:(int)openFlags;\n\n/** Create pool using file URL and specified flags.\n \n @param url The file `NSURL` of the database.\n @param openFlags Flags passed to the openWithFlags method of the database\n \n @return The `FMDatabasePool` object. `nil` on error.\n */\n\n- (instancetype)initWithURL:(NSURL * _Nullable)url flags:(int)openFlags;\n\n/** Create pool using path and specified flags.\n \n @param aPath The file path of the database.\n @param openFlags Flags passed to the openWithFlags method of the database\n @param vfsName The name of a custom virtual file system\n \n @return The `FMDatabasePool` object. `nil` on error.\n */\n\n- (instancetype)initWithPath:(NSString * _Nullable)aPath flags:(int)openFlags vfs:(NSString * _Nullable)vfsName;\n\n/** Create pool using file URL and specified flags.\n \n @param url The file `NSURL` of the database.\n @param openFlags Flags passed to the openWithFlags method of the database\n @param vfsName The name of a custom virtual file system\n \n @return The `FMDatabasePool` object. `nil` on error.\n */\n\n- (instancetype)initWithURL:(NSURL * _Nullable)url flags:(int)openFlags vfs:(NSString * _Nullable)vfsName;\n\n/** Returns the Class of 'FMDatabase' subclass, that will be used to instantiate database object.\n\n Subclasses can override this method to return specified Class of 'FMDatabase' subclass.\n\n @return The Class of 'FMDatabase' subclass, that will be used to instantiate database object.\n */\n\n+ (Class)databaseClass;\n\n///------------------------------------------------\n/// @name Keeping track of checked in/out databases\n///------------------------------------------------\n\n/** Number of checked-in databases in pool\n */\n\n@property (nonatomic, readonly) NSUInteger countOfCheckedInDatabases;\n\n/** Number of checked-out databases in pool\n */\n\n@property (nonatomic, readonly) NSUInteger countOfCheckedOutDatabases;\n\n/** Total number of databases in pool\n */\n\n@property (nonatomic, readonly) NSUInteger countOfOpenDatabases;\n\n/** Release all databases in pool */\n\n- (void)releaseAllDatabases;\n\n///------------------------------------------\n/// @name Perform database operations in pool\n///------------------------------------------\n\n/** Synchronously perform database operations in pool.\n\n @param block The code to be run on the `FMDatabasePool` pool.\n */\n\n- (void)inDatabase:(__attribute__((noescape)) void (^)(FMDatabase *db))block;\n\n/** Synchronously perform database operations in pool using transaction.\n \n @param block The code to be run on the `FMDatabasePool` pool.\n \n @warning   Unlike SQLite's `BEGIN TRANSACTION`, this method currently performs\n            an exclusive transaction, not a deferred transaction. This behavior\n            is likely to change in future versions of FMDB, whereby this method\n            will likely eventually adopt standard SQLite behavior and perform\n            deferred transactions. If you really need exclusive tranaction, it is\n            recommended that you use `inExclusiveTransaction`, instead, not only\n            to make your intent explicit, but also to future-proof your code.\n  */\n\n- (void)inTransaction:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block;\n\n/** Synchronously perform database operations in pool using exclusive transaction.\n \n @param block The code to be run on the `FMDatabasePool` pool.\n */\n\n- (void)inExclusiveTransaction:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block;\n\n/** Synchronously perform database operations in pool using deferred transaction.\n\n @param block The code to be run on the `FMDatabasePool` pool.\n */\n\n- (void)inDeferredTransaction:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block;\n\n/** Synchronously perform database operations on queue, using immediate transactions.\n\n @param block The code to be run on the queue of `FMDatabaseQueue`\n */\n\n- (void)inImmediateTransaction:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block;\n\n/** Synchronously perform database operations in pool using save point.\n\n @param block The code to be run on the `FMDatabasePool` pool.\n \n @return `NSError` object if error; `nil` if successful.\n\n @warning You can not nest these, since calling it will pull another database out of the pool and you'll get a deadlock. If you need to nest, use `<[FMDatabase startSavePointWithName:error:]>` instead.\n*/\n\n- (NSError * _Nullable)inSavePoint:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block;\n\n@end\n\n\n/** FMDatabasePool delegate category\n \n This is a category that defines the protocol for the FMDatabasePool delegate\n */\n\n@interface NSObject (FMDatabasePoolDelegate)\n\n/** Asks the delegate whether database should be added to the pool. \n \n @param pool     The `FMDatabasePool` object.\n @param database The `FMDatabase` object.\n \n @return `YES` if it should add database to pool; `NO` if not.\n \n */\n\n- (BOOL)databasePool:(FMDatabasePool*)pool shouldAddDatabaseToPool:(FMDatabase*)database;\n\n/** Tells the delegate that database was added to the pool.\n \n @param pool     The `FMDatabasePool` object.\n @param database The `FMDatabase` object.\n\n */\n\n- (void)databasePool:(FMDatabasePool*)pool didAddDatabase:(FMDatabase*)database;\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/ios/WatermelonDB/FMDB/src/fmdb/FMDatabasePool.m",
    "content": "//\n//  FMDatabasePool.m\n//  fmdb\n//\n//  Created by August Mueller on 6/22/11.\n//  Copyright 2011 Flying Meat Inc. All rights reserved.\n//\n\n#if FMDB_SQLITE_STANDALONE\n#import <sqlite3/sqlite3.h>\n#else\n#import <sqlite3.h>\n#endif\n\n#import \"FMDatabasePool.h\"\n#import \"FMDatabase.h\"\n\ntypedef NS_ENUM(NSInteger, FMDBTransaction) {\n    FMDBTransactionExclusive,\n    FMDBTransactionDeferred,\n    FMDBTransactionImmediate,\n};\n\n@interface FMDatabasePool () {\n    dispatch_queue_t    _lockQueue;\n    \n    NSMutableArray      *_databaseInPool;\n    NSMutableArray      *_databaseOutPool;\n}\n\n- (void)pushDatabaseBackInPool:(FMDatabase*)db;\n- (FMDatabase*)db;\n\n@end\n\n\n@implementation FMDatabasePool\n@synthesize path=_path;\n@synthesize delegate=_delegate;\n@synthesize maximumNumberOfDatabasesToCreate=_maximumNumberOfDatabasesToCreate;\n@synthesize openFlags=_openFlags;\n\n\n+ (instancetype)databasePoolWithPath:(NSString *)aPath {\n    return FMDBReturnAutoreleased([[self alloc] initWithPath:aPath]);\n}\n\n+ (instancetype)databasePoolWithURL:(NSURL *)url {\n    return FMDBReturnAutoreleased([[self alloc] initWithPath:url.path]);\n}\n\n+ (instancetype)databasePoolWithPath:(NSString *)aPath flags:(int)openFlags {\n    return FMDBReturnAutoreleased([[self alloc] initWithPath:aPath flags:openFlags]);\n}\n\n+ (instancetype)databasePoolWithURL:(NSURL *)url flags:(int)openFlags {\n    return FMDBReturnAutoreleased([[self alloc] initWithPath:url.path flags:openFlags]);\n}\n\n- (instancetype)initWithURL:(NSURL *)url flags:(int)openFlags vfs:(NSString *)vfsName {\n    return [self initWithPath:url.path flags:openFlags vfs:vfsName];\n}\n\n- (instancetype)initWithPath:(NSString*)aPath flags:(int)openFlags vfs:(NSString *)vfsName {\n    \n    self = [super init];\n    \n    if (self != nil) {\n        _path               = [aPath copy];\n        _lockQueue          = dispatch_queue_create([[NSString stringWithFormat:@\"fmdb.%@\", self] UTF8String], NULL);\n        _databaseInPool     = FMDBReturnRetained([NSMutableArray array]);\n        _databaseOutPool    = FMDBReturnRetained([NSMutableArray array]);\n        _openFlags          = openFlags;\n        _vfsName            = [vfsName copy];\n    }\n    \n    return self;\n}\n\n- (instancetype)initWithPath:(NSString *)aPath flags:(int)openFlags {\n    return [self initWithPath:aPath flags:openFlags vfs:nil];\n}\n\n- (instancetype)initWithURL:(NSURL *)url flags:(int)openFlags {\n    return [self initWithPath:url.path flags:openFlags vfs:nil];\n}\n\n- (instancetype)initWithPath:(NSString*)aPath {\n    // default flags for sqlite3_open\n    return [self initWithPath:aPath flags:SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE];\n}\n\n- (instancetype)initWithURL:(NSURL *)url {\n    return [self initWithPath:url.path];\n}\n\n- (instancetype)init {\n    return [self initWithPath:nil];\n}\n\n+ (Class)databaseClass {\n    return [FMDatabase class];\n}\n\n- (void)dealloc {\n    \n    _delegate = 0x00;\n    FMDBRelease(_path);\n    FMDBRelease(_databaseInPool);\n    FMDBRelease(_databaseOutPool);\n    FMDBRelease(_vfsName);\n    \n    if (_lockQueue) {\n        FMDBDispatchQueueRelease(_lockQueue);\n        _lockQueue = 0x00;\n    }\n#if ! __has_feature(objc_arc)\n    [super dealloc];\n#endif\n}\n\n\n- (void)executeLocked:(void (^)(void))aBlock {\n    dispatch_sync(_lockQueue, aBlock);\n}\n\n- (void)pushDatabaseBackInPool:(FMDatabase*)db {\n    \n    if (!db) { // db can be null if we set an upper bound on the # of databases to create.\n        return;\n    }\n    \n    [self executeLocked:^() {\n        \n        if ([self->_databaseInPool containsObject:db]) {\n            [[NSException exceptionWithName:@\"Database already in pool\" reason:@\"The FMDatabase being put back into the pool is already present in the pool\" userInfo:nil] raise];\n        }\n        \n        [self->_databaseInPool addObject:db];\n        [self->_databaseOutPool removeObject:db];\n        \n    }];\n}\n\n- (FMDatabase*)db {\n    \n    __block FMDatabase *db;\n    \n    \n    [self executeLocked:^() {\n        db = [self->_databaseInPool lastObject];\n        \n        BOOL shouldNotifyDelegate = NO;\n        \n        if (db) {\n            [self->_databaseOutPool addObject:db];\n            [self->_databaseInPool removeLastObject];\n        }\n        else {\n            \n            if (self->_maximumNumberOfDatabasesToCreate) {\n                NSUInteger currentCount = [self->_databaseOutPool count] + [self->_databaseInPool count];\n                \n                if (currentCount >= self->_maximumNumberOfDatabasesToCreate) {\n                    NSLog(@\"Maximum number of databases (%ld) has already been reached!\", (long)currentCount);\n                    return;\n                }\n            }\n            \n            db = [[[self class] databaseClass] databaseWithPath:self->_path];\n            shouldNotifyDelegate = YES;\n        }\n        \n        //This ensures that the db is opened before returning\n#if SQLITE_VERSION_NUMBER >= 3005000\n        BOOL success = [db openWithFlags:self->_openFlags vfs:self->_vfsName];\n#else\n        BOOL success = [db open];\n#endif\n        if (success) {\n            if ([self->_delegate respondsToSelector:@selector(databasePool:shouldAddDatabaseToPool:)] && ![self->_delegate databasePool:self shouldAddDatabaseToPool:db]) {\n                [db close];\n                db = 0x00;\n            }\n            else {\n                //It should not get added in the pool twice if lastObject was found\n                if (![self->_databaseOutPool containsObject:db]) {\n                    [self->_databaseOutPool addObject:db];\n                    \n                    if (shouldNotifyDelegate && [self->_delegate respondsToSelector:@selector(databasePool:didAddDatabase:)]) {\n                        [self->_delegate databasePool:self didAddDatabase:db];\n                    }\n                }\n            }\n        }\n        else {\n            NSLog(@\"Could not open up the database at path %@\", self->_path);\n            db = 0x00;\n        }\n    }];\n    \n    return db;\n}\n\n- (NSUInteger)countOfCheckedInDatabases {\n    \n    __block NSUInteger count;\n    \n    [self executeLocked:^() {\n        count = [self->_databaseInPool count];\n    }];\n    \n    return count;\n}\n\n- (NSUInteger)countOfCheckedOutDatabases {\n    \n    __block NSUInteger count;\n    \n    [self executeLocked:^() {\n        count = [self->_databaseOutPool count];\n    }];\n    \n    return count;\n}\n\n- (NSUInteger)countOfOpenDatabases {\n    __block NSUInteger count;\n    \n    [self executeLocked:^() {\n        count = [self->_databaseOutPool count] + [self->_databaseInPool count];\n    }];\n    \n    return count;\n}\n\n- (void)releaseAllDatabases {\n    [self executeLocked:^() {\n        [self->_databaseOutPool removeAllObjects];\n        [self->_databaseInPool removeAllObjects];\n    }];\n}\n\n- (void)inDatabase:(__attribute__((noescape)) void (^)(FMDatabase *db))block {\n    \n    FMDatabase *db = [self db];\n    \n    block(db);\n    \n    [self pushDatabaseBackInPool:db];\n}\n\n- (void)beginTransaction:(FMDBTransaction)transaction withBlock:(void (^)(FMDatabase *db, BOOL *rollback))block {\n    \n    BOOL shouldRollback = NO;\n    \n    FMDatabase *db = [self db];\n    \n    switch (transaction) {\n        case FMDBTransactionExclusive:\n            [db beginTransaction];\n            break;\n        case FMDBTransactionDeferred:\n            [db beginDeferredTransaction];\n            break;\n        case FMDBTransactionImmediate:\n            [db beginImmediateTransaction];\n            break;\n    }\n    \n    \n    block(db, &shouldRollback);\n    \n    if (shouldRollback) {\n        [db rollback];\n    }\n    else {\n        [db commit];\n    }\n    \n    [self pushDatabaseBackInPool:db];\n}\n\n- (void)inTransaction:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block {\n    [self beginTransaction:FMDBTransactionExclusive withBlock:block];\n}\n\n- (void)inDeferredTransaction:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block {\n    [self beginTransaction:FMDBTransactionDeferred withBlock:block];\n}\n\n- (void)inExclusiveTransaction:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block {\n    [self beginTransaction:FMDBTransactionExclusive withBlock:block];\n}\n\n- (void)inImmediateTransaction:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block {\n    [self beginTransaction:FMDBTransactionImmediate withBlock:block];\n}\n\n- (NSError*)inSavePoint:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block {\n#if SQLITE_VERSION_NUMBER >= 3007000\n    static unsigned long savePointIdx = 0;\n    \n    NSString *name = [NSString stringWithFormat:@\"savePoint%ld\", savePointIdx++];\n    \n    BOOL shouldRollback = NO;\n    \n    FMDatabase *db = [self db];\n    \n    NSError *err = 0x00;\n    \n    if (![db startSavePointWithName:name error:&err]) {\n        [self pushDatabaseBackInPool:db];\n        return err;\n    }\n    \n    block(db, &shouldRollback);\n    \n    if (shouldRollback) {\n        // We need to rollback and release this savepoint to remove it\n        [db rollbackToSavePointWithName:name error:&err];\n    }\n    [db releaseSavePointWithName:name error:&err];\n    \n    [self pushDatabaseBackInPool:db];\n    \n    return err;\n#else\n    NSString *errorMessage = NSLocalizedStringFromTable(@\"Save point functions require SQLite 3.7\", @\"FMDB\", nil);\n    if (self.logsErrors) NSLog(@\"%@\", errorMessage);\n    return [NSError errorWithDomain:@\"FMDatabase\" code:0 userInfo:@{NSLocalizedDescriptionKey : errorMessage}];\n#endif\n}\n\n@end\n"
  },
  {
    "path": "native/ios/WatermelonDB/FMDB/src/fmdb/FMDatabaseQueue.h",
    "content": "//\n//  FMDatabaseQueue.h\n//  fmdb\n//\n//  Created by August Mueller on 6/22/11.\n//  Copyright 2011 Flying Meat Inc. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import \"FMDatabase.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n\n/** To perform queries and updates on multiple threads, you'll want to use `FMDatabaseQueue`.\n\n Using a single instance of `<FMDatabase>` from multiple threads at once is a bad idea.  It has always been OK to make a `<FMDatabase>` object *per thread*.  Just don't share a single instance across threads, and definitely not across multiple threads at the same time.\n\n Instead, use `FMDatabaseQueue`. Here's how to use it:\n\n First, make your queue.\n\n    FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:aPath];\n\n Then use it like so:\n\n    [queue inDatabase:^(FMDatabase *db) {\n        [db executeUpdate:@\"INSERT INTO myTable VALUES (?)\", [NSNumber numberWithInt:1]];\n        [db executeUpdate:@\"INSERT INTO myTable VALUES (?)\", [NSNumber numberWithInt:2]];\n        [db executeUpdate:@\"INSERT INTO myTable VALUES (?)\", [NSNumber numberWithInt:3]];\n\n        FMResultSet *rs = [db executeQuery:@\"select * from foo\"];\n        while ([rs next]) {\n            //…\n        }\n    }];\n\n An easy way to wrap things up in a transaction can be done like this:\n\n    [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {\n        [db executeUpdate:@\"INSERT INTO myTable VALUES (?)\", [NSNumber numberWithInt:1]];\n        [db executeUpdate:@\"INSERT INTO myTable VALUES (?)\", [NSNumber numberWithInt:2]];\n        [db executeUpdate:@\"INSERT INTO myTable VALUES (?)\", [NSNumber numberWithInt:3]];\n\n        if (whoopsSomethingWrongHappened) {\n            *rollback = YES;\n            return;\n        }\n        // etc…\n        [db executeUpdate:@\"INSERT INTO myTable VALUES (?)\", [NSNumber numberWithInt:4]];\n    }];\n\n `FMDatabaseQueue` will run the blocks on a serialized queue (hence the name of the class).  So if you call `FMDatabaseQueue`'s methods from multiple threads at the same time, they will be executed in the order they are received.  This way queries and updates won't step on each other's toes, and every one is happy.\n\n ### See also\n\n - `<FMDatabase>`\n\n @warning Do not instantiate a single `<FMDatabase>` object and use it across multiple threads. Use `FMDatabaseQueue` instead.\n \n @warning The calls to `FMDatabaseQueue`'s methods are blocking.  So even though you are passing along blocks, they will **not** be run on another thread.\n\n */\n\n@interface FMDatabaseQueue : NSObject\n/** Path of database */\n\n@property (atomic, retain, nullable) NSString *path;\n\n/** Open flags */\n\n@property (atomic, readonly) int openFlags;\n\n/**  Custom virtual file system name */\n\n@property (atomic, copy, nullable) NSString *vfsName;\n\n///----------------------------------------------------\n/// @name Initialization, opening, and closing of queue\n///----------------------------------------------------\n\n/** Create queue using path.\n \n @param aPath The file path of the database.\n \n @return The `FMDatabaseQueue` object. `nil` on error.\n */\n\n+ (nullable instancetype)databaseQueueWithPath:(NSString * _Nullable)aPath;\n\n/** Create queue using file URL.\n \n @param url The file `NSURL` of the database.\n \n @return The `FMDatabaseQueue` object. `nil` on error.\n */\n\n+ (nullable instancetype)databaseQueueWithURL:(NSURL * _Nullable)url;\n\n/** Create queue using path and specified flags.\n \n @param aPath The file path of the database.\n @param openFlags Flags passed to the openWithFlags method of the database.\n \n @return The `FMDatabaseQueue` object. `nil` on error.\n */\n+ (nullable instancetype)databaseQueueWithPath:(NSString * _Nullable)aPath flags:(int)openFlags;\n\n/** Create queue using file URL and specified flags.\n \n @param url The file `NSURL` of the database.\n @param openFlags Flags passed to the openWithFlags method of the database.\n \n @return The `FMDatabaseQueue` object. `nil` on error.\n */\n+ (nullable instancetype)databaseQueueWithURL:(NSURL * _Nullable)url flags:(int)openFlags;\n\n/** Create queue using path.\n \n @param aPath The file path of the database.\n \n @return The `FMDatabaseQueue` object. `nil` on error.\n */\n\n- (nullable instancetype)initWithPath:(NSString * _Nullable)aPath;\n\n/** Create queue using file URL.\n \n @param url The file `NSURL of the database.\n \n @return The `FMDatabaseQueue` object. `nil` on error.\n */\n\n- (nullable instancetype)initWithURL:(NSURL * _Nullable)url;\n\n/** Create queue using path and specified flags.\n \n @param aPath The file path of the database.\n @param openFlags Flags passed to the openWithFlags method of the database.\n \n @return The `FMDatabaseQueue` object. `nil` on error.\n */\n\n- (nullable instancetype)initWithPath:(NSString * _Nullable)aPath flags:(int)openFlags;\n\n/** Create queue using file URL and specified flags.\n \n @param url The file path of the database.\n @param openFlags Flags passed to the openWithFlags method of the database.\n \n @return The `FMDatabaseQueue` object. `nil` on error.\n */\n\n- (nullable instancetype)initWithURL:(NSURL * _Nullable)url flags:(int)openFlags;\n\n/** Create queue using path and specified flags.\n \n @param aPath The file path of the database.\n @param openFlags Flags passed to the openWithFlags method of the database\n @param vfsName The name of a custom virtual file system\n \n @return The `FMDatabaseQueue` object. `nil` on error.\n */\n\n- (nullable instancetype)initWithPath:(NSString * _Nullable)aPath flags:(int)openFlags vfs:(NSString * _Nullable)vfsName;\n\n/** Create queue using file URL and specified flags.\n \n @param url The file `NSURL of the database.\n @param openFlags Flags passed to the openWithFlags method of the database\n @param vfsName The name of a custom virtual file system\n \n @return The `FMDatabaseQueue` object. `nil` on error.\n */\n\n- (nullable instancetype)initWithURL:(NSURL * _Nullable)url flags:(int)openFlags vfs:(NSString * _Nullable)vfsName;\n\n/** Returns the Class of 'FMDatabase' subclass, that will be used to instantiate database object.\n \n Subclasses can override this method to return specified Class of 'FMDatabase' subclass.\n \n @return The Class of 'FMDatabase' subclass, that will be used to instantiate database object.\n */\n\n+ (Class)databaseClass;\n\n/** Close database used by queue. */\n\n- (void)close;\n\n/** Interupt pending database operation. */\n\n- (void)interrupt;\n\n///-----------------------------------------------\n/// @name Dispatching database operations to queue\n///-----------------------------------------------\n\n/** Synchronously perform database operations on queue.\n \n @param block The code to be run on the queue of `FMDatabaseQueue`\n */\n\n- (void)inDatabase:(__attribute__((noescape)) void (^)(FMDatabase *db))block;\n\n/** Synchronously perform database operations on queue, using transactions.\n\n @param block The code to be run on the queue of `FMDatabaseQueue`\n \n @warning    Unlike SQLite's `BEGIN TRANSACTION`, this method currently performs\n             an exclusive transaction, not a deferred transaction. This behavior\n             is likely to change in future versions of FMDB, whereby this method\n             will likely eventually adopt standard SQLite behavior and perform\n             deferred transactions. If you really need exclusive tranaction, it is\n             recommended that you use `inExclusiveTransaction`, instead, not only\n             to make your intent explicit, but also to future-proof your code.\n\n */\n\n- (void)inTransaction:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block;\n\n/** Synchronously perform database operations on queue, using deferred transactions.\n \n @param block The code to be run on the queue of `FMDatabaseQueue`\n */\n\n- (void)inDeferredTransaction:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block;\n\n/** Synchronously perform database operations on queue, using exclusive transactions.\n \n @param block The code to be run on the queue of `FMDatabaseQueue`\n */\n\n- (void)inExclusiveTransaction:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block;\n\n/** Synchronously perform database operations on queue, using immediate transactions.\n\n @param block The code to be run on the queue of `FMDatabaseQueue`\n */\n\n- (void)inImmediateTransaction:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block;\n\n///-----------------------------------------------\n/// @name Dispatching database operations to queue\n///-----------------------------------------------\n\n/** Synchronously perform database operations using save point.\n\n @param block The code to be run on the queue of `FMDatabaseQueue`\n */\n\n// NOTE: you can not nest these, since calling it will pull another database out of the pool and you'll get a deadlock.\n// If you need to nest, use FMDatabase's startSavePointWithName:error: instead.\n- (NSError * _Nullable)inSavePoint:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block;\n\n///-----------------\n/// @name Checkpoint\n///-----------------\n\n/** Performs a WAL checkpoint\n \n @param checkpointMode The checkpoint mode for sqlite3_wal_checkpoint_v2\n @param error The NSError corresponding to the error, if any.\n @return YES on success, otherwise NO.\n */\n- (BOOL)checkpoint:(FMDBCheckpointMode)checkpointMode error:(NSError * _Nullable *)error;\n\n/** Performs a WAL checkpoint\n \n @param checkpointMode The checkpoint mode for sqlite3_wal_checkpoint_v2\n @param name The db name for sqlite3_wal_checkpoint_v2\n @param error The NSError corresponding to the error, if any.\n @return YES on success, otherwise NO.\n */\n- (BOOL)checkpoint:(FMDBCheckpointMode)checkpointMode name:(NSString * _Nullable)name error:(NSError * _Nullable *)error;\n\n/** Performs a WAL checkpoint\n \n @param checkpointMode The checkpoint mode for sqlite3_wal_checkpoint_v2\n @param name The db name for sqlite3_wal_checkpoint_v2\n @param error The NSError corresponding to the error, if any.\n @param logFrameCount If not NULL, then this is set to the total number of frames in the log file or to -1 if the checkpoint could not run because of an error or because the database is not in WAL mode.\n @param checkpointCount If not NULL, then this is set to the total number of checkpointed frames in the log file (including any that were already checkpointed before the function was called) or to -1 if the checkpoint could not run due to an error or because the database is not in WAL mode.\n @return YES on success, otherwise NO.\n */\n- (BOOL)checkpoint:(FMDBCheckpointMode)checkpointMode name:(NSString * _Nullable)name logFrameCount:(int * _Nullable)logFrameCount checkpointCount:(int * _Nullable)checkpointCount error:(NSError * _Nullable *)error;\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/ios/WatermelonDB/FMDB/src/fmdb/FMDatabaseQueue.m",
    "content": "//\n//  FMDatabaseQueue.m\n//  fmdb\n//\n//  Created by August Mueller on 6/22/11.\n//  Copyright 2011 Flying Meat Inc. All rights reserved.\n//\n\n#import \"FMDatabaseQueue.h\"\n#import \"FMDatabase.h\"\n\n#if FMDB_SQLITE_STANDALONE\n#import <sqlite3/sqlite3.h>\n#else\n#import <sqlite3.h>\n#endif\n\ntypedef NS_ENUM(NSInteger, FMDBTransaction) {\n    FMDBTransactionExclusive,\n    FMDBTransactionDeferred,\n    FMDBTransactionImmediate,\n};\n\n/*\n \n Note: we call [self retain]; before using dispatch_sync, just incase \n FMDatabaseQueue is released on another thread and we're in the middle of doing\n something in dispatch_sync\n \n */\n\n/*\n * A key used to associate the FMDatabaseQueue object with the dispatch_queue_t it uses.\n * This in turn is used for deadlock detection by seeing if inDatabase: is called on\n * the queue's dispatch queue, which should not happen and causes a deadlock.\n */\nstatic const void * const kDispatchQueueSpecificKey = &kDispatchQueueSpecificKey;\n\n@interface FMDatabaseQueue () {\n    dispatch_queue_t    _queue;\n    FMDatabase          *_db;\n}\n@end\n\n@implementation FMDatabaseQueue\n\n+ (instancetype)databaseQueueWithPath:(NSString *)aPath {\n    FMDatabaseQueue *q = [[self alloc] initWithPath:aPath];\n    \n    FMDBAutorelease(q);\n    \n    return q;\n}\n\n+ (instancetype)databaseQueueWithURL:(NSURL *)url {\n    return [self databaseQueueWithPath:url.path];\n}\n\n+ (instancetype)databaseQueueWithPath:(NSString *)aPath flags:(int)openFlags {\n    FMDatabaseQueue *q = [[self alloc] initWithPath:aPath flags:openFlags];\n    \n    FMDBAutorelease(q);\n    \n    return q;\n}\n\n+ (instancetype)databaseQueueWithURL:(NSURL *)url flags:(int)openFlags {\n    return [self databaseQueueWithPath:url.path flags:openFlags];\n}\n\n+ (Class)databaseClass {\n    return [FMDatabase class];\n}\n\n- (instancetype)initWithURL:(NSURL *)url flags:(int)openFlags vfs:(NSString *)vfsName {\n    return [self initWithPath:url.path flags:openFlags vfs:vfsName];\n}\n\n- (instancetype)initWithPath:(NSString*)aPath flags:(int)openFlags vfs:(NSString *)vfsName {\n    self = [super init];\n    \n    if (self != nil) {\n        \n        _db = [[[self class] databaseClass] databaseWithPath:aPath];\n        FMDBRetain(_db);\n        \n#if SQLITE_VERSION_NUMBER >= 3005000\n        BOOL success = [_db openWithFlags:openFlags vfs:vfsName];\n#else\n        BOOL success = [_db open];\n#endif\n        if (!success) {\n            NSLog(@\"Could not create database queue for path %@\", aPath);\n            FMDBRelease(self);\n            return 0x00;\n        }\n        \n        _path = FMDBReturnRetained(aPath);\n        \n        _queue = dispatch_queue_create([[NSString stringWithFormat:@\"fmdb.%@\", self] UTF8String], NULL);\n        dispatch_queue_set_specific(_queue, kDispatchQueueSpecificKey, (__bridge void *)self, NULL);\n        _openFlags = openFlags;\n        _vfsName = [vfsName copy];\n    }\n    \n    return self;\n}\n\n- (instancetype)initWithPath:(NSString *)aPath flags:(int)openFlags {\n    return [self initWithPath:aPath flags:openFlags vfs:nil];\n}\n\n- (instancetype)initWithURL:(NSURL *)url flags:(int)openFlags {\n    return [self initWithPath:url.path flags:openFlags vfs:nil];\n}\n\n- (instancetype)initWithURL:(NSURL *)url {\n    return [self initWithPath:url.path];\n}\n\n- (instancetype)initWithPath:(NSString *)aPath {\n    // default flags for sqlite3_open\n    return [self initWithPath:aPath flags:SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE vfs:nil];\n}\n\n- (instancetype)init {\n    return [self initWithPath:nil];\n}\n\n- (void)dealloc {\n    FMDBRelease(_db);\n    FMDBRelease(_path);\n    FMDBRelease(_vfsName);\n    \n    if (_queue) {\n        FMDBDispatchQueueRelease(_queue);\n        _queue = 0x00;\n    }\n#if ! __has_feature(objc_arc)\n    [super dealloc];\n#endif\n}\n\n- (void)close {\n    FMDBRetain(self);\n    dispatch_sync(_queue, ^() {\n        [self->_db close];\n        FMDBRelease(_db);\n        self->_db = 0x00;\n    });\n    FMDBRelease(self);\n}\n\n- (void)interrupt {\n    [[self database] interrupt];\n}\n\n- (FMDatabase*)database {\n    if (![_db isOpen]) {\n        if (!_db) {\n           _db = FMDBReturnRetained([[[self class] databaseClass] databaseWithPath:_path]);\n        }\n        \n#if SQLITE_VERSION_NUMBER >= 3005000\n        BOOL success = [_db openWithFlags:_openFlags vfs:_vfsName];\n#else\n        BOOL success = [_db open];\n#endif\n        if (!success) {\n            NSLog(@\"FMDatabaseQueue could not reopen database for path %@\", _path);\n            FMDBRelease(_db);\n            _db  = 0x00;\n            return 0x00;\n        }\n    }\n    \n    return _db;\n}\n\n- (void)inDatabase:(__attribute__((noescape)) void (^)(FMDatabase *db))block {\n#ifndef NDEBUG\n    /* Get the currently executing queue (which should probably be nil, but in theory could be another DB queue\n     * and then check it against self to make sure we're not about to deadlock. */\n    FMDatabaseQueue *currentSyncQueue = (__bridge id)dispatch_get_specific(kDispatchQueueSpecificKey);\n    assert(currentSyncQueue != self && \"inDatabase: was called reentrantly on the same queue, which would lead to a deadlock\");\n#endif\n    \n    FMDBRetain(self);\n    \n    dispatch_sync(_queue, ^() {\n        \n        FMDatabase *db = [self database];\n        \n        block(db);\n        \n        if ([db hasOpenResultSets]) {\n            NSLog(@\"Warning: there is at least one open result set around after performing [FMDatabaseQueue inDatabase:]\");\n            \n#if defined(DEBUG) && DEBUG\n            NSSet *openSetCopy = FMDBReturnAutoreleased([[db valueForKey:@\"_openResultSets\"] copy]);\n            for (NSValue *rsInWrappedInATastyValueMeal in openSetCopy) {\n                FMResultSet *rs = (FMResultSet *)[rsInWrappedInATastyValueMeal pointerValue];\n                NSLog(@\"query: '%@'\", [rs query]);\n            }\n#endif\n        }\n    });\n    \n    FMDBRelease(self);\n}\n\n- (void)beginTransaction:(FMDBTransaction)transaction withBlock:(void (^)(FMDatabase *db, BOOL *rollback))block {\n    FMDBRetain(self);\n    dispatch_sync(_queue, ^() { \n        \n        BOOL shouldRollback = NO;\n\n        switch (transaction) {\n            case FMDBTransactionExclusive:\n                [[self database] beginTransaction];\n                break;\n            case FMDBTransactionDeferred:\n                [[self database] beginDeferredTransaction];\n                break;\n            case FMDBTransactionImmediate:\n                [[self database] beginImmediateTransaction];\n                break;\n        }\n        \n        block([self database], &shouldRollback);\n        \n        if (shouldRollback) {\n            [[self database] rollback];\n        }\n        else {\n            [[self database] commit];\n        }\n    });\n    \n    FMDBRelease(self);\n}\n\n- (void)inTransaction:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block {\n    [self beginTransaction:FMDBTransactionExclusive withBlock:block];\n}\n\n- (void)inDeferredTransaction:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block {\n    [self beginTransaction:FMDBTransactionDeferred withBlock:block];\n}\n\n- (void)inExclusiveTransaction:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block {\n    [self beginTransaction:FMDBTransactionExclusive withBlock:block];\n}\n\n- (void)inImmediateTransaction:(__attribute__((noescape)) void (^)(FMDatabase * _Nonnull, BOOL * _Nonnull))block {\n    [self beginTransaction:FMDBTransactionImmediate withBlock:block];\n}\n\n- (NSError*)inSavePoint:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block {\n#if SQLITE_VERSION_NUMBER >= 3007000\n    static unsigned long savePointIdx = 0;\n    __block NSError *err = 0x00;\n    FMDBRetain(self);\n    dispatch_sync(_queue, ^() { \n        \n        NSString *name = [NSString stringWithFormat:@\"savePoint%ld\", savePointIdx++];\n        \n        BOOL shouldRollback = NO;\n        \n        if ([[self database] startSavePointWithName:name error:&err]) {\n            \n            block([self database], &shouldRollback);\n            \n            if (shouldRollback) {\n                // We need to rollback and release this savepoint to remove it\n                [[self database] rollbackToSavePointWithName:name error:&err];\n            }\n            [[self database] releaseSavePointWithName:name error:&err];\n            \n        }\n    });\n    FMDBRelease(self);\n    return err;\n#else\n    NSString *errorMessage = NSLocalizedStringFromTable(@\"Save point functions require SQLite 3.7\", @\"FMDB\", nil);\n    if (_db.logsErrors) NSLog(@\"%@\", errorMessage);\n    return [NSError errorWithDomain:@\"FMDatabase\" code:0 userInfo:@{NSLocalizedDescriptionKey : errorMessage}];\n#endif\n}\n\n- (BOOL)checkpoint:(FMDBCheckpointMode)mode error:(NSError * __autoreleasing *)error\n{\n    return [self checkpoint:mode name:nil logFrameCount:NULL checkpointCount:NULL error:error];\n}\n\n- (BOOL)checkpoint:(FMDBCheckpointMode)mode name:(NSString *)name error:(NSError * __autoreleasing *)error\n{\n    return [self checkpoint:mode name:name logFrameCount:NULL checkpointCount:NULL error:error];\n}\n\n- (BOOL)checkpoint:(FMDBCheckpointMode)mode name:(NSString *)name logFrameCount:(int * _Nullable)logFrameCount checkpointCount:(int * _Nullable)checkpointCount error:(NSError * __autoreleasing _Nullable * _Nullable)error\n{\n    __block BOOL result;\n    __block NSError *blockError;\n    \n    FMDBRetain(self);\n    dispatch_sync(_queue, ^() {\n        result = [self.database checkpoint:mode name:name logFrameCount:NULL checkpointCount:NULL error:&blockError];\n    });\n    FMDBRelease(self);\n    \n    if (error) {\n        *error = blockError;\n    }\n    return result;\n}\n\n@end\n"
  },
  {
    "path": "native/ios/WatermelonDB/FMDB/src/fmdb/FMResultSet.h",
    "content": "#import <Foundation/Foundation.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\n#ifndef __has_feature      // Optional.\n#define __has_feature(x) 0 // Compatibility with non-clang compilers.\n#endif\n\n#ifndef NS_RETURNS_NOT_RETAINED\n#if __has_feature(attribute_ns_returns_not_retained)\n#define NS_RETURNS_NOT_RETAINED __attribute__((ns_returns_not_retained))\n#else\n#define NS_RETURNS_NOT_RETAINED\n#endif\n#endif\n\n@class FMDatabase;\n@class FMStatement;\n\n/** Represents the results of executing a query on an `<FMDatabase>`.\n \n ### See also\n \n - `<FMDatabase>`\n */\n\n@interface FMResultSet : NSObject\n\n@property (nonatomic, retain, nullable) FMDatabase *parentDB;\n\n///-----------------\n/// @name Properties\n///-----------------\n\n/** Executed query */\n\n@property (atomic, retain, nullable) NSString *query;\n\n/** `NSMutableDictionary` mapping column names to numeric index */\n\n@property (readonly) NSMutableDictionary *columnNameToIndexMap;\n\n/** `FMStatement` used by result set. */\n\n@property (atomic, retain, nullable) FMStatement *statement;\n\n///------------------------------------\n/// @name Creating and closing a result set\n///------------------------------------\n\n/** Create result set from `<FMStatement>`\n \n @param statement A `<FMStatement>` to be performed\n \n @param aDB A `<FMDatabase>` to be used\n \n @return A `FMResultSet` on success; `nil` on failure\n */\n\n+ (instancetype)resultSetWithStatement:(FMStatement *)statement usingParentDatabase:(FMDatabase*)aDB;\n\n/** Close result set */\n\n- (void)close;\n\n///---------------------------------------\n/// @name Iterating through the result set\n///---------------------------------------\n\n/** Retrieve next row for result set.\n \n You must always invoke `next` or `nextWithError` before attempting to access the values returned in a query, even if you're only expecting one.\n\n @return `YES` if row successfully retrieved; `NO` if end of result set reached\n \n @see hasAnotherRow\n */\n\n- (BOOL)next;\n\n/** Retrieve next row for result set.\n \n  You must always invoke `next` or `nextWithError` before attempting to access the values returned in a query, even if you're only expecting one.\n \n @param outErr A 'NSError' object to receive any error object (if any).\n \n @return 'YES' if row successfully retrieved; 'NO' if end of result set reached\n \n @see hasAnotherRow\n */\n\n- (BOOL)nextWithError:(NSError * _Nullable *)outErr;\n\n/** Did the last call to `<next>` succeed in retrieving another row?\n\n @return `YES` if the last call to `<next>` succeeded in retrieving another record; `NO` if not.\n \n @see next\n \n @warning The `hasAnotherRow` method must follow a call to `<next>`. If the previous database interaction was something other than a call to `next`, then this method may return `NO`, whether there is another row of data or not.\n */\n\n- (BOOL)hasAnotherRow;\n\n///---------------------------------------------\n/// @name Retrieving information from result set\n///---------------------------------------------\n\n/** How many columns in result set\n \n @return Integer value of the number of columns.\n */\n\n@property (nonatomic, readonly) int columnCount;\n\n/** Column index for column name\n\n @param columnName `NSString` value of the name of the column.\n\n @return Zero-based index for column.\n */\n\n- (int)columnIndexForName:(NSString*)columnName;\n\n/** Column name for column index\n\n @param columnIdx Zero-based index for column.\n\n @return columnName `NSString` value of the name of the column.\n */\n\n- (NSString * _Nullable)columnNameForIndex:(int)columnIdx;\n\n/** Result set integer value for column.\n\n @param columnName `NSString` value of the name of the column.\n\n @return `int` value of the result set's column.\n */\n\n- (int)intForColumn:(NSString*)columnName;\n\n/** Result set integer value for column.\n\n @param columnIdx Zero-based index for column.\n\n @return `int` value of the result set's column.\n */\n\n- (int)intForColumnIndex:(int)columnIdx;\n\n/** Result set `long` value for column.\n\n @param columnName `NSString` value of the name of the column.\n\n @return `long` value of the result set's column.\n */\n\n- (long)longForColumn:(NSString*)columnName;\n\n/** Result set long value for column.\n\n @param columnIdx Zero-based index for column.\n\n @return `long` value of the result set's column.\n */\n\n- (long)longForColumnIndex:(int)columnIdx;\n\n/** Result set `long long int` value for column.\n\n @param columnName `NSString` value of the name of the column.\n\n @return `long long int` value of the result set's column.\n */\n\n- (long long int)longLongIntForColumn:(NSString*)columnName;\n\n/** Result set `long long int` value for column.\n\n @param columnIdx Zero-based index for column.\n\n @return `long long int` value of the result set's column.\n */\n\n- (long long int)longLongIntForColumnIndex:(int)columnIdx;\n\n/** Result set `unsigned long long int` value for column.\n\n @param columnName `NSString` value of the name of the column.\n\n @return `unsigned long long int` value of the result set's column.\n */\n\n- (unsigned long long int)unsignedLongLongIntForColumn:(NSString*)columnName;\n\n/** Result set `unsigned long long int` value for column.\n\n @param columnIdx Zero-based index for column.\n\n @return `unsigned long long int` value of the result set's column.\n */\n\n- (unsigned long long int)unsignedLongLongIntForColumnIndex:(int)columnIdx;\n\n/** Result set `BOOL` value for column.\n\n @param columnName `NSString` value of the name of the column.\n\n @return `BOOL` value of the result set's column.\n */\n\n- (BOOL)boolForColumn:(NSString*)columnName;\n\n/** Result set `BOOL` value for column.\n\n @param columnIdx Zero-based index for column.\n\n @return `BOOL` value of the result set's column.\n */\n\n- (BOOL)boolForColumnIndex:(int)columnIdx;\n\n/** Result set `double` value for column.\n\n @param columnName `NSString` value of the name of the column.\n\n @return `double` value of the result set's column.\n \n */\n\n- (double)doubleForColumn:(NSString*)columnName;\n\n/** Result set `double` value for column.\n\n @param columnIdx Zero-based index for column.\n\n @return `double` value of the result set's column.\n \n */\n\n- (double)doubleForColumnIndex:(int)columnIdx;\n\n/** Result set `NSString` value for column.\n\n @param columnName `NSString` value of the name of the column.\n\n @return String value of the result set's column.\n \n */\n\n- (NSString * _Nullable)stringForColumn:(NSString*)columnName;\n\n/** Result set `NSString` value for column.\n\n @param columnIdx Zero-based index for column.\n\n @return String value of the result set's column.\n */\n\n- (NSString * _Nullable)stringForColumnIndex:(int)columnIdx;\n\n/** Result set `NSDate` value for column.\n\n @param columnName `NSString` value of the name of the column.\n\n @return Date value of the result set's column.\n */\n\n- (NSDate * _Nullable)dateForColumn:(NSString*)columnName;\n\n/** Result set `NSDate` value for column.\n\n @param columnIdx Zero-based index for column.\n\n @return Date value of the result set's column.\n \n */\n\n- (NSDate * _Nullable)dateForColumnIndex:(int)columnIdx;\n\n/** Result set `NSData` value for column.\n \n This is useful when storing binary data in table (such as image or the like).\n\n @param columnName `NSString` value of the name of the column.\n\n @return Data value of the result set's column.\n \n */\n\n- (NSData * _Nullable)dataForColumn:(NSString*)columnName;\n\n/** Result set `NSData` value for column.\n\n @param columnIdx Zero-based index for column.\n\n @return Data value of the result set's column.\n */\n\n- (NSData * _Nullable)dataForColumnIndex:(int)columnIdx;\n\n/** Result set `(const unsigned char *)` value for column.\n\n @param columnName `NSString` value of the name of the column.\n\n @return `(const unsigned char *)` value of the result set's column.\n */\n\n- (const unsigned char * _Nullable)UTF8StringForColumn:(NSString*)columnName;\n\n- (const unsigned char * _Nullable)UTF8StringForColumnName:(NSString*)columnName __deprecated_msg(\"Use UTF8StringForColumn instead\");\n\n/** Result set `(const unsigned char *)` value for column.\n\n @param columnIdx Zero-based index for column.\n\n @return `(const unsigned char *)` value of the result set's column.\n */\n\n- (const unsigned char * _Nullable)UTF8StringForColumnIndex:(int)columnIdx;\n\n/** Result set object for column.\n\n @param columnName Name of the column.\n\n @return Either `NSNumber`, `NSString`, `NSData`, or `NSNull`. If the column was `NULL`, this returns `[NSNull null]` object.\n\n @see objectForKeyedSubscript:\n */\n\n- (id _Nullable)objectForColumn:(NSString*)columnName;\n\n- (id _Nullable)objectForColumnName:(NSString*)columnName __deprecated_msg(\"Use objectForColumn instead\");\n\n/** Result set object for column.\n\n @param columnIdx Zero-based index for column.\n\n @return Either `NSNumber`, `NSString`, `NSData`, or `NSNull`. If the column was `NULL`, this returns `[NSNull null]` object.\n\n @see objectAtIndexedSubscript:\n */\n\n- (id _Nullable)objectForColumnIndex:(int)columnIdx;\n\n/** Result set object for column.\n \n This method allows the use of the \"boxed\" syntax supported in Modern Objective-C. For example, by defining this method, the following syntax is now supported:\n \n    id result = rs[@\"employee_name\"];\n \n This simplified syntax is equivalent to calling:\n \n    id result = [rs objectForKeyedSubscript:@\"employee_name\"];\n \n which is, it turns out, equivalent to calling:\n \n    id result = [rs objectForColumnName:@\"employee_name\"];\n\n @param columnName `NSString` value of the name of the column.\n\n @return Either `NSNumber`, `NSString`, `NSData`, or `NSNull`. If the column was `NULL`, this returns `[NSNull null]` object.\n */\n\n- (id _Nullable)objectForKeyedSubscript:(NSString *)columnName;\n\n/** Result set object for column.\n\n This method allows the use of the \"boxed\" syntax supported in Modern Objective-C. For example, by defining this method, the following syntax is now supported:\n\n    id result = rs[0];\n\n This simplified syntax is equivalent to calling:\n\n    id result = [rs objectForKeyedSubscript:0];\n\n which is, it turns out, equivalent to calling:\n\n    id result = [rs objectForColumnName:0];\n\n @param columnIdx Zero-based index for column.\n\n @return Either `NSNumber`, `NSString`, `NSData`, or `NSNull`. If the column was `NULL`, this returns `[NSNull null]` object.\n */\n\n- (id _Nullable)objectAtIndexedSubscript:(int)columnIdx;\n\n/** Result set `NSData` value for column.\n\n @param columnName `NSString` value of the name of the column.\n\n @return Data value of the result set's column.\n\n @warning If you are going to use this data after you iterate over the next row, or after you close the\nresult set, make sure to make a copy of the data first (or just use `<dataForColumn:>`/`<dataForColumnIndex:>`)\nIf you don't, you're going to be in a world of hurt when you try and use the data.\n \n */\n\n- (NSData * _Nullable)dataNoCopyForColumn:(NSString *)columnName NS_RETURNS_NOT_RETAINED;\n\n/** Result set `NSData` value for column.\n\n @param columnIdx Zero-based index for column.\n\n @return Data value of the result set's column.\n\n @warning If you are going to use this data after you iterate over the next row, or after you close the\n result set, make sure to make a copy of the data first (or just use `<dataForColumn:>`/`<dataForColumnIndex:>`)\n If you don't, you're going to be in a world of hurt when you try and use the data.\n\n */\n\n- (NSData * _Nullable)dataNoCopyForColumnIndex:(int)columnIdx NS_RETURNS_NOT_RETAINED;\n\n/** Is the column `NULL`?\n \n @param columnIdx Zero-based index for column.\n\n @return `YES` if column is `NULL`; `NO` if not `NULL`.\n */\n\n- (BOOL)columnIndexIsNull:(int)columnIdx;\n\n/** Is the column `NULL`?\n\n @param columnName `NSString` value of the name of the column.\n\n @return `YES` if column is `NULL`; `NO` if not `NULL`.\n */\n\n- (BOOL)columnIsNull:(NSString*)columnName;\n\n\n/** Returns a dictionary of the row results mapped to case sensitive keys of the column names. \n \n @warning The keys to the dictionary are case sensitive of the column names.\n */\n\n@property (nonatomic, readonly, nullable) NSDictionary *resultDictionary;\n \n/** Returns a dictionary of the row results\n \n @see resultDictionary\n \n @warning **Deprecated**: Please use `<resultDictionary>` instead.  Also, beware that `<resultDictionary>` is case sensitive! \n */\n\n- (NSDictionary * _Nullable)resultDict __deprecated_msg(\"Use resultDictionary instead\");\n\n///-----------------------------\n/// @name Key value coding magic\n///-----------------------------\n\n/** Performs `setValue` to yield support for key value observing.\n \n @param object The object for which the values will be set. This is the key-value-coding compliant object that you might, for example, observe.\n\n */\n\n- (void)kvcMagic:(id)object;\n\n \n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/ios/WatermelonDB/FMDB/src/fmdb/FMResultSet.m",
    "content": "#import \"FMResultSet.h\"\n#import \"FMDatabase.h\"\n#import <unistd.h>\n\n#if FMDB_SQLITE_STANDALONE\n#import <sqlite3/sqlite3.h>\n#else\n#import <sqlite3.h>\n#endif\n\n@interface FMDatabase ()\n- (void)resultSetDidClose:(FMResultSet *)resultSet;\n@end\n\n@interface FMResultSet () {\n    NSMutableDictionary *_columnNameToIndexMap;\n}\n@end\n\n@implementation FMResultSet\n\n+ (instancetype)resultSetWithStatement:(FMStatement *)statement usingParentDatabase:(FMDatabase*)aDB {\n    \n    FMResultSet *rs = [[FMResultSet alloc] init];\n    \n    [rs setStatement:statement];\n    [rs setParentDB:aDB];\n    \n    NSParameterAssert(![statement inUse]);\n    [statement setInUse:YES]; // weak reference\n    \n    return FMDBReturnAutoreleased(rs);\n}\n\n#if ! __has_feature(objc_arc)\n- (void)finalize {\n    [self close];\n    [super finalize];\n}\n#endif\n\n- (void)dealloc {\n    [self close];\n    \n    FMDBRelease(_query);\n    _query = nil;\n    \n    FMDBRelease(_columnNameToIndexMap);\n    _columnNameToIndexMap = nil;\n    \n#if ! __has_feature(objc_arc)\n    [super dealloc];\n#endif\n}\n\n- (void)close {\n    [_statement reset];\n    FMDBRelease(_statement);\n    _statement = nil;\n    \n    // we don't need this anymore... (i think)\n    //[_parentDB setInUse:NO];\n    [_parentDB resultSetDidClose:self];\n    [self setParentDB:nil];\n}\n\n- (int)columnCount {\n    return sqlite3_column_count([_statement statement]);\n}\n\n- (NSMutableDictionary *)columnNameToIndexMap {\n    if (!_columnNameToIndexMap) {\n        int columnCount = sqlite3_column_count([_statement statement]);\n        _columnNameToIndexMap = [[NSMutableDictionary alloc] initWithCapacity:(NSUInteger)columnCount];\n        int columnIdx = 0;\n        for (columnIdx = 0; columnIdx < columnCount; columnIdx++) {\n            [_columnNameToIndexMap setObject:[NSNumber numberWithInt:columnIdx]\n                                      forKey:[[NSString stringWithUTF8String:sqlite3_column_name([_statement statement], columnIdx)] lowercaseString]];\n        }\n    }\n    return _columnNameToIndexMap;\n}\n\n- (void)kvcMagic:(id)object {\n    \n    int columnCount = sqlite3_column_count([_statement statement]);\n    \n    int columnIdx = 0;\n    for (columnIdx = 0; columnIdx < columnCount; columnIdx++) {\n        \n        const char *c = (const char *)sqlite3_column_text([_statement statement], columnIdx);\n        \n        // check for a null row\n        if (c) {\n            NSString *s = [NSString stringWithUTF8String:c];\n            \n            [object setValue:s forKey:[NSString stringWithUTF8String:sqlite3_column_name([_statement statement], columnIdx)]];\n        }\n    }\n}\n\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wdeprecated-implementations\"\n\n- (NSDictionary *)resultDict {\n    \n    NSUInteger num_cols = (NSUInteger)sqlite3_data_count([_statement statement]);\n    \n    if (num_cols > 0) {\n        NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:num_cols];\n        \n        NSEnumerator *columnNames = [[self columnNameToIndexMap] keyEnumerator];\n        NSString *columnName = nil;\n        while ((columnName = [columnNames nextObject])) {\n            id objectValue = [self objectForColumnName:columnName];\n            [dict setObject:objectValue forKey:columnName];\n        }\n        \n        return FMDBReturnAutoreleased([dict copy]);\n    }\n    else {\n        NSLog(@\"Warning: There seem to be no columns in this set.\");\n    }\n    \n    return nil;\n}\n\n#pragma clang diagnostic pop\n\n- (NSDictionary*)resultDictionary {\n    \n    NSUInteger num_cols = (NSUInteger)sqlite3_data_count([_statement statement]);\n    \n    if (num_cols > 0) {\n        NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:num_cols];\n        \n        int columnCount = sqlite3_column_count([_statement statement]);\n        \n        int columnIdx = 0;\n        for (columnIdx = 0; columnIdx < columnCount; columnIdx++) {\n            \n            NSString *columnName = [NSString stringWithUTF8String:sqlite3_column_name([_statement statement], columnIdx)];\n            id objectValue = [self objectForColumnIndex:columnIdx];\n            [dict setObject:objectValue forKey:columnName];\n        }\n        \n        return dict;\n    }\n    else {\n        NSLog(@\"Warning: There seem to be no columns in this set.\");\n    }\n    \n    return nil;\n}\n\n\n\n\n- (BOOL)next {\n    return [self nextWithError:nil];\n}\n\n- (BOOL)nextWithError:(NSError **)outErr {\n    \n    int rc = sqlite3_step([_statement statement]);\n    \n    if (SQLITE_BUSY == rc || SQLITE_LOCKED == rc) {\n        NSLog(@\"%s:%d Database busy (%@)\", __FUNCTION__, __LINE__, [_parentDB databasePath]);\n        NSLog(@\"Database busy\");\n        if (outErr) {\n            *outErr = [_parentDB lastError];\n        }\n    }\n    else if (SQLITE_DONE == rc || SQLITE_ROW == rc) {\n        // all is well, let's return.\n    }\n    else if (SQLITE_ERROR == rc) {\n        NSLog(@\"Error calling sqlite3_step (%d: %s) rs\", rc, sqlite3_errmsg([_parentDB sqliteHandle]));\n        if (outErr) {\n            *outErr = [_parentDB lastError];\n        }\n    }\n    else if (SQLITE_MISUSE == rc) {\n        // uh oh.\n        NSLog(@\"Error calling sqlite3_step (%d: %s) rs\", rc, sqlite3_errmsg([_parentDB sqliteHandle]));\n        if (outErr) {\n            if (_parentDB) {\n                *outErr = [_parentDB lastError];\n            }\n            else {\n                // If 'next' or 'nextWithError' is called after the result set is closed,\n                // we need to return the appropriate error.\n                NSDictionary* errorMessage = [NSDictionary dictionaryWithObject:@\"parentDB does not exist\" forKey:NSLocalizedDescriptionKey];\n                *outErr = [NSError errorWithDomain:@\"FMDatabase\" code:SQLITE_MISUSE userInfo:errorMessage];\n            }\n            \n        }\n    }\n    else {\n        // wtf?\n        NSLog(@\"Unknown error calling sqlite3_step (%d: %s) rs\", rc, sqlite3_errmsg([_parentDB sqliteHandle]));\n        if (outErr) {\n            *outErr = [_parentDB lastError];\n        }\n    }\n    \n    \n    if (rc != SQLITE_ROW) {\n        [self close];\n    }\n    \n    return (rc == SQLITE_ROW);\n}\n\n- (BOOL)hasAnotherRow {\n    return sqlite3_errcode([_parentDB sqliteHandle]) == SQLITE_ROW;\n}\n\n- (int)columnIndexForName:(NSString*)columnName {\n    columnName = [columnName lowercaseString];\n    \n    NSNumber *n = [[self columnNameToIndexMap] objectForKey:columnName];\n    \n    if (n != nil) {\n        return [n intValue];\n    }\n    \n    NSLog(@\"Warning: I could not find the column named '%@'.\", columnName);\n    \n    return -1;\n}\n\n- (int)intForColumn:(NSString*)columnName {\n    return [self intForColumnIndex:[self columnIndexForName:columnName]];\n}\n\n- (int)intForColumnIndex:(int)columnIdx {\n    return sqlite3_column_int([_statement statement], columnIdx);\n}\n\n- (long)longForColumn:(NSString*)columnName {\n    return [self longForColumnIndex:[self columnIndexForName:columnName]];\n}\n\n- (long)longForColumnIndex:(int)columnIdx {\n    return (long)sqlite3_column_int64([_statement statement], columnIdx);\n}\n\n- (long long int)longLongIntForColumn:(NSString*)columnName {\n    return [self longLongIntForColumnIndex:[self columnIndexForName:columnName]];\n}\n\n- (long long int)longLongIntForColumnIndex:(int)columnIdx {\n    return sqlite3_column_int64([_statement statement], columnIdx);\n}\n\n- (unsigned long long int)unsignedLongLongIntForColumn:(NSString*)columnName {\n    return [self unsignedLongLongIntForColumnIndex:[self columnIndexForName:columnName]];\n}\n\n- (unsigned long long int)unsignedLongLongIntForColumnIndex:(int)columnIdx {\n    return (unsigned long long int)[self longLongIntForColumnIndex:columnIdx];\n}\n\n- (BOOL)boolForColumn:(NSString*)columnName {\n    return [self boolForColumnIndex:[self columnIndexForName:columnName]];\n}\n\n- (BOOL)boolForColumnIndex:(int)columnIdx {\n    return ([self intForColumnIndex:columnIdx] != 0);\n}\n\n- (double)doubleForColumn:(NSString*)columnName {\n    return [self doubleForColumnIndex:[self columnIndexForName:columnName]];\n}\n\n- (double)doubleForColumnIndex:(int)columnIdx {\n    return sqlite3_column_double([_statement statement], columnIdx);\n}\n\n- (NSString *)stringForColumnIndex:(int)columnIdx {\n    \n    if (sqlite3_column_type([_statement statement], columnIdx) == SQLITE_NULL || (columnIdx < 0) || columnIdx >= sqlite3_column_count([_statement statement])) {\n        return nil;\n    }\n    \n    const char *c = (const char *)sqlite3_column_text([_statement statement], columnIdx);\n    \n    if (!c) {\n        // null row.\n        return nil;\n    }\n    \n    return [NSString stringWithUTF8String:c];\n}\n\n- (NSString*)stringForColumn:(NSString*)columnName {\n    return [self stringForColumnIndex:[self columnIndexForName:columnName]];\n}\n\n- (NSDate*)dateForColumn:(NSString*)columnName {\n    return [self dateForColumnIndex:[self columnIndexForName:columnName]];\n}\n\n- (NSDate*)dateForColumnIndex:(int)columnIdx {\n    \n    if (sqlite3_column_type([_statement statement], columnIdx) == SQLITE_NULL || (columnIdx < 0) || columnIdx >= sqlite3_column_count([_statement statement])) {\n        return nil;\n    }\n    \n    return [_parentDB hasDateFormatter] ? [_parentDB dateFromString:[self stringForColumnIndex:columnIdx]] : [NSDate dateWithTimeIntervalSince1970:[self doubleForColumnIndex:columnIdx]];\n}\n\n\n- (NSData*)dataForColumn:(NSString*)columnName {\n    return [self dataForColumnIndex:[self columnIndexForName:columnName]];\n}\n\n- (NSData*)dataForColumnIndex:(int)columnIdx {\n    \n    if (sqlite3_column_type([_statement statement], columnIdx) == SQLITE_NULL || (columnIdx < 0) || columnIdx >= sqlite3_column_count([_statement statement])) {\n        return nil;\n    }\n    \n    const char *dataBuffer = sqlite3_column_blob([_statement statement], columnIdx);\n    int dataSize = sqlite3_column_bytes([_statement statement], columnIdx);\n\n    if (dataBuffer == NULL) {\n        return nil;\n    }\n    \n    return [NSData dataWithBytes:(const void *)dataBuffer length:(NSUInteger)dataSize];\n}\n\n\n- (NSData*)dataNoCopyForColumn:(NSString*)columnName {\n    return [self dataNoCopyForColumnIndex:[self columnIndexForName:columnName]];\n}\n\n- (NSData*)dataNoCopyForColumnIndex:(int)columnIdx {\n    \n    if (sqlite3_column_type([_statement statement], columnIdx) == SQLITE_NULL || (columnIdx < 0) || columnIdx >= sqlite3_column_count([_statement statement])) {\n        return nil;\n    }\n  \n    const char *dataBuffer = sqlite3_column_blob([_statement statement], columnIdx);\n    int dataSize = sqlite3_column_bytes([_statement statement], columnIdx);\n    \n    NSData *data = [NSData dataWithBytesNoCopy:(void *)dataBuffer length:(NSUInteger)dataSize freeWhenDone:NO];\n    \n    return data;\n}\n\n\n- (BOOL)columnIndexIsNull:(int)columnIdx {\n    return sqlite3_column_type([_statement statement], columnIdx) == SQLITE_NULL;\n}\n\n- (BOOL)columnIsNull:(NSString*)columnName {\n    return [self columnIndexIsNull:[self columnIndexForName:columnName]];\n}\n\n- (const unsigned char *)UTF8StringForColumnIndex:(int)columnIdx {\n    \n    if (sqlite3_column_type([_statement statement], columnIdx) == SQLITE_NULL || (columnIdx < 0) || columnIdx >= sqlite3_column_count([_statement statement])) {\n        return nil;\n    }\n    \n    return sqlite3_column_text([_statement statement], columnIdx);\n}\n\n- (const unsigned char *)UTF8StringForColumn:(NSString*)columnName {\n    return [self UTF8StringForColumnIndex:[self columnIndexForName:columnName]];\n}\n\n- (const unsigned char *)UTF8StringForColumnName:(NSString*)columnName {\n    return [self UTF8StringForColumn:columnName];\n}\n\n- (id)objectForColumnIndex:(int)columnIdx {\n    if (columnIdx < 0 || columnIdx >= sqlite3_column_count([_statement statement])) {\n        return nil;\n    }\n    \n    int columnType = sqlite3_column_type([_statement statement], columnIdx);\n    \n    id returnValue = nil;\n    \n    if (columnType == SQLITE_INTEGER) {\n        returnValue = [NSNumber numberWithLongLong:[self longLongIntForColumnIndex:columnIdx]];\n    }\n    else if (columnType == SQLITE_FLOAT) {\n        returnValue = [NSNumber numberWithDouble:[self doubleForColumnIndex:columnIdx]];\n    }\n    else if (columnType == SQLITE_BLOB) {\n        returnValue = [self dataForColumnIndex:columnIdx];\n    }\n    else {\n        //default to a string for everything else\n        returnValue = [self stringForColumnIndex:columnIdx];\n    }\n    \n    if (returnValue == nil) {\n        returnValue = [NSNull null];\n    }\n    \n    return returnValue;\n}\n\n- (id)objectForColumnName:(NSString*)columnName {\n    return [self objectForColumn:columnName];\n}\n\n- (id)objectForColumn:(NSString*)columnName {\n    return [self objectForColumnIndex:[self columnIndexForName:columnName]];\n}\n\n// returns autoreleased NSString containing the name of the column in the result set\n- (NSString*)columnNameForIndex:(int)columnIdx {\n    return [NSString stringWithUTF8String: sqlite3_column_name([_statement statement], columnIdx)];\n}\n\n- (id)objectAtIndexedSubscript:(int)columnIdx {\n    return [self objectForColumnIndex:columnIdx];\n}\n\n- (id)objectForKeyedSubscript:(NSString *)columnName {\n    return [self objectForColumn:columnName];\n}\n\n\n@end\n"
  },
  {
    "path": "native/ios/WatermelonDB/JSIInstaller.h",
    "content": "#pragma once\n\n#import <React/RCTBridge+Private.h>\n\n#ifdef __cplusplus\nextern \"C\"\n{\n#endif\n\nvoid installWatermelonJSI(RCTCxxBridge *bridge);\nvoid watermelondbProvideSyncJson(int id, NSData *json, NSError **errorPtr);\n\n#ifdef __cplusplus\n} // extern \"C\"\n#endif\n"
  },
  {
    "path": "native/ios/WatermelonDB/JSIInstaller.mm",
    "content": "#import \"JSIInstaller.h\"\n#import \"Database.h\"\n\nextern \"C\" void installWatermelonJSI(RCTCxxBridge *bridge) {\n    if (bridge.runtime == nullptr) {\n        return;\n    }\n\n    jsi::Runtime *runtime = (jsi::Runtime*) bridge.runtime;\n    assert(runtime != nullptr);\n    watermelondb::Database::install(runtime);\n}\n"
  },
  {
    "path": "native/ios/WatermelonDB/WatermelonDB.h",
    "content": "#pragma once\n\n#import \"./JSIInstaller.h\"\n"
  },
  {
    "path": "native/ios/WatermelonDB/objc/WMDatabase.h",
    "content": "#import \"FMDB.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface WMDatabase : NSObject\n\n@property (readwrite, strong, nonatomic) FMDatabase *fmdb;\n@property (readwrite, nonatomic) long userVersion;\n\n#pragma mark - Initialization\n\n+ (instancetype) databaseWithPath:(NSString *)path;\n\n#pragma mark - Executing queries\n\n- (BOOL) executeQuery:(NSString *)query args:(NSArray *)args error:(NSError **)errorPtr;\n/// Executes multiple queries separated by `;`\n- (BOOL) executeStatements:(NSString *)sql error:(NSError **)errorPtr;\n- (FMResultSet *) queryRaw:(NSString *)query args:(NSArray *)args error:(NSError **)errorPtr;\n- (NSNumber * _Nullable) count:(NSString *)query args:(NSArray *)args error:(NSError **)errorPtr;\n\n#pragma mark - Other database functions\n\n- (BOOL) inTransaction:(BOOL (^)(NSError**))transactionBlock error:(NSError**)errorPtr;\n- (BOOL) unsafeDestroyEverything:(NSError**)errorPtr;\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/ios/WatermelonDB/objc/WMDatabase.m",
    "content": "#import \"WMDatabase.h\"\n#import <sqlite3.h>\n\n@implementation WMDatabase {\n    NSString *_path;\n}\n\n- (instancetype) initWithPath:(NSString *)path\n{\n    if (self = [super init]) {\n        _path = path;\n        _fmdb = [FMDatabase databaseWithPath:path];\n        [self open];\n    }\n    \n    return self;\n}\n\n+ (instancetype) databaseWithPath:(NSString *)path\n{\n    return [[self alloc] initWithPath:path];\n}\n\n- (void) open\n{\n    if (![_fmdb open]) {\n        [NSException raise:@\"OpenFailed\" format:@\"Failed to open the database: %@\", _fmdb.lastErrorMessage];\n    }\n    \n    // TODO: Experiment with WAL\n    //     // must be queryRaw - returns value\n    //     _ = try queryRaw(\"pragma journal_mode=wal\")\n    \n    // TODO: Configurable logger\n    NSLog(@\"Opened database at %@\", _path);\n}\n\n#pragma mark - Executing queries\n\n- (BOOL) executeQuery:(NSString *)query args:(NSArray *)args error:(NSError **)errorPtr\n{\n    return [_fmdb executeUpdate:query values:args error:errorPtr];\n}\n\n- (BOOL) executeStatements:(NSString *)sql error:(NSError **)errorPtr\n{\n    if (![_fmdb executeStatements:sql]) {\n        *errorPtr = _fmdb.lastError;\n        return NO;\n    }\n    \n    return YES;\n}\n\n- (FMResultSet *) queryRaw:(NSString *)query args:(NSArray *)args error:(NSError **)errorPtr\n{\n    return [_fmdb executeQuery:query values:args error:errorPtr];\n}\n\n- (NSNumber * _Nullable) count:(NSString *)query args:(NSArray *)args error:(NSError **)errorPtr\n{\n    FMResultSet *result = [_fmdb executeQuery:query values:args error:errorPtr];\n    \n    if (!result) {\n        *errorPtr = _fmdb.lastError;\n        return nil;\n    }\n    \n    if (![result next]) {\n        *errorPtr = [NSError errorWithDomain:@\"WMDatabase\" code:0 userInfo:@{\n            NSLocalizedDescriptionKey: @\"Invalid count query, can't find next() on the result\"\n        }];\n        return nil;\n    }\n    \n    if ([result columnIndexForName:@\"count\"] == -1) {\n        *errorPtr = [NSError errorWithDomain:@\"WMDatabase\" code:0 userInfo:@{\n            NSLocalizedDescriptionKey: @\"Invalid count query, can't find `count` column\"\n        }];\n        return nil;\n    }\n    \n    return @([result intForColumn:@\"count\"]);\n}\n\n#pragma mark - Other database functions\n\n// TODO: This is a near 1-to-1 translated from Swift, but it's not an ObjC-y way of doing this\n- (BOOL) inTransaction:(BOOL (^)(NSError**))transactionBlock error:(NSError**)errorPtr\n{\n    if (![_fmdb beginTransaction]) {\n        *errorPtr = _fmdb.lastError;\n        return NO;\n    }\n    \n    BOOL txnResult = transactionBlock(errorPtr);\n    \n    if (txnResult) {\n        if (![_fmdb commit]) {\n            *errorPtr = _fmdb.lastError;\n            return NO;\n        }\n        return YES;\n    } else {\n        if (![_fmdb rollback]) {\n            *errorPtr = _fmdb.lastError;\n        }\n        return NO;\n    }\n}\n\n- (long) userVersion\n{\n    FMResultSet *result = [_fmdb executeQuery:@\"pragma user_version\"];\n    [result next];\n    return [result longForColumnIndex:0];\n}\n\n- (void) setUserVersion:(long)userVersion\n{\n    NSString *sql = [NSString stringWithFormat:@\"pragma user_version = %li\", userVersion];\n    BOOL result = [_fmdb executeUpdate:sql];\n    if (!result) {\n        [NSException raise:@\"SetUserVersionFailed\" format:@\"Failed to set user version: %@\", _fmdb.lastErrorMessage];\n    }\n}\n\n- (BOOL) unsafeDestroyEverything:(NSError**)errorPtr\n{\n    // NOTE: Deleting files by default because it seems simpler, more reliable\n    // But sadly this won't work for in-memory (shared) databases\n    if ([self isInMemoryDatabase]) {\n        // NOTE: As of iOS 14, selecting tables from sqlite_master and deleting them does not work\n        // They seem to be enabling \"defensive\" config. So we use another obscure method to clear the database\n        // https://www.sqlite.org/c3ref/c_dbconfig_defensive.html#sqlitedbconfigresetdatabase\n        \n        if (sqlite3_db_config(_fmdb.sqliteHandle, SQLITE_DBCONFIG_RESET_DATABASE, 1, 0) != SQLITE_OK) {\n            *errorPtr = [NSError errorWithDomain:@\"WMDatabase\" code:0 userInfo:@{\n                NSLocalizedDescriptionKey: @\"Failed to enable reset database mode\",\n                @\"FMDBError\": _fmdb.lastError\n            }];\n            return NO;\n        }\n        \n        if (![self executeStatements:@\"vacuum\" error:errorPtr]) {\n            return NO;\n        }\n        \n        if (sqlite3_db_config(_fmdb.sqliteHandle, SQLITE_DBCONFIG_RESET_DATABASE, 0, 0) != SQLITE_OK) {\n            *errorPtr = [NSError errorWithDomain:@\"WMDatabase\" code:0 userInfo:@{\n                NSLocalizedDescriptionKey: @\"Failed to disable reset database mode\",\n                @\"FMDBError\": _fmdb.lastError\n            }];\n            return NO;\n        }\n        \n        return YES;\n    } else {\n        if (![_fmdb close]) {\n            *errorPtr = [NSError errorWithDomain:@\"WMDatabase\" code:0 userInfo:@{\n                NSLocalizedDescriptionKey: @\"Could not close database\",\n                @\"FMDBError\": _fmdb.lastError\n            }];\n            return NO;\n        }\n        \n        NSFileManager *manager = [NSFileManager defaultManager];\n        \n        // remove database\n        if (![manager removeItemAtPath:_path error:errorPtr]) {\n            return NO;\n        }\n        \n        // try removing database WAL files (ignore errors)\n        [manager removeItemAtPath:[NSString stringWithFormat:@\"%@-wal\", _path] error:nil];\n        [manager removeItemAtPath:[NSString stringWithFormat:@\"%@-shm\", _path] error:nil];\n        \n        // reopen database\n        [self open];\n        return YES;\n    }\n}\n\n# pragma mark - Private helpers\n\n- (BOOL) isInMemoryDatabase\n{\n    return [_path isEqualToString:@\":memory:\"]\n        || [_path isEqualToString:@\"file::memory:\"]\n        || [_path containsString:@\"?mode=memory\"];\n}\n\n@end\n\n"
  },
  {
    "path": "native/ios/WatermelonDB/objc/WMDatabaseBridge.h",
    "content": "#import <React/RCTBridgeModule.h>\n\n@interface WMDatabaseBridge : NSObject <RCTBridgeModule>\n\n@end\n"
  },
  {
    "path": "native/ios/WatermelonDB/objc/WMDatabaseBridge.m",
    "content": "#import \"WMDatabaseBridge.h\"\n#import \"WMDatabaseDriver.h\"\n#import \"JSIInstaller.h\"\n\n@implementation WMDatabaseBridge {\n    NSMutableDictionary<NSNumber *, WMDatabaseDriver *> *_connections;\n    NSMutableDictionary<NSNumber *, NSMutableArray *> *_queue; // operations waiting on a connection\n}\n\n#pragma mark - RCTBridgeModule stuff\n\nRCT_EXPORT_MODULE();\n\n@synthesize bridge = _bridge;\n\n- (instancetype)init\n{\n    self = [super init];\n    if (self) {\n        _connections = [NSMutableDictionary dictionary];\n        _queue = [NSMutableDictionary dictionary];\n    }\n    return self;\n}\n\n- (dispatch_queue_t) methodQueue\n{\n    // TODO: userInteractive QOS seems wrong, but that's what the Swift implementation used so far\n    dispatch_queue_attr_t attr = dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, QOS_CLASS_USER_INTERACTIVE, 0);\n    return dispatch_queue_create(\"com.nozbe.watermelondb.database\", attr);\n}\n\n+ (BOOL) requiresMainQueueSetup\n{\n    return NO;\n}\n\n#define BRIDGE_METHOD(name, args) \\\n    RCT_EXPORT_METHOD(name:(nonnull NSNumber *)tag \\\n        args \\\n        resolve:(RCTPromiseResolveBlock)resolve \\\n        reject:(RCTPromiseRejectBlock)reject \\\n    )\n\n#pragma mark - Initialization & Setup\n\nBRIDGE_METHOD(initialize,\n    databaseName:(nonnull NSString *)name\n    schemaVersion:(nonnull NSNumber *)version\n)\n{\n    if (_connections[tag] || _queue[tag]) {\n        return reject(@\"db.initialize.error\", [NSString stringWithFormat:@\"A driver with tag %@ is already set up\", tag], nil);\n    }\n    \n    WMDatabaseDriver *driver = [WMDatabaseDriver driverWithName:name];\n    WMDatabaseCompatibility compatibility = [driver isCompatibleWithSchemaVersion:[version integerValue]];\n    \n    if (compatibility == WMDatabaseCompatibilityCompatible) {\n        _connections[tag] = driver;\n        return resolve(@{@\"code\": @\"ok\"});\n    } else if (compatibility == WMDatabaseCompatibilityNeedsSetup) {\n        _queue[tag] = [NSMutableArray array];\n        return resolve(@{@\"code\": @\"schema_needed\"});\n    } else if (compatibility == WMDatabaseCompatibilityNeedsMigration) {\n        _queue[tag] = [NSMutableArray array];\n        return resolve(@{@\"code\": @\"migrations_needed\", @\"databaseVersion\": @(driver.schemaVersion)});\n    }\n    \n    [NSException raise:@\"BadArgument\" format:@\"Unexpected WMDatabaseCompatibility\"];\n}\n\nBRIDGE_METHOD(setUpWithSchema,\n    databaseName:(nonnull NSString *)name\n    schema:(nonnull NSString *)schema\n    schemaVersion:(nonnull NSNumber *)version\n)\n{\n    WMDatabaseDriver *driver = [WMDatabaseDriver driverWithName:name];\n    [driver setUpWithSchema:schema schemaVersion:[version integerValue]];\n    [self connectDriverAsync:tag driver:driver];\n    return resolve(@YES);\n}\n\nBRIDGE_METHOD(setUpWithMigrations,\n    databaseName:(nonnull NSString *)name\n    migrations:(nonnull NSString *)migrationSQL\n    fromVersion:(nonnull NSNumber *)fromVersion\n    toVersion:(nonnull NSNumber *)toVersion\n)\n{\n    WMDatabaseDriver *driver = [WMDatabaseDriver driverWithName:name];\n    NSError *error;\n    \n    if ([driver setUpWithMigrations:migrationSQL fromVersion:[fromVersion integerValue] toVersion:[toVersion integerValue] error:&error]) {\n        [self connectDriverAsync:tag driver:driver];\n        return resolve(@YES);\n    } else {\n        [self disconnectDriver:tag];\n        return reject(@\"db.setUpWithMigrations.error\", error.localizedDescription, error);\n    }\n}\n\n#pragma mark - Database functions\n\n#define WITH_DRIVER(block) \\\n    [self withDriver:tag resolve:resolve reject:reject methodName:__PRETTY_FUNCTION__ action:^(WMDatabaseDriver *driver, NSError **errorPtr) block ];\n\nBRIDGE_METHOD(find,\n    table:(nonnull NSString *)table\n    id:(nonnull NSString *)id\n)\n{\n    WITH_DRIVER({\n        return [driver find:table id:id error:errorPtr];\n    })\n}\n\nBRIDGE_METHOD(query,\n    table:(nonnull NSString *)table\n    query:(nonnull NSString *)query\n    args:(nonnull NSArray *)args\n)\n{\n    WITH_DRIVER({\n        return [driver cachedQuery:table query:query args:args error:errorPtr];\n    })\n}\n\nBRIDGE_METHOD(queryIds,\n    query:(nonnull NSString *)query\n    args:(nonnull NSArray *)args\n)\n{\n    WITH_DRIVER({\n        return [driver queryIds:query args:args error:errorPtr];\n    })\n}\n\nBRIDGE_METHOD(unsafeQueryRaw,\n    query:(nonnull NSString *)query\n    args:(nonnull NSArray *)args\n)\n{\n    WITH_DRIVER({\n        return [driver unsafeQueryRaw:query args:args error:errorPtr];\n    })\n}\n\nBRIDGE_METHOD(count,\n    query:(nonnull NSString *)query\n    args:(nonnull NSArray *)args\n)\n{\n    WITH_DRIVER({\n        return [driver count:query args:args error:errorPtr];\n    })\n}\n\nBRIDGE_METHOD(batchJSON,\n    operations:(NSString *)serializedOperations\n)\n{\n    WITH_DRIVER({\n        NSData *jsonData = [serializedOperations dataUsingEncoding:NSUTF8StringEncoding];\n        NSArray *operations = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:errorPtr];\n        if (!operations) {\n            return @NO;\n        }\n        [driver batch:operations error:errorPtr];\n        return @YES;\n    })\n}\n\nBRIDGE_METHOD(unsafeResetDatabase,\n    schema:(nonnull NSString *)schema\n    schemaVersion:(nonnull NSNumber *)version\n)\n{\n    WITH_DRIVER({\n        [driver unsafeResetDatabaseWithSchema:schema schemaVersion:[version integerValue] error:errorPtr];\n        return @YES;\n    })\n}\n\nBRIDGE_METHOD(getLocal,\n    key:(nonnull NSString *)key\n)\n{\n    WITH_DRIVER({\n        return [driver getLocal:key error:errorPtr];\n    })\n}\n\n#pragma mark - JSI Support\n\nRCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(initializeJSI)\n{\n    __block RCTCxxBridge *bridge = (RCTCxxBridge *) _bridge;\n    dispatch_sync([self methodQueue], ^{\n        installWatermelonJSI(bridge);\n    });\n    \n    return @YES;\n}\n\n\nRCT_EXPORT_METHOD(provideSyncJson:(nonnull NSNumber *)id\n    json:(nonnull NSString *)json\n    resolve:(RCTPromiseResolveBlock)resolve\n    reject:(RCTPromiseRejectBlock)reject)\n{\n    NSError *error;\n    watermelondbProvideSyncJson(id.intValue, [json dataUsingEncoding:NSUTF8StringEncoding], &error);\n    if (error) {\n        reject(@\"db.provideSyncJson.error\", error.localizedDescription, error);\n    } else {\n        resolve(@YES);\n    }\n}\n\nRCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(getRandomBytes:(nonnull NSNumber *)count)\n{\n    size_t batchSize = 256;\n    if (![count isEqualToNumber:@(batchSize)]) {\n        [NSException raise:@\"getRandomBytes\" format:@\"Expected getRandomBytes to be called with 256\"];\n    }\n    \n    uint8_t randomBuffer[batchSize];\n    arc4random_buf(&randomBuffer, batchSize);\n    \n    NSMutableArray *result = [NSMutableArray array];\n    for (size_t i = 0; i < batchSize; i++) {\n        result[i] = @(randomBuffer[i]);\n    }\n    return result;\n}\n\nRCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(getRandomIds)\n{\n    static const char alphabet[] = \"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n    size_t batchSize = 64;\n    char randomIds[batchSize * 17];\n    \n    for (size_t i = 0; i < batchSize; i++) {\n        for (size_t j = 0; j < 16; j++) {\n            randomIds[i*17 + j] = alphabet[arc4random_uniform(62)];\n        }\n        if (i != (batchSize - 1)) {\n            randomIds[i*17 + 16] = ',';\n        }\n    }\n    \n    return [NSString stringWithCString:randomIds encoding:NSUTF8StringEncoding];\n}\n\n#pragma mark - Helpers\n\n- (void) connectDriverAsync:(nonnull NSNumber *)tag\n                     driver:(WMDatabaseDriver *)driver\n{\n    _connections[tag] = driver;\n    NSArray *queuedOperations = _queue[tag];\n    [_queue removeObjectForKey:tag];\n    \n    for (void (^action)(void) in queuedOperations) {\n        action();\n    }\n}\n\n- (void) disconnectDriver:(nonnull NSNumber *)tag\n{\n    [_connections removeObjectForKey:tag];\n    // NOTE: In Swift, queued operations are executed, which seems wrong\n    [_queue removeObjectForKey:tag];\n}\n\n- (void) withDriver:(nonnull NSNumber *)tag\n            resolve:(RCTPromiseResolveBlock)resolve\n             reject:(RCTPromiseRejectBlock)reject\n         methodName:(const char *)methodName\n             action:(id (^)(WMDatabaseDriver *, NSError**))action\n{\n    WMDatabaseDriver *driver = _connections[tag];\n    \n    if (driver) {\n        NSError *error;\n        id result = action(driver, &error);\n        if (error) {\n            NSString *errorName = [NSString stringWithFormat:@\"db.%s.error\", methodName];\n            return reject(errorName, error.localizedDescription, error);\n        } else {\n            return resolve(result);\n        }\n    } else {\n        NSLog(@\"Operation for driver %@ enqueued\", tag);\n        NSMutableArray *queuedOperations = _queue[tag];\n        \n        // try again when driver is ready\n        void (^queueOperation)(void) = ^() {\n            [self withDriver:tag resolve:resolve reject:reject methodName:methodName action:action];\n        };\n        \n        [queuedOperations addObject:queueOperation];\n    }\n}\n\n@end\n"
  },
  {
    "path": "native/ios/WatermelonDB/objc/WMDatabaseDriver.h",
    "content": "#import \"WMDatabase.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n\ntypedef NS_ENUM(NSInteger, WMDatabaseCompatibility) {\n    WMDatabaseCompatibilityCompatible,\n    WMDatabaseCompatibilityNeedsSetup,\n    WMDatabaseCompatibilityNeedsMigration,\n};\n\n@interface WMDatabaseDriver : NSObject\n\n@property (readwrite, strong, nonatomic) WMDatabase *db;\n@property (readonly, strong, nonatomic) NSMutableDictionary<NSString *, NSMutableSet<NSString *> *> *cachedRecords;\n\n#pragma mark - Initialization\n\n+ (instancetype) driverWithName:(NSString *)dbName;\n\n#pragma mark - Setup\n\n- (long) schemaVersion;\n- (WMDatabaseCompatibility) isCompatibleWithSchemaVersion:(long)version;\n- (void) setUpWithSchema:(NSString *)sql schemaVersion:(long)version;\n- (BOOL) setUpWithMigrations:(NSString *)sql fromVersion:(long)fromVersion toVersion:(long)toVersion error:(NSError **)errorPtr;\n\n#pragma mark - Database functions\n\n- (id) find:(NSString *)table id:(NSString *)id error:(NSError **)errorPtr;\n- (NSArray *) cachedQuery:(NSString *)table query:(NSString *)query args:(NSArray *)args error:(NSError **)errorPtr;\n- (NSArray *) queryIds:(NSString *)query args:(NSArray *)args error:(NSError **)errorPtr;\n- (NSArray *) unsafeQueryRaw:(NSString *)query args:(NSArray *)args error:(NSError **)errorPtr;\n- (NSNumber *) count:(NSString *)query args:(NSArray *)args error:(NSError **)errorPtr;\n- (BOOL) batch:(NSArray<NSArray *> *)operations error:(NSError **)errorPtr;\n- (NSString *) getLocal:(NSString *)key error:(NSError **)errorPtr;\n- (BOOL) unsafeResetDatabaseWithSchema:(NSString *)sql schemaVersion:(long)version error:(NSError **)errorPtr;\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/ios/WatermelonDB/objc/WMDatabaseDriver.m",
    "content": "#import \"WMDatabaseDriver.h\"\n\n@implementation WMDatabaseDriver\n\n#pragma mark - Initialization\n\n- (instancetype) initWithName:(NSString *)dbName\n{\n    if (self = [super init]) {\n        _db = [WMDatabase databaseWithPath:[self pathForName:dbName]];\n        _cachedRecords = [NSMutableDictionary dictionary];\n    }\n\n    return self;\n}\n\n+ (instancetype) driverWithName:(NSString *)dbName\n{\n    return [[self alloc] initWithName:dbName];\n}\n\n- (NSString *) pathForName:(NSString *)dbName\n{\n    // If starts with `file:` or contains `/`, it's a path!\n    if ([dbName hasPrefix:@\"file:\"] || [dbName containsString:@\"/\"]) {\n        return dbName;\n    } else {\n        NSURL *url = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory\n                                                            inDomain:NSUserDomainMask\n                                                   appropriateForURL:nil\n                                                              create:false\n                                                               error:nil];\n\n        return [[url URLByAppendingPathComponent:[NSString stringWithFormat:@\"%@.db\", dbName]] path];\n    }\n}\n\n#pragma mark - Setup\n\n- (long) schemaVersion\n{\n    return _db.userVersion;\n}\n\n- (WMDatabaseCompatibility) isCompatibleWithSchemaVersion:(long)version\n{\n    long dbVersion = _db.userVersion;\n\n    if (version == dbVersion) {\n        return WMDatabaseCompatibilityCompatible;\n    } else if (dbVersion == 0) {\n        return WMDatabaseCompatibilityNeedsSetup;\n    } else if (dbVersion >= 1 && dbVersion < version) {\n        return WMDatabaseCompatibilityNeedsMigration;\n    } else {\n        // TODO: Add logger customization\n        NSLog(@\"Database has newer version (%li) than what the app supports (%li). Will reset database.\", dbVersion, version);\n        return WMDatabaseCompatibilityNeedsSetup;\n    }\n}\n\n- (void) setUpWithSchema:(NSString *)sql schemaVersion:(long)version\n{\n    NSError *error;\n    if (![self unsafeResetDatabaseWithSchema:sql schemaVersion:version error:&error]) {\n        [NSException raise:@\"SetUpWithSchemaFailed\" format:@\"Error while setting up the database: %@\", error];\n    }\n}\n\n- (BOOL) setUpWithMigrations:(NSString *)sql fromVersion:(long)fromVersion toVersion:(long)toVersion error:(NSError **)errorPtr\n{\n    long databaseVersion = _db.userVersion;\n    if (databaseVersion != fromVersion) {\n        [NSException raise:@\"IncompatibleMigrations\"\n                    format:@\"Incompatbile migration set applied. DB: %li, migration: %li\", databaseVersion, fromVersion];\n    }\n\n    __block WMDatabase *db = _db;\n    BOOL txnResult = [db inTransaction:^BOOL(NSError **innerErrorPtr) {\n        if (![db executeStatements:sql error:innerErrorPtr]) {\n            return NO;\n        }\n        [db setUserVersion:toVersion];\n\n        return YES;\n    } error:errorPtr];\n\n    return txnResult;\n}\n\n#pragma mark - Database functions\n\n- (id) find:(NSString *)table id:(NSString *)id error:(NSError **)errorPtr\n{\n    if ([self isCached:table id:id]) {\n        return id;\n    }\n\n    NSString *query = [NSString stringWithFormat:@\"select * from `%@` where id == ? limit 1\", table];\n    FMResultSet *result = [_db queryRaw:query args:@[id] error:errorPtr];\n    if (!result) {\n        return nil;\n    }\n\n    if (![result next]) {\n        return [NSNull null];\n    }\n\n    [self markAsCached:table id:id];\n    return [result resultDictionary];\n}\n\n- (NSArray *) cachedQuery:(NSString *)table query:(NSString *)query args:(NSArray *)args error:(NSError **)errorPtr\n{\n    NSMutableArray *resultArray = [NSMutableArray array];\n    FMResultSet *result = [_db queryRaw:query args:args error:errorPtr];\n    if (!result) {\n        return nil;\n    }\n\n    while ([result next]) {\n        NSString *id = [result stringForColumn:@\"id\"];\n        if ([self isCached:table id:id]) {\n            [resultArray addObject:id];\n        } else {\n            [self markAsCached:table id:id];\n            [resultArray addObject:[result resultDictionary]];\n        }\n    }\n\n    return resultArray;\n}\n\n- (NSArray *) queryIds:(NSString *)query args:(NSArray *)args error:(NSError **)errorPtr\n{\n    NSMutableArray *resultArray = [NSMutableArray array];\n    FMResultSet *result = [_db queryRaw:query args:args error:errorPtr];\n    if (!result) {\n        return nil;\n    }\n\n    while ([result next]) {\n        [resultArray addObject:[result stringForColumn:@\"id\"]];\n    }\n\n    return resultArray;\n}\n\n- (NSArray *) unsafeQueryRaw:(NSString *)query args:(NSArray *)args error:(NSError **)errorPtr\n{\n    NSMutableArray *resultArray = [NSMutableArray array];\n    FMResultSet *result = [_db queryRaw:query args:args error:errorPtr];\n    if (!result) {\n        return nil;\n    }\n\n    while ([result next]) {\n        [resultArray addObject:[result resultDictionary]];\n    }\n\n    return resultArray;\n}\n\n- (NSNumber *) count:(NSString *)query args:(NSArray *)args error:(NSError **)errorPtr\n{\n    return [_db count:query args:args error:errorPtr];\n}\n\n// Look for NativeBridgeBatchOperation type\n- (BOOL) batch:(NSArray<NSArray *> *)operations error:(NSError **)errorPtr\n{\n    // TODO: Refactor for perf to use cacheKeys ala Database.cpp ?\n    NSMutableArray *addedIds = [NSMutableArray array];\n    NSMutableArray *removedIds = [NSMutableArray array];\n\n    __block WMDatabase *db = _db;\n    BOOL txnResult = [db inTransaction:^BOOL(NSError **innerErrorPtr) {\n        for (NSArray *operation in operations) {\n            NSNumber *cacheBehavior = operation[0];\n            NSString *table = operation[1];\n            NSString *sql = operation[2];\n            NSArray *argBatches = operation[3];\n\n            for (NSArray *args in argBatches) {\n                if (![db executeQuery:sql args:args error:innerErrorPtr]) {\n                    return NO;\n                }\n\n                if (cacheBehavior.intValue == 1) {\n                    [addedIds addObject:@[table, args[0]]];\n                } else if (cacheBehavior.intValue == -1) {\n                    [removedIds addObject:@[table, args[0]]];\n                }\n            }\n        }\n\n        return YES;\n    } error:errorPtr];\n\n    if (!txnResult) {\n        return NO;\n    }\n\n    for (NSArray *pair in addedIds) {\n        [self markAsCached:pair[0] id:pair[1]];\n    }\n\n    for (NSArray *pair in removedIds) {\n        [self removeFromCache:pair[0] id:pair[1]];\n    }\n\n    return YES;\n}\n\n- (NSString *) getLocal:(NSString *)key error:(NSError **)errorPtr\n{\n    // TODO: Shouldn't this be moved to JS, handled by queryRaw?\n    FMResultSet *result = [_db queryRaw:@\"select `value` from `local_storage` where `key` = ?\" args:@[key] error:errorPtr];\n    \n    if (!result) {\n        return nil;\n    }\n\n    if (![result next]) {\n        return [NSNull null];\n    }\n\n    return [result stringForColumn:@\"value\"];\n}\n\n- (BOOL) unsafeResetDatabaseWithSchema:(NSString *)sql schemaVersion:(long)version error:(NSError **)errorPtr\n{\n    if (![_db unsafeDestroyEverything:errorPtr]) {\n        return NO;\n    }\n    _cachedRecords = [NSMutableDictionary dictionary];\n\n    __block WMDatabase *db = _db;\n    BOOL txnResult = [db inTransaction:^BOOL(NSError **innerErrorPtr) {\n        if (![db executeStatements:sql error:innerErrorPtr]) {\n            return NO;\n        }\n        [db setUserVersion:version];\n\n        return YES;\n    } error:errorPtr];\n\n    return txnResult;\n}\n\n#pragma mark - Record caching\n\n- (BOOL) isCached:(NSString *)table id:(NSString *)id\n{\n    if ([_cachedRecords[table] containsObject:id]) {\n        return YES;\n    }\n    return NO;\n}\n\n- (void) markAsCached:(NSString *)table id:(NSString *)id\n{\n    NSMutableSet *set = _cachedRecords[table];\n    if (!set) {\n        set = [NSMutableSet set];\n        _cachedRecords[table] = set;\n    }\n    [set addObject:id];\n}\n\n- (void) removeFromCache:(NSString *)table id:(NSString *)id\n{\n    [_cachedRecords[table] removeObject:id];\n}\n\n@end\n"
  },
  {
    "path": "native/iosTest/.xcode.env",
    "content": "# This `.xcode.env` file is versioned and is used to source the environment\n# used when running script phases inside Xcode.\n# To customize your local environment, you can create an `.xcode.env.local`\n# file that is not versioned.\n\n# NODE_BINARY variable contains the PATH to the node executable.\n#\n# Customize the NODE_BINARY variable here.\n# For example, to use nvm with brew, add the following line\n# . \"$(brew --prefix nvm)/nvm.sh\" --no-use\nexport NODE_BINARY=$(command -v node)\n"
  },
  {
    "path": "native/iosTest/Podfile",
    "content": "# source 'https://github.com/CocoaPods/Specs.git'\nworkspace 'WatermelonTester.xcworkspace'\n\nrequire_relative '../../node_modules/react-native/scripts/react_native_pods'\nrequire_relative '../../node_modules/@react-native-community/cli-platform-ios/native_modules'\n\nplatform :ios, '15.0'\n\nhermes_enabled = true\nshould_use_frameworks = false\n\nif should_use_frameworks\n  use_frameworks! linkage: :static\n\n  $static_framework = [\n    'WatermelonDB',\n    'simdjson',\n  ]\nend\n\nPod::Sandbox::FileAccessor.send(:define_method, :docs) do\n  # work around https://github.com/CocoaPods/CocoaPods/issues/11753#issuecomment-1425802717\n  # p \"Monkey-patched docs :)\"\n  return []\nend\n\ntarget 'WatermelonTester' do\n  config = use_native_modules!\n  flags = get_default_flags()\n\n  use_react_native!(\n    path: '../../node_modules/react-native',\n    hermes_enabled: hermes_enabled,\n    fabric_enabled: false,\n    app_path: \"#{Pod::Config.instance.installation_root}/../..\"\n  )\n\n  pod 'WatermelonDB', path: '../../'\n  pod 'simdjson', path: '../../node_modules/@nozbe/simdjson', modular_headers: true, inhibit_warnings: true\n\n  target 'WatermelonTesterTests' do\n    inherit! :complete\n  end\nend\n\nif should_use_frameworks\n  pre_install do |installer|\n    Pod::Installer::Xcode::TargetValidator.send(:define_method, :verify_no_static_framework_transitive_dependencies) {}\n      installer.pod_targets.each do |pod|\n        if $static_framework.include?(pod.name)\n          def pod.build_type;\n          Pod::BuildType.static_library # >= 1.9\n        end\n      end\n    end\n  end\nend\n\npost_install do |installer|\n  react_native_post_install(\n    installer,\n    '../../node_modules/react-native',\n    mac_catalyst_enabled: false,\n  )\n\n  installer.pods_project.targets.each do |target|\n    target.build_configurations.each do |config|\n      config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= %w[\n        $(inherited)\n        CCACHE_HACK_TOOLCHAIN_DIR=\"$(TOOLCHAIN_DIR)\"\n      ]\n      # ccache bails out of caching if clang modules are enabled, but this breaks some packages\n      # you also have to be careful about PCHs\n      # sometimes you might have to manually add a system framework to project Link phase\n      # more info: https://pspdfkit.com/blog/2015/ccache-for-fun-and-profit/\n\n      # TODO: Bring back CC\n      # config.build_settings['CC'] ||= ['$(SRCROOT)/../../../scripts/ccache-clang']\n\n      # case target.name\n      # when 'Nimble'\n      #   config.build_settings['CLANG_ENABLE_MODULES'] ||= ['YES']\n      # else\n        config.build_settings['CLANG_ENABLE_MODULES'] ||= ['NO']\n      # end\n\n      # Fixes https://github.com/facebook/react-native/issues/34106\n      if target.name == 'React-Codegen'\n        config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.4'\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "native/iosTest/Pods/DoubleConversion/LICENSE",
    "content": "Copyright 2006-2011, the V8 project authors. All rights reserved.\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google Inc. nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "native/iosTest/Pods/DoubleConversion/README",
    "content": "http://code.google.com/p/double-conversion\n\nThis project (double-conversion) provides binary-decimal and decimal-binary\nroutines for IEEE doubles.\n\nThe library consists of efficient conversion routines that have been extracted\nfrom the V8 JavaScript engine. The code has been refactored and improved so that\nit can be used more easily in other projects.\n\nThere is extensive documentation in src/double-conversion.h. Other examples can\nbe found in test/cctest/test-conversions.cc.\n\n\nBuilding\n========\n\nThis library can be built with scons [0] or cmake [1].\nThe checked-in Makefile simply forwards to scons, and provides a\nshortcut to run all tests:\n\n    make\n    make test\n\nScons\n-----\n\nThe easiest way to install this library is to use `scons`. It builds\nthe static and shared library, and is set up to install those at the\ncorrect locations:\n\n    scons install\n\nUse the `DESTDIR` option to change the target directory:\n\n    scons DESTDIR=alternative_directory install\n\nCmake\n-----\n\nTo use cmake run `cmake .` in the root directory. This overwrites the\nexisting Makefile.\n\nUse `-DBUILD_SHARED_LIBS=ON` to enable the compilation of shared libraries.\nNote that this disables static libraries. There is currently no way to\nbuild both libraries at the same time with cmake.\n\nUse `-DBUILD_TESTING=ON` to build the test executable.\n\n    cmake . -DBUILD_TESTING=ON\n    make\n    test/cctest/cctest --list | tr -d '<' | xargs test/cctest/cctest\n\n[0]: http://www.scons.org\n[1]: http://www.cmake.org\n"
  },
  {
    "path": "native/iosTest/Pods/DoubleConversion/double-conversion/bignum-dtoa.cc",
    "content": "// Copyright 2010 the V8 project authors. All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n//       notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n//       copyright notice, this list of conditions and the following\n//       disclaimer in the documentation and/or other materials provided\n//       with the distribution.\n//     * Neither the name of Google Inc. nor the names of its\n//       contributors may be used to endorse or promote products derived\n//       from this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n#include <math.h>\n\n#include \"bignum-dtoa.h\"\n\n#include \"bignum.h\"\n#include \"ieee.h\"\n\nnamespace double_conversion {\n\nstatic int NormalizedExponent(uint64_t significand, int exponent) {\n  ASSERT(significand != 0);\n  while ((significand & Double::kHiddenBit) == 0) {\n    significand = significand << 1;\n    exponent = exponent - 1;\n  }\n  return exponent;\n}\n\n\n// Forward declarations:\n// Returns an estimation of k such that 10^(k-1) <= v < 10^k.\nstatic int EstimatePower(int exponent);\n// Computes v / 10^estimated_power exactly, as a ratio of two bignums, numerator\n// and denominator.\nstatic void InitialScaledStartValues(uint64_t significand,\n                                     int exponent,\n                                     bool lower_boundary_is_closer,\n                                     int estimated_power,\n                                     bool need_boundary_deltas,\n                                     Bignum* numerator,\n                                     Bignum* denominator,\n                                     Bignum* delta_minus,\n                                     Bignum* delta_plus);\n// Multiplies numerator/denominator so that its values lies in the range 1-10.\n// Returns decimal_point s.t.\n//  v = numerator'/denominator' * 10^(decimal_point-1)\n//     where numerator' and denominator' are the values of numerator and\n//     denominator after the call to this function.\nstatic void FixupMultiply10(int estimated_power, bool is_even,\n                            int* decimal_point,\n                            Bignum* numerator, Bignum* denominator,\n                            Bignum* delta_minus, Bignum* delta_plus);\n// Generates digits from the left to the right and stops when the generated\n// digits yield the shortest decimal representation of v.\nstatic void GenerateShortestDigits(Bignum* numerator, Bignum* denominator,\n                                   Bignum* delta_minus, Bignum* delta_plus,\n                                   bool is_even,\n                                   Vector<char> buffer, int* length);\n// Generates 'requested_digits' after the decimal point.\nstatic void BignumToFixed(int requested_digits, int* decimal_point,\n                          Bignum* numerator, Bignum* denominator,\n                          Vector<char>(buffer), int* length);\n// Generates 'count' digits of numerator/denominator.\n// Once 'count' digits have been produced rounds the result depending on the\n// remainder (remainders of exactly .5 round upwards). Might update the\n// decimal_point when rounding up (for example for 0.9999).\nstatic void GenerateCountedDigits(int count, int* decimal_point,\n                                  Bignum* numerator, Bignum* denominator,\n                                  Vector<char>(buffer), int* length);\n\n\nvoid BignumDtoa(double v, BignumDtoaMode mode, int requested_digits,\n                Vector<char> buffer, int* length, int* decimal_point) {\n  ASSERT(v > 0);\n  ASSERT(!Double(v).IsSpecial());\n  uint64_t significand;\n  int exponent;\n  bool lower_boundary_is_closer;\n  if (mode == BIGNUM_DTOA_SHORTEST_SINGLE) {\n    float f = static_cast<float>(v);\n    ASSERT(f == v);\n    significand = Single(f).Significand();\n    exponent = Single(f).Exponent();\n    lower_boundary_is_closer = Single(f).LowerBoundaryIsCloser();\n  } else {\n    significand = Double(v).Significand();\n    exponent = Double(v).Exponent();\n    lower_boundary_is_closer = Double(v).LowerBoundaryIsCloser();\n  }\n  bool need_boundary_deltas =\n      (mode == BIGNUM_DTOA_SHORTEST || mode == BIGNUM_DTOA_SHORTEST_SINGLE);\n\n  bool is_even = (significand & 1) == 0;\n  int normalized_exponent = NormalizedExponent(significand, exponent);\n  // estimated_power might be too low by 1.\n  int estimated_power = EstimatePower(normalized_exponent);\n\n  // Shortcut for Fixed.\n  // The requested digits correspond to the digits after the point. If the\n  // number is much too small, then there is no need in trying to get any\n  // digits.\n  if (mode == BIGNUM_DTOA_FIXED && -estimated_power - 1 > requested_digits) {\n    buffer[0] = '\\0';\n    *length = 0;\n    // Set decimal-point to -requested_digits. This is what Gay does.\n    // Note that it should not have any effect anyways since the string is\n    // empty.\n    *decimal_point = -requested_digits;\n    return;\n  }\n\n  Bignum numerator;\n  Bignum denominator;\n  Bignum delta_minus;\n  Bignum delta_plus;\n  // Make sure the bignum can grow large enough. The smallest double equals\n  // 4e-324. In this case the denominator needs fewer than 324*4 binary digits.\n  // The maximum double is 1.7976931348623157e308 which needs fewer than\n  // 308*4 binary digits.\n  ASSERT(Bignum::kMaxSignificantBits >= 324*4);\n  InitialScaledStartValues(significand, exponent, lower_boundary_is_closer,\n                           estimated_power, need_boundary_deltas,\n                           &numerator, &denominator,\n                           &delta_minus, &delta_plus);\n  // We now have v = (numerator / denominator) * 10^estimated_power.\n  FixupMultiply10(estimated_power, is_even, decimal_point,\n                  &numerator, &denominator,\n                  &delta_minus, &delta_plus);\n  // We now have v = (numerator / denominator) * 10^(decimal_point-1), and\n  //  1 <= (numerator + delta_plus) / denominator < 10\n  switch (mode) {\n    case BIGNUM_DTOA_SHORTEST:\n    case BIGNUM_DTOA_SHORTEST_SINGLE:\n      GenerateShortestDigits(&numerator, &denominator,\n                             &delta_minus, &delta_plus,\n                             is_even, buffer, length);\n      break;\n    case BIGNUM_DTOA_FIXED:\n      BignumToFixed(requested_digits, decimal_point,\n                    &numerator, &denominator,\n                    buffer, length);\n      break;\n    case BIGNUM_DTOA_PRECISION:\n      GenerateCountedDigits(requested_digits, decimal_point,\n                            &numerator, &denominator,\n                            buffer, length);\n      break;\n    default:\n      UNREACHABLE();\n  }\n  buffer[*length] = '\\0';\n}\n\n\n// The procedure starts generating digits from the left to the right and stops\n// when the generated digits yield the shortest decimal representation of v. A\n// decimal representation of v is a number lying closer to v than to any other\n// double, so it converts to v when read.\n//\n// This is true if d, the decimal representation, is between m- and m+, the\n// upper and lower boundaries. d must be strictly between them if !is_even.\n//           m- := (numerator - delta_minus) / denominator\n//           m+ := (numerator + delta_plus) / denominator\n//\n// Precondition: 0 <= (numerator+delta_plus) / denominator < 10.\n//   If 1 <= (numerator+delta_plus) / denominator < 10 then no leading 0 digit\n//   will be produced. This should be the standard precondition.\nstatic void GenerateShortestDigits(Bignum* numerator, Bignum* denominator,\n                                   Bignum* delta_minus, Bignum* delta_plus,\n                                   bool is_even,\n                                   Vector<char> buffer, int* length) {\n  // Small optimization: if delta_minus and delta_plus are the same just reuse\n  // one of the two bignums.\n  if (Bignum::Equal(*delta_minus, *delta_plus)) {\n    delta_plus = delta_minus;\n  }\n  *length = 0;\n  for (;;) {\n    uint16_t digit;\n    digit = numerator->DivideModuloIntBignum(*denominator);\n    ASSERT(digit <= 9);  // digit is a uint16_t and therefore always positive.\n    // digit = numerator / denominator (integer division).\n    // numerator = numerator % denominator.\n    buffer[(*length)++] = static_cast<char>(digit + '0');\n\n    // Can we stop already?\n    // If the remainder of the division is less than the distance to the lower\n    // boundary we can stop. In this case we simply round down (discarding the\n    // remainder).\n    // Similarly we test if we can round up (using the upper boundary).\n    bool in_delta_room_minus;\n    bool in_delta_room_plus;\n    if (is_even) {\n      in_delta_room_minus = Bignum::LessEqual(*numerator, *delta_minus);\n    } else {\n      in_delta_room_minus = Bignum::Less(*numerator, *delta_minus);\n    }\n    if (is_even) {\n      in_delta_room_plus =\n          Bignum::PlusCompare(*numerator, *delta_plus, *denominator) >= 0;\n    } else {\n      in_delta_room_plus =\n          Bignum::PlusCompare(*numerator, *delta_plus, *denominator) > 0;\n    }\n    if (!in_delta_room_minus && !in_delta_room_plus) {\n      // Prepare for next iteration.\n      numerator->Times10();\n      delta_minus->Times10();\n      // We optimized delta_plus to be equal to delta_minus (if they share the\n      // same value). So don't multiply delta_plus if they point to the same\n      // object.\n      if (delta_minus != delta_plus) {\n        delta_plus->Times10();\n      }\n    } else if (in_delta_room_minus && in_delta_room_plus) {\n      // Let's see if 2*numerator < denominator.\n      // If yes, then the next digit would be < 5 and we can round down.\n      int compare = Bignum::PlusCompare(*numerator, *numerator, *denominator);\n      if (compare < 0) {\n        // Remaining digits are less than .5. -> Round down (== do nothing).\n      } else if (compare > 0) {\n        // Remaining digits are more than .5 of denominator. -> Round up.\n        // Note that the last digit could not be a '9' as otherwise the whole\n        // loop would have stopped earlier.\n        // We still have an assert here in case the preconditions were not\n        // satisfied.\n        ASSERT(buffer[(*length) - 1] != '9');\n        buffer[(*length) - 1]++;\n      } else {\n        // Halfway case.\n        // TODO(floitsch): need a way to solve half-way cases.\n        //   For now let's round towards even (since this is what Gay seems to\n        //   do).\n\n        if ((buffer[(*length) - 1] - '0') % 2 == 0) {\n          // Round down => Do nothing.\n        } else {\n          ASSERT(buffer[(*length) - 1] != '9');\n          buffer[(*length) - 1]++;\n        }\n      }\n      return;\n    } else if (in_delta_room_minus) {\n      // Round down (== do nothing).\n      return;\n    } else {  // in_delta_room_plus\n      // Round up.\n      // Note again that the last digit could not be '9' since this would have\n      // stopped the loop earlier.\n      // We still have an ASSERT here, in case the preconditions were not\n      // satisfied.\n      ASSERT(buffer[(*length) -1] != '9');\n      buffer[(*length) - 1]++;\n      return;\n    }\n  }\n}\n\n\n// Let v = numerator / denominator < 10.\n// Then we generate 'count' digits of d = x.xxxxx... (without the decimal point)\n// from left to right. Once 'count' digits have been produced we decide wether\n// to round up or down. Remainders of exactly .5 round upwards. Numbers such\n// as 9.999999 propagate a carry all the way, and change the\n// exponent (decimal_point), when rounding upwards.\nstatic void GenerateCountedDigits(int count, int* decimal_point,\n                                  Bignum* numerator, Bignum* denominator,\n                                  Vector<char> buffer, int* length) {\n  ASSERT(count >= 0);\n  for (int i = 0; i < count - 1; ++i) {\n    uint16_t digit;\n    digit = numerator->DivideModuloIntBignum(*denominator);\n    ASSERT(digit <= 9);  // digit is a uint16_t and therefore always positive.\n    // digit = numerator / denominator (integer division).\n    // numerator = numerator % denominator.\n    buffer[i] = static_cast<char>(digit + '0');\n    // Prepare for next iteration.\n    numerator->Times10();\n  }\n  // Generate the last digit.\n  uint16_t digit;\n  digit = numerator->DivideModuloIntBignum(*denominator);\n  if (Bignum::PlusCompare(*numerator, *numerator, *denominator) >= 0) {\n    digit++;\n  }\n  ASSERT(digit <= 10);\n  buffer[count - 1] = static_cast<char>(digit + '0');\n  // Correct bad digits (in case we had a sequence of '9's). Propagate the\n  // carry until we hat a non-'9' or til we reach the first digit.\n  for (int i = count - 1; i > 0; --i) {\n    if (buffer[i] != '0' + 10) break;\n    buffer[i] = '0';\n    buffer[i - 1]++;\n  }\n  if (buffer[0] == '0' + 10) {\n    // Propagate a carry past the top place.\n    buffer[0] = '1';\n    (*decimal_point)++;\n  }\n  *length = count;\n}\n\n\n// Generates 'requested_digits' after the decimal point. It might omit\n// trailing '0's. If the input number is too small then no digits at all are\n// generated (ex.: 2 fixed digits for 0.00001).\n//\n// Input verifies:  1 <= (numerator + delta) / denominator < 10.\nstatic void BignumToFixed(int requested_digits, int* decimal_point,\n                          Bignum* numerator, Bignum* denominator,\n                          Vector<char>(buffer), int* length) {\n  // Note that we have to look at more than just the requested_digits, since\n  // a number could be rounded up. Example: v=0.5 with requested_digits=0.\n  // Even though the power of v equals 0 we can't just stop here.\n  if (-(*decimal_point) > requested_digits) {\n    // The number is definitively too small.\n    // Ex: 0.001 with requested_digits == 1.\n    // Set decimal-point to -requested_digits. This is what Gay does.\n    // Note that it should not have any effect anyways since the string is\n    // empty.\n    *decimal_point = -requested_digits;\n    *length = 0;\n    return;\n  } else if (-(*decimal_point) == requested_digits) {\n    // We only need to verify if the number rounds down or up.\n    // Ex: 0.04 and 0.06 with requested_digits == 1.\n    ASSERT(*decimal_point == -requested_digits);\n    // Initially the fraction lies in range (1, 10]. Multiply the denominator\n    // by 10 so that we can compare more easily.\n    denominator->Times10();\n    if (Bignum::PlusCompare(*numerator, *numerator, *denominator) >= 0) {\n      // If the fraction is >= 0.5 then we have to include the rounded\n      // digit.\n      buffer[0] = '1';\n      *length = 1;\n      (*decimal_point)++;\n    } else {\n      // Note that we caught most of similar cases earlier.\n      *length = 0;\n    }\n    return;\n  } else {\n    // The requested digits correspond to the digits after the point.\n    // The variable 'needed_digits' includes the digits before the point.\n    int needed_digits = (*decimal_point) + requested_digits;\n    GenerateCountedDigits(needed_digits, decimal_point,\n                          numerator, denominator,\n                          buffer, length);\n  }\n}\n\n\n// Returns an estimation of k such that 10^(k-1) <= v < 10^k where\n// v = f * 2^exponent and 2^52 <= f < 2^53.\n// v is hence a normalized double with the given exponent. The output is an\n// approximation for the exponent of the decimal approimation .digits * 10^k.\n//\n// The result might undershoot by 1 in which case 10^k <= v < 10^k+1.\n// Note: this property holds for v's upper boundary m+ too.\n//    10^k <= m+ < 10^k+1.\n//   (see explanation below).\n//\n// Examples:\n//  EstimatePower(0)   => 16\n//  EstimatePower(-52) => 0\n//\n// Note: e >= 0 => EstimatedPower(e) > 0. No similar claim can be made for e<0.\nstatic int EstimatePower(int exponent) {\n  // This function estimates log10 of v where v = f*2^e (with e == exponent).\n  // Note that 10^floor(log10(v)) <= v, but v <= 10^ceil(log10(v)).\n  // Note that f is bounded by its container size. Let p = 53 (the double's\n  // significand size). Then 2^(p-1) <= f < 2^p.\n  //\n  // Given that log10(v) == log2(v)/log2(10) and e+(len(f)-1) is quite close\n  // to log2(v) the function is simplified to (e+(len(f)-1)/log2(10)).\n  // The computed number undershoots by less than 0.631 (when we compute log3\n  // and not log10).\n  //\n  // Optimization: since we only need an approximated result this computation\n  // can be performed on 64 bit integers. On x86/x64 architecture the speedup is\n  // not really measurable, though.\n  //\n  // Since we want to avoid overshooting we decrement by 1e10 so that\n  // floating-point imprecisions don't affect us.\n  //\n  // Explanation for v's boundary m+: the computation takes advantage of\n  // the fact that 2^(p-1) <= f < 2^p. Boundaries still satisfy this requirement\n  // (even for denormals where the delta can be much more important).\n\n  const double k1Log10 = 0.30102999566398114;  // 1/lg(10)\n\n  // For doubles len(f) == 53 (don't forget the hidden bit).\n  const int kSignificandSize = Double::kSignificandSize;\n  double estimate = ceil((exponent + kSignificandSize - 1) * k1Log10 - 1e-10);\n  return static_cast<int>(estimate);\n}\n\n\n// See comments for InitialScaledStartValues.\nstatic void InitialScaledStartValuesPositiveExponent(\n    uint64_t significand, int exponent,\n    int estimated_power, bool need_boundary_deltas,\n    Bignum* numerator, Bignum* denominator,\n    Bignum* delta_minus, Bignum* delta_plus) {\n  // A positive exponent implies a positive power.\n  ASSERT(estimated_power >= 0);\n  // Since the estimated_power is positive we simply multiply the denominator\n  // by 10^estimated_power.\n\n  // numerator = v.\n  numerator->AssignUInt64(significand);\n  numerator->ShiftLeft(exponent);\n  // denominator = 10^estimated_power.\n  denominator->AssignPowerUInt16(10, estimated_power);\n\n  if (need_boundary_deltas) {\n    // Introduce a common denominator so that the deltas to the boundaries are\n    // integers.\n    denominator->ShiftLeft(1);\n    numerator->ShiftLeft(1);\n    // Let v = f * 2^e, then m+ - v = 1/2 * 2^e; With the common\n    // denominator (of 2) delta_plus equals 2^e.\n    delta_plus->AssignUInt16(1);\n    delta_plus->ShiftLeft(exponent);\n    // Same for delta_minus. The adjustments if f == 2^p-1 are done later.\n    delta_minus->AssignUInt16(1);\n    delta_minus->ShiftLeft(exponent);\n  }\n}\n\n\n// See comments for InitialScaledStartValues\nstatic void InitialScaledStartValuesNegativeExponentPositivePower(\n    uint64_t significand, int exponent,\n    int estimated_power, bool need_boundary_deltas,\n    Bignum* numerator, Bignum* denominator,\n    Bignum* delta_minus, Bignum* delta_plus) {\n  // v = f * 2^e with e < 0, and with estimated_power >= 0.\n  // This means that e is close to 0 (have a look at how estimated_power is\n  // computed).\n\n  // numerator = significand\n  //  since v = significand * 2^exponent this is equivalent to\n  //  numerator = v * / 2^-exponent\n  numerator->AssignUInt64(significand);\n  // denominator = 10^estimated_power * 2^-exponent (with exponent < 0)\n  denominator->AssignPowerUInt16(10, estimated_power);\n  denominator->ShiftLeft(-exponent);\n\n  if (need_boundary_deltas) {\n    // Introduce a common denominator so that the deltas to the boundaries are\n    // integers.\n    denominator->ShiftLeft(1);\n    numerator->ShiftLeft(1);\n    // Let v = f * 2^e, then m+ - v = 1/2 * 2^e; With the common\n    // denominator (of 2) delta_plus equals 2^e.\n    // Given that the denominator already includes v's exponent the distance\n    // to the boundaries is simply 1.\n    delta_plus->AssignUInt16(1);\n    // Same for delta_minus. The adjustments if f == 2^p-1 are done later.\n    delta_minus->AssignUInt16(1);\n  }\n}\n\n\n// See comments for InitialScaledStartValues\nstatic void InitialScaledStartValuesNegativeExponentNegativePower(\n    uint64_t significand, int exponent,\n    int estimated_power, bool need_boundary_deltas,\n    Bignum* numerator, Bignum* denominator,\n    Bignum* delta_minus, Bignum* delta_plus) {\n  // Instead of multiplying the denominator with 10^estimated_power we\n  // multiply all values (numerator and deltas) by 10^-estimated_power.\n\n  // Use numerator as temporary container for power_ten.\n  Bignum* power_ten = numerator;\n  power_ten->AssignPowerUInt16(10, -estimated_power);\n\n  if (need_boundary_deltas) {\n    // Since power_ten == numerator we must make a copy of 10^estimated_power\n    // before we complete the computation of the numerator.\n    // delta_plus = delta_minus = 10^estimated_power\n    delta_plus->AssignBignum(*power_ten);\n    delta_minus->AssignBignum(*power_ten);\n  }\n\n  // numerator = significand * 2 * 10^-estimated_power\n  //  since v = significand * 2^exponent this is equivalent to\n  // numerator = v * 10^-estimated_power * 2 * 2^-exponent.\n  // Remember: numerator has been abused as power_ten. So no need to assign it\n  //  to itself.\n  ASSERT(numerator == power_ten);\n  numerator->MultiplyByUInt64(significand);\n\n  // denominator = 2 * 2^-exponent with exponent < 0.\n  denominator->AssignUInt16(1);\n  denominator->ShiftLeft(-exponent);\n\n  if (need_boundary_deltas) {\n    // Introduce a common denominator so that the deltas to the boundaries are\n    // integers.\n    numerator->ShiftLeft(1);\n    denominator->ShiftLeft(1);\n    // With this shift the boundaries have their correct value, since\n    // delta_plus = 10^-estimated_power, and\n    // delta_minus = 10^-estimated_power.\n    // These assignments have been done earlier.\n    // The adjustments if f == 2^p-1 (lower boundary is closer) are done later.\n  }\n}\n\n\n// Let v = significand * 2^exponent.\n// Computes v / 10^estimated_power exactly, as a ratio of two bignums, numerator\n// and denominator. The functions GenerateShortestDigits and\n// GenerateCountedDigits will then convert this ratio to its decimal\n// representation d, with the required accuracy.\n// Then d * 10^estimated_power is the representation of v.\n// (Note: the fraction and the estimated_power might get adjusted before\n// generating the decimal representation.)\n//\n// The initial start values consist of:\n//  - a scaled numerator: s.t. numerator/denominator == v / 10^estimated_power.\n//  - a scaled (common) denominator.\n//  optionally (used by GenerateShortestDigits to decide if it has the shortest\n//  decimal converting back to v):\n//  - v - m-: the distance to the lower boundary.\n//  - m+ - v: the distance to the upper boundary.\n//\n// v, m+, m-, and therefore v - m- and m+ - v all share the same denominator.\n//\n// Let ep == estimated_power, then the returned values will satisfy:\n//  v / 10^ep = numerator / denominator.\n//  v's boundarys m- and m+:\n//    m- / 10^ep == v / 10^ep - delta_minus / denominator\n//    m+ / 10^ep == v / 10^ep + delta_plus / denominator\n//  Or in other words:\n//    m- == v - delta_minus * 10^ep / denominator;\n//    m+ == v + delta_plus * 10^ep / denominator;\n//\n// Since 10^(k-1) <= v < 10^k    (with k == estimated_power)\n//  or       10^k <= v < 10^(k+1)\n//  we then have 0.1 <= numerator/denominator < 1\n//           or    1 <= numerator/denominator < 10\n//\n// It is then easy to kickstart the digit-generation routine.\n//\n// The boundary-deltas are only filled if the mode equals BIGNUM_DTOA_SHORTEST\n// or BIGNUM_DTOA_SHORTEST_SINGLE.\n\nstatic void InitialScaledStartValues(uint64_t significand,\n                                     int exponent,\n                                     bool lower_boundary_is_closer,\n                                     int estimated_power,\n                                     bool need_boundary_deltas,\n                                     Bignum* numerator,\n                                     Bignum* denominator,\n                                     Bignum* delta_minus,\n                                     Bignum* delta_plus) {\n  if (exponent >= 0) {\n    InitialScaledStartValuesPositiveExponent(\n        significand, exponent, estimated_power, need_boundary_deltas,\n        numerator, denominator, delta_minus, delta_plus);\n  } else if (estimated_power >= 0) {\n    InitialScaledStartValuesNegativeExponentPositivePower(\n        significand, exponent, estimated_power, need_boundary_deltas,\n        numerator, denominator, delta_minus, delta_plus);\n  } else {\n    InitialScaledStartValuesNegativeExponentNegativePower(\n        significand, exponent, estimated_power, need_boundary_deltas,\n        numerator, denominator, delta_minus, delta_plus);\n  }\n\n  if (need_boundary_deltas && lower_boundary_is_closer) {\n    // The lower boundary is closer at half the distance of \"normal\" numbers.\n    // Increase the common denominator and adapt all but the delta_minus.\n    denominator->ShiftLeft(1);  // *2\n    numerator->ShiftLeft(1);    // *2\n    delta_plus->ShiftLeft(1);   // *2\n  }\n}\n\n\n// This routine multiplies numerator/denominator so that its values lies in the\n// range 1-10. That is after a call to this function we have:\n//    1 <= (numerator + delta_plus) /denominator < 10.\n// Let numerator the input before modification and numerator' the argument\n// after modification, then the output-parameter decimal_point is such that\n//  numerator / denominator * 10^estimated_power ==\n//    numerator' / denominator' * 10^(decimal_point - 1)\n// In some cases estimated_power was too low, and this is already the case. We\n// then simply adjust the power so that 10^(k-1) <= v < 10^k (with k ==\n// estimated_power) but do not touch the numerator or denominator.\n// Otherwise the routine multiplies the numerator and the deltas by 10.\nstatic void FixupMultiply10(int estimated_power, bool is_even,\n                            int* decimal_point,\n                            Bignum* numerator, Bignum* denominator,\n                            Bignum* delta_minus, Bignum* delta_plus) {\n  bool in_range;\n  if (is_even) {\n    // For IEEE doubles half-way cases (in decimal system numbers ending with 5)\n    // are rounded to the closest floating-point number with even significand.\n    in_range = Bignum::PlusCompare(*numerator, *delta_plus, *denominator) >= 0;\n  } else {\n    in_range = Bignum::PlusCompare(*numerator, *delta_plus, *denominator) > 0;\n  }\n  if (in_range) {\n    // Since numerator + delta_plus >= denominator we already have\n    // 1 <= numerator/denominator < 10. Simply update the estimated_power.\n    *decimal_point = estimated_power + 1;\n  } else {\n    *decimal_point = estimated_power;\n    numerator->Times10();\n    if (Bignum::Equal(*delta_minus, *delta_plus)) {\n      delta_minus->Times10();\n      delta_plus->AssignBignum(*delta_minus);\n    } else {\n      delta_minus->Times10();\n      delta_plus->Times10();\n    }\n  }\n}\n\n}  // namespace double_conversion\n"
  },
  {
    "path": "native/iosTest/Pods/DoubleConversion/double-conversion/bignum-dtoa.h",
    "content": "// Copyright 2010 the V8 project authors. All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n//       notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n//       copyright notice, this list of conditions and the following\n//       disclaimer in the documentation and/or other materials provided\n//       with the distribution.\n//     * Neither the name of Google Inc. nor the names of its\n//       contributors may be used to endorse or promote products derived\n//       from this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n#ifndef DOUBLE_CONVERSION_BIGNUM_DTOA_H_\n#define DOUBLE_CONVERSION_BIGNUM_DTOA_H_\n\n#include \"utils.h\"\n\nnamespace double_conversion {\n\nenum BignumDtoaMode {\n  // Return the shortest correct representation.\n  // For example the output of 0.299999999999999988897 is (the less accurate but\n  // correct) 0.3.\n  BIGNUM_DTOA_SHORTEST,\n  // Same as BIGNUM_DTOA_SHORTEST but for single-precision floats.\n  BIGNUM_DTOA_SHORTEST_SINGLE,\n  // Return a fixed number of digits after the decimal point.\n  // For instance fixed(0.1, 4) becomes 0.1000\n  // If the input number is big, the output will be big.\n  BIGNUM_DTOA_FIXED,\n  // Return a fixed number of digits, no matter what the exponent is.\n  BIGNUM_DTOA_PRECISION\n};\n\n// Converts the given double 'v' to ascii.\n// The result should be interpreted as buffer * 10^(point-length).\n// The buffer will be null-terminated.\n//\n// The input v must be > 0 and different from NaN, and Infinity.\n//\n// The output depends on the given mode:\n//  - SHORTEST: produce the least amount of digits for which the internal\n//   identity requirement is still satisfied. If the digits are printed\n//   (together with the correct exponent) then reading this number will give\n//   'v' again. The buffer will choose the representation that is closest to\n//   'v'. If there are two at the same distance, than the number is round up.\n//   In this mode the 'requested_digits' parameter is ignored.\n//  - FIXED: produces digits necessary to print a given number with\n//   'requested_digits' digits after the decimal point. The produced digits\n//   might be too short in which case the caller has to fill the gaps with '0's.\n//   Example: toFixed(0.001, 5) is allowed to return buffer=\"1\", point=-2.\n//   Halfway cases are rounded up. The call toFixed(0.15, 2) thus returns\n//     buffer=\"2\", point=0.\n//   Note: the length of the returned buffer has no meaning wrt the significance\n//   of its digits. That is, just because it contains '0's does not mean that\n//   any other digit would not satisfy the internal identity requirement.\n//  - PRECISION: produces 'requested_digits' where the first digit is not '0'.\n//   Even though the length of produced digits usually equals\n//   'requested_digits', the function is allowed to return fewer digits, in\n//   which case the caller has to fill the missing digits with '0's.\n//   Halfway cases are again rounded up.\n// 'BignumDtoa' expects the given buffer to be big enough to hold all digits\n// and a terminating null-character.\nvoid BignumDtoa(double v, BignumDtoaMode mode, int requested_digits,\n                Vector<char> buffer, int* length, int* point);\n\n}  // namespace double_conversion\n\n#endif  // DOUBLE_CONVERSION_BIGNUM_DTOA_H_\n"
  },
  {
    "path": "native/iosTest/Pods/DoubleConversion/double-conversion/bignum.cc",
    "content": "// Copyright 2010 the V8 project authors. All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n//       notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n//       copyright notice, this list of conditions and the following\n//       disclaimer in the documentation and/or other materials provided\n//       with the distribution.\n//     * Neither the name of Google Inc. nor the names of its\n//       contributors may be used to endorse or promote products derived\n//       from this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n#include \"bignum.h\"\n#include \"utils.h\"\n\nnamespace double_conversion {\n\nBignum::Bignum()\n    : bigits_(bigits_buffer_, kBigitCapacity), used_digits_(0), exponent_(0) {\n  for (int i = 0; i < kBigitCapacity; ++i) {\n    bigits_[i] = 0;\n  }\n}\n\n\ntemplate<typename S>\nstatic int BitSize(S value) {\n  (void) value;  // Mark variable as used.\n  return 8 * sizeof(value);\n}\n\n// Guaranteed to lie in one Bigit.\nvoid Bignum::AssignUInt16(uint16_t value) {\n  ASSERT(kBigitSize >= BitSize(value));\n  Zero();\n  if (value == 0) return;\n\n  EnsureCapacity(1);\n  bigits_[0] = value;\n  used_digits_ = 1;\n}\n\n\nvoid Bignum::AssignUInt64(uint64_t value) {\n  const int kUInt64Size = 64;\n\n  Zero();\n  if (value == 0) return;\n\n  int needed_bigits = kUInt64Size / kBigitSize + 1;\n  EnsureCapacity(needed_bigits);\n  for (int i = 0; i < needed_bigits; ++i) {\n    bigits_[i] = value & kBigitMask;\n    value = value >> kBigitSize;\n  }\n  used_digits_ = needed_bigits;\n  Clamp();\n}\n\n\nvoid Bignum::AssignBignum(const Bignum& other) {\n  exponent_ = other.exponent_;\n  for (int i = 0; i < other.used_digits_; ++i) {\n    bigits_[i] = other.bigits_[i];\n  }\n  // Clear the excess digits (if there were any).\n  for (int i = other.used_digits_; i < used_digits_; ++i) {\n    bigits_[i] = 0;\n  }\n  used_digits_ = other.used_digits_;\n}\n\n\nstatic uint64_t ReadUInt64(Vector<const char> buffer,\n                           int from,\n                           int digits_to_read) {\n  uint64_t result = 0;\n  for (int i = from; i < from + digits_to_read; ++i) {\n    int digit = buffer[i] - '0';\n    ASSERT(0 <= digit && digit <= 9);\n    result = result * 10 + digit;\n  }\n  return result;\n}\n\n\nvoid Bignum::AssignDecimalString(Vector<const char> value) {\n  // 2^64 = 18446744073709551616 > 10^19\n  const int kMaxUint64DecimalDigits = 19;\n  Zero();\n  int length = value.length();\n  int pos = 0;\n  // Let's just say that each digit needs 4 bits.\n  while (length >= kMaxUint64DecimalDigits) {\n    uint64_t digits = ReadUInt64(value, pos, kMaxUint64DecimalDigits);\n    pos += kMaxUint64DecimalDigits;\n    length -= kMaxUint64DecimalDigits;\n    MultiplyByPowerOfTen(kMaxUint64DecimalDigits);\n    AddUInt64(digits);\n  }\n  uint64_t digits = ReadUInt64(value, pos, length);\n  MultiplyByPowerOfTen(length);\n  AddUInt64(digits);\n  Clamp();\n}\n\n\nstatic int HexCharValue(char c) {\n  if ('0' <= c && c <= '9') return c - '0';\n  if ('a' <= c && c <= 'f') return 10 + c - 'a';\n  ASSERT('A' <= c && c <= 'F');\n  return 10 + c - 'A';\n}\n\n\nvoid Bignum::AssignHexString(Vector<const char> value) {\n  Zero();\n  int length = value.length();\n\n  int needed_bigits = length * 4 / kBigitSize + 1;\n  EnsureCapacity(needed_bigits);\n  int string_index = length - 1;\n  for (int i = 0; i < needed_bigits - 1; ++i) {\n    // These bigits are guaranteed to be \"full\".\n    Chunk current_bigit = 0;\n    for (int j = 0; j < kBigitSize / 4; j++) {\n      current_bigit += HexCharValue(value[string_index--]) << (j * 4);\n    }\n    bigits_[i] = current_bigit;\n  }\n  used_digits_ = needed_bigits - 1;\n\n  Chunk most_significant_bigit = 0;  // Could be = 0;\n  for (int j = 0; j <= string_index; ++j) {\n    most_significant_bigit <<= 4;\n    most_significant_bigit += HexCharValue(value[j]);\n  }\n  if (most_significant_bigit != 0) {\n    bigits_[used_digits_] = most_significant_bigit;\n    used_digits_++;\n  }\n  Clamp();\n}\n\n\nvoid Bignum::AddUInt64(uint64_t operand) {\n  if (operand == 0) return;\n  Bignum other;\n  other.AssignUInt64(operand);\n  AddBignum(other);\n}\n\n\nvoid Bignum::AddBignum(const Bignum& other) {\n  ASSERT(IsClamped());\n  ASSERT(other.IsClamped());\n\n  // If this has a greater exponent than other append zero-bigits to this.\n  // After this call exponent_ <= other.exponent_.\n  Align(other);\n\n  // There are two possibilities:\n  //   aaaaaaaaaaa 0000  (where the 0s represent a's exponent)\n  //     bbbbb 00000000\n  //   ----------------\n  //   ccccccccccc 0000\n  // or\n  //    aaaaaaaaaa 0000\n  //  bbbbbbbbb 0000000\n  //  -----------------\n  //  cccccccccccc 0000\n  // In both cases we might need a carry bigit.\n\n  EnsureCapacity(1 + Max(BigitLength(), other.BigitLength()) - exponent_);\n  Chunk carry = 0;\n  int bigit_pos = other.exponent_ - exponent_;\n  ASSERT(bigit_pos >= 0);\n  for (int i = 0; i < other.used_digits_; ++i) {\n    Chunk sum = bigits_[bigit_pos] + other.bigits_[i] + carry;\n    bigits_[bigit_pos] = sum & kBigitMask;\n    carry = sum >> kBigitSize;\n    bigit_pos++;\n  }\n\n  while (carry != 0) {\n    Chunk sum = bigits_[bigit_pos] + carry;\n    bigits_[bigit_pos] = sum & kBigitMask;\n    carry = sum >> kBigitSize;\n    bigit_pos++;\n  }\n  used_digits_ = Max(bigit_pos, used_digits_);\n  ASSERT(IsClamped());\n}\n\n\nvoid Bignum::SubtractBignum(const Bignum& other) {\n  ASSERT(IsClamped());\n  ASSERT(other.IsClamped());\n  // We require this to be bigger than other.\n  ASSERT(LessEqual(other, *this));\n\n  Align(other);\n\n  int offset = other.exponent_ - exponent_;\n  Chunk borrow = 0;\n  int i;\n  for (i = 0; i < other.used_digits_; ++i) {\n    ASSERT((borrow == 0) || (borrow == 1));\n    Chunk difference = bigits_[i + offset] - other.bigits_[i] - borrow;\n    bigits_[i + offset] = difference & kBigitMask;\n    borrow = difference >> (kChunkSize - 1);\n  }\n  while (borrow != 0) {\n    Chunk difference = bigits_[i + offset] - borrow;\n    bigits_[i + offset] = difference & kBigitMask;\n    borrow = difference >> (kChunkSize - 1);\n    ++i;\n  }\n  Clamp();\n}\n\n\nvoid Bignum::ShiftLeft(int shift_amount) {\n  if (used_digits_ == 0) return;\n  exponent_ += shift_amount / kBigitSize;\n  int local_shift = shift_amount % kBigitSize;\n  EnsureCapacity(used_digits_ + 1);\n  BigitsShiftLeft(local_shift);\n}\n\n\nvoid Bignum::MultiplyByUInt32(uint32_t factor) {\n  if (factor == 1) return;\n  if (factor == 0) {\n    Zero();\n    return;\n  }\n  if (used_digits_ == 0) return;\n\n  // The product of a bigit with the factor is of size kBigitSize + 32.\n  // Assert that this number + 1 (for the carry) fits into double chunk.\n  ASSERT(kDoubleChunkSize >= kBigitSize + 32 + 1);\n  DoubleChunk carry = 0;\n  for (int i = 0; i < used_digits_; ++i) {\n    DoubleChunk product = static_cast<DoubleChunk>(factor) * bigits_[i] + carry;\n    bigits_[i] = static_cast<Chunk>(product & kBigitMask);\n    carry = (product >> kBigitSize);\n  }\n  while (carry != 0) {\n    EnsureCapacity(used_digits_ + 1);\n    bigits_[used_digits_] = carry & kBigitMask;\n    used_digits_++;\n    carry >>= kBigitSize;\n  }\n}\n\n\nvoid Bignum::MultiplyByUInt64(uint64_t factor) {\n  if (factor == 1) return;\n  if (factor == 0) {\n    Zero();\n    return;\n  }\n  ASSERT(kBigitSize < 32);\n  uint64_t carry = 0;\n  uint64_t low = factor & 0xFFFFFFFF;\n  uint64_t high = factor >> 32;\n  for (int i = 0; i < used_digits_; ++i) {\n    uint64_t product_low = low * bigits_[i];\n    uint64_t product_high = high * bigits_[i];\n    uint64_t tmp = (carry & kBigitMask) + product_low;\n    bigits_[i] = tmp & kBigitMask;\n    carry = (carry >> kBigitSize) + (tmp >> kBigitSize) +\n        (product_high << (32 - kBigitSize));\n  }\n  while (carry != 0) {\n    EnsureCapacity(used_digits_ + 1);\n    bigits_[used_digits_] = carry & kBigitMask;\n    used_digits_++;\n    carry >>= kBigitSize;\n  }\n}\n\n\nvoid Bignum::MultiplyByPowerOfTen(int exponent) {\n  const uint64_t kFive27 = UINT64_2PART_C(0x6765c793, fa10079d);\n  const uint16_t kFive1 = 5;\n  const uint16_t kFive2 = kFive1 * 5;\n  const uint16_t kFive3 = kFive2 * 5;\n  const uint16_t kFive4 = kFive3 * 5;\n  const uint16_t kFive5 = kFive4 * 5;\n  const uint16_t kFive6 = kFive5 * 5;\n  const uint32_t kFive7 = kFive6 * 5;\n  const uint32_t kFive8 = kFive7 * 5;\n  const uint32_t kFive9 = kFive8 * 5;\n  const uint32_t kFive10 = kFive9 * 5;\n  const uint32_t kFive11 = kFive10 * 5;\n  const uint32_t kFive12 = kFive11 * 5;\n  const uint32_t kFive13 = kFive12 * 5;\n  const uint32_t kFive1_to_12[] =\n      { kFive1, kFive2, kFive3, kFive4, kFive5, kFive6,\n        kFive7, kFive8, kFive9, kFive10, kFive11, kFive12 };\n\n  ASSERT(exponent >= 0);\n  if (exponent == 0) return;\n  if (used_digits_ == 0) return;\n\n  // We shift by exponent at the end just before returning.\n  int remaining_exponent = exponent;\n  while (remaining_exponent >= 27) {\n    MultiplyByUInt64(kFive27);\n    remaining_exponent -= 27;\n  }\n  while (remaining_exponent >= 13) {\n    MultiplyByUInt32(kFive13);\n    remaining_exponent -= 13;\n  }\n  if (remaining_exponent > 0) {\n    MultiplyByUInt32(kFive1_to_12[remaining_exponent - 1]);\n  }\n  ShiftLeft(exponent);\n}\n\n\nvoid Bignum::Square() {\n  ASSERT(IsClamped());\n  int product_length = 2 * used_digits_;\n  EnsureCapacity(product_length);\n\n  // Comba multiplication: compute each column separately.\n  // Example: r = a2a1a0 * b2b1b0.\n  //    r =  1    * a0b0 +\n  //        10    * (a1b0 + a0b1) +\n  //        100   * (a2b0 + a1b1 + a0b2) +\n  //        1000  * (a2b1 + a1b2) +\n  //        10000 * a2b2\n  //\n  // In the worst case we have to accumulate nb-digits products of digit*digit.\n  //\n  // Assert that the additional number of bits in a DoubleChunk are enough to\n  // sum up used_digits of Bigit*Bigit.\n  if ((1 << (2 * (kChunkSize - kBigitSize))) <= used_digits_) {\n    UNIMPLEMENTED();\n  }\n  DoubleChunk accumulator = 0;\n  // First shift the digits so we don't overwrite them.\n  int copy_offset = used_digits_;\n  for (int i = 0; i < used_digits_; ++i) {\n    bigits_[copy_offset + i] = bigits_[i];\n  }\n  // We have two loops to avoid some 'if's in the loop.\n  for (int i = 0; i < used_digits_; ++i) {\n    // Process temporary digit i with power i.\n    // The sum of the two indices must be equal to i.\n    int bigit_index1 = i;\n    int bigit_index2 = 0;\n    // Sum all of the sub-products.\n    while (bigit_index1 >= 0) {\n      Chunk chunk1 = bigits_[copy_offset + bigit_index1];\n      Chunk chunk2 = bigits_[copy_offset + bigit_index2];\n      accumulator += static_cast<DoubleChunk>(chunk1) * chunk2;\n      bigit_index1--;\n      bigit_index2++;\n    }\n    bigits_[i] = static_cast<Chunk>(accumulator) & kBigitMask;\n    accumulator >>= kBigitSize;\n  }\n  for (int i = used_digits_; i < product_length; ++i) {\n    int bigit_index1 = used_digits_ - 1;\n    int bigit_index2 = i - bigit_index1;\n    // Invariant: sum of both indices is again equal to i.\n    // Inner loop runs 0 times on last iteration, emptying accumulator.\n    while (bigit_index2 < used_digits_) {\n      Chunk chunk1 = bigits_[copy_offset + bigit_index1];\n      Chunk chunk2 = bigits_[copy_offset + bigit_index2];\n      accumulator += static_cast<DoubleChunk>(chunk1) * chunk2;\n      bigit_index1--;\n      bigit_index2++;\n    }\n    // The overwritten bigits_[i] will never be read in further loop iterations,\n    // because bigit_index1 and bigit_index2 are always greater\n    // than i - used_digits_.\n    bigits_[i] = static_cast<Chunk>(accumulator) & kBigitMask;\n    accumulator >>= kBigitSize;\n  }\n  // Since the result was guaranteed to lie inside the number the\n  // accumulator must be 0 now.\n  ASSERT(accumulator == 0);\n\n  // Don't forget to update the used_digits and the exponent.\n  used_digits_ = product_length;\n  exponent_ *= 2;\n  Clamp();\n}\n\n\nvoid Bignum::AssignPowerUInt16(uint16_t base, int power_exponent) {\n  ASSERT(base != 0);\n  ASSERT(power_exponent >= 0);\n  if (power_exponent == 0) {\n    AssignUInt16(1);\n    return;\n  }\n  Zero();\n  int shifts = 0;\n  // We expect base to be in range 2-32, and most often to be 10.\n  // It does not make much sense to implement different algorithms for counting\n  // the bits.\n  while ((base & 1) == 0) {\n    base >>= 1;\n    shifts++;\n  }\n  int bit_size = 0;\n  int tmp_base = base;\n  while (tmp_base != 0) {\n    tmp_base >>= 1;\n    bit_size++;\n  }\n  int final_size = bit_size * power_exponent;\n  // 1 extra bigit for the shifting, and one for rounded final_size.\n  EnsureCapacity(final_size / kBigitSize + 2);\n\n  // Left to Right exponentiation.\n  int mask = 1;\n  while (power_exponent >= mask) mask <<= 1;\n\n  // The mask is now pointing to the bit above the most significant 1-bit of\n  // power_exponent.\n  // Get rid of first 1-bit;\n  mask >>= 2;\n  uint64_t this_value = base;\n\n  bool delayed_multipliciation = false;\n  const uint64_t max_32bits = 0xFFFFFFFF;\n  while (mask != 0 && this_value <= max_32bits) {\n    this_value = this_value * this_value;\n    // Verify that there is enough space in this_value to perform the\n    // multiplication.  The first bit_size bits must be 0.\n    if ((power_exponent & mask) != 0) {\n      uint64_t base_bits_mask =\n          ~((static_cast<uint64_t>(1) << (64 - bit_size)) - 1);\n      bool high_bits_zero = (this_value & base_bits_mask) == 0;\n      if (high_bits_zero) {\n        this_value *= base;\n      } else {\n        delayed_multipliciation = true;\n      }\n    }\n    mask >>= 1;\n  }\n  AssignUInt64(this_value);\n  if (delayed_multipliciation) {\n    MultiplyByUInt32(base);\n  }\n\n  // Now do the same thing as a bignum.\n  while (mask != 0) {\n    Square();\n    if ((power_exponent & mask) != 0) {\n      MultiplyByUInt32(base);\n    }\n    mask >>= 1;\n  }\n\n  // And finally add the saved shifts.\n  ShiftLeft(shifts * power_exponent);\n}\n\n\n// Precondition: this/other < 16bit.\nuint16_t Bignum::DivideModuloIntBignum(const Bignum& other) {\n  ASSERT(IsClamped());\n  ASSERT(other.IsClamped());\n  ASSERT(other.used_digits_ > 0);\n\n  // Easy case: if we have less digits than the divisor than the result is 0.\n  // Note: this handles the case where this == 0, too.\n  if (BigitLength() < other.BigitLength()) {\n    return 0;\n  }\n\n  Align(other);\n\n  uint16_t result = 0;\n\n  // Start by removing multiples of 'other' until both numbers have the same\n  // number of digits.\n  while (BigitLength() > other.BigitLength()) {\n    // This naive approach is extremely inefficient if `this` divided by other\n    // is big. This function is implemented for doubleToString where\n    // the result should be small (less than 10).\n    ASSERT(other.bigits_[other.used_digits_ - 1] >= ((1 << kBigitSize) / 16));\n    ASSERT(bigits_[used_digits_ - 1] < 0x10000);\n    // Remove the multiples of the first digit.\n    // Example this = 23 and other equals 9. -> Remove 2 multiples.\n    result += static_cast<uint16_t>(bigits_[used_digits_ - 1]);\n    SubtractTimes(other, bigits_[used_digits_ - 1]);\n  }\n\n  ASSERT(BigitLength() == other.BigitLength());\n\n  // Both bignums are at the same length now.\n  // Since other has more than 0 digits we know that the access to\n  // bigits_[used_digits_ - 1] is safe.\n  Chunk this_bigit = bigits_[used_digits_ - 1];\n  Chunk other_bigit = other.bigits_[other.used_digits_ - 1];\n\n  if (other.used_digits_ == 1) {\n    // Shortcut for easy (and common) case.\n    int quotient = this_bigit / other_bigit;\n    bigits_[used_digits_ - 1] = this_bigit - other_bigit * quotient;\n    ASSERT(quotient < 0x10000);\n    result += static_cast<uint16_t>(quotient);\n    Clamp();\n    return result;\n  }\n\n  int division_estimate = this_bigit / (other_bigit + 1);\n  ASSERT(division_estimate < 0x10000);\n  result += static_cast<uint16_t>(division_estimate);\n  SubtractTimes(other, division_estimate);\n\n  if (other_bigit * (division_estimate + 1) > this_bigit) {\n    // No need to even try to subtract. Even if other's remaining digits were 0\n    // another subtraction would be too much.\n    return result;\n  }\n\n  while (LessEqual(other, *this)) {\n    SubtractBignum(other);\n    result++;\n  }\n  return result;\n}\n\n\ntemplate<typename S>\nstatic int SizeInHexChars(S number) {\n  ASSERT(number > 0);\n  int result = 0;\n  while (number != 0) {\n    number >>= 4;\n    result++;\n  }\n  return result;\n}\n\n\nstatic char HexCharOfValue(int value) {\n  ASSERT(0 <= value && value <= 16);\n  if (value < 10) return static_cast<char>(value + '0');\n  return static_cast<char>(value - 10 + 'A');\n}\n\n\nbool Bignum::ToHexString(char* buffer, int buffer_size) const {\n  ASSERT(IsClamped());\n  // Each bigit must be printable as separate hex-character.\n  ASSERT(kBigitSize % 4 == 0);\n  const int kHexCharsPerBigit = kBigitSize / 4;\n\n  if (used_digits_ == 0) {\n    if (buffer_size < 2) return false;\n    buffer[0] = '0';\n    buffer[1] = '\\0';\n    return true;\n  }\n  // We add 1 for the terminating '\\0' character.\n  int needed_chars = (BigitLength() - 1) * kHexCharsPerBigit +\n      SizeInHexChars(bigits_[used_digits_ - 1]) + 1;\n  if (needed_chars > buffer_size) return false;\n  int string_index = needed_chars - 1;\n  buffer[string_index--] = '\\0';\n  for (int i = 0; i < exponent_; ++i) {\n    for (int j = 0; j < kHexCharsPerBigit; ++j) {\n      buffer[string_index--] = '0';\n    }\n  }\n  for (int i = 0; i < used_digits_ - 1; ++i) {\n    Chunk current_bigit = bigits_[i];\n    for (int j = 0; j < kHexCharsPerBigit; ++j) {\n      buffer[string_index--] = HexCharOfValue(current_bigit & 0xF);\n      current_bigit >>= 4;\n    }\n  }\n  // And finally the last bigit.\n  Chunk most_significant_bigit = bigits_[used_digits_ - 1];\n  while (most_significant_bigit != 0) {\n    buffer[string_index--] = HexCharOfValue(most_significant_bigit & 0xF);\n    most_significant_bigit >>= 4;\n  }\n  return true;\n}\n\n\nBignum::Chunk Bignum::BigitAt(int index) const {\n  if (index >= BigitLength()) return 0;\n  if (index < exponent_) return 0;\n  return bigits_[index - exponent_];\n}\n\n\nint Bignum::Compare(const Bignum& a, const Bignum& b) {\n  ASSERT(a.IsClamped());\n  ASSERT(b.IsClamped());\n  int bigit_length_a = a.BigitLength();\n  int bigit_length_b = b.BigitLength();\n  if (bigit_length_a < bigit_length_b) return -1;\n  if (bigit_length_a > bigit_length_b) return +1;\n  for (int i = bigit_length_a - 1; i >= Min(a.exponent_, b.exponent_); --i) {\n    Chunk bigit_a = a.BigitAt(i);\n    Chunk bigit_b = b.BigitAt(i);\n    if (bigit_a < bigit_b) return -1;\n    if (bigit_a > bigit_b) return +1;\n    // Otherwise they are equal up to this digit. Try the next digit.\n  }\n  return 0;\n}\n\n\nint Bignum::PlusCompare(const Bignum& a, const Bignum& b, const Bignum& c) {\n  ASSERT(a.IsClamped());\n  ASSERT(b.IsClamped());\n  ASSERT(c.IsClamped());\n  if (a.BigitLength() < b.BigitLength()) {\n    return PlusCompare(b, a, c);\n  }\n  if (a.BigitLength() + 1 < c.BigitLength()) return -1;\n  if (a.BigitLength() > c.BigitLength()) return +1;\n  // The exponent encodes 0-bigits. So if there are more 0-digits in 'a' than\n  // 'b' has digits, then the bigit-length of 'a'+'b' must be equal to the one\n  // of 'a'.\n  if (a.exponent_ >= b.BigitLength() && a.BigitLength() < c.BigitLength()) {\n    return -1;\n  }\n\n  Chunk borrow = 0;\n  // Starting at min_exponent all digits are == 0. So no need to compare them.\n  int min_exponent = Min(Min(a.exponent_, b.exponent_), c.exponent_);\n  for (int i = c.BigitLength() - 1; i >= min_exponent; --i) {\n    Chunk chunk_a = a.BigitAt(i);\n    Chunk chunk_b = b.BigitAt(i);\n    Chunk chunk_c = c.BigitAt(i);\n    Chunk sum = chunk_a + chunk_b;\n    if (sum > chunk_c + borrow) {\n      return +1;\n    } else {\n      borrow = chunk_c + borrow - sum;\n      if (borrow > 1) return -1;\n      borrow <<= kBigitSize;\n    }\n  }\n  if (borrow == 0) return 0;\n  return -1;\n}\n\n\nvoid Bignum::Clamp() {\n  while (used_digits_ > 0 && bigits_[used_digits_ - 1] == 0) {\n    used_digits_--;\n  }\n  if (used_digits_ == 0) {\n    // Zero.\n    exponent_ = 0;\n  }\n}\n\n\nbool Bignum::IsClamped() const {\n  return used_digits_ == 0 || bigits_[used_digits_ - 1] != 0;\n}\n\n\nvoid Bignum::Zero() {\n  for (int i = 0; i < used_digits_; ++i) {\n    bigits_[i] = 0;\n  }\n  used_digits_ = 0;\n  exponent_ = 0;\n}\n\n\nvoid Bignum::Align(const Bignum& other) {\n  if (exponent_ > other.exponent_) {\n    // If \"X\" represents a \"hidden\" digit (by the exponent) then we are in the\n    // following case (a == this, b == other):\n    // a:  aaaaaaXXXX   or a:   aaaaaXXX\n    // b:     bbbbbbX      b: bbbbbbbbXX\n    // We replace some of the hidden digits (X) of a with 0 digits.\n    // a:  aaaaaa000X   or a:   aaaaa0XX\n    int zero_digits = exponent_ - other.exponent_;\n    EnsureCapacity(used_digits_ + zero_digits);\n    for (int i = used_digits_ - 1; i >= 0; --i) {\n      bigits_[i + zero_digits] = bigits_[i];\n    }\n    for (int i = 0; i < zero_digits; ++i) {\n      bigits_[i] = 0;\n    }\n    used_digits_ += zero_digits;\n    exponent_ -= zero_digits;\n    ASSERT(used_digits_ >= 0);\n    ASSERT(exponent_ >= 0);\n  }\n}\n\n\nvoid Bignum::BigitsShiftLeft(int shift_amount) {\n  ASSERT(shift_amount < kBigitSize);\n  ASSERT(shift_amount >= 0);\n  Chunk carry = 0;\n  for (int i = 0; i < used_digits_; ++i) {\n    Chunk new_carry = bigits_[i] >> (kBigitSize - shift_amount);\n    bigits_[i] = ((bigits_[i] << shift_amount) + carry) & kBigitMask;\n    carry = new_carry;\n  }\n  if (carry != 0) {\n    bigits_[used_digits_] = carry;\n    used_digits_++;\n  }\n}\n\n\nvoid Bignum::SubtractTimes(const Bignum& other, int factor) {\n  ASSERT(exponent_ <= other.exponent_);\n  if (factor < 3) {\n    for (int i = 0; i < factor; ++i) {\n      SubtractBignum(other);\n    }\n    return;\n  }\n  Chunk borrow = 0;\n  int exponent_diff = other.exponent_ - exponent_;\n  for (int i = 0; i < other.used_digits_; ++i) {\n    DoubleChunk product = static_cast<DoubleChunk>(factor) * other.bigits_[i];\n    DoubleChunk remove = borrow + product;\n    Chunk difference = bigits_[i + exponent_diff] - (remove & kBigitMask);\n    bigits_[i + exponent_diff] = difference & kBigitMask;\n    borrow = static_cast<Chunk>((difference >> (kChunkSize - 1)) +\n                                (remove >> kBigitSize));\n  }\n  for (int i = other.used_digits_ + exponent_diff; i < used_digits_; ++i) {\n    if (borrow == 0) return;\n    Chunk difference = bigits_[i] - borrow;\n    bigits_[i] = difference & kBigitMask;\n    borrow = difference >> (kChunkSize - 1);\n  }\n  Clamp();\n}\n\n\n}  // namespace double_conversion\n"
  },
  {
    "path": "native/iosTest/Pods/DoubleConversion/double-conversion/bignum.h",
    "content": "// Copyright 2010 the V8 project authors. All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n//       notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n//       copyright notice, this list of conditions and the following\n//       disclaimer in the documentation and/or other materials provided\n//       with the distribution.\n//     * Neither the name of Google Inc. nor the names of its\n//       contributors may be used to endorse or promote products derived\n//       from this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n#ifndef DOUBLE_CONVERSION_BIGNUM_H_\n#define DOUBLE_CONVERSION_BIGNUM_H_\n\n#include \"utils.h\"\n\nnamespace double_conversion {\n\nclass Bignum {\n public:\n  // 3584 = 128 * 28. We can represent 2^3584 > 10^1000 accurately.\n  // This bignum can encode much bigger numbers, since it contains an\n  // exponent.\n  static const int kMaxSignificantBits = 3584;\n\n  Bignum();\n  void AssignUInt16(uint16_t value);\n  void AssignUInt64(uint64_t value);\n  void AssignBignum(const Bignum& other);\n\n  void AssignDecimalString(Vector<const char> value);\n  void AssignHexString(Vector<const char> value);\n\n  void AssignPowerUInt16(uint16_t base, int exponent);\n\n  void AddUInt16(uint16_t operand);\n  void AddUInt64(uint64_t operand);\n  void AddBignum(const Bignum& other);\n  // Precondition: this >= other.\n  void SubtractBignum(const Bignum& other);\n\n  void Square();\n  void ShiftLeft(int shift_amount);\n  void MultiplyByUInt32(uint32_t factor);\n  void MultiplyByUInt64(uint64_t factor);\n  void MultiplyByPowerOfTen(int exponent);\n  void Times10() { return MultiplyByUInt32(10); }\n  // Pseudocode:\n  //  int result = this / other;\n  //  this = this % other;\n  // In the worst case this function is in O(this/other).\n  uint16_t DivideModuloIntBignum(const Bignum& other);\n\n  bool ToHexString(char* buffer, int buffer_size) const;\n\n  // Returns\n  //  -1 if a < b,\n  //   0 if a == b, and\n  //  +1 if a > b.\n  static int Compare(const Bignum& a, const Bignum& b);\n  static bool Equal(const Bignum& a, const Bignum& b) {\n    return Compare(a, b) == 0;\n  }\n  static bool LessEqual(const Bignum& a, const Bignum& b) {\n    return Compare(a, b) <= 0;\n  }\n  static bool Less(const Bignum& a, const Bignum& b) {\n    return Compare(a, b) < 0;\n  }\n  // Returns Compare(a + b, c);\n  static int PlusCompare(const Bignum& a, const Bignum& b, const Bignum& c);\n  // Returns a + b == c\n  static bool PlusEqual(const Bignum& a, const Bignum& b, const Bignum& c) {\n    return PlusCompare(a, b, c) == 0;\n  }\n  // Returns a + b <= c\n  static bool PlusLessEqual(const Bignum& a, const Bignum& b, const Bignum& c) {\n    return PlusCompare(a, b, c) <= 0;\n  }\n  // Returns a + b < c\n  static bool PlusLess(const Bignum& a, const Bignum& b, const Bignum& c) {\n    return PlusCompare(a, b, c) < 0;\n  }\n private:\n  typedef uint32_t Chunk;\n  typedef uint64_t DoubleChunk;\n\n  static const int kChunkSize = sizeof(Chunk) * 8;\n  static const int kDoubleChunkSize = sizeof(DoubleChunk) * 8;\n  // With bigit size of 28 we loose some bits, but a double still fits easily\n  // into two chunks, and more importantly we can use the Comba multiplication.\n  static const int kBigitSize = 28;\n  static const Chunk kBigitMask = (1 << kBigitSize) - 1;\n  // Every instance allocates kBigitLength chunks on the stack. Bignums cannot\n  // grow. There are no checks if the stack-allocated space is sufficient.\n  static const int kBigitCapacity = kMaxSignificantBits / kBigitSize;\n\n  void EnsureCapacity(int size) {\n    if (size > kBigitCapacity) {\n      UNREACHABLE();\n    }\n  }\n  void Align(const Bignum& other);\n  void Clamp();\n  bool IsClamped() const;\n  void Zero();\n  // Requires this to have enough capacity (no tests done).\n  // Updates used_digits_ if necessary.\n  // shift_amount must be < kBigitSize.\n  void BigitsShiftLeft(int shift_amount);\n  // BigitLength includes the \"hidden\" digits encoded in the exponent.\n  int BigitLength() const { return used_digits_ + exponent_; }\n  Chunk BigitAt(int index) const;\n  void SubtractTimes(const Bignum& other, int factor);\n\n  Chunk bigits_buffer_[kBigitCapacity];\n  // A vector backed by bigits_buffer_. This way accesses to the array are\n  // checked for out-of-bounds errors.\n  Vector<Chunk> bigits_;\n  int used_digits_;\n  // The Bignum's value equals value(bigits_) * 2^(exponent_ * kBigitSize).\n  int exponent_;\n\n  DISALLOW_COPY_AND_ASSIGN(Bignum);\n};\n\n}  // namespace double_conversion\n\n#endif  // DOUBLE_CONVERSION_BIGNUM_H_\n"
  },
  {
    "path": "native/iosTest/Pods/DoubleConversion/double-conversion/cached-powers.cc",
    "content": "// Copyright 2006-2008 the V8 project authors. All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n//       notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n//       copyright notice, this list of conditions and the following\n//       disclaimer in the documentation and/or other materials provided\n//       with the distribution.\n//     * Neither the name of Google Inc. nor the names of its\n//       contributors may be used to endorse or promote products derived\n//       from this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n#include <stdarg.h>\n#include <limits.h>\n#include <math.h>\n\n#include \"utils.h\"\n\n#include \"cached-powers.h\"\n\nnamespace double_conversion {\n\nstruct CachedPower {\n  uint64_t significand;\n  int16_t binary_exponent;\n  int16_t decimal_exponent;\n};\n\nstatic const CachedPower kCachedPowers[] = {\n  {UINT64_2PART_C(0xfa8fd5a0, 081c0288), -1220, -348},\n  {UINT64_2PART_C(0xbaaee17f, a23ebf76), -1193, -340},\n  {UINT64_2PART_C(0x8b16fb20, 3055ac76), -1166, -332},\n  {UINT64_2PART_C(0xcf42894a, 5dce35ea), -1140, -324},\n  {UINT64_2PART_C(0x9a6bb0aa, 55653b2d), -1113, -316},\n  {UINT64_2PART_C(0xe61acf03, 3d1a45df), -1087, -308},\n  {UINT64_2PART_C(0xab70fe17, c79ac6ca), -1060, -300},\n  {UINT64_2PART_C(0xff77b1fc, bebcdc4f), -1034, -292},\n  {UINT64_2PART_C(0xbe5691ef, 416bd60c), -1007, -284},\n  {UINT64_2PART_C(0x8dd01fad, 907ffc3c), -980, -276},\n  {UINT64_2PART_C(0xd3515c28, 31559a83), -954, -268},\n  {UINT64_2PART_C(0x9d71ac8f, ada6c9b5), -927, -260},\n  {UINT64_2PART_C(0xea9c2277, 23ee8bcb), -901, -252},\n  {UINT64_2PART_C(0xaecc4991, 4078536d), -874, -244},\n  {UINT64_2PART_C(0x823c1279, 5db6ce57), -847, -236},\n  {UINT64_2PART_C(0xc2109436, 4dfb5637), -821, -228},\n  {UINT64_2PART_C(0x9096ea6f, 3848984f), -794, -220},\n  {UINT64_2PART_C(0xd77485cb, 25823ac7), -768, -212},\n  {UINT64_2PART_C(0xa086cfcd, 97bf97f4), -741, -204},\n  {UINT64_2PART_C(0xef340a98, 172aace5), -715, -196},\n  {UINT64_2PART_C(0xb23867fb, 2a35b28e), -688, -188},\n  {UINT64_2PART_C(0x84c8d4df, d2c63f3b), -661, -180},\n  {UINT64_2PART_C(0xc5dd4427, 1ad3cdba), -635, -172},\n  {UINT64_2PART_C(0x936b9fce, bb25c996), -608, -164},\n  {UINT64_2PART_C(0xdbac6c24, 7d62a584), -582, -156},\n  {UINT64_2PART_C(0xa3ab6658, 0d5fdaf6), -555, -148},\n  {UINT64_2PART_C(0xf3e2f893, dec3f126), -529, -140},\n  {UINT64_2PART_C(0xb5b5ada8, aaff80b8), -502, -132},\n  {UINT64_2PART_C(0x87625f05, 6c7c4a8b), -475, -124},\n  {UINT64_2PART_C(0xc9bcff60, 34c13053), -449, -116},\n  {UINT64_2PART_C(0x964e858c, 91ba2655), -422, -108},\n  {UINT64_2PART_C(0xdff97724, 70297ebd), -396, -100},\n  {UINT64_2PART_C(0xa6dfbd9f, b8e5b88f), -369, -92},\n  {UINT64_2PART_C(0xf8a95fcf, 88747d94), -343, -84},\n  {UINT64_2PART_C(0xb9447093, 8fa89bcf), -316, -76},\n  {UINT64_2PART_C(0x8a08f0f8, bf0f156b), -289, -68},\n  {UINT64_2PART_C(0xcdb02555, 653131b6), -263, -60},\n  {UINT64_2PART_C(0x993fe2c6, d07b7fac), -236, -52},\n  {UINT64_2PART_C(0xe45c10c4, 2a2b3b06), -210, -44},\n  {UINT64_2PART_C(0xaa242499, 697392d3), -183, -36},\n  {UINT64_2PART_C(0xfd87b5f2, 8300ca0e), -157, -28},\n  {UINT64_2PART_C(0xbce50864, 92111aeb), -130, -20},\n  {UINT64_2PART_C(0x8cbccc09, 6f5088cc), -103, -12},\n  {UINT64_2PART_C(0xd1b71758, e219652c), -77, -4},\n  {UINT64_2PART_C(0x9c400000, 00000000), -50, 4},\n  {UINT64_2PART_C(0xe8d4a510, 00000000), -24, 12},\n  {UINT64_2PART_C(0xad78ebc5, ac620000), 3, 20},\n  {UINT64_2PART_C(0x813f3978, f8940984), 30, 28},\n  {UINT64_2PART_C(0xc097ce7b, c90715b3), 56, 36},\n  {UINT64_2PART_C(0x8f7e32ce, 7bea5c70), 83, 44},\n  {UINT64_2PART_C(0xd5d238a4, abe98068), 109, 52},\n  {UINT64_2PART_C(0x9f4f2726, 179a2245), 136, 60},\n  {UINT64_2PART_C(0xed63a231, d4c4fb27), 162, 68},\n  {UINT64_2PART_C(0xb0de6538, 8cc8ada8), 189, 76},\n  {UINT64_2PART_C(0x83c7088e, 1aab65db), 216, 84},\n  {UINT64_2PART_C(0xc45d1df9, 42711d9a), 242, 92},\n  {UINT64_2PART_C(0x924d692c, a61be758), 269, 100},\n  {UINT64_2PART_C(0xda01ee64, 1a708dea), 295, 108},\n  {UINT64_2PART_C(0xa26da399, 9aef774a), 322, 116},\n  {UINT64_2PART_C(0xf209787b, b47d6b85), 348, 124},\n  {UINT64_2PART_C(0xb454e4a1, 79dd1877), 375, 132},\n  {UINT64_2PART_C(0x865b8692, 5b9bc5c2), 402, 140},\n  {UINT64_2PART_C(0xc83553c5, c8965d3d), 428, 148},\n  {UINT64_2PART_C(0x952ab45c, fa97a0b3), 455, 156},\n  {UINT64_2PART_C(0xde469fbd, 99a05fe3), 481, 164},\n  {UINT64_2PART_C(0xa59bc234, db398c25), 508, 172},\n  {UINT64_2PART_C(0xf6c69a72, a3989f5c), 534, 180},\n  {UINT64_2PART_C(0xb7dcbf53, 54e9bece), 561, 188},\n  {UINT64_2PART_C(0x88fcf317, f22241e2), 588, 196},\n  {UINT64_2PART_C(0xcc20ce9b, d35c78a5), 614, 204},\n  {UINT64_2PART_C(0x98165af3, 7b2153df), 641, 212},\n  {UINT64_2PART_C(0xe2a0b5dc, 971f303a), 667, 220},\n  {UINT64_2PART_C(0xa8d9d153, 5ce3b396), 694, 228},\n  {UINT64_2PART_C(0xfb9b7cd9, a4a7443c), 720, 236},\n  {UINT64_2PART_C(0xbb764c4c, a7a44410), 747, 244},\n  {UINT64_2PART_C(0x8bab8eef, b6409c1a), 774, 252},\n  {UINT64_2PART_C(0xd01fef10, a657842c), 800, 260},\n  {UINT64_2PART_C(0x9b10a4e5, e9913129), 827, 268},\n  {UINT64_2PART_C(0xe7109bfb, a19c0c9d), 853, 276},\n  {UINT64_2PART_C(0xac2820d9, 623bf429), 880, 284},\n  {UINT64_2PART_C(0x80444b5e, 7aa7cf85), 907, 292},\n  {UINT64_2PART_C(0xbf21e440, 03acdd2d), 933, 300},\n  {UINT64_2PART_C(0x8e679c2f, 5e44ff8f), 960, 308},\n  {UINT64_2PART_C(0xd433179d, 9c8cb841), 986, 316},\n  {UINT64_2PART_C(0x9e19db92, b4e31ba9), 1013, 324},\n  {UINT64_2PART_C(0xeb96bf6e, badf77d9), 1039, 332},\n  {UINT64_2PART_C(0xaf87023b, 9bf0ee6b), 1066, 340},\n};\n\nstatic const int kCachedPowersLength = ARRAY_SIZE(kCachedPowers);\nstatic const int kCachedPowersOffset = 348;  // -1 * the first decimal_exponent.\nstatic const double kD_1_LOG2_10 = 0.30102999566398114;  //  1 / lg(10)\n// Difference between the decimal exponents in the table above.\nconst int PowersOfTenCache::kDecimalExponentDistance = 8;\nconst int PowersOfTenCache::kMinDecimalExponent = -348;\nconst int PowersOfTenCache::kMaxDecimalExponent = 340;\n\nvoid PowersOfTenCache::GetCachedPowerForBinaryExponentRange(\n    int min_exponent,\n    int max_exponent,\n    DiyFp* power,\n    int* decimal_exponent) {\n  int kQ = DiyFp::kSignificandSize;\n  double k = ceil((min_exponent + kQ - 1) * kD_1_LOG2_10);\n  int foo = kCachedPowersOffset;\n  int index =\n      (foo + static_cast<int>(k) - 1) / kDecimalExponentDistance + 1;\n  ASSERT(0 <= index && index < kCachedPowersLength);\n  CachedPower cached_power = kCachedPowers[index];\n  ASSERT(min_exponent <= cached_power.binary_exponent);\n  (void) max_exponent;  // Mark variable as used.\n  ASSERT(cached_power.binary_exponent <= max_exponent);\n  *decimal_exponent = cached_power.decimal_exponent;\n  *power = DiyFp(cached_power.significand, cached_power.binary_exponent);\n}\n\n\nvoid PowersOfTenCache::GetCachedPowerForDecimalExponent(int requested_exponent,\n                                                        DiyFp* power,\n                                                        int* found_exponent) {\n  ASSERT(kMinDecimalExponent <= requested_exponent);\n  ASSERT(requested_exponent < kMaxDecimalExponent + kDecimalExponentDistance);\n  int index =\n      (requested_exponent + kCachedPowersOffset) / kDecimalExponentDistance;\n  CachedPower cached_power = kCachedPowers[index];\n  *power = DiyFp(cached_power.significand, cached_power.binary_exponent);\n  *found_exponent = cached_power.decimal_exponent;\n  ASSERT(*found_exponent <= requested_exponent);\n  ASSERT(requested_exponent < *found_exponent + kDecimalExponentDistance);\n}\n\n}  // namespace double_conversion\n"
  },
  {
    "path": "native/iosTest/Pods/DoubleConversion/double-conversion/cached-powers.h",
    "content": "// Copyright 2010 the V8 project authors. All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n//       notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n//       copyright notice, this list of conditions and the following\n//       disclaimer in the documentation and/or other materials provided\n//       with the distribution.\n//     * Neither the name of Google Inc. nor the names of its\n//       contributors may be used to endorse or promote products derived\n//       from this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n#ifndef DOUBLE_CONVERSION_CACHED_POWERS_H_\n#define DOUBLE_CONVERSION_CACHED_POWERS_H_\n\n#include \"diy-fp.h\"\n\nnamespace double_conversion {\n\nclass PowersOfTenCache {\n public:\n\n  // Not all powers of ten are cached. The decimal exponent of two neighboring\n  // cached numbers will differ by kDecimalExponentDistance.\n  static const int kDecimalExponentDistance;\n\n  static const int kMinDecimalExponent;\n  static const int kMaxDecimalExponent;\n\n  // Returns a cached power-of-ten with a binary exponent in the range\n  // [min_exponent; max_exponent] (boundaries included).\n  static void GetCachedPowerForBinaryExponentRange(int min_exponent,\n                                                   int max_exponent,\n                                                   DiyFp* power,\n                                                   int* decimal_exponent);\n\n  // Returns a cached power of ten x ~= 10^k such that\n  //   k <= decimal_exponent < k + kCachedPowersDecimalDistance.\n  // The given decimal_exponent must satisfy\n  //   kMinDecimalExponent <= requested_exponent, and\n  //   requested_exponent < kMaxDecimalExponent + kDecimalExponentDistance.\n  static void GetCachedPowerForDecimalExponent(int requested_exponent,\n                                               DiyFp* power,\n                                               int* found_exponent);\n};\n\n}  // namespace double_conversion\n\n#endif  // DOUBLE_CONVERSION_CACHED_POWERS_H_\n"
  },
  {
    "path": "native/iosTest/Pods/DoubleConversion/double-conversion/diy-fp.cc",
    "content": "// Copyright 2010 the V8 project authors. All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n//       notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n//       copyright notice, this list of conditions and the following\n//       disclaimer in the documentation and/or other materials provided\n//       with the distribution.\n//     * Neither the name of Google Inc. nor the names of its\n//       contributors may be used to endorse or promote products derived\n//       from this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\n#include \"diy-fp.h\"\n#include \"utils.h\"\n\nnamespace double_conversion {\n\nvoid DiyFp::Multiply(const DiyFp& other) {\n  // Simply \"emulates\" a 128 bit multiplication.\n  // However: the resulting number only contains 64 bits. The least\n  // significant 64 bits are only used for rounding the most significant 64\n  // bits.\n  const uint64_t kM32 = 0xFFFFFFFFU;\n  uint64_t a = f_ >> 32;\n  uint64_t b = f_ & kM32;\n  uint64_t c = other.f_ >> 32;\n  uint64_t d = other.f_ & kM32;\n  uint64_t ac = a * c;\n  uint64_t bc = b * c;\n  uint64_t ad = a * d;\n  uint64_t bd = b * d;\n  uint64_t tmp = (bd >> 32) + (ad & kM32) + (bc & kM32);\n  // By adding 1U << 31 to tmp we round the final result.\n  // Halfway cases will be round up.\n  tmp += 1U << 31;\n  uint64_t result_f = ac + (ad >> 32) + (bc >> 32) + (tmp >> 32);\n  e_ += other.e_ + 64;\n  f_ = result_f;\n}\n\n}  // namespace double_conversion\n"
  },
  {
    "path": "native/iosTest/Pods/DoubleConversion/double-conversion/diy-fp.h",
    "content": "// Copyright 2010 the V8 project authors. All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n//       notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n//       copyright notice, this list of conditions and the following\n//       disclaimer in the documentation and/or other materials provided\n//       with the distribution.\n//     * Neither the name of Google Inc. nor the names of its\n//       contributors may be used to endorse or promote products derived\n//       from this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n#ifndef DOUBLE_CONVERSION_DIY_FP_H_\n#define DOUBLE_CONVERSION_DIY_FP_H_\n\n#include \"utils.h\"\n\nnamespace double_conversion {\n\n// This \"Do It Yourself Floating Point\" class implements a floating-point number\n// with a uint64 significand and an int exponent. Normalized DiyFp numbers will\n// have the most significant bit of the significand set.\n// Multiplication and Subtraction do not normalize their results.\n// DiyFp are not designed to contain special doubles (NaN and Infinity).\nclass DiyFp {\n public:\n  static const int kSignificandSize = 64;\n\n  DiyFp() : f_(0), e_(0) {}\n  DiyFp(uint64_t f, int e) : f_(f), e_(e) {}\n\n  // this = this - other.\n  // The exponents of both numbers must be the same and the significand of this\n  // must be bigger than the significand of other.\n  // The result will not be normalized.\n  void Subtract(const DiyFp& other) {\n    ASSERT(e_ == other.e_);\n    ASSERT(f_ >= other.f_);\n    f_ -= other.f_;\n  }\n\n  // Returns a - b.\n  // The exponents of both numbers must be the same and this must be bigger\n  // than other. The result will not be normalized.\n  static DiyFp Minus(const DiyFp& a, const DiyFp& b) {\n    DiyFp result = a;\n    result.Subtract(b);\n    return result;\n  }\n\n\n  // this = this * other.\n  void Multiply(const DiyFp& other);\n\n  // returns a * b;\n  static DiyFp Times(const DiyFp& a, const DiyFp& b) {\n    DiyFp result = a;\n    result.Multiply(b);\n    return result;\n  }\n\n  void Normalize() {\n    ASSERT(f_ != 0);\n    uint64_t f = f_;\n    int e = e_;\n\n    // This method is mainly called for normalizing boundaries. In general\n    // boundaries need to be shifted by 10 bits. We thus optimize for this case.\n    const uint64_t k10MSBits = UINT64_2PART_C(0xFFC00000, 00000000);\n    while ((f & k10MSBits) == 0) {\n      f <<= 10;\n      e -= 10;\n    }\n    while ((f & kUint64MSB) == 0) {\n      f <<= 1;\n      e--;\n    }\n    f_ = f;\n    e_ = e;\n  }\n\n  static DiyFp Normalize(const DiyFp& a) {\n    DiyFp result = a;\n    result.Normalize();\n    return result;\n  }\n\n  uint64_t f() const { return f_; }\n  int e() const { return e_; }\n\n  void set_f(uint64_t new_value) { f_ = new_value; }\n  void set_e(int new_value) { e_ = new_value; }\n\n private:\n  static const uint64_t kUint64MSB = UINT64_2PART_C(0x80000000, 00000000);\n\n  uint64_t f_;\n  int e_;\n};\n\n}  // namespace double_conversion\n\n#endif  // DOUBLE_CONVERSION_DIY_FP_H_\n"
  },
  {
    "path": "native/iosTest/Pods/DoubleConversion/double-conversion/double-conversion.cc",
    "content": "// Copyright 2010 the V8 project authors. All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n//       notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n//       copyright notice, this list of conditions and the following\n//       disclaimer in the documentation and/or other materials provided\n//       with the distribution.\n//     * Neither the name of Google Inc. nor the names of its\n//       contributors may be used to endorse or promote products derived\n//       from this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n#include <limits.h>\n#include <math.h>\n\n#include \"double-conversion.h\"\n\n#include \"bignum-dtoa.h\"\n#include \"fast-dtoa.h\"\n#include \"fixed-dtoa.h\"\n#include \"ieee.h\"\n#include \"strtod.h\"\n#include \"utils.h\"\n\nnamespace double_conversion {\n\nconst DoubleToStringConverter& DoubleToStringConverter::EcmaScriptConverter() {\n  int flags = UNIQUE_ZERO | EMIT_POSITIVE_EXPONENT_SIGN;\n  static DoubleToStringConverter converter(flags,\n                                           \"Infinity\",\n                                           \"NaN\",\n                                           'e',\n                                           -6, 21,\n                                           6, 0);\n  return converter;\n}\n\n\nbool DoubleToStringConverter::HandleSpecialValues(\n    double value,\n    StringBuilder* result_builder) const {\n  Double double_inspect(value);\n  if (double_inspect.IsInfinite()) {\n    if (infinity_symbol_ == NULL) return false;\n    if (value < 0) {\n      result_builder->AddCharacter('-');\n    }\n    result_builder->AddString(infinity_symbol_);\n    return true;\n  }\n  if (double_inspect.IsNan()) {\n    if (nan_symbol_ == NULL) return false;\n    result_builder->AddString(nan_symbol_);\n    return true;\n  }\n  return false;\n}\n\n\nvoid DoubleToStringConverter::CreateExponentialRepresentation(\n    const char* decimal_digits,\n    int length,\n    int exponent,\n    StringBuilder* result_builder) const {\n  ASSERT(length != 0);\n  result_builder->AddCharacter(decimal_digits[0]);\n  if (length != 1) {\n    result_builder->AddCharacter('.');\n    result_builder->AddSubstring(&decimal_digits[1], length-1);\n  }\n  result_builder->AddCharacter(exponent_character_);\n  if (exponent < 0) {\n    result_builder->AddCharacter('-');\n    exponent = -exponent;\n  } else {\n    if ((flags_ & EMIT_POSITIVE_EXPONENT_SIGN) != 0) {\n      result_builder->AddCharacter('+');\n    }\n  }\n  if (exponent == 0) {\n    result_builder->AddCharacter('0');\n    return;\n  }\n  ASSERT(exponent < 1e4);\n  const int kMaxExponentLength = 5;\n  char buffer[kMaxExponentLength + 1];\n  buffer[kMaxExponentLength] = '\\0';\n  int first_char_pos = kMaxExponentLength;\n  while (exponent > 0) {\n    buffer[--first_char_pos] = '0' + (exponent % 10);\n    exponent /= 10;\n  }\n  result_builder->AddSubstring(&buffer[first_char_pos],\n                               kMaxExponentLength - first_char_pos);\n}\n\n\nvoid DoubleToStringConverter::CreateDecimalRepresentation(\n    const char* decimal_digits,\n    int length,\n    int decimal_point,\n    int digits_after_point,\n    StringBuilder* result_builder) const {\n  // Create a representation that is padded with zeros if needed.\n  if (decimal_point <= 0) {\n      // \"0.00000decimal_rep\".\n    result_builder->AddCharacter('0');\n    if (digits_after_point > 0) {\n      result_builder->AddCharacter('.');\n      result_builder->AddPadding('0', -decimal_point);\n      ASSERT(length <= digits_after_point - (-decimal_point));\n      result_builder->AddSubstring(decimal_digits, length);\n      int remaining_digits = digits_after_point - (-decimal_point) - length;\n      result_builder->AddPadding('0', remaining_digits);\n    }\n  } else if (decimal_point >= length) {\n    // \"decimal_rep0000.00000\" or \"decimal_rep.0000\"\n    result_builder->AddSubstring(decimal_digits, length);\n    result_builder->AddPadding('0', decimal_point - length);\n    if (digits_after_point > 0) {\n      result_builder->AddCharacter('.');\n      result_builder->AddPadding('0', digits_after_point);\n    }\n  } else {\n    // \"decima.l_rep000\"\n    ASSERT(digits_after_point > 0);\n    result_builder->AddSubstring(decimal_digits, decimal_point);\n    result_builder->AddCharacter('.');\n    ASSERT(length - decimal_point <= digits_after_point);\n    result_builder->AddSubstring(&decimal_digits[decimal_point],\n                                 length - decimal_point);\n    int remaining_digits = digits_after_point - (length - decimal_point);\n    result_builder->AddPadding('0', remaining_digits);\n  }\n  if (digits_after_point == 0) {\n    if ((flags_ & EMIT_TRAILING_DECIMAL_POINT) != 0) {\n      result_builder->AddCharacter('.');\n    }\n    if ((flags_ & EMIT_TRAILING_ZERO_AFTER_POINT) != 0) {\n      result_builder->AddCharacter('0');\n    }\n  }\n}\n\n\nbool DoubleToStringConverter::ToShortestIeeeNumber(\n    double value,\n    StringBuilder* result_builder,\n    DoubleToStringConverter::DtoaMode mode) const {\n  ASSERT(mode == SHORTEST || mode == SHORTEST_SINGLE);\n  if (Double(value).IsSpecial()) {\n    return HandleSpecialValues(value, result_builder);\n  }\n\n  int decimal_point;\n  bool sign;\n  const int kDecimalRepCapacity = kBase10MaximalLength + 1;\n  char decimal_rep[kDecimalRepCapacity];\n  int decimal_rep_length;\n\n  DoubleToAscii(value, mode, 0, decimal_rep, kDecimalRepCapacity,\n                &sign, &decimal_rep_length, &decimal_point);\n\n  bool unique_zero = (flags_ & UNIQUE_ZERO) != 0;\n  if (sign && (value != 0.0 || !unique_zero)) {\n    result_builder->AddCharacter('-');\n  }\n\n  int exponent = decimal_point - 1;\n  if ((decimal_in_shortest_low_ <= exponent) &&\n      (exponent < decimal_in_shortest_high_)) {\n    CreateDecimalRepresentation(decimal_rep, decimal_rep_length,\n                                decimal_point,\n                                Max(0, decimal_rep_length - decimal_point),\n                                result_builder);\n  } else {\n    CreateExponentialRepresentation(decimal_rep, decimal_rep_length, exponent,\n                                    result_builder);\n  }\n  return true;\n}\n\n\nbool DoubleToStringConverter::ToFixed(double value,\n                                      int requested_digits,\n                                      StringBuilder* result_builder) const {\n  ASSERT(kMaxFixedDigitsBeforePoint == 60);\n  const double kFirstNonFixed = 1e60;\n\n  if (Double(value).IsSpecial()) {\n    return HandleSpecialValues(value, result_builder);\n  }\n\n  if (requested_digits > kMaxFixedDigitsAfterPoint) return false;\n  if (value >= kFirstNonFixed || value <= -kFirstNonFixed) return false;\n\n  // Find a sufficiently precise decimal representation of n.\n  int decimal_point;\n  bool sign;\n  // Add space for the '\\0' byte.\n  const int kDecimalRepCapacity =\n      kMaxFixedDigitsBeforePoint + kMaxFixedDigitsAfterPoint + 1;\n  char decimal_rep[kDecimalRepCapacity];\n  int decimal_rep_length;\n  DoubleToAscii(value, FIXED, requested_digits,\n                decimal_rep, kDecimalRepCapacity,\n                &sign, &decimal_rep_length, &decimal_point);\n\n  bool unique_zero = ((flags_ & UNIQUE_ZERO) != 0);\n  if (sign && (value != 0.0 || !unique_zero)) {\n    result_builder->AddCharacter('-');\n  }\n\n  CreateDecimalRepresentation(decimal_rep, decimal_rep_length, decimal_point,\n                              requested_digits, result_builder);\n  return true;\n}\n\n\nbool DoubleToStringConverter::ToExponential(\n    double value,\n    int requested_digits,\n    StringBuilder* result_builder) const {\n  if (Double(value).IsSpecial()) {\n    return HandleSpecialValues(value, result_builder);\n  }\n\n  if (requested_digits < -1) return false;\n  if (requested_digits > kMaxExponentialDigits) return false;\n\n  int decimal_point;\n  bool sign;\n  // Add space for digit before the decimal point and the '\\0' character.\n  const int kDecimalRepCapacity = kMaxExponentialDigits + 2;\n  ASSERT(kDecimalRepCapacity > kBase10MaximalLength);\n  char decimal_rep[kDecimalRepCapacity];\n  int decimal_rep_length;\n\n  if (requested_digits == -1) {\n    DoubleToAscii(value, SHORTEST, 0,\n                  decimal_rep, kDecimalRepCapacity,\n                  &sign, &decimal_rep_length, &decimal_point);\n  } else {\n    DoubleToAscii(value, PRECISION, requested_digits + 1,\n                  decimal_rep, kDecimalRepCapacity,\n                  &sign, &decimal_rep_length, &decimal_point);\n    ASSERT(decimal_rep_length <= requested_digits + 1);\n\n    for (int i = decimal_rep_length; i < requested_digits + 1; ++i) {\n      decimal_rep[i] = '0';\n    }\n    decimal_rep_length = requested_digits + 1;\n  }\n\n  bool unique_zero = ((flags_ & UNIQUE_ZERO) != 0);\n  if (sign && (value != 0.0 || !unique_zero)) {\n    result_builder->AddCharacter('-');\n  }\n\n  int exponent = decimal_point - 1;\n  CreateExponentialRepresentation(decimal_rep,\n                                  decimal_rep_length,\n                                  exponent,\n                                  result_builder);\n  return true;\n}\n\n\nbool DoubleToStringConverter::ToPrecision(double value,\n                                          int precision,\n                                          StringBuilder* result_builder) const {\n  if (Double(value).IsSpecial()) {\n    return HandleSpecialValues(value, result_builder);\n  }\n\n  if (precision < kMinPrecisionDigits || precision > kMaxPrecisionDigits) {\n    return false;\n  }\n\n  // Find a sufficiently precise decimal representation of n.\n  int decimal_point;\n  bool sign;\n  // Add one for the terminating null character.\n  const int kDecimalRepCapacity = kMaxPrecisionDigits + 1;\n  char decimal_rep[kDecimalRepCapacity];\n  int decimal_rep_length;\n\n  DoubleToAscii(value, PRECISION, precision,\n                decimal_rep, kDecimalRepCapacity,\n                &sign, &decimal_rep_length, &decimal_point);\n  ASSERT(decimal_rep_length <= precision);\n\n  bool unique_zero = ((flags_ & UNIQUE_ZERO) != 0);\n  if (sign && (value != 0.0 || !unique_zero)) {\n    result_builder->AddCharacter('-');\n  }\n\n  // The exponent if we print the number as x.xxeyyy. That is with the\n  // decimal point after the first digit.\n  int exponent = decimal_point - 1;\n\n  int extra_zero = ((flags_ & EMIT_TRAILING_ZERO_AFTER_POINT) != 0) ? 1 : 0;\n  if ((-decimal_point + 1 > max_leading_padding_zeroes_in_precision_mode_) ||\n      (decimal_point - precision + extra_zero >\n       max_trailing_padding_zeroes_in_precision_mode_)) {\n    // Fill buffer to contain 'precision' digits.\n    // Usually the buffer is already at the correct length, but 'DoubleToAscii'\n    // is allowed to return less characters.\n    for (int i = decimal_rep_length; i < precision; ++i) {\n      decimal_rep[i] = '0';\n    }\n\n    CreateExponentialRepresentation(decimal_rep,\n                                    precision,\n                                    exponent,\n                                    result_builder);\n  } else {\n    CreateDecimalRepresentation(decimal_rep, decimal_rep_length, decimal_point,\n                                Max(0, precision - decimal_point),\n                                result_builder);\n  }\n  return true;\n}\n\n\nstatic BignumDtoaMode DtoaToBignumDtoaMode(\n    DoubleToStringConverter::DtoaMode dtoa_mode) {\n  switch (dtoa_mode) {\n    case DoubleToStringConverter::SHORTEST:  return BIGNUM_DTOA_SHORTEST;\n    case DoubleToStringConverter::SHORTEST_SINGLE:\n        return BIGNUM_DTOA_SHORTEST_SINGLE;\n    case DoubleToStringConverter::FIXED:     return BIGNUM_DTOA_FIXED;\n    case DoubleToStringConverter::PRECISION: return BIGNUM_DTOA_PRECISION;\n    default:\n      UNREACHABLE();\n  }\n}\n\n\nvoid DoubleToStringConverter::DoubleToAscii(double v,\n                                            DtoaMode mode,\n                                            int requested_digits,\n                                            char* buffer,\n                                            int buffer_length,\n                                            bool* sign,\n                                            int* length,\n                                            int* point) {\n  Vector<char> vector(buffer, buffer_length);\n  ASSERT(!Double(v).IsSpecial());\n  ASSERT(mode == SHORTEST || mode == SHORTEST_SINGLE || requested_digits >= 0);\n\n  if (Double(v).Sign() < 0) {\n    *sign = true;\n    v = -v;\n  } else {\n    *sign = false;\n  }\n\n  if (mode == PRECISION && requested_digits == 0) {\n    vector[0] = '\\0';\n    *length = 0;\n    return;\n  }\n\n  if (v == 0) {\n    vector[0] = '0';\n    vector[1] = '\\0';\n    *length = 1;\n    *point = 1;\n    return;\n  }\n\n  bool fast_worked;\n  switch (mode) {\n    case SHORTEST:\n      fast_worked = FastDtoa(v, FAST_DTOA_SHORTEST, 0, vector, length, point);\n      break;\n    case SHORTEST_SINGLE:\n      fast_worked = FastDtoa(v, FAST_DTOA_SHORTEST_SINGLE, 0,\n                             vector, length, point);\n      break;\n    case FIXED:\n      fast_worked = FastFixedDtoa(v, requested_digits, vector, length, point);\n      break;\n    case PRECISION:\n      fast_worked = FastDtoa(v, FAST_DTOA_PRECISION, requested_digits,\n                             vector, length, point);\n      break;\n    default:\n      fast_worked = false;\n      UNREACHABLE();\n  }\n  if (fast_worked) return;\n\n  // If the fast dtoa didn't succeed use the slower bignum version.\n  BignumDtoaMode bignum_mode = DtoaToBignumDtoaMode(mode);\n  BignumDtoa(v, bignum_mode, requested_digits, vector, length, point);\n  vector[*length] = '\\0';\n}\n\n\n// Consumes the given substring from the iterator.\n// Returns false, if the substring does not match.\nstatic bool ConsumeSubString(const char** current,\n                             const char* end,\n                             const char* substring) {\n  ASSERT(**current == *substring);\n  for (substring++; *substring != '\\0'; substring++) {\n    ++*current;\n    if (*current == end || **current != *substring) return false;\n  }\n  ++*current;\n  return true;\n}\n\n\n// Maximum number of significant digits in decimal representation.\n// The longest possible double in decimal representation is\n// (2^53 - 1) * 2 ^ -1074 that is (2 ^ 53 - 1) * 5 ^ 1074 / 10 ^ 1074\n// (768 digits). If we parse a number whose first digits are equal to a\n// mean of 2 adjacent doubles (that could have up to 769 digits) the result\n// must be rounded to the bigger one unless the tail consists of zeros, so\n// we don't need to preserve all the digits.\nconst int kMaxSignificantDigits = 772;\n\n\n// Returns true if a nonspace found and false if the end has reached.\nstatic inline bool AdvanceToNonspace(const char** current, const char* end) {\n  while (*current != end) {\n    if (**current != ' ') return true;\n    ++*current;\n  }\n  return false;\n}\n\n\nstatic bool isDigit(int x, int radix) {\n  return (x >= '0' && x <= '9' && x < '0' + radix)\n      || (radix > 10 && x >= 'a' && x < 'a' + radix - 10)\n      || (radix > 10 && x >= 'A' && x < 'A' + radix - 10);\n}\n\n\nstatic double SignedZero(bool sign) {\n  return sign ? -0.0 : 0.0;\n}\n\n\n// Returns true if 'c' is a decimal digit that is valid for the given radix.\n//\n// The function is small and could be inlined, but VS2012 emitted a warning\n// because it constant-propagated the radix and concluded that the last\n// condition was always true. By moving it into a separate function the\n// compiler wouldn't warn anymore.\nstatic bool IsDecimalDigitForRadix(int c, int radix) {\n  return '0' <= c && c <= '9' && (c - '0') < radix;\n}\n\n// Returns true if 'c' is a character digit that is valid for the given radix.\n// The 'a_character' should be 'a' or 'A'.\n//\n// The function is small and could be inlined, but VS2012 emitted a warning\n// because it constant-propagated the radix and concluded that the first\n// condition was always false. By moving it into a separate function the\n// compiler wouldn't warn anymore.\nstatic bool IsCharacterDigitForRadix(int c, int radix, char a_character) {\n  return radix > 10 && c >= a_character && c < a_character + radix - 10;\n}\n\n\n// Parsing integers with radix 2, 4, 8, 16, 32. Assumes current != end.\ntemplate <int radix_log_2>\nstatic double RadixStringToIeee(const char* current,\n                                const char* end,\n                                bool sign,\n                                bool allow_trailing_junk,\n                                double junk_string_value,\n                                bool read_as_double,\n                                const char** trailing_pointer) {\n  ASSERT(current != end);\n\n  const int kDoubleSize = Double::kSignificandSize;\n  const int kSingleSize = Single::kSignificandSize;\n  const int kSignificandSize = read_as_double? kDoubleSize: kSingleSize;\n\n  // Skip leading 0s.\n  while (*current == '0') {\n    ++current;\n    if (current == end) {\n      *trailing_pointer = end;\n      return SignedZero(sign);\n    }\n  }\n\n  int64_t number = 0;\n  int exponent = 0;\n  const int radix = (1 << radix_log_2);\n\n  do {\n    int digit;\n    if (IsDecimalDigitForRadix(*current, radix)) {\n      digit = static_cast<char>(*current) - '0';\n    } else if (IsCharacterDigitForRadix(*current, radix, 'a')) {\n      digit = static_cast<char>(*current) - 'a' + 10;\n    } else if (IsCharacterDigitForRadix(*current, radix, 'A')) {\n      digit = static_cast<char>(*current) - 'A' + 10;\n    } else {\n      if (allow_trailing_junk || !AdvanceToNonspace(&current, end)) {\n        break;\n      } else {\n        return junk_string_value;\n      }\n    }\n\n    number = number * radix + digit;\n    int overflow = static_cast<int>(number >> kSignificandSize);\n    if (overflow != 0) {\n      // Overflow occurred. Need to determine which direction to round the\n      // result.\n      int overflow_bits_count = 1;\n      while (overflow > 1) {\n        overflow_bits_count++;\n        overflow >>= 1;\n      }\n\n      int dropped_bits_mask = ((1 << overflow_bits_count) - 1);\n      int dropped_bits = static_cast<int>(number) & dropped_bits_mask;\n      number >>= overflow_bits_count;\n      exponent = overflow_bits_count;\n\n      bool zero_tail = true;\n      for (;;) {\n        ++current;\n        if (current == end || !isDigit(*current, radix)) break;\n        zero_tail = zero_tail && *current == '0';\n        exponent += radix_log_2;\n      }\n\n      if (!allow_trailing_junk && AdvanceToNonspace(&current, end)) {\n        return junk_string_value;\n      }\n\n      int middle_value = (1 << (overflow_bits_count - 1));\n      if (dropped_bits > middle_value) {\n        number++;  // Rounding up.\n      } else if (dropped_bits == middle_value) {\n        // Rounding to even to consistency with decimals: half-way case rounds\n        // up if significant part is odd and down otherwise.\n        if ((number & 1) != 0 || !zero_tail) {\n          number++;  // Rounding up.\n        }\n      }\n\n      // Rounding up may cause overflow.\n      if ((number & ((int64_t)1 << kSignificandSize)) != 0) {\n        exponent++;\n        number >>= 1;\n      }\n      break;\n    }\n    ++current;\n  } while (current != end);\n\n  ASSERT(number < ((int64_t)1 << kSignificandSize));\n  ASSERT(static_cast<int64_t>(static_cast<double>(number)) == number);\n\n  *trailing_pointer = current;\n\n  if (exponent == 0) {\n    if (sign) {\n      if (number == 0) return -0.0;\n      number = -number;\n    }\n    return static_cast<double>(number);\n  }\n\n  ASSERT(number != 0);\n  return Double(DiyFp(number, exponent)).value();\n}\n\n\ndouble StringToDoubleConverter::StringToIeee(\n    const char* input,\n    int length,\n    int* processed_characters_count,\n    bool read_as_double) const {\n  const char* current = input;\n  const char* end = input + length;\n\n  *processed_characters_count = 0;\n\n  const bool allow_trailing_junk = (flags_ & ALLOW_TRAILING_JUNK) != 0;\n  const bool allow_leading_spaces = (flags_ & ALLOW_LEADING_SPACES) != 0;\n  const bool allow_trailing_spaces = (flags_ & ALLOW_TRAILING_SPACES) != 0;\n  const bool allow_spaces_after_sign = (flags_ & ALLOW_SPACES_AFTER_SIGN) != 0;\n\n  // To make sure that iterator dereferencing is valid the following\n  // convention is used:\n  // 1. Each '++current' statement is followed by check for equality to 'end'.\n  // 2. If AdvanceToNonspace returned false then current == end.\n  // 3. If 'current' becomes equal to 'end' the function returns or goes to\n  // 'parsing_done'.\n  // 4. 'current' is not dereferenced after the 'parsing_done' label.\n  // 5. Code before 'parsing_done' may rely on 'current != end'.\n  if (current == end) return empty_string_value_;\n\n  if (allow_leading_spaces || allow_trailing_spaces) {\n    if (!AdvanceToNonspace(&current, end)) {\n      *processed_characters_count = static_cast<int>(current - input);\n      return empty_string_value_;\n    }\n    if (!allow_leading_spaces && (input != current)) {\n      // No leading spaces allowed, but AdvanceToNonspace moved forward.\n      return junk_string_value_;\n    }\n  }\n\n  // The longest form of simplified number is: \"-<significant digits>.1eXXX\\0\".\n  const int kBufferSize = kMaxSignificantDigits + 10;\n  char buffer[kBufferSize];  // NOLINT: size is known at compile time.\n  int buffer_pos = 0;\n\n  // Exponent will be adjusted if insignificant digits of the integer part\n  // or insignificant leading zeros of the fractional part are dropped.\n  int exponent = 0;\n  int significant_digits = 0;\n  int insignificant_digits = 0;\n  bool nonzero_digit_dropped = false;\n\n  bool sign = false;\n\n  if (*current == '+' || *current == '-') {\n    sign = (*current == '-');\n    ++current;\n    const char* next_non_space = current;\n    // Skip following spaces (if allowed).\n    if (!AdvanceToNonspace(&next_non_space, end)) return junk_string_value_;\n    if (!allow_spaces_after_sign && (current != next_non_space)) {\n      return junk_string_value_;\n    }\n    current = next_non_space;\n  }\n\n  if (infinity_symbol_ != NULL) {\n    if (*current == infinity_symbol_[0]) {\n      if (!ConsumeSubString(&current, end, infinity_symbol_)) {\n        return junk_string_value_;\n      }\n\n      if (!(allow_trailing_spaces || allow_trailing_junk) && (current != end)) {\n        return junk_string_value_;\n      }\n      if (!allow_trailing_junk && AdvanceToNonspace(&current, end)) {\n        return junk_string_value_;\n      }\n\n      ASSERT(buffer_pos == 0);\n      *processed_characters_count = static_cast<int>(current - input);\n      return sign ? -Double::Infinity() : Double::Infinity();\n    }\n  }\n\n  if (nan_symbol_ != NULL) {\n    if (*current == nan_symbol_[0]) {\n      if (!ConsumeSubString(&current, end, nan_symbol_)) {\n        return junk_string_value_;\n      }\n\n      if (!(allow_trailing_spaces || allow_trailing_junk) && (current != end)) {\n        return junk_string_value_;\n      }\n      if (!allow_trailing_junk && AdvanceToNonspace(&current, end)) {\n        return junk_string_value_;\n      }\n\n      ASSERT(buffer_pos == 0);\n      *processed_characters_count = static_cast<int>(current - input);\n      return sign ? -Double::NaN() : Double::NaN();\n    }\n  }\n\n  bool leading_zero = false;\n  if (*current == '0') {\n    ++current;\n    if (current == end) {\n      *processed_characters_count = static_cast<int>(current - input);\n      return SignedZero(sign);\n    }\n\n    leading_zero = true;\n\n    // It could be hexadecimal value.\n    if ((flags_ & ALLOW_HEX) && (*current == 'x' || *current == 'X')) {\n      ++current;\n      if (current == end || !isDigit(*current, 16)) {\n        return junk_string_value_;  // \"0x\".\n      }\n\n      const char* tail_pointer = NULL;\n      double result = RadixStringToIeee<4>(current,\n                                           end,\n                                           sign,\n                                           allow_trailing_junk,\n                                           junk_string_value_,\n                                           read_as_double,\n                                           &tail_pointer);\n      if (tail_pointer != NULL) {\n        if (allow_trailing_spaces) AdvanceToNonspace(&tail_pointer, end);\n        *processed_characters_count = static_cast<int>(tail_pointer - input);\n      }\n      return result;\n    }\n\n    // Ignore leading zeros in the integer part.\n    while (*current == '0') {\n      ++current;\n      if (current == end) {\n        *processed_characters_count = static_cast<int>(current - input);\n        return SignedZero(sign);\n      }\n    }\n  }\n\n  bool octal = leading_zero && (flags_ & ALLOW_OCTALS) != 0;\n\n  // Copy significant digits of the integer part (if any) to the buffer.\n  while (*current >= '0' && *current <= '9') {\n    if (significant_digits < kMaxSignificantDigits) {\n      ASSERT(buffer_pos < kBufferSize);\n      buffer[buffer_pos++] = static_cast<char>(*current);\n      significant_digits++;\n      // Will later check if it's an octal in the buffer.\n    } else {\n      insignificant_digits++;  // Move the digit into the exponential part.\n      nonzero_digit_dropped = nonzero_digit_dropped || *current != '0';\n    }\n    octal = octal && *current < '8';\n    ++current;\n    if (current == end) goto parsing_done;\n  }\n\n  if (significant_digits == 0) {\n    octal = false;\n  }\n\n  if (*current == '.') {\n    if (octal && !allow_trailing_junk) return junk_string_value_;\n    if (octal) goto parsing_done;\n\n    ++current;\n    if (current == end) {\n      if (significant_digits == 0 && !leading_zero) {\n        return junk_string_value_;\n      } else {\n        goto parsing_done;\n      }\n    }\n\n    if (significant_digits == 0) {\n      // octal = false;\n      // Integer part consists of 0 or is absent. Significant digits start after\n      // leading zeros (if any).\n      while (*current == '0') {\n        ++current;\n        if (current == end) {\n          *processed_characters_count = static_cast<int>(current - input);\n          return SignedZero(sign);\n        }\n        exponent--;  // Move this 0 into the exponent.\n      }\n    }\n\n    // There is a fractional part.\n    // We don't emit a '.', but adjust the exponent instead.\n    while (*current >= '0' && *current <= '9') {\n      if (significant_digits < kMaxSignificantDigits) {\n        ASSERT(buffer_pos < kBufferSize);\n        buffer[buffer_pos++] = static_cast<char>(*current);\n        significant_digits++;\n        exponent--;\n      } else {\n        // Ignore insignificant digits in the fractional part.\n        nonzero_digit_dropped = nonzero_digit_dropped || *current != '0';\n      }\n      ++current;\n      if (current == end) goto parsing_done;\n    }\n  }\n\n  if (!leading_zero && exponent == 0 && significant_digits == 0) {\n    // If leading_zeros is true then the string contains zeros.\n    // If exponent < 0 then string was [+-]\\.0*...\n    // If significant_digits != 0 the string is not equal to 0.\n    // Otherwise there are no digits in the string.\n    return junk_string_value_;\n  }\n\n  // Parse exponential part.\n  if (*current == 'e' || *current == 'E') {\n    if (octal && !allow_trailing_junk) return junk_string_value_;\n    if (octal) goto parsing_done;\n    ++current;\n    if (current == end) {\n      if (allow_trailing_junk) {\n        goto parsing_done;\n      } else {\n        return junk_string_value_;\n      }\n    }\n    char sign = '+';\n    if (*current == '+' || *current == '-') {\n      sign = static_cast<char>(*current);\n      ++current;\n      if (current == end) {\n        if (allow_trailing_junk) {\n          goto parsing_done;\n        } else {\n          return junk_string_value_;\n        }\n      }\n    }\n\n    if (current == end || *current < '0' || *current > '9') {\n      if (allow_trailing_junk) {\n        goto parsing_done;\n      } else {\n        return junk_string_value_;\n      }\n    }\n\n    const int max_exponent = INT_MAX / 2;\n    ASSERT(-max_exponent / 2 <= exponent && exponent <= max_exponent / 2);\n    int num = 0;\n    do {\n      // Check overflow.\n      int digit = *current - '0';\n      if (num >= max_exponent / 10\n          && !(num == max_exponent / 10 && digit <= max_exponent % 10)) {\n        num = max_exponent;\n      } else {\n        num = num * 10 + digit;\n      }\n      ++current;\n    } while (current != end && *current >= '0' && *current <= '9');\n\n    exponent += (sign == '-' ? -num : num);\n  }\n\n  if (!(allow_trailing_spaces || allow_trailing_junk) && (current != end)) {\n    return junk_string_value_;\n  }\n  if (!allow_trailing_junk && AdvanceToNonspace(&current, end)) {\n    return junk_string_value_;\n  }\n  if (allow_trailing_spaces) {\n    AdvanceToNonspace(&current, end);\n  }\n\n  parsing_done:\n  exponent += insignificant_digits;\n\n  if (octal) {\n    double result;\n    const char* tail_pointer = NULL;\n    result = RadixStringToIeee<3>(buffer,\n                                  buffer + buffer_pos,\n                                  sign,\n                                  allow_trailing_junk,\n                                  junk_string_value_,\n                                  read_as_double,\n                                  &tail_pointer);\n    ASSERT(tail_pointer != NULL);\n    *processed_characters_count = static_cast<int>(current - input);\n    return result;\n  }\n\n  if (nonzero_digit_dropped) {\n    buffer[buffer_pos++] = '1';\n    exponent--;\n  }\n\n  ASSERT(buffer_pos < kBufferSize);\n  buffer[buffer_pos] = '\\0';\n\n  double converted;\n  if (read_as_double) {\n    converted = Strtod(Vector<const char>(buffer, buffer_pos), exponent);\n  } else {\n    converted = Strtof(Vector<const char>(buffer, buffer_pos), exponent);\n  }\n  *processed_characters_count = static_cast<int>(current - input);\n  return sign? -converted: converted;\n}\n\n}  // namespace double_conversion\n"
  },
  {
    "path": "native/iosTest/Pods/DoubleConversion/double-conversion/double-conversion.h",
    "content": "// Copyright 2012 the V8 project authors. All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n//       notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n//       copyright notice, this list of conditions and the following\n//       disclaimer in the documentation and/or other materials provided\n//       with the distribution.\n//     * Neither the name of Google Inc. nor the names of its\n//       contributors may be used to endorse or promote products derived\n//       from this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n#ifndef DOUBLE_CONVERSION_DOUBLE_CONVERSION_H_\n#define DOUBLE_CONVERSION_DOUBLE_CONVERSION_H_\n\n#include \"utils.h\"\n\nnamespace double_conversion {\n\nclass DoubleToStringConverter {\n public:\n  // When calling ToFixed with a double > 10^kMaxFixedDigitsBeforePoint\n  // or a requested_digits parameter > kMaxFixedDigitsAfterPoint then the\n  // function returns false.\n  static const int kMaxFixedDigitsBeforePoint = 60;\n  static const int kMaxFixedDigitsAfterPoint = 60;\n\n  // When calling ToExponential with a requested_digits\n  // parameter > kMaxExponentialDigits then the function returns false.\n  static const int kMaxExponentialDigits = 120;\n\n  // When calling ToPrecision with a requested_digits\n  // parameter < kMinPrecisionDigits or requested_digits > kMaxPrecisionDigits\n  // then the function returns false.\n  static const int kMinPrecisionDigits = 1;\n  static const int kMaxPrecisionDigits = 120;\n\n  enum Flags {\n    NO_FLAGS = 0,\n    EMIT_POSITIVE_EXPONENT_SIGN = 1,\n    EMIT_TRAILING_DECIMAL_POINT = 2,\n    EMIT_TRAILING_ZERO_AFTER_POINT = 4,\n    UNIQUE_ZERO = 8\n  };\n\n  // Flags should be a bit-or combination of the possible Flags-enum.\n  //  - NO_FLAGS: no special flags.\n  //  - EMIT_POSITIVE_EXPONENT_SIGN: when the number is converted into exponent\n  //    form, emits a '+' for positive exponents. Example: 1.2e+2.\n  //  - EMIT_TRAILING_DECIMAL_POINT: when the input number is an integer and is\n  //    converted into decimal format then a trailing decimal point is appended.\n  //    Example: 2345.0 is converted to \"2345.\".\n  //  - EMIT_TRAILING_ZERO_AFTER_POINT: in addition to a trailing decimal point\n  //    emits a trailing '0'-character. This flag requires the\n  //    EXMIT_TRAILING_DECIMAL_POINT flag.\n  //    Example: 2345.0 is converted to \"2345.0\".\n  //  - UNIQUE_ZERO: \"-0.0\" is converted to \"0.0\".\n  //\n  // Infinity symbol and nan_symbol provide the string representation for these\n  // special values. If the string is NULL and the special value is encountered\n  // then the conversion functions return false.\n  //\n  // The exponent_character is used in exponential representations. It is\n  // usually 'e' or 'E'.\n  //\n  // When converting to the shortest representation the converter will\n  // represent input numbers in decimal format if they are in the interval\n  // [10^decimal_in_shortest_low; 10^decimal_in_shortest_high[\n  //    (lower boundary included, greater boundary excluded).\n  // Example: with decimal_in_shortest_low = -6 and\n  //               decimal_in_shortest_high = 21:\n  //   ToShortest(0.000001)  -> \"0.000001\"\n  //   ToShortest(0.0000001) -> \"1e-7\"\n  //   ToShortest(111111111111111111111.0)  -> \"111111111111111110000\"\n  //   ToShortest(100000000000000000000.0)  -> \"100000000000000000000\"\n  //   ToShortest(1111111111111111111111.0) -> \"1.1111111111111111e+21\"\n  //\n  // When converting to precision mode the converter may add\n  // max_leading_padding_zeroes before returning the number in exponential\n  // format.\n  // Example with max_leading_padding_zeroes_in_precision_mode = 6.\n  //   ToPrecision(0.0000012345, 2) -> \"0.0000012\"\n  //   ToPrecision(0.00000012345, 2) -> \"1.2e-7\"\n  // Similarily the converter may add up to\n  // max_trailing_padding_zeroes_in_precision_mode in precision mode to avoid\n  // returning an exponential representation. A zero added by the\n  // EMIT_TRAILING_ZERO_AFTER_POINT flag is counted for this limit.\n  // Examples for max_trailing_padding_zeroes_in_precision_mode = 1:\n  //   ToPrecision(230.0, 2) -> \"230\"\n  //   ToPrecision(230.0, 2) -> \"230.\"  with EMIT_TRAILING_DECIMAL_POINT.\n  //   ToPrecision(230.0, 2) -> \"2.3e2\" with EMIT_TRAILING_ZERO_AFTER_POINT.\n  DoubleToStringConverter(int flags,\n                          const char* infinity_symbol,\n                          const char* nan_symbol,\n                          char exponent_character,\n                          int decimal_in_shortest_low,\n                          int decimal_in_shortest_high,\n                          int max_leading_padding_zeroes_in_precision_mode,\n                          int max_trailing_padding_zeroes_in_precision_mode)\n      : flags_(flags),\n        infinity_symbol_(infinity_symbol),\n        nan_symbol_(nan_symbol),\n        exponent_character_(exponent_character),\n        decimal_in_shortest_low_(decimal_in_shortest_low),\n        decimal_in_shortest_high_(decimal_in_shortest_high),\n        max_leading_padding_zeroes_in_precision_mode_(\n            max_leading_padding_zeroes_in_precision_mode),\n        max_trailing_padding_zeroes_in_precision_mode_(\n            max_trailing_padding_zeroes_in_precision_mode) {\n    // When 'trailing zero after the point' is set, then 'trailing point'\n    // must be set too.\n    ASSERT(((flags & EMIT_TRAILING_DECIMAL_POINT) != 0) ||\n        !((flags & EMIT_TRAILING_ZERO_AFTER_POINT) != 0));\n  }\n\n  // Returns a converter following the EcmaScript specification.\n  static const DoubleToStringConverter& EcmaScriptConverter();\n\n  // Computes the shortest string of digits that correctly represent the input\n  // number. Depending on decimal_in_shortest_low and decimal_in_shortest_high\n  // (see constructor) it then either returns a decimal representation, or an\n  // exponential representation.\n  // Example with decimal_in_shortest_low = -6,\n  //              decimal_in_shortest_high = 21,\n  //              EMIT_POSITIVE_EXPONENT_SIGN activated, and\n  //              EMIT_TRAILING_DECIMAL_POINT deactived:\n  //   ToShortest(0.000001)  -> \"0.000001\"\n  //   ToShortest(0.0000001) -> \"1e-7\"\n  //   ToShortest(111111111111111111111.0)  -> \"111111111111111110000\"\n  //   ToShortest(100000000000000000000.0)  -> \"100000000000000000000\"\n  //   ToShortest(1111111111111111111111.0) -> \"1.1111111111111111e+21\"\n  //\n  // Note: the conversion may round the output if the returned string\n  // is accurate enough to uniquely identify the input-number.\n  // For example the most precise representation of the double 9e59 equals\n  // \"899999999999999918767229449717619953810131273674690656206848\", but\n  // the converter will return the shorter (but still correct) \"9e59\".\n  //\n  // Returns true if the conversion succeeds. The conversion always succeeds\n  // except when the input value is special and no infinity_symbol or\n  // nan_symbol has been given to the constructor.\n  bool ToShortest(double value, StringBuilder* result_builder) const {\n    return ToShortestIeeeNumber(value, result_builder, SHORTEST);\n  }\n\n  // Same as ToShortest, but for single-precision floats.\n  bool ToShortestSingle(float value, StringBuilder* result_builder) const {\n    return ToShortestIeeeNumber(value, result_builder, SHORTEST_SINGLE);\n  }\n\n\n  // Computes a decimal representation with a fixed number of digits after the\n  // decimal point. The last emitted digit is rounded.\n  //\n  // Examples:\n  //   ToFixed(3.12, 1) -> \"3.1\"\n  //   ToFixed(3.1415, 3) -> \"3.142\"\n  //   ToFixed(1234.56789, 4) -> \"1234.5679\"\n  //   ToFixed(1.23, 5) -> \"1.23000\"\n  //   ToFixed(0.1, 4) -> \"0.1000\"\n  //   ToFixed(1e30, 2) -> \"1000000000000000019884624838656.00\"\n  //   ToFixed(0.1, 30) -> \"0.100000000000000005551115123126\"\n  //   ToFixed(0.1, 17) -> \"0.10000000000000001\"\n  //\n  // If requested_digits equals 0, then the tail of the result depends on\n  // the EMIT_TRAILING_DECIMAL_POINT and EMIT_TRAILING_ZERO_AFTER_POINT.\n  // Examples, for requested_digits == 0,\n  //   let EMIT_TRAILING_DECIMAL_POINT and EMIT_TRAILING_ZERO_AFTER_POINT be\n  //    - false and false: then 123.45 -> 123\n  //                             0.678 -> 1\n  //    - true and false: then 123.45 -> 123.\n  //                            0.678 -> 1.\n  //    - true and true: then 123.45 -> 123.0\n  //                           0.678 -> 1.0\n  //\n  // Returns true if the conversion succeeds. The conversion always succeeds\n  // except for the following cases:\n  //   - the input value is special and no infinity_symbol or nan_symbol has\n  //     been provided to the constructor,\n  //   - 'value' > 10^kMaxFixedDigitsBeforePoint, or\n  //   - 'requested_digits' > kMaxFixedDigitsAfterPoint.\n  // The last two conditions imply that the result will never contain more than\n  // 1 + kMaxFixedDigitsBeforePoint + 1 + kMaxFixedDigitsAfterPoint characters\n  // (one additional character for the sign, and one for the decimal point).\n  bool ToFixed(double value,\n               int requested_digits,\n               StringBuilder* result_builder) const;\n\n  // Computes a representation in exponential format with requested_digits\n  // after the decimal point. The last emitted digit is rounded.\n  // If requested_digits equals -1, then the shortest exponential representation\n  // is computed.\n  //\n  // Examples with EMIT_POSITIVE_EXPONENT_SIGN deactivated, and\n  //               exponent_character set to 'e'.\n  //   ToExponential(3.12, 1) -> \"3.1e0\"\n  //   ToExponential(5.0, 3) -> \"5.000e0\"\n  //   ToExponential(0.001, 2) -> \"1.00e-3\"\n  //   ToExponential(3.1415, -1) -> \"3.1415e0\"\n  //   ToExponential(3.1415, 4) -> \"3.1415e0\"\n  //   ToExponential(3.1415, 3) -> \"3.142e0\"\n  //   ToExponential(123456789000000, 3) -> \"1.235e14\"\n  //   ToExponential(1000000000000000019884624838656.0, -1) -> \"1e30\"\n  //   ToExponential(1000000000000000019884624838656.0, 32) ->\n  //                     \"1.00000000000000001988462483865600e30\"\n  //   ToExponential(1234, 0) -> \"1e3\"\n  //\n  // Returns true if the conversion succeeds. The conversion always succeeds\n  // except for the following cases:\n  //   - the input value is special and no infinity_symbol or nan_symbol has\n  //     been provided to the constructor,\n  //   - 'requested_digits' > kMaxExponentialDigits.\n  // The last condition implies that the result will never contain more than\n  // kMaxExponentialDigits + 8 characters (the sign, the digit before the\n  // decimal point, the decimal point, the exponent character, the\n  // exponent's sign, and at most 3 exponent digits).\n  bool ToExponential(double value,\n                     int requested_digits,\n                     StringBuilder* result_builder) const;\n\n  // Computes 'precision' leading digits of the given 'value' and returns them\n  // either in exponential or decimal format, depending on\n  // max_{leading|trailing}_padding_zeroes_in_precision_mode (given to the\n  // constructor).\n  // The last computed digit is rounded.\n  //\n  // Example with max_leading_padding_zeroes_in_precision_mode = 6.\n  //   ToPrecision(0.0000012345, 2) -> \"0.0000012\"\n  //   ToPrecision(0.00000012345, 2) -> \"1.2e-7\"\n  // Similarily the converter may add up to\n  // max_trailing_padding_zeroes_in_precision_mode in precision mode to avoid\n  // returning an exponential representation. A zero added by the\n  // EMIT_TRAILING_ZERO_AFTER_POINT flag is counted for this limit.\n  // Examples for max_trailing_padding_zeroes_in_precision_mode = 1:\n  //   ToPrecision(230.0, 2) -> \"230\"\n  //   ToPrecision(230.0, 2) -> \"230.\"  with EMIT_TRAILING_DECIMAL_POINT.\n  //   ToPrecision(230.0, 2) -> \"2.3e2\" with EMIT_TRAILING_ZERO_AFTER_POINT.\n  // Examples for max_trailing_padding_zeroes_in_precision_mode = 3, and no\n  //    EMIT_TRAILING_ZERO_AFTER_POINT:\n  //   ToPrecision(123450.0, 6) -> \"123450\"\n  //   ToPrecision(123450.0, 5) -> \"123450\"\n  //   ToPrecision(123450.0, 4) -> \"123500\"\n  //   ToPrecision(123450.0, 3) -> \"123000\"\n  //   ToPrecision(123450.0, 2) -> \"1.2e5\"\n  //\n  // Returns true if the conversion succeeds. The conversion always succeeds\n  // except for the following cases:\n  //   - the input value is special and no infinity_symbol or nan_symbol has\n  //     been provided to the constructor,\n  //   - precision < kMinPericisionDigits\n  //   - precision > kMaxPrecisionDigits\n  // The last condition implies that the result will never contain more than\n  // kMaxPrecisionDigits + 7 characters (the sign, the decimal point, the\n  // exponent character, the exponent's sign, and at most 3 exponent digits).\n  bool ToPrecision(double value,\n                   int precision,\n                   StringBuilder* result_builder) const;\n\n  enum DtoaMode {\n    // Produce the shortest correct representation.\n    // For example the output of 0.299999999999999988897 is (the less accurate\n    // but correct) 0.3.\n    SHORTEST,\n    // Same as SHORTEST, but for single-precision floats.\n    SHORTEST_SINGLE,\n    // Produce a fixed number of digits after the decimal point.\n    // For instance fixed(0.1, 4) becomes 0.1000\n    // If the input number is big, the output will be big.\n    FIXED,\n    // Fixed number of digits (independent of the decimal point).\n    PRECISION\n  };\n\n  // The maximal number of digits that are needed to emit a double in base 10.\n  // A higher precision can be achieved by using more digits, but the shortest\n  // accurate representation of any double will never use more digits than\n  // kBase10MaximalLength.\n  // Note that DoubleToAscii null-terminates its input. So the given buffer\n  // should be at least kBase10MaximalLength + 1 characters long.\n  static const int kBase10MaximalLength = 17;\n\n  // Converts the given double 'v' to ascii. 'v' must not be NaN, +Infinity, or\n  // -Infinity. In SHORTEST_SINGLE-mode this restriction also applies to 'v'\n  // after it has been casted to a single-precision float. That is, in this\n  // mode static_cast<float>(v) must not be NaN, +Infinity or -Infinity.\n  //\n  // The result should be interpreted as buffer * 10^(point-length).\n  //\n  // The output depends on the given mode:\n  //  - SHORTEST: produce the least amount of digits for which the internal\n  //   identity requirement is still satisfied. If the digits are printed\n  //   (together with the correct exponent) then reading this number will give\n  //   'v' again. The buffer will choose the representation that is closest to\n  //   'v'. If there are two at the same distance, than the one farther away\n  //   from 0 is chosen (halfway cases - ending with 5 - are rounded up).\n  //   In this mode the 'requested_digits' parameter is ignored.\n  //  - SHORTEST_SINGLE: same as SHORTEST but with single-precision.\n  //  - FIXED: produces digits necessary to print a given number with\n  //   'requested_digits' digits after the decimal point. The produced digits\n  //   might be too short in which case the caller has to fill the remainder\n  //   with '0's.\n  //   Example: toFixed(0.001, 5) is allowed to return buffer=\"1\", point=-2.\n  //   Halfway cases are rounded towards +/-Infinity (away from 0). The call\n  //   toFixed(0.15, 2) thus returns buffer=\"2\", point=0.\n  //   The returned buffer may contain digits that would be truncated from the\n  //   shortest representation of the input.\n  //  - PRECISION: produces 'requested_digits' where the first digit is not '0'.\n  //   Even though the length of produced digits usually equals\n  //   'requested_digits', the function is allowed to return fewer digits, in\n  //   which case the caller has to fill the missing digits with '0's.\n  //   Halfway cases are again rounded away from 0.\n  // DoubleToAscii expects the given buffer to be big enough to hold all\n  // digits and a terminating null-character. In SHORTEST-mode it expects a\n  // buffer of at least kBase10MaximalLength + 1. In all other modes the\n  // requested_digits parameter and the padding-zeroes limit the size of the\n  // output. Don't forget the decimal point, the exponent character and the\n  // terminating null-character when computing the maximal output size.\n  // The given length is only used in debug mode to ensure the buffer is big\n  // enough.\n  static void DoubleToAscii(double v,\n                            DtoaMode mode,\n                            int requested_digits,\n                            char* buffer,\n                            int buffer_length,\n                            bool* sign,\n                            int* length,\n                            int* point);\n\n private:\n  // Implementation for ToShortest and ToShortestSingle.\n  bool ToShortestIeeeNumber(double value,\n                            StringBuilder* result_builder,\n                            DtoaMode mode) const;\n\n  // If the value is a special value (NaN or Infinity) constructs the\n  // corresponding string using the configured infinity/nan-symbol.\n  // If either of them is NULL or the value is not special then the\n  // function returns false.\n  bool HandleSpecialValues(double value, StringBuilder* result_builder) const;\n  // Constructs an exponential representation (i.e. 1.234e56).\n  // The given exponent assumes a decimal point after the first decimal digit.\n  void CreateExponentialRepresentation(const char* decimal_digits,\n                                       int length,\n                                       int exponent,\n                                       StringBuilder* result_builder) const;\n  // Creates a decimal representation (i.e 1234.5678).\n  void CreateDecimalRepresentation(const char* decimal_digits,\n                                   int length,\n                                   int decimal_point,\n                                   int digits_after_point,\n                                   StringBuilder* result_builder) const;\n\n  const int flags_;\n  const char* const infinity_symbol_;\n  const char* const nan_symbol_;\n  const char exponent_character_;\n  const int decimal_in_shortest_low_;\n  const int decimal_in_shortest_high_;\n  const int max_leading_padding_zeroes_in_precision_mode_;\n  const int max_trailing_padding_zeroes_in_precision_mode_;\n\n  DISALLOW_IMPLICIT_CONSTRUCTORS(DoubleToStringConverter);\n};\n\n\nclass StringToDoubleConverter {\n public:\n  // Enumeration for allowing octals and ignoring junk when converting\n  // strings to numbers.\n  enum Flags {\n    NO_FLAGS = 0,\n    ALLOW_HEX = 1,\n    ALLOW_OCTALS = 2,\n    ALLOW_TRAILING_JUNK = 4,\n    ALLOW_LEADING_SPACES = 8,\n    ALLOW_TRAILING_SPACES = 16,\n    ALLOW_SPACES_AFTER_SIGN = 32\n  };\n\n  // Flags should be a bit-or combination of the possible Flags-enum.\n  //  - NO_FLAGS: no special flags.\n  //  - ALLOW_HEX: recognizes the prefix \"0x\". Hex numbers may only be integers.\n  //      Ex: StringToDouble(\"0x1234\") -> 4660.0\n  //          In StringToDouble(\"0x1234.56\") the characters \".56\" are trailing\n  //          junk. The result of the call is hence dependent on\n  //          the ALLOW_TRAILING_JUNK flag and/or the junk value.\n  //      With this flag \"0x\" is a junk-string. Even with ALLOW_TRAILING_JUNK,\n  //      the string will not be parsed as \"0\" followed by junk.\n  //\n  //  - ALLOW_OCTALS: recognizes the prefix \"0\" for octals:\n  //      If a sequence of octal digits starts with '0', then the number is\n  //      read as octal integer. Octal numbers may only be integers.\n  //      Ex: StringToDouble(\"01234\") -> 668.0\n  //          StringToDouble(\"012349\") -> 12349.0  // Not a sequence of octal\n  //                                               // digits.\n  //          In StringToDouble(\"01234.56\") the characters \".56\" are trailing\n  //          junk. The result of the call is hence dependent on\n  //          the ALLOW_TRAILING_JUNK flag and/or the junk value.\n  //          In StringToDouble(\"01234e56\") the characters \"e56\" are trailing\n  //          junk, too.\n  //  - ALLOW_TRAILING_JUNK: ignore trailing characters that are not part of\n  //      a double literal.\n  //  - ALLOW_LEADING_SPACES: skip over leading spaces.\n  //  - ALLOW_TRAILING_SPACES: ignore trailing spaces.\n  //  - ALLOW_SPACES_AFTER_SIGN: ignore spaces after the sign.\n  //       Ex: StringToDouble(\"-   123.2\") -> -123.2.\n  //           StringToDouble(\"+   123.2\") -> 123.2\n  //\n  // empty_string_value is returned when an empty string is given as input.\n  // If ALLOW_LEADING_SPACES or ALLOW_TRAILING_SPACES are set, then a string\n  // containing only spaces is converted to the 'empty_string_value', too.\n  //\n  // junk_string_value is returned when\n  //  a) ALLOW_TRAILING_JUNK is not set, and a junk character (a character not\n  //     part of a double-literal) is found.\n  //  b) ALLOW_TRAILING_JUNK is set, but the string does not start with a\n  //     double literal.\n  //\n  // infinity_symbol and nan_symbol are strings that are used to detect\n  // inputs that represent infinity and NaN. They can be null, in which case\n  // they are ignored.\n  // The conversion routine first reads any possible signs. Then it compares the\n  // following character of the input-string with the first character of\n  // the infinity, and nan-symbol. If either matches, the function assumes, that\n  // a match has been found, and expects the following input characters to match\n  // the remaining characters of the special-value symbol.\n  // This means that the following restrictions apply to special-value symbols:\n  //  - they must not start with signs ('+', or '-'),\n  //  - they must not have the same first character.\n  //  - they must not start with digits.\n  //\n  // Examples:\n  //  flags = ALLOW_HEX | ALLOW_TRAILING_JUNK,\n  //  empty_string_value = 0.0,\n  //  junk_string_value = NaN,\n  //  infinity_symbol = \"infinity\",\n  //  nan_symbol = \"nan\":\n  //    StringToDouble(\"0x1234\") -> 4660.0.\n  //    StringToDouble(\"0x1234K\") -> 4660.0.\n  //    StringToDouble(\"\") -> 0.0  // empty_string_value.\n  //    StringToDouble(\" \") -> NaN  // junk_string_value.\n  //    StringToDouble(\" 1\") -> NaN  // junk_string_value.\n  //    StringToDouble(\"0x\") -> NaN  // junk_string_value.\n  //    StringToDouble(\"-123.45\") -> -123.45.\n  //    StringToDouble(\"--123.45\") -> NaN  // junk_string_value.\n  //    StringToDouble(\"123e45\") -> 123e45.\n  //    StringToDouble(\"123E45\") -> 123e45.\n  //    StringToDouble(\"123e+45\") -> 123e45.\n  //    StringToDouble(\"123E-45\") -> 123e-45.\n  //    StringToDouble(\"123e\") -> 123.0  // trailing junk ignored.\n  //    StringToDouble(\"123e-\") -> 123.0  // trailing junk ignored.\n  //    StringToDouble(\"+NaN\") -> NaN  // NaN string literal.\n  //    StringToDouble(\"-infinity\") -> -inf.  // infinity literal.\n  //    StringToDouble(\"Infinity\") -> NaN  // junk_string_value.\n  //\n  //  flags = ALLOW_OCTAL | ALLOW_LEADING_SPACES,\n  //  empty_string_value = 0.0,\n  //  junk_string_value = NaN,\n  //  infinity_symbol = NULL,\n  //  nan_symbol = NULL:\n  //    StringToDouble(\"0x1234\") -> NaN  // junk_string_value.\n  //    StringToDouble(\"01234\") -> 668.0.\n  //    StringToDouble(\"\") -> 0.0  // empty_string_value.\n  //    StringToDouble(\" \") -> 0.0  // empty_string_value.\n  //    StringToDouble(\" 1\") -> 1.0\n  //    StringToDouble(\"0x\") -> NaN  // junk_string_value.\n  //    StringToDouble(\"0123e45\") -> NaN  // junk_string_value.\n  //    StringToDouble(\"01239E45\") -> 1239e45.\n  //    StringToDouble(\"-infinity\") -> NaN  // junk_string_value.\n  //    StringToDouble(\"NaN\") -> NaN  // junk_string_value.\n  StringToDoubleConverter(int flags,\n                          double empty_string_value,\n                          double junk_string_value,\n                          const char* infinity_symbol,\n                          const char* nan_symbol)\n      : flags_(flags),\n        empty_string_value_(empty_string_value),\n        junk_string_value_(junk_string_value),\n        infinity_symbol_(infinity_symbol),\n        nan_symbol_(nan_symbol) {\n  }\n\n  // Performs the conversion.\n  // The output parameter 'processed_characters_count' is set to the number\n  // of characters that have been processed to read the number.\n  // Spaces than are processed with ALLOW_{LEADING|TRAILING}_SPACES are included\n  // in the 'processed_characters_count'. Trailing junk is never included.\n  double StringToDouble(const char* buffer,\n                        int length,\n                        int* processed_characters_count) const {\n    return StringToIeee(buffer, length, processed_characters_count, true);\n  }\n\n  // Same as StringToDouble but reads a float.\n  // Note that this is not equivalent to static_cast<float>(StringToDouble(...))\n  // due to potential double-rounding.\n  float StringToFloat(const char* buffer,\n                      int length,\n                      int* processed_characters_count) const {\n    return static_cast<float>(StringToIeee(buffer, length,\n                                           processed_characters_count, false));\n  }\n\n private:\n  const int flags_;\n  const double empty_string_value_;\n  const double junk_string_value_;\n  const char* const infinity_symbol_;\n  const char* const nan_symbol_;\n\n  double StringToIeee(const char* buffer,\n                      int length,\n                      int* processed_characters_count,\n                      bool read_as_double) const;\n\n  DISALLOW_IMPLICIT_CONSTRUCTORS(StringToDoubleConverter);\n};\n\n}  // namespace double_conversion\n\n#endif  // DOUBLE_CONVERSION_DOUBLE_CONVERSION_H_\n"
  },
  {
    "path": "native/iosTest/Pods/DoubleConversion/double-conversion/fast-dtoa.cc",
    "content": "// Copyright 2012 the V8 project authors. All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n//       notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n//       copyright notice, this list of conditions and the following\n//       disclaimer in the documentation and/or other materials provided\n//       with the distribution.\n//     * Neither the name of Google Inc. nor the names of its\n//       contributors may be used to endorse or promote products derived\n//       from this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n#include \"fast-dtoa.h\"\n\n#include \"cached-powers.h\"\n#include \"diy-fp.h\"\n#include \"ieee.h\"\n\nnamespace double_conversion {\n\n// The minimal and maximal target exponent define the range of w's binary\n// exponent, where 'w' is the result of multiplying the input by a cached power\n// of ten.\n//\n// A different range might be chosen on a different platform, to optimize digit\n// generation, but a smaller range requires more powers of ten to be cached.\nstatic const int kMinimalTargetExponent = -60;\nstatic const int kMaximalTargetExponent = -32;\n\n\n// Adjusts the last digit of the generated number, and screens out generated\n// solutions that may be inaccurate. A solution may be inaccurate if it is\n// outside the safe interval, or if we cannot prove that it is closer to the\n// input than a neighboring representation of the same length.\n//\n// Input: * buffer containing the digits of too_high / 10^kappa\n//        * the buffer's length\n//        * distance_too_high_w == (too_high - w).f() * unit\n//        * unsafe_interval == (too_high - too_low).f() * unit\n//        * rest = (too_high - buffer * 10^kappa).f() * unit\n//        * ten_kappa = 10^kappa * unit\n//        * unit = the common multiplier\n// Output: returns true if the buffer is guaranteed to contain the closest\n//    representable number to the input.\n//  Modifies the generated digits in the buffer to approach (round towards) w.\nstatic bool RoundWeed(Vector<char> buffer,\n                      int length,\n                      uint64_t distance_too_high_w,\n                      uint64_t unsafe_interval,\n                      uint64_t rest,\n                      uint64_t ten_kappa,\n                      uint64_t unit) {\n  uint64_t small_distance = distance_too_high_w - unit;\n  uint64_t big_distance = distance_too_high_w + unit;\n  // Let w_low  = too_high - big_distance, and\n  //     w_high = too_high - small_distance.\n  // Note: w_low < w < w_high\n  //\n  // The real w (* unit) must lie somewhere inside the interval\n  // ]w_low; w_high[ (often written as \"(w_low; w_high)\")\n\n  // Basically the buffer currently contains a number in the unsafe interval\n  // ]too_low; too_high[ with too_low < w < too_high\n  //\n  //  too_high - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n  //                     ^v 1 unit            ^      ^                 ^      ^\n  //  boundary_high ---------------------     .      .                 .      .\n  //                     ^v 1 unit            .      .                 .      .\n  //   - - - - - - - - - - - - - - - - - - -  +  - - + - - - - - -     .      .\n  //                                          .      .         ^       .      .\n  //                                          .  big_distance  .       .      .\n  //                                          .      .         .       .    rest\n  //                              small_distance     .         .       .      .\n  //                                          v      .         .       .      .\n  //  w_high - - - - - - - - - - - - - - - - - -     .         .       .      .\n  //                     ^v 1 unit                   .         .       .      .\n  //  w ----------------------------------------     .         .       .      .\n  //                     ^v 1 unit                   v         .       .      .\n  //  w_low  - - - - - - - - - - - - - - - - - - - - -         .       .      .\n  //                                                           .       .      v\n  //  buffer --------------------------------------------------+-------+--------\n  //                                                           .       .\n  //                                                  safe_interval    .\n  //                                                           v       .\n  //   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -     .\n  //                     ^v 1 unit                                     .\n  //  boundary_low -------------------------                     unsafe_interval\n  //                     ^v 1 unit                                     v\n  //  too_low  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n  //\n  //\n  // Note that the value of buffer could lie anywhere inside the range too_low\n  // to too_high.\n  //\n  // boundary_low, boundary_high and w are approximations of the real boundaries\n  // and v (the input number). They are guaranteed to be precise up to one unit.\n  // In fact the error is guaranteed to be strictly less than one unit.\n  //\n  // Anything that lies outside the unsafe interval is guaranteed not to round\n  // to v when read again.\n  // Anything that lies inside the safe interval is guaranteed to round to v\n  // when read again.\n  // If the number inside the buffer lies inside the unsafe interval but not\n  // inside the safe interval then we simply do not know and bail out (returning\n  // false).\n  //\n  // Similarly we have to take into account the imprecision of 'w' when finding\n  // the closest representation of 'w'. If we have two potential\n  // representations, and one is closer to both w_low and w_high, then we know\n  // it is closer to the actual value v.\n  //\n  // By generating the digits of too_high we got the largest (closest to\n  // too_high) buffer that is still in the unsafe interval. In the case where\n  // w_high < buffer < too_high we try to decrement the buffer.\n  // This way the buffer approaches (rounds towards) w.\n  // There are 3 conditions that stop the decrementation process:\n  //   1) the buffer is already below w_high\n  //   2) decrementing the buffer would make it leave the unsafe interval\n  //   3) decrementing the buffer would yield a number below w_high and farther\n  //      away than the current number. In other words:\n  //              (buffer{-1} < w_high) && w_high - buffer{-1} > buffer - w_high\n  // Instead of using the buffer directly we use its distance to too_high.\n  // Conceptually rest ~= too_high - buffer\n  // We need to do the following tests in this order to avoid over- and\n  // underflows.\n  ASSERT(rest <= unsafe_interval);\n  while (rest < small_distance &&  // Negated condition 1\n         unsafe_interval - rest >= ten_kappa &&  // Negated condition 2\n         (rest + ten_kappa < small_distance ||  // buffer{-1} > w_high\n          small_distance - rest >= rest + ten_kappa - small_distance)) {\n    buffer[length - 1]--;\n    rest += ten_kappa;\n  }\n\n  // We have approached w+ as much as possible. We now test if approaching w-\n  // would require changing the buffer. If yes, then we have two possible\n  // representations close to w, but we cannot decide which one is closer.\n  if (rest < big_distance &&\n      unsafe_interval - rest >= ten_kappa &&\n      (rest + ten_kappa < big_distance ||\n       big_distance - rest > rest + ten_kappa - big_distance)) {\n    return false;\n  }\n\n  // Weeding test.\n  //   The safe interval is [too_low + 2 ulp; too_high - 2 ulp]\n  //   Since too_low = too_high - unsafe_interval this is equivalent to\n  //      [too_high - unsafe_interval + 4 ulp; too_high - 2 ulp]\n  //   Conceptually we have: rest ~= too_high - buffer\n  return (2 * unit <= rest) && (rest <= unsafe_interval - 4 * unit);\n}\n\n\n// Rounds the buffer upwards if the result is closer to v by possibly adding\n// 1 to the buffer. If the precision of the calculation is not sufficient to\n// round correctly, return false.\n// The rounding might shift the whole buffer in which case the kappa is\n// adjusted. For example \"99\", kappa = 3 might become \"10\", kappa = 4.\n//\n// If 2*rest > ten_kappa then the buffer needs to be round up.\n// rest can have an error of +/- 1 unit. This function accounts for the\n// imprecision and returns false, if the rounding direction cannot be\n// unambiguously determined.\n//\n// Precondition: rest < ten_kappa.\nstatic bool RoundWeedCounted(Vector<char> buffer,\n                             int length,\n                             uint64_t rest,\n                             uint64_t ten_kappa,\n                             uint64_t unit,\n                             int* kappa) {\n  ASSERT(rest < ten_kappa);\n  // The following tests are done in a specific order to avoid overflows. They\n  // will work correctly with any uint64 values of rest < ten_kappa and unit.\n  //\n  // If the unit is too big, then we don't know which way to round. For example\n  // a unit of 50 means that the real number lies within rest +/- 50. If\n  // 10^kappa == 40 then there is no way to tell which way to round.\n  if (unit >= ten_kappa) return false;\n  // Even if unit is just half the size of 10^kappa we are already completely\n  // lost. (And after the previous test we know that the expression will not\n  // over/underflow.)\n  if (ten_kappa - unit <= unit) return false;\n  // If 2 * (rest + unit) <= 10^kappa we can safely round down.\n  if ((ten_kappa - rest > rest) && (ten_kappa - 2 * rest >= 2 * unit)) {\n    return true;\n  }\n  // If 2 * (rest - unit) >= 10^kappa, then we can safely round up.\n  if ((rest > unit) && (ten_kappa - (rest - unit) <= (rest - unit))) {\n    // Increment the last digit recursively until we find a non '9' digit.\n    buffer[length - 1]++;\n    for (int i = length - 1; i > 0; --i) {\n      if (buffer[i] != '0' + 10) break;\n      buffer[i] = '0';\n      buffer[i - 1]++;\n    }\n    // If the first digit is now '0'+ 10 we had a buffer with all '9's. With the\n    // exception of the first digit all digits are now '0'. Simply switch the\n    // first digit to '1' and adjust the kappa. Example: \"99\" becomes \"10\" and\n    // the power (the kappa) is increased.\n    if (buffer[0] == '0' + 10) {\n      buffer[0] = '1';\n      (*kappa) += 1;\n    }\n    return true;\n  }\n  return false;\n}\n\n// Returns the biggest power of ten that is less than or equal to the given\n// number. We furthermore receive the maximum number of bits 'number' has.\n//\n// Returns power == 10^(exponent_plus_one-1) such that\n//    power <= number < power * 10.\n// If number_bits == 0 then 0^(0-1) is returned.\n// The number of bits must be <= 32.\n// Precondition: number < (1 << (number_bits + 1)).\n\n// Inspired by the method for finding an integer log base 10 from here:\n// http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog10\nstatic unsigned int const kSmallPowersOfTen[] =\n    {0, 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000,\n     1000000000};\n\nstatic void BiggestPowerTen(uint32_t number,\n                            int number_bits,\n                            uint32_t* power,\n                            int* exponent_plus_one) {\n  ASSERT(number < (1u << (number_bits + 1)));\n  // 1233/4096 is approximately 1/lg(10).\n  int exponent_plus_one_guess = ((number_bits + 1) * 1233 >> 12);\n  // We increment to skip over the first entry in the kPowersOf10 table.\n  // Note: kPowersOf10[i] == 10^(i-1).\n  exponent_plus_one_guess++;\n  // We don't have any guarantees that 2^number_bits <= number.\n  if (number < kSmallPowersOfTen[exponent_plus_one_guess]) {\n    exponent_plus_one_guess--;\n  }\n  *power = kSmallPowersOfTen[exponent_plus_one_guess];\n  *exponent_plus_one = exponent_plus_one_guess;\n}\n\n// Generates the digits of input number w.\n// w is a floating-point number (DiyFp), consisting of a significand and an\n// exponent. Its exponent is bounded by kMinimalTargetExponent and\n// kMaximalTargetExponent.\n//       Hence -60 <= w.e() <= -32.\n//\n// Returns false if it fails, in which case the generated digits in the buffer\n// should not be used.\n// Preconditions:\n//  * low, w and high are correct up to 1 ulp (unit in the last place). That\n//    is, their error must be less than a unit of their last digits.\n//  * low.e() == w.e() == high.e()\n//  * low < w < high, and taking into account their error: low~ <= high~\n//  * kMinimalTargetExponent <= w.e() <= kMaximalTargetExponent\n// Postconditions: returns false if procedure fails.\n//   otherwise:\n//     * buffer is not null-terminated, but len contains the number of digits.\n//     * buffer contains the shortest possible decimal digit-sequence\n//       such that LOW < buffer * 10^kappa < HIGH, where LOW and HIGH are the\n//       correct values of low and high (without their error).\n//     * if more than one decimal representation gives the minimal number of\n//       decimal digits then the one closest to W (where W is the correct value\n//       of w) is chosen.\n// Remark: this procedure takes into account the imprecision of its input\n//   numbers. If the precision is not enough to guarantee all the postconditions\n//   then false is returned. This usually happens rarely (~0.5%).\n//\n// Say, for the sake of example, that\n//   w.e() == -48, and w.f() == 0x1234567890abcdef\n// w's value can be computed by w.f() * 2^w.e()\n// We can obtain w's integral digits by simply shifting w.f() by -w.e().\n//  -> w's integral part is 0x1234\n//  w's fractional part is therefore 0x567890abcdef.\n// Printing w's integral part is easy (simply print 0x1234 in decimal).\n// In order to print its fraction we repeatedly multiply the fraction by 10 and\n// get each digit. Example the first digit after the point would be computed by\n//   (0x567890abcdef * 10) >> 48. -> 3\n// The whole thing becomes slightly more complicated because we want to stop\n// once we have enough digits. That is, once the digits inside the buffer\n// represent 'w' we can stop. Everything inside the interval low - high\n// represents w. However we have to pay attention to low, high and w's\n// imprecision.\nstatic bool DigitGen(DiyFp low,\n                     DiyFp w,\n                     DiyFp high,\n                     Vector<char> buffer,\n                     int* length,\n                     int* kappa) {\n  ASSERT(low.e() == w.e() && w.e() == high.e());\n  ASSERT(low.f() + 1 <= high.f() - 1);\n  ASSERT(kMinimalTargetExponent <= w.e() && w.e() <= kMaximalTargetExponent);\n  // low, w and high are imprecise, but by less than one ulp (unit in the last\n  // place).\n  // If we remove (resp. add) 1 ulp from low (resp. high) we are certain that\n  // the new numbers are outside of the interval we want the final\n  // representation to lie in.\n  // Inversely adding (resp. removing) 1 ulp from low (resp. high) would yield\n  // numbers that are certain to lie in the interval. We will use this fact\n  // later on.\n  // We will now start by generating the digits within the uncertain\n  // interval. Later we will weed out representations that lie outside the safe\n  // interval and thus _might_ lie outside the correct interval.\n  uint64_t unit = 1;\n  DiyFp too_low = DiyFp(low.f() - unit, low.e());\n  DiyFp too_high = DiyFp(high.f() + unit, high.e());\n  // too_low and too_high are guaranteed to lie outside the interval we want the\n  // generated number in.\n  DiyFp unsafe_interval = DiyFp::Minus(too_high, too_low);\n  // We now cut the input number into two parts: the integral digits and the\n  // fractionals. We will not write any decimal separator though, but adapt\n  // kappa instead.\n  // Reminder: we are currently computing the digits (stored inside the buffer)\n  // such that:   too_low < buffer * 10^kappa < too_high\n  // We use too_high for the digit_generation and stop as soon as possible.\n  // If we stop early we effectively round down.\n  DiyFp one = DiyFp(static_cast<uint64_t>(1) << -w.e(), w.e());\n  // Division by one is a shift.\n  uint32_t integrals = static_cast<uint32_t>(too_high.f() >> -one.e());\n  // Modulo by one is an and.\n  uint64_t fractionals = too_high.f() & (one.f() - 1);\n  uint32_t divisor;\n  int divisor_exponent_plus_one;\n  BiggestPowerTen(integrals, DiyFp::kSignificandSize - (-one.e()),\n                  &divisor, &divisor_exponent_plus_one);\n  *kappa = divisor_exponent_plus_one;\n  *length = 0;\n  // Loop invariant: buffer = too_high / 10^kappa  (integer division)\n  // The invariant holds for the first iteration: kappa has been initialized\n  // with the divisor exponent + 1. And the divisor is the biggest power of ten\n  // that is smaller than integrals.\n  while (*kappa > 0) {\n    int digit = integrals / divisor;\n    ASSERT(digit <= 9);\n    buffer[*length] = static_cast<char>('0' + digit);\n    (*length)++;\n    integrals %= divisor;\n    (*kappa)--;\n    // Note that kappa now equals the exponent of the divisor and that the\n    // invariant thus holds again.\n    uint64_t rest =\n        (static_cast<uint64_t>(integrals) << -one.e()) + fractionals;\n    // Invariant: too_high = buffer * 10^kappa + DiyFp(rest, one.e())\n    // Reminder: unsafe_interval.e() == one.e()\n    if (rest < unsafe_interval.f()) {\n      // Rounding down (by not emitting the remaining digits) yields a number\n      // that lies within the unsafe interval.\n      return RoundWeed(buffer, *length, DiyFp::Minus(too_high, w).f(),\n                       unsafe_interval.f(), rest,\n                       static_cast<uint64_t>(divisor) << -one.e(), unit);\n    }\n    divisor /= 10;\n  }\n\n  // The integrals have been generated. We are at the point of the decimal\n  // separator. In the following loop we simply multiply the remaining digits by\n  // 10 and divide by one. We just need to pay attention to multiply associated\n  // data (like the interval or 'unit'), too.\n  // Note that the multiplication by 10 does not overflow, because w.e >= -60\n  // and thus one.e >= -60.\n  ASSERT(one.e() >= -60);\n  ASSERT(fractionals < one.f());\n  ASSERT(UINT64_2PART_C(0xFFFFFFFF, FFFFFFFF) / 10 >= one.f());\n  for (;;) {\n    fractionals *= 10;\n    unit *= 10;\n    unsafe_interval.set_f(unsafe_interval.f() * 10);\n    // Integer division by one.\n    int digit = static_cast<int>(fractionals >> -one.e());\n    ASSERT(digit <= 9);\n    buffer[*length] = static_cast<char>('0' + digit);\n    (*length)++;\n    fractionals &= one.f() - 1;  // Modulo by one.\n    (*kappa)--;\n    if (fractionals < unsafe_interval.f()) {\n      return RoundWeed(buffer, *length, DiyFp::Minus(too_high, w).f() * unit,\n                       unsafe_interval.f(), fractionals, one.f(), unit);\n    }\n  }\n}\n\n\n\n// Generates (at most) requested_digits digits of input number w.\n// w is a floating-point number (DiyFp), consisting of a significand and an\n// exponent. Its exponent is bounded by kMinimalTargetExponent and\n// kMaximalTargetExponent.\n//       Hence -60 <= w.e() <= -32.\n//\n// Returns false if it fails, in which case the generated digits in the buffer\n// should not be used.\n// Preconditions:\n//  * w is correct up to 1 ulp (unit in the last place). That\n//    is, its error must be strictly less than a unit of its last digit.\n//  * kMinimalTargetExponent <= w.e() <= kMaximalTargetExponent\n//\n// Postconditions: returns false if procedure fails.\n//   otherwise:\n//     * buffer is not null-terminated, but length contains the number of\n//       digits.\n//     * the representation in buffer is the most precise representation of\n//       requested_digits digits.\n//     * buffer contains at most requested_digits digits of w. If there are less\n//       than requested_digits digits then some trailing '0's have been removed.\n//     * kappa is such that\n//            w = buffer * 10^kappa + eps with |eps| < 10^kappa / 2.\n//\n// Remark: This procedure takes into account the imprecision of its input\n//   numbers. If the precision is not enough to guarantee all the postconditions\n//   then false is returned. This usually happens rarely, but the failure-rate\n//   increases with higher requested_digits.\nstatic bool DigitGenCounted(DiyFp w,\n                            int requested_digits,\n                            Vector<char> buffer,\n                            int* length,\n                            int* kappa) {\n  ASSERT(kMinimalTargetExponent <= w.e() && w.e() <= kMaximalTargetExponent);\n  ASSERT(kMinimalTargetExponent >= -60);\n  ASSERT(kMaximalTargetExponent <= -32);\n  // w is assumed to have an error less than 1 unit. Whenever w is scaled we\n  // also scale its error.\n  uint64_t w_error = 1;\n  // We cut the input number into two parts: the integral digits and the\n  // fractional digits. We don't emit any decimal separator, but adapt kappa\n  // instead. Example: instead of writing \"1.2\" we put \"12\" into the buffer and\n  // increase kappa by 1.\n  DiyFp one = DiyFp(static_cast<uint64_t>(1) << -w.e(), w.e());\n  // Division by one is a shift.\n  uint32_t integrals = static_cast<uint32_t>(w.f() >> -one.e());\n  // Modulo by one is an and.\n  uint64_t fractionals = w.f() & (one.f() - 1);\n  uint32_t divisor;\n  int divisor_exponent_plus_one;\n  BiggestPowerTen(integrals, DiyFp::kSignificandSize - (-one.e()),\n                  &divisor, &divisor_exponent_plus_one);\n  *kappa = divisor_exponent_plus_one;\n  *length = 0;\n\n  // Loop invariant: buffer = w / 10^kappa  (integer division)\n  // The invariant holds for the first iteration: kappa has been initialized\n  // with the divisor exponent + 1. And the divisor is the biggest power of ten\n  // that is smaller than 'integrals'.\n  while (*kappa > 0) {\n    int digit = integrals / divisor;\n    ASSERT(digit <= 9);\n    buffer[*length] = static_cast<char>('0' + digit);\n    (*length)++;\n    requested_digits--;\n    integrals %= divisor;\n    (*kappa)--;\n    // Note that kappa now equals the exponent of the divisor and that the\n    // invariant thus holds again.\n    if (requested_digits == 0) break;\n    divisor /= 10;\n  }\n\n  if (requested_digits == 0) {\n    uint64_t rest =\n        (static_cast<uint64_t>(integrals) << -one.e()) + fractionals;\n    return RoundWeedCounted(buffer, *length, rest,\n                            static_cast<uint64_t>(divisor) << -one.e(), w_error,\n                            kappa);\n  }\n\n  // The integrals have been generated. We are at the point of the decimal\n  // separator. In the following loop we simply multiply the remaining digits by\n  // 10 and divide by one. We just need to pay attention to multiply associated\n  // data (the 'unit'), too.\n  // Note that the multiplication by 10 does not overflow, because w.e >= -60\n  // and thus one.e >= -60.\n  ASSERT(one.e() >= -60);\n  ASSERT(fractionals < one.f());\n  ASSERT(UINT64_2PART_C(0xFFFFFFFF, FFFFFFFF) / 10 >= one.f());\n  while (requested_digits > 0 && fractionals > w_error) {\n    fractionals *= 10;\n    w_error *= 10;\n    // Integer division by one.\n    int digit = static_cast<int>(fractionals >> -one.e());\n    ASSERT(digit <= 9);\n    buffer[*length] = static_cast<char>('0' + digit);\n    (*length)++;\n    requested_digits--;\n    fractionals &= one.f() - 1;  // Modulo by one.\n    (*kappa)--;\n  }\n  if (requested_digits != 0) return false;\n  return RoundWeedCounted(buffer, *length, fractionals, one.f(), w_error,\n                          kappa);\n}\n\n\n// Provides a decimal representation of v.\n// Returns true if it succeeds, otherwise the result cannot be trusted.\n// There will be *length digits inside the buffer (not null-terminated).\n// If the function returns true then\n//        v == (double) (buffer * 10^decimal_exponent).\n// The digits in the buffer are the shortest representation possible: no\n// 0.09999999999999999 instead of 0.1. The shorter representation will even be\n// chosen even if the longer one would be closer to v.\n// The last digit will be closest to the actual v. That is, even if several\n// digits might correctly yield 'v' when read again, the closest will be\n// computed.\nstatic bool Grisu3(double v,\n                   FastDtoaMode mode,\n                   Vector<char> buffer,\n                   int* length,\n                   int* decimal_exponent) {\n  DiyFp w = Double(v).AsNormalizedDiyFp();\n  // boundary_minus and boundary_plus are the boundaries between v and its\n  // closest floating-point neighbors. Any number strictly between\n  // boundary_minus and boundary_plus will round to v when convert to a double.\n  // Grisu3 will never output representations that lie exactly on a boundary.\n  DiyFp boundary_minus, boundary_plus;\n  if (mode == FAST_DTOA_SHORTEST) {\n    Double(v).NormalizedBoundaries(&boundary_minus, &boundary_plus);\n  } else {\n    ASSERT(mode == FAST_DTOA_SHORTEST_SINGLE);\n    float single_v = static_cast<float>(v);\n    Single(single_v).NormalizedBoundaries(&boundary_minus, &boundary_plus);\n  }\n  ASSERT(boundary_plus.e() == w.e());\n  DiyFp ten_mk;  // Cached power of ten: 10^-k\n  int mk;        // -k\n  int ten_mk_minimal_binary_exponent =\n     kMinimalTargetExponent - (w.e() + DiyFp::kSignificandSize);\n  int ten_mk_maximal_binary_exponent =\n     kMaximalTargetExponent - (w.e() + DiyFp::kSignificandSize);\n  PowersOfTenCache::GetCachedPowerForBinaryExponentRange(\n      ten_mk_minimal_binary_exponent,\n      ten_mk_maximal_binary_exponent,\n      &ten_mk, &mk);\n  ASSERT((kMinimalTargetExponent <= w.e() + ten_mk.e() +\n          DiyFp::kSignificandSize) &&\n         (kMaximalTargetExponent >= w.e() + ten_mk.e() +\n          DiyFp::kSignificandSize));\n  // Note that ten_mk is only an approximation of 10^-k. A DiyFp only contains a\n  // 64 bit significand and ten_mk is thus only precise up to 64 bits.\n\n  // The DiyFp::Times procedure rounds its result, and ten_mk is approximated\n  // too. The variable scaled_w (as well as scaled_boundary_minus/plus) are now\n  // off by a small amount.\n  // In fact: scaled_w - w*10^k < 1ulp (unit in the last place) of scaled_w.\n  // In other words: let f = scaled_w.f() and e = scaled_w.e(), then\n  //           (f-1) * 2^e < w*10^k < (f+1) * 2^e\n  DiyFp scaled_w = DiyFp::Times(w, ten_mk);\n  ASSERT(scaled_w.e() ==\n         boundary_plus.e() + ten_mk.e() + DiyFp::kSignificandSize);\n  // In theory it would be possible to avoid some recomputations by computing\n  // the difference between w and boundary_minus/plus (a power of 2) and to\n  // compute scaled_boundary_minus/plus by subtracting/adding from\n  // scaled_w. However the code becomes much less readable and the speed\n  // enhancements are not terriffic.\n  DiyFp scaled_boundary_minus = DiyFp::Times(boundary_minus, ten_mk);\n  DiyFp scaled_boundary_plus  = DiyFp::Times(boundary_plus,  ten_mk);\n\n  // DigitGen will generate the digits of scaled_w. Therefore we have\n  // v == (double) (scaled_w * 10^-mk).\n  // Set decimal_exponent == -mk and pass it to DigitGen. If scaled_w is not an\n  // integer than it will be updated. For instance if scaled_w == 1.23 then\n  // the buffer will be filled with \"123\" und the decimal_exponent will be\n  // decreased by 2.\n  int kappa;\n  bool result = DigitGen(scaled_boundary_minus, scaled_w, scaled_boundary_plus,\n                         buffer, length, &kappa);\n  *decimal_exponent = -mk + kappa;\n  return result;\n}\n\n\n// The \"counted\" version of grisu3 (see above) only generates requested_digits\n// number of digits. This version does not generate the shortest representation,\n// and with enough requested digits 0.1 will at some point print as 0.9999999...\n// Grisu3 is too imprecise for real halfway cases (1.5 will not work) and\n// therefore the rounding strategy for halfway cases is irrelevant.\nstatic bool Grisu3Counted(double v,\n                          int requested_digits,\n                          Vector<char> buffer,\n                          int* length,\n                          int* decimal_exponent) {\n  DiyFp w = Double(v).AsNormalizedDiyFp();\n  DiyFp ten_mk;  // Cached power of ten: 10^-k\n  int mk;        // -k\n  int ten_mk_minimal_binary_exponent =\n     kMinimalTargetExponent - (w.e() + DiyFp::kSignificandSize);\n  int ten_mk_maximal_binary_exponent =\n     kMaximalTargetExponent - (w.e() + DiyFp::kSignificandSize);\n  PowersOfTenCache::GetCachedPowerForBinaryExponentRange(\n      ten_mk_minimal_binary_exponent,\n      ten_mk_maximal_binary_exponent,\n      &ten_mk, &mk);\n  ASSERT((kMinimalTargetExponent <= w.e() + ten_mk.e() +\n          DiyFp::kSignificandSize) &&\n         (kMaximalTargetExponent >= w.e() + ten_mk.e() +\n          DiyFp::kSignificandSize));\n  // Note that ten_mk is only an approximation of 10^-k. A DiyFp only contains a\n  // 64 bit significand and ten_mk is thus only precise up to 64 bits.\n\n  // The DiyFp::Times procedure rounds its result, and ten_mk is approximated\n  // too. The variable scaled_w (as well as scaled_boundary_minus/plus) are now\n  // off by a small amount.\n  // In fact: scaled_w - w*10^k < 1ulp (unit in the last place) of scaled_w.\n  // In other words: let f = scaled_w.f() and e = scaled_w.e(), then\n  //           (f-1) * 2^e < w*10^k < (f+1) * 2^e\n  DiyFp scaled_w = DiyFp::Times(w, ten_mk);\n\n  // We now have (double) (scaled_w * 10^-mk).\n  // DigitGen will generate the first requested_digits digits of scaled_w and\n  // return together with a kappa such that scaled_w ~= buffer * 10^kappa. (It\n  // will not always be exactly the same since DigitGenCounted only produces a\n  // limited number of digits.)\n  int kappa;\n  bool result = DigitGenCounted(scaled_w, requested_digits,\n                                buffer, length, &kappa);\n  *decimal_exponent = -mk + kappa;\n  return result;\n}\n\n\nbool FastDtoa(double v,\n              FastDtoaMode mode,\n              int requested_digits,\n              Vector<char> buffer,\n              int* length,\n              int* decimal_point) {\n  ASSERT(v > 0);\n  ASSERT(!Double(v).IsSpecial());\n\n  bool result = false;\n  int decimal_exponent = 0;\n  switch (mode) {\n    case FAST_DTOA_SHORTEST:\n    case FAST_DTOA_SHORTEST_SINGLE:\n      result = Grisu3(v, mode, buffer, length, &decimal_exponent);\n      break;\n    case FAST_DTOA_PRECISION:\n      result = Grisu3Counted(v, requested_digits,\n                             buffer, length, &decimal_exponent);\n      break;\n    default:\n      UNREACHABLE();\n  }\n  if (result) {\n    *decimal_point = *length + decimal_exponent;\n    buffer[*length] = '\\0';\n  }\n  return result;\n}\n\n}  // namespace double_conversion\n"
  },
  {
    "path": "native/iosTest/Pods/DoubleConversion/double-conversion/fast-dtoa.h",
    "content": "// Copyright 2010 the V8 project authors. All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n//       notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n//       copyright notice, this list of conditions and the following\n//       disclaimer in the documentation and/or other materials provided\n//       with the distribution.\n//     * Neither the name of Google Inc. nor the names of its\n//       contributors may be used to endorse or promote products derived\n//       from this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n#ifndef DOUBLE_CONVERSION_FAST_DTOA_H_\n#define DOUBLE_CONVERSION_FAST_DTOA_H_\n\n#include \"utils.h\"\n\nnamespace double_conversion {\n\nenum FastDtoaMode {\n  // Computes the shortest representation of the given input. The returned\n  // result will be the most accurate number of this length. Longer\n  // representations might be more accurate.\n  FAST_DTOA_SHORTEST,\n  // Same as FAST_DTOA_SHORTEST but for single-precision floats.\n  FAST_DTOA_SHORTEST_SINGLE,\n  // Computes a representation where the precision (number of digits) is\n  // given as input. The precision is independent of the decimal point.\n  FAST_DTOA_PRECISION\n};\n\n// FastDtoa will produce at most kFastDtoaMaximalLength digits. This does not\n// include the terminating '\\0' character.\nstatic const int kFastDtoaMaximalLength = 17;\n// Same for single-precision numbers.\nstatic const int kFastDtoaMaximalSingleLength = 9;\n\n// Provides a decimal representation of v.\n// The result should be interpreted as buffer * 10^(point - length).\n//\n// Precondition:\n//   * v must be a strictly positive finite double.\n//\n// Returns true if it succeeds, otherwise the result can not be trusted.\n// There will be *length digits inside the buffer followed by a null terminator.\n// If the function returns true and mode equals\n//   - FAST_DTOA_SHORTEST, then\n//     the parameter requested_digits is ignored.\n//     The result satisfies\n//         v == (double) (buffer * 10^(point - length)).\n//     The digits in the buffer are the shortest representation possible. E.g.\n//     if 0.099999999999 and 0.1 represent the same double then \"1\" is returned\n//     with point = 0.\n//     The last digit will be closest to the actual v. That is, even if several\n//     digits might correctly yield 'v' when read again, the buffer will contain\n//     the one closest to v.\n//   - FAST_DTOA_PRECISION, then\n//     the buffer contains requested_digits digits.\n//     the difference v - (buffer * 10^(point-length)) is closest to zero for\n//     all possible representations of requested_digits digits.\n//     If there are two values that are equally close, then FastDtoa returns\n//     false.\n// For both modes the buffer must be large enough to hold the result.\nbool FastDtoa(double d,\n              FastDtoaMode mode,\n              int requested_digits,\n              Vector<char> buffer,\n              int* length,\n              int* decimal_point);\n\n}  // namespace double_conversion\n\n#endif  // DOUBLE_CONVERSION_FAST_DTOA_H_\n"
  },
  {
    "path": "native/iosTest/Pods/DoubleConversion/double-conversion/fixed-dtoa.cc",
    "content": "// Copyright 2010 the V8 project authors. All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n//       notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n//       copyright notice, this list of conditions and the following\n//       disclaimer in the documentation and/or other materials provided\n//       with the distribution.\n//     * Neither the name of Google Inc. nor the names of its\n//       contributors may be used to endorse or promote products derived\n//       from this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n#include <math.h>\n\n#include \"fixed-dtoa.h\"\n#include \"ieee.h\"\n\nnamespace double_conversion {\n\n// Represents a 128bit type. This class should be replaced by a native type on\n// platforms that support 128bit integers.\nclass UInt128 {\n public:\n  UInt128() : high_bits_(0), low_bits_(0) { }\n  UInt128(uint64_t high, uint64_t low) : high_bits_(high), low_bits_(low) { }\n\n  void Multiply(uint32_t multiplicand) {\n    uint64_t accumulator;\n\n    accumulator = (low_bits_ & kMask32) * multiplicand;\n    uint32_t part = static_cast<uint32_t>(accumulator & kMask32);\n    accumulator >>= 32;\n    accumulator = accumulator + (low_bits_ >> 32) * multiplicand;\n    low_bits_ = (accumulator << 32) + part;\n    accumulator >>= 32;\n    accumulator = accumulator + (high_bits_ & kMask32) * multiplicand;\n    part = static_cast<uint32_t>(accumulator & kMask32);\n    accumulator >>= 32;\n    accumulator = accumulator + (high_bits_ >> 32) * multiplicand;\n    high_bits_ = (accumulator << 32) + part;\n    ASSERT((accumulator >> 32) == 0);\n  }\n\n  void Shift(int shift_amount) {\n    ASSERT(-64 <= shift_amount && shift_amount <= 64);\n    if (shift_amount == 0) {\n      return;\n    } else if (shift_amount == -64) {\n      high_bits_ = low_bits_;\n      low_bits_ = 0;\n    } else if (shift_amount == 64) {\n      low_bits_ = high_bits_;\n      high_bits_ = 0;\n    } else if (shift_amount <= 0) {\n      high_bits_ <<= -shift_amount;\n      high_bits_ += low_bits_ >> (64 + shift_amount);\n      low_bits_ <<= -shift_amount;\n    } else {\n      low_bits_ >>= shift_amount;\n      low_bits_ += high_bits_ << (64 - shift_amount);\n      high_bits_ >>= shift_amount;\n    }\n  }\n\n  // Modifies *this to *this MOD (2^power).\n  // Returns *this DIV (2^power).\n  int DivModPowerOf2(int power) {\n    if (power >= 64) {\n      int result = static_cast<int>(high_bits_ >> (power - 64));\n      high_bits_ -= static_cast<uint64_t>(result) << (power - 64);\n      return result;\n    } else {\n      uint64_t part_low = low_bits_ >> power;\n      uint64_t part_high = high_bits_ << (64 - power);\n      int result = static_cast<int>(part_low + part_high);\n      high_bits_ = 0;\n      low_bits_ -= part_low << power;\n      return result;\n    }\n  }\n\n  bool IsZero() const {\n    return high_bits_ == 0 && low_bits_ == 0;\n  }\n\n  int BitAt(int position) {\n    if (position >= 64) {\n      return static_cast<int>(high_bits_ >> (position - 64)) & 1;\n    } else {\n      return static_cast<int>(low_bits_ >> position) & 1;\n    }\n  }\n\n private:\n  static const uint64_t kMask32 = 0xFFFFFFFF;\n  // Value == (high_bits_ << 64) + low_bits_\n  uint64_t high_bits_;\n  uint64_t low_bits_;\n};\n\n\nstatic const int kDoubleSignificandSize = 53;  // Includes the hidden bit.\n\n\nstatic void FillDigits32FixedLength(uint32_t number, int requested_length,\n                                    Vector<char> buffer, int* length) {\n  for (int i = requested_length - 1; i >= 0; --i) {\n    buffer[(*length) + i] = '0' + number % 10;\n    number /= 10;\n  }\n  *length += requested_length;\n}\n\n\nstatic void FillDigits32(uint32_t number, Vector<char> buffer, int* length) {\n  int number_length = 0;\n  // We fill the digits in reverse order and exchange them afterwards.\n  while (number != 0) {\n    int digit = number % 10;\n    number /= 10;\n    buffer[(*length) + number_length] = static_cast<char>('0' + digit);\n    number_length++;\n  }\n  // Exchange the digits.\n  int i = *length;\n  int j = *length + number_length - 1;\n  while (i < j) {\n    char tmp = buffer[i];\n    buffer[i] = buffer[j];\n    buffer[j] = tmp;\n    i++;\n    j--;\n  }\n  *length += number_length;\n}\n\n\nstatic void FillDigits64FixedLength(uint64_t number,\n                                    Vector<char> buffer, int* length) {\n  const uint32_t kTen7 = 10000000;\n  // For efficiency cut the number into 3 uint32_t parts, and print those.\n  uint32_t part2 = static_cast<uint32_t>(number % kTen7);\n  number /= kTen7;\n  uint32_t part1 = static_cast<uint32_t>(number % kTen7);\n  uint32_t part0 = static_cast<uint32_t>(number / kTen7);\n\n  FillDigits32FixedLength(part0, 3, buffer, length);\n  FillDigits32FixedLength(part1, 7, buffer, length);\n  FillDigits32FixedLength(part2, 7, buffer, length);\n}\n\n\nstatic void FillDigits64(uint64_t number, Vector<char> buffer, int* length) {\n  const uint32_t kTen7 = 10000000;\n  // For efficiency cut the number into 3 uint32_t parts, and print those.\n  uint32_t part2 = static_cast<uint32_t>(number % kTen7);\n  number /= kTen7;\n  uint32_t part1 = static_cast<uint32_t>(number % kTen7);\n  uint32_t part0 = static_cast<uint32_t>(number / kTen7);\n\n  if (part0 != 0) {\n    FillDigits32(part0, buffer, length);\n    FillDigits32FixedLength(part1, 7, buffer, length);\n    FillDigits32FixedLength(part2, 7, buffer, length);\n  } else if (part1 != 0) {\n    FillDigits32(part1, buffer, length);\n    FillDigits32FixedLength(part2, 7, buffer, length);\n  } else {\n    FillDigits32(part2, buffer, length);\n  }\n}\n\n\nstatic void RoundUp(Vector<char> buffer, int* length, int* decimal_point) {\n  // An empty buffer represents 0.\n  if (*length == 0) {\n    buffer[0] = '1';\n    *decimal_point = 1;\n    *length = 1;\n    return;\n  }\n  // Round the last digit until we either have a digit that was not '9' or until\n  // we reached the first digit.\n  buffer[(*length) - 1]++;\n  for (int i = (*length) - 1; i > 0; --i) {\n    if (buffer[i] != '0' + 10) {\n      return;\n    }\n    buffer[i] = '0';\n    buffer[i - 1]++;\n  }\n  // If the first digit is now '0' + 10, we would need to set it to '0' and add\n  // a '1' in front. However we reach the first digit only if all following\n  // digits had been '9' before rounding up. Now all trailing digits are '0' and\n  // we simply switch the first digit to '1' and update the decimal-point\n  // (indicating that the point is now one digit to the right).\n  if (buffer[0] == '0' + 10) {\n    buffer[0] = '1';\n    (*decimal_point)++;\n  }\n}\n\n\n// The given fractionals number represents a fixed-point number with binary\n// point at bit (-exponent).\n// Preconditions:\n//   -128 <= exponent <= 0.\n//   0 <= fractionals * 2^exponent < 1\n//   The buffer holds the result.\n// The function will round its result. During the rounding-process digits not\n// generated by this function might be updated, and the decimal-point variable\n// might be updated. If this function generates the digits 99 and the buffer\n// already contained \"199\" (thus yielding a buffer of \"19999\") then a\n// rounding-up will change the contents of the buffer to \"20000\".\nstatic void FillFractionals(uint64_t fractionals, int exponent,\n                            int fractional_count, Vector<char> buffer,\n                            int* length, int* decimal_point) {\n  ASSERT(-128 <= exponent && exponent <= 0);\n  // 'fractionals' is a fixed-point number, with binary point at bit\n  // (-exponent). Inside the function the non-converted remainder of fractionals\n  // is a fixed-point number, with binary point at bit 'point'.\n  if (-exponent <= 64) {\n    // One 64 bit number is sufficient.\n    ASSERT(fractionals >> 56 == 0);\n    int point = -exponent;\n    for (int i = 0; i < fractional_count; ++i) {\n      if (fractionals == 0) break;\n      // Instead of multiplying by 10 we multiply by 5 and adjust the point\n      // location. This way the fractionals variable will not overflow.\n      // Invariant at the beginning of the loop: fractionals < 2^point.\n      // Initially we have: point <= 64 and fractionals < 2^56\n      // After each iteration the point is decremented by one.\n      // Note that 5^3 = 125 < 128 = 2^7.\n      // Therefore three iterations of this loop will not overflow fractionals\n      // (even without the subtraction at the end of the loop body). At this\n      // time point will satisfy point <= 61 and therefore fractionals < 2^point\n      // and any further multiplication of fractionals by 5 will not overflow.\n      fractionals *= 5;\n      point--;\n      int digit = static_cast<int>(fractionals >> point);\n      ASSERT(digit <= 9);\n      buffer[*length] = static_cast<char>('0' + digit);\n      (*length)++;\n      fractionals -= static_cast<uint64_t>(digit) << point;\n    }\n    // If the first bit after the point is set we have to round up.\n    if (((fractionals >> (point - 1)) & 1) == 1) {\n      RoundUp(buffer, length, decimal_point);\n    }\n  } else {  // We need 128 bits.\n    ASSERT(64 < -exponent && -exponent <= 128);\n    UInt128 fractionals128 = UInt128(fractionals, 0);\n    fractionals128.Shift(-exponent - 64);\n    int point = 128;\n    for (int i = 0; i < fractional_count; ++i) {\n      if (fractionals128.IsZero()) break;\n      // As before: instead of multiplying by 10 we multiply by 5 and adjust the\n      // point location.\n      // This multiplication will not overflow for the same reasons as before.\n      fractionals128.Multiply(5);\n      point--;\n      int digit = fractionals128.DivModPowerOf2(point);\n      ASSERT(digit <= 9);\n      buffer[*length] = static_cast<char>('0' + digit);\n      (*length)++;\n    }\n    if (fractionals128.BitAt(point - 1) == 1) {\n      RoundUp(buffer, length, decimal_point);\n    }\n  }\n}\n\n\n// Removes leading and trailing zeros.\n// If leading zeros are removed then the decimal point position is adjusted.\nstatic void TrimZeros(Vector<char> buffer, int* length, int* decimal_point) {\n  while (*length > 0 && buffer[(*length) - 1] == '0') {\n    (*length)--;\n  }\n  int first_non_zero = 0;\n  while (first_non_zero < *length && buffer[first_non_zero] == '0') {\n    first_non_zero++;\n  }\n  if (first_non_zero != 0) {\n    for (int i = first_non_zero; i < *length; ++i) {\n      buffer[i - first_non_zero] = buffer[i];\n    }\n    *length -= first_non_zero;\n    *decimal_point -= first_non_zero;\n  }\n}\n\n\nbool FastFixedDtoa(double v,\n                   int fractional_count,\n                   Vector<char> buffer,\n                   int* length,\n                   int* decimal_point) {\n  const uint32_t kMaxUInt32 = 0xFFFFFFFF;\n  uint64_t significand = Double(v).Significand();\n  int exponent = Double(v).Exponent();\n  // v = significand * 2^exponent (with significand a 53bit integer).\n  // If the exponent is larger than 20 (i.e. we may have a 73bit number) then we\n  // don't know how to compute the representation. 2^73 ~= 9.5*10^21.\n  // If necessary this limit could probably be increased, but we don't need\n  // more.\n  if (exponent > 20) return false;\n  if (fractional_count > 20) return false;\n  *length = 0;\n  // At most kDoubleSignificandSize bits of the significand are non-zero.\n  // Given a 64 bit integer we have 11 0s followed by 53 potentially non-zero\n  // bits:  0..11*..0xxx..53*..xx\n  if (exponent + kDoubleSignificandSize > 64) {\n    // The exponent must be > 11.\n    //\n    // We know that v = significand * 2^exponent.\n    // And the exponent > 11.\n    // We simplify the task by dividing v by 10^17.\n    // The quotient delivers the first digits, and the remainder fits into a 64\n    // bit number.\n    // Dividing by 10^17 is equivalent to dividing by 5^17*2^17.\n    const uint64_t kFive17 = UINT64_2PART_C(0xB1, A2BC2EC5);  // 5^17\n    uint64_t divisor = kFive17;\n    int divisor_power = 17;\n    uint64_t dividend = significand;\n    uint32_t quotient;\n    uint64_t remainder;\n    // Let v = f * 2^e with f == significand and e == exponent.\n    // Then need q (quotient) and r (remainder) as follows:\n    //   v            = q * 10^17       + r\n    //   f * 2^e      = q * 10^17       + r\n    //   f * 2^e      = q * 5^17 * 2^17 + r\n    // If e > 17 then\n    //   f * 2^(e-17) = q * 5^17        + r/2^17\n    // else\n    //   f  = q * 5^17 * 2^(17-e) + r/2^e\n    if (exponent > divisor_power) {\n      // We only allow exponents of up to 20 and therefore (17 - e) <= 3\n      dividend <<= exponent - divisor_power;\n      quotient = static_cast<uint32_t>(dividend / divisor);\n      remainder = (dividend % divisor) << divisor_power;\n    } else {\n      divisor <<= divisor_power - exponent;\n      quotient = static_cast<uint32_t>(dividend / divisor);\n      remainder = (dividend % divisor) << exponent;\n    }\n    FillDigits32(quotient, buffer, length);\n    FillDigits64FixedLength(remainder, buffer, length);\n    *decimal_point = *length;\n  } else if (exponent >= 0) {\n    // 0 <= exponent <= 11\n    significand <<= exponent;\n    FillDigits64(significand, buffer, length);\n    *decimal_point = *length;\n  } else if (exponent > -kDoubleSignificandSize) {\n    // We have to cut the number.\n    uint64_t integrals = significand >> -exponent;\n    uint64_t fractionals = significand - (integrals << -exponent);\n    if (integrals > kMaxUInt32) {\n      FillDigits64(integrals, buffer, length);\n    } else {\n      FillDigits32(static_cast<uint32_t>(integrals), buffer, length);\n    }\n    *decimal_point = *length;\n    FillFractionals(fractionals, exponent, fractional_count,\n                    buffer, length, decimal_point);\n  } else if (exponent < -128) {\n    // This configuration (with at most 20 digits) means that all digits must be\n    // 0.\n    ASSERT(fractional_count <= 20);\n    buffer[0] = '\\0';\n    *length = 0;\n    *decimal_point = -fractional_count;\n  } else {\n    *decimal_point = 0;\n    FillFractionals(significand, exponent, fractional_count,\n                    buffer, length, decimal_point);\n  }\n  TrimZeros(buffer, length, decimal_point);\n  buffer[*length] = '\\0';\n  if ((*length) == 0) {\n    // The string is empty and the decimal_point thus has no importance. Mimick\n    // Gay's dtoa and and set it to -fractional_count.\n    *decimal_point = -fractional_count;\n  }\n  return true;\n}\n\n}  // namespace double_conversion\n"
  },
  {
    "path": "native/iosTest/Pods/DoubleConversion/double-conversion/fixed-dtoa.h",
    "content": "// Copyright 2010 the V8 project authors. All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n//       notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n//       copyright notice, this list of conditions and the following\n//       disclaimer in the documentation and/or other materials provided\n//       with the distribution.\n//     * Neither the name of Google Inc. nor the names of its\n//       contributors may be used to endorse or promote products derived\n//       from this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n#ifndef DOUBLE_CONVERSION_FIXED_DTOA_H_\n#define DOUBLE_CONVERSION_FIXED_DTOA_H_\n\n#include \"utils.h\"\n\nnamespace double_conversion {\n\n// Produces digits necessary to print a given number with\n// 'fractional_count' digits after the decimal point.\n// The buffer must be big enough to hold the result plus one terminating null\n// character.\n//\n// The produced digits might be too short in which case the caller has to fill\n// the gaps with '0's.\n// Example: FastFixedDtoa(0.001, 5, ...) is allowed to return buffer = \"1\", and\n// decimal_point = -2.\n// Halfway cases are rounded towards +/-Infinity (away from 0). The call\n// FastFixedDtoa(0.15, 2, ...) thus returns buffer = \"2\", decimal_point = 0.\n// The returned buffer may contain digits that would be truncated from the\n// shortest representation of the input.\n//\n// This method only works for some parameters. If it can't handle the input it\n// returns false. The output is null-terminated when the function succeeds.\nbool FastFixedDtoa(double v, int fractional_count,\n                   Vector<char> buffer, int* length, int* decimal_point);\n\n}  // namespace double_conversion\n\n#endif  // DOUBLE_CONVERSION_FIXED_DTOA_H_\n"
  },
  {
    "path": "native/iosTest/Pods/DoubleConversion/double-conversion/ieee.h",
    "content": "// Copyright 2012 the V8 project authors. All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n//       notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n//       copyright notice, this list of conditions and the following\n//       disclaimer in the documentation and/or other materials provided\n//       with the distribution.\n//     * Neither the name of Google Inc. nor the names of its\n//       contributors may be used to endorse or promote products derived\n//       from this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n#ifndef DOUBLE_CONVERSION_DOUBLE_H_\n#define DOUBLE_CONVERSION_DOUBLE_H_\n\n#include \"diy-fp.h\"\n\nnamespace double_conversion {\n\n// We assume that doubles and uint64_t have the same endianness.\nstatic uint64_t double_to_uint64(double d) { return BitCast<uint64_t>(d); }\nstatic double uint64_to_double(uint64_t d64) { return BitCast<double>(d64); }\nstatic uint32_t float_to_uint32(float f) { return BitCast<uint32_t>(f); }\nstatic float uint32_to_float(uint32_t d32) { return BitCast<float>(d32); }\n\n// Helper functions for doubles.\nclass Double {\n public:\n  static const uint64_t kSignMask = UINT64_2PART_C(0x80000000, 00000000);\n  static const uint64_t kExponentMask = UINT64_2PART_C(0x7FF00000, 00000000);\n  static const uint64_t kSignificandMask = UINT64_2PART_C(0x000FFFFF, FFFFFFFF);\n  static const uint64_t kHiddenBit = UINT64_2PART_C(0x00100000, 00000000);\n  static const int kPhysicalSignificandSize = 52;  // Excludes the hidden bit.\n  static const int kSignificandSize = 53;\n\n  Double() : d64_(0) {}\n  explicit Double(double d) : d64_(double_to_uint64(d)) {}\n  explicit Double(uint64_t d64) : d64_(d64) {}\n  explicit Double(DiyFp diy_fp)\n    : d64_(DiyFpToUint64(diy_fp)) {}\n\n  // The value encoded by this Double must be greater or equal to +0.0.\n  // It must not be special (infinity, or NaN).\n  DiyFp AsDiyFp() const {\n    ASSERT(Sign() > 0);\n    ASSERT(!IsSpecial());\n    return DiyFp(Significand(), Exponent());\n  }\n\n  // The value encoded by this Double must be strictly greater than 0.\n  DiyFp AsNormalizedDiyFp() const {\n    ASSERT(value() > 0.0);\n    uint64_t f = Significand();\n    int e = Exponent();\n\n    // The current double could be a denormal.\n    while ((f & kHiddenBit) == 0) {\n      f <<= 1;\n      e--;\n    }\n    // Do the final shifts in one go.\n    f <<= DiyFp::kSignificandSize - kSignificandSize;\n    e -= DiyFp::kSignificandSize - kSignificandSize;\n    return DiyFp(f, e);\n  }\n\n  // Returns the double's bit as uint64.\n  uint64_t AsUint64() const {\n    return d64_;\n  }\n\n  // Returns the next greater double. Returns +infinity on input +infinity.\n  double NextDouble() const {\n    if (d64_ == kInfinity) return Double(kInfinity).value();\n    if (Sign() < 0 && Significand() == 0) {\n      // -0.0\n      return 0.0;\n    }\n    if (Sign() < 0) {\n      return Double(d64_ - 1).value();\n    } else {\n      return Double(d64_ + 1).value();\n    }\n  }\n\n  double PreviousDouble() const {\n    if (d64_ == (kInfinity | kSignMask)) return -Double::Infinity();\n    if (Sign() < 0) {\n      return Double(d64_ + 1).value();\n    } else {\n      if (Significand() == 0) return -0.0;\n      return Double(d64_ - 1).value();\n    }\n  }\n\n  int Exponent() const {\n    if (IsDenormal()) return kDenormalExponent;\n\n    uint64_t d64 = AsUint64();\n    int biased_e =\n        static_cast<int>((d64 & kExponentMask) >> kPhysicalSignificandSize);\n    return biased_e - kExponentBias;\n  }\n\n  uint64_t Significand() const {\n    uint64_t d64 = AsUint64();\n    uint64_t significand = d64 & kSignificandMask;\n    if (!IsDenormal()) {\n      return significand + kHiddenBit;\n    } else {\n      return significand;\n    }\n  }\n\n  // Returns true if the double is a denormal.\n  bool IsDenormal() const {\n    uint64_t d64 = AsUint64();\n    return (d64 & kExponentMask) == 0;\n  }\n\n  // We consider denormals not to be special.\n  // Hence only Infinity and NaN are special.\n  bool IsSpecial() const {\n    uint64_t d64 = AsUint64();\n    return (d64 & kExponentMask) == kExponentMask;\n  }\n\n  bool IsNan() const {\n    uint64_t d64 = AsUint64();\n    return ((d64 & kExponentMask) == kExponentMask) &&\n        ((d64 & kSignificandMask) != 0);\n  }\n\n  bool IsInfinite() const {\n    uint64_t d64 = AsUint64();\n    return ((d64 & kExponentMask) == kExponentMask) &&\n        ((d64 & kSignificandMask) == 0);\n  }\n\n  int Sign() const {\n    uint64_t d64 = AsUint64();\n    return (d64 & kSignMask) == 0? 1: -1;\n  }\n\n  // Precondition: the value encoded by this Double must be greater or equal\n  // than +0.0.\n  DiyFp UpperBoundary() const {\n    ASSERT(Sign() > 0);\n    return DiyFp(Significand() * 2 + 1, Exponent() - 1);\n  }\n\n  // Computes the two boundaries of this.\n  // The bigger boundary (m_plus) is normalized. The lower boundary has the same\n  // exponent as m_plus.\n  // Precondition: the value encoded by this Double must be greater than 0.\n  void NormalizedBoundaries(DiyFp* out_m_minus, DiyFp* out_m_plus) const {\n    ASSERT(value() > 0.0);\n    DiyFp v = this->AsDiyFp();\n    DiyFp m_plus = DiyFp::Normalize(DiyFp((v.f() << 1) + 1, v.e() - 1));\n    DiyFp m_minus;\n    if (LowerBoundaryIsCloser()) {\n      m_minus = DiyFp((v.f() << 2) - 1, v.e() - 2);\n    } else {\n      m_minus = DiyFp((v.f() << 1) - 1, v.e() - 1);\n    }\n    m_minus.set_f(m_minus.f() << (m_minus.e() - m_plus.e()));\n    m_minus.set_e(m_plus.e());\n    *out_m_plus = m_plus;\n    *out_m_minus = m_minus;\n  }\n\n  bool LowerBoundaryIsCloser() const {\n    // The boundary is closer if the significand is of the form f == 2^p-1 then\n    // the lower boundary is closer.\n    // Think of v = 1000e10 and v- = 9999e9.\n    // Then the boundary (== (v - v-)/2) is not just at a distance of 1e9 but\n    // at a distance of 1e8.\n    // The only exception is for the smallest normal: the largest denormal is\n    // at the same distance as its successor.\n    // Note: denormals have the same exponent as the smallest normals.\n    bool physical_significand_is_zero = ((AsUint64() & kSignificandMask) == 0);\n    return physical_significand_is_zero && (Exponent() != kDenormalExponent);\n  }\n\n  double value() const { return uint64_to_double(d64_); }\n\n  // Returns the significand size for a given order of magnitude.\n  // If v = f*2^e with 2^p-1 <= f <= 2^p then p+e is v's order of magnitude.\n  // This function returns the number of significant binary digits v will have\n  // once it's encoded into a double. In almost all cases this is equal to\n  // kSignificandSize. The only exceptions are denormals. They start with\n  // leading zeroes and their effective significand-size is hence smaller.\n  static int SignificandSizeForOrderOfMagnitude(int order) {\n    if (order >= (kDenormalExponent + kSignificandSize)) {\n      return kSignificandSize;\n    }\n    if (order <= kDenormalExponent) return 0;\n    return order - kDenormalExponent;\n  }\n\n  static double Infinity() {\n    return Double(kInfinity).value();\n  }\n\n  static double NaN() {\n    return Double(kNaN).value();\n  }\n\n private:\n  static const int kExponentBias = 0x3FF + kPhysicalSignificandSize;\n  static const int kDenormalExponent = -kExponentBias + 1;\n  static const int kMaxExponent = 0x7FF - kExponentBias;\n  static const uint64_t kInfinity = UINT64_2PART_C(0x7FF00000, 00000000);\n  static const uint64_t kNaN = UINT64_2PART_C(0x7FF80000, 00000000);\n\n  const uint64_t d64_;\n\n  static uint64_t DiyFpToUint64(DiyFp diy_fp) {\n    uint64_t significand = diy_fp.f();\n    int exponent = diy_fp.e();\n    while (significand > kHiddenBit + kSignificandMask) {\n      significand >>= 1;\n      exponent++;\n    }\n    if (exponent >= kMaxExponent) {\n      return kInfinity;\n    }\n    if (exponent < kDenormalExponent) {\n      return 0;\n    }\n    while (exponent > kDenormalExponent && (significand & kHiddenBit) == 0) {\n      significand <<= 1;\n      exponent--;\n    }\n    uint64_t biased_exponent;\n    if (exponent == kDenormalExponent && (significand & kHiddenBit) == 0) {\n      biased_exponent = 0;\n    } else {\n      biased_exponent = static_cast<uint64_t>(exponent + kExponentBias);\n    }\n    return (significand & kSignificandMask) |\n        (biased_exponent << kPhysicalSignificandSize);\n  }\n\n  DISALLOW_COPY_AND_ASSIGN(Double);\n};\n\nclass Single {\n public:\n  static const uint32_t kSignMask = 0x80000000;\n  static const uint32_t kExponentMask = 0x7F800000;\n  static const uint32_t kSignificandMask = 0x007FFFFF;\n  static const uint32_t kHiddenBit = 0x00800000;\n  static const int kPhysicalSignificandSize = 23;  // Excludes the hidden bit.\n  static const int kSignificandSize = 24;\n\n  Single() : d32_(0) {}\n  explicit Single(float f) : d32_(float_to_uint32(f)) {}\n  explicit Single(uint32_t d32) : d32_(d32) {}\n\n  // The value encoded by this Single must be greater or equal to +0.0.\n  // It must not be special (infinity, or NaN).\n  DiyFp AsDiyFp() const {\n    ASSERT(Sign() > 0);\n    ASSERT(!IsSpecial());\n    return DiyFp(Significand(), Exponent());\n  }\n\n  // Returns the single's bit as uint64.\n  uint32_t AsUint32() const {\n    return d32_;\n  }\n\n  int Exponent() const {\n    if (IsDenormal()) return kDenormalExponent;\n\n    uint32_t d32 = AsUint32();\n    int biased_e =\n        static_cast<int>((d32 & kExponentMask) >> kPhysicalSignificandSize);\n    return biased_e - kExponentBias;\n  }\n\n  uint32_t Significand() const {\n    uint32_t d32 = AsUint32();\n    uint32_t significand = d32 & kSignificandMask;\n    if (!IsDenormal()) {\n      return significand + kHiddenBit;\n    } else {\n      return significand;\n    }\n  }\n\n  // Returns true if the single is a denormal.\n  bool IsDenormal() const {\n    uint32_t d32 = AsUint32();\n    return (d32 & kExponentMask) == 0;\n  }\n\n  // We consider denormals not to be special.\n  // Hence only Infinity and NaN are special.\n  bool IsSpecial() const {\n    uint32_t d32 = AsUint32();\n    return (d32 & kExponentMask) == kExponentMask;\n  }\n\n  bool IsNan() const {\n    uint32_t d32 = AsUint32();\n    return ((d32 & kExponentMask) == kExponentMask) &&\n        ((d32 & kSignificandMask) != 0);\n  }\n\n  bool IsInfinite() const {\n    uint32_t d32 = AsUint32();\n    return ((d32 & kExponentMask) == kExponentMask) &&\n        ((d32 & kSignificandMask) == 0);\n  }\n\n  int Sign() const {\n    uint32_t d32 = AsUint32();\n    return (d32 & kSignMask) == 0? 1: -1;\n  }\n\n  // Computes the two boundaries of this.\n  // The bigger boundary (m_plus) is normalized. The lower boundary has the same\n  // exponent as m_plus.\n  // Precondition: the value encoded by this Single must be greater than 0.\n  void NormalizedBoundaries(DiyFp* out_m_minus, DiyFp* out_m_plus) const {\n    ASSERT(value() > 0.0);\n    DiyFp v = this->AsDiyFp();\n    DiyFp m_plus = DiyFp::Normalize(DiyFp((v.f() << 1) + 1, v.e() - 1));\n    DiyFp m_minus;\n    if (LowerBoundaryIsCloser()) {\n      m_minus = DiyFp((v.f() << 2) - 1, v.e() - 2);\n    } else {\n      m_minus = DiyFp((v.f() << 1) - 1, v.e() - 1);\n    }\n    m_minus.set_f(m_minus.f() << (m_minus.e() - m_plus.e()));\n    m_minus.set_e(m_plus.e());\n    *out_m_plus = m_plus;\n    *out_m_minus = m_minus;\n  }\n\n  // Precondition: the value encoded by this Single must be greater or equal\n  // than +0.0.\n  DiyFp UpperBoundary() const {\n    ASSERT(Sign() > 0);\n    return DiyFp(Significand() * 2 + 1, Exponent() - 1);\n  }\n\n  bool LowerBoundaryIsCloser() const {\n    // The boundary is closer if the significand is of the form f == 2^p-1 then\n    // the lower boundary is closer.\n    // Think of v = 1000e10 and v- = 9999e9.\n    // Then the boundary (== (v - v-)/2) is not just at a distance of 1e9 but\n    // at a distance of 1e8.\n    // The only exception is for the smallest normal: the largest denormal is\n    // at the same distance as its successor.\n    // Note: denormals have the same exponent as the smallest normals.\n    bool physical_significand_is_zero = ((AsUint32() & kSignificandMask) == 0);\n    return physical_significand_is_zero && (Exponent() != kDenormalExponent);\n  }\n\n  float value() const { return uint32_to_float(d32_); }\n\n  static float Infinity() {\n    return Single(kInfinity).value();\n  }\n\n  static float NaN() {\n    return Single(kNaN).value();\n  }\n\n private:\n  static const int kExponentBias = 0x7F + kPhysicalSignificandSize;\n  static const int kDenormalExponent = -kExponentBias + 1;\n  static const int kMaxExponent = 0xFF - kExponentBias;\n  static const uint32_t kInfinity = 0x7F800000;\n  static const uint32_t kNaN = 0x7FC00000;\n\n  const uint32_t d32_;\n\n  DISALLOW_COPY_AND_ASSIGN(Single);\n};\n\n}  // namespace double_conversion\n\n#endif  // DOUBLE_CONVERSION_DOUBLE_H_\n"
  },
  {
    "path": "native/iosTest/Pods/DoubleConversion/double-conversion/strtod.cc",
    "content": "// Copyright 2010 the V8 project authors. All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n//       notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n//       copyright notice, this list of conditions and the following\n//       disclaimer in the documentation and/or other materials provided\n//       with the distribution.\n//     * Neither the name of Google Inc. nor the names of its\n//       contributors may be used to endorse or promote products derived\n//       from this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n#include <stdarg.h>\n#include <limits.h>\n\n#include \"strtod.h\"\n#include \"bignum.h\"\n#include \"cached-powers.h\"\n#include \"ieee.h\"\n\nnamespace double_conversion {\n\n// 2^53 = 9007199254740992.\n// Any integer with at most 15 decimal digits will hence fit into a double\n// (which has a 53bit significand) without loss of precision.\nstatic const int kMaxExactDoubleIntegerDecimalDigits = 15;\n// 2^64 = 18446744073709551616 > 10^19\nstatic const int kMaxUint64DecimalDigits = 19;\n\n// Max double: 1.7976931348623157 x 10^308\n// Min non-zero double: 4.9406564584124654 x 10^-324\n// Any x >= 10^309 is interpreted as +infinity.\n// Any x <= 10^-324 is interpreted as 0.\n// Note that 2.5e-324 (despite being smaller than the min double) will be read\n// as non-zero (equal to the min non-zero double).\nstatic const int kMaxDecimalPower = 309;\nstatic const int kMinDecimalPower = -324;\n\n// 2^64 = 18446744073709551616\nstatic const uint64_t kMaxUint64 = UINT64_2PART_C(0xFFFFFFFF, FFFFFFFF);\n\n\nstatic const double exact_powers_of_ten[] = {\n  1.0,  // 10^0\n  10.0,\n  100.0,\n  1000.0,\n  10000.0,\n  100000.0,\n  1000000.0,\n  10000000.0,\n  100000000.0,\n  1000000000.0,\n  10000000000.0,  // 10^10\n  100000000000.0,\n  1000000000000.0,\n  10000000000000.0,\n  100000000000000.0,\n  1000000000000000.0,\n  10000000000000000.0,\n  100000000000000000.0,\n  1000000000000000000.0,\n  10000000000000000000.0,\n  100000000000000000000.0,  // 10^20\n  1000000000000000000000.0,\n  // 10^22 = 0x21e19e0c9bab2400000 = 0x878678326eac9 * 2^22\n  10000000000000000000000.0\n};\nstatic const int kExactPowersOfTenSize = ARRAY_SIZE(exact_powers_of_ten);\n\n// Maximum number of significant digits in the decimal representation.\n// In fact the value is 772 (see conversions.cc), but to give us some margin\n// we round up to 780.\nstatic const int kMaxSignificantDecimalDigits = 780;\n\nstatic Vector<const char> TrimLeadingZeros(Vector<const char> buffer) {\n  for (int i = 0; i < buffer.length(); i++) {\n    if (buffer[i] != '0') {\n      return buffer.SubVector(i, buffer.length());\n    }\n  }\n  return Vector<const char>(buffer.start(), 0);\n}\n\n\nstatic Vector<const char> TrimTrailingZeros(Vector<const char> buffer) {\n  for (int i = buffer.length() - 1; i >= 0; --i) {\n    if (buffer[i] != '0') {\n      return buffer.SubVector(0, i + 1);\n    }\n  }\n  return Vector<const char>(buffer.start(), 0);\n}\n\n\nstatic void CutToMaxSignificantDigits(Vector<const char> buffer,\n                                       int exponent,\n                                       char* significant_buffer,\n                                       int* significant_exponent) {\n  for (int i = 0; i < kMaxSignificantDecimalDigits - 1; ++i) {\n    significant_buffer[i] = buffer[i];\n  }\n  // The input buffer has been trimmed. Therefore the last digit must be\n  // different from '0'.\n  ASSERT(buffer[buffer.length() - 1] != '0');\n  // Set the last digit to be non-zero. This is sufficient to guarantee\n  // correct rounding.\n  significant_buffer[kMaxSignificantDecimalDigits - 1] = '1';\n  *significant_exponent =\n      exponent + (buffer.length() - kMaxSignificantDecimalDigits);\n}\n\n\n// Trims the buffer and cuts it to at most kMaxSignificantDecimalDigits.\n// If possible the input-buffer is reused, but if the buffer needs to be\n// modified (due to cutting), then the input needs to be copied into the\n// buffer_copy_space.\nstatic void TrimAndCut(Vector<const char> buffer, int exponent,\n                       char* buffer_copy_space, int space_size,\n                       Vector<const char>* trimmed, int* updated_exponent) {\n  Vector<const char> left_trimmed = TrimLeadingZeros(buffer);\n  Vector<const char> right_trimmed = TrimTrailingZeros(left_trimmed);\n  exponent += left_trimmed.length() - right_trimmed.length();\n  if (right_trimmed.length() > kMaxSignificantDecimalDigits) {\n    (void) space_size;  // Mark variable as used.\n    ASSERT(space_size >= kMaxSignificantDecimalDigits);\n    CutToMaxSignificantDigits(right_trimmed, exponent,\n                              buffer_copy_space, updated_exponent);\n    *trimmed = Vector<const char>(buffer_copy_space,\n                                 kMaxSignificantDecimalDigits);\n  } else {\n    *trimmed = right_trimmed;\n    *updated_exponent = exponent;\n  }\n}\n\n\n// Reads digits from the buffer and converts them to a uint64.\n// Reads in as many digits as fit into a uint64.\n// When the string starts with \"1844674407370955161\" no further digit is read.\n// Since 2^64 = 18446744073709551616 it would still be possible read another\n// digit if it was less or equal than 6, but this would complicate the code.\nstatic uint64_t ReadUint64(Vector<const char> buffer,\n                           int* number_of_read_digits) {\n  uint64_t result = 0;\n  int i = 0;\n  while (i < buffer.length() && result <= (kMaxUint64 / 10 - 1)) {\n    int digit = buffer[i++] - '0';\n    ASSERT(0 <= digit && digit <= 9);\n    result = 10 * result + digit;\n  }\n  *number_of_read_digits = i;\n  return result;\n}\n\n\n// Reads a DiyFp from the buffer.\n// The returned DiyFp is not necessarily normalized.\n// If remaining_decimals is zero then the returned DiyFp is accurate.\n// Otherwise it has been rounded and has error of at most 1/2 ulp.\nstatic void ReadDiyFp(Vector<const char> buffer,\n                      DiyFp* result,\n                      int* remaining_decimals) {\n  int read_digits;\n  uint64_t significand = ReadUint64(buffer, &read_digits);\n  if (buffer.length() == read_digits) {\n    *result = DiyFp(significand, 0);\n    *remaining_decimals = 0;\n  } else {\n    // Round the significand.\n    if (buffer[read_digits] >= '5') {\n      significand++;\n    }\n    // Compute the binary exponent.\n    int exponent = 0;\n    *result = DiyFp(significand, exponent);\n    *remaining_decimals = buffer.length() - read_digits;\n  }\n}\n\n\nstatic bool DoubleStrtod(Vector<const char> trimmed,\n                         int exponent,\n                         double* result) {\n#if !defined(DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS)\n  // On x86 the floating-point stack can be 64 or 80 bits wide. If it is\n  // 80 bits wide (as is the case on Linux) then double-rounding occurs and the\n  // result is not accurate.\n  // We know that Windows32 uses 64 bits and is therefore accurate.\n  // Note that the ARM simulator is compiled for 32bits. It therefore exhibits\n  // the same problem.\n  return false;\n#endif\n  if (trimmed.length() <= kMaxExactDoubleIntegerDecimalDigits) {\n    int read_digits;\n    // The trimmed input fits into a double.\n    // If the 10^exponent (resp. 10^-exponent) fits into a double too then we\n    // can compute the result-double simply by multiplying (resp. dividing) the\n    // two numbers.\n    // This is possible because IEEE guarantees that floating-point operations\n    // return the best possible approximation.\n    if (exponent < 0 && -exponent < kExactPowersOfTenSize) {\n      // 10^-exponent fits into a double.\n      *result = static_cast<double>(ReadUint64(trimmed, &read_digits));\n      ASSERT(read_digits == trimmed.length());\n      *result /= exact_powers_of_ten[-exponent];\n      return true;\n    }\n    if (0 <= exponent && exponent < kExactPowersOfTenSize) {\n      // 10^exponent fits into a double.\n      *result = static_cast<double>(ReadUint64(trimmed, &read_digits));\n      ASSERT(read_digits == trimmed.length());\n      *result *= exact_powers_of_ten[exponent];\n      return true;\n    }\n    int remaining_digits =\n        kMaxExactDoubleIntegerDecimalDigits - trimmed.length();\n    if ((0 <= exponent) &&\n        (exponent - remaining_digits < kExactPowersOfTenSize)) {\n      // The trimmed string was short and we can multiply it with\n      // 10^remaining_digits. As a result the remaining exponent now fits\n      // into a double too.\n      *result = static_cast<double>(ReadUint64(trimmed, &read_digits));\n      ASSERT(read_digits == trimmed.length());\n      *result *= exact_powers_of_ten[remaining_digits];\n      *result *= exact_powers_of_ten[exponent - remaining_digits];\n      return true;\n    }\n  }\n  return false;\n}\n\n\n// Returns 10^exponent as an exact DiyFp.\n// The given exponent must be in the range [1; kDecimalExponentDistance[.\nstatic DiyFp AdjustmentPowerOfTen(int exponent) {\n  ASSERT(0 < exponent);\n  ASSERT(exponent < PowersOfTenCache::kDecimalExponentDistance);\n  // Simply hardcode the remaining powers for the given decimal exponent\n  // distance.\n  ASSERT(PowersOfTenCache::kDecimalExponentDistance == 8);\n  switch (exponent) {\n    case 1: return DiyFp(UINT64_2PART_C(0xa0000000, 00000000), -60);\n    case 2: return DiyFp(UINT64_2PART_C(0xc8000000, 00000000), -57);\n    case 3: return DiyFp(UINT64_2PART_C(0xfa000000, 00000000), -54);\n    case 4: return DiyFp(UINT64_2PART_C(0x9c400000, 00000000), -50);\n    case 5: return DiyFp(UINT64_2PART_C(0xc3500000, 00000000), -47);\n    case 6: return DiyFp(UINT64_2PART_C(0xf4240000, 00000000), -44);\n    case 7: return DiyFp(UINT64_2PART_C(0x98968000, 00000000), -40);\n    default:\n      UNREACHABLE();\n  }\n}\n\n\n// If the function returns true then the result is the correct double.\n// Otherwise it is either the correct double or the double that is just below\n// the correct double.\nstatic bool DiyFpStrtod(Vector<const char> buffer,\n                        int exponent,\n                        double* result) {\n  DiyFp input;\n  int remaining_decimals;\n  ReadDiyFp(buffer, &input, &remaining_decimals);\n  // Since we may have dropped some digits the input is not accurate.\n  // If remaining_decimals is different than 0 than the error is at most\n  // .5 ulp (unit in the last place).\n  // We don't want to deal with fractions and therefore keep a common\n  // denominator.\n  const int kDenominatorLog = 3;\n  const int kDenominator = 1 << kDenominatorLog;\n  // Move the remaining decimals into the exponent.\n  exponent += remaining_decimals;\n  uint64_t error = (remaining_decimals == 0 ? 0 : kDenominator / 2);\n\n  int old_e = input.e();\n  input.Normalize();\n  error <<= old_e - input.e();\n\n  ASSERT(exponent <= PowersOfTenCache::kMaxDecimalExponent);\n  if (exponent < PowersOfTenCache::kMinDecimalExponent) {\n    *result = 0.0;\n    return true;\n  }\n  DiyFp cached_power;\n  int cached_decimal_exponent;\n  PowersOfTenCache::GetCachedPowerForDecimalExponent(exponent,\n                                                     &cached_power,\n                                                     &cached_decimal_exponent);\n\n  if (cached_decimal_exponent != exponent) {\n    int adjustment_exponent = exponent - cached_decimal_exponent;\n    DiyFp adjustment_power = AdjustmentPowerOfTen(adjustment_exponent);\n    input.Multiply(adjustment_power);\n    if (kMaxUint64DecimalDigits - buffer.length() >= adjustment_exponent) {\n      // The product of input with the adjustment power fits into a 64 bit\n      // integer.\n      ASSERT(DiyFp::kSignificandSize == 64);\n    } else {\n      // The adjustment power is exact. There is hence only an error of 0.5.\n      error += kDenominator / 2;\n    }\n  }\n\n  input.Multiply(cached_power);\n  // The error introduced by a multiplication of a*b equals\n  //   error_a + error_b + error_a*error_b/2^64 + 0.5\n  // Substituting a with 'input' and b with 'cached_power' we have\n  //   error_b = 0.5  (all cached powers have an error of less than 0.5 ulp),\n  //   error_ab = 0 or 1 / kDenominator > error_a*error_b/ 2^64\n  int error_b = kDenominator / 2;\n  int error_ab = (error == 0 ? 0 : 1);  // We round up to 1.\n  int fixed_error = kDenominator / 2;\n  error += error_b + error_ab + fixed_error;\n\n  old_e = input.e();\n  input.Normalize();\n  error <<= old_e - input.e();\n\n  // See if the double's significand changes if we add/subtract the error.\n  int order_of_magnitude = DiyFp::kSignificandSize + input.e();\n  int effective_significand_size =\n      Double::SignificandSizeForOrderOfMagnitude(order_of_magnitude);\n  int precision_digits_count =\n      DiyFp::kSignificandSize - effective_significand_size;\n  if (precision_digits_count + kDenominatorLog >= DiyFp::kSignificandSize) {\n    // This can only happen for very small denormals. In this case the\n    // half-way multiplied by the denominator exceeds the range of an uint64.\n    // Simply shift everything to the right.\n    int shift_amount = (precision_digits_count + kDenominatorLog) -\n        DiyFp::kSignificandSize + 1;\n    input.set_f(input.f() >> shift_amount);\n    input.set_e(input.e() + shift_amount);\n    // We add 1 for the lost precision of error, and kDenominator for\n    // the lost precision of input.f().\n    error = (error >> shift_amount) + 1 + kDenominator;\n    precision_digits_count -= shift_amount;\n  }\n  // We use uint64_ts now. This only works if the DiyFp uses uint64_ts too.\n  ASSERT(DiyFp::kSignificandSize == 64);\n  ASSERT(precision_digits_count < 64);\n  uint64_t one64 = 1;\n  uint64_t precision_bits_mask = (one64 << precision_digits_count) - 1;\n  uint64_t precision_bits = input.f() & precision_bits_mask;\n  uint64_t half_way = one64 << (precision_digits_count - 1);\n  precision_bits *= kDenominator;\n  half_way *= kDenominator;\n  DiyFp rounded_input(input.f() >> precision_digits_count,\n                      input.e() + precision_digits_count);\n  if (precision_bits >= half_way + error) {\n    rounded_input.set_f(rounded_input.f() + 1);\n  }\n  // If the last_bits are too close to the half-way case than we are too\n  // inaccurate and round down. In this case we return false so that we can\n  // fall back to a more precise algorithm.\n\n  *result = Double(rounded_input).value();\n  if (half_way - error < precision_bits && precision_bits < half_way + error) {\n    // Too imprecise. The caller will have to fall back to a slower version.\n    // However the returned number is guaranteed to be either the correct\n    // double, or the next-lower double.\n    return false;\n  } else {\n    return true;\n  }\n}\n\n\n// Returns\n//   - -1 if buffer*10^exponent < diy_fp.\n//   -  0 if buffer*10^exponent == diy_fp.\n//   - +1 if buffer*10^exponent > diy_fp.\n// Preconditions:\n//   buffer.length() + exponent <= kMaxDecimalPower + 1\n//   buffer.length() + exponent > kMinDecimalPower\n//   buffer.length() <= kMaxDecimalSignificantDigits\nstatic int CompareBufferWithDiyFp(Vector<const char> buffer,\n                                  int exponent,\n                                  DiyFp diy_fp) {\n  ASSERT(buffer.length() + exponent <= kMaxDecimalPower + 1);\n  ASSERT(buffer.length() + exponent > kMinDecimalPower);\n  ASSERT(buffer.length() <= kMaxSignificantDecimalDigits);\n  // Make sure that the Bignum will be able to hold all our numbers.\n  // Our Bignum implementation has a separate field for exponents. Shifts will\n  // consume at most one bigit (< 64 bits).\n  // ln(10) == 3.3219...\n  ASSERT(((kMaxDecimalPower + 1) * 333 / 100) < Bignum::kMaxSignificantBits);\n  Bignum buffer_bignum;\n  Bignum diy_fp_bignum;\n  buffer_bignum.AssignDecimalString(buffer);\n  diy_fp_bignum.AssignUInt64(diy_fp.f());\n  if (exponent >= 0) {\n    buffer_bignum.MultiplyByPowerOfTen(exponent);\n  } else {\n    diy_fp_bignum.MultiplyByPowerOfTen(-exponent);\n  }\n  if (diy_fp.e() > 0) {\n    diy_fp_bignum.ShiftLeft(diy_fp.e());\n  } else {\n    buffer_bignum.ShiftLeft(-diy_fp.e());\n  }\n  return Bignum::Compare(buffer_bignum, diy_fp_bignum);\n}\n\n\n// Returns true if the guess is the correct double.\n// Returns false, when guess is either correct or the next-lower double.\nstatic bool ComputeGuess(Vector<const char> trimmed, int exponent,\n                         double* guess) {\n  if (trimmed.length() == 0) {\n    *guess = 0.0;\n    return true;\n  }\n  if (exponent + trimmed.length() - 1 >= kMaxDecimalPower) {\n    *guess = Double::Infinity();\n    return true;\n  }\n  if (exponent + trimmed.length() <= kMinDecimalPower) {\n    *guess = 0.0;\n    return true;\n  }\n\n  if (DoubleStrtod(trimmed, exponent, guess) ||\n      DiyFpStrtod(trimmed, exponent, guess)) {\n    return true;\n  }\n  if (*guess == Double::Infinity()) {\n    return true;\n  }\n  return false;\n}\n\ndouble Strtod(Vector<const char> buffer, int exponent) {\n  char copy_buffer[kMaxSignificantDecimalDigits];\n  Vector<const char> trimmed;\n  int updated_exponent;\n  TrimAndCut(buffer, exponent, copy_buffer, kMaxSignificantDecimalDigits,\n             &trimmed, &updated_exponent);\n  exponent = updated_exponent;\n\n  double guess;\n  bool is_correct = ComputeGuess(trimmed, exponent, &guess);\n  if (is_correct) return guess;\n\n  DiyFp upper_boundary = Double(guess).UpperBoundary();\n  int comparison = CompareBufferWithDiyFp(trimmed, exponent, upper_boundary);\n  if (comparison < 0) {\n    return guess;\n  } else if (comparison > 0) {\n    return Double(guess).NextDouble();\n  } else if ((Double(guess).Significand() & 1) == 0) {\n    // Round towards even.\n    return guess;\n  } else {\n    return Double(guess).NextDouble();\n  }\n}\n\nfloat Strtof(Vector<const char> buffer, int exponent) {\n  char copy_buffer[kMaxSignificantDecimalDigits];\n  Vector<const char> trimmed;\n  int updated_exponent;\n  TrimAndCut(buffer, exponent, copy_buffer, kMaxSignificantDecimalDigits,\n             &trimmed, &updated_exponent);\n  exponent = updated_exponent;\n\n  double double_guess;\n  bool is_correct = ComputeGuess(trimmed, exponent, &double_guess);\n\n  float float_guess = static_cast<float>(double_guess);\n  if (float_guess == double_guess) {\n    // This shortcut triggers for integer values.\n    return float_guess;\n  }\n\n  // We must catch double-rounding. Say the double has been rounded up, and is\n  // now a boundary of a float, and rounds up again. This is why we have to\n  // look at previous too.\n  // Example (in decimal numbers):\n  //    input: 12349\n  //    high-precision (4 digits): 1235\n  //    low-precision (3 digits):\n  //       when read from input: 123\n  //       when rounded from high precision: 124.\n  // To do this we simply look at the neigbors of the correct result and see\n  // if they would round to the same float. If the guess is not correct we have\n  // to look at four values (since two different doubles could be the correct\n  // double).\n\n  double double_next = Double(double_guess).NextDouble();\n  double double_previous = Double(double_guess).PreviousDouble();\n\n  float f1 = static_cast<float>(double_previous);\n  float f2 = float_guess;\n  float f3 = static_cast<float>(double_next);\n  float f4;\n  if (is_correct) {\n    f4 = f3;\n  } else {\n    double double_next2 = Double(double_next).NextDouble();\n    f4 = static_cast<float>(double_next2);\n  }\n  (void) f2;  // Mark variable as used.\n  ASSERT(f1 <= f2 && f2 <= f3 && f3 <= f4);\n\n  // If the guess doesn't lie near a single-precision boundary we can simply\n  // return its float-value.\n  if (f1 == f4) {\n    return float_guess;\n  }\n\n  ASSERT((f1 != f2 && f2 == f3 && f3 == f4) ||\n         (f1 == f2 && f2 != f3 && f3 == f4) ||\n         (f1 == f2 && f2 == f3 && f3 != f4));\n\n  // guess and next are the two possible canditates (in the same way that\n  // double_guess was the lower candidate for a double-precision guess).\n  float guess = f1;\n  float next = f4;\n  DiyFp upper_boundary;\n  if (guess == 0.0f) {\n    float min_float = 1e-45f;\n    upper_boundary = Double(static_cast<double>(min_float) / 2).AsDiyFp();\n  } else {\n    upper_boundary = Single(guess).UpperBoundary();\n  }\n  int comparison = CompareBufferWithDiyFp(trimmed, exponent, upper_boundary);\n  if (comparison < 0) {\n    return guess;\n  } else if (comparison > 0) {\n    return next;\n  } else if ((Single(guess).Significand() & 1) == 0) {\n    // Round towards even.\n    return guess;\n  } else {\n    return next;\n  }\n}\n\n}  // namespace double_conversion\n"
  },
  {
    "path": "native/iosTest/Pods/DoubleConversion/double-conversion/strtod.h",
    "content": "// Copyright 2010 the V8 project authors. All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n//       notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n//       copyright notice, this list of conditions and the following\n//       disclaimer in the documentation and/or other materials provided\n//       with the distribution.\n//     * Neither the name of Google Inc. nor the names of its\n//       contributors may be used to endorse or promote products derived\n//       from this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n#ifndef DOUBLE_CONVERSION_STRTOD_H_\n#define DOUBLE_CONVERSION_STRTOD_H_\n\n#include \"utils.h\"\n\nnamespace double_conversion {\n\n// The buffer must only contain digits in the range [0-9]. It must not\n// contain a dot or a sign. It must not start with '0', and must not be empty.\ndouble Strtod(Vector<const char> buffer, int exponent);\n\n// The buffer must only contain digits in the range [0-9]. It must not\n// contain a dot or a sign. It must not start with '0', and must not be empty.\nfloat Strtof(Vector<const char> buffer, int exponent);\n\n}  // namespace double_conversion\n\n#endif  // DOUBLE_CONVERSION_STRTOD_H_\n"
  },
  {
    "path": "native/iosTest/Pods/DoubleConversion/double-conversion/utils.h",
    "content": "// Copyright 2010 the V8 project authors. All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n//       notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n//       copyright notice, this list of conditions and the following\n//       disclaimer in the documentation and/or other materials provided\n//       with the distribution.\n//     * Neither the name of Google Inc. nor the names of its\n//       contributors may be used to endorse or promote products derived\n//       from this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n#ifndef DOUBLE_CONVERSION_UTILS_H_\n#define DOUBLE_CONVERSION_UTILS_H_\n\n#include <stdlib.h>\n#include <string.h>\n\n#include <assert.h>\n#ifndef ASSERT\n#define ASSERT(condition)         \\\n    assert(condition);\n#endif\n#ifndef UNIMPLEMENTED\n#define UNIMPLEMENTED() (abort())\n#endif\n#ifndef UNREACHABLE\n#define UNREACHABLE()   (abort())\n#endif\n\n// Double operations detection based on target architecture.\n// Linux uses a 80bit wide floating point stack on x86. This induces double\n// rounding, which in turn leads to wrong results.\n// An easy way to test if the floating-point operations are correct is to\n// evaluate: 89255.0/1e22. If the floating-point stack is 64 bits wide then\n// the result is equal to 89255e-22.\n// The best way to test this, is to create a division-function and to compare\n// the output of the division with the expected result. (Inlining must be\n// disabled.)\n// On Linux,x86 89255e-22 != Div_double(89255.0/1e22)\n#if defined(_M_X64) || defined(__x86_64__) || \\\n    defined(__ARMEL__) || defined(__avr32__) || \\\n    defined(__hppa__) || defined(__ia64__) || \\\n    defined(__mips__) || \\\n    defined(__powerpc__) || defined(__ppc__) || defined(__ppc64__) || \\\n    defined(__sparc__) || defined(__sparc) || defined(__s390__) || \\\n    defined(__SH4__) || defined(__alpha__) || \\\n    defined(_MIPS_ARCH_MIPS32R2) || \\\n    defined(__AARCH64EL__)\n#define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1\n#elif defined(__mc68000__)\n#undef DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS\n#elif defined(_M_IX86) || defined(__i386__) || defined(__i386)\n#if defined(_WIN32)\n// Windows uses a 64bit wide floating point stack.\n#define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1\n#else\n#undef DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS\n#endif  // _WIN32\n#else\n#error Target architecture was not detected as supported by Double-Conversion.\n#endif\n\n#if defined(__GNUC__)\n#define DOUBLE_CONVERSION_UNUSED __attribute__((unused))\n#else\n#define DOUBLE_CONVERSION_UNUSED\n#endif\n\n#if defined(_WIN32) && !defined(__MINGW32__)\n\ntypedef signed char int8_t;\ntypedef unsigned char uint8_t;\ntypedef short int16_t;  // NOLINT\ntypedef unsigned short uint16_t;  // NOLINT\ntypedef int int32_t;\ntypedef unsigned int uint32_t;\ntypedef __int64 int64_t;\ntypedef unsigned __int64 uint64_t;\n// intptr_t and friends are defined in crtdefs.h through stdio.h.\n\n#else\n\n#include <stdint.h>\n\n#endif\n\n// The following macro works on both 32 and 64-bit platforms.\n// Usage: instead of writing 0x1234567890123456\n//      write UINT64_2PART_C(0x12345678,90123456);\n#define UINT64_2PART_C(a, b) (((static_cast<uint64_t>(a) << 32) + 0x##b##u))\n\n\n// The expression ARRAY_SIZE(a) is a compile-time constant of type\n// size_t which represents the number of elements of the given\n// array. You should only use ARRAY_SIZE on statically allocated\n// arrays.\n#ifndef ARRAY_SIZE\n#define ARRAY_SIZE(a)                                   \\\n  ((sizeof(a) / sizeof(*(a))) /                         \\\n  static_cast<size_t>(!(sizeof(a) % sizeof(*(a)))))\n#endif\n\n// A macro to disallow the evil copy constructor and operator= functions\n// This should be used in the private: declarations for a class\n#ifndef DISALLOW_COPY_AND_ASSIGN\n#define DISALLOW_COPY_AND_ASSIGN(TypeName)      \\\n  TypeName(const TypeName&);                    \\\n  void operator=(const TypeName&)\n#endif\n\n// A macro to disallow all the implicit constructors, namely the\n// default constructor, copy constructor and operator= functions.\n//\n// This should be used in the private: declarations for a class\n// that wants to prevent anyone from instantiating it. This is\n// especially useful for classes containing only static methods.\n#ifndef DISALLOW_IMPLICIT_CONSTRUCTORS\n#define DISALLOW_IMPLICIT_CONSTRUCTORS(TypeName) \\\n  TypeName();                                    \\\n  DISALLOW_COPY_AND_ASSIGN(TypeName)\n#endif\n\nnamespace double_conversion {\n\nstatic const int kCharSize = sizeof(char);\n\n// Returns the maximum of the two parameters.\ntemplate <typename T>\nstatic T Max(T a, T b) {\n  return a < b ? b : a;\n}\n\n\n// Returns the minimum of the two parameters.\ntemplate <typename T>\nstatic T Min(T a, T b) {\n  return a < b ? a : b;\n}\n\n\ninline int StrLength(const char* string) {\n  size_t length = strlen(string);\n  ASSERT(length == static_cast<size_t>(static_cast<int>(length)));\n  return static_cast<int>(length);\n}\n\n// This is a simplified version of V8's Vector class.\ntemplate <typename T>\nclass Vector {\n public:\n  Vector() : start_(NULL), length_(0) {}\n  Vector(T* data, int length) : start_(data), length_(length) {\n    ASSERT(length == 0 || (length > 0 && data != NULL));\n  }\n\n  // Returns a vector using the same backing storage as this one,\n  // spanning from and including 'from', to but not including 'to'.\n  Vector<T> SubVector(int from, int to) {\n    ASSERT(to <= length_);\n    ASSERT(from < to);\n    ASSERT(0 <= from);\n    return Vector<T>(start() + from, to - from);\n  }\n\n  // Returns the length of the vector.\n  int length() const { return length_; }\n\n  // Returns whether or not the vector is empty.\n  bool is_empty() const { return length_ == 0; }\n\n  // Returns the pointer to the start of the data in the vector.\n  T* start() const { return start_; }\n\n  // Access individual vector elements - checks bounds in debug mode.\n  T& operator[](int index) const {\n    ASSERT(0 <= index && index < length_);\n    return start_[index];\n  }\n\n  T& first() { return start_[0]; }\n\n  T& last() { return start_[length_ - 1]; }\n\n private:\n  T* start_;\n  int length_;\n};\n\n\n// Helper class for building result strings in a character buffer. The\n// purpose of the class is to use safe operations that checks the\n// buffer bounds on all operations in debug mode.\nclass StringBuilder {\n public:\n  StringBuilder(char* buffer, int size)\n      : buffer_(buffer, size), position_(0) { }\n\n  ~StringBuilder() { if (!is_finalized()) Finalize(); }\n\n  int size() const { return buffer_.length(); }\n\n  // Get the current position in the builder.\n  int position() const {\n    ASSERT(!is_finalized());\n    return position_;\n  }\n\n  // Reset the position.\n  void Reset() { position_ = 0; }\n\n  // Add a single character to the builder. It is not allowed to add\n  // 0-characters; use the Finalize() method to terminate the string\n  // instead.\n  void AddCharacter(char c) {\n    ASSERT(c != '\\0');\n    ASSERT(!is_finalized() && position_ < buffer_.length());\n    buffer_[position_++] = c;\n  }\n\n  // Add an entire string to the builder. Uses strlen() internally to\n  // compute the length of the input string.\n  void AddString(const char* s) {\n    AddSubstring(s, StrLength(s));\n  }\n\n  // Add the first 'n' characters of the given string 's' to the\n  // builder. The input string must have enough characters.\n  void AddSubstring(const char* s, int n) {\n    ASSERT(!is_finalized() && position_ + n < buffer_.length());\n    ASSERT(static_cast<size_t>(n) <= strlen(s));\n    memmove(&buffer_[position_], s, n * kCharSize);\n    position_ += n;\n  }\n\n\n  // Add character padding to the builder. If count is non-positive,\n  // nothing is added to the builder.\n  void AddPadding(char c, int count) {\n    for (int i = 0; i < count; i++) {\n      AddCharacter(c);\n    }\n  }\n\n  // Finalize the string by 0-terminating it and returning the buffer.\n  char* Finalize() {\n    ASSERT(!is_finalized() && position_ < buffer_.length());\n    buffer_[position_] = '\\0';\n    // Make sure nobody managed to add a 0-character to the\n    // buffer while building the string.\n    ASSERT(strlen(buffer_.start()) == static_cast<size_t>(position_));\n    position_ = -1;\n    ASSERT(is_finalized());\n    return buffer_.start();\n  }\n\n private:\n  Vector<char> buffer_;\n  int position_;\n\n  bool is_finalized() const { return position_ < 0; }\n\n  DISALLOW_IMPLICIT_CONSTRUCTORS(StringBuilder);\n};\n\n// The type-based aliasing rule allows the compiler to assume that pointers of\n// different types (for some definition of different) never alias each other.\n// Thus the following code does not work:\n//\n// float f = foo();\n// int fbits = *(int*)(&f);\n//\n// The compiler 'knows' that the int pointer can't refer to f since the types\n// don't match, so the compiler may cache f in a register, leaving random data\n// in fbits.  Using C++ style casts makes no difference, however a pointer to\n// char data is assumed to alias any other pointer.  This is the 'memcpy\n// exception'.\n//\n// Bit_cast uses the memcpy exception to move the bits from a variable of one\n// type of a variable of another type.  Of course the end result is likely to\n// be implementation dependent.  Most compilers (gcc-4.2 and MSVC 2005)\n// will completely optimize BitCast away.\n//\n// There is an additional use for BitCast.\n// Recent gccs will warn when they see casts that may result in breakage due to\n// the type-based aliasing rule.  If you have checked that there is no breakage\n// you can use BitCast to cast one pointer type to another.  This confuses gcc\n// enough that it can no longer see that you have cast one pointer type to\n// another thus avoiding the warning.\ntemplate <class Dest, class Source>\ninline Dest BitCast(const Source& source) {\n  // Compile time assertion: sizeof(Dest) == sizeof(Source)\n  // A compile error here means your Dest and Source have different sizes.\n  DOUBLE_CONVERSION_UNUSED\n      typedef char VerifySizesAreEqual[sizeof(Dest) == sizeof(Source) ? 1 : -1];\n\n  Dest dest;\n  memmove(&dest, &source, sizeof(dest));\n  return dest;\n}\n\ntemplate <class Dest, class Source>\ninline Dest BitCast(Source* source) {\n  return BitCast<Dest>(reinterpret_cast<uintptr_t>(source));\n}\n\n}  // namespace double_conversion\n\n#endif  // DOUBLE_CONVERSION_UTILS_H_\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/DoubleConversion.podspec.json",
    "content": "{\n  \"name\": \"DoubleConversion\",\n  \"version\": \"1.1.6\",\n  \"license\": {\n    \"type\": \"MIT\"\n  },\n  \"homepage\": \"https://github.com/google/double-conversion\",\n  \"summary\": \"Efficient binary-decimal and decimal-binary conversion routines for IEEE doubles\",\n  \"authors\": \"Google\",\n  \"prepare_command\": \"mv src double-conversion\",\n  \"source\": {\n    \"git\": \"https://github.com/google/double-conversion.git\",\n    \"tag\": \"v1.1.6\"\n  },\n  \"module_name\": \"DoubleConversion\",\n  \"header_dir\": \"double-conversion\",\n  \"source_files\": \"double-conversion/*.{h,cc}\",\n  \"compiler_flags\": \"-Wno-unreachable-code\",\n  \"user_target_xcconfig\": {\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_ROOT)/DoubleConversion\\\"\"\n  },\n  \"pod_target_xcconfig\": {\n    \"DEFINES_MODULE\": \"YES\"\n  },\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/FBLazyVector.podspec.json",
    "content": "{\n  \"name\": \"FBLazyVector\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"-\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"**/*.{c,h,m,mm,cpp}\",\n  \"header_dir\": \"FBLazyVector\"\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/RCT-Folly.podspec.json",
    "content": "{\n  \"name\": \"RCT-Folly\",\n  \"version\": \"2024.01.01.00\",\n  \"license\": {\n    \"type\": \"Apache License, Version 2.0\"\n  },\n  \"homepage\": \"https://github.com/facebook/folly\",\n  \"summary\": \"An open-source C++ library developed and used at Facebook.\",\n  \"authors\": \"Facebook\",\n  \"source\": {\n    \"git\": \"https://github.com/facebook/folly.git\",\n    \"tag\": \"v2024.01.01.00\"\n  },\n  \"module_name\": \"folly\",\n  \"header_mappings_dir\": \".\",\n  \"dependencies\": {\n    \"boost\": [\n\n    ],\n    \"DoubleConversion\": [\n\n    ],\n    \"glog\": [\n\n    ],\n    \"fmt\": [\n      \"9.1.0\"\n    ]\n  },\n  \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\",\n  \"preserve_paths\": \"folly/*.h\",\n  \"libraries\": \"c++abi\",\n  \"source_files\": [\n    \"folly/String.cpp\",\n    \"folly/Conv.cpp\",\n    \"folly/Demangle.cpp\",\n    \"folly/FileUtil.cpp\",\n    \"folly/Format.cpp\",\n    \"folly/lang/SafeAssert.cpp\",\n    \"folly/lang/ToAscii.cpp\",\n    \"folly/ScopeGuard.cpp\",\n    \"folly/Unicode.cpp\",\n    \"folly/dynamic.cpp\",\n    \"folly/json.cpp\",\n    \"folly/json_pointer.cpp\",\n    \"folly/container/detail/F14Table.cpp\",\n    \"folly/detail/Demangle.cpp\",\n    \"folly/detail/FileUtilDetail.cpp\",\n    \"folly/detail/SplitStringSimd.cpp\",\n    \"folly/detail/UniqueInstance.cpp\",\n    \"folly/hash/SpookyHashV2.cpp\",\n    \"folly/lang/Assume.cpp\",\n    \"folly/lang/CString.cpp\",\n    \"folly/lang/Exception.cpp\",\n    \"folly/memory/detail/MallocImpl.cpp\",\n    \"folly/net/NetOps.cpp\",\n    \"folly/portability/SysUio.cpp\",\n    \"folly/synchronization/SanitizeThread.cpp\",\n    \"folly/system/AtFork.cpp\",\n    \"folly/system/ThreadId.cpp\",\n    \"folly/*.h\",\n    \"folly/container/*.h\",\n    \"folly/container/detail/*.h\",\n    \"folly/detail/*.h\",\n    \"folly/functional/*.h\",\n    \"folly/hash/*.h\",\n    \"folly/lang/*.h\",\n    \"folly/memory/*.h\",\n    \"folly/memory/detail/*.h\",\n    \"folly/net/*.h\",\n    \"folly/net/detail/*.h\",\n    \"folly/portability/*.h\",\n    \"folly/system/*.h\",\n    \"folly/*.h\",\n    \"folly/container/*.h\",\n    \"folly/container/detail/*.h\",\n    \"folly/detail/*.h\",\n    \"folly/functional/*.h\",\n    \"folly/hash/*.h\",\n    \"folly/lang/*.h\",\n    \"folly/memory/*.h\",\n    \"folly/memory/detail/*.h\",\n    \"folly/net/*.h\",\n    \"folly/net/detail/*.h\",\n    \"folly/portability/*.h\",\n    \"folly/system/*.h\",\n    \"c++abi\"\n  ],\n  \"pod_target_xcconfig\": {\n    \"USE_HEADERMAP\": \"NO\",\n    \"DEFINES_MODULE\": \"YES\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\",\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_TARGET_SRCROOT)\\\" \\\"$(PODS_ROOT)/boost\\\" \\\"$(PODS_ROOT)/DoubleConversion\\\" \\\"$(PODS_ROOT)/fmt/include\\\"\",\n    \"OTHER_LDFLAGS\": \"\\\"-Wl,-U,_jump_fcontext\\\" \\\"-Wl,-U,_make_fcontext\\\"\"\n  },\n  \"user_target_xcconfig\": {\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_ROOT)/boost\\\"\"\n  },\n  \"default_subspecs\": \"Default\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"subspecs\": [\n    {\n      \"name\": \"Default\"\n    },\n    {\n      \"name\": \"Fabric\",\n      \"source_files\": [\n        \"folly/SharedMutex.cpp\",\n        \"folly/concurrency/CacheLocality.cpp\",\n        \"folly/detail/Futex.cpp\",\n        \"folly/synchronization/ParkingLot.cpp\",\n        \"folly/portability/Malloc.cpp\",\n        \"folly/concurrency/CacheLocality.h\",\n        \"folly/synchronization/*.h\",\n        \"folly/system/ThreadId.h\"\n      ],\n      \"preserve_paths\": [\n        \"folly/concurrency/CacheLocality.h\",\n        \"folly/synchronization/*.h\",\n        \"folly/system/ThreadId.h\"\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/RCTDeprecation.podspec.json",
    "content": "{\n  \"name\": \"RCTDeprecation\",\n  \"version\": \"0.74.6\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"license\": \"MIT\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v#{version}\"\n  },\n  \"summary\": \"Macros for marking APIs as deprecated\",\n  \"source_files\": [\n    \"Exported/*.h\",\n    \"RCTDeprecation.m\"\n  ],\n  \"pod_target_xcconfig\": {\n    \"DEFINES_MODULE\": \"YES\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\"\n  },\n  \"compiler_flags\": \"-Wnullable-to-nonnull-conversion -Wnullability-completeness\",\n  \"platforms\": {\n    \"osx\": null,\n    \"ios\": null,\n    \"tvos\": null,\n    \"visionos\": null,\n    \"watchos\": null\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/RCTRequired.podspec.json",
    "content": "{\n  \"name\": \"RCTRequired\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"-\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"**/*.{c,h,m,mm,cpp}\",\n  \"header_dir\": \"RCTRequired\"\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/RCTTypeSafety.podspec.json",
    "content": "{\n  \"name\": \"RCTTypeSafety\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"-\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"**/*.{c,h,m,mm,cpp}\",\n  \"header_dir\": \"RCTTypeSafety\",\n  \"pod_target_xcconfig\": {\n    \"USE_HEADERMAP\": \"YES\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\",\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_TARGET_SRCROOT)/Libraries/TypeSafety\\\"\"\n  },\n  \"dependencies\": {\n    \"FBLazyVector\": [\n      \"0.74.6\"\n    ],\n    \"RCTRequired\": [\n      \"0.74.6\"\n    ],\n    \"React-Core\": [\n      \"0.74.6\"\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-Codegen.podspec.json",
    "content": "{\n  \"name\": \"React-Codegen\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"Temp pod for generated files for React Native\",\n  \"homepage\": \"https://facebook.com/\",\n  \"license\": \"Unlicense\",\n  \"authors\": \"Facebook\",\n  \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -Wno-nullability-completeness -std=c++20\",\n  \"source\": {\n    \"git\": \"\"\n  },\n  \"header_mappings_dir\": \"./\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source_files\": \"**/*.{h,mm,cpp}\",\n  \"pod_target_xcconfig\": {\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_ROOT)/boost\\\" \\\"$(PODS_ROOT)/RCT-Folly\\\" \\\"$(PODS_ROOT)/DoubleConversion\\\" \\\"$(PODS_ROOT)/fmt/include\\\" \\\"${PODS_ROOT}/Headers/Public/React-Codegen/react/renderer/components\\\" \\\"$(PODS_ROOT)/Headers/Private/React-Fabric\\\" \\\"$(PODS_ROOT)/Headers/Private/React-RCTFabric\\\" \\\"$(PODS_ROOT)/Headers/Private/Yoga\\\" \\\"$(PODS_ROOT)/DoubleConversion\\\" \\\"$(PODS_ROOT)/fmt/include\\\" \\\"$(PODS_TARGET_SRCROOT)\\\"\",\n    \"FRAMEWORK_SEARCH_PATHS\": [\n\n    ]\n  },\n  \"dependencies\": {\n    \"React-jsiexecutor\": [\n\n    ],\n    \"RCT-Folly\": [\n\n    ],\n    \"RCTRequired\": [\n\n    ],\n    \"RCTTypeSafety\": [\n\n    ],\n    \"React-Core\": [\n\n    ],\n    \"React-jsi\": [\n\n    ],\n    \"ReactCommon/turbomodule/bridging\": [\n\n    ],\n    \"ReactCommon/turbomodule/core\": [\n\n    ],\n    \"React-NativeModulesApple\": [\n\n    ],\n    \"glog\": [\n\n    ],\n    \"DoubleConversion\": [\n\n    ],\n    \"React-graphics\": [\n\n    ],\n    \"React-rendererdebug\": [\n\n    ],\n    \"React-Fabric\": [\n\n    ],\n    \"React-FabricImage\": [\n\n    ],\n    \"React-debug\": [\n\n    ],\n    \"React-utils\": [\n\n    ],\n    \"React-featureflags\": [\n\n    ],\n    \"hermes-engine\": [\n\n    ]\n  },\n  \"script_phases\": {\n    \"name\": \"Generate Specs\",\n    \"execution_position\": \"before_compile\",\n    \"input_files\": [\n\n    ],\n    \"show_env_vars_in_log\": true,\n    \"output_files\": [\n      \"${DERIVED_FILE_DIR}/react-codegen.log\"\n    ],\n    \"script\": \"pushd \\\"$PODS_ROOT/../\\\" > /dev/null\\nRCT_SCRIPT_POD_INSTALLATION_ROOT=$(pwd)\\npopd >/dev/null\\n\\nexport RCT_SCRIPT_RN_DIR=$RCT_SCRIPT_POD_INSTALLATION_ROOT/../../node_modules/react-native\\nexport RCT_SCRIPT_APP_PATH=$RCT_SCRIPT_POD_INSTALLATION_ROOT/../..\\nexport RCT_SCRIPT_OUTPUT_DIR=$RCT_SCRIPT_POD_INSTALLATION_ROOT\\nexport RCT_SCRIPT_TYPE=withCodegenDiscovery\\n\\nSCRIPT_PHASES_SCRIPT=\\\"$RCT_SCRIPT_RN_DIR/scripts/react_native_pods_utils/script_phases.sh\\\"\\nWITH_ENVIRONMENT=\\\"$RCT_SCRIPT_RN_DIR/scripts/xcode/with-environment.sh\\\"\\n/bin/sh -c \\\"$WITH_ENVIRONMENT $SCRIPT_PHASES_SCRIPT\\\"\\n\"\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-Core.podspec.json",
    "content": "{\n  \"name\": \"React-Core\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"The core of React Native.\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"resource_bundles\": {\n    \"RCTI18nStrings\": [\n      \"React/I18n/strings/*.lproj\"\n    ]\n  },\n  \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\",\n  \"header_dir\": \"React\",\n  \"frameworks\": \"JavaScriptCore\",\n  \"pod_target_xcconfig\": {\n    \"HEADER_SEARCH_PATHS\": \"$(PODS_TARGET_SRCROOT)/ReactCommon $(PODS_ROOT)/boost $(PODS_ROOT)/DoubleConversion $(PODS_ROOT)/fmt/include $(PODS_ROOT)/RCT-Folly ${PODS_ROOT}/Headers/Public/FlipperKit $(PODS_ROOT)/Headers/Public/ReactCommon $(PODS_ROOT)/Headers/Public/React-hermes $(PODS_ROOT)/Headers/Public/hermes-engine \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector/jsinspector_modern.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/RCTDeprecation/RCTDeprecation.framework/Headers\\\"\",\n    \"DEFINES_MODULE\": \"YES\",\n    \"GCC_PREPROCESSOR_DEFINITIONS\": \"RCT_METRO_PORT=${RCT_METRO_PORT}\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\",\n    \"FRAMEWORK_SEARCH_PATHS\": \"\\\"$(PODS_CONFIGURATION_BUILD_DIR)/React-hermes\\\"\"\n  },\n  \"user_target_xcconfig\": {\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_ROOT)/Headers/Private/React-Core\\\"\"\n  },\n  \"default_subspecs\": \"Default\",\n  \"dependencies\": {\n    \"RCT-Folly\": [\n      \"2024.01.01.00\"\n    ],\n    \"React-cxxreact\": [\n\n    ],\n    \"React-perflogger\": [\n\n    ],\n    \"React-jsi\": [\n\n    ],\n    \"React-jsiexecutor\": [\n\n    ],\n    \"React-utils\": [\n\n    ],\n    \"React-featureflags\": [\n\n    ],\n    \"SocketRocket\": [\n      \"0.7.0\"\n    ],\n    \"React-runtimescheduler\": [\n\n    ],\n    \"Yoga\": [\n\n    ],\n    \"glog\": [\n\n    ],\n    \"React-jsinspector\": [\n\n    ],\n    \"RCTDeprecation\": [\n\n    ],\n    \"React-hermes\": [\n\n    ],\n    \"hermes-engine\": [\n\n    ]\n  },\n  \"subspecs\": [\n    {\n      \"name\": \"Default\",\n      \"source_files\": \"React/**/*.{c,h,m,mm,S,cpp}\",\n      \"exclude_files\": [\n        \"React/CoreModules/**/*\",\n        \"React/DevSupport/**/*\",\n        \"React/Fabric/**/*\",\n        \"React/FBReactNativeSpec/**/*\",\n        \"React/Tests/**/*\",\n        \"React/Inspector/**/*\",\n        \"React/CxxBridge/JSCExecutorFactory.{h,mm}\"\n      ],\n      \"private_header_files\": \"React/Cxx*/*.h\"\n    },\n    {\n      \"name\": \"DevSupport\",\n      \"source_files\": [\n        \"React/DevSupport/*.{h,mm,m}\",\n        \"React/Inspector/*.{h,mm,m}\"\n      ],\n      \"dependencies\": {\n        \"React-Core/Default\": [\n          \"0.74.6\"\n        ],\n        \"React-Core/RCTWebSocket\": [\n          \"0.74.6\"\n        ]\n      },\n      \"private_header_files\": \"React/Inspector/RCTCxx*.h\"\n    },\n    {\n      \"name\": \"RCTWebSocket\",\n      \"source_files\": \"Libraries/WebSocket/*.{h,m}\",\n      \"dependencies\": {\n        \"React-Core/Default\": [\n          \"0.74.6\"\n        ]\n      }\n    },\n    {\n      \"name\": \"CoreModulesHeaders\",\n      \"source_files\": \"React/CoreModules/**/*.h\",\n      \"dependencies\": {\n        \"React-Core/Default\": [\n\n        ]\n      }\n    },\n    {\n      \"name\": \"RCTActionSheetHeaders\",\n      \"source_files\": \"Libraries/ActionSheetIOS/*.h\",\n      \"dependencies\": {\n        \"React-Core/Default\": [\n\n        ]\n      }\n    },\n    {\n      \"name\": \"RCTAnimationHeaders\",\n      \"source_files\": \"Libraries/NativeAnimation/{Drivers/*,Nodes/*,*}.{h}\",\n      \"dependencies\": {\n        \"React-Core/Default\": [\n\n        ]\n      }\n    },\n    {\n      \"name\": \"RCTBlobHeaders\",\n      \"source_files\": \"Libraries/Blob/{RCTBlobManager,RCTFileReaderModule}.h\",\n      \"dependencies\": {\n        \"React-Core/Default\": [\n\n        ]\n      }\n    },\n    {\n      \"name\": \"RCTImageHeaders\",\n      \"source_files\": \"Libraries/Image/*.h\",\n      \"dependencies\": {\n        \"React-Core/Default\": [\n\n        ]\n      }\n    },\n    {\n      \"name\": \"RCTLinkingHeaders\",\n      \"source_files\": \"Libraries/LinkingIOS/*.h\",\n      \"dependencies\": {\n        \"React-Core/Default\": [\n\n        ]\n      }\n    },\n    {\n      \"name\": \"RCTNetworkHeaders\",\n      \"source_files\": \"Libraries/Network/*.h\",\n      \"dependencies\": {\n        \"React-Core/Default\": [\n\n        ]\n      }\n    },\n    {\n      \"name\": \"RCTPushNotificationHeaders\",\n      \"source_files\": \"Libraries/PushNotificationIOS/*.h\",\n      \"dependencies\": {\n        \"React-Core/Default\": [\n\n        ]\n      }\n    },\n    {\n      \"name\": \"RCTSettingsHeaders\",\n      \"source_files\": \"Libraries/Settings/*.h\",\n      \"dependencies\": {\n        \"React-Core/Default\": [\n\n        ]\n      }\n    },\n    {\n      \"name\": \"RCTTextHeaders\",\n      \"source_files\": \"Libraries/Text/**/*.h\",\n      \"dependencies\": {\n        \"React-Core/Default\": [\n\n        ]\n      }\n    },\n    {\n      \"name\": \"RCTVibrationHeaders\",\n      \"source_files\": \"Libraries/Vibration/*.h\",\n      \"dependencies\": {\n        \"React-Core/Default\": [\n\n        ]\n      }\n    }\n  ]\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-CoreModules.podspec.json",
    "content": "{\n  \"name\": \"React-CoreModules\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"-\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\",\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"**/*.{c,m,mm,cpp}\",\n  \"header_dir\": \"CoreModules\",\n  \"pod_target_xcconfig\": {\n    \"USE_HEADERMAP\": \"YES\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\",\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_ROOT)/boost\\\" \\\"$(PODS_TARGET_SRCROOT)/React/CoreModules\\\" \\\"$(PODS_ROOT)/RCT-Folly\\\" \\\"$(PODS_ROOT)/DoubleConversion\\\" \\\"$(PODS_ROOT)/fmt/include\\\" \\\"${PODS_ROOT}/Headers/Public/React-Codegen/react/renderer/components\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector/jsinspector_modern.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers\\\"\"\n  },\n  \"frameworks\": \"UIKit\",\n  \"dependencies\": {\n    \"DoubleConversion\": [\n\n    ],\n    \"fmt\": [\n      \"9.1.0\"\n    ],\n    \"RCT-Folly\": [\n      \"2024.01.01.00\"\n    ],\n    \"RCTTypeSafety\": [\n      \"0.74.6\"\n    ],\n    \"React-Core/CoreModulesHeaders\": [\n      \"0.74.6\"\n    ],\n    \"React-RCTImage\": [\n      \"0.74.6\"\n    ],\n    \"React-jsi\": [\n      \"0.74.6\"\n    ],\n    \"React-RCTBlob\": [\n\n    ],\n    \"SocketRocket\": [\n      \"0.7.0\"\n    ],\n    \"React-jsinspector\": [\n\n    ],\n    \"React-Codegen\": [\n\n    ],\n    \"ReactCommon\": [\n\n    ],\n    \"React-NativeModulesApple\": [\n\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-Fabric.podspec.json",
    "content": "{\n  \"name\": \"React-Fabric\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"Fabric for React Native.\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"dummyFile.cpp\",\n  \"pod_target_xcconfig\": {\n    \"USE_HEADERMAP\": \"YES\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\",\n    \"DEFINES_MODULE\": \"YES\",\n    \"HEADER_SEARCH_PATHS\": \"\\\"${PODS_CONFIGURATION_BUILD_DIR}/React-rendererdebug/React_rendererdebug.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\\\"\"\n  },\n  \"dependencies\": {\n    \"RCT-Folly/Fabric\": [\n      \"2024.01.01.00\"\n    ],\n    \"React-jsiexecutor\": [\n\n    ],\n    \"RCTRequired\": [\n\n    ],\n    \"RCTTypeSafety\": [\n\n    ],\n    \"ReactCommon/turbomodule/core\": [\n\n    ],\n    \"React-jsi\": [\n\n    ],\n    \"React-logger\": [\n\n    ],\n    \"glog\": [\n\n    ],\n    \"DoubleConversion\": [\n\n    ],\n    \"fmt\": [\n      \"9.1.0\"\n    ],\n    \"React-Core\": [\n\n    ],\n    \"React-debug\": [\n\n    ],\n    \"React-utils\": [\n\n    ],\n    \"React-runtimescheduler\": [\n\n    ],\n    \"React-cxxreact\": [\n\n    ],\n    \"React-rendererdebug\": [\n\n    ],\n    \"React-graphics\": [\n\n    ],\n    \"hermes-engine\": [\n\n    ]\n  },\n  \"script_phases\": [\n    {\n      \"name\": \"[RN]Check rncore\",\n      \"execution_position\": \"before_compile\",\n      \"script\": \"echo \\\"Checking whether Codegen has run...\\\"\\nrncorePath=\\\"$REACT_NATIVE_PATH/ReactCommon/react/renderer/components/rncore\\\"\\n\\nif [[ ! -d \\\"$rncorePath\\\" ]]; then\\n  echo 'error: Codegen did not run properly in your project. Please reinstall cocoapods with `bundle exec pod install`.'\\n  exit 1\\nfi\\n\"\n    }\n  ],\n  \"subspecs\": [\n    {\n      \"name\": \"animations\",\n      \"dependencies\": {\n        \"RCT-Folly/Fabric\": [\n          \"2024.01.01.00\"\n        ]\n      },\n      \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\",\n      \"source_files\": \"react/renderer/animations/**/*.{m,mm,cpp,h}\",\n      \"exclude_files\": \"react/renderer/animations/tests\",\n      \"header_dir\": \"react/renderer/animations\"\n    },\n    {\n      \"name\": \"attributedstring\",\n      \"dependencies\": {\n        \"RCT-Folly/Fabric\": [\n          \"2024.01.01.00\"\n        ]\n      },\n      \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\",\n      \"source_files\": \"react/renderer/attributedstring/**/*.{m,mm,cpp,h}\",\n      \"exclude_files\": \"react/renderer/attributedstring/tests\",\n      \"header_dir\": \"react/renderer/attributedstring\"\n    },\n    {\n      \"name\": \"core\",\n      \"dependencies\": {\n        \"RCT-Folly/Fabric\": [\n          \"2024.01.01.00\"\n        ]\n      },\n      \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\",\n      \"source_files\": \"react/renderer/core/**/*.{m,mm,cpp,h}\",\n      \"exclude_files\": \"react/renderer/core/tests\",\n      \"header_dir\": \"react/renderer/core\",\n      \"pod_target_xcconfig\": {\n        \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_ROOT)/boost\\\" \\\"$(PODS_TARGET_SRCROOT)/ReactCommon\\\" \\\"$(PODS_ROOT)/RCT-Folly\\\" \\\"$(PODS_ROOT)/Headers/Private/Yoga\\\" \\\"$(PODS_TARGET_SRCROOT)\\\" \\\"$(PODS_ROOT)/DoubleConversion\\\" \\\"$(PODS_ROOT)/fmt/include\\\"\"\n      }\n    },\n    {\n      \"name\": \"componentregistry\",\n      \"dependencies\": {\n        \"RCT-Folly/Fabric\": [\n          \"2024.01.01.00\"\n        ]\n      },\n      \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\",\n      \"source_files\": \"react/renderer/componentregistry/*.{m,mm,cpp,h}\",\n      \"header_dir\": \"react/renderer/componentregistry\"\n    },\n    {\n      \"name\": \"componentregistrynative\",\n      \"dependencies\": {\n        \"RCT-Folly/Fabric\": [\n          \"2024.01.01.00\"\n        ]\n      },\n      \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\",\n      \"source_files\": \"react/renderer/componentregistry/native/**/*.{m,mm,cpp,h}\",\n      \"header_dir\": \"react/renderer/componentregistry/native\"\n    },\n    {\n      \"name\": \"components\",\n      \"subspecs\": [\n        {\n          \"name\": \"inputaccessory\",\n          \"dependencies\": {\n            \"RCT-Folly/Fabric\": [\n              \"2024.01.01.00\"\n            ]\n          },\n          \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\",\n          \"source_files\": \"react/renderer/components/inputaccessory/**/*.{m,mm,cpp,h}\",\n          \"exclude_files\": \"react/renderer/components/inputaccessory/tests\",\n          \"header_dir\": \"react/renderer/components/inputaccessory\"\n        },\n        {\n          \"name\": \"legacyviewmanagerinterop\",\n          \"dependencies\": {\n            \"RCT-Folly/Fabric\": [\n              \"2024.01.01.00\"\n            ]\n          },\n          \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\",\n          \"source_files\": \"react/renderer/components/legacyviewmanagerinterop/**/*.{m,mm,cpp,h}\",\n          \"exclude_files\": \"react/renderer/components/legacyviewmanagerinterop/tests\",\n          \"header_dir\": \"react/renderer/components/legacyviewmanagerinterop\",\n          \"pod_target_xcconfig\": {\n            \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_ROOT)/Headers/Private/React-Core\\\"\"\n          }\n        },\n        {\n          \"name\": \"modal\",\n          \"dependencies\": {\n            \"RCT-Folly/Fabric\": [\n              \"2024.01.01.00\"\n            ]\n          },\n          \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\",\n          \"source_files\": \"react/renderer/components/modal/**/*.{m,mm,cpp,h}\",\n          \"exclude_files\": \"react/renderer/components/modal/tests\",\n          \"header_dir\": \"react/renderer/components/modal\"\n        },\n        {\n          \"name\": \"rncore\",\n          \"dependencies\": {\n            \"RCT-Folly/Fabric\": [\n              \"2024.01.01.00\"\n            ]\n          },\n          \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\",\n          \"source_files\": \"react/renderer/components/rncore/**/*.{m,mm,cpp,h}\",\n          \"header_dir\": \"react/renderer/components/rncore\"\n        },\n        {\n          \"name\": \"root\",\n          \"dependencies\": {\n            \"RCT-Folly/Fabric\": [\n              \"2024.01.01.00\"\n            ]\n          },\n          \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\",\n          \"source_files\": \"react/renderer/components/root/**/*.{m,mm,cpp,h}\",\n          \"exclude_files\": \"react/renderer/components/root/tests\",\n          \"header_dir\": \"react/renderer/components/root\"\n        },\n        {\n          \"name\": \"safeareaview\",\n          \"dependencies\": {\n            \"RCT-Folly/Fabric\": [\n              \"2024.01.01.00\"\n            ]\n          },\n          \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\",\n          \"source_files\": \"react/renderer/components/safeareaview/**/*.{m,mm,cpp,h}\",\n          \"exclude_files\": \"react/renderer/components/safeareaview/tests\",\n          \"header_dir\": \"react/renderer/components/safeareaview\"\n        },\n        {\n          \"name\": \"scrollview\",\n          \"dependencies\": {\n            \"RCT-Folly/Fabric\": [\n              \"2024.01.01.00\"\n            ]\n          },\n          \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\",\n          \"source_files\": \"react/renderer/components/scrollview/**/*.{m,mm,cpp,h}\",\n          \"exclude_files\": \"react/renderer/components/scrollview/tests\",\n          \"header_dir\": \"react/renderer/components/scrollview\"\n        },\n        {\n          \"name\": \"text\",\n          \"dependencies\": {\n            \"RCT-Folly/Fabric\": [\n              \"2024.01.01.00\"\n            ]\n          },\n          \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\",\n          \"source_files\": \"react/renderer/components/text/**/*.{m,mm,cpp,h}\",\n          \"exclude_files\": \"react/renderer/components/text/tests\",\n          \"header_dir\": \"react/renderer/components/text\"\n        },\n        {\n          \"name\": \"textinput\",\n          \"dependencies\": {\n            \"RCT-Folly/Fabric\": [\n              \"2024.01.01.00\"\n            ]\n          },\n          \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\",\n          \"source_files\": \"react/renderer/components/textinput/platform/ios/**/*.{m,mm,cpp,h}\",\n          \"header_dir\": \"react/renderer/components/iostextinput\"\n        },\n        {\n          \"name\": \"unimplementedview\",\n          \"dependencies\": {\n            \"RCT-Folly/Fabric\": [\n              \"2024.01.01.00\"\n            ]\n          },\n          \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\",\n          \"source_files\": \"react/renderer/components/unimplementedview/**/*.{m,mm,cpp,h}\",\n          \"exclude_files\": \"react/renderer/components/unimplementedview/tests\",\n          \"header_dir\": \"react/renderer/components/unimplementedview\"\n        },\n        {\n          \"name\": \"view\",\n          \"dependencies\": {\n            \"RCT-Folly/Fabric\": [\n              \"2024.01.01.00\"\n            ],\n            \"Yoga\": [\n\n            ]\n          },\n          \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\",\n          \"source_files\": \"react/renderer/components/view/**/*.{m,mm,cpp,h}\",\n          \"exclude_files\": [\n            \"react/renderer/components/view/tests\",\n            \"react/renderer/components/view/platform/android\"\n          ],\n          \"header_dir\": \"react/renderer/components/view\",\n          \"pod_target_xcconfig\": {\n            \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_ROOT)/Headers/Private/Yoga\\\"\"\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"imagemanager\",\n      \"dependencies\": {\n        \"RCT-Folly/Fabric\": [\n          \"2024.01.01.00\"\n        ]\n      },\n      \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\",\n      \"source_files\": \"react/renderer/imagemanager/*.{m,mm,cpp,h}\",\n      \"header_dir\": \"react/renderer/imagemanager\"\n    },\n    {\n      \"name\": \"mounting\",\n      \"dependencies\": {\n        \"RCT-Folly/Fabric\": [\n          \"2024.01.01.00\"\n        ]\n      },\n      \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\",\n      \"source_files\": \"react/renderer/mounting/**/*.{m,mm,cpp,h}\",\n      \"exclude_files\": \"react/renderer/mounting/tests\",\n      \"header_dir\": \"react/renderer/mounting\"\n    },\n    {\n      \"name\": \"scheduler\",\n      \"dependencies\": {\n        \"RCT-Folly/Fabric\": [\n          \"2024.01.01.00\"\n        ]\n      },\n      \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\",\n      \"source_files\": \"react/renderer/scheduler/**/*.{m,mm,cpp,h}\",\n      \"header_dir\": \"react/renderer/scheduler\"\n    },\n    {\n      \"name\": \"templateprocessor\",\n      \"dependencies\": {\n        \"RCT-Folly/Fabric\": [\n          \"2024.01.01.00\"\n        ]\n      },\n      \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\",\n      \"source_files\": \"react/renderer/templateprocessor/**/*.{m,mm,cpp,h}\",\n      \"exclude_files\": \"react/renderer/templateprocessor/tests\",\n      \"header_dir\": \"react/renderer/templateprocessor\"\n    },\n    {\n      \"name\": \"textlayoutmanager\",\n      \"dependencies\": {\n        \"RCT-Folly/Fabric\": [\n          \"2024.01.01.00\"\n        ],\n        \"React-Fabric/uimanager\": [\n\n        ]\n      },\n      \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\",\n      \"source_files\": [\n        \"react/renderer/textlayoutmanager/platform/ios/**/*.{m,mm,cpp,h}\",\n        \"react/renderer/textlayoutmanager/*.{m,mm,cpp,h}\"\n      ],\n      \"exclude_files\": [\n        \"react/renderer/textlayoutmanager/tests\",\n        \"react/renderer/textlayoutmanager/platform/android\",\n        \"react/renderer/textlayoutmanager/platform/cxx\"\n      ],\n      \"header_dir\": \"react/renderer/textlayoutmanager\"\n    },\n    {\n      \"name\": \"uimanager\",\n      \"dependencies\": {\n        \"RCT-Folly/Fabric\": [\n          \"2024.01.01.00\"\n        ]\n      },\n      \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\",\n      \"source_files\": \"react/renderer/uimanager/**/*.{m,mm,cpp,h}\",\n      \"exclude_files\": \"react/renderer/uimanager/tests\",\n      \"header_dir\": \"react/renderer/uimanager\"\n    },\n    {\n      \"name\": \"telemetry\",\n      \"dependencies\": {\n        \"RCT-Folly/Fabric\": [\n          \"2024.01.01.00\"\n        ]\n      },\n      \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\",\n      \"source_files\": \"react/renderer/telemetry/**/*.{m,mm,cpp,h}\",\n      \"exclude_files\": \"react/renderer/telemetry/tests\",\n      \"header_dir\": \"react/renderer/telemetry\"\n    },\n    {\n      \"name\": \"leakchecker\",\n      \"dependencies\": {\n        \"RCT-Folly/Fabric\": [\n          \"2024.01.01.00\"\n        ]\n      },\n      \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\",\n      \"source_files\": \"react/renderer/leakchecker/**/*.{cpp,h}\",\n      \"exclude_files\": \"react/renderer/leakchecker/tests\",\n      \"header_dir\": \"react/renderer/leakchecker\",\n      \"pod_target_xcconfig\": {\n        \"GCC_WARN_PEDANTIC\": \"YES\"\n      }\n    }\n  ]\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-FabricImage.podspec.json",
    "content": "{\n  \"name\": \"React-FabricImage\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"Image Component for Fabric for React Native.\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"react/renderer/components/image/**/*.{m,mm,cpp,h}\",\n  \"exclude_files\": \"react/renderer/components/image/tests\",\n  \"header_dir\": \"react/renderer/components/image\",\n  \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\",\n  \"pod_target_xcconfig\": {\n    \"USE_HEADERMAP\": \"YES\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\",\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_ROOT)/boost\\\" \\\"$(PODS_TARGET_SRCROOT)/ReactCommon\\\" \\\"$(PODS_ROOT)/RCT-Folly\\\" \\\"$(PODS_ROOT)/Headers/Private/Yoga\\\" \\\"$(PODS_ROOT)/DoubleConversion\\\" \\\"$(PODS_ROOT)/fmt/include\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/imagemanager/platform/ios\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-rendererdebug/React_rendererdebug.framework/Headers\\\"\"\n  },\n  \"dependencies\": {\n    \"RCT-Folly/Fabric\": [\n      \"2024.01.01.00\"\n    ],\n    \"React-jsiexecutor\": [\n      \"0.74.6\"\n    ],\n    \"RCTRequired\": [\n      \"0.74.6\"\n    ],\n    \"RCTTypeSafety\": [\n      \"0.74.6\"\n    ],\n    \"React-jsi\": [\n\n    ],\n    \"React-logger\": [\n\n    ],\n    \"glog\": [\n\n    ],\n    \"DoubleConversion\": [\n\n    ],\n    \"fmt\": [\n      \"9.1.0\"\n    ],\n    \"React-ImageManager\": [\n\n    ],\n    \"React-utils\": [\n\n    ],\n    \"Yoga\": [\n\n    ],\n    \"ReactCommon\": [\n\n    ],\n    \"React-graphics\": [\n\n    ],\n    \"React-Fabric\": [\n\n    ],\n    \"React-rendererdebug\": [\n\n    ],\n    \"hermes-engine\": [\n\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-ImageManager.podspec.json",
    "content": "{\n  \"name\": \"React-ImageManager\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"Fabric for React Native.\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\",\n  \"source_files\": \"**/*.{m,mm,cpp,h}\",\n  \"header_dir\": \"react/renderer/imagemanager\",\n  \"pod_target_xcconfig\": {\n    \"USE_HEADERMAP\": \"NO\",\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_ROOT)/boost\\\" \\\"$(PODS_TARGET_SRCROOT)/../../../\\\" \\\"$(PODS_TARGET_SRCROOT)\\\" \\\"$(PODS_ROOT)/RCT-Folly\\\" \\\"$(PODS_ROOT)/DoubleConversion\\\" \\\"$(PODS_ROOT)/fmt/include\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-debug/React_debug.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-utils/React_utils.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-rendererdebug/React_rendererdebug.framework/Headers\\\"\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\",\n    \"DEFINES_MODULE\": \"YES\"\n  },\n  \"dependencies\": {\n    \"RCT-Folly/Fabric\": [\n\n    ],\n    \"React-Core/Default\": [\n\n    ],\n    \"glog\": [\n\n    ],\n    \"React-Fabric\": [\n\n    ],\n    \"React-graphics\": [\n\n    ],\n    \"React-debug\": [\n\n    ],\n    \"React-utils\": [\n\n    ],\n    \"React-rendererdebug\": [\n\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-Mapbuffer.podspec.json",
    "content": "{\n  \"name\": \"React-Mapbuffer\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"-\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"react/renderer/mapbuffer/*.{cpp,h}\",\n  \"exclude_files\": \"react/renderer/mapbuffer/tests\",\n  \"public_header_files\": \"react/renderer/mapbuffer/*.h\",\n  \"header_dir\": \"react/renderer/mapbuffer\",\n  \"pod_target_xcconfig\": {\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_TARGET_SRCROOT)\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-debug/React_debug.framework/Headers\\\"\",\n    \"USE_HEADERMAP\": \"YES\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\"\n  },\n  \"dependencies\": {\n    \"glog\": [\n\n    ],\n    \"React-debug\": [\n\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-NativeModulesApple.podspec.json",
    "content": "{\n  \"name\": \"React-NativeModulesApple\",\n  \"module_name\": \"React_NativeModulesApple\",\n  \"header_dir\": \"ReactCommon\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"-\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\",\n  \"pod_target_xcconfig\": {\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_ROOT)/boost\\\" \\\"$(PODS_ROOT)/RCT-Folly\\\" \\\"$(PODS_ROOT)/DoubleConversion\\\" \\\"$(PODS_ROOT)/fmt/include\\\" \\\"$(PODS_ROOT)/Headers/Private/React-Core\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector/jsinspector_modern.framework/Headers\\\"\",\n    \"USE_HEADERMAP\": \"YES\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\",\n    \"GCC_WARN_PEDANTIC\": \"YES\"\n  },\n  \"source_files\": \"ReactCommon/**/*.{mm,cpp,h}\",\n  \"dependencies\": {\n    \"glog\": [\n\n    ],\n    \"ReactCommon/turbomodule/core\": [\n\n    ],\n    \"ReactCommon/turbomodule/bridging\": [\n\n    ],\n    \"React-callinvoker\": [\n\n    ],\n    \"React-Core\": [\n\n    ],\n    \"React-cxxreact\": [\n\n    ],\n    \"React-jsi\": [\n\n    ],\n    \"React-runtimeexecutor\": [\n\n    ],\n    \"React-jsinspector\": [\n\n    ],\n    \"hermes-engine\": [\n\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-RCTActionSheet.podspec.json",
    "content": "{\n  \"name\": \"React-RCTActionSheet\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"An API for displaying iOS action sheets and share sheets.\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"documentation_url\": \"https://reactnative.dev/docs/actionsheetios\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"*.{m}\",\n  \"preserve_paths\": [\n    \"package.json\",\n    \"LICENSE\",\n    \"LICENSE-docs\"\n  ],\n  \"header_dir\": \"RCTActionSheet\",\n  \"dependencies\": {\n    \"React-Core/RCTActionSheetHeaders\": [\n      \"0.74.6\"\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-RCTAnimation.podspec.json",
    "content": "{\n  \"name\": \"React-RCTAnimation\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"A native driver for the Animated API.\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\",\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"**/*.{h,m,mm}\",\n  \"preserve_paths\": [\n    \"package.json\",\n    \"LICENSE\",\n    \"LICENSE-docs\"\n  ],\n  \"header_dir\": \"RCTAnimation\",\n  \"pod_target_xcconfig\": {\n    \"USE_HEADERMAP\": \"YES\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\",\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_ROOT)/RCT-Folly\\\" \\\"${PODS_ROOT}/Headers/Public/React-Codegen/react/renderer/components\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers/build/generated/ios\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers\\\"\"\n  },\n  \"dependencies\": {\n    \"RCT-Folly\": [\n      \"2024.01.01.00\"\n    ],\n    \"RCTTypeSafety\": [\n\n    ],\n    \"React-jsi\": [\n\n    ],\n    \"React-Core/RCTAnimationHeaders\": [\n\n    ],\n    \"React-Codegen\": [\n\n    ],\n    \"ReactCommon\": [\n\n    ],\n    \"React-NativeModulesApple\": [\n\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-RCTAppDelegate.podspec.json",
    "content": "{\n  \"name\": \"React-RCTAppDelegate\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"An utility library to simplify common operations for the New Architecture\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"documentation_url\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"**/*.{c,h,m,mm,S,cpp}\",\n  \"compiler_flags\": \"$(inherited) -DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DUSE_HERMES\",\n  \"pod_target_xcconfig\": {\n    \"HEADER_SEARCH_PATHS\": \"$(PODS_TARGET_SRCROOT)/../../ReactCommon $(PODS_ROOT)/Headers/Private/React-Core $(PODS_ROOT)/boost $(PODS_ROOT)/DoubleConversion $(PODS_ROOT)/fmt/include $(PODS_ROOT)/RCT-Folly ${PODS_ROOT}/Headers/Public/FlipperKit $(PODS_ROOT)/Headers/Public/ReactCommon $(PODS_ROOT)/Headers/Public/React-RCTFabric $(PODS_ROOT)/Headers/Private/Yoga $(PODS_ROOT)/Headers/Public/React-hermes $(PODS_ROOT)/Headers/Public/hermes-engine \\\"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-runtimescheduler/React_runtimescheduler.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTFabric/RCTFabric.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-RuntimeCore/React_RuntimeCore.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-RuntimeApple/React_RuntimeApple.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-utils/React_utils.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-debug/React_debug.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-rendererdebug/React_rendererdebug.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-featureflags/React_featureflags.framework/Headers\\\"\",\n    \"OTHER_CPLUSPLUSFLAGS\": \"$(inherited) -DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DUSE_HERMES\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\",\n    \"DEFINES_MODULE\": \"YES\"\n  },\n  \"user_target_xcconfig\": {\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_ROOT)/Headers/Private/React-Core\\\"\"\n  },\n  \"dependencies\": {\n    \"React-Core\": [\n\n    ],\n    \"RCT-Folly\": [\n      \"2024.01.01.00\"\n    ],\n    \"RCTRequired\": [\n\n    ],\n    \"RCTTypeSafety\": [\n\n    ],\n    \"React-RCTNetwork\": [\n\n    ],\n    \"React-RCTImage\": [\n\n    ],\n    \"React-CoreModules\": [\n\n    ],\n    \"React-nativeconfig\": [\n\n    ],\n    \"React-Codegen\": [\n\n    ],\n    \"ReactCommon\": [\n\n    ],\n    \"React-NativeModulesApple\": [\n\n    ],\n    \"React-runtimescheduler\": [\n\n    ],\n    \"React-RCTFabric\": [\n\n    ],\n    \"React-RuntimeCore\": [\n\n    ],\n    \"React-RuntimeApple\": [\n\n    ],\n    \"React-Fabric\": [\n\n    ],\n    \"React-graphics\": [\n\n    ],\n    \"React-utils\": [\n\n    ],\n    \"React-debug\": [\n\n    ],\n    \"React-rendererdebug\": [\n\n    ],\n    \"React-featureflags\": [\n\n    ],\n    \"React-hermes\": [\n\n    ],\n    \"React-RuntimeHermes\": [\n\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-RCTBlob.podspec.json",
    "content": "{\n  \"name\": \"React-RCTBlob\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"An API for displaying iOS action sheets and share sheets.\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\",\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"*.{h,m,mm}\",\n  \"preserve_paths\": [\n    \"package.json\",\n    \"LICENSE\",\n    \"LICENSE-docs\"\n  ],\n  \"header_dir\": \"RCTBlob\",\n  \"pod_target_xcconfig\": {\n    \"USE_HEADERMAP\": \"YES\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\",\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_ROOT)/RCT-Folly\\\" \\\"$(PODS_ROOT)/boost\\\" \\\"$(PODS_ROOT)/DoubleConversion\\\" \\\"$(PODS_ROOT)/fmt/include\\\" \\\"${PODS_ROOT}/Headers/Public/React-Codegen/react/renderer/components\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector/jsinspector_modern.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\\\"\"\n  },\n  \"dependencies\": {\n    \"DoubleConversion\": [\n\n    ],\n    \"fmt\": [\n      \"9.1.0\"\n    ],\n    \"RCT-Folly\": [\n      \"2024.01.01.00\"\n    ],\n    \"React-jsi\": [\n\n    ],\n    \"React-Core/RCTBlobHeaders\": [\n\n    ],\n    \"React-Core/RCTWebSocket\": [\n\n    ],\n    \"React-RCTNetwork\": [\n\n    ],\n    \"React-Codegen\": [\n\n    ],\n    \"React-NativeModulesApple\": [\n\n    ],\n    \"React-jsinspector\": [\n\n    ],\n    \"ReactCommon\": [\n\n    ],\n    \"hermes-engine\": [\n\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-RCTFabric.podspec.json",
    "content": "{\n  \"name\": \"React-RCTFabric\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"RCTFabric for React Native.\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"Fabric/**/*.{c,h,m,mm,S,cpp}\",\n  \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\",\n  \"exclude_files\": [\n    \"**/tests/*\",\n    \"**/android/*\",\n    \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"\n  ],\n  \"header_dir\": \"React\",\n  \"module_name\": \"RCTFabric\",\n  \"frameworks\": [\n    \"JavaScriptCore\",\n    \"MobileCoreServices\"\n  ],\n  \"pod_target_xcconfig\": {\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_TARGET_SRCROOT)/ReactCommon\\\" \\\"$(PODS_ROOT)/boost\\\" \\\"$(PODS_ROOT)/DoubleConversion\\\" \\\"$(PODS_ROOT)/fmt/include\\\" \\\"$(PODS_ROOT)/RCT-Folly\\\" \\\"$(PODS_ROOT)/Headers/Private/React-Core\\\" \\\"$(PODS_ROOT)/Headers/Private/Yoga\\\" \\\"$(PODS_ROOT)/Headers/Public/React-Codegen\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-FabricImage/React_FabricImage.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/textlayoutmanager/platform/ios\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/textinput/platform/ios\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/imagemanager/platform/ios\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-nativeconfig/React_nativeconfig.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-ImageManager/React_ImageManager.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-featureflags/React_featureflags.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-debug/React_debug.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-utils/React_utils.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-rendererdebug/React_rendererdebug.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-runtimescheduler/React_runtimescheduler.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector/jsinspector_modern.framework/Headers\\\"\",\n    \"OTHER_CFLAGS\": \"$(inherited) -DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\"\n  },\n  \"dependencies\": {\n    \"React-Core\": [\n\n    ],\n    \"React-RCTImage\": [\n\n    ],\n    \"RCT-Folly/Fabric\": [\n      \"2024.01.01.00\"\n    ],\n    \"glog\": [\n\n    ],\n    \"Yoga\": [\n\n    ],\n    \"React-RCTText\": [\n\n    ],\n    \"React-jsi\": [\n\n    ],\n    \"React-FabricImage\": [\n\n    ],\n    \"React-Fabric\": [\n\n    ],\n    \"React-nativeconfig\": [\n\n    ],\n    \"React-graphics\": [\n\n    ],\n    \"React-ImageManager\": [\n\n    ],\n    \"React-featureflags\": [\n\n    ],\n    \"React-debug\": [\n\n    ],\n    \"React-utils\": [\n\n    ],\n    \"React-rendererdebug\": [\n\n    ],\n    \"React-runtimescheduler\": [\n\n    ],\n    \"React-jsinspector\": [\n\n    ],\n    \"hermes-engine\": [\n\n    ]\n  },\n  \"testspecs\": [\n    {\n      \"name\": \"Tests\",\n      \"test_type\": \"unit\",\n      \"source_files\": \"Tests/**/*.{mm}\",\n      \"frameworks\": \"XCTest\"\n    }\n  ]\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-RCTImage.podspec.json",
    "content": "{\n  \"name\": \"React-RCTImage\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"A React component for displaying different types of images.\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"documentation_url\": \"https://reactnative.dev/docs/image\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\",\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"*.{m,mm}\",\n  \"preserve_paths\": [\n    \"package.json\",\n    \"LICENSE\",\n    \"LICENSE-docs\"\n  ],\n  \"header_dir\": \"RCTImage\",\n  \"pod_target_xcconfig\": {\n    \"USE_HEADERMAP\": \"YES\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\",\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_ROOT)/RCT-Folly\\\" \\\"${PODS_ROOT}/Headers/Public/React-Codegen/react/renderer/components\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers\\\"\"\n  },\n  \"frameworks\": [\n    \"Accelerate\",\n    \"UIKit\"\n  ],\n  \"dependencies\": {\n    \"RCT-Folly\": [\n      \"2024.01.01.00\"\n    ],\n    \"RCTTypeSafety\": [\n\n    ],\n    \"React-jsi\": [\n\n    ],\n    \"React-Core/RCTImageHeaders\": [\n\n    ],\n    \"React-RCTNetwork\": [\n\n    ],\n    \"React-Codegen\": [\n\n    ],\n    \"ReactCommon\": [\n\n    ],\n    \"React-NativeModulesApple\": [\n\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-RCTLinking.podspec.json",
    "content": "{\n  \"name\": \"React-RCTLinking\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"A general interface to interact with both incoming and outgoing app links.\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"documentation_url\": \"https://reactnative.dev/docs/linking\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\",\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"*.{m,mm}\",\n  \"preserve_paths\": [\n    \"package.json\",\n    \"LICENSE\",\n    \"LICENSE-docs\"\n  ],\n  \"header_dir\": \"RCTLinking\",\n  \"pod_target_xcconfig\": {\n    \"USE_HEADERMAP\": \"YES\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\",\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_ROOT)/RCT-Folly\\\" \\\"${PODS_ROOT}/Headers/Public/React-Codegen/react/renderer/components\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers/build/generated/ios\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers/build/generated/ios\\\"\"\n  },\n  \"dependencies\": {\n    \"React-Core/RCTLinkingHeaders\": [\n      \"0.74.6\"\n    ],\n    \"ReactCommon/turbomodule/core\": [\n      \"0.74.6\"\n    ],\n    \"React-jsi\": [\n      \"0.74.6\"\n    ],\n    \"React-Codegen\": [\n\n    ],\n    \"ReactCommon\": [\n\n    ],\n    \"React-NativeModulesApple\": [\n\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-RCTNetwork.podspec.json",
    "content": "{\n  \"name\": \"React-RCTNetwork\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"The networking library of React Native.\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\",\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"*.{m,mm}\",\n  \"preserve_paths\": [\n    \"package.json\",\n    \"LICENSE\",\n    \"LICENSE-docs\"\n  ],\n  \"header_dir\": \"RCTNetwork\",\n  \"pod_target_xcconfig\": {\n    \"USE_HEADERMAP\": \"YES\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\",\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_ROOT)/RCT-Folly\\\" \\\"${PODS_ROOT}/Headers/Public/React-Codegen/react/renderer/components\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers/build/generated/ios\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers/build/generated/ios\\\"\"\n  },\n  \"frameworks\": \"MobileCoreServices\",\n  \"dependencies\": {\n    \"RCT-Folly\": [\n      \"2024.01.01.00\"\n    ],\n    \"RCTTypeSafety\": [\n\n    ],\n    \"React-jsi\": [\n\n    ],\n    \"React-Core/RCTNetworkHeaders\": [\n\n    ],\n    \"React-Codegen\": [\n\n    ],\n    \"ReactCommon\": [\n\n    ],\n    \"React-NativeModulesApple\": [\n\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-RCTSettings.podspec.json",
    "content": "{\n  \"name\": \"React-RCTSettings\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"A wrapper for NSUserDefaults, a persistent key-value store available only on iOS.\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"documentation_url\": \"https://reactnative.dev/docs/settings\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\",\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"*.{m,mm}\",\n  \"preserve_paths\": [\n    \"package.json\",\n    \"LICENSE\",\n    \"LICENSE-docs\"\n  ],\n  \"header_dir\": \"RCTSettings\",\n  \"pod_target_xcconfig\": {\n    \"USE_HEADERMAP\": \"YES\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\",\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_ROOT)/RCT-Folly\\\" \\\"${PODS_ROOT}/Headers/Public/React-Codegen/react/renderer/components\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers/build/generated/ios\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers/build/generated/ios\\\"\"\n  },\n  \"dependencies\": {\n    \"RCT-Folly\": [\n      \"2024.01.01.00\"\n    ],\n    \"RCTTypeSafety\": [\n\n    ],\n    \"React-jsi\": [\n\n    ],\n    \"React-Core/RCTSettingsHeaders\": [\n\n    ],\n    \"React-Codegen\": [\n\n    ],\n    \"ReactCommon\": [\n\n    ],\n    \"React-NativeModulesApple\": [\n\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-RCTText.podspec.json",
    "content": "{\n  \"name\": \"React-RCTText\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"A React component for displaying text.\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"documentation_url\": \"https://reactnative.dev/docs/text\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"**/*.{h,m,mm}\",\n  \"preserve_paths\": [\n    \"package.json\",\n    \"LICENSE\",\n    \"LICENSE-docs\"\n  ],\n  \"header_dir\": \"RCTText\",\n  \"frameworks\": [\n    \"MobileCoreServices\"\n  ],\n  \"pod_target_xcconfig\": {\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\"\n  },\n  \"dependencies\": {\n    \"Yoga\": [\n\n    ],\n    \"React-Core/RCTTextHeaders\": [\n      \"0.74.6\"\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-RCTVibration.podspec.json",
    "content": "{\n  \"name\": \"React-RCTVibration\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"An API for controlling the vibration hardware of the device.\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"documentation_url\": \"https://reactnative.dev/docs/vibration\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\",\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"*.{m,mm}\",\n  \"preserve_paths\": [\n    \"package.json\",\n    \"LICENSE\",\n    \"LICENSE-docs\"\n  ],\n  \"header_dir\": \"RCTVibration\",\n  \"pod_target_xcconfig\": {\n    \"USE_HEADERMAP\": \"YES\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\",\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_ROOT)/RCT-Folly\\\" \\\"${PODS_ROOT}/Headers/Public/React-Codegen/react/renderer/components\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers/build/generated/ios\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers\\\"\"\n  },\n  \"frameworks\": \"AudioToolbox\",\n  \"dependencies\": {\n    \"RCT-Folly\": [\n      \"2024.01.01.00\"\n    ],\n    \"React-jsi\": [\n\n    ],\n    \"React-Core/RCTVibrationHeaders\": [\n\n    ],\n    \"React-Codegen\": [\n\n    ],\n    \"ReactCommon\": [\n\n    ],\n    \"React-NativeModulesApple\": [\n\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-RuntimeApple.podspec.json",
    "content": "{\n  \"name\": \"React-RuntimeApple\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"The React Native Runtime.\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"ReactCommon/*.{mm,h}\",\n  \"header_dir\": \"ReactCommon\",\n  \"pod_target_xcconfig\": {\n    \"HEADER_SEARCH_PATHS\": [\n      \"$(PODS_ROOT)/boost\",\n      \"$(PODS_ROOT)/Headers/Private/React-Core\",\n      \"$(PODS_TARGET_SRCROOT)/../../../..\",\n      \"$(PODS_TARGET_SRCROOT)/../../../../..\"\n    ],\n    \"USE_HEADERMAP\": \"YES\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\",\n    \"GCC_WARN_PEDANTIC\": \"YES\"\n  },\n  \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\",\n  \"dependencies\": {\n    \"RCT-Folly/Fabric\": [\n      \"2024.01.01.00\"\n    ],\n    \"React-jsiexecutor\": [\n\n    ],\n    \"React-cxxreact\": [\n\n    ],\n    \"React-callinvoker\": [\n\n    ],\n    \"React-runtimeexecutor\": [\n\n    ],\n    \"React-utils\": [\n\n    ],\n    \"React-jsi\": [\n\n    ],\n    \"React-Core/Default\": [\n\n    ],\n    \"React-CoreModules\": [\n\n    ],\n    \"React-NativeModulesApple\": [\n\n    ],\n    \"React-RCTFabric\": [\n\n    ],\n    \"React-RuntimeCore\": [\n\n    ],\n    \"React-Mapbuffer\": [\n\n    ],\n    \"React-jserrorhandler\": [\n\n    ],\n    \"React-jsinspector\": [\n\n    ],\n    \"hermes-engine\": [\n\n    ],\n    \"React-RuntimeHermes\": [\n\n    ]\n  },\n  \"exclude_files\": \"ReactCommon/RCTJscInstance.{mm,h}\"\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-RuntimeCore.podspec.json",
    "content": "{\n  \"name\": \"React-RuntimeCore\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"The React Native Runtime.\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": [\n    \"*.{cpp,h}\",\n    \"nativeviewconfig/*.{cpp,h}\"\n  ],\n  \"exclude_files\": [\n    \"iostests/*\",\n    \"tests/**/*.{cpp,h}\"\n  ],\n  \"header_dir\": \"react/runtime\",\n  \"pod_target_xcconfig\": {\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_ROOT)/boost\\\" \\\"$(PODS_ROOT)/Headers/Private/React-Core\\\" \\\"${PODS_TARGET_SRCROOT}/../..\\\"\",\n    \"USE_HEADERMAP\": \"YES\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\",\n    \"GCC_WARN_PEDANTIC\": \"YES\"\n  },\n  \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\",\n  \"dependencies\": {\n    \"RCT-Folly/Fabric\": [\n      \"2024.01.01.00\"\n    ],\n    \"React-jsiexecutor\": [\n\n    ],\n    \"React-cxxreact\": [\n\n    ],\n    \"React-runtimeexecutor\": [\n\n    ],\n    \"glog\": [\n\n    ],\n    \"React-jsi\": [\n\n    ],\n    \"React-jserrorhandler\": [\n\n    ],\n    \"React-runtimescheduler\": [\n\n    ],\n    \"React-utils\": [\n\n    ],\n    \"React-featureflags\": [\n\n    ],\n    \"hermes-engine\": [\n\n    ],\n    \"React-jsinspector\": [\n\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-RuntimeHermes.podspec.json",
    "content": "{\n  \"name\": \"React-RuntimeHermes\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"The React Native Runtime.\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"hermes/*.{cpp,h}\",\n  \"header_dir\": \"react/runtime/hermes\",\n  \"pod_target_xcconfig\": {\n    \"HEADER_SEARCH_PATHS\": \"\\\"${PODS_TARGET_SRCROOT}/../..\\\" \\\"${PODS_TARGET_SRCROOT}/../../hermes/executor\\\" \\\"$(PODS_ROOT)/boost\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector/jsinspector_modern.framework/Headers\\\"\",\n    \"USE_HEADERMAP\": \"YES\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\",\n    \"GCC_WARN_PEDANTIC\": \"YES\"\n  },\n  \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\",\n  \"dependencies\": {\n    \"RCT-Folly/Fabric\": [\n      \"2024.01.01.00\"\n    ],\n    \"React-nativeconfig\": [\n\n    ],\n    \"React-jsitracing\": [\n\n    ],\n    \"React-jsi\": [\n\n    ],\n    \"React-utils\": [\n\n    ],\n    \"React-RuntimeCore\": [\n\n    ],\n    \"React-featureflags\": [\n\n    ],\n    \"React-jsinspector\": [\n\n    ],\n    \"React-hermes\": [\n\n    ],\n    \"hermes-engine\": [\n\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-callinvoker.podspec.json",
    "content": "{\n  \"name\": \"React-callinvoker\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"-\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"**/*.{cpp,h}\",\n  \"header_dir\": \"ReactCommon\"\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-cxxreact.podspec.json",
    "content": "{\n  \"name\": \"React-cxxreact\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"-\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"*.{cpp,h}\",\n  \"exclude_files\": \"SampleCxxModule.*\",\n  \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\",\n  \"pod_target_xcconfig\": {\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_ROOT)/boost\\\" \\\"$(PODS_ROOT)/RCT-Folly\\\" \\\"$(PODS_ROOT)/DoubleConversion\\\" \\\"$(PODS_ROOT)/fmt/include\\\" \\\"$(PODS_CONFIGURATION_BUILD_DIR)/React-debug/React_debug.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-runtimeexecutor/React_runtimeexecutor.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector/jsinspector_modern.framework/Headers\\\"\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\"\n  },\n  \"header_dir\": \"cxxreact\",\n  \"dependencies\": {\n    \"boost\": [\n      \"1.83.0\"\n    ],\n    \"DoubleConversion\": [\n\n    ],\n    \"fmt\": [\n      \"9.1.0\"\n    ],\n    \"RCT-Folly\": [\n      \"2024.01.01.00\"\n    ],\n    \"glog\": [\n\n    ],\n    \"React-jsinspector\": [\n\n    ],\n    \"React-callinvoker\": [\n      \"0.74.6\"\n    ],\n    \"React-runtimeexecutor\": [\n      \"0.74.6\"\n    ],\n    \"React-perflogger\": [\n      \"0.74.6\"\n    ],\n    \"React-jsi\": [\n      \"0.74.6\"\n    ],\n    \"React-logger\": [\n      \"0.74.6\"\n    ],\n    \"React-debug\": [\n      \"0.74.6\"\n    ],\n    \"hermes-engine\": [\n\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-debug.podspec.json",
    "content": "{\n  \"name\": \"React-debug\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"-\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"**/*.{cpp,h}\",\n  \"header_dir\": \"react/debug\",\n  \"pod_target_xcconfig\": {\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\",\n    \"DEFINES_MODULE\": \"YES\"\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-featureflags.podspec.json",
    "content": "{\n  \"name\": \"React-featureflags\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"React Native internal feature flags\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"*.{cpp,h}\",\n  \"header_dir\": \"react/featureflags\",\n  \"pod_target_xcconfig\": {\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\",\n    \"HEADER_SEARCH_PATHS\": \"\",\n    \"DEFINES_MODULE\": \"YES\"\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-graphics.podspec.json",
    "content": "{\n  \"name\": \"React-graphics\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"Fabric for React Native.\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\",\n  \"source_files\": \"**/*.{m,mm,cpp,h}\",\n  \"header_dir\": \"react/renderer/graphics\",\n  \"exclude_files\": [\n    \"tests\",\n    \"platform/android\",\n    \"platform/cxx\",\n    \"platform/windows\",\n    \"react/renderer/graphics\"\n  ],\n  \"pod_target_xcconfig\": {\n    \"USE_HEADERMAP\": \"NO\",\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_ROOT)/boost\\\" \\\"$(PODS_TARGET_SRCROOT)/../../../\\\" \\\"$(PODS_ROOT)/RCT-Folly\\\" \\\"$(PODS_ROOT)/DoubleConversion\\\" \\\"$(PODS_ROOT)/fmt/include\\\"\",\n    \"DEFINES_MODULE\": \"YES\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\"\n  },\n  \"dependencies\": {\n    \"glog\": [\n\n    ],\n    \"RCT-Folly/Fabric\": [\n      \"2024.01.01.00\"\n    ],\n    \"React-Core/Default\": [\n      \"0.74.6\"\n    ],\n    \"React-utils\": [\n\n    ],\n    \"DoubleConversion\": [\n\n    ],\n    \"fmt\": [\n      \"9.1.0\"\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-hermes.podspec.json",
    "content": "{\n  \"name\": \"React-hermes\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"Hermes engine for React Native\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"public_header_files\": \"executor/HermesExecutorFactory.h\",\n  \"source_files\": [\n    \"executor/*.{cpp,h}\",\n    \"inspector-modern/chrome/*.{cpp,h}\",\n    \"executor/HermesExecutorFactory.h\"\n  ],\n  \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\",\n  \"pod_target_xcconfig\": {\n    \"HEADER_SEARCH_PATHS\": \"\\\"${PODS_ROOT}/hermes-engine/destroot/include\\\" \\\"$(PODS_TARGET_SRCROOT)/..\\\" \\\"$(PODS_ROOT)/boost\\\" \\\"$(PODS_ROOT)/RCT-Folly\\\" \\\"$(PODS_ROOT)/DoubleConversion\\\" \\\"$(PODS_ROOT)/fmt/include\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector/jsinspector_modern.framework/Headers\\\"\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\"\n  },\n  \"header_dir\": \"reacthermes\",\n  \"dependencies\": {\n    \"React-cxxreact\": [\n      \"0.74.6\"\n    ],\n    \"React-jsiexecutor\": [\n      \"0.74.6\"\n    ],\n    \"React-jsinspector\": [\n\n    ],\n    \"React-perflogger\": [\n      \"0.74.6\"\n    ],\n    \"RCT-Folly\": [\n      \"2024.01.01.00\"\n    ],\n    \"DoubleConversion\": [\n\n    ],\n    \"fmt\": [\n      \"9.1.0\"\n    ],\n    \"glog\": [\n\n    ],\n    \"hermes-engine\": [\n\n    ],\n    \"React-jsi\": [\n\n    ],\n    \"React-runtimeexecutor\": [\n\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-jserrorhandler.podspec.json",
    "content": "{\n  \"name\": \"React-jserrorhandler\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"-\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"header_dir\": \"jserrorhandler\",\n  \"source_files\": \"JsErrorHandler.{cpp,h}\",\n  \"pod_target_xcconfig\": {\n    \"USE_HEADERMAP\": \"YES\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\",\n    \"HEADER_SEARCH_PATHS\": \"\\\"${PODS_CONFIGURATION_BUILD_DIR}/React-debug/React_debug.framework/Headers\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-Mapbuffer/React_Mapbuffer.framework/Headers\\\"\"\n  },\n  \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\",\n  \"dependencies\": {\n    \"RCT-Folly/Fabric\": [\n      \"2024.01.01.00\"\n    ],\n    \"React-jsi\": [\n\n    ],\n    \"React-debug\": [\n\n    ],\n    \"React-Mapbuffer\": [\n\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-jsi.podspec.json",
    "content": "{\n  \"name\": \"React-jsi\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"JavaScript Interface layer for React Native\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"header_dir\": \"jsi\",\n  \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\",\n  \"pod_target_xcconfig\": {\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_ROOT)/boost\\\" \\\"$(PODS_ROOT)/RCT-Folly\\\" \\\"$(PODS_ROOT)/DoubleConversion\\\" \\\"$(PODS_ROOT)/fmt/include\\\"\",\n    \"DEFINES_MODULE\": \"YES\"\n  },\n  \"dependencies\": {\n    \"boost\": [\n      \"1.83.0\"\n    ],\n    \"DoubleConversion\": [\n\n    ],\n    \"fmt\": [\n      \"9.1.0\"\n    ],\n    \"RCT-Folly\": [\n      \"2024.01.01.00\"\n    ],\n    \"glog\": [\n\n    ],\n    \"hermes-engine\": [\n\n    ]\n  },\n  \"source_files\": \"**/*.{cpp,h}\",\n  \"exclude_files\": [\n    \"jsi/jsilib-posix.cpp\",\n    \"jsi/jsilib-windows.cpp\",\n    \"**/test/*\",\n    \"jsi/jsi.cpp\"\n  ]\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-jsiexecutor.podspec.json",
    "content": "{\n  \"name\": \"React-jsiexecutor\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"-\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"jsireact/*.{cpp,h}\",\n  \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\",\n  \"pod_target_xcconfig\": {\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_ROOT)/boost\\\" \\\"$(PODS_ROOT)/RCT-Folly\\\" \\\"$(PODS_ROOT)/DoubleConversion\\\" \\\"$(PODS_ROOT)/fmt/include\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector/jsinspector_modern.framework/Headers\\\"\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\"\n  },\n  \"header_dir\": \"jsireact\",\n  \"dependencies\": {\n    \"React-cxxreact\": [\n      \"0.74.6\"\n    ],\n    \"React-jsi\": [\n      \"0.74.6\"\n    ],\n    \"React-perflogger\": [\n      \"0.74.6\"\n    ],\n    \"RCT-Folly\": [\n      \"2024.01.01.00\"\n    ],\n    \"DoubleConversion\": [\n\n    ],\n    \"fmt\": [\n      \"9.1.0\"\n    ],\n    \"glog\": [\n\n    ],\n    \"React-jsinspector\": [\n\n    ],\n    \"hermes-engine\": [\n\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-jsinspector.podspec.json",
    "content": "{\n  \"name\": \"React-jsinspector\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"-\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"*.{cpp,h}\",\n  \"header_dir\": \"jsinspector-modern\",\n  \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\",\n  \"pod_target_xcconfig\": {\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_TARGET_SRCROOT)/..\\\" \\\"$(PODS_ROOT)/boost\\\" \\\"$(PODS_ROOT)/RCT-Folly\\\" \\\"$(PODS_ROOT)/DoubleConversion\\\" \\\"$(PODS_ROOT)/fmt/include\\\"\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\",\n    \"DEFINES_MODULE\": \"YES\"\n  },\n  \"dependencies\": {\n    \"glog\": [\n\n    ],\n    \"RCT-Folly\": [\n      \"2024.01.01.00\"\n    ],\n    \"React-featureflags\": [\n\n    ],\n    \"DoubleConversion\": [\n\n    ],\n    \"React-runtimeexecutor\": [\n      \"0.74.6\"\n    ],\n    \"React-jsi\": [\n\n    ],\n    \"hermes-engine\": [\n\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-jsitracing.podspec.json",
    "content": "{\n  \"name\": \"React-jsitracing\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"Internal library for JSI debugging.\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"JSITracing.{cpp,h}\",\n  \"header_dir\": \".\",\n  \"pod_target_xcconfig\": {\n    \"HEADER_SEARCH_PATHS\": \"\\\"${PODS_TARGET_SRCROOT}/../..\\\"\",\n    \"USE_HEADERMAP\": \"YES\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\",\n    \"GCC_WARN_PEDANTIC\": \"YES\"\n  },\n  \"dependencies\": {\n    \"React-jsi\": [\n\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-logger.podspec.json",
    "content": "{\n  \"name\": \"React-logger\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"-\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"*.{cpp,h}\",\n  \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\",\n  \"pod_target_xcconfig\": {\n    \"HEADER_SEARCH_PATHS\": \"\"\n  },\n  \"header_dir\": \"logger\",\n  \"dependencies\": {\n    \"glog\": [\n\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-nativeconfig.podspec.json",
    "content": "{\n  \"name\": \"React-nativeconfig\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"-\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"react/config/*.{m,mm,cpp,h}\",\n  \"header_dir\": \"react/config\",\n  \"pod_target_xcconfig\": {\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\"\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-perflogger.podspec.json",
    "content": "{\n  \"name\": \"React-perflogger\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"-\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"**/*.{cpp,h}\",\n  \"header_dir\": \"reactperflogger\",\n  \"pod_target_xcconfig\": {\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\"\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-rendererdebug.podspec.json",
    "content": "{\n  \"name\": \"React-rendererdebug\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"-\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"**/*.{cpp,h,mm}\",\n  \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\",\n  \"header_dir\": \"react/renderer/debug\",\n  \"exclude_files\": \"tests\",\n  \"pod_target_xcconfig\": {\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\",\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_ROOT)/RCT-Folly\\\" \\\"$(PODS_ROOT)/boost\\\" \\\"$(PODS_ROOT)/RCT-Folly\\\" \\\"$(PODS_ROOT)/DoubleConversion\\\" \\\"$(PODS_ROOT)/fmt/include\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-debug/React_debug.framework/Headers\\\"\",\n    \"DEFINES_MODULE\": \"YES\"\n  },\n  \"dependencies\": {\n    \"RCT-Folly\": [\n      \"2024.01.01.00\"\n    ],\n    \"DoubleConversion\": [\n\n    ],\n    \"fmt\": [\n      \"9.1.0\"\n    ],\n    \"React-debug\": [\n\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-rncore.podspec.json",
    "content": "{\n  \"name\": \"React-rncore\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"Fabric for React Native.\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"dummyFile.cpp\",\n  \"pod_target_xcconfig\": {\n    \"USE_HEADERMAP\": \"YES\",\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_TARGET_SRCROOT)\\\" \\\"$(PODS_TARGET_SRCROOT)/ReactCommon\\\"\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\"\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-runtimeexecutor.podspec.json",
    "content": "{\n  \"name\": \"React-runtimeexecutor\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"-\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"**/*.{cpp,h}\",\n  \"header_dir\": \"ReactCommon\",\n  \"dependencies\": {\n    \"React-jsi\": [\n      \"0.74.6\"\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-runtimescheduler.podspec.json",
    "content": "{\n  \"name\": \"React-runtimescheduler\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"-\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"**/*.{cpp,h}\",\n  \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\",\n  \"header_dir\": \"react/renderer/runtimescheduler\",\n  \"exclude_files\": \"tests\",\n  \"pod_target_xcconfig\": {\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\",\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_ROOT)/RCT-Folly\\\" \\\"$(PODS_ROOT)/boost\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-debug/React_debug.framework/Headers\\\"\"\n  },\n  \"dependencies\": {\n    \"React-runtimeexecutor\": [\n\n    ],\n    \"React-callinvoker\": [\n\n    ],\n    \"React-cxxreact\": [\n\n    ],\n    \"React-rendererdebug\": [\n\n    ],\n    \"React-utils\": [\n\n    ],\n    \"React-featureflags\": [\n\n    ],\n    \"glog\": [\n\n    ],\n    \"RCT-Folly\": [\n      \"2024.01.01.00\"\n    ],\n    \"React-jsi\": [\n\n    ],\n    \"React-debug\": [\n\n    ],\n    \"hermes-engine\": [\n\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React-utils.podspec.json",
    "content": "{\n  \"name\": \"React-utils\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"-\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"source_files\": \"**/*.{cpp,h,mm}\",\n  \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\",\n  \"header_dir\": \"react/utils\",\n  \"exclude_files\": \"tests\",\n  \"pod_target_xcconfig\": {\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\",\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_ROOT)/RCT-Folly\\\" \\\"$(PODS_TARGET_SRCROOT)\\\" \\\"$(PODS_TARGET_SRCROOT)/ReactCommon\\\" \\\"${PODS_CONFIGURATION_BUILD_DIR}/React-debug/React_debug.framework/Headers\\\"\",\n    \"DEFINES_MODULE\": \"YES\"\n  },\n  \"dependencies\": {\n    \"RCT-Folly\": [\n      \"2024.01.01.00\"\n    ],\n    \"React-jsi\": [\n      \"0.74.6\"\n    ],\n    \"glog\": [\n\n    ],\n    \"hermes-engine\": [\n\n    ],\n    \"React-debug\": [\n\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/React.podspec.json",
    "content": "{\n  \"name\": \"React\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"A framework for building native apps using React\",\n  \"description\": \"React Native apps are built using the React JS\\nframework, and render directly to native UIKit\\nelements using a fully asynchronous architecture.\\nThere is no browser and no HTML. We have picked what\\nwe think is the best set of features from these and\\nother technologies to build what we hope to become\\nthe best product development framework available,\\nwith an emphasis on iteration speed, developer\\ndelight, continuity of technology, and absolutely\\nbeautiful and fast products with no compromises in\\nquality or capability.\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"preserve_paths\": [\n    \"package.json\",\n    \"LICENSE\",\n    \"LICENSE-docs\"\n  ],\n  \"cocoapods_version\": \">= 1.10.1\",\n  \"dependencies\": {\n    \"React-Core\": [\n      \"0.74.6\"\n    ],\n    \"React-Core/DevSupport\": [\n      \"0.74.6\"\n    ],\n    \"React-Core/RCTWebSocket\": [\n      \"0.74.6\"\n    ],\n    \"React-RCTActionSheet\": [\n      \"0.74.6\"\n    ],\n    \"React-RCTAnimation\": [\n      \"0.74.6\"\n    ],\n    \"React-RCTBlob\": [\n      \"0.74.6\"\n    ],\n    \"React-RCTImage\": [\n      \"0.74.6\"\n    ],\n    \"React-RCTLinking\": [\n      \"0.74.6\"\n    ],\n    \"React-RCTNetwork\": [\n      \"0.74.6\"\n    ],\n    \"React-RCTSettings\": [\n      \"0.74.6\"\n    ],\n    \"React-RCTText\": [\n      \"0.74.6\"\n    ],\n    \"React-RCTVibration\": [\n      \"0.74.6\"\n    ]\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/ReactCommon.podspec.json",
    "content": "{\n  \"name\": \"ReactCommon\",\n  \"module_name\": \"ReactCommon\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"-\",\n  \"homepage\": \"https://reactnative.dev/\",\n  \"license\": \"MIT\",\n  \"authors\": \"Meta Platforms, Inc. and its affiliates\",\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"header_dir\": \"ReactCommon\",\n  \"compiler_flags\": \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\",\n  \"pod_target_xcconfig\": {\n    \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_ROOT)/boost\\\" \\\"$(PODS_ROOT)/RCT-Folly\\\" \\\"$(PODS_ROOT)/DoubleConversion\\\" \\\"$(PODS_ROOT)/fmt/include\\\" \\\"$(PODS_ROOT)/Headers/Private/React-Core\\\"\",\n    \"USE_HEADERMAP\": \"YES\",\n    \"DEFINES_MODULE\": \"YES\",\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\",\n    \"GCC_WARN_PEDANTIC\": \"YES\"\n  },\n  \"subspecs\": [\n    {\n      \"name\": \"turbomodule\",\n      \"dependencies\": {\n        \"React-callinvoker\": [\n          \"0.74.6\"\n        ],\n        \"React-perflogger\": [\n          \"0.74.6\"\n        ],\n        \"React-cxxreact\": [\n          \"0.74.6\"\n        ],\n        \"React-jsi\": [\n          \"0.74.6\"\n        ],\n        \"RCT-Folly\": [\n          \"2024.01.01.00\"\n        ],\n        \"React-logger\": [\n          \"0.74.6\"\n        ],\n        \"DoubleConversion\": [\n\n        ],\n        \"fmt\": [\n          \"9.1.0\"\n        ],\n        \"glog\": [\n\n        ],\n        \"hermes-engine\": [\n\n        ]\n      },\n      \"subspecs\": [\n        {\n          \"name\": \"bridging\",\n          \"dependencies\": {\n            \"React-jsi\": [\n              \"0.74.6\"\n            ],\n            \"hermes-engine\": [\n\n            ]\n          },\n          \"source_files\": \"react/bridging/**/*.{cpp,h}\",\n          \"exclude_files\": \"react/bridging/tests\",\n          \"header_dir\": \"react/bridging\",\n          \"pod_target_xcconfig\": {\n            \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_TARGET_SRCROOT)/ReactCommon\\\" \\\"$(PODS_ROOT)/RCT-Folly\\\"\"\n          }\n        },\n        {\n          \"name\": \"core\",\n          \"source_files\": \"react/nativemodule/core/ReactCommon/**/*.{cpp,h}\",\n          \"pod_target_xcconfig\": {\n            \"HEADER_SEARCH_PATHS\": \"\\\"$(PODS_TARGET_SRCROOT)/ReactCommon\\\" \\\"$(PODS_CONFIGURATION_BUILD_DIR)/React-debug/React_debug.framework/Headers\\\" \\\"$(PODS_CONFIGURATION_BUILD_DIR)/React-utils/React_utils.framework/Headers\\\"\"\n          },\n          \"dependencies\": {\n            \"React-debug\": [\n              \"0.74.6\"\n            ],\n            \"React-utils\": [\n              \"0.74.6\"\n            ]\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/WatermelonDB.podspec.json",
    "content": "{\n  \"name\": \"WatermelonDB\",\n  \"version\": \"0.28.0-0\",\n  \"summary\": \"Build powerful React Native and React web apps that scale from hundreds to tens of thousands of records and remain fast\",\n  \"description\": \"Build powerful React Native and React web apps that scale from hundreds to tens of thousands of records and remain fast\",\n  \"homepage\": \"https://github.com/Nozbe/WatermelonDB#readme\",\n  \"license\": \"MIT\",\n  \"authors\": {\n    \"author\": \"@Nozbe\"\n  },\n  \"platforms\": {\n    \"ios\": \"12.0\",\n    \"tvos\": \"12.0\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/Nozbe/WatermelonDB.git\",\n    \"tag\": \"v0.28.0-0\"\n  },\n  \"source_files\": [\n    \"native/ios/**/*.{h,m,mm,swift,c,cpp}\",\n    \"native/shared/**/*.{h,c,cpp}\"\n  ],\n  \"public_header_files\": [\n    \"native/ios/WatermelonDB/JSIInstaller.h\",\n    \"native/ios/WatermelonDB/WatermelonDB.h\"\n  ],\n  \"pod_target_xcconfig\": {\n  },\n  \"requires_arc\": true,\n  \"compiler_flags\": \"-Os\",\n  \"dependencies\": {\n    \"React\": [\n\n    ],\n    \"simdjson\": [\n\n    ]\n  },\n  \"libraries\": \"sqlite3\"\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/Yoga.podspec.json",
    "content": "{\n  \"name\": \"Yoga\",\n  \"version\": \"0.0.0\",\n  \"license\": {\n    \"type\": \"MIT\"\n  },\n  \"homepage\": \"https://yogalayout.dev\",\n  \"documentation_url\": \"https://yogalayout.dev/docs/\",\n  \"summary\": \"Yoga is a cross-platform layout engine which implements Flexbox.\",\n  \"description\": \"Yoga is a cross-platform layout engine enabling maximum collaboration within your team by implementing an API many designers are familiar with, and opening it up to developers across different platforms.\",\n  \"authors\": \"Facebook\",\n  \"source\": {\n    \"git\": \"https://github.com/facebook/react-native.git\",\n    \"tag\": \"v0.74.6\"\n  },\n  \"module_name\": \"yoga\",\n  \"header_dir\": \"yoga\",\n  \"requires_arc\": false,\n  \"pod_target_xcconfig\": {\n    \"DEFINES_MODULE\": \"YES\"\n  },\n  \"compiler_flags\": [\n    \"-fno-omit-frame-pointer\",\n    \"-fexceptions\",\n    \"-Wall\",\n    \"-Werror\",\n    \"-std=c++20\",\n    \"-fPIC\"\n  ],\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"source_files\": \"yoga/**/*.{cpp,h}\",\n  \"header_mappings_dir\": \"yoga\",\n  \"public_header_files\": \"yoga/*.h\",\n  \"private_header_files\": [\n    \"yoga/config/Config.h\",\n    \"yoga/enums/Align.h\",\n    \"yoga/enums/Edge.h\",\n    \"yoga/enums/Gutter.h\",\n    \"yoga/enums/Justify.h\",\n    \"yoga/enums/ExperimentalFeature.h\",\n    \"yoga/enums/Unit.h\",\n    \"yoga/enums/FlexDirection.h\",\n    \"yoga/enums/Errata.h\",\n    \"yoga/enums/Direction.h\",\n    \"yoga/enums/MeasureMode.h\",\n    \"yoga/enums/PhysicalEdge.h\",\n    \"yoga/enums/Display.h\",\n    \"yoga/enums/LogLevel.h\",\n    \"yoga/enums/NodeType.h\",\n    \"yoga/enums/YogaEnums.h\",\n    \"yoga/enums/PositionType.h\",\n    \"yoga/enums/Overflow.h\",\n    \"yoga/enums/Dimension.h\",\n    \"yoga/enums/Wrap.h\",\n    \"yoga/style/SmallValueBuffer.h\",\n    \"yoga/style/Style.h\",\n    \"yoga/style/StyleValueHandle.h\",\n    \"yoga/style/StyleValuePool.h\",\n    \"yoga/style/StyleLength.h\",\n    \"yoga/algorithm/Baseline.h\",\n    \"yoga/algorithm/FlexLine.h\",\n    \"yoga/algorithm/BoundAxis.h\",\n    \"yoga/algorithm/SizingMode.h\",\n    \"yoga/algorithm/Align.h\",\n    \"yoga/algorithm/Cache.h\",\n    \"yoga/algorithm/FlexDirection.h\",\n    \"yoga/algorithm/TrailingPosition.h\",\n    \"yoga/algorithm/CalculateLayout.h\",\n    \"yoga/algorithm/PixelGrid.h\",\n    \"yoga/algorithm/AbsoluteLayout.h\",\n    \"yoga/numeric/Comparison.h\",\n    \"yoga/numeric/FloatOptional.h\",\n    \"yoga/node/LayoutResults.h\",\n    \"yoga/node/Node.h\",\n    \"yoga/node/CachedMeasurement.h\",\n    \"yoga/event/event.h\",\n    \"yoga/debug/AssertFatal.h\",\n    \"yoga/debug/Log.h\"\n  ],\n  \"preserve_paths\": [\n    \"yoga/**/*.h\"\n  ]\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/boost.podspec.json",
    "content": "{\n  \"name\": \"boost\",\n  \"version\": \"1.83.0\",\n  \"license\": {\n    \"type\": \"Boost Software License\",\n    \"file\": \"LICENSE_1_0.txt\"\n  },\n  \"homepage\": \"http://www.boost.org\",\n  \"summary\": \"Boost provides free peer-reviewed portable C++ source libraries.\",\n  \"authors\": \"Rene Rivera\",\n  \"source\": {\n    \"http\": \"https://archives.boost.io/release/1.83.0/source/boost_1_83_0.tar.bz2\",\n    \"sha256\": \"6478edfe2f3305127cffe8caf73ea0176c53769f4bf1585be237eb30798c3b8e\"\n  },\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"requires_arc\": false,\n  \"module_name\": \"boost\",\n  \"header_dir\": \"boost\",\n  \"preserve_paths\": \"boost\"\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/fmt.podspec.json",
    "content": "{\n  \"name\": \"fmt\",\n  \"version\": \"9.1.0\",\n  \"license\": {\n    \"type\": \"MIT\"\n  },\n  \"homepage\": \"https://github.com/fmtlib/fmt\",\n  \"summary\": \"{fmt} is an open-source formatting library for C++. It can be used as a safe and fast alternative to (s)printf and iostreams.\",\n  \"authors\": \"The fmt contributors\",\n  \"source\": {\n    \"git\": \"https://github.com/fmtlib/fmt.git\",\n    \"tag\": \"9.1.0\"\n  },\n  \"pod_target_xcconfig\": {\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\"\n  },\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  },\n  \"libraries\": \"c++\",\n  \"public_header_files\": \"include/fmt/*.h\",\n  \"header_mappings_dir\": \"include\",\n  \"source_files\": [\n    \"include/fmt/*.h\",\n    \"src/format.cc\"\n  ]\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/glog.podspec.json",
    "content": "{\n  \"name\": \"glog\",\n  \"version\": \"0.3.5\",\n  \"license\": {\n    \"type\": \"Google\",\n    \"file\": \"COPYING\"\n  },\n  \"homepage\": \"https://github.com/google/glog\",\n  \"summary\": \"Google logging module\",\n  \"authors\": \"Google\",\n  \"prepare_command\": \"#!/bin/bash\\n# Copyright (c) Meta Platforms, Inc. and affiliates.\\n#\\n# This source code is licensed under the MIT license found in the\\n# LICENSE file in the root directory of this source tree.\\n\\nset -e\\n\\nPLATFORM_NAME=\\\"${PLATFORM_NAME:-iphoneos}\\\"\\nCURRENT_ARCH=\\\"${CURRENT_ARCH}\\\"\\n\\nif [ -z \\\"$CURRENT_ARCH\\\" ] || [ \\\"$CURRENT_ARCH\\\" == \\\"undefined_arch\\\" ]; then\\n    # Xcode 10 beta sets CURRENT_ARCH to \\\"undefined_arch\\\", this leads to incorrect linker arg.\\n    # it's better to rely on platform name as fallback because architecture differs between simulator and device\\n\\n    if [[ \\\"$PLATFORM_NAME\\\" == *\\\"simulator\\\"* ]]; then\\n        CURRENT_ARCH=\\\"x86_64\\\"\\n    else\\n        CURRENT_ARCH=\\\"arm64\\\"\\n    fi\\nfi\\n\\n# @lint-ignore-every TXT2 Tab Literal\\nif [ \\\"$CURRENT_ARCH\\\" == \\\"arm64\\\" ]; then\\n    cat <<\\\\EOF >>fix_glog_0.3.5_apple_silicon.patch\\ndiff --git a/config.sub b/config.sub\\nindex 1761d8b..43fa2e8 100755\\n--- a/config.sub\\n+++ b/config.sub\\n@@ -1096,6 +1096,9 @@ case $basic_machine in\\n \\t\\tbasic_machine=z8k-unknown\\n \\t\\tos=-sim\\n \\t\\t;;\\n+\\tarm64-*)\\n+\\t\\tbasic_machine=$(echo $basic_machine | sed 's/arm64/aarch64/')\\n+\\t\\t;;\\n \\tnone)\\n \\t\\tbasic_machine=none-none\\n \\t\\tos=-none\\nEOF\\n\\n    patch -p1 config.sub fix_glog_0.3.5_apple_silicon.patch\\nfi\\n\\nXCRUN=\\\"$(which xcrun)\\\"\\nif [ -n \\\"$XCRUN\\\" ]; then\\n  export CC=\\\"$(xcrun -find -sdk $PLATFORM_NAME cc) -arch $CURRENT_ARCH -isysroot $(xcrun -sdk $PLATFORM_NAME --show-sdk-path)\\\"\\n  export CXX=\\\"$CC\\\"\\nelse\\n  export CC=\\\"$CC:-$(which gcc)\\\"\\n  export CXX=\\\"$CXX:-$(which g++ || true)\\\"\\nfi\\nexport CXX=\\\"$CXX:-$CC\\\"\\n\\n# Remove automake symlink if it exists\\nif [ -h \\\"test-driver\\\" ]; then\\n    rm test-driver\\nfi\\n\\n# Manually disable gflags include to fix issue https://github.com/facebook/react-native/issues/28446\\nsed -i.bak -e 's/\\\\@ac_cv_have_libgflags\\\\@/0/' src/glog/logging.h.in && rm src/glog/logging.h.in.bak\\nsed -i.bak -e 's/HAVE_LIB_GFLAGS/HAVE_LIB_GFLAGS_DISABLED/' src/config.h.in && rm src/config.h.in.bak\\n\\n./configure --host arm-apple-darwin\\n\\ncat << EOF >> src/config.h\\n/* Add in so we have Apple Target Conditionals */\\n#ifdef __APPLE__\\n#include <TargetConditionals.h>\\n#include <Availability.h>\\n#endif\\n\\n/* Special configuration for ucontext */\\n#undef HAVE_UCONTEXT_H\\n#undef PC_FROM_UCONTEXT\\n#if defined(__x86_64__)\\n#define PC_FROM_UCONTEXT uc_mcontext->__ss.__rip\\n#elif defined(__i386__)\\n#define PC_FROM_UCONTEXT uc_mcontext->__ss.__eip\\n#endif\\nEOF\\n\\n# Prepare exported header include\\nEXPORTED_INCLUDE_DIR=\\\"exported/glog\\\"\\nmkdir -p exported/glog\\ncp -f src/glog/log_severity.h \\\"$EXPORTED_INCLUDE_DIR/\\\"\\ncp -f src/glog/logging.h \\\"$EXPORTED_INCLUDE_DIR/\\\"\\ncp -f src/glog/raw_logging.h \\\"$EXPORTED_INCLUDE_DIR/\\\"\\ncp -f src/glog/stl_logging.h \\\"$EXPORTED_INCLUDE_DIR/\\\"\\ncp -f src/glog/vlog_is_on.h \\\"$EXPORTED_INCLUDE_DIR/\\\"\",\n  \"source\": {\n    \"git\": \"https://github.com/google/glog.git\",\n    \"tag\": \"v0.3.5\"\n  },\n  \"module_name\": \"glog\",\n  \"header_dir\": \"glog\",\n  \"source_files\": [\n    \"src/glog/*.h\",\n    \"src/demangle.cc\",\n    \"src/logging.cc\",\n    \"src/raw_logging.cc\",\n    \"src/signalhandler.cc\",\n    \"src/symbolize.cc\",\n    \"src/utilities.cc\",\n    \"src/vlog_is_on.cc\"\n  ],\n  \"preserve_paths\": [\n    \"src/*.h\",\n    \"src/base/*.h\"\n  ],\n  \"exclude_files\": \"src/windows/**/*\",\n  \"compiler_flags\": \"-Wno-shorten-64-to-32\",\n  \"pod_target_xcconfig\": {\n    \"USE_HEADERMAP\": \"NO\",\n    \"HEADER_SEARCH_PATHS\": \"$(PODS_TARGET_SRCROOT)/src\",\n    \"DEFINES_MODULE\": \"YES\"\n  },\n  \"platforms\": {\n    \"ios\": \"13.4\"\n  }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/hermes-engine.podspec.json",
    "content": "{\n  \"name\": \"hermes-engine\",\n  \"version\": \"0.74.6\",\n  \"summary\": \"Hermes is a small and lightweight JavaScript engine optimized for running React Native.\",\n  \"description\": \"Hermes is a JavaScript engine optimized for fast start-up of React Native apps. It features ahead-of-time static optimization and compact bytecode.\",\n  \"homepage\": \"https://hermesengine.dev\",\n  \"license\": \"MIT\",\n  \"authors\": \"Facebook\",\n  \"source\": {\n    \"http\": \"https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.74.6/react-native-artifacts-0.74.6-hermes-ios-debug.tar.gz\"\n  },\n  \"platforms\": {\n    \"osx\": \"10.13\",\n    \"ios\": \"13.4\",\n    \"visionos\": \"1.0\"\n  },\n  \"preserve_paths\": \"**/*.*\",\n  \"source_files\": \"\",\n  \"pod_target_xcconfig\": {\n    \"CLANG_CXX_LANGUAGE_STANDARD\": \"c++20\",\n    \"CLANG_CXX_LIBRARY\": \"compiler-default\"\n  },\n  \"ios\": {\n    \"vendored_frameworks\": \"destroot/Library/Frameworks/ios/hermes.framework\"\n  },\n  \"osx\": {\n    \"vendored_frameworks\": \"destroot/Library/Frameworks/macosx/hermes.framework\"\n  },\n  \"script_phases\": {\n    \"name\": \"[Hermes] Replace Hermes for the right configuration, if needed\",\n    \"execution_position\": \"before_compile\",\n    \"script\": \"        . \\\"$REACT_NATIVE_PATH/scripts/xcode/with-environment.sh\\\"\\n\\n        CONFIG=\\\"Release\\\"\\n        if echo $GCC_PREPROCESSOR_DEFINITIONS | grep -q \\\"DEBUG=1\\\"; then\\n          CONFIG=\\\"Debug\\\"\\n        fi\\n\\n        \\\"$NODE_BINARY\\\" \\\"$REACT_NATIVE_PATH/sdks/hermes-engine/utils/replace_hermes_version.js\\\" -c \\\"$CONFIG\\\" -r \\\"0.74.6\\\" -p \\\"$PODS_ROOT\\\"\\n\"\n  },\n  \"subspecs\": [\n    {\n      \"name\": \"Pre-built\",\n      \"preserve_paths\": [\n        \"destroot/bin/*\",\n        \"**/*.{h,c,cpp}\"\n      ],\n      \"source_files\": \"destroot/include/hermes/**/*.h\",\n      \"header_mappings_dir\": \"destroot/include\",\n      \"ios\": {\n        \"vendored_frameworks\": \"destroot/Library/Frameworks/universal/hermes.xcframework\"\n      },\n      \"visionos\": {\n        \"vendored_frameworks\": \"destroot/Library/Frameworks/universal/hermes.xcframework\"\n      },\n      \"osx\": {\n        \"vendored_frameworks\": \"destroot/Library/Frameworks/macosx/hermes.framework\"\n      }\n    }\n  ]\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Local Podspecs/simdjson.podspec.json",
    "content": "{\n  \"name\": \"simdjson\",\n  \"version\": \"3.9.4\",\n  \"summary\": \"NPM-released fork of simdjson C++ library\",\n  \"description\": \"NPM-released fork of simdjson C++ library\",\n  \"homepage\": \"https://github.com/Nozbe/simdjson\",\n  \"license\": \"Apache-2.0\",\n  \"authors\": {\n    \"author\": \"simdjson authors\"\n  },\n  \"platforms\": {\n    \"ios\": \"11.0\",\n    \"tvos\": \"11.0\"\n  },\n  \"source\": {\n    \"git\": \"https://github.com/Nozbe/simdmjson.git\",\n    \"tag\": \"v3.9.4\"\n  },\n  \"source_files\": \"src/*.{h,cpp}\",\n  \"public_header_files\": \"src/simdjson.h\",\n  \"requires_arc\": true,\n  \"compiler_flags\": \"-Os\"\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Pods.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 51;\n\tobjects = {\n\n/* Begin PBXAggregateTarget section */\n\t\t11989A5E568B3B69655EE0C13DCDA3F9 /* React-RCTActionSheet */ = {\n\t\t\tisa = PBXAggregateTarget;\n\t\t\tbuildConfigurationList = 30B947E14EE1C9821D33E6F7B6C9B674 /* Build configuration list for PBXAggregateTarget \"React-RCTActionSheet\" */;\n\t\t\tbuildPhases = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t795142F7B9CEBC2409056405CF1A0236 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-RCTActionSheet\";\n\t\t};\n\t\t1BEE828C124E6416179B904A9F66D794 /* React */ = {\n\t\t\tisa = PBXAggregateTarget;\n\t\t\tbuildConfigurationList = D6A86079896F7EF87D956234AFC7707B /* Build configuration list for PBXAggregateTarget \"React\" */;\n\t\t\tbuildPhases = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tF77531E668A19B6443CBD7E19D27545D /* PBXTargetDependency */,\n\t\t\t\t9574B0698E37FC3108573EFE439B41A8 /* PBXTargetDependency */,\n\t\t\t\t0C5451BA2A75717532FFAD7F482792BE /* PBXTargetDependency */,\n\t\t\t\t3AD4BE5BC377F82502EDC24E98A0CD21 /* PBXTargetDependency */,\n\t\t\t\t3AD979AD7992ED35CB478669CECBFA0C /* PBXTargetDependency */,\n\t\t\t\t7845C42B56BD999D4789DAC5D452DC83 /* PBXTargetDependency */,\n\t\t\t\tD871603375871A9101013BADEECA2E73 /* PBXTargetDependency */,\n\t\t\t\tCE6EA560516182C0A6BB28F3AC6094FB /* PBXTargetDependency */,\n\t\t\t\t94FAD4F9BBCBE1444B11C91C436E40FC /* PBXTargetDependency */,\n\t\t\t\t9D5BDF20084DF3E8210FEE9F61DE5032 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = React;\n\t\t};\n\t\t2681CB7EF647E61F4F9A43029C235607 /* React-callinvoker */ = {\n\t\t\tisa = PBXAggregateTarget;\n\t\t\tbuildConfigurationList = 430F0181C23B9D49AE0FB01BF97532C0 /* Build configuration list for PBXAggregateTarget \"React-callinvoker\" */;\n\t\t\tbuildPhases = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = \"React-callinvoker\";\n\t\t};\n\t\t54EB12219122432FA744088BC5A680D2 /* React-runtimeexecutor */ = {\n\t\t\tisa = PBXAggregateTarget;\n\t\t\tbuildConfigurationList = 81539B5A4569E3F41E63CB9C9B3DDF65 /* Build configuration list for PBXAggregateTarget \"React-runtimeexecutor\" */;\n\t\t\tbuildPhases = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tCCCDA559E86BE44E9BF7387A47AEAE68 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-runtimeexecutor\";\n\t\t};\n\t\t718331030FAA6D88E74D4B2240BB4AC8 /* React-jsitracing */ = {\n\t\t\tisa = PBXAggregateTarget;\n\t\t\tbuildConfigurationList = 3C2B4CD24E58B412E3E2C697725C9878 /* Build configuration list for PBXAggregateTarget \"React-jsitracing\" */;\n\t\t\tbuildPhases = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t0C2CAC5C2695689B85F032B736C68BB2 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-jsitracing\";\n\t\t};\n\t\t8CC4EAA817AA86310D1900F1DAB3580F /* FBLazyVector */ = {\n\t\t\tisa = PBXAggregateTarget;\n\t\t\tbuildConfigurationList = 611882B4FC76DDB90E3FE11E69E82A1D /* Build configuration list for PBXAggregateTarget \"FBLazyVector\" */;\n\t\t\tbuildPhases = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = FBLazyVector;\n\t\t};\n\t\t985FEA01F314F3C00F0C1E1181E6C4A5 /* hermes-engine */ = {\n\t\t\tisa = PBXAggregateTarget;\n\t\t\tbuildConfigurationList = 65417709D1683A7567ED9D68A22636AA /* Build configuration list for PBXAggregateTarget \"hermes-engine\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tB89680891A24601AFD2489230D18F55C /* [CP-User] [Hermes] Replace Hermes for the right configuration, if needed */,\n\t\t\t\t8F6E4EC43155610A21F16E054B4EAFF3 /* [CP] Copy XCFrameworks */,\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = \"hermes-engine\";\n\t\t};\n\t\tB41E34C6B259B9994C513BE178912491 /* React-rncore */ = {\n\t\t\tisa = PBXAggregateTarget;\n\t\t\tbuildConfigurationList = F730EC4EA56CE21717CD773050DB72DA /* Build configuration list for PBXAggregateTarget \"React-rncore\" */;\n\t\t\tbuildPhases = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = \"React-rncore\";\n\t\t};\n\t\tE7E7CE52C8C68B17224FF8C262D80ABF /* RCTRequired */ = {\n\t\t\tisa = PBXAggregateTarget;\n\t\t\tbuildConfigurationList = 9A3369F1A104F96B1995A4DC4B4D5777 /* Build configuration list for PBXAggregateTarget \"RCTRequired\" */;\n\t\t\tbuildPhases = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = RCTRequired;\n\t\t};\n\t\tEFEA55B1B776B6EB4B16F363BFE64D1A /* boost */ = {\n\t\t\tisa = PBXAggregateTarget;\n\t\t\tbuildConfigurationList = CBAB2C5064DBA2DAE34E7B896B68FABD /* Build configuration list for PBXAggregateTarget \"boost\" */;\n\t\t\tbuildPhases = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = boost;\n\t\t};\n/* End PBXAggregateTarget section */\n\n/* Begin PBXBuildFile section */\n\t\t006EBCAFA23C3844F04C940A4F313410 /* Props.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BF2A098BFA676BEB807B64FA44567B00 /* Props.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t008E750C6767F6A81D7DF312DEEB5EA3 /* EventBeat.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CE7D7393D013F61BE78DD0E2CDA786F /* EventBeat.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t00A5EA92B12316AE199E2854F7DB8F9F /* RCTSegmentedControlManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C9D9E5911728E23B08C57B041A401477 /* RCTSegmentedControlManager.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t00C54E7CD50896090EF4E7278BA81656 /* RCTBlobPlugins.mm in Sources */ = {isa = PBXBuildFile; fileRef = 925A2297E6EEF7197A415C4C41AE8027 /* RCTBlobPlugins.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t012219210290351B09E3228F57549796 /* React-RCTSettings-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2726901F064D66A4F014D07BB986BF67 /* React-RCTSettings-dummy.m */; };\n\t\t012747985355A39C6D1E6079BBE61B87 /* RCTScrollEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 5424951447BE1FD64194B009E9504B50 /* RCTScrollEvent.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t012BB6EAAEB87A76C792B66D04A36B78 /* RCTPackagerClient.h in Headers */ = {isa = PBXBuildFile; fileRef = D325DB74A674890FFA71EB148DA83A39 /* RCTPackagerClient.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t013853D86CB10EC25449DC7BF10568E1 /* ReactNativeFeatureFlagsDefaults.h in Headers */ = {isa = PBXBuildFile; fileRef = DC24DA11D62A60707D4DA680FD726094 /* ReactNativeFeatureFlagsDefaults.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t01474AE21855DC963FC28E1C31BEB84A /* ModuleRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 80D64042B21EA7CEEB535422CBABD3F1 /* ModuleRegistry.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t017DF990D65F9C2E66641A01B59D6B5A /* Access.h in Headers */ = {isa = PBXBuildFile; fileRef = 908D006CABFC90D4BADBF7B0C2544818 /* Access.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t01A541E5BC9CBB99C2EE623A47D5DC67 /* RCTReloadCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DF60B1D14EECCD8446FC1A15E8766B4 /* RCTReloadCommand.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t01D487B3BCD02252EA46AD31A3AE88F2 /* ManagedObjectWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 73AB6FD4B3DF99EC222564D6743427C3 /* ManagedObjectWrapper.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t01E2ED6001D6C49CE159000B657445E8 /* RCTTextPrimitivesConversions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9103371D49F49FB8704F83F623604846 /* RCTTextPrimitivesConversions.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t01FF22D8A0746B87FA43295D52EDFF01 /* ImageShadowNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 84C69750863FB2783C4C3DA5FBF5A671 /* ImageShadowNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t02316C6ABD89D9DCFC7B8AF62D777CD8 /* SharedProxyCxxModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 816B94D26D0966A297B8BFCB1F24039B /* SharedProxyCxxModule.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0231AD4A2A7FBFE5C9D2F17185F85FFC /* not_null-inl.h in Headers */ = {isa = PBXBuildFile; fileRef = A854CDECEC563F33590796054B7822E0 /* not_null-inl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0260211AC75157F22C8A580DB42FCBD2 /* InspectorPackagerConnection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F3070DCC47CC323B0236AAA591CC207A /* InspectorPackagerConnection.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t026D5B5D71D8CFF7B02A6F9E1EEA6B5D /* RCTFabricComponentsPlugins.mm in Sources */ = {isa = PBXBuildFile; fileRef = 69E632279F0013ADFF7F6ECDE2FAF2E7 /* RCTFabricComponentsPlugins.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t027B3B0E43853967D8B623D4E5A9A287 /* RCTHost+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = BA9901F19F900300AC2E7122D5AC01A6 /* RCTHost+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t028D9502D34CF9EFCF733F318ECCD483 /* RuntimeAgentDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = F4D03D4133A485BCCB2117CF4DDE2ED6 /* RuntimeAgentDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t02A0A139AA95C6D1D6EF74AC71B17B90 /* PThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 586BE0D668A4FAAEE338C3991530ACC0 /* PThread.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0325D441EB7088C55285D0ED7E97A25F /* Display.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D7DA62E7DF50F0A454C529AA78EA7E5 /* Display.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0333BBF0A9EA7C3B7E05BD48E0D67A82 /* vi.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 5744FF8972259231F82207B5D2C1B114 /* vi.lproj */; };\n\t\t03366D45E928B9EBD08D6BFDB5566C4D /* F14SetFallback.h in Headers */ = {isa = PBXBuildFile; fileRef = D673246C2C1796D3D74599E1964A310D /* F14SetFallback.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t03584C8062B53F05A7A5BA8A4C002AE0 /* RCTLogBoxView.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A49FC170B2F422E9973F529DFC94316 /* RCTLogBoxView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0364A19CF9719BA18B744C8BFBF53540 /* WMDatabaseDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 54CED87C8170B13841D92A0113192459 /* WMDatabaseDriver.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0366A2F9BCF416C8C084A6CFE4257720 /* TouchEventEmitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 359747BC6AC4881D3081F8B6AA532321 /* TouchEventEmitter.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0370A8D6E25EA067E86213AF97FA908F /* RCTSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = D9722AC2B3A09F57A4EF66060A291E1E /* RCTSwitch.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t038A3F0242D33B98EB3291B978423B1F /* Utility.h in Headers */ = {isa = PBXBuildFile; fileRef = 2002DD4A0F6B3EB4DD29785216A66D9B /* Utility.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t03E022AAD071ABD52393EA63BED66760 /* RCTShadowView+Layout.h in Headers */ = {isa = PBXBuildFile; fileRef = 500E0FB005F00271DB2A0C68724900DA /* RCTShadowView+Layout.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t041CF2CB65A7E9545B3EC1BB2BCFD469 /* RCTCxxConvert.h in Headers */ = {isa = PBXBuildFile; fileRef = E727F73300B53155B530D74924AD2BA8 /* RCTCxxConvert.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0427F0349638DCD376F42A586CB060E0 /* JSExecutor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C51C4243A2C445225C52EAD81BE81D66 /* JSExecutor.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t04D5FD40FF43BF9CD112D2B1E115FA0A /* String.h in Headers */ = {isa = PBXBuildFile; fileRef = DDED685F4B3E6B9AD98CDA1F1594C02B /* String.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t04DA5067488F0CEF42FA792DB385DE48 /* MapBufferBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0BD79853D3326455B2119D890DC49815 /* MapBufferBuilder.cpp */; };\n\t\t04F8707A7E7C72B27B4A1BBE81C9030C /* RCTBridgeMethod.h in Headers */ = {isa = PBXBuildFile; fileRef = E598B862EA984799230DF69702BF2488 /* RCTBridgeMethod.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t050FE1A6E2E7D773A48B1F4BED2FC450 /* RCTFPSGraph.mm in Sources */ = {isa = PBXBuildFile; fileRef = 963A0C06992A9D8797E0E1BA9A14DB04 /* RCTFPSGraph.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t05425C40C186C4D905D650FDE09FBB6F /* RCTJSIExecutorRuntimeInstaller.h in Headers */ = {isa = PBXBuildFile; fileRef = AA29C6591A2E715C33B132EAC7AF7008 /* RCTJSIExecutorRuntimeInstaller.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t055DA973F87A7B3ECAE8DC3E4579BE45 /* MicroSpinLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EA911281D978CB40351D59D5598FC9B /* MicroSpinLock.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t057F908327F36BAAE35535CCD3AF5CD1 /* ShadowTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95D17842EC6B842F72D0A2E4DA506E78 /* ShadowTree.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t05A580DBF295D2371F431C910CC5919C /* RCTBridgeConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 43E01084CFFDCD00B181AAEBF7F6EC46 /* RCTBridgeConstants.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t05AC9AEA1013D02AF586E82722432DB4 /* RCTCxxUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = D3F40B6C62C59C16116BE5B43DD2B6E4 /* RCTCxxUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t05CEAA68D97F9486B6361528835C7FFC /* RCTTextAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = B6501460FCAA027C674AB185B605DE1E /* RCTTextAttributes.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t061B1D7E9A7E2A984C737EABBEADD5F6 /* Extern.h in Headers */ = {isa = PBXBuildFile; fileRef = 686FA922FDC06D95A33307B2DFE9C50E /* Extern.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t062CCABB12806D7CB657BEB43436A947 /* DebugStringConvertible.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B36F42640063CCA329D93AC8F874A56 /* DebugStringConvertible.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0642403BB181EA7478210C0089DEF508 /* cs.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 8CD6649A7EC8CDD2CF31FCF0EBBD4501 /* cs.lproj */; };\n\t\t0663905B64268796E97AEE20D0DF5F57 /* YGNodeStyle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1C5225A85D60908066F79256FD961B24 /* YGNodeStyle.cpp */; settings = {COMPILER_FLAGS = \"-fno-omit-frame-pointer -fexceptions -Wall -Werror -std=c++20 -fPIC -fno-objc-arc\"; }; };\n\t\t066F723FEEAC257D987EC4692F9132EB /* RValueReferenceWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = BEFECA4F48E22E7225529497330DEB8B /* RValueReferenceWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t069B050AFB16542D9675E9245FF16FC5 /* RCTExceptionsManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = B7DAE91AFA1AEC4FD04392E412D1D4CE /* RCTExceptionsManager.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t069EC9D1FB2F67664CF6B2CEC35D10FF /* BaseViewEventEmitter.h in Headers */ = {isa = PBXBuildFile; fileRef = FD851DC7951B65E103BB27B6706B8EE3 /* BaseViewEventEmitter.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0740889CD8076D764DE2ECBE838DE059 /* RCTScrollEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C5887CFA052BA4652642CE173F3C2F4 /* RCTScrollEvent.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t074543D7B648948577CE19FF74825D59 /* States.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F3F5D9E03D596413A96FCC9292384B7D /* States.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t07600B8FEF009F0EF5D1EE0510FDEE45 /* HazptrDomain.h in Headers */ = {isa = PBXBuildFile; fileRef = 099CB5926F7A7C10C82306F50F31CAE7 /* HazptrDomain.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t076814077F393DA76C02B2B98955F27B /* RCTSinglelineTextInputView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 28992A73B6E2E3C1194912C0730023B1 /* RCTSinglelineTextInputView.mm */; };\n\t\t07718CEC8AD51EEE4CC2299F0637398E /* RCTImageSource.h in Headers */ = {isa = PBXBuildFile; fileRef = DD12CDD757C637C9F44622EFFFFB58B1 /* RCTImageSource.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0786745B0F7A7521328CC9923B8BF5E9 /* RCTBaseTextInputViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 21754846DD83D3794B287A3D6BB4DA9C /* RCTBaseTextInputViewManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0797F9543456306CA94A496239F85C3E /* ComponentDescriptors.h in Headers */ = {isa = PBXBuildFile; fileRef = AC18E26348C64BD7E409DF012EC8FD1E /* ComponentDescriptors.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t079D341C7E45BB820BB7CD75514E3282 /* RCTMessageThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C795DB945B2C3AA8C9DB7C2065D7C38 /* RCTMessageThread.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t07BFA4FB5FAF3E14B7D0E4C8711EF0B1 /* IPAddress.h in Headers */ = {isa = PBXBuildFile; fileRef = 832DCF641540319B774328DFB00B9620 /* IPAddress.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t07D42E889C8BBFAEBA0D6209B9929086 /* RCTRefreshableProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 88FE98CEA078C7FBF78F8FA3A02093CE /* RCTRefreshableProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t07E90BA58803F737B48DA6554802CA36 /* Chrono.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DC5AD5C90390C13DD621B5A02EEE993 /* Chrono.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t083594D0ABE1486128C1FACE9EBBB8E1 /* JSRuntimeFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = D2E2734D8657ABDA8E52005D327C59A4 /* JSRuntimeFactory.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t083E2C962EA0D5E14FEA17B782E3AF09 /* RCTImageManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = EBC95FE616AEF3E48E3F113E5BB076C4 /* RCTImageManager.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t084B7DAB689734EEBB98408DD6E7F12B /* RCTActivityIndicatorViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 98CDD541D0DC28ECF520BEE664E58AEC /* RCTActivityIndicatorViewManager.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t08C4E352A9F9F366FA356A9978482B37 /* Arena.h in Headers */ = {isa = PBXBuildFile; fileRef = 10F169E67E9F6AF9D77C49B765487E70 /* Arena.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t08DB5A93E58A2B2DB9557F5578E835D2 /* ShadowNodeTraits.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7AE90B08B12F40EABE9BDF5B888E8832 /* ShadowNodeTraits.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t0911E5CE6C9678C2C47A2A1749FF64D4 /* primitives.h in Headers */ = {isa = PBXBuildFile; fileRef = D4586CC35438203A980E60618B09852C /* primitives.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t09946EAA53E8CE2FFF8939A7012AABD1 /* JSBundleType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FC28EEFD6B8B7AAEB56E2A041A6DDCB5 /* JSBundleType.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t099A28E24D0D1D10AE86EA1B272EB1FF /* RCTImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 645F364C7D0579436F0E777A3156F8C5 /* RCTImageManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t09AAD2EF48DD20C48D9ED5976230E59F /* RCTLocalAssetImageLoader.mm in Sources */ = {isa = PBXBuildFile; fileRef = B2912664908CB6F78177A7A284D257A7 /* RCTLocalAssetImageLoader.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t09D436AE529D72CDC3C5268A5EFA9903 /* RCTNetworking.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3C987DB1C26CAE3839EA088A41B167DF /* RCTNetworking.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t09D9EE11D46CB94FAFBB54DFAED6C44E /* SRDelegateController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F8810FFDF257E41E57C7103FDC6A5BB /* SRDelegateController.m */; };\n\t\t09DEA251437E9A7F259A7FADBDC16619 /* ValueUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FD37A9A693B3CEB099DDA9955E3C67F /* ValueUnit.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t09FF08768BDBFF4D478026381BB522BB /* TextLayoutContext.h in Headers */ = {isa = PBXBuildFile; fileRef = BD485A11989B9D9DA494C47A98A5F09D /* TextLayoutContext.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0A1065F756F05AE906969E13DD4A1346 /* RawEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7841C02BBC8782E7B8D3EF2815A6026C /* RawEvent.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t0A375EA2429F646CCA545A8C0D177863 /* event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6CEE94FB9A70376F30A45C598232AD61 /* event.cpp */; settings = {COMPILER_FLAGS = \"-fno-omit-frame-pointer -fexceptions -Wall -Werror -std=c++20 -fPIC -fno-objc-arc\"; }; };\n\t\t0A525F353D76ACCAEB8A08546550D6AE /* HermesExecutorFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = F7CA9A9E0677E6E622E8C0C6BFC057B5 /* HermesExecutorFactory.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0A66803576446C88DE73AFC6C2B9B253 /* RCTObjectAnimatedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = F35ECB508AB87E99C735B9A8219E2790 /* RCTObjectAnimatedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0A74076497F9A29CE8DDDD53D828748B /* SynchronousEventBeat.h in Headers */ = {isa = PBXBuildFile; fileRef = DC5E287FACF5FD6F1EC1566E83AC741C /* SynchronousEventBeat.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0A84A0D6B6C2378A9F17CC60E5629981 /* RCTConvertHelpers.mm in Sources */ = {isa = PBXBuildFile; fileRef = 82552A36AF98B4CFE12CF35D745DFEBA /* RCTConvertHelpers.mm */; };\n\t\t0A9DCA309A20F282A70CE9A354445E8A /* RCTBaseTextViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 854FD3BEF6FF2E1CB963FD11F173D53D /* RCTBaseTextViewManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0AB017AA30AADCABC979757F7F94A860 /* ShadowNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F2594C363D96114D88D6D3996A6AD08 /* ShadowNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0AE3B42013A6EC4A1BDE21E82E39800F /* TextAttributes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 296D3832DB6A00F26BCB4D9A491A88E6 /* TextAttributes.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t0B0269B6A3EE1DBDAAE36B6D4D159963 /* dynamic.h in Headers */ = {isa = PBXBuildFile; fileRef = 732688D92C1058B4D3B68B3EF5CB178C /* dynamic.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0B2B305A2CAE42A22ABF7A71994E8C63 /* FixedString.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FAC834F5ADBD6F3EEF6BE67C8BE5F06 /* FixedString.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0B3B9EC6140BA1847988F15E0947B26E /* WaitOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = D1C29624546038DCFAE9385CBC490A7F /* WaitOptions.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0B59F1574F8DE2DC67F22706B855B56B /* ObserverContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = E0529EAB67BFDD4AEA0A80301D04CE2C /* ObserverContainer.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0B842AC5587E3794C6EA8047E54FDB41 /* RCTRefreshControlManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DE9029B11C02C40098A6D686789D830 /* RCTRefreshControlManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0BC972460491F39270DE005A9D40A372 /* EventPriority.h in Headers */ = {isa = PBXBuildFile; fileRef = B1E12CAD2C6FB4F2DF64F7CCC6D15E3F /* EventPriority.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0BE3BABD266439B755BB51D2E6522C93 /* UnimplementedViewShadowNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AF7E566A1E46C435965177310C115248 /* UnimplementedViewShadowNode.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t0BE9D5B31B8178E25D7701679E024C08 /* RCTNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F4B2863206A2795EDD2B67B16FAC91C /* RCTNetworking.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0C0B183FCA29DC956E1A1B894DE839D8 /* UnimplementedViewProps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E9C75E943A657F3153FF32A050DA7592 /* UnimplementedViewProps.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t0C1656F42CCF33F050C0CE2F7FC009E2 /* AtomicUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = C9BBAB8DD3A07A56FC902CC374E80A3B /* AtomicUtil.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0C173B954EAFE33EB0E10A7430B53888 /* RCTRootViewFactory.mm in Sources */ = {isa = PBXBuildFile; fileRef = D3CD42FBDC4A9051EBFC9BBE6DB02349 /* RCTRootViewFactory.mm */; settings = {COMPILER_FLAGS = \"$(inherited) -DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DUSE_HERMES\"; }; };\n\t\t0C1DD5D979DF1A9CFCB7ED8034F0C6F0 /* DelayedInit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB05D38A61483D308412FA789EE36CBC /* DelayedInit.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0C341730FFBD4215E38D143F056AAD97 /* JSBigString.h in Headers */ = {isa = PBXBuildFile; fileRef = AE85DC12DF3E30AE258ACC3C9861E350 /* JSBigString.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0C5A0742C3AE61AB9C451CA241A06AA3 /* std.h in Headers */ = {isa = PBXBuildFile; fileRef = B6A866CA3EE1ADEEDF264EFCEC0F0F57 /* std.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0C829322BFE8672132D133A9ADDC02E6 /* ExecutionContextManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5660D2686BFA4493932307298F162071 /* ExecutionContextManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0CAEB04840483A8A5A72F4355958AD73 /* RCTScrollContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 40CFEC8038EA506FF0CAC998C27E80BF /* RCTScrollContentView.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t0CCB0E1584227DBA1626298A85B5330C /* RCTInspectorDevServerHelper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 492BFB87D3FC79B8A5E5053209507E96 /* RCTInspectorDevServerHelper.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t0D0305563835BA45E3AB92FDC061900A /* Sqlite.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E38DDBA8B3F295D182A2E60FC4F968B /* Sqlite.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0D380672BD934ED65A236B8874DCD341 /* Unit.h in Headers */ = {isa = PBXBuildFile; fileRef = 4815C38AF6C2FD23A9E98263CAFC071E /* Unit.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0D396D428896CA61E2301A747EE5708F /* RCTPropsAnimatedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 07248FECF4EA760047A9A71945D1E7E2 /* RCTPropsAnimatedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0D43A9F582531A23BE6A6D1DC895F52E /* Touch.h in Headers */ = {isa = PBXBuildFile; fileRef = B711337B1DBE8FDF8CF854026E0D14C1 /* Touch.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0D74FE5F1E9448343E13242159F63F6C /* RCTAlertController.mm in Sources */ = {isa = PBXBuildFile; fileRef = D5F538BF3285BAC9B7F01B8E674355D6 /* RCTAlertController.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t0D98617995EAA61C68C93966586EC450 /* SocketFastOpen.h in Headers */ = {isa = PBXBuildFile; fileRef = C042000B32A98F9B8FE68F105D95B8D4 /* SocketFastOpen.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0D9B0AA50FE453B74124CA01912B4B7C /* Try-inl.h in Headers */ = {isa = PBXBuildFile; fileRef = 77B99168E6021298797F07B5B41C5A77 /* Try-inl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0DB74DB42DFB69580318D842D74E803C /* RCTMessageThread.mm in Sources */ = {isa = PBXBuildFile; fileRef = 78B7DDD1D6B4E8239B45FF43C990D36E /* RCTMessageThread.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t0DE685BA8A37536FD089DCCA1AEADA20 /* JSModulesUnbundle.h in Headers */ = {isa = PBXBuildFile; fileRef = D37C2939F3CFD83C906796976DC6425E /* JSModulesUnbundle.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0E25FDA99228EB53935D4EFF113CEA15 /* RCTCxxUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = B96DBA623627412849117547371D9FEC /* RCTCxxUtils.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t0E3B2C94F912663229BBBB5B4D6303A7 /* RCTWebSocketExecutor.mm in Sources */ = {isa = PBXBuildFile; fileRef = B3A27AAA848CC83E397DC39A9E46B682 /* RCTWebSocketExecutor.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t0E5654A31BD89F81B5627D63B794AAD3 /* RCTTouchHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 52350E9ADA2301F7191C925F1DCDD5BE /* RCTTouchHandler.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t0E58F200670891AE6FB10861BC1EEE46 /* React-RCTAnimation-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 089961A4AC420F0D1B51AF0717493120 /* React-RCTAnimation-dummy.m */; };\n\t\t0E616E8FB2D3D470F8965D0D1A975DDC /* Comparison.h in Headers */ = {isa = PBXBuildFile; fileRef = F3822D806026A4FCC42B9B6C3AD50045 /* Comparison.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0E62F29B3D5442BFEE2027D69162BDF7 /* ExceptionWrapper-inl.h in Headers */ = {isa = PBXBuildFile; fileRef = D2E639F57C80F20E749E4AAA4336E32B /* ExceptionWrapper-inl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0E7C77866A73091BD1A36B2228ABD0FB /* ParagraphComponentDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E725BADB6EC401BE33F493BD4BE2793 /* ParagraphComponentDescriptor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0E80F9F0507C7BEE0E643E3ACA26DF38 /* CalculateLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = E1BDFFD718B2082F582FF8627388E098 /* CalculateLayout.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0E9F6325DB8475265B002F1E7FD69D5B /* RCTComponentViewDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 6ED440A6B8C1D4FBA39CD54ECE8D51F3 /* RCTComponentViewDescriptor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0ECBB2631A8B65825964451B921BF5DB /* Foreach.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AB864487EEC16CB2CBD3A5CA275FCA1 /* Foreach.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0EEB24CECB61AF303B67DD51759484C6 /* RCTDevSettings.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7DB6E20FB18E511B8C98C3656B364612 /* RCTDevSettings.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t0F16C97260095D02DE5415B6AC67D505 /* Overflow.h in Headers */ = {isa = PBXBuildFile; fileRef = EC5F5A9DB399E74A3B0F0CDEE200B40E /* Overflow.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0F406AD78F915630431DD8A720AEC4D7 /* cached-powers.cc in Sources */ = {isa = PBXBuildFile; fileRef = F336A6F8A52B443F471C3A212D86DC43 /* cached-powers.cc */; settings = {COMPILER_FLAGS = \"-Wno-unreachable-code\"; }; };\n\t\t0F50D5BEC1F259C0536E804EDFA6AC86 /* RCTDynamicTypeRamp.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C5791AD6F4A42E6F15A4AE3E13672C9 /* RCTDynamicTypeRamp.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0F9E6E4C19935E040E25D1CF43DF474E /* State.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 776D1F938E2ED7503BB26ACB324E4DF9 /* State.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t0FB25A9F0783B7F60859244B80A341AE /* RCTSafeAreaView.m in Sources */ = {isa = PBXBuildFile; fileRef = D63DB3EEA2658569FE4F58A50743B58C /* RCTSafeAreaView.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t0FBE1DE34BDFE9B0C85542DEB581D4B6 /* BaseTextShadowNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4D0CA4B3C631CF1CCBBF61F2587F57B7 /* BaseTextShadowNode.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t0FD8067209C57B8F29919B037BC1ADCE /* RCTDecayAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = A956484ABC9353D13F5C213DFF6F76A7 /* RCTDecayAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t0FEE31C3F9AD01261144C17B9456649D /* CString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8AFE8F048924F7A8798499375AA68271 /* CString.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\"; }; };\n\t\t103B71140476A7F2EF9149C840F969BC /* RCTTypedModuleConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 0741545417754F6F394479EDADE0B5F6 /* RCTTypedModuleConstants.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t103C9C846673585F643489F5844C7873 /* SRURLUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 11168BD52EB1FA983258A217EBF918E9 /* SRURLUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t106F3109E3A54C7F0C67DABAFAD2B5A0 /* RuntimeScheduler_Legacy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D2E26EF832C651D9123567DC1E118CA8 /* RuntimeScheduler_Legacy.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t10C16DE5DAD1B3D65FCED627DA9BA6F2 /* RCTUIManager.h in Headers */ = {isa = PBXBuildFile; fileRef = F9E3E83E4B4A307A114208C3D1F55BC8 /* RCTUIManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t10C999C6FFE831B0F4E754627171AC0F /* RCTImagePlugins.h in Headers */ = {isa = PBXBuildFile; fileRef = 62F2B8A9CA2FD124CEED393804E7351A /* RCTImagePlugins.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t10CFBCB29BE411B25B987B73CFF4B18D /* ParagraphShadowNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AA655BCC979429F0F18E3B0FA7422BD /* ParagraphShadowNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t10D706F48F81D0DA3FBD346730A27F9C /* PhysicalEdge.h in Headers */ = {isa = PBXBuildFile; fileRef = D2F955F57435151EED343EB06358A2A7 /* PhysicalEdge.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t10FD9B5E858AB7024274775682AFD14B /* instrumentation.h in Headers */ = {isa = PBXBuildFile; fileRef = B87758E567704381060EF12FB7B025AB /* instrumentation.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t11116B560FB8DB7A5F736E5E8C11301B /* conversions.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C67AC080A782225408DA978D1DA4CA /* conversions.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1161007E9F6AE05B1C1F1911C7E44E76 /* ToAscii.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354A705EB660FEBF388788D956A9E58A /* ToAscii.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\"; }; };\n\t\t117CFBAF2F3D6DA74F906DB824DBA6A0 /* AtomicNotification.h in Headers */ = {isa = PBXBuildFile; fileRef = 357C89461C2B2C6319BF4ADE3900971C /* AtomicNotification.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t11AB7A2E0F4DA784CFD4F91F3B078693 /* SafeAssert.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2DA18CEB3A1B39D6DEFDA830C70B7AE /* SafeAssert.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\"; }; };\n\t\t11B0E7FB7ECA7915B7A9BE59DEAE0A2C /* RCTDeviceInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3B03D90250BBDC20A58910E9BAE12F13 /* RCTDeviceInfo.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t11CDCB576F0B65DE17497B576F58EAE2 /* BaseTextShadowNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D6775356C3C08E3F8AEEA4E5D9A9A05 /* BaseTextShadowNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t11D8A53B5669E71051AED58511A1202D /* RCTUIManagerUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 1749F4295539F83F4BA4637FE2C39F34 /* RCTUIManagerUtils.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t11DF589DF2952480FDAADA363B846A8C /* RCTComponentData.m in Sources */ = {isa = PBXBuildFile; fileRef = 49C8ED14DB40A8E3E597CC83FDA19B4B /* RCTComponentData.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t11E23CE507B474D1E3C4F5B07071F93B /* CheckedMath.h in Headers */ = {isa = PBXBuildFile; fileRef = B83DFBC0279E4DF8CFA602D622946926 /* CheckedMath.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t12059A7AC3C0621F11193E23732E1819 /* SRIOConsumerPool.h in Headers */ = {isa = PBXBuildFile; fileRef = AD29B45C17572843FBF6146FD5BF87E6 /* SRIOConsumerPool.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t120634F36CBAC662040FA4FADC964386 /* RCTUIImageViewAnimated.mm in Sources */ = {isa = PBXBuildFile; fileRef = BB8ABBAD57F26EF6E656FCE9B68DB2F2 /* RCTUIImageViewAnimated.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t124EE25B6A65DBC1926C13C9CC91C6E1 /* RCTPlatformColorUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = F98C396019C17AFAC2E6514744534845 /* RCTPlatformColorUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t126FD381EC013EB7F76745BF6B3959FF /* AtFork.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AFAEF578C155F412D05E26AF9E63C602 /* AtFork.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\"; }; };\n\t\t12731EBF39779BB1E177B701949AD2C2 /* RCTTransformAnimatedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BD826EA734516D956DB671826DED506 /* RCTTransformAnimatedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t12B3909CB415E47E8826B5999B035007 /* LayoutPrimitives.h in Headers */ = {isa = PBXBuildFile; fileRef = 88B840D20BFE171BE3DD9DFE4EC33AC0 /* LayoutPrimitives.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t12DFBB4643EF49D0656128B8F983CD6F /* Unit.h in Headers */ = {isa = PBXBuildFile; fileRef = EA4EE4C6FAFA0A824AFDB30A96D0C144 /* Unit.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t12F481159DC1895DF2BC2595AF7AF275 /* RCTLocalizationProvider.mm in Sources */ = {isa = PBXBuildFile; fileRef = C488747CC15D138B30ADB8E498B04FF4 /* RCTLocalizationProvider.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t12F715ECB2D5A07ABA04F56405B1F80E /* json.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F91CC1CB5BBFE630F1A219C0EDA145B9 /* json.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\"; }; };\n\t\t1304FE75578CCF44D9049CCEFCDB04D9 /* ShadowViewMutation.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AEAEA20EE165C0C9C90A2B2BDD3C21A /* ShadowViewMutation.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1315D3EE3476373DEAB746B56511B323 /* InspectorInterfaces.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 35645CAF1F9339B964422D6014D3FB62 /* InspectorInterfaces.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t132ABB496BA53BC8084D9FE272A010D3 /* Uri-inl.h in Headers */ = {isa = PBXBuildFile; fileRef = FB0002CFA1F991284A466F64F3CDD670 /* Uri-inl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t132E187EFE1E47ADD957A700284D6D9F /* RCTAccessibilityManager+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D7C4A3E62FB0FF7DF9D127631B944B1 /* RCTAccessibilityManager+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t132EA906D184846F30461FF9D8FFC75D /* RCTComponentViewHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 287D6D149E8F946A10D3DCE0418FB1FC /* RCTComponentViewHelpers.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t13372D98CE8D776E176F54A38E8E6C22 /* UnrollUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C8868803CE5E240AD3BBEBB15555C0F /* UnrollUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t134F41DF984A58A9AF39A8C4B87BA130 /* RCTAppState.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A3132932FB8BCA22D8C2EB34C0BA27 /* RCTAppState.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t13635F0130E1586FD24F72C56AD22D62 /* RunLoopObserver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CE02C2175E3E663763ADD7A4613D0103 /* RunLoopObserver.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t1366F04C5590C425BB77826538FFC333 /* RCTUIUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 568619787B3509509A5FFEA27285F968 /* RCTUIUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t13691F404B16F303025DBD6AB3558377 /* React-debug-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 751490A9CC81CC3D1FD6DE9D1A2309B0 /* React-debug-dummy.m */; };\n\t\t14188338839347D37D80C598C0E5748C /* DoubleConversion-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C32920036DAE3C20F1840181BC975BDA /* DoubleConversion-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1432E3A16B74C9650C19792CD18E8B4E /* LegacyUIManagerConstantsProviderBinding.h in Headers */ = {isa = PBXBuildFile; fileRef = 090C56DE791731685F76F2010E681C1E /* LegacyUIManagerConstantsProviderBinding.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t146AB77B241BF6C67DBDD63E5634067A /* RCTViewComponentView.mm in Sources */ = {isa = PBXBuildFile; fileRef = A2237CD09A4316F9776CDCDA5907FAF5 /* RCTViewComponentView.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t1478022575B1D58411C818595E989892 /* SRPinningSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A4D45A1805126ED1CD25C84B4FFE9C2 /* SRPinningSecurityPolicy.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t14A2A5FBA6070AC7E7320E8DA534901D /* RCTAnimationDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 109F9C2934C9D047C914A988E8DFBBA6 /* RCTAnimationDriver.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t14D3C20765AA5165E7881E50B9491268 /* RCTInstance.h in Headers */ = {isa = PBXBuildFile; fileRef = 16F3181ABDCFFB13D360DA6C3047FC89 /* RCTInstance.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t151E1345EEB4F94B1CDF454826A8A392 /* Malloc.h in Headers */ = {isa = PBXBuildFile; fileRef = B9CC2B87AA979A0CE226E57B8BE306A7 /* Malloc.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t152D661D4E78EFAF951BEEEC25294B04 /* TurboModuleBinding.h in Headers */ = {isa = PBXBuildFile; fileRef = DAA88CD24C578A8D699BEE467905F247 /* TurboModuleBinding.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1590F8C4A09BF6B5279331EA10DCD463 /* StaticSingletonManager.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8A1AA2067618E92E2DC37877060EA1 /* StaticSingletonManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t15A01C98D01F5E8CF5667E215EC11869 /* RCTAdditionAnimatedNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAEBDA32E972C2DD6BC87FC03C2F7B79 /* RCTAdditionAnimatedNode.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t15D2AA86AE351CD34C4884281F78EAC1 /* PositionType.h in Headers */ = {isa = PBXBuildFile; fileRef = DA12408D51CF845CE9C49609B11D2C6D /* PositionType.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t15FEAC3E79CD8CAA28028308AEFFB10E /* RCTDeprecation-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FB252110B7F6302C421C46ADF22A0BD /* RCTDeprecation-dummy.m */; };\n\t\t1615048D674C53EC2FE5B6B09AB39742 /* SimpleThreadSafeCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 20DB7A7891E6EF51C69DA252EF43EE25 /* SimpleThreadSafeCache.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t164466B28EEB0ABA1B7B4750EA02412A /* RCTObjectAnimatedNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 717D5148DA07668AC04A61F52407FF5A /* RCTObjectAnimatedNode.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t166EFABABADB56EE0ADEED83DF8BD9FF /* React-RCTBlob-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B041282BB6E0CD0755E03B990F035982 /* React-RCTBlob-dummy.m */; };\n\t\t1671FF1B0ECF02D1CEEA5C6BC8BD0545 /* ConcurrentSkipList.h in Headers */ = {isa = PBXBuildFile; fileRef = CB027A92361F7CF889CAB836E490C149 /* ConcurrentSkipList.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t16769F3466BB96E91499BDFF33A8DFB0 /* RCTSurfacePresenterBridgeAdapter.mm in Sources */ = {isa = PBXBuildFile; fileRef = DD2869F37A6F486F8994AEF1E2A9E0D4 /* RCTSurfacePresenterBridgeAdapter.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t169D881DA6F98A74ADBAB85239E51495 /* StateUpdate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56D34A45C0AD73CC42339EC6A2CA028E /* StateUpdate.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t16B0FFD3A9EB7A8C3CA7E201D4471911 /* UninitializedMemoryHacks.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DD30C23A0277639DFBEA7BDEC6DFEE3 /* UninitializedMemoryHacks.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t16C786D254AC4BB415F78C7E14E32E91 /* Direction.h in Headers */ = {isa = PBXBuildFile; fileRef = A27676D6AF709B183CC889284CE2B3D1 /* Direction.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1720823FC59E390B74A878DE97477C35 /* SmallLocks.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CCBE13D47A90960E21168709D81A256 /* SmallLocks.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t173E5B38A957B127E5311171245424B2 /* ExecutionContextManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 90CE57248719DB1AD38AECFB8A66AF11 /* ExecutionContextManager.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t1742C4E8AB7ED1A6739FA6689AA3DE2A /* RCTSinglelineTextInputViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 70FD25025D88D2C467D14135D309D155 /* RCTSinglelineTextInputViewManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t176B697FC865093156BE99FD2E26E832 /* RCTBackedTextInputDelegateAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 6316526F1CBE0396E9767EDFD35C9870 /* RCTBackedTextInputDelegateAdapter.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t177DA7AB540346CDB555B61232F0C1EF /* JSIExecutor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 80C0E79E7C53BAA868A44B3B53AEDC66 /* JSIExecutor.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t177DC996D972A1F1AA6BC586B8A468A7 /* RCTConvert+Text.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B62C6CE9D343C56E332C5816AC631E6 /* RCTConvert+Text.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t17A413B902A05FF7C8FFA29FF67C8484 /* RCTRedBoxExtraDataViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D5CD2B433F8011D807EABA3442374E7 /* RCTRedBoxExtraDataViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t17E53719BE7C9DAA239E3684B393CA6B /* RCTDisplayLink.m in Sources */ = {isa = PBXBuildFile; fileRef = E590E42E80DFE90E35C644EC5BA97D77 /* RCTDisplayLink.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t1870A74C16D312C74C2956A5EDBFFA89 /* react_native_assert.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DEFDBFF0494ECD44CD200BB0D4A18A33 /* react_native_assert.cpp */; };\n\t\t18D0C52BFC98BED39B1BA61AEEEE42BA /* RCTPropsAnimatedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 07248FECF4EA760047A9A71945D1E7E2 /* RCTPropsAnimatedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t18F1DA5B651DC6FF50C4B7D1A14C844C /* PlatformTimerRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C7F9675F0DDF7D607F4527AEEA7CE9A /* PlatformTimerRegistry.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t191AF4701921B0FFF6BBFE9DEA53594C /* SRURLUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = BA4DC46A209C68A22450F45E72C9E535 /* SRURLUtilities.m */; };\n\t\t1954536D05D0919B8EBF384663613170 /* RCTLogBox.mm in Sources */ = {isa = PBXBuildFile; fileRef = AD4FFB5F1B30B5584201585D67221D38 /* RCTLogBox.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t198422DED4D172D61EEF24D51F0C90FC /* F14Set.h in Headers */ = {isa = PBXBuildFile; fileRef = 27DB05F6CB39113BE10AD3A747787E40 /* F14Set.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t198A3B5F43844F6B78F0A7BC96A9EDE7 /* RCTParagraphComponentView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 350583A27DECF7088A05CC2259BE2E98 /* RCTParagraphComponentView.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t19965E9C8B6A83E60822324223B9E1A0 /* RCTStatusBarManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 99F1158A135CC58252D861686496E8DE /* RCTStatusBarManager.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t19B38D8BECB8D7FA1BC251ACA2144990 /* componentNameByReactViewName.h in Headers */ = {isa = PBXBuildFile; fileRef = F0DF8AFAE1CBEF65355E92467584E4A5 /* componentNameByReactViewName.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t19CA3B1362DA1810EFB9E88C070B0610 /* RCTFileRequestHandler.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6424FC955FE5FD23D675EE7BA5D86749 /* RCTFileRequestHandler.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t1A11A9EE8F446EA3A8B0E39CA71A4BDB /* TypeList.h in Headers */ = {isa = PBXBuildFile; fileRef = D5266C5C2A1441F787E4EAA90B9166DA /* TypeList.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1A4E0BB39256B618590C38FE0F367BE7 /* TextShadowNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7D0C7E3FC36DCB52EB03EDF13AE747FE /* TextShadowNode.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t1AA0576DF9AF85EFA7E299D94B5C3B82 /* MapBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 020982AF78C5E396F3E5F3B1DAB98A95 /* MapBuffer.cpp */; };\n\t\t1AF039E7B9A51980BFD84F7F156D0F30 /* RawPropsPrimitives.h in Headers */ = {isa = PBXBuildFile; fileRef = F56A35A5E128A460F52E75B7F79344AC /* RawPropsPrimitives.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1AF45C2BB51683947FDF5F457C5EB8C4 /* RCTNetworkTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 91DEEA05C7FC3B3FE85F51D16F0060A1 /* RCTNetworkTask.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1B2038C09720EE3EF41A25166979A55C /* RCTImageStoreManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 682FB404BC26FD7A5CE7722DC28CA1D9 /* RCTImageStoreManager.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t1B502CFAD551B4D4392A0BADFBBEF25B /* sv.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 91CE745FCDC2F917FBFE8E7C44B21638 /* sv.lproj */; };\n\t\t1B8A83B4760FD4C5BA61A514D66A63CD /* RCTActivityIndicatorViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 017AAA982C6D59AF8E6BE61915541DEC /* RCTActivityIndicatorViewManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1BAC799EDE2AC6356058F9873FD0E453 /* RCTInputAccessoryView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B510656AC02DF313FD0F8F0C11489FC /* RCTInputAccessoryView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1BC18889A0F8309C58DCAE6525184FC0 /* RCTShadowView+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = CF6A928C7A982274E5574B81E88B799B /* RCTShadowView+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1C27E39EC5320E65D9EEF37CF24927BC /* Syslog.h in Headers */ = {isa = PBXBuildFile; fileRef = C3A48141C5DA78A08DB8A2E1D30AB6D9 /* Syslog.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1C2B9AB0D768A8AAE37CD8D81A4577FE /* TextShadowNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 34DB7C7BB2A350937253113F587A18E4 /* TextShadowNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1C834508104A30A18F88CF2096F4D027 /* Pid.h in Headers */ = {isa = PBXBuildFile; fileRef = FADAE66E358428988B767C2AAC5E2119 /* Pid.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1CC5C347C1A6FBFC24DD8F7BB59F94FE /* RCTBlobManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 181D4079537F9E8B578405C805CEE545 /* RCTBlobManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1CE20D629F4DE5EA945C098144CC56E5 /* ShadowTreeRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 9621CF80D2D681568C8BCAB003EA22F2 /* ShadowTreeRegistry.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1CFA73658F87C10453EE47487DCC0B4E /* RCTBaseTextInputViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 21754846DD83D3794B287A3D6BB4DA9C /* RCTBaseTextInputViewManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1D24AD6815FB29F4B8A6C10D6E9101F8 /* RawProps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 19D4CF0857B96FBEA270CC2CD46B424F /* RawProps.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t1D3F9F242ECCE36DDFD697B08B9C28E2 /* RCTImageResponseObserverProxy.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7ACDCCE812E169B5C2EE32A4A130D907 /* RCTImageResponseObserverProxy.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t1D460FFC60AA03A2D4A41BB9313212B7 /* RCTRedBoxSetEnabled.m in Sources */ = {isa = PBXBuildFile; fileRef = FBC253E87364123EF03ADC474B7364C8 /* RCTRedBoxSetEnabled.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t1D65FAC0B4EB638F3549891915706680 /* de.lproj in Resources */ = {isa = PBXBuildFile; fileRef = B97F33E9BF0E6E5FD86B0667D950EEC9 /* de.lproj */; };\n\t\t1D8DF82EA7134E0A0C27D629500846B9 /* StyleLength.h in Headers */ = {isa = PBXBuildFile; fileRef = C1761C0EF012288CCBB296F26485316A /* StyleLength.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1DAE56A42C6E37928F1FFEB77BF3DC83 /* RCTBridgeModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E589066D508A38B86B7F0F4BC726DB0 /* RCTBridgeModule.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1DAE7679F73905E15A400EAA0352004A /* Expected.h in Headers */ = {isa = PBXBuildFile; fileRef = D869113E22557F357D518366520103CC /* Expected.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1DB4BA71D203BAEC328D16B17FBD954D /* EventQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = A4AFB126642929BDB526E70B71748879 /* EventQueue.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1DD61B98236970129C72DC5F12F60FFC /* RCTUIImageViewAnimated.h in Headers */ = {isa = PBXBuildFile; fileRef = 23F1171EF1ED7FAD36769DFA9AE002FD /* RCTUIImageViewAnimated.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1DF173C0F1800A149A77357F3C58CFDB /* RCTRootContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E9B6C8F56601C7A8963DC42032FDCD4 /* RCTRootContentView.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t1DF1BB081174334B20F0576E3917DDFD /* RCTPerformanceLoggerUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = BC22B5A34F36A3E0B23AF08AE83EE25D /* RCTPerformanceLoggerUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1E19E82F288E0354AF7A0C508DE61035 /* RCTScrollContentShadowView.m in Sources */ = {isa = PBXBuildFile; fileRef = 42069F17D0B92E1DCE65D62807AAC0E8 /* RCTScrollContentShadowView.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t1E274E727DB799B01B0C75D68C9C1D4E /* FBReactNativeSpec-generated.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2D50029B232140A61A9034E9BCCA51BB /* FBReactNativeSpec-generated.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -Wno-nullability-completeness -std=c++20\"; }; };\n\t\t1E3B09D27ABE649167CCDD7BDED72012 /* color.h in Headers */ = {isa = PBXBuildFile; fileRef = B32465A7B304C55D416657F5078DC373 /* color.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1EC4F1FA41C153E536CF6B69DAB893B2 /* RCTSafeAreaViewComponentView.mm in Sources */ = {isa = PBXBuildFile; fileRef = A46EE0867CB9E92996C6DE17ED0EE3DB /* RCTSafeAreaViewComponentView.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t1EDC798E6DFC0A6D410C23283F368BB2 /* ValueFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 9788F37552AF8A0A123A07FA7D080CFA /* ValueFactory.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1F147DA94B4631A7C3DFA6A200385A7F /* Error.h in Headers */ = {isa = PBXBuildFile; fileRef = F15F1FDA5B8172C6781AEDF956D65B0C /* Error.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1F2F410A3DBB6D4DDF4AB78B2D20E7E1 /* propsConversions.h in Headers */ = {isa = PBXBuildFile; fileRef = D8FE00B7A123C71C5F84EA661B962CBE /* propsConversions.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1F42FAE5D5775D8F7630EE666E17DB4B /* RCTComponentData.h in Headers */ = {isa = PBXBuildFile; fileRef = D7D198038E6A0A8EAA233D9E57B97AC6 /* RCTComponentData.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1F5DD61D863EF9D3FB7CF714C39251F7 /* RCTHost.h in Headers */ = {isa = PBXBuildFile; fileRef = ED3AFC07867C7C0F7FA6437AB25AB2C0 /* RCTHost.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1F72F587B6C3002E9497082BD1AA562D /* Align.h in Headers */ = {isa = PBXBuildFile; fileRef = 997B7B2A3CC26B9D704D7CB940D7E4C6 /* Align.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1F8AEF1CE8B533F95A189E4023D12779 /* RangeSse42.h in Headers */ = {isa = PBXBuildFile; fileRef = 937EF872F9B051F189B72F49D8D54CAD /* RangeSse42.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t1FAE05CEA6EEBE5C78C774D3210A258B /* OpenSSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E748C5FBED7C0C756FC4C4A6B5C2E8C /* OpenSSL.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2000672F833DFA37DD8CB7BEAFCCF66F /* RCTColorAnimatedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 991E213D38BB44AE5C3367DDE4A4D4D8 /* RCTColorAnimatedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2001CC4F61119A2ACAC4E1B9519A91F5 /* SRLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C0FAA307377663772FDCD8EEA4D9752 /* SRLog.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t201B4E5253766941A6453DBDAEBB5A7B /* Badge.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BD78C8466D2DAC22B989C5EFC592BAD /* Badge.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t20AA75C455914560C441E1A6A7AB2FBE /* React-CoreModules-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 51FCC6E2D2922D4288A83D114839FF83 /* React-CoreModules-dummy.m */; };\n\t\t20BB7CDCC08AFE49FE5BDA569D34CA7F /* RCTKeyboardObserver.mm in Sources */ = {isa = PBXBuildFile; fileRef = ED075D1904D8F2A132AD09A4B59B2BE9 /* RCTKeyboardObserver.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t20C78373363E4FE8FD4F47D5BA774E31 /* SharedMutex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 11C43FEC006F4FB4810E35B57EDCC84B /* SharedMutex.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\"; }; };\n\t\t20E7F16F71DC306F4B434967352405D8 /* RCTGIFImageDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = B86E6473CEA7651AF56AB4A0DE22037C /* RCTGIFImageDecoder.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t20EAE28B44F5C9DE96EC1A6F88B62226 /* RCTInputAccessoryContentView.mm in Sources */ = {isa = PBXBuildFile; fileRef = E0E6784EF6FD3D1F4FC47BCD8E352359 /* RCTInputAccessoryContentView.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t20F2FB8C633B8AAF924B03661CAFFC73 /* RCTLinkingPlugins.mm in Sources */ = {isa = PBXBuildFile; fileRef = 03DD688F3EE201B455FF2DD77C7D1A1E /* RCTLinkingPlugins.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t20F4C041F77DE88B56616FB311D808D4 /* RCTSurfaceRootView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95FAFB9E62426C075E9E5E41D65333EB /* RCTSurfaceRootView.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t2107303D3315D0F3426CECDA31262A67 /* JSIndexedRAMBundle.h in Headers */ = {isa = PBXBuildFile; fileRef = 005EE10ECBC2C2E6ED007588CF1B3163 /* JSIndexedRAMBundle.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t21173C1FF076EA74CC2875A8451CD04B /* RCTInteropTurboModule.mm in Sources */ = {isa = PBXBuildFile; fileRef = A4841C02742AC28A86287DBC07806A0E /* RCTInteropTurboModule.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t2127F903E8B55484942293A05FD9C18B /* F14Set-fwd.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EE92B6EF155BE970721A6B2647F4AF4 /* F14Set-fwd.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t21762E8D44EA510506E4F327D3288746 /* Config.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C02361943CFC4D43BDE38DB0C69F197 /* Config.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2185C70869CA8F16DEF5598671117271 /* FMDatabasePool.m in Sources */ = {isa = PBXBuildFile; fileRef = 42E6807903C30860853913241D16DBE5 /* FMDatabasePool.m */; settings = {COMPILER_FLAGS = \"-Os\"; }; };\n\t\t21923AF5A501E8D2C01033B9DCACBBAE /* React-ImageManager-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BDED2FDDA75EFFC4F049DF04CA2B0B69 /* React-ImageManager-dummy.m */; };\n\t\t219B3B01BD518584F2A89A722BCFD0DD /* RCTTextViewManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = FE4DF00236D3CFC9333AC4F2536AD07C /* RCTTextViewManager.mm */; };\n\t\t221CEE4476D0FB923A3FE36D579351FA /* RCTDevLoadingView.h in Headers */ = {isa = PBXBuildFile; fileRef = 93C1BA5C7F7A59628950008F9375BF82 /* RCTDevLoadingView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t223B827459F291942AAB05E2A456B6AE /* NativeSemaphore.h in Headers */ = {isa = PBXBuildFile; fileRef = F138DB447C457AE8D0B432C87AB6D5C2 /* NativeSemaphore.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t224015C78F407E1AF6FB0BFA6A88B60A /* SRPinningSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 63DB097D064EEC088A4DDB9A0F3030F8 /* SRPinningSecurityPolicy.m */; };\n\t\t22444A20481B3591CDC93BC0F4036A1D /* ConcreteComponentDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 05A8338A74887E54877E3B5E2360A93D /* ConcreteComponentDescriptor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t229229DAE6C3E28130FBD708A67CBC5F /* PointerHoverTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E177524AAB858045AD52E1FFD4C991A /* PointerHoverTracker.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t22C211E6B7DAF646E04306522824BBE2 /* protocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 068DB205A59C74E3480D49B43B734439 /* protocol.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t22F46521658395591D46E6679AAA6E65 /* SafeAreaViewComponentDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C897CCFDE4BF7130CDDA0286B966FDB /* SafeAreaViewComponentDescriptor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t22F5D84C2EC3F910630272B7FC049205 /* RCTFileReaderModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 91946E0E55C67A006BFC6A09B6757F34 /* RCTFileReaderModule.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2302E49723D8DDAEDAE358344C4523DB /* IPAddress.h in Headers */ = {isa = PBXBuildFile; fileRef = CFBAA91154D63D788000A507C872D157 /* IPAddress.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t231F95C755E8E42DA517D4818ACCAFB8 /* RCTRuntimeExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A75958C7177C6CC36B895D30E732E64 /* RCTRuntimeExecutor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2325A82054865E3115D014BB158CE549 /* SafeAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = 718D4D78E0BAE0CC2A7AE58A6FBEA36A /* SafeAssert.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2333ED79527F4E5206C50DCF55A95D34 /* os.h in Headers */ = {isa = PBXBuildFile; fileRef = E8A80DDDD78CE9D5045965620EF601A1 /* os.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t237C8EB38A4DCFA780AD9A086456731B /* ThreadCachedInt.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A2E8DDEAB65BA26685A7F1CE66A6C2B /* ThreadCachedInt.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2383735C57B2D47D561308E59910C80E /* DynamicPropsUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 777152D60FDE62FB7858028E0F494386 /* DynamicPropsUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t23EA4F6D2E5FC91C6D53D8806CEAB325 /* Byte.h in Headers */ = {isa = PBXBuildFile; fileRef = 63F5F0571EA83996B53E596BF37008E4 /* Byte.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t23FE66BD7B87FE4B286A4773B14F1309 /* ParkingLot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4DBF56470408F62F5CFC5811EC41C55 /* ParkingLot.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\"; }; };\n\t\t244DF977A158213CCB43D4FB6CB90E3C /* RCTViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B47FFA4BCF0EC2E8F7A7330A0B625F7 /* RCTViewManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t244E92C5AC2F270708212D76276B1CC6 /* FBReactNativeSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 67659C3BADBA7BF553069160A417E2A0 /* FBReactNativeSpec.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2458B50A7D8382C89BABA674C834A9EB /* React-NativeModulesApple-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F5340BCCBE419D365ECF7F577F67C2B /* React-NativeModulesApple-dummy.m */; };\n\t\t245A6AC43C8E566986398F8A0295848A /* RCTPlatform.mm in Sources */ = {isa = PBXBuildFile; fileRef = 581AB95CD00868534D40A89FC7298A36 /* RCTPlatform.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t24688A1F5DA03AD255685CF282C0B45E /* RCTAnimatedImage.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8612AE35A990235C979983FD304D7330 /* RCTAnimatedImage.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t24707196E335E65B5121B91C0FD70449 /* LayoutMetrics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05E7D2C113326591CAF18117371EEF7E /* LayoutMetrics.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t247DEF303BC51C27870693F921CE4A24 /* Yoga.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BA4FB0F0557FD723CB5B38C308FCE50 /* Yoga.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t24B93B8D464A1B7783F9BCFDD33A31D4 /* RCTResizeMode.h in Headers */ = {isa = PBXBuildFile; fileRef = D47708686F705FA831C439C1F56306F5 /* RCTResizeMode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t24DD942C54FA5B87253413913DD836E1 /* RCTViewRegistry.m in Sources */ = {isa = PBXBuildFile; fileRef = A322F1AA7B7D88649BEF8224A0A6AC08 /* RCTViewRegistry.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t251D3DAD4CE4ACA70D08EBB9CBF9BB39 /* FloatOptional.h in Headers */ = {isa = PBXBuildFile; fileRef = 7299BD666C1DD5C0DB7343D26EB7DFDA /* FloatOptional.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2521660EE10E01F259AC87F51E7A65C1 /* RCTDevLoadingViewSetEnabled.h in Headers */ = {isa = PBXBuildFile; fileRef = 166D6C41B0081CEA737676E813606B04 /* RCTDevLoadingViewSetEnabled.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2522833611E2F1484E7EDF975387F2B2 /* YGValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 30DD3B64FEFD7A1AB8A1EC8B9D52D87F /* YGValue.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t253A354FA00DA7358AB288F68EC5437C /* SysResource.h in Headers */ = {isa = PBXBuildFile; fileRef = 50A063D0B84A8706BF9D36E052AFDCA4 /* SysResource.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t25D9A0F89FE35DB331D48EAEC035EC4D /* RCTRootComponentView.h in Headers */ = {isa = PBXBuildFile; fileRef = A0DF3FB6417DB1CED9E5F8CF270DC9F6 /* RCTRootComponentView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t25E65F9C1D8F402D822044446C5F4D76 /* RCTTouchHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = A6D702ACCFE3931509F2790C6E153783 /* RCTTouchHandler.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2613399F7C428BA43CA183A859DA8F36 /* SRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 73F9F5B50A8454106AEB1EAA5892325D /* SRWebSocket.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t261839D1DF68DC4E17AFD60D0E7BEE61 /* Wrap.h in Headers */ = {isa = PBXBuildFile; fileRef = BCA6A0AD322E97D31E8AB398E6F754C1 /* Wrap.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2625B35CEAEFA1B0EA467965A3330311 /* RCTUITextView.mm in Sources */ = {isa = PBXBuildFile; fileRef = E3438873735D5FAD55DAADE60C49CACC /* RCTUITextView.mm */; };\n\t\t2629FBFD880EC26BC47A0CBDE2C88230 /* ComponentDescriptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CB0D3B1D12723CB6F6A4B5A53775B4DC /* ComponentDescriptor.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t268887F37656A49D32EE08CF5590DACC /* UIManagerCommitHook.h in Headers */ = {isa = PBXBuildFile; fileRef = 52271E0F8ED452014891F20BD4947CFF /* UIManagerCommitHook.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t26C1DCC87DD011BAEDB37B82B115865B /* RCTMultilineTextInputView.h in Headers */ = {isa = PBXBuildFile; fileRef = 15AD43283A6A2C9FC3B3AFE6DCF2E636 /* RCTMultilineTextInputView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t26D3F78DBA25B5DB3A22E10497AFF723 /* ImageManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = A44876BED8E87761881D41D005CCA0E7 /* ImageManager.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t272FBEB7CB6CF2763CAC1A880569A587 /* NetOps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F671A2A4E4BD8E767A5A396E4793F09 /* NetOps.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\"; }; };\n\t\t27539AB858023E5C2410655150B37627 /* RCTModalHostView.m in Sources */ = {isa = PBXBuildFile; fileRef = EC10C9531C237863B28A6E20B64DC15A /* RCTModalHostView.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t27928D50D910F1E6A27AF06B64529EF2 /* RCTAppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AAE64CF21F806223D54976C43C7CA94B /* RCTAppDelegate.mm */; settings = {COMPILER_FLAGS = \"$(inherited) -DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DUSE_HERMES\"; }; };\n\t\t2795ACF267C2F8A23C4534D06B00D110 /* DefaultKeepAliveExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 23C5959A240F9A33D470E539FE162B9D /* DefaultKeepAliveExecutor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t27B66BEF2C02E1BF8A8DEFFF921C11B7 /* RCTLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 506E11C60093C5C364DE8F3F2F22AC41 /* RCTLayout.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t27BEF09F1B06C91F5C15ABC5294F5A05 /* Conv.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC611E2FF7C83C727ED3ABB22AE435FC /* Conv.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\"; }; };\n\t\t28420DE9D152356E2FAB7532421804A5 /* RCTPlatform.h in Headers */ = {isa = PBXBuildFile; fileRef = C60F31851CF169CE81AA452AA4663164 /* RCTPlatform.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t28BAA972822F670D348FDBFC73AC77A5 /* RCTMultiplicationAnimatedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = F28A2D4EC3F7FA5178A446213C416F6C /* RCTMultiplicationAnimatedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t28CA6DD3D240C72630DDA20DEA46F245 /* RCTAppState.mm in Sources */ = {isa = PBXBuildFile; fileRef = D3897A8D57FA7C5B759902F2D3CEA752 /* RCTAppState.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t28DB4C2B675C293F97E5441914BE3302 /* ThreadName.h in Headers */ = {isa = PBXBuildFile; fileRef = 36EDA6F605E6CEF5F9A72D38C0AA3DED /* ThreadName.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t28FA21EE52C9E18188C59298BB5C9B23 /* RCTTextSelection.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F4162FD06F15F97900434A78640AA96 /* RCTTextSelection.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2923AE58E9BBFBF24388EB12E31A6DB3 /* NSRunLoop+SRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = DD33EAFFA1FBDE7A2DA696E03388F6CA /* NSRunLoop+SRWebSocket.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2967A53F795C03EF89E6805B44D8D826 /* UnimplementedViewProps.h in Headers */ = {isa = PBXBuildFile; fileRef = 459B7A62CD1A78C3B1D3BA7499CB76CD /* UnimplementedViewProps.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t296D94DA561C3E641394E251DB57CE49 /* RunLoopObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C5E9B3E860020EB74A5A0DCB92E545F /* RunLoopObserver.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t29B62250F780EFA539F4D51E6F2C95F7 /* ViewEventEmitter.h in Headers */ = {isa = PBXBuildFile; fileRef = E55A5082F7AD7430141AC089256155B4 /* ViewEventEmitter.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2A190325244F59D848E634FE42885204 /* ImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 51582CF5BC4E40FAA616B6363DF4B4A5 /* ImageManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2A1E984533FFF0761823C77A5EF8C986 /* RCTSurface.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9A909CE9BFF1F0B380221FDEE11D0211 /* RCTSurface.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t2A222BEC97B97591ACBD51C9F00E4921 /* FlexLine.h in Headers */ = {isa = PBXBuildFile; fileRef = 82C0C34C914DB0E6E56880987BB5F0AC /* FlexLine.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2A348AB502AECDE1C672786CC3B55C27 /* RCTTextViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 289131589CCC21FDAAADD8DA0E1EA4A5 /* RCTTextViewManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2A3DF91AE6FF101059F589E7310AC371 /* Singleton.h in Headers */ = {isa = PBXBuildFile; fileRef = 86CD21C661338CF76FD714E4819D0BEF /* Singleton.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2A43229C2CBF5932A43C13CAE64EB114 /* RCTTextInputComponentView.h in Headers */ = {isa = PBXBuildFile; fileRef = DC7BB8BEE774754AA2ABA4E7FE98E101 /* RCTTextInputComponentView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2A4E5E0880C9929B370D1941E5AE5F26 /* RCTInspectorPackagerConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CAE7021D6D8066FCD1D39076F4A85C1 /* RCTInspectorPackagerConnection.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t2A63D2E0528E66779F46F18FC17AA6E5 /* RCTPLTag.h in Headers */ = {isa = PBXBuildFile; fileRef = D6AA075D0670043A067B8F82481DEBA1 /* RCTPLTag.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2AD655BCAFC873B439DC03D772B7A36A /* RCTDivisionAnimatedNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 18590B13A8701CBEA8A9383645C889B3 /* RCTDivisionAnimatedNode.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t2ADAF88BF204658BFDA47A99DB5763B2 /* React-RCTAppDelegate-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D958FC3ECB59DEF56F7A316CFF3FE5E5 /* React-RCTAppDelegate-dummy.m */; };\n\t\t2AF8AFC12AED081CCB827E74F6E3CEC2 /* ConcurrentBitSet.h in Headers */ = {isa = PBXBuildFile; fileRef = EFCF80831E029EAC9ECFEDFA8C0B0BE9 /* ConcurrentBitSet.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2AFADA9C8F0B22CDC7A0E2963AEC6AA8 /* RCTVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = A0F0DECC4F2AEFAABCD0C3A4F368C487 /* RCTVersion.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t2B053AF14B09FFD6105A38AD87C405FD /* RCTInputAccessoryComponentView.h in Headers */ = {isa = PBXBuildFile; fileRef = B357588581A44158631A618472611CF2 /* RCTInputAccessoryComponentView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2B1BCED5F526FBDAFE483AA8FD111456 /* RCTSafeAreaViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BB971ED75CA1674F0FAAC4500BBC50A4 /* RCTSafeAreaViewManager.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t2B2385A1AF00F0FDC4EA1268BA76A6AA /* RCTImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A6A2A0A084F0C30F0774529E7FC9E72 /* RCTImageCache.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2BC999AB42C3CA0A9E306051F16E41CD /* ReactPrimitives.h in Headers */ = {isa = PBXBuildFile; fileRef = E9D85EEAF42C9AF3CC1666F33CF872DD /* ReactPrimitives.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2BEBCE047AD0091EBD66305D11F06EFA /* EventLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ADB11086CA7355EACB08F3BD428C0A9 /* EventLogger.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2C1991F1D309596566A8060D4AA46B58 /* not_null.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FFA741A8EC26DD612783B14F5682ED2 /* not_null.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2C292D5C62AC937B09A50BC0EC271A81 /* ParagraphState.h in Headers */ = {isa = PBXBuildFile; fileRef = B8E9BBBEFDC785C048DDEF9EA28FFED5 /* ParagraphState.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2C4DEC5C31C3B5E06A279A46A34A39F5 /* RCTComponentViewHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = F8025E613E68EA6B0C75074A74BB97E4 /* RCTComponentViewHelpers.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2C6B6C20776A6BA94A3FE6306DBB60C0 /* TurboModuleUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 75F4E00A45E47775648B3C5AE641D5F7 /* TurboModuleUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2C7A4437740961E1B2EE201D045F8382 /* LayoutAnimationStatusDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = F481D215714FD018CDA8C79540DDC6A8 /* LayoutAnimationStatusDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2C9A212BEA5B7429E6A978943ED1DAAF /* zh-Hant-HK.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 6F72B3F616F35DD1A397AD34A9471C80 /* zh-Hant-HK.lproj */; };\n\t\t2C9BA5A633348EFCD5CA2A7608673BFC /* vlog_is_on.h in Headers */ = {isa = PBXBuildFile; fileRef = FCFD99083FD714E25C32912BE07EEE2F /* vlog_is_on.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2CB63483AD5282D53115DA088A6D936A /* raw_logging.h in Headers */ = {isa = PBXBuildFile; fileRef = B797800645D9DCAD28A63367CF4B5E31 /* raw_logging.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2CD12789B7555CCDC42A8F96829434FD /* RCTMultilineTextInputViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 55B1D50AB670D1ED574D945561008297 /* RCTMultilineTextInputViewManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2CF8933910674BAB9196E42A6AF7938B /* Thunk.h in Headers */ = {isa = PBXBuildFile; fileRef = ED92914EB3DF6C80AB5B7CF1AF9F3EE4 /* Thunk.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2D6D394C37329EFADEA4DD715151AE40 /* StaticConst.h in Headers */ = {isa = PBXBuildFile; fileRef = F8ECC27DA5BDBC6D1C55FD6C21B19E9B /* StaticConst.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2E0021D5DBD9D49FE9F15EF491CCC73E /* RCTAlertManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 59FDF98892BF9744DCB3D5402C366923 /* RCTAlertManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2E561E90748578416A9EE5CB139792AF /* RCTMultiplicationAnimatedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = F28A2D4EC3F7FA5178A446213C416F6C /* RCTMultiplicationAnimatedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2E73C529F9D90E24C3A1865022C1349F /* SRRandom.m in Sources */ = {isa = PBXBuildFile; fileRef = CD0C06BAC55CB15F45E71416B7D4DA0E /* SRRandom.m */; };\n\t\t2E9BC3BAD893393322285BF3C0382710 /* BatchedEventQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12C4D9C3A09316945470A899D769DF18 /* BatchedEventQueue.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t2EA1CF569CEB1BE9F7565DA20EAA2F3E /* YogaStylableProps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9C99F752EEC9741F33EED362076074BF /* YogaStylableProps.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t2EC9DAE8AF8C81A439BBA1420CAA95F3 /* RCTFrameAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 33FBAF4A2C505DEA7624E5FE6146C7CB /* RCTFrameAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2EF5DEA6EC39762BEF76A15B2340FABD /* ParagraphEventEmitter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AC1448E3360F6A62DEB6D6BE3EACB26A /* ParagraphEventEmitter.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t2F026ED16EAEA90F157701D8481A9FAB /* HostPlatformColor.mm in Sources */ = {isa = PBXBuildFile; fileRef = 608A42FC636CC123077F86095300FDD8 /* HostPlatformColor.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t2F4A50C76937BDC8C6EF040478E22619 /* ViewShadowNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 318D26E55C7F26B32EFB91A5243FBAF8 /* ViewShadowNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2F88D219CCD7E3E739539945E990B622 /* RangeCommon.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B4291E3436CE7DD23B4E403E8E8B12D /* RangeCommon.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2F92EFDA8334261165D9729751EBCBD2 /* JSExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = C3D78A44188C6EFED4F1A257A66CB85A /* JSExecutor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2F97D1B13BB188BE85AE78B1463C1511 /* RCTBlobPlugins.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EB0389666D3316FBF79F7AA176DAC97 /* RCTBlobPlugins.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2FA26988350A7C7DDD412B7D17AFAA4F /* RCTBridgeDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AF790ECD36E6DBEB706E9E072597102 /* RCTBridgeDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t2FA70C774952798EBD8ECDFAAE8D0EF1 /* SynchronousEventBeat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 651A43C1D1C89E7F8CBDD08B496E2160 /* SynchronousEventBeat.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t2FF0092F74C6CF1ABAD0EEE5E9B7DCE2 /* Preprocessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DD488FCCA9EEDD9B68B8F99D105C44A /* Preprocessor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t301CA9266A52873F320B63EF2A8DFB4B /* bignum.h in Headers */ = {isa = PBXBuildFile; fileRef = 555499AEC258DE52284D569572113A79 /* bignum.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t301CDABF3FD039547D92DBDB38996953 /* RCTRawTextShadowView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 586843BE182EC40BA0F3E64B3128724F /* RCTRawTextShadowView.mm */; };\n\t\t302E01399CB39F9CFCA096F494FD609D /* WeightedEvictingCacheMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CB19BE6FA86208CB5F4A61FAACE298E /* WeightedEvictingCacheMap.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3034E6F4E05DA159043F7E5065071557 /* RCTLocalAssetImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 14631AAC5EAA775CD7C68A1D2E2D51C0 /* RCTLocalAssetImageLoader.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t30423632D5CB339BCC2AD8432337F83C /* SimdAnyOf.h in Headers */ = {isa = PBXBuildFile; fileRef = 769BAEE9C92AEEA6A5C4C98AE6FFBD88 /* SimdAnyOf.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t309E25F08B621B5EBE7BF0494CC68190 /* CpuId.h in Headers */ = {isa = PBXBuildFile; fileRef = 58B548A2C55831264828B2298FF825B1 /* CpuId.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t30B45DCAC90068BB83348CA5902B8A53 /* Math.h in Headers */ = {isa = PBXBuildFile; fileRef = E5745DFD5BE516C91A82DD1988970E10 /* Math.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t30CA335AA5FDC7D5427E29AE12CB3DA4 /* RCTVirtualTextShadowView.h in Headers */ = {isa = PBXBuildFile; fileRef = E0B0A85C6C1A686DD387938C318B3E03 /* RCTVirtualTextShadowView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t30E5FD6C28B6DDE9382A00324EB0123E /* ConcurrentSkipList-inl.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DCF6A50893A882EA7E8F44D10AD971D /* ConcurrentSkipList-inl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3105C7328DF6EBCA7C0B524D18848E9D /* ShadowNodes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1C48A5DDAEDABFF1B422CC636928EFAD /* ShadowNodes.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t31210B5DC141C8A8CD84829A977225C2 /* Exception.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CE4F352241E750994254CACB3900290C /* Exception.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\"; }; };\n\t\t314196735F72AAC0DE94ED28828A924B /* RCTFontProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 19853EBFDCA4264503A59B9DBEDB47E4 /* RCTFontProperties.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t31519DE72E79DF61D9D2A39A29C69147 /* AtomicRef.h in Headers */ = {isa = PBXBuildFile; fileRef = BC6B8699949BC42E05A2CD3F716AFC65 /* AtomicRef.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t317D8B85EE8D4F5553A959EF2A083728 /* ReactInstance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D82A92B30EAD44574D7D78331C054CBF /* ReactInstance.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t31B704DBFBD9861E5B16E4F568E5463C /* HostPlatformViewProps.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E432DBE0F06DDCE804C5D453ED121C3 /* HostPlatformViewProps.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t31D4FC1E4131A0B940E87016B5558AE4 /* GLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CEDA3FBCCC6D4495CE2BD141F7EA3B2 /* GLog.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t31D8AC65D15BA8248DF32ACB02B0F785 /* TextComponentDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D7520FE4D76AC547890B7D6B4C69894 /* TextComponentDescriptor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t31E564ED4FF70E455D56A3FE8E642B7E /* Partial.h in Headers */ = {isa = PBXBuildFile; fileRef = 99E851596D4A5EE743DC493671DB9DA3 /* Partial.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t32122892A762CA325502454526E788E3 /* SocketRocket.h in Headers */ = {isa = PBXBuildFile; fileRef = C9FA2111792B3263822E75649BD66902 /* SocketRocket.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3214D80F9DED151E3F561609B66C7646 /* RCTDisplayWeakRefreshable.h in Headers */ = {isa = PBXBuildFile; fileRef = EADB1A8E010B5CA7F0E6C4071A9DDA92 /* RCTDisplayWeakRefreshable.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t322902B35752EC592D5B4ED2C00D9393 /* RCTTransformAnimatedNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5742CED06F824159A9F9C6FCDF8F66EB /* RCTTransformAnimatedNode.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t324C443EB256ACB55C212834659DA668 /* RCTNullability.h in Headers */ = {isa = PBXBuildFile; fileRef = 5181AFE5FC05B015D0F98EAB49991236 /* RCTNullability.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t324FCC0FF10B590AF07F730C94CD911D /* RCTUIManagerUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = E52A7A09F41E9EADFAE686BE3A607CBD /* RCTUIManagerUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t327DA72CDC89A3215CE65582DE8EC3CE /* cached-powers.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A2D8939F820583ACA4B8154B63050D7 /* cached-powers.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t32927DAF25802D1608CD1D24D72A329C /* Util.h in Headers */ = {isa = PBXBuildFile; fileRef = DFD95BCA231BF7294B54BBBE1F7A43A2 /* Util.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t32B14C8CE62B0F19D8FA1206C467111D /* YGEnums.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5510FC0409FF02AA7A39E8542D74B323 /* YGEnums.cpp */; settings = {COMPILER_FLAGS = \"-fno-omit-frame-pointer -fexceptions -Wall -Werror -std=c++20 -fPIC -fno-objc-arc\"; }; };\n\t\t32BE4A83D48CA291030133CE99AEF6E2 /* ScrollViewEventEmitter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 17E08D0C97050157936C9ACE4FAF61CA /* ScrollViewEventEmitter.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t32BEF79AE336EE5C0463C825D845D74E /* UIView+ComponentViewProtocol.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6ECE543138E064055C9EBCDC09788205 /* UIView+ComponentViewProtocol.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t32CB16366592B859A428ECFEFEEA5072 /* RuntimeAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 75527CABA73184F431A0FFA3918A6D5B /* RuntimeAgent.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t32D32237A0CEB8E068046F1CF42E4E8B /* WeakFamilyRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5676712895937C4B56B481AD3916DC06 /* WeakFamilyRegistry.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t32F2AB6A8644D4D1214F84733E66E464 /* NetOpsDispatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 07BDDD0C6666F54BB37E72A8F733FB50 /* NetOpsDispatcher.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t334D66567F979838AB9768E9FAD7DAB5 /* RCTConvert+Transform.h in Headers */ = {isa = PBXBuildFile; fileRef = 196B06D9D049A05D1552FD603A608719 /* RCTConvert+Transform.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t33752EEE3593427DDBA5D62BED59A543 /* RCTMultilineTextInputView.mm in Sources */ = {isa = PBXBuildFile; fileRef = E0004F076A577E394A0CC4F9AEC7F57B /* RCTMultilineTextInputView.mm */; };\n\t\t33B60CFA904F8D641ECC43A55E9EAEAD /* SpookyHashV2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 856575C5A576BBE72D1C55601F788145 /* SpookyHashV2.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\"; }; };\n\t\t33B73F67E086D3670224498285D702A2 /* printf.h in Headers */ = {isa = PBXBuildFile; fileRef = 08986599EA9FB16EDB0C58CAC0A405F8 /* printf.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t33E2BFCBA5338082F01D9EB37BAA4D29 /* UIView+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 15D5A0BFD941071680CCF747591837C8 /* UIView+Private.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t33E4E54947FB17B702F1DCAFD7B9F03D /* Database-query.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C22873AF49E658011AF710A68003CFF7 /* Database-query.cpp */; settings = {COMPILER_FLAGS = \"-Os\"; }; };\n\t\t34057EED3E16A361B64AECEADE8125C1 /* SanitizeAddress.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E97DA6EC4EC14E2148BD7844BD1F3A3 /* SanitizeAddress.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t341E869680CA9F16E5C3EBA6C65F3509 /* UTF8String.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C2C2A0E994E59EC1C51CEF553541EF /* UTF8String.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t342D7CD1B93BDB714F8E4B9DFF918CA2 /* SchedulerToolbox.h in Headers */ = {isa = PBXBuildFile; fileRef = F2164B5DB3B104B55F7AEC0D7FC1AF24 /* SchedulerToolbox.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3438AB92F2ACE84B8CB6A8CFAF423105 /* RCTFrameAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = CADAFD82F38E6E1F5955E921DD980A8C /* RCTFrameAnimation.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t34773F2E8217FAD06A591CA37AA00855 /* RCTModuleData.h in Headers */ = {isa = PBXBuildFile; fileRef = B1F4D64B534E21B5E81E8A4107B004EE /* RCTModuleData.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t348A9EF3D088309F5869ABAC68FAF798 /* primitives.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F8D2287EF58ADD156913AF3C0FA5266 /* primitives.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3497C572885DBA4E24B62AC77F10BD16 /* ConstructorCallbackList.h in Headers */ = {isa = PBXBuildFile; fileRef = DD754522EEA5CC221FED5671228D41ED /* ConstructorCallbackList.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t34AE0A783C5465DB2FA5C2B7D50EECB3 /* RCTVibrationPlugins.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8FA3CC41DE47D337EEEC4F2523A5A366 /* RCTVibrationPlugins.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t34D59BC36C90C49E573199421B622923 /* RCTPerformanceLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 6196FA4E5DE772F34B620947921AB6EF /* RCTPerformanceLogger.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t34D9E5CBB49C6023825590C930261A0B /* Value.h in Headers */ = {isa = PBXBuildFile; fileRef = E488A78562494C4DFA18485430C98C6D /* Value.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t34DAAFB7B06B65259B6FECDA06AA3387 /* YGConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FBD5986BF1B3B3D5B97CC5217DFE41D /* YGConfig.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t34E028B5C229E7B80E09BF21AA7F30F5 /* RCTSurfaceHostingProxyRootView.mm in Sources */ = {isa = PBXBuildFile; fileRef = B5C07CBA21F57FACAAB67EAB0200D145 /* RCTSurfaceHostingProxyRootView.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t3538563AD434CBFA6C3567D5B59E20C3 /* RCTBackedTextInputViewProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = FDD85087D17F29E409E05B785CAEF845 /* RCTBackedTextInputViewProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t35547761AFCB44BCA094A33F2AA23946 /* BufferedRuntimeExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D8D501AFD4360EBEB5A66144AEC1729 /* BufferedRuntimeExecutor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t357660135E7900222582CBEE62180032 /* YGValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E537D35052D701095C980ECF42D55AC4 /* YGValue.cpp */; settings = {COMPILER_FLAGS = \"-fno-omit-frame-pointer -fexceptions -Wall -Werror -std=c++20 -fPIC -fno-objc-arc\"; }; };\n\t\t3593206D0F19D00262870E27E9D13872 /* YGMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 6ABE82ECFCA457CEA1122532AFFC13E1 /* YGMacros.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t35C6AD1DDC48BCD69B6A44257803179F /* utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = AA3A3C340B0E34E2DE91A75386812EC9 /* utilities.cc */; settings = {COMPILER_FLAGS = \"-Wno-shorten-64-to-32\"; }; };\n\t\t362390F52589F7931C2C6851393C3AF9 /* en.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 5931C556E2652C0F4090A1106D4FEAD0 /* en.lproj */; };\n\t\t363C5BFDFA69F60D5FB8F4739D6D5315 /* RCTI18nUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 70EAB919380BCD43218C8BA42AA15E04 /* RCTI18nUtil.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t36B786CEB46A9C3E458EE781044361D2 /* ScrollViewState.h in Headers */ = {isa = PBXBuildFile; fileRef = 60E4F60D2C2C4C8B7116D0D69FD78717 /* ScrollViewState.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t36CBEE8C52A61FE395F052C9B267A290 /* NSRunLoop+SRWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 8176863C104CD771DDB717C9059C2ADE /* NSRunLoop+SRWebSocket.m */; };\n\t\t36F7E7BA67E5C0369DFC89F1ABB6F394 /* RCTLog.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4695EA457448E4B94A1CB1A54D7440C3 /* RCTLog.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t370E2940965694FD29FF3ADFCDE7A953 /* RCTUITextField.h in Headers */ = {isa = PBXBuildFile; fileRef = B8426E288C9F4E8EADBFDB047F2B7941 /* RCTUITextField.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t372A6DE5D3A0C8A394F94769C9DDD521 /* RCTDevLoadingViewSetEnabled.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EEB093EC638788E1D7EDFEC04D19432 /* RCTDevLoadingViewSetEnabled.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t374104F0C17176257605FDFEC67C537C /* AtomicStruct.h in Headers */ = {isa = PBXBuildFile; fileRef = 22BF4B17D357A3BD3840AF11EBE43257 /* AtomicStruct.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t374767F9EA7457BFA37FF3114B4950F9 /* RCTEnhancedScrollView.mm in Sources */ = {isa = PBXBuildFile; fileRef = A349B258597025E561C3C8C773B51674 /* RCTEnhancedScrollView.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t375048B5D0D59A4D57806E18C491B74A /* ReactNativeFeatureFlagsAccessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 427B91D65DD3F677FDB0BBC6941F4424 /* ReactNativeFeatureFlagsAccessor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3773063F34B6E58F660EAC09788CCB4D /* SurfaceManager.h in Headers */ = {isa = PBXBuildFile; fileRef = D14147B88E3AAA44C3CB4E3E9B1D01EE /* SurfaceManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t37F4DCC3A8CA1D1A4D418657FF19733F /* RCTImageResponseDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 12F4585D8579A5039D742D7E3913D0B6 /* RCTImageResponseDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3845DB49D557E86260B40B8530E9CBD6 /* RCTPackagerClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E9F375741E65415151EE9093DC1535E /* RCTPackagerClient.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t3863DCA85A7094A440D5551001AA0CC6 /* AtomicHashMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B7D86572DB2B5C7CF324979D3984A2B /* AtomicHashMap.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3882ECE408421957CEFD2A0225E9E697 /* LegacyViewManagerInteropState.mm in Sources */ = {isa = PBXBuildFile; fileRef = 05DBC9C72F0FBD718ED0DED3984CE795 /* LegacyViewManagerInteropState.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t38B2E0C490CBF63CB0C7398BF2B7A9A6 /* ImageResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = DA3239428E42490C3045975A1FC6A276 /* ImageResponse.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t38D31452260553290B4B6BA24A990899 /* RCTDecayAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = A956484ABC9353D13F5C213DFF6F76A7 /* RCTDecayAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t38D845C721547D5C42965B3EAF1E6E66 /* RCTConvert.h in Headers */ = {isa = PBXBuildFile; fileRef = AA1553BA7C531B0C6FB8F13D06F2F39B /* RCTConvert.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t38EBCAC6CBD066B63E56309C335B8733 /* RCTImageShadowView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2BAEF360C04D98022913BA78AC8A5A0F /* RCTImageShadowView.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t3903DC2E45FF49565FBA6612830040C9 /* RCTLegacyUIManagerConstantsProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 04160B32874923084312A1D40F4703C3 /* RCTLegacyUIManagerConstantsProvider.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t39048CB54388C7559E2F723650C145CA /* WMDatabaseDriver.m in Sources */ = {isa = PBXBuildFile; fileRef = 635016B0AE2DF86EDCC11EB4FBB41D5F /* WMDatabaseDriver.m */; settings = {COMPILER_FLAGS = \"-Os\"; }; };\n\t\t3915F70AA612897DAA0B10B81683CAC5 /* RCTTouchEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F7378714B1A2275988B900E389392EE /* RCTTouchEvent.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t39830AA65645472F2A472D2F9A8E506C /* Stdio.h in Headers */ = {isa = PBXBuildFile; fileRef = 16BD9C5268EF8F747D73A1B1E9C395CD /* Stdio.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t39B02D53EEBFD6F7CEF41BBA45C497AA /* InputAccessoryState.h in Headers */ = {isa = PBXBuildFile; fileRef = BF131B6BFD3FDF6FD3D006300FEC04E3 /* InputAccessoryState.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t39B0694CF79D9D40DA4409C513304D3C /* StubViewTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 507CCE949602395770BDF4CA5A58B07A /* StubViewTree.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t39B7CCC00536E89229DD45DE7FD25D7D /* AString.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E9ACDD39D4A14DDC16406CDD0457ED3 /* AString.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t39CDAA971F3E8A4A08BD53F982886AAD /* React-nativeconfig-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 88DDF4F26D766FFE558EA52E582A0879 /* React-nativeconfig-dummy.m */; };\n\t\t3A0154B9D205F094345A2BA8B30AA58E /* Filesystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FD76DB8A83861EF7CD0449CFC4DE097 /* Filesystem.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3A0218754CAC86A5243E1A54F5D96717 /* NSTextStorage+FontScaling.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFF833F6075C65A5629CFE2099DA2DE /* NSTextStorage+FontScaling.m */; };\n\t\t3A10A4EAE244B467148FBBF299D6E668 /* flags.h in Headers */ = {isa = PBXBuildFile; fileRef = F37B91C0C1BDCB74BF74E5D62F1A84B8 /* flags.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3A1DC7244ABEED96A40CF933FC2E60D6 /* ExceptionString.h in Headers */ = {isa = PBXBuildFile; fileRef = 890A2DE43F7CEC807F5D45DD7FD1CE74 /* ExceptionString.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3A38547BEC61A65216B7FC203DE719DC /* EventListener.h in Headers */ = {isa = PBXBuildFile; fileRef = C4CDFBC1ECF32EC053DEB342DEE1B1C2 /* EventListener.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3AAA14243A77113026B848ECEA53CF6B /* IPAddressV4.h in Headers */ = {isa = PBXBuildFile; fileRef = 938DC03F8EB05E7BDD33175BF907D170 /* IPAddressV4.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3AB2BCC50FC4E939FC03FA2CA6D93E7C /* RCTAnimationDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 109F9C2934C9D047C914A988E8DFBBA6 /* RCTAnimationDriver.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3B0BCF5D40456442075E087910B65BE1 /* RCTSwitchComponentView.mm in Sources */ = {isa = PBXBuildFile; fileRef = B5F4950574A43023D083A3E3731760A1 /* RCTSwitchComponentView.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t3B19E916E5FEAD382441C2ABD10B7D9B /* SynchronizedPtr.h in Headers */ = {isa = PBXBuildFile; fileRef = 67610BE7173AD3B20491234782354847 /* SynchronizedPtr.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3B35DD8BC49B13A3D0EAE82DFF5457B4 /* Geometry.h in Headers */ = {isa = PBXBuildFile; fileRef = 25EBF2FA7FFEDCE7086F43F67F482A2C /* Geometry.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3B553323908F46C01882B3EC75FD2192 /* Color.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F1A707D6F8DE921DFA42211D2036148 /* Color.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3B57A8B697DB83FCA053D4A7A4D17317 /* RCTInspectorPackagerConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F5A0CA304F0EDE4723DD50DC013E5A9 /* RCTInspectorPackagerConnection.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3B61E4B1CE2CA8087C242D41191C5DD7 /* TurboCxxModule.h in Headers */ = {isa = PBXBuildFile; fileRef = E6AF50262FD901B97155797FE9CCADC0 /* TurboCxxModule.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3BA84270769E9763D410373AA68B4DEE /* UIManagerMountHook.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EBD024CC0AC3DC8897152BE3FB46E12 /* UIManagerMountHook.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3BCC36BD3528A06FA613D3F0182969A9 /* RCTScrollContentViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E0817B1CB0DBAA45D6A064FE340FD13C /* RCTScrollContentViewManager.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t3BD1B9E6E3E5634C671FCEB14161A751 /* RCTScrollContentViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AD4769F2911766BA548AFD0FFEDF8426 /* RCTScrollContentViewManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3BD8694DF761B2FDC7BECD2BF44B222E /* RCTAnimationUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 16ADA7CA003A807781299F67A1578DF4 /* RCTAnimationUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3BFD717911ACBB0C75C28B7BA77DAF93 /* RCTStyleAnimatedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 57C409D3D492DAB7368ECE438E121DB5 /* RCTStyleAnimatedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3C062861BE19C56482F00235234E3774 /* AttributedString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F8E43EE33594D104C5EF3813E34DEAFB /* AttributedString.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t3C1F4BAA6EB4E34AB9A21DBCF42B54C9 /* Singleton-inl.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C17F91E7D084760672DD64B292DF5B5 /* Singleton-inl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3C38C4F44AE4F93F0E9A51E07978DA24 /* InputAccessoryShadowNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 10CFAB7D8A0F2282F1390473E5C37F0A /* InputAccessoryShadowNode.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t3C7BB8C75F929D8FA314EB26ECE53CDA /* RCTNetworkPlugins.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B80393CC9C72D221195616E0DA5B67F /* RCTNetworkPlugins.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3CB47200EDBCEECB186D83CC145EEDED /* PlatformRunLoopObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 96F9A50575BD572DC92EEFE7118DE559 /* PlatformRunLoopObserver.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3CCDDC20E73F5316F844BD418D7FB570 /* CppAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A6A08279C8FADD3D8FF81B1C2112A8F /* CppAttributes.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3CEB56248F6859AC3BDED52E5ABB81FD /* ManagedObjectWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B300B21C62B9776F40F71E7688DA14C /* ManagedObjectWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3D3FF2249FEED66F576893A1E61C19FC /* New.h in Headers */ = {isa = PBXBuildFile; fileRef = A6E21B3D9A76F241B93CEF7D2AA19709 /* New.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3D77407A19494090FF57F73616D734D8 /* decorator.h in Headers */ = {isa = PBXBuildFile; fileRef = CC3E8F86C7DCFECB3326885EC3BF91AF /* decorator.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3D9A59728E70022027792DBB95213CE3 /* RCTSurfaceTouchHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = F4A1A873A0B3D3C8636143BB6282A12D /* RCTSurfaceTouchHandler.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3D9F615303E80F664EF87C36F4258098 /* RCTBridgeModuleDecorator.h in Headers */ = {isa = PBXBuildFile; fileRef = 367ACA1132BAD5F80E6CE0171064F750 /* RCTBridgeModuleDecorator.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3DE0145BCB2860FB847CCB3BC9C25300 /* SaturatingSemaphore.h in Headers */ = {isa = PBXBuildFile; fileRef = AD601E06293D3A3930BE7C2006B41F2B /* SaturatingSemaphore.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3DE173A4880B25D444AEB95AA2B085C0 /* SRSIMDHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = BAF67687A73C975DC1D89F35DD7A68A5 /* SRSIMDHelpers.m */; };\n\t\t3E19A59E0EC2217267D80A46845BD6AE /* RCTConvertHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 819B22FC019823E75AE6A15AF791911F /* RCTConvertHelpers.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3E5A9EC165D1D6979F3BD6F253B408B6 /* EventPayloadType.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EDE07F5836F143CD7857CB2E5B5E136 /* EventPayloadType.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3E5BDBC0CC3A15341956E99C1006F430 /* SharedFunction.h in Headers */ = {isa = PBXBuildFile; fileRef = 797702F6E9E25223D401BD7E13885F76 /* SharedFunction.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3E66BF7B000ECEC9F677306A1EC11448 /* conversions.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F5B11863A62393419B2A19ECDD56569 /* conversions.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3E7B0F82566D1D91383B364B52BFCBEF /* RCTRootComponentView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 906802F5C01093C45F849B1189752669 /* RCTRootComponentView.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t3EBA21C27903E9515E2B509B4671A407 /* Instance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FF7AD4797D7F14A650587773DE9EDC89 /* Instance.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t3EBDC6385095946F937BD8273B5F255D /* SplitStringSimdImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = ADC21E6203A42D717BE49E8E588CB0D5 /* SplitStringSimdImpl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3EBE1E69C78277F3AAED44F5C90F5922 /* InspectorInterfaces.h in Headers */ = {isa = PBXBuildFile; fileRef = ABA56E2973B5F2DA40756B56701FEC9D /* InspectorInterfaces.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3EC98ADE8058D966A66677C7720BEF1C /* AtomicHashArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C73DEF93EB855958CC048BCB076258B /* AtomicHashArray.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3EE52474DA38D7BC3D6AD0E51F15EBE0 /* Futex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55EADA43B34BE3D62BAE2D869390C842 /* Futex.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\"; }; };\n\t\t3EF492603A770B0DB5F8A5386D3128F3 /* RCTI18nUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 412F97DED69E29E2A7146162142A9FF5 /* RCTI18nUtil.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t3F0DA3FE9305A3181F7BA27FADB4F9C3 /* RCTBlobManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 181D4079537F9E8B578405C805CEE545 /* RCTBlobManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3F344B5BCE4AC351E0E383F5688F37B9 /* AsymmetricThreadFence.h in Headers */ = {isa = PBXBuildFile; fileRef = DC2247332E34E9A5EEAC651BFE23CE54 /* AsymmetricThreadFence.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3F41C3029A1001872EA78923FEC6B96B /* AbsoluteLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C0913180FEC5C605ACD33BB9E09CDAD /* AbsoluteLayout.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3FB693C6A8F96970DB7439677E46487F /* PointerEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FBF294CE17585A6CEAE66F34026AA0C /* PointerEvent.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3FC78F29079C2C32E0662B9734092AA1 /* FallbackRuntimeAgentDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 488ADD85E24689EBD7862B0D4E7CA547 /* FallbackRuntimeAgentDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3FC9FEE72E60365C856B578EF2B5F616 /* HostPlatformViewEventEmitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C95BBE34A199CF72BBFBFC172AC6E71 /* HostPlatformViewEventEmitter.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3FD08618BB317EDD1F8E5F2C2CFB3AB4 /* RCTAttributedTextUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 53F62FE9FCA2DB3B3BA9F838F5513256 /* RCTAttributedTextUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t3FE61AC2BB3C11616328F6F3C70CC9F7 /* SizingMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AA86F8B69827747B651178FB5B21A21 /* SizingMode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t402C44DF036C52575614FBD787E15482 /* EventDispatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0E46F0129DD1A6A967F2580EB63011DB /* EventDispatcher.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t403D51CE5F2689BA36F4629C3C5059B1 /* PropsParserContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E2250F8ED2A809808FB295A155DA713 /* PropsParserContext.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t407C77D329B19C296DD48705A6D7B7EE /* RCTSubtractionAnimatedNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = A07442CD10380BE0C2F7C19CA5D62FB6 /* RCTSubtractionAnimatedNode.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t4092C517F13E60D6D9C673E3530CDC84 /* RCTLayoutAnimationGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 41EC212BC4905E428935BED6DA109744 /* RCTLayoutAnimationGroup.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4094BC9DAC269411141A9BF211A0C1C1 /* RCTImageCache.mm in Sources */ = {isa = PBXBuildFile; fileRef = 57BBCC84BCDB23D6ADA72EA6128CE796 /* RCTImageCache.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t409697D416E1EC0B0559AA517ECADA7E /* JsErrorHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 12A7093733E6C2A1819EAFD7B6275C0B /* JsErrorHandler.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t40A9D1F054503F770F54FB569C86A77F /* Log.h in Headers */ = {isa = PBXBuildFile; fileRef = 45D864901AF697040097CE5D0FCD717F /* Log.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t40B51C9BE008F034A16C81420F0DA4A0 /* ComponentDescriptorProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 7761A07D372FD8689FEED3327D1DA8FD /* ComponentDescriptorProvider.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t40D2A11491175D755AC117B88BEA9CE2 /* LayoutContext.h in Headers */ = {isa = PBXBuildFile; fileRef = B84580A87121CAF61CB478AB93D9261B /* LayoutContext.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t40F28A3F4BF66C4EF68B3035DDACDBAA /* DebugStringConvertibleItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B95AB0EF143A97263C1017EABE0E073 /* DebugStringConvertibleItem.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t410A73DC736F237F5938D8093AA213C6 /* RCTProfileTrampoline-x86_64.S in Sources */ = {isa = PBXBuildFile; fileRef = CCC91F4882F9AD8CBAA5347E76589517 /* RCTProfileTrampoline-x86_64.S */; };\n\t\t412A5B7AE081C52FB806EE8584903C7A /* TokenBucket.h in Headers */ = {isa = PBXBuildFile; fileRef = 47AD1D90749E8B75D93FDBB70F9F6ABA /* TokenBucket.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t412F8240ACB84265E0864A13B5C9F222 /* ReactInstance.h in Headers */ = {isa = PBXBuildFile; fileRef = D50E86E9CDA03CB5CEA275C7EE896DD2 /* ReactInstance.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t414311FDDDBD44A12AB564123ABFDE7B /* RCTRawTextShadowView.h in Headers */ = {isa = PBXBuildFile; fileRef = EAF8192C1B7013E06F84C24D2B1110B0 /* RCTRawTextShadowView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t418AFE7E951FD4B006662D619F4BC0D9 /* RCTStyleAnimatedNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = A613E889F5C29F0DAC3CCA3F322423D6 /* RCTStyleAnimatedNode.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t418D8178CC19322DA87BCD5B98D11D5F /* RCTAnimationPlugins.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AE808F4B51B3F24D61558A014CF22A5 /* RCTAnimationPlugins.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t424148B9D17806EB7F48FBB0D2FAD14A /* RCTFrameUpdate.h in Headers */ = {isa = PBXBuildFile; fileRef = 53B4E188053652EA7D2E30691509AA9F /* RCTFrameUpdate.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4241ADF61CF1F176813006CE278344D8 /* RCTCxxInspectorWebSocketAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B17F4F65DD01BD81E40664BAFB61F37 /* RCTCxxInspectorWebSocketAdapter.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t425A1E0E35945FDF6A30686F549465E1 /* RCTInterpolationAnimatedNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9EED1EEAD5AA1DD78D49501ECED7AB7D /* RCTInterpolationAnimatedNode.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t426DB0CBF495DD7166EBDC0A188B3F68 /* IPAddressSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 37DFC8EAF78BE0F070D18753D61D9C59 /* IPAddressSource.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t429C7D697593A320F8A70F5357D97BB7 /* ParagraphProps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 343040AFE22D6B494755190C0C2FC6FF /* ParagraphProps.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t42AA225751C052683DFAFDE8325C2990 /* glog-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 459822FB423F933D32F755CA3A5D55CC /* glog-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t42DF6A9D9D4AD244EA20DFAE81933530 /* RCTDebuggingOverlay.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FF99AA51CC63F9D02051442963EEB0E /* RCTDebuggingOverlay.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t42F55F8D487C777A6A8C180E4DAB0BEE /* RCTSurfaceRootView.h in Headers */ = {isa = PBXBuildFile; fileRef = 258F35FF5ABDDEBA091F066B015EE1D9 /* RCTSurfaceRootView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t43120C286CDDA8285535926A403AA30B /* ReactCommon-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FB10906EE52FB99A63183406F2DFD2AC /* ReactCommon-dummy.m */; };\n\t\t431B8E3910D7948C5ABD4D2EE021E854 /* args.h in Headers */ = {isa = PBXBuildFile; fileRef = 1731535F9FF01DC7DE5758D88594F0CD /* args.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t43514E4A7CF3EE6B921317D17245C4E6 /* double-conversion.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C4D4C35312AE9ACB8D59A46D0D6051A /* double-conversion.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4383BE16C5EE46F875BF5D8A39EDBC44 /* RawPropsKey.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C867898C76A4282B23A18DB01393712 /* RawPropsKey.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t43BBB6BB48AD003AAB4B6F1A58B97B52 /* SafeAreaViewShadowNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D1CC2D4F8A104E3B6F891431E7ECE1B /* SafeAreaViewShadowNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t43CE6254997AD06649D76B1421C8250C /* View.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CBCEC21A3A50591C487CAFD8DCF2CED /* View.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t43DC243F1208440A4C70A92FAAFBAFB5 /* RawTextShadowNode.h in Headers */ = {isa = PBXBuildFile; fileRef = AE55EB0D8F0641B6A3B9BC048B6A5DF7 /* RawTextShadowNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t43E016CA6E6F77F9C2291E94022B6221 /* stubs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B56A61B8E70277D187E3D37BFBF7897 /* stubs.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t4448631AF617AC7BFAE71481DEAE4867 /* RCTLinkingManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 12BBC4125F0A832B58555EA01B639783 /* RCTLinkingManager.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t4475E12EB41862981DF3C41487CCB246 /* fixed-dtoa.cc in Sources */ = {isa = PBXBuildFile; fileRef = 555C8E2826D8F277B972F2B66D34F22B /* fixed-dtoa.cc */; settings = {COMPILER_FLAGS = \"-Wno-unreachable-code\"; }; };\n\t\t45000A8D184E659305EBC4F052FE22DA /* RCTSinglelineTextInputViewManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 28F712315F7CD5B5F84A557475518AF3 /* RCTSinglelineTextInputViewManager.mm */; };\n\t\t452DCBF029A6FB3A779606D57EFD699F /* RawPropsParser.h in Headers */ = {isa = PBXBuildFile; fileRef = CCB913EB7EC2FFF2A1F039FCAFFF3042 /* RawPropsParser.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t454C26722FF0D6D11DA74C5228AA2085 /* RCTVirtualTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = 447C966873650F5BE0F53C20B5B181AD /* RCTVirtualTextView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t454DEEF08195B90C4524D609D9FC08E7 /* diy-fp.cc in Sources */ = {isa = PBXBuildFile; fileRef = 522269B8DAFA9F8734D95340BC29600A /* diy-fp.cc */; settings = {COMPILER_FLAGS = \"-Wno-unreachable-code\"; }; };\n\t\t457301E7532DE95F70DB8794A5EE9BCE /* RCTAnimatedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 29B488F05847F4968004034A803BA1EE /* RCTAnimatedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t458B7CF17D4089008BC4D91F61BF11AD /* RCTImageDataDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 163349EF8EF0ABE776CEB5D5A72C377A /* RCTImageDataDecoder.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t45C8EF8702AA503775656087A507733F /* RCTLayoutAnimationGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A9617B1637CABEDDB4A95483334CB93 /* RCTLayoutAnimationGroup.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t45D9ECFD2F6AE5C476BF788B807F3F71 /* RawValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51C1705E9B13860E1A5ED501BF5D9BD4 /* RawValue.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t45DD2B4B19A1543D0AA2E492728F9112 /* Database.h in Headers */ = {isa = PBXBuildFile; fileRef = 0991F79F05F020ABEA8DE3AFD72A7B08 /* Database.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t45E5CEDEBDBDB3272D62BF52105789CD /* CoreModulesPlugins.mm in Sources */ = {isa = PBXBuildFile; fileRef = 79F8EC97641C2D3B51B87DB668615513 /* CoreModulesPlugins.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t45F785E501BFD13E844D382A1F001EB9 /* RCTComponentViewFactory.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6EADDB0E9C832143081D058CA7259028 /* RCTComponentViewFactory.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t461CBD4EA7E870FBB406BE1A44D15A6E /* RCTAnimationUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 16ADA7CA003A807781299F67A1578DF4 /* RCTAnimationUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t463357058D1F85D874C7B62913D0FB51 /* IndexedMemPool.h in Headers */ = {isa = PBXBuildFile; fileRef = 48A56339A525A7972D16108E1C573FA7 /* IndexedMemPool.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4655F7C1059E59B736603130DB2FA22A /* RCTViewComponentView.h in Headers */ = {isa = PBXBuildFile; fileRef = B06BDA64A8C366F85CA16B5D0E328839 /* RCTViewComponentView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t46661E9599B2C3FFCC3382FB3A5FFE2D /* MemoryMapping.h in Headers */ = {isa = PBXBuildFile; fileRef = 03C08820B4F8B692940FAF14B621C83F /* MemoryMapping.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t46F7ED9516919044D6FD2A226838DF0A /* RCTSourceCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 08A72E0FF2CF1B17D479A7069A5C1123 /* RCTSourceCode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t46FA87EE5D65CF288E704019C05581E6 /* RCTFontUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 68F513FA3A624FF445C0F9B1A615E3A2 /* RCTFontUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t46FEBA35C6BCC1DA359FA4818280E7C1 /* GroupVarint.h in Headers */ = {isa = PBXBuildFile; fileRef = B46136D54F40F23675446372805B6B0D /* GroupVarint.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t470C6E55CF2E2DCD6E21DADFFA475E9B /* RAMBundleRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7B6F9E5C10CE8D8B1931589BD93D12D7 /* RAMBundleRegistry.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t477ED6A28D3CD8F41F2E96F5D3C98904 /* Bool.h in Headers */ = {isa = PBXBuildFile; fileRef = FFF4EAA32AB91B28A1ACBB7030CB8484 /* Bool.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t47828A13815F5A9030308D806C348B57 /* RCTConvert+Transform.m in Sources */ = {isa = PBXBuildFile; fileRef = 96C1ECDE3D239B5524C2DD16740B8B8C /* RCTConvert+Transform.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t47A21E1BEF0354D40449C04B19F8573E /* RCTDynamicTypeRamp.mm in Sources */ = {isa = PBXBuildFile; fileRef = FB2A143E4389164E0F2CCDB7122BD9F1 /* RCTDynamicTypeRamp.mm */; };\n\t\t47AD3056CBE40003DCC7F044CE31549B /* RCTDebuggingOverlayManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E8855C5F693E52309BAEA8C716104F71 /* RCTDebuggingOverlayManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t47B3B0B341756FE46A9E04CFE10D470A /* RCTUITextView.h in Headers */ = {isa = PBXBuildFile; fileRef = F6312EB0499C783D68B98C5D0AFAB4A7 /* RCTUITextView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t47BCF82C2C44E89BAC2425744C56BD8A /* RCTRedBoxSetEnabled.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EAB4DE45806E1FB41C909B6AE2B53C2 /* RCTRedBoxSetEnabled.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t48089FEC790CC6100CF69630720FDFAC /* RuntimeSchedulerBinding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3F3E458396D3574B4ADE0076519B87B9 /* RuntimeSchedulerBinding.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t482FA3433C45953974AC26E96444DCD6 /* TextInputEventEmitter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 71B4D481359E1DC4C88FF4956C3F95BC /* TextInputEventEmitter.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t486006AF8D114F257E87351B3C8A5E03 /* PageTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = E7ADD63BE36BD61FB54992AEEC51FACC /* PageTarget.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t48BBB73DC78C42C1BD39CC241869299B /* HermesExecutorFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2A7AEC733FC3F4650B9340E574530161 /* HermesExecutorFactory.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t48E2241DFAEE52BEE4D2F3D2C44C5ABD /* InstanceAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 102110A5E77C7808CB1EAFF9A4489E0B /* InstanceAgent.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t49164C701172F6D49BDA9C836C294A82 /* ReactNativeFeatureFlags.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 49B8EB5E3B6498FDDA1A80E45FA97979 /* ReactNativeFeatureFlags.cpp */; };\n\t\t491734DC36D5DA5B7188251B61658CA3 /* pt.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 80F9DAC31E738BCDB2481B8D0EFF7D4D /* pt.lproj */; };\n\t\t492D93F6A4D1DB5878AEB8AAC86F52F8 /* ScrollViewShadowNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E2FD3C024F95AA7EF9D1ECD43A5E807 /* ScrollViewShadowNode.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t4935A609FC34FA352D3C5B22EE93C6D9 /* RCTPerformanceLoggerUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9BC40B6E05AAAA8B1786166F41BD0EBF /* RCTPerformanceLoggerUtils.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t49409B9EED2B261372CC7135F2429D67 /* SRIOConsumer.h in Headers */ = {isa = PBXBuildFile; fileRef = 969D216DADA9AF02B0339E42E569D42B /* SRIOConsumer.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4986BE8FF75971161CE4825DE3E4F07B /* UIManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 271F7075A09B7F53F77295612BE17BE8 /* UIManager.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t4995E35BC80E4A934B323776BFE95BF3 /* NSRunLoop+SRWebSocketPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 15D526144725A1A4158A2B28A0B914E5 /* NSRunLoop+SRWebSocketPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t49991F7761C3338772084CD9A784B437 /* RCTAssert.m in Sources */ = {isa = PBXBuildFile; fileRef = 32208C8C13E5E8750C70406B6FADABA1 /* RCTAssert.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t49D3466638B3E08EDC8AD67760E4DFF7 /* SanitizeThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9862B8B78362BC8D98438DB2C5675196 /* SanitizeThread.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\"; }; };\n\t\t49DE6AADE6DD8D3EF3EB0555A271672D /* MessageQueueThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 3615AC64FDF6640D810E405776FA9A03 /* MessageQueueThread.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4A81228C0507B6999A9DD504323C1BA1 /* RCTAutoInsetsProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 26055A5589650C9F928DD1BFF922B86B /* RCTAutoInsetsProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4ABFE864F920B579C3AADCD9165F0346 /* TextMeasureCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97A95308B6D47ED59BD75934355ADDF6 /* TextMeasureCache.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t4AC55AF43A4C075565677B3718D2FB32 /* RCTScrollViewComponentView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 63BFBBE25C646A1C221EEA23F4224C1D /* RCTScrollViewComponentView.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t4AD9029E8839583D77C01D0769BFE50D /* MallctlHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 701DA5EF2C35D3F8011D186617366218 /* MallctlHelper.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4AF659E6D81AA3230AF3CC577A664469 /* RCTLegacyViewManagerInteropCoordinatorAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DDD563C6ADBEC41164125E51B67EE77 /* RCTLegacyViewManagerInteropCoordinatorAdapter.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4B22A24065B251775C2B4FF3C3B511CC /* BaseViewProps.h in Headers */ = {isa = PBXBuildFile; fileRef = 19006C0042936BC7BC14B717FB85308A /* BaseViewProps.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4B28898B17974A51B867C8CCFC44489A /* NetOps.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D0F55A1CBF2A5D8A9F6B0B49A152959 /* NetOps.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4B5056B4B0F54339419F82CB235D9B50 /* ParagraphEventEmitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 804154B57731765E15D5EEACEF594E8F /* ParagraphEventEmitter.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4B7FB9FFC77C456D1D957E910DBCE93D /* ObjCTimerRegistry.mm in Sources */ = {isa = PBXBuildFile; fileRef = B6B15808FE6325BFE9D87ECA96CA3A11 /* ObjCTimerRegistry.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t4BAC222710598CFEF8986092D6631F49 /* BridgeNativeModulePerfLogger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E0264569A1DCA41D8267A2DEC02B3043 /* BridgeNativeModulePerfLogger.cpp */; };\n\t\t4BC3A1BE0555EFFE479D514DE9D87F02 /* RCTRawTextViewManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 63646CDACE649B0945C14C4A4A8DB7A3 /* RCTRawTextViewManager.mm */; };\n\t\t4BCCDB6CEDB655B51D4EAA168B46A458 /* TextInputState.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DF1753017BD4FC4A6370681CBE48C79 /* TextInputState.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4BD0C3A0B27003C1E207962093B4CA8C /* componentNameByReactViewName.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D4B7F151F4E0EB1DCE46AA538CDA20CE /* componentNameByReactViewName.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t4BD9752E8ECC57A539310794E73FE821 /* Differentiator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 57094883E054C3166427AC3CFF403965 /* Differentiator.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t4BDBFE1061C5C8DB2356FEC255512FC5 /* RCTSubtractionAnimatedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = D837D755183ED658A920B4FD642A3F16 /* RCTSubtractionAnimatedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4BF3BD19BA78CB09A0B90727F60C8EBC /* RCTDebuggingOverlayComponentView.mm in Sources */ = {isa = PBXBuildFile; fileRef = D24AD310EE0E5FC9562D150864F26033 /* RCTDebuggingOverlayComponentView.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t4C28C822685226ADDBE66EBDFDD58EB8 /* JSIDynamic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E06A966DFD16239C4A4825D8200F89D /* JSIDynamic.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t4C3D5B6DE1DFE5EC71F9EDAB80BBA2CA /* hu.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 411B0CC2295DAA5FACED75F6D4BA67ED /* hu.lproj */; };\n\t\t4C441C36AC4132DB0BA4367F9AAF3781 /* UnbatchedEventQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B14B05F1E3FA960A779224B96DBB041 /* UnbatchedEventQueue.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4C476F90D14D11D54E3B5C1CDCECB6EC /* RCTMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = E927497A3701D0E6AEB8ED2AF83B915B /* RCTMacros.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4C94BF7B2D691369F2AC39B151E3E3DE /* React-RCTAppDelegate-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 401A553AA0753FF3548A286F009A8820 /* React-RCTAppDelegate-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4C9DAD28404CD20D00F4F363C2B46ADC /* SplitStringSimd.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A7E0B4304900884F1F7552E271BAE80 /* SplitStringSimd.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4CAE60F3D1B8ADE26E3B2CA80D13BEE6 /* DatabasePlatform.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A190A345B19C93427A45B7A6CC52FDF /* DatabasePlatform.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4D3C636E570049880C8AAC77CFDD2948 /* ParagraphAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 732337B1201688C67D6881C87C976B08 /* ParagraphAttributes.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4D3D91877333B2A899B1D1318D8CAB28 /* Dynamic.h in Headers */ = {isa = PBXBuildFile; fileRef = F4116A5CF0A3EC97879DE8D115EB9AC5 /* Dynamic.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4D40B9DC8342119ECA0695AE455E248A /* hash_combine.h in Headers */ = {isa = PBXBuildFile; fileRef = 10CFD843724D42F53E4373E441FD4EBB /* hash_combine.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4D4222A8B9F471CE399280E884966659 /* CxxNativeModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B9E96DFFC840B1E714C6D186A6B41717 /* CxxNativeModule.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t4D50B5E65DC561AF8C8A0C625A261512 /* GroupVarintDetail.h in Headers */ = {isa = PBXBuildFile; fileRef = 962AA8023E519A1F58D71BC1F73C95D0 /* GroupVarintDetail.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4D5FEE7A0F5B1E878C3F4042BB635FD1 /* TypeInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 51BFECF146A1165D167989F92AE6C0CC /* TypeInfo.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4D7E5F546791BFFE2D74F66BE63512DE /* ms.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E606EFA2C4D098DAEBD8DFD0734E2535 /* ms.lproj */; };\n\t\t4D9164B681F2EA242314F90B395F768B /* MountingTransaction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5710B431788CFA607B0F39F45EC6E64 /* MountingTransaction.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t4DD05C5A058E1A60C86F8009B6D91B0E /* RCTWrapperViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 33C0BE36B9FBC218A7F9944F9E03ABC9 /* RCTWrapperViewController.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t4DD93443D6B7F7732D024E85E90D06E9 /* Builtin.h in Headers */ = {isa = PBXBuildFile; fileRef = F59815A7A4241A59BAFADEAB6160D7C8 /* Builtin.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4DEEB3F59D5A65A8C1DA3BAA6B1BD2EC /* RCTImageURLLoaderWithAttribution.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7F7639A56DEF6356718C6D5EC6AF3F7F /* RCTImageURLLoaderWithAttribution.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t4E26F7421AFC7CCBA8B969FA05F45C3F /* RCTHermesInstance.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FB451B2BE52BDDEC46C0D989282A4A7 /* RCTHermesInstance.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4E75BA9FAFC8ACCCE5587D6145228C93 /* TurboModulePerfLogger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 522819EFAF89C9070CB50445ACD48721 /* TurboModulePerfLogger.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t4E995A62CBE562B414C48A4D96830F4E /* RuntimeAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 45E05ACB5D6C411D85AD9B6A40C2DD2E /* RuntimeAgent.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4EBF8CAAE3B17B65F2D10529F0D236FF /* PolyException.h in Headers */ = {isa = PBXBuildFile; fileRef = 207D72871056994F29476846F29AF947 /* PolyException.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4ED180A39A38A5F8D12F8A4DD4E0B5F2 /* ConstexprMath.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F2BCB43F2D90CA90AFD57677AF6013E /* ConstexprMath.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4EE2A2F1C282DD56E3EACAD3D5B911F6 /* Replaceable.h in Headers */ = {isa = PBXBuildFile; fileRef = B41CA2872B3100D34E5916BD9747FFA2 /* Replaceable.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4EF0F1BF78B522ABDB1A343A8EAC534D /* CustomizationPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = CA86A71648C8045BF8A96B225E26E40D /* CustomizationPoint.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4EF5C191311E7EF4E4D90D6254B58369 /* RectangleCorners.h in Headers */ = {isa = PBXBuildFile; fileRef = F59674BB4A1D0F323148B07D7D682AC2 /* RectangleCorners.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4F4D04EE2C06684AA7268737AAE9B6C3 /* Number.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B9822B49D137DD1BBFAE4C9206C7F97 /* Number.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4F65A3489B98C0252B66084467E96729 /* RCTBaseTextInputViewManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6BD4677A9809440AF9F9498F2E0115B /* RCTBaseTextInputViewManager.mm */; };\n\t\t4FD4897BB7E463BD4B8545A8DDEB8278 /* RCTRedBox.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB226E4AB2DF48BAF6AC83AC49AC1CD /* RCTRedBox.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4FD8523C00E419DA64417797EDC77A42 /* RCTBorderStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D8FEE5EFC0D5C3452E4502887D2D780 /* RCTBorderStyle.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4FE0D611C9C858B39AEEA98E2FEC1677 /* ExperimentalFeature.h in Headers */ = {isa = PBXBuildFile; fileRef = 2462C72B87ED90695E43B971F24B8FCF /* ExperimentalFeature.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4FEAE94C64B4E7C4982BD2CB545711B1 /* Hazptr.h in Headers */ = {isa = PBXBuildFile; fileRef = 91E5E966C9BA06A775879A6EFFEF786D /* Hazptr.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t4FF26431AB9C13B861E5BF2CAEA82330 /* RCTRedBox.mm in Sources */ = {isa = PBXBuildFile; fileRef = 93802254A23BD2E21FC5B6FC137CB7EE /* RCTRedBox.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t50506943625219009602B94281736940 /* RCTSurfaceHostingProxyRootView.h in Headers */ = {isa = PBXBuildFile; fileRef = E22E7E12AEEE2122E9587F6CBE60EC1A /* RCTSurfaceHostingProxyRootView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t506691E4775474A330411B90500F4307 /* RCTInputAccessoryViewContent.h in Headers */ = {isa = PBXBuildFile; fileRef = 48151421313275AE47A1F36C49F1AC43 /* RCTInputAccessoryViewContent.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t508F6D748C3E70A9EEB8197CF7A2F71C /* RCTViewUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = ED025FBB53B0B481493FAFFAED14F5E6 /* RCTViewUtils.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t5093844A96D536399D02C2EC5DE8B829 /* GTest.h in Headers */ = {isa = PBXBuildFile; fileRef = 9848E5EDA897DF122EF07B42AF3EEB86 /* GTest.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t50AA780906EDCC9F6292E6EC33FE9AF0 /* MPMCQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 28134A7E3E4CF5A0D60FE5E683407AAC /* MPMCQueue.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5141D72D38376A7357634EA7BED7B529 /* RCTVibration.h in Headers */ = {isa = PBXBuildFile; fileRef = 93E465757376E937D199FB1ED68BB46C /* RCTVibration.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t51922B9088FE0CD8C342E96B18E38630 /* LayoutAnimationKeyFrameManager.h in Headers */ = {isa = PBXBuildFile; fileRef = BA7531AA0EDD6697C7D87500F8EFA087 /* LayoutAnimationKeyFrameManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5192D6CBCA9DEBBB6D2D1CB8BB8042BC /* ScrollViewShadowNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A7A0F200C7B88BDC44875E323134B8D /* ScrollViewShadowNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t51B6F7E94F3EE06D36CB1D658A88AC5C /* ImageResponseObserverCoordinator.h in Headers */ = {isa = PBXBuildFile; fileRef = F7D701E7AA313B498D488AA43D416F3F /* ImageResponseObserverCoordinator.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t51D4FB82F519866F1B77D4DF5EB83ED6 /* RCTPerformanceLoggerLabels.h in Headers */ = {isa = PBXBuildFile; fileRef = 25CB321AD79DD7DE8F00445FA9998552 /* RCTPerformanceLoggerLabels.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5223C8643C9453C6B98DFE69DCC9196B /* RCTImageView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 06A12441B1C3D7A2CB937C85CAF45CCE /* RCTImageView.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t52450E118C5E9BED82AD4E105DE8E4FD /* conversions.h in Headers */ = {isa = PBXBuildFile; fileRef = 33BB544E228494D0AF9CB4E5A11EF94D /* conversions.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t526A2D421E98B760D469D7DFF25AC8E4 /* MountingOverrideDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 77C83209E6AE78202FC38E3CDF6E4666 /* MountingOverrideDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5290B35633031393762B3BE3DD7B6BB2 /* BridgeNativeModulePerfLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 76B9170886E7F923EC5E35A34EEF7A2E /* BridgeNativeModulePerfLogger.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5338EF2CBC1AB903457F1E2A9430FEAA /* Justify.h in Headers */ = {isa = PBXBuildFile; fileRef = CA736D745963DE632943D6EE6AE51217 /* Justify.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t535E4E67E1D010242C7EF421F212EEC3 /* ParagraphState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B1D124CF8B584CB0F39373CE1FD657A6 /* ParagraphState.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t5361BA153A940D1856498F41B988E292 /* RCTSurfaceHostingView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CD4200922C77CCA406FFAC67124F437 /* RCTSurfaceHostingView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t536BA5E6F1BDEBF1509C5E230951E959 /* HazptrThreadPoolExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = D802137E8093DB1F0B0848206D7FCB8E /* HazptrThreadPoolExecutor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t536E2F0CD05BB0CA231C990AC198EC81 /* RCTLegacyViewManagerInteropCoordinator.mm in Sources */ = {isa = PBXBuildFile; fileRef = 77FD8EC2BDFA965A8B3238C611476897 /* RCTLegacyViewManagerInteropCoordinator.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t53B4AE3B6F2DD428F69FCE1829438257 /* WebSocketInterfaces.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D3D07411F82B089A181E94AD1F54DF7 /* WebSocketInterfaces.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t540362B438D8F765E484CAD9A99213E1 /* RCTReloadCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 87D33A3159E4827D6FAE051C897E7019 /* RCTReloadCommand.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t54203B03046FBB5E67F2A914914F1F44 /* RCTHost.mm in Sources */ = {isa = PBXBuildFile; fileRef = 74F0A4078D35270995DBAA54BA83A8B7 /* RCTHost.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t5424ED4EE723B69262C7BA8F229423CC /* RCTScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = 4013A3D961F88A9A042C082ECAEB35E8 /* RCTScheduler.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t546A1106CD03E7BD183BB275B5577D63 /* PointerEventsProcessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F0A85939544D109BFA4572C401B51D9E /* PointerEventsProcessor.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t54881BD4940AE80A54AFA4A41A9ACE01 /* RCTVirtualTextShadowView.mm in Sources */ = {isa = PBXBuildFile; fileRef = FF822F0F4BB64652EAD4246D353613C0 /* RCTVirtualTextShadowView.mm */; };\n\t\t54B2697DDF8B682EDCF00390B7027AD0 /* Node.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7B87E0987F27CB7E57A4A864D574EC7C /* Node.cpp */; settings = {COMPILER_FLAGS = \"-fno-omit-frame-pointer -fexceptions -Wall -Werror -std=c++20 -fPIC -fno-objc-arc\"; }; };\n\t\t54CA7A9EEECD01C4F6D22243BB6A0AD9 /* RCTSafeAreaView.h in Headers */ = {isa = PBXBuildFile; fileRef = AEE7D821FE2F99E06D93025BCCDE581E /* RCTSafeAreaView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t54CC533A473A58B04C39D4F6E221B40F /* Padded.h in Headers */ = {isa = PBXBuildFile; fileRef = D89495ADCC3AEE3B5696CC8A442CC151 /* Padded.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t54DE8886E75B8747E97732B29877D05A /* ShadowView.h in Headers */ = {isa = PBXBuildFile; fileRef = A7DC83484741B6CEE36700BCB855A982 /* ShadowView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t54F90A747FD892839E06E26F8B1DA351 /* FMDatabaseAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A511E79FFB4293C0F4E1849EB6DAA5E9 /* FMDatabaseAdditions.m */; settings = {COMPILER_FLAGS = \"-Os\"; }; };\n\t\t550C21D890D7BCD2AF68A2CAF0E32F9D /* SRMutex.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F93EBBC760E206C8883BE32A9915097 /* SRMutex.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t551F583D79044D0E633AEC170C210B83 /* RCTUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = EC80A594ED6C17D4D0B191D585BE4089 /* RCTUtils.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t552D684A410FEFD68CFC05695C8A7025 /* RCTInputAccessoryComponentView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 20FCC48835414C2B85BB6A73AECE0309 /* RCTInputAccessoryComponentView.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t5557EE5C694F55EA80C743211988494B /* SRIOConsumerPool.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D220B48D2758B94E0D0CB1968C018CF /* SRIOConsumerPool.m */; };\n\t\t5589627C9AD1572C6B6C6F5993F440F3 /* SchedulerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = D97182C50F2513A513AF827227D35D9F /* SchedulerDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t558B2A6974A6F8200C9802FF6F845F60 /* RCTFileReaderModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 91946E0E55C67A006BFC6A09B6757F34 /* RCTFileReaderModule.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t560154C7130C73C57C3296EBCA35D2AE /* AttributedStringBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DA46A7224AD028908740366CEBA9D908 /* AttributedStringBox.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t56279FD90DFD7BF436B971346A2A0B06 /* diy-fp.h in Headers */ = {isa = PBXBuildFile; fileRef = 33E070F404266F952E77980CFA788C4D /* diy-fp.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t562A3C7202DCE0DB151CF213B983CEFE /* LongLivedObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 6ACCDC510D9A68B13F2A48E358E2BE26 /* LongLivedObject.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t563F1EC6EC87919CEDA50FCB4D3C5B98 /* JsArgumentHelpers-inl.h in Headers */ = {isa = PBXBuildFile; fileRef = 2880387D5A0780F29656704977F6A10D /* JsArgumentHelpers-inl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t56724EB37D2444DF72CF868DD13477FA /* RCTFabricSurface.h in Headers */ = {isa = PBXBuildFile; fileRef = E625C620A161CC1506E07E4C53FC7859 /* RCTFabricSurface.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t56FF2146A276A58EBC98A2C187E55DF6 /* Node.h in Headers */ = {isa = PBXBuildFile; fileRef = ABA37D7615C32B1F5B407A5EE086D7F7 /* Node.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t570946E17F460217CD71C4222A0380E9 /* DebugStringConvertibleItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E4D8475C8A1839D5568E707455D012D /* DebugStringConvertibleItem.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5734D611E435214C1564D3BDCD7C5758 /* conversions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F2D0D22F314D7C2DE88B31A3FC2C571 /* conversions.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5772DF2C067E6A85596FA510298BA4F8 /* Hazptr-fwd.h in Headers */ = {isa = PBXBuildFile; fileRef = 672462DC44BB30457BE236484F3C6E87 /* Hazptr-fwd.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5774E5CBA2D497BC21DCD6A7426FD492 /* symbolize.cc in Sources */ = {isa = PBXBuildFile; fileRef = 7A230B7C6D6ECDDCB14F95021BE6FDEB /* symbolize.cc */; settings = {COMPILER_FLAGS = \"-Wno-shorten-64-to-32\"; }; };\n\t\t5798BDA11D8CD9E1ABFE915438104A52 /* SingletonThreadLocal.h in Headers */ = {isa = PBXBuildFile; fileRef = 581A1FBA46FBC346F25CDD31C00AE6B9 /* SingletonThreadLocal.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t57D605E0D28B9702F02AA9E07913BC5B /* SRRunLoopThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 6117F9BDA4E91FB3D03F3728A914954A /* SRRunLoopThread.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t57E323C310C3D972940C78AA088CA477 /* RCTMockDef.h in Headers */ = {isa = PBXBuildFile; fileRef = 89BF32B08D57FC97C721EFC866E0143F /* RCTMockDef.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t57E8B60FD6E5FA9BF534BDE834453809 /* CxxNativeModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 7338ABD9F7418479DEDE3C5284F4FF6D /* CxxNativeModule.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t58150B290E77D2844EC1945D79898DBB /* accessibilityPropsConversions.h in Headers */ = {isa = PBXBuildFile; fileRef = D74ED33694328372E1EA1BA3F0EDD255 /* accessibilityPropsConversions.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t586EC27EA2327C50B996F9ECE3F189EE /* ThreadCachedArena.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AFB9A68F41FAA405A3AAE37295C10B3 /* ThreadCachedArena.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t58733DF826D51EAEC7CA3324769E06AA /* RCTMountingTransactionObserverCoordinator.mm in Sources */ = {isa = PBXBuildFile; fileRef = F261A91F0724E8B1486A1BC201FD1425 /* RCTMountingTransactionObserverCoordinator.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t5873B575B8FE7E9DE3AE028E0C2665E2 /* ViewProps.h in Headers */ = {isa = PBXBuildFile; fileRef = A21CEC9ACA2547F2173B743914CC6A16 /* ViewProps.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t587F3DEE36D4A28B892F91335A246DC0 /* RCTTextSelection.mm in Sources */ = {isa = PBXBuildFile; fileRef = 75AFE3EB6154E61D88A4F383A81B33F0 /* RCTTextSelection.mm */; };\n\t\t588CEDBD51EA57B98878F8E614A4E4C9 /* YGPixelGrid.h in Headers */ = {isa = PBXBuildFile; fileRef = 14D9F600ECC14E962003AAB9F191233A /* YGPixelGrid.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t58974F1CDB4BC9CAFBBEA3777F0DFEBD /* HazptrObj.h in Headers */ = {isa = PBXBuildFile; fileRef = 66C9CDB63BA2D2FD4FCD5F884193C864 /* HazptrObj.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t589F7F415548D3401ACB27D2FFD63E29 /* RCTParserUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = AD13EA361260D530BA7944F0CFC046E1 /* RCTParserUtils.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t58F393E4C17D34757898EC95342CE376 /* Dirent.h in Headers */ = {isa = PBXBuildFile; fileRef = A3B4504723D37DDB3A1BBB28AE41070F /* Dirent.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t59284F057F926EC5DA3ECD28FDEAAD96 /* JSBigString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D666A8452A306A927BD1BED745FC5CB5 /* JSBigString.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t5947D88D6B066FB8DEC986C769F42F89 /* F14Defaults.h in Headers */ = {isa = PBXBuildFile; fileRef = FE9C8096CC17775F6B3D7F51F755BF88 /* F14Defaults.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t595CFBAE163B26652CF24E4EC2D1CF08 /* Unicode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 54977C60EFA8732D452D9D03923B5270 /* Unicode.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\"; }; };\n\t\t596F0520CF8E60E8AD98030F6E71F346 /* Props.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CE12A7D304717866DC9F308C7951109 /* Props.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5982D84D71BBA6ABEEA3A813AC63C837 /* ImageEventEmitter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 996448BB93D8203D8D6C59B2D0B33BDA /* ImageEventEmitter.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t5986E5044FACB904AD3636FF14E01EA8 /* RCTNativeAnimatedModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 16AFB3F99F57DB5AEF193C3CB1BC1A49 /* RCTNativeAnimatedModule.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t59917156FF1333C1DBE02BE01BC71BA5 /* WMDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = 598C51078F81B88ECED26E0192A48207 /* WMDatabase.m */; settings = {COMPILER_FLAGS = \"-Os\"; }; };\n\t\t59979756F484B99D5385635F11BD5882 /* BaseViewProps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 31E12D3E887518AC0490584345788F27 /* BaseViewProps.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t5A96B83B90FDF9B1DFF02B7907CDC6AD /* RCTTextSelection.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F4162FD06F15F97900434A78640AA96 /* RCTTextSelection.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5AAC1149A7EFCE52B0C9734F26DE5DFF /* dynamic-inl.h in Headers */ = {isa = PBXBuildFile; fileRef = 687B26F2B573590EF9ACE0B564A2A4D8 /* dynamic-inl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5AACF18D85E08DADE6C9208ED3F6A7D0 /* AtomicUnorderedMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 473969280531057CD249A18AC62DD076 /* AtomicUnorderedMap.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5AEB23424B59FE64465815AA360C3FA7 /* ShadowTree.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FFB2C7DB283EB3379974035A76B3B13 /* ShadowTree.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5B05BCA19F4B7C0CAEE8D7E914493F1C /* RCTFPSGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = 5732AA2AC0D6C97862F2E84E6A43D27D /* RCTFPSGraph.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5B09CFB50E640F8977C0E91123BBF38E /* Task.h in Headers */ = {isa = PBXBuildFile; fileRef = 96FCCADF61AA384004BF02F11E1A50B9 /* Task.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5B1BDBB882CBF302AE93AF1F4B4A5449 /* MapBufferBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3954F92E91DCCCD316FC570C39037C55 /* MapBufferBuilder.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5B413C5370B3C8A5A6CE70D0FDC10BDD /* RCTLinkingPlugins.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E93927BD0D92FEB9D950507CCF5E2FF /* RCTLinkingPlugins.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5B52BA28DECEF4797254071E699E01A3 /* RCTSegmentedControl.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AD33F21CFF457D719E527B0A4413B4E /* RCTSegmentedControl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5B54AF84CA742AC586CD4B9A08153940 /* FileUtilVectorDetail.h in Headers */ = {isa = PBXBuildFile; fileRef = F1446E5B5E1E6532A8129EC19A5BC514 /* FileUtilVectorDetail.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5B6BF9900C79C4F7623A28977857CB1B /* ErrorUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 06E5E1100A0E21FAB430C3718568BD64 /* ErrorUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5B99C5727641114A90831747A6FEBD1F /* primitives.h in Headers */ = {isa = PBXBuildFile; fileRef = 4403122C16D5B003C8984E009EAF54F1 /* primitives.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5B9EC322BD0660BBB5BB7EEA03DF27B5 /* RCTInputAccessoryShadowView.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D47D15D9888ECC847619622D47F370 /* RCTInputAccessoryShadowView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5BCC3880E6ECD139C026CD443E4DF521 /* NSURLRequest+SRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = AE45D4CB885CACA4B317542378B0D81F /* NSURLRequest+SRWebSocket.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5BCDE01BA0D17F0DAD52430823D76AE3 /* React-Mapbuffer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0EEA744CEB6248472C8D4DCFAB2E718C /* React-Mapbuffer-dummy.m */; };\n\t\t5BF35C7D201412137E9D7BB5C052F714 /* RCTTypeSafety-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7780098F7787B2514F2C008CC3E13B73 /* RCTTypeSafety-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5C19BB5F6F8D75D7F453899B49714925 /* ComponentDescriptorRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64B98B991654E98484D4253805E17035 /* ComponentDescriptorRegistry.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t5C24DA799B8DE8BE45C1EB910F6465A1 /* YogaStylableProps.h in Headers */ = {isa = PBXBuildFile; fileRef = 27F831318E526AEB0F7F8A65C1891EC5 /* YogaStylableProps.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5C74608D4E02F4D4AF0009F7622CECFC /* simdjson.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5E92316DAA53D54019FF1D5E3697030 /* simdjson.cpp */; settings = {COMPILER_FLAGS = \"-Os -w -Xanalyzer -analyzer-disable-all-checks\"; }; };\n\t\t5C8C3D423B3C1790471F00F9BBC248DF /* FMDB.h in Headers */ = {isa = PBXBuildFile; fileRef = D2E4E35B35014E917353983248FC5B53 /* FMDB.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5C8E17910713620E360E4C279B7CCE2F /* ScrollViewComponentDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 610A9C5BDF3BEADA074AB1F27B23F1F8 /* ScrollViewComponentDescriptor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5CEB688BB02A5D825F1C26B4E8A7DD04 /* ThreadLocalDetail.h in Headers */ = {isa = PBXBuildFile; fileRef = 232D444DA9A20C7509F589FFF2D7E4CF /* ThreadLocalDetail.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5D153DBD866010FF03F00D7EB90D9361 /* EventQueueProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A4636B3DC5A729E8F40B4860ACEC4B4 /* EventQueueProcessor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5D15D3759AEB01EFD4AE2A00A7EE7E6C /* Event.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CA38E07EBA75420D2E3C5C4B52A3B22 /* Event.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5D2030AC19338EA569B5CA75254256FC /* RCTBridge+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 83E8DBA50CF66D81EB39C5BF3384B3D3 /* RCTBridge+Private.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5D2222F04E5E303696BB63978D35DA5A /* RCTImageShadowView.h in Headers */ = {isa = PBXBuildFile; fileRef = 35B3256FA995F839DF8DCEEFCF7DD785 /* RCTImageShadowView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5D29D817CD0566EC101B3FB3C26BF9C7 /* ScopedExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B40A55CAE96B9EC2411B625D3F58ABD /* ScopedExecutor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5D51E24D431131B975A541BE5699EFB4 /* RCTBaseTextShadowView.mm in Sources */ = {isa = PBXBuildFile; fileRef = CC013CC571FE4BC5DEEFD2D0D37B0093 /* RCTBaseTextShadowView.mm */; };\n\t\t5D59046CAC4D66AFB8FF14E482B6F799 /* Class.h in Headers */ = {isa = PBXBuildFile; fileRef = 570DABFC32CF97AB28B8269609BAD9F8 /* Class.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5DB693C55C2912ACE4C601D9D4397DB9 /* YGPixelGrid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB17B662459CE9B65E9A84AF92104DEF /* YGPixelGrid.cpp */; settings = {COMPILER_FLAGS = \"-fno-omit-frame-pointer -fexceptions -Wall -Werror -std=c++20 -fPIC -fno-objc-arc\"; }; };\n\t\t5DDFBA8FE4985DDF178BEB5B73F79F01 /* RCTDevMenu.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1A57B42E48BE086DEBC492BDE3BBD3C9 /* RCTDevMenu.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t5E4BA94A4BD1964E50FE99AF6BF0B983 /* CxxModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 361BB64B7C65C06474C5DFD08FD49799 /* CxxModule.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5E57BD5B12A2E5D8A4784FF8838DE6F7 /* AsynchronousEventBeat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EFB5E0D35E76A4F34C8D5195B2051AF6 /* AsynchronousEventBeat.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t5E6D160C875DB3935553DD37CF62507F /* AtomicHashMap-inl.h in Headers */ = {isa = PBXBuildFile; fileRef = 861717776176D0307718AB2E8E102C67 /* AtomicHashMap-inl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5F0D2CCE2513E3AD3AEFD8B5897BD3C2 /* ImageShadowNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4F1014498794A7BE263384E6C973334C /* ImageShadowNode.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t5F232EC5AAC8B35EBB5427FB1C7EB303 /* TurnSequencer.h in Headers */ = {isa = PBXBuildFile; fileRef = 890E8592B2798AA968BD07CDFB3EDD9A /* TurnSequencer.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5F37D7E6B6EEB1FCA64D72A039B04E9F /* HazptrHolder.h in Headers */ = {isa = PBXBuildFile; fileRef = BB06B409B4DDC6FA88630157B314F883 /* HazptrHolder.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5F40E7EA0BF1196D0390F3DD1495FDE8 /* RCTImageEditingManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 761CE3FB688FBACCB93A3B8CE521B969 /* RCTImageEditingManager.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t5F4C99E3B76689373D2ED7C28927F12D /* RCTTurboModuleRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 875E97EA9D0677F39C4C3599772B2F46 /* RCTTurboModuleRegistry.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5F8B639C0CAC522C3057CF9E649534CB /* RCTConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AAB3F0857A0C2C40FE99C2A4ED8BB69 /* RCTConstants.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5FCF219B74C2FD233CA9AD48E6970912 /* RCTDebuggingOverlay.h in Headers */ = {isa = PBXBuildFile; fileRef = AE3CEE292BC38DDDB735B092E8F32A0D /* RCTDebuggingOverlay.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t5FD22DEF7D57A12E857927FC67567E05 /* RCTPerformanceLogger.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5FCFFA906B90C33953D846D226E2DF4B /* RCTPerformanceLogger.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t5FE16776440A3CFC53E25FC6F8F3D8B7 /* DatabaseBridge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD3A4B3EC7E715CA1E677122514FEFE8 /* DatabaseBridge.cpp */; settings = {COMPILER_FLAGS = \"-Os\"; }; };\n\t\t5FE63D5DEED1E0D7E9211C479F3DBBC8 /* utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 73058D524065BD36521A8D2FAA24552A /* utils.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t60190426D00C02887698BE0BE510103C /* Sched.h in Headers */ = {isa = PBXBuildFile; fileRef = 326E52CD3C6A37497F8D253F7BACCFB5 /* Sched.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6035F2E5BEC7F02E3206FBCBACE06A55 /* tr.lproj in Resources */ = {isa = PBXBuildFile; fileRef = ADB0726235787BE84DE49AC4624711EA /* tr.lproj */; };\n\t\t6068983DDD1A40F8FF987CE6E0497CA0 /* React-RuntimeHermes-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 76A1CBFC82E23FC317730FE377F95CCB /* React-RuntimeHermes-dummy.m */; };\n\t\t60A3E51312E73BB59DFED0E1D0286A79 /* DatabasePlatformIOS.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7FF0FE18123413DA783550212321BE91 /* DatabasePlatformIOS.mm */; settings = {COMPILER_FLAGS = \"-Os\"; }; };\n\t\t60C96C95ADCBADD5869F99A9F1AF8374 /* ComponentDescriptorProviderRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BB02A1AFF68DB9D0E2B844F9E1E8A2F /* ComponentDescriptorProviderRegistry.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6110F4F96597CB3D4486AF424FDBC834 /* Database-batch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B8C5097DA5EAA46AB4FF88AA6F8D6F5B /* Database-batch.cpp */; settings = {COMPILER_FLAGS = \"-Os\"; }; };\n\t\t611EACB7C5FFA63323E0F5D4D49E0106 /* PointerEventsProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = D11BE31D2BF618CFBCC52352A6567B70 /* PointerEventsProcessor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t611F097A4869D5565DF7C9B9354D8D0B /* PageAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AF18A646E6EA4CC7C73600700D4BDAF3 /* PageAgent.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t614A74B5BD426630D339F25D429EA463 /* Pods-WatermelonTester-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 413649D5C571D8A6170C6A4424CD088F /* Pods-WatermelonTester-dummy.m */; };\n\t\t616FF362B4F982F5D81312544F221FA7 /* YGNodeLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 9841711B9F3A736014573E0B62D9C1F9 /* YGNodeLayout.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t617C1D1B08BAA6078A2F22FCE63F7826 /* RCTPointerEvents.h in Headers */ = {isa = PBXBuildFile; fileRef = 90049B8377428D5B7434F2C8680C87CF /* RCTPointerEvents.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t61A92A507431FC4F546B5C86D863FA73 /* fnv1a.h in Headers */ = {isa = PBXBuildFile; fileRef = 6960AF2620CFE6726A4B805D48001166 /* fnv1a.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t61C9E79CA790A9EFE30E8C8D0E2B8ACE /* ro.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 75003887015004482CFDA84D733744C1 /* ro.lproj */; };\n\t\t61ED3B991EE724C64D6FB1334A0314D3 /* ToAscii.h in Headers */ = {isa = PBXBuildFile; fileRef = D7914657C80BFE4F7E8E537249F07FD6 /* ToAscii.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t61EDAC784E6BE6CC11E90819789A6DAE /* MPMCPipeline.h in Headers */ = {isa = PBXBuildFile; fileRef = C87FD57CD4AD96B0BBB45FC4FEFA1AE7 /* MPMCPipeline.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t61EEB363499D46E2DE3F8E3CC138995E /* RCTObjcExecutor.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7BB5D02B327460A7F87EA512F38B2123 /* RCTObjcExecutor.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t620070F4FB15245C68AB13C535847EE7 /* RCTFabricModalHostViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = DB2D4AA87F51B33CB9A6EC8B96ED1D23 /* RCTFabricModalHostViewController.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t6238DD8BEB29E55D03B1E651157E7B2A /* RCT-Folly-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 315FDA4F573874F2BD0A7F57C70AF3E1 /* RCT-Folly-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t623EB998C85B863F99092DF08C02A46D /* RCTEventDispatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = D0FF6F026B2F3AD02FA2F0B47E571D6B /* RCTEventDispatcher.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t62444E4A9DF335C2943D6864448533D4 /* RuntimeTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40E5A309579F3C1A9D1F5C45ED9FFA0F /* RuntimeTarget.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t6271EFFBCD61B9CE0F00F1B52F46BCB5 /* RCTAccessibilityElement.mm in Sources */ = {isa = PBXBuildFile; fileRef = B868435FC1BB39A3949840802519A500 /* RCTAccessibilityElement.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t62DE40C34FB60729BBE1B86AC6E785F3 /* EventTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D732F0DC5E41F018DF129A1E36E683 /* EventTarget.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t62ECA5DA07D5580733EDE413CFCAA475 /* RCTAccessibilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 98D0A9133BF9CECCDCD33D1F4C38B4C8 /* RCTAccessibilityManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t62F897E5BAC772F7CDDB7952F87C28F3 /* ComponentDescriptorRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 62321BBFBF2E8E88A946FF1C2655F069 /* ComponentDescriptorRegistry.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6335D95DB076B946861FDF0B6504F01F /* LayoutAnimationKeyFrameManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F60384F886271F9FE990A1E05F65D620 /* LayoutAnimationKeyFrameManager.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t6354C2A56E1FE6BB514E79F6E1B34BF0 /* RCTUnimplementedNativeComponentView.h in Headers */ = {isa = PBXBuildFile; fileRef = DB5A191A4D4CA731E31AFC8EA19625A2 /* RCTUnimplementedNativeComponentView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t638A4F595CD09694A8BFA8C0F00F745C /* Traits.h in Headers */ = {isa = PBXBuildFile; fileRef = BE2252C1E227B6B138921BA745C6ABC7 /* Traits.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t63B539B0CE7DE154473F78239B0D3E75 /* Format.h in Headers */ = {isa = PBXBuildFile; fileRef = AD16D5AA10E8416443D8D1FF1460C44B /* Format.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t63C8445391E600554A6C3520D8511A50 /* SmallValueBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = E8CB40AE7BA0C7EB4EDD1532C9B8FAE8 /* SmallValueBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t63D7C1B01C0D564F59C944A6CD64462E /* RCTSettingsManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0696F27878C985C7F2D9DBBD0BA700E5 /* RCTSettingsManager.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t63E0D62908E04B6775049890FBFAB50C /* EventLogger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E743DC457E6CABC5B13E68A381C20913 /* EventLogger.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t63F74B9371E02FCFFD3A99BB3244D79D /* InspectorFlags.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BB7FF49C6C69146DEE4B499147BB9B0 /* InspectorFlags.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t6401C5A434CA5B6B493B00EA5DB65EE4 /* ComponentDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 52DD466CEB37236E0239E023F92F17AF /* ComponentDescriptor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6404467E34C533EC2006A9DB49333661 /* CxxTurboModuleUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3BD8588452A16BCC311A2F90E96B104A /* CxxTurboModuleUtils.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t6427E7DD7ABD9B4675A8B29906B1CF26 /* ShadowNodeFragment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3053B3AC995ECECC071744E464935607 /* ShadowNodeFragment.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t644F1B7EDB5ECC21CCBAE8800E7E31B5 /* RCTSinglelineTextInputView.h in Headers */ = {isa = PBXBuildFile; fileRef = 609281012AE698DC460A40129D138A06 /* RCTSinglelineTextInputView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t645D3E41350D979EE998CAC5B0B50030 /* heap_vector_types.h in Headers */ = {isa = PBXBuildFile; fileRef = DB76EBADE7E968B611B89EC60AA71910 /* heap_vector_types.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t646368EC7C6F2C08EDD65268D7B7A79B /* RCTBaseTextInputShadowView.h in Headers */ = {isa = PBXBuildFile; fileRef = 33623931DB49F9BE0BB2BEAD565E5AC5 /* RCTBaseTextInputShadowView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t648546E37669DA35243A1A9CB0DD7C59 /* Launder.h in Headers */ = {isa = PBXBuildFile; fileRef = CF9E8353281D1C3DE0C65A3F7643C68B /* Launder.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t648CF10E3E4B6BC8F2867E714C8D3315 /* RCTInputAccessoryShadowView.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D47D15D9888ECC847619622D47F370 /* RCTInputAccessoryShadowView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t64BE95CF8E1CB240B9219A5ED28B0588 /* RCTMultipartStreamReader.h in Headers */ = {isa = PBXBuildFile; fileRef = AF67768C4A075A1A0B7A20EF50D517BD /* RCTMultipartStreamReader.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t64CFD3AB2AD6AFAF98EBAA5EDA7912CD /* Rcu.h in Headers */ = {isa = PBXBuildFile; fileRef = A945AE383969D5B4AC29974625C53F64 /* Rcu.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t64F832664A431E454316E1AC03746C0D /* RCTBridgeConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = E4216CD44D8D54D9837A48C53488FC2E /* RCTBridgeConstants.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t64FF46086B966FC625E4C4032EA159D8 /* BaseTextProps.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C40F819940022A549E70BECA41B61A /* BaseTextProps.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6511219B93A0F6722B55F007369CA247 /* RCTRuntimeExecutorModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C292E04485F2E866A8C5507A5B0F9B /* RCTRuntimeExecutorModule.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t653AD0E981ED5210BF09AFE61A844339 /* Parsing.h in Headers */ = {isa = PBXBuildFile; fileRef = DC79C41D3256C56029659B9591017FCF /* Parsing.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6598CFB917768FDAB38F05A0AC546F14 /* RCTTextShadowView.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AEA1EA0BA3625CC695A4E11E09FA24B /* RCTTextShadowView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t65C80D5494BD3228D2AD6AAF37AD6EDA /* RCTImagePlugins.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8A81DCEC265B36C702B32207D90DA5F9 /* RCTImagePlugins.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t65F3033C93DD7B1EF83673E19BB9EBD8 /* React-Fabric-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 26902E3757E5D682AFC6C628AF7BD7DD /* React-Fabric-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t661031CD49CDEF2BCD5BE6EC9530D7C3 /* EventTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ED3FB4188B6B018D64337B5E28DF81D /* EventTarget.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6626D2DBEF601EBA88A883827E0295B7 /* PerfScoped.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E8EF1F55FE2016CDA7B786F01C8882E /* PerfScoped.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6629AA88CD8BD22CF2067C68C96E0BEE /* SchedulerPriorityUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = BB8A5342B551F92B8A2537BCC6ED51F5 /* SchedulerPriorityUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t66954121FFFD6C5C2B418E27FC43B4F7 /* RCTInstance.mm in Sources */ = {isa = PBXBuildFile; fileRef = EADE36F3457E268442D18E096152CF53 /* RCTInstance.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t66F138CEF6DE7733C00C0EDAF107F4E3 /* RCTParagraphComponentView.h in Headers */ = {isa = PBXBuildFile; fileRef = 704A79E5BDF7B5ECE6197D355854F3A9 /* RCTParagraphComponentView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t66F2E613C99822AF10887F865AF5A7D5 /* RCTSafeAreaShadowView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C8572256406ADB7551DFDDCDC585255 /* RCTSafeAreaShadowView.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t66F7D45C7DE22886B4121EADD127426E /* RCTSwitchManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 39F844696BFB60487E053DE52768656B /* RCTSwitchManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t67721682C2C9B376827FE29F914C2AF6 /* Exception.h in Headers */ = {isa = PBXBuildFile; fileRef = C981FCFDF37E877B75038B1246411D6A /* Exception.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t67745EF2FCD4C0DAFE55F235B9511877 /* MethodCall.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B01C2C65E7B02816E8148154C56575AF /* MethodCall.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t67D6B0FEE7276ADF5A34F358361A06C3 /* RCTSurfacePresenter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B2DFF23AC104B04562F5A613D62A6E2 /* RCTSurfacePresenter.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t67E1C84F832F8DE7A9AACD8F3E679C16 /* RCTInspectorDevServerHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = CF9F9BDD710866E3AB298A535A581739 /* RCTInspectorDevServerHelper.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6803F6AF68CE85F55D315BE81FC01F8D /* DistributedMutex-inl.h in Headers */ = {isa = PBXBuildFile; fileRef = 25B4E76DD481D3490220E28604E55673 /* DistributedMutex-inl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t682AD90FD13AF03CF8AC476D4EC22BA3 /* RCTWebSocketModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 15E1BE174AEA123290CA37B86EFDD5F2 /* RCTWebSocketModule.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t682BA7F2BE81C4075B446A8A758EC098 /* MoveWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = FBE36ADE7B7AF7E211B4A734D83A30BF /* MoveWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6869C0A56BFE37D366E0622A737744A8 /* React-RCTFabric-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 887027C7FF12FB7338869C776A7CEFBF /* React-RCTFabric-dummy.m */; };\n\t\t68AADA5DEBA7F22FBDA95B379E595DB4 /* React-RCTNetwork-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D8A9743F92811B06400AED3B4A0C3135 /* React-RCTNetwork-dummy.m */; };\n\t\t690D37470240502DB939F1A3D7206454 /* RCTBundleManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 86F28687E953C2F68F76CE4BB56DE52A /* RCTBundleManager.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t690FA340A00937B92D570D6C37F9F0D2 /* RCTJSThreadManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = DB54433DB90DCA8B444031497CC05E80 /* RCTJSThreadManager.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t6918BE63EE0EE0EDEE58BBB12179E846 /* RCTDataRequestHandler.mm in Sources */ = {isa = PBXBuildFile; fileRef = 976E60D841E3AEC485885E2A36C843AC /* RCTDataRequestHandler.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t6931B8611963D0778CA2593797258243 /* TcpInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A32F2995E9FBCA38F66600B356DD02C /* TcpInfo.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t696574E499A1754A5256C14C2130648B /* AccessibilityProps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 28FF824B4005CDF78CA3A774CFD2549B /* AccessibilityProps.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t6A0F9437521FAB0502857D5DAB6314F4 /* bignum-dtoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EAAC08BE2B9CE538A0D58679E781247 /* bignum-dtoa.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6AA211002A317FB9EB7047EC3E0B6CAE /* RCTAnimatedImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EA2794840FA725A97054EE3C4C201C0 /* RCTAnimatedImage.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6AAA9F629DBACA51982194772C98C826 /* RCTBaseTextShadowView.h in Headers */ = {isa = PBXBuildFile; fileRef = CC9E0C53D02E49E161CC61AD2E78DD12 /* RCTBaseTextShadowView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6AEB18995E0DCEE6CCE54BD53AF7B465 /* JSIDynamic.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FC40232E2C55EB617E3DFB087BA95C0 /* JSIDynamic.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6B4C8962F186CAEBD9C1D8E294C4CBF1 /* Point.h in Headers */ = {isa = PBXBuildFile; fileRef = 75666A7E9DF4B81A7D9C5A782A0BCE03 /* Point.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6B4D310DF575EB380CFD8E9008409324 /* Poly.h in Headers */ = {isa = PBXBuildFile; fileRef = 2779D7D33AA6E41DCE7991AF63682C57 /* Poly.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6B5291757C966F9ADE1BCEA1803F2FC9 /* TcpInfoTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 5776F9A564A106E1D34D8C2B6FB41C78 /* TcpInfoTypes.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6B52CF6C070C5E98C528FB32F1D34624 /* RCTTiming.h in Headers */ = {isa = PBXBuildFile; fileRef = A7FEE6ECF7F217445EBD97C857669637 /* RCTTiming.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6B8F4AA8DFDA7E810544992C621FB2AC /* MethodCall.h in Headers */ = {isa = PBXBuildFile; fileRef = 3863C406F7D65140B03ADDF3E62B9914 /* MethodCall.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6B92459CC6D8AE87C82FD9DA5D8B34B1 /* RCTSurfaceView+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BF78B5D7B2AFC98B3545C8C9DA66D16 /* RCTSurfaceView+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6B9B49A3703636ADC90A520068F48C55 /* RCTSafeAreaViewComponentView.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A2407C78B8F357AFB081AF5B1BC953A /* RCTSafeAreaViewComponentView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6BA23844D9DCDD1AEF37DB5060151CAF /* ViewShadowNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9146BC2894F3FC7F11EDB10CB1B6B9B3 /* ViewShadowNode.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t6BC9C5D894D55A6667A506FC47D1F83A /* TouchEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EB8033D6D308790A5A46B3BC15DD1BED /* TouchEvent.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t6BF410C3D76E672A08E4EB084CFD21BB /* StubViewTree.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8C03F6178FA2682E0DD2D5F53F222E /* StubViewTree.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6C014D417DB501CB7E7EC168EEAAD449 /* Errata.h in Headers */ = {isa = PBXBuildFile; fileRef = 0ACDA1105A253290970D63F1EB10F574 /* Errata.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6C0DB8EAEB1FCD9CDAA61E9B467F4CF9 /* Benchmark.h in Headers */ = {isa = PBXBuildFile; fileRef = ECF657DA48FE202E91262C142A30C2EA /* Benchmark.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6C1392E4CE9C70E81D25ABF34EE9631D /* Registration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BBA46B29F3F06B0AEC0E48F4C7C99C23 /* Registration.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t6C387AF206A5A29A99340C38D35138DA /* FMDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = C8E070E3387DCB006D125024D0D086B2 /* FMDatabase.m */; settings = {COMPILER_FLAGS = \"-Os\"; }; };\n\t\t6C5725243C44011456F42C6A14F7A0A8 /* RCTSegmentedControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CC7171C241F88DC2439CD6C9B3B9BDA /* RCTSegmentedControl.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t6C963BD5A4AF0CBEE113E34A5AD7D0A6 /* Futex.h in Headers */ = {isa = PBXBuildFile; fileRef = A2E8652189AEFEC58162855B790CFA15 /* Futex.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6C992FA96B61EF3505BD53ACA873BFA8 /* RCTTypeSafety-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 606BAB14D960C896D177B10A3540386B /* RCTTypeSafety-dummy.m */; };\n\t\t6C9BA8A8F1B09000220A1C6018049397 /* RCTPropsAnimatedNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = F9741807E424A3C28F079A8146D8AF4D /* RCTPropsAnimatedNode.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t6CA3161E6FA8BEBED33FD2FE8E1B3DAF /* ReactNativeConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F593DCCC2DAFF6D4243AAD2A5156F10 /* ReactNativeConfig.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6CB1E8F84A18475FBACB6C3B62D0AFE5 /* RCTUIManagerObserverCoordinator.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DACD0189E12C716542A13351B01B317 /* RCTUIManagerObserverCoordinator.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6CFD8AA29F2E9C848CA60CC969FCAB67 /* LayoutConstraints.h in Headers */ = {isa = PBXBuildFile; fileRef = AEA7713221A3B353A10E5D4A3E848D96 /* LayoutConstraints.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6CFEA0E6658C47D9BF410F09BEEF98CE /* RCTCxxInspectorPackagerConnection.mm in Sources */ = {isa = PBXBuildFile; fileRef = 53698A773FE28A1702762D414C8FD31B /* RCTCxxInspectorPackagerConnection.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t6D0967A5AFE1B86D8D5B8C084797FA58 /* RCTBundleManager.h in Headers */ = {isa = PBXBuildFile; fileRef = CC1AF02076781F56494CFE9B171135BF /* RCTBundleManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6D208E676E5ED9C469B15EA9ECE737DD /* F14Policy.h in Headers */ = {isa = PBXBuildFile; fileRef = 130677CC93E00689A413DE1C5D45754D /* F14Policy.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6D26C8780D61C6AB8EBB3BD7540D9A0B /* ClockGettimeWrappers.h in Headers */ = {isa = PBXBuildFile; fileRef = E416B0C3A1EC58515DEC41DF3D02E01B /* ClockGettimeWrappers.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6D36A6FFC2488415258EFA1832790E55 /* RCTAlertManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = A0CFE0D44D175E1A391C2129A3C3EBEF /* RCTAlertManager.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t6D47DA4D57A4DCB9E5DE1A5C727BE1FF /* RCTErrorInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A69BE346BCF36781D025E02DA26992E /* RCTErrorInfo.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t6D7AA2A2008AA3CFD3185810516DD2AD /* SRSIMDHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = BBCFDB39D48C37A3AF9AA77A7A2AFE14 /* SRSIMDHelpers.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6D868A2B81C43D395DCDC4C4B6FC60F6 /* RCTSurfaceRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 62DB4477408C47E85F683E8ED165D3AB /* RCTSurfaceRegistry.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6D9019B41C60A4DACDF6D306788014AB /* RCTSurfacePresenterBridgeAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D6E9C9334A02233898F7AD14D17E2C /* RCTSurfacePresenterBridgeAdapter.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6DA8C2B7DF486142D81AE0FA210DB2DA /* FMDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = DFA6EA2550443AA8D5C90B1C550AD342 /* FMDatabase.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6DDB890790361CB27DE50CD880831B9A /* SystraceSection.h in Headers */ = {isa = PBXBuildFile; fileRef = C7426F344668A4D9141914CE841C3534 /* SystraceSection.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6DE90170CECE293E1A4F1224606A79BF /* RCTJSThreadManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 99706928F57B54531F9949E340BFECB8 /* RCTJSThreadManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6DE9B9D9006DC5CA4ECA2D53AACB958C /* Demangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9E6068776F49102288177FE25869B4F8 /* Demangle.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\"; }; };\n\t\t6E04193FE94D6D98EA1599FE3589B5C5 /* bignum.cc in Sources */ = {isa = PBXBuildFile; fileRef = 0BFB85B76F6C2F9809214837BFA1F944 /* bignum.cc */; settings = {COMPILER_FLAGS = \"-Wno-unreachable-code\"; }; };\n\t\t6E29FD7F204937BC53BC1010354EC995 /* Transform.h in Headers */ = {isa = PBXBuildFile; fileRef = 071916D0DED7AE1D3E16FC6FEF5AEFAD /* Transform.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6EA7026AD8D1F370E0A660F1A4FF7A07 /* RCTBorderDrawing.m in Sources */ = {isa = PBXBuildFile; fileRef = 35D8CF26BB70259E361BDEA1E77D32E1 /* RCTBorderDrawing.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t6EC429788275A10A19015F2048C9AE9F /* RCTDataRequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 544A0D0CF86148CB2EF0B78039179444 /* RCTDataRequestHandler.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6F63BCBD2B1E7B4CF5D5A7578A70108C /* RCTUITextField.mm in Sources */ = {isa = PBXBuildFile; fileRef = 940919353E8C57E4A2A3101E8CD0FA67 /* RCTUITextField.mm */; };\n\t\t6F9E2B385846EC9BB5EFF49C7BCF8AD5 /* Stdlib.h in Headers */ = {isa = PBXBuildFile; fileRef = B4731BEAE5B9F1A65FB492F06B455F7F /* Stdlib.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t6FD855099FE9DD6831F7AA14A8D6F777 /* RCTBridge+Inspector.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F9298A1BC8933244F1905CC7B380EA1 /* RCTBridge+Inspector.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7006296EED73C5539402EABE1BC4F702 /* PlatformColorParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 00D0EC9AE90BED5D79B9CAE98DAE902E /* PlatformColorParser.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t701973358846CBEDD827355528F51546 /* RCTThirdPartyFabricComponentsProvider.mm in Sources */ = {isa = PBXBuildFile; fileRef = E9AD225EDBC81406F600822BE5CB48E9 /* RCTThirdPartyFabricComponentsProvider.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t702965A08043A7A64AAB09E780D08663 /* CArray.h in Headers */ = {isa = PBXBuildFile; fileRef = B159432A0D462B5E94046B7320846BC4 /* CArray.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t707CA342CE6A6666CA1D5E537C243D40 /* AtomicLinkedList.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E4412A2483337D140CD540D4751F2FB /* AtomicLinkedList.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t70ACDD1F376B8B5A7FB1A8F2A0B908A6 /* RCTBorderDrawing.h in Headers */ = {isa = PBXBuildFile; fileRef = 7301D9F85906E2D5E3E899138ED1462A /* RCTBorderDrawing.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t70BCDC41D1A0240B3FFE10DEC03C5569 /* RCTDisplayWeakRefreshable.mm in Sources */ = {isa = PBXBuildFile; fileRef = 492E9A2ED4F5B423E522887CB7BCF477 /* RCTDisplayWeakRefreshable.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t70D9A7BB79BC5B0A87CC0B371A49D87B /* RCTPackagerConnection.mm in Sources */ = {isa = PBXBuildFile; fileRef = 03AD611B7986C5B131631A16A6DD5262 /* RCTPackagerConnection.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t70EDDB0D146F95B1139062781D9309BD /* RCTFont.mm in Sources */ = {isa = PBXBuildFile; fileRef = EDE4A26ED9B011F0E70494EBA45F89FE /* RCTFont.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t70EE94B444ED9B2CA09A5C36DC60E4D0 /* RCTFollyConvert.mm in Sources */ = {isa = PBXBuildFile; fileRef = C2A33F80F6DC091C0F0D9E733BE5F440 /* RCTFollyConvert.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t70F5A59001862BD0B1E8871F16584977 /* RCTMultiplicationAnimatedNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = AF0447D9E9E638217D6EABE45C7E0632 /* RCTMultiplicationAnimatedNode.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t71128E53B471C85A99F88750408B7752 /* RCTModuloAnimatedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 88F146A98AD14FE819BCA98EB3275AD3 /* RCTModuloAnimatedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t711E2F00A29C1C7E12B55ED37DB50C58 /* jsilib.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B6371A9E6D76C16AD518CC288F335F4 /* jsilib.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7148B8D601E67D9B8727775F7233F7FA /* RCTImageLoader.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4BB78B415F6A4B0EED05C08EA7A7D03D /* RCTImageLoader.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t71A038ED712C2249A49737A7DF499932 /* HazptrObjLinked.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FFEDA5AF4FED3EB1CC515BC9BAB2760 /* HazptrObjLinked.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t71AF7D9527D112BC4D62C7A8A3A7AF60 /* BridgelessNativeMethodCallInvoker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 145565A2AB5DD84BEAFA27EAFA2F4141 /* BridgelessNativeMethodCallInvoker.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t71B25172A6FBB06AE6F0AC803A1BB03F /* SurfaceTelemetry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6353D5B2828F0A532FAC374FF901DD8D /* SurfaceTelemetry.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t71CC2CB38EF9DAAD4F64835EB538E676 /* ShadowNodeTraits.h in Headers */ = {isa = PBXBuildFile; fileRef = 18EF461AA27476D0FDF425B3D2483EBA /* ShadowNodeTraits.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t71EC53ECE20B5A8A07D43AB6854CDBFA /* RCTEventDispatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 4059CB54B248E9CAF8D2648832EF03C3 /* RCTEventDispatcher.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t71ED29F2A5198E2ECDC85E8A33913487 /* ScopeGuard.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C6F2A8DD916FFABBB7924E8D417B7EC /* ScopeGuard.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t71EFB67CDD3BFD1B8FD94E74C72C2164 /* JSIHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = E0D2348E6FB9A55FE8BC6E93389B9432 /* JSIHelpers.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t72294B58C56420DC0B78EABE73A60EC7 /* RCTConvert+Text.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B62C6CE9D343C56E332C5816AC631E6 /* RCTConvert+Text.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7232F323AB9767475B711CD115277385 /* React-perflogger-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CBB1209D9BF3AC7A5E77178DCA9C126A /* React-perflogger-dummy.m */; };\n\t\t725DE6774E7CF785ADEBA7816ED0930A /* RCTTouchableComponentViewProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 2362BA983B00A2A04C7C991889E743A5 /* RCTTouchableComponentViewProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t725E303EAE71CABAF946B1516618C4C2 /* MapBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = BAA3CCBDA9FDF8609E0495A48B080979 /* MapBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t726C35D99D2C6DAD679EDA901EEB9989 /* RCTTextViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 289131589CCC21FDAAADD8DA0E1EA4A5 /* RCTTextViewManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t728B39A23F003D9E9FB6D384C4B8EDBB /* BridgelessJSCallInvoker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1EEF0D5633DA10F123E110EDC4C4947 /* BridgelessJSCallInvoker.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t72A0C6D8AACB0161DD9A9B7B9BD3AB0C /* LayoutAnimationDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 90666F35881E0B6CF16A7F6D502820C6 /* LayoutAnimationDriver.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t72BC0086E48E7F1B9CD8230A0B5D461E /* RCTBundleURLProvider.mm in Sources */ = {isa = PBXBuildFile; fileRef = 485B66F0206CCA9ACBE8269CA49B3639 /* RCTBundleURLProvider.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t72BF4275B8B3660B1CBC3F8945E499AD /* LongLivedObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 326FC938C2E12371A877E5FA46F37777 /* LongLivedObject.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t72FD3B8D4EAC12F432DE6B6350A8A52F /* simdjson-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A80A385542A9347C200F57687297EA39 /* simdjson-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t73027B4FD5ADD813B85FBC3D74837FE0 /* React-graphics-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BBFA4AD81E9D3D79B1B796B93AE70766 /* React-graphics-dummy.m */; };\n\t\t7345128E1576262D321085D0675568A8 /* RCTClipboard.mm in Sources */ = {isa = PBXBuildFile; fileRef = D2540C4EDDFB7CCCB96D25E31E2F57B8 /* RCTClipboard.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t737485B0EC651803714A2412F1A1EFD5 /* RCTTurboModule.mm in Sources */ = {isa = PBXBuildFile; fileRef = 41D562BB5F84842F8DF9293C3DEB309C /* RCTTurboModule.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t73AA961A1CF8EC1B0DDF4D53963928FB /* ThreadId.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 82BDE129A63F08D401D705753189D8B0 /* ThreadId.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\"; }; };\n\t\t7438BEC925296FD9297DD9E7EDA478F0 /* RCTModalHostView.h in Headers */ = {isa = PBXBuildFile; fileRef = C55375F5233C369562ED2EB95C0B34D6 /* RCTModalHostView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t744611E545D70C9024F524DCDE333162 /* DiscriminatedPtrDetail.h in Headers */ = {isa = PBXBuildFile; fileRef = AE8C9FA47D47B64CE6F506ABE68FCF06 /* DiscriminatedPtrDetail.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7446CA132F347A062A8953D8892D48C0 /* AtomicUtil-inl.h in Headers */ = {isa = PBXBuildFile; fileRef = AFE2AC3DE4D98F6A8B6D36ADB8E51F46 /* AtomicUtil-inl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t744A6AFA4DD1A2C8C42B91DDE1A6F835 /* RCTShadowView+Internal.m in Sources */ = {isa = PBXBuildFile; fileRef = A85C9B1C1144724CD503C69AEA9FCD8B /* RCTShadowView+Internal.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t744CFE8EFE8318B6887C7D057FB590D2 /* ReactCdp.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CEDDCFAB391081A6C3EB050DB9303AF /* ReactCdp.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7477B4ABF6296B23A00F0D50C65B6E7A /* ShadowTreeDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BEE9CFB3C6827C1D888BAFC061BB79A /* ShadowTreeDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t748AE618B291F6E05DC17EDB4E4728A6 /* RCTImageLoaderProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = C5B05D7AD22B1F14DC12650D34552F69 /* RCTImageLoaderProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t74A3831F302B0755566D22D3C30C2B74 /* RCTClipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 890F493171D8B37E354419CA6A05C95A /* RCTClipboard.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t74B6269F717A43150AE71628996EC8FA /* RCTI18nManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 735061C18CFE3076A4C204A7CCE1D301 /* RCTI18nManager.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t74C33EA812E975499F57B54E5A3793CB /* SRProxyConnect.m in Sources */ = {isa = PBXBuildFile; fileRef = CC91FDC94E55938A0F105FCC3D4FE542 /* SRProxyConnect.m */; };\n\t\t74C3F6DB467F1523FEA9543EA61B4B46 /* EventPipe.h in Headers */ = {isa = PBXBuildFile; fileRef = CF485BFE7872C54223E057A72A0AB6A3 /* EventPipe.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t74FD09866C2EEDF289F2151656259CD2 /* SRError.h in Headers */ = {isa = PBXBuildFile; fileRef = AAF4DA1DA2D688AADC65A0DA9B5471DF /* SRError.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t750459F7A6D7BC32515039B696B032DD /* RCTSpringAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 9113D58420F951D0F8E7D507C99E9190 /* RCTSpringAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t755282CFA23DBA4E963AE5F9CC11C0FA /* RCTURLRequestDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FE4624E81D0E4F7D216C71603A6BB12 /* RCTURLRequestDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t755285DD5B651A2374659E51434CAD11 /* RCTLegacyViewManagerInteropComponentView.mm in Sources */ = {isa = PBXBuildFile; fileRef = AC1A3A6597F7D2D59AD0CE67E1A09CD2 /* RCTLegacyViewManagerInteropComponentView.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t7556CD97341C849DE32E85BAC75540C7 /* EventQueueProcessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B22A0860FE6BF2F9CC4F24C6A16C02B /* EventQueueProcessor.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t756FE581ACE3EDF9F30A05EE811C000A /* RCTStyleAnimatedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 57C409D3D492DAB7368ECE438E121DB5 /* RCTStyleAnimatedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t757CFD9FBF0BB53294AB26076C6C3405 /* RCTUnimplementedViewComponentView.h in Headers */ = {isa = PBXBuildFile; fileRef = 629C51A688E90B65323CE6CC51796EE5 /* RCTUnimplementedViewComponentView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t75853200EC17CEE70359BDA55A296152 /* RCTImageResponseObserverProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A50B808D51766F1C0B42436A7163DDD /* RCTImageResponseObserverProxy.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t75893F82D0DC6BC54B04FDA1C9DDBA40 /* React-ImageManager-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 75BD04A47CB6E45D70FC6CC41F55E9D0 /* React-ImageManager-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t758A73A007DBDEE27DAC1076057CB202 /* RCTJSIExecutorRuntimeInstaller.mm in Sources */ = {isa = PBXBuildFile; fileRef = 79FC786FA7244B7B38C8D7E7D63FD675 /* RCTJSIExecutorRuntimeInstaller.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t75903DCA8665A09EAEEED35654CA466D /* RCTLocalizedString.h in Headers */ = {isa = PBXBuildFile; fileRef = 650E79C6CD8DFAF97DD3E4B49C99A6BB /* RCTLocalizedString.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t759763993CBCA407771469574C2A48A5 /* CallOnce.h in Headers */ = {isa = PBXBuildFile; fileRef = F9281ACFABCEF5289629EF6589504A67 /* CallOnce.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t75A3370597938CD39071A1E5AE25CAE3 /* Uri.h in Headers */ = {isa = PBXBuildFile; fileRef = 32B62C1AD7CDAE58FE4EF82AB2C29AAA /* Uri.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t75EE1CD4734EEA84AB3CEBBFBA8B5141 /* JSINativeModules.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DB0EF48E6F6F59EEEBA2E0AB6C7E410 /* JSINativeModules.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7604DFAE9BCFB8918643A00E43A0E326 /* hi.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 84C78B3BD305937A8FB7F156B1068561 /* hi.lproj */; };\n\t\t7695111DF6B3428C79B8FA67D5C29F49 /* RCTFileReaderModule.mm in Sources */ = {isa = PBXBuildFile; fileRef = C059BACE08D3A4EC8B1895D76B07DFE6 /* RCTFileReaderModule.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t76AE3689066A97D1B232A3FAB86C2A54 /* LegacyViewManagerInteropViewProps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61A6746F63145AAB8BD430D845B4B7F6 /* LegacyViewManagerInteropViewProps.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t76D4A3EF85DBD86A0692A18E5A499246 /* React-graphics-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 34875B2D75347ECF94E81DEA4C80D47A /* React-graphics-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t774D516A59D21EC80472A65BB40B55D0 /* ImageProps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B54D8461C2AF60CF1BF611F2D31ED2EB /* ImageProps.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t775374264170BAD2F2656335D8A3DED8 /* TextMeasureCache.h in Headers */ = {isa = PBXBuildFile; fileRef = A8AFB5F8828D81AB1CE785F5BD4DC61F /* TextMeasureCache.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t77812A80E72FC40B7CFA752C8D75D2CE /* RootProps.h in Headers */ = {isa = PBXBuildFile; fileRef = 13E6AE2DFCC178D3B20D130A2FA35FAC /* RootProps.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t77D525A44C69C742FB01F240990E6057 /* MallocImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7E424FA9074DD171A4AE55BE52EFAFAB /* MallocImpl.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\"; }; };\n\t\t77DF418FF614BFB9681632ED6F31C37C /* EventBeat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8A50EA432D2B83B1014E46448CA68632 /* EventBeat.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t77E6BC3FDEABA7B418C12B3E6F73A961 /* RCTCxxInspectorWebSocketAdapter.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4BEF797D469DBDB850A55FFDD493B789 /* RCTCxxInspectorWebSocketAdapter.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t783036467F0C5912B8D4A00B02899B3E /* RCTI18nManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EA1F0E80816FE3C537ADE1BE9E97082 /* RCTI18nManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7848F7B01636FD30500F733C3953D042 /* SurfaceHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FEB18EBDB42AC349730BA29BCF965FC6 /* SurfaceHandler.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t78606A7D8FE0761B720DD4F0531BB36A /* RCTViewUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EE4437365F516793455723C0F9555B1 /* RCTViewUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t78F3EEC46C002EDAB30A6258F8ECB70E /* React-jsiexecutor-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 42F83B7067F1043FA268569B56994602 /* React-jsiexecutor-dummy.m */; };\n\t\t799DB343D6D2A06C4860A8F11EC37FD1 /* InspectorUtilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97537A67023F6E33A60145FD2CCD320F /* InspectorUtilities.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t79BC0736343C7F0BB40CF262A7093547 /* RCTTextLayoutManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = BDF4907BCEC9C6B68A50F5CBD6A193CA /* RCTTextLayoutManager.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t79F498AD66CF7B1E027685FA9B830981 /* RCTConvert+Text.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0096A03750976681A81FDECEB7A7D8BE /* RCTConvert+Text.mm */; };\n\t\t7A0ED52CE1695B89D2AC55E1350CE883 /* NativeModule.h in Headers */ = {isa = PBXBuildFile; fileRef = E9E1F270CEDFF108574DFFDBE7F91985 /* NativeModule.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7A26687146CAE994D2AE94307FE436D7 /* StateUpdate.h in Headers */ = {isa = PBXBuildFile; fileRef = 27DE3F3B20B7CEFB975091316FFFB6CC /* StateUpdate.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7A2DCCD2975741E4941FF2958EF8D600 /* TurboCxxModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2993AE002A77BF7B39AAE55DB661DD31 /* TurboCxxModule.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t7A85844B8ABB2A92B190EC2C45988C25 /* NativeComponentRegistryBinding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD04C8CE4CFE3A8CBF7FEFC33B333653 /* NativeComponentRegistryBinding.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t7A929745AF8FF896CBFC97801A077941 /* Keep.h in Headers */ = {isa = PBXBuildFile; fileRef = F524D0F42CA29ACE3E6C3098C858C502 /* Keep.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7A94A234E15864DA153E2486D544D8F9 /* ImageComponentDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 846EE9DAE34FA678FA761E65DD2F08E5 /* ImageComponentDescriptor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7B23CFE3C52926A8B340594C18E30C48 /* UnstableLegacyViewManagerAutomaticComponentDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 32E0BB05F9F652F49EAE1D3EE8E0714E /* UnstableLegacyViewManagerAutomaticComponentDescriptor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7B283574381E52437094359C04A8B040 /* RuntimeScheduler_Modern.h in Headers */ = {isa = PBXBuildFile; fileRef = 45D9999C07AC6FD97A5897196483760E /* RuntimeScheduler_Modern.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7B3EFF70B6BC846F386E9B04B567C87E /* RCTAppSetupUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6FD6F1B6DC37EB6391F042FC9AC7E69F /* RCTAppSetupUtils.mm */; settings = {COMPILER_FLAGS = \"$(inherited) -DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DUSE_HERMES\"; }; };\n\t\t7B6DA18AF21228DB00C403D3863B7BA1 /* jsi.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C4F509606F5C64CB085DA2D927CDC93 /* jsi.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7BE465B58FA44A71A52E4F29C3CCD68D /* WatermelonDB-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 51396501E3E25FB7DCB5E276B819C556 /* WatermelonDB-dummy.m */; };\n\t\t7BF8D2646D1CAF6729DF00B7A59FE017 /* F14MapFallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C230DA31F009BBBB74798CD3CE527F8E /* F14MapFallback.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7C0832F738F3B45D9B194C3729757621 /* dynamic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 788308AAA58E926CC60655199F7DA6BC /* dynamic.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\"; }; };\n\t\t7C2C313941BEC63BAA8CC3668B949411 /* FloatComparison.h in Headers */ = {isa = PBXBuildFile; fileRef = 74F2B9390AF33F8E9969AE22B88C8280 /* FloatComparison.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7C3A014118CD31C6C26566E08F64BC3F /* ieee.h in Headers */ = {isa = PBXBuildFile; fileRef = 7777F6D0013ADB2C7FBD5FE217F042EE /* ieee.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7C4B2259B1758C2D9AE4D51C5762E6F1 /* UniqueInstance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EB71E81BC5E30853849F01DE038FCE31 /* UniqueInstance.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\"; }; };\n\t\t7C563026B579F20E0D207D038BBB1E5E /* AssertFatal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C7956DABB206C95A799C60F678F09BB6 /* AssertFatal.cpp */; settings = {COMPILER_FLAGS = \"-fno-omit-frame-pointer -fexceptions -Wall -Werror -std=c++20 -fPIC -fno-objc-arc\"; }; };\n\t\t7C5E0AA1A0D766AEFDB5C3F5FF6942F9 /* RCTNetworkPlugins.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4811CBBB4C46F7C891F1F7E426628CBD /* RCTNetworkPlugins.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t7D0D84A0154B18374120BC47B1D87B83 /* PolyDetail.h in Headers */ = {isa = PBXBuildFile; fileRef = 982AAB27F58C71E3FA007537ED46BB9D /* PolyDetail.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7D2198ADD1AD7461713B493938D36639 /* Bridging.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C12044FAE55F8C0F0F5BC236FA00BFC /* Bridging.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7D741114888D6A8F92CA30DA7938FF9F /* RCTNativeAnimatedNodesManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C32C30AB7EF3BB474BC4B4DFD2FC61C0 /* RCTNativeAnimatedNodesManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7DAB642F45A486822F115BE0920FB465 /* uk.lproj in Resources */ = {isa = PBXBuildFile; fileRef = AD09CCE53769CA1F7BC1031AEBE1E2CE /* uk.lproj */; };\n\t\t7DDC9C325BEBF570103734FD7DBC2EFC /* NSTextStorage+FontScaling.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE4C50E4C03A98702AAB8CE87A3D81 /* NSTextStorage+FontScaling.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7DEA6D0B866F977377D21AFFAD5E2745 /* EventQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A3F08746919747A6F56A2864E48BDDD3 /* EventQueue.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t7DF2C6E7CD4B2614333080F4D18991F9 /* RCTFabricSurface.mm in Sources */ = {isa = PBXBuildFile; fileRef = 56BBA94041D86275E476DAC1DD401197 /* RCTFabricSurface.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t7DFF6AA49AB89B1D15BDD142FB5C30E9 /* it.lproj in Resources */ = {isa = PBXBuildFile; fileRef = FB5D34754AD28372AC075C4836BC9BDD /* it.lproj */; };\n\t\t7E005F703B871E6F1DCBE37739EB9BA9 /* PackedSyncPtr.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E8209264577462872BC1AE7772C476E /* PackedSyncPtr.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7E4AC7154C2CE9CDF1093FA4152CB996 /* SRIOConsumer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B514510C45046BE196402FD4E82FB33 /* SRIOConsumer.m */; };\n\t\t7E683945AA4DE479DE6E7C64E77B9192 /* log_severity.h in Headers */ = {isa = PBXBuildFile; fileRef = F08460D67FAF18E84D6207E257538D64 /* log_severity.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7E9D2C1821BA925A94462F2556B7C282 /* RCTAnimationType.h in Headers */ = {isa = PBXBuildFile; fileRef = 42A97962C25A869DDED1914B699BD747 /* RCTAnimationType.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7EE0F6B05C54DAF73A25F1901169A318 /* React-rendererdebug-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 654197BBD530E127C270633DB539A166 /* React-rendererdebug-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7EE93CAC8D76887681E9984AC37A9FBF /* FBXXHashUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E76F01C60DFCE85A1C8CB416B3636D3 /* FBXXHashUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7EF0E9E009F1F4EC5CFC8B6A2D6B1217 /* RCTObjectAnimatedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = F35ECB508AB87E99C735B9A8219E2790 /* RCTObjectAnimatedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7F0FFA25BF039E3FEC89257156006BB2 /* Assume.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C81656E6394B680E495643EDC27FC6E /* Assume.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7F192056513AC45D918FE1AD9A537992 /* RCTRootViewDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 5675EDF737917D753E24442B6327797A /* RCTRootViewDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7F25A20E6035D2002292AB1D88D1D35A /* Atomic.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D2C764374D96A2A95EB7DEDB1AD4B23 /* Atomic.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7F269E29524C0061896B3C3770C62B83 /* RCTKeyboardObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 840FA9BF8D964570C73D3D561CF489CE /* RCTKeyboardObserver.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7F39D856A35CF04F8D6416A5DF528342 /* BitIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A3BCF7F218979C84533F1F242327D9F /* BitIterator.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7F61C911147722C681DB4FAA34CA76A1 /* ProducerConsumerQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = EF3D0DF483D191D626F907294861A317 /* ProducerConsumerQueue.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7F87FA23242BAAC6C75BF03E0C3F1BEA /* RuntimeScheduler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B9CF763D328B9FF7CD87693E3153F680 /* RuntimeScheduler.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t7FC52BE19A4972D6E0EFE5E8C062E78D /* MountingCoordinator.h in Headers */ = {isa = PBXBuildFile; fileRef = 09CACB20A3D99F350BE5A1565F4ACA67 /* MountingCoordinator.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7FC71456BF079C9BFC3E541399E9AD09 /* RCTJavaScriptExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = BAD62DA0698330C52546D1DD499A6B27 /* RCTJavaScriptExecutor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t7FFD7CC9EC841E4667F9683D6DB2A099 /* RCTImageURLLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 4279CDB721ED8120EB0EF927416392FE /* RCTImageURLLoader.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t800168271BC4625A8BAE356763E5F578 /* React-utils-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AC69D8640FF5ADCACD89B82CB9E1110 /* React-utils-dummy.m */; };\n\t\t8020DC79BC18FE1733F382110AA7F9BC /* RCTJavaScriptLoader.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1CBBEDCDAA1BFA365580787F950200AD /* RCTJavaScriptLoader.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t8029584710A456EC5C67D4A4BB9A680B /* React-Core-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D24035ED25B87D45E72A4CFB861C024 /* React-Core-dummy.m */; };\n\t\t802DC9139C32DC3C41FBEF4AA8CF4952 /* RCTImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = ACA2D560DF5674F43C2F0CF72BCBF485 /* RCTImageLoader.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t804AB8115EEB65519BFF4EC3478F17E3 /* RCTContextContainerHandling.h in Headers */ = {isa = PBXBuildFile; fileRef = F8DEF690935571E2BA15F11F274EE883 /* RCTContextContainerHandling.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t804D9AADCDC8D1F1632F230EEFA6FBC0 /* RCTModalHostViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 373F105CB4DEE4BDB90F46875B73BFA8 /* RCTModalHostViewController.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t80CF2710C53AA456D9BACA32C9F94242 /* TimeoutQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C0FFE3B52F5FC5B9E85936F71606010 /* TimeoutQueue.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t80F7C5E7A9B1BD9CA80E7AC9692EE98A /* RawPropsParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29069E0EE8AF62E25BA127E3020926FD /* RawPropsParser.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t81313E2CDDE7FC92041DDF94657C35BE /* RCTLegacyViewManagerInteropComponentView.h in Headers */ = {isa = PBXBuildFile; fileRef = 47BE5F90D494B6D74BB9880F6EBD0D1D /* RCTLegacyViewManagerInteropComponentView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t81A2F9C881DD636F42CEC4CD4A9A60C1 /* LegacyViewManagerInteropComponentDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FD672FEBEC49B42EEBB59B54F5CD143 /* LegacyViewManagerInteropComponentDescriptor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t81C6BB24D1610AAA396418710B52389B /* ModalHostViewShadowNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ED8BCB98B8CAFA45445802548B32ED28 /* ModalHostViewShadowNode.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t81D57A8CE92E84FEA69A148D1BA897A5 /* RCTWrapperViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = DAB01DFE83E0C8658D41522C80D2366D /* RCTWrapperViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t81DA215A55827E4BA0DF542A3DB8E001 /* SocketRocket-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0585010DB2257C8B62F3B1BE51449BDA /* SocketRocket-dummy.m */; };\n\t\t81DAEA474DC6FF87563B93C13FEB6658 /* RCTLayoutAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E1FB69666F2C09161B2E1A2535CC43A /* RCTLayoutAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t81E86C9D8F20FB2F3B4462F3CCD54294 /* RCTVirtualTextViewManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = F7CB0C6D6849C6DA8C5BCBFA3B2651ED /* RCTVirtualTextViewManager.mm */; };\n\t\t821D1FFAF81B7DEA7FF2DCB766C1E069 /* MallocImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = F7DCF7DBDA1DB363572544D437D1EB4A /* MallocImpl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t82422290D96A134494D0B160434C8A8F /* RCTComponentEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 41E25EEE9BD95F7330BCB968457D0541 /* RCTComponentEvent.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t826104B9BF8174D5B23A6D51AC4A16AF /* RCTSurfaceRootShadowView.h in Headers */ = {isa = PBXBuildFile; fileRef = 37560CB0B831B9181D0E9FE412A827E5 /* RCTSurfaceRootShadowView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t827D7956B2E401FEEAE0266A95CAD3F0 /* Hash.h in Headers */ = {isa = PBXBuildFile; fileRef = F6649A5E0CB0CD5E9B98CB49FE510D25 /* Hash.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8295C73E52CD5C12A616EE97FE02478B /* RCTDecayAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 224F3D752D59D26136CB03C3D3C240F2 /* RCTDecayAnimation.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t829CE543BE934D8599926B5A0E2FE109 /* RCTDivisionAnimatedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = AB89B71C07D924F2DA582CF6A4C3CFA4 /* RCTDivisionAnimatedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t82A49A43173CFB3AAB84B2A4DBFAB89D /* SRRunLoopThread.m in Sources */ = {isa = PBXBuildFile; fileRef = DD9C6B9D5678AE4BC86F7AB978C63029 /* SRRunLoopThread.m */; };\n\t\t82A759B463C6E280D1C961F6F71BAB15 /* RCTExceptionsManager.h in Headers */ = {isa = PBXBuildFile; fileRef = D078B11D9117F5852F1C821A0DD6E65E /* RCTExceptionsManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t82B151FA407A5ED82238DE63FD119835 /* FBReactNativeSpecJSI-generated.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4AE459B4FB63DF08755386C3B4D759D8 /* FBReactNativeSpecJSI-generated.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -Wno-nullability-completeness -std=c++20\"; }; };\n\t\t82D8D0292794FEB4B58E14E709CB8E78 /* TouchEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 611398E0E68366F20ADC93BC5D04C7B0 /* TouchEvent.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t82ECAFB8B430AB7AEE8A186E85BB87F2 /* RCTParagraphComponentAccessibilityProvider.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8CB48239EFF087F22AC48A83F592D64F /* RCTParagraphComponentAccessibilityProvider.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t83029D9A22030F3A36506286BC43B43C /* TransactionTelemetry.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FA659BE9F28613C4D7F98DAC5FD1C4B /* TransactionTelemetry.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t83113F39C5BD9864CAF8F3E91D01BD34 /* ConcreteViewShadowNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C6AF51B4A4EA15B2F122DBA7BA5B2A0 /* ConcreteViewShadowNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t834FA1181483059D08BB31BF631CB418 /* TextLayoutManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = AC18F953AA41F612F2CB8153565DB590 /* TextLayoutManager.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t8387B15D94ACE3AB8A57F8580B22D08E /* RCTNativeAnimatedNodesManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9C9BD5B613E101C64C2992C9C6D47EAC /* RCTNativeAnimatedNodesManager.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t838D25B894748FE27FAC7FE3F39AA0FF /* TextAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D3B7CA09D694AABDB4E6816701346CC /* TextAttributes.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t83A0F6143A5339BAEBBCA6EA7A4F5BAF /* format.h in Headers */ = {isa = PBXBuildFile; fileRef = 22BBDCDC9E5BB7D47CB6C63BAD034B4B /* format.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t83CAAC66FC6430951815CBCA69937212 /* react_native_expect.h in Headers */ = {isa = PBXBuildFile; fileRef = 641D2E46DE82FDC74711D6550B34BB4B /* react_native_expect.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t83CB29BA147169FE17245CC493A65214 /* RCTConvert+CoreLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = 40578E9386680C689D002917E383C065 /* RCTConvert+CoreLocation.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t83DEC1E75A0961D67CFAD87A5B6139D7 /* sorted_vector_types.h in Headers */ = {isa = PBXBuildFile; fileRef = F804F0627373E6C63D34AAD65291FD24 /* sorted_vector_types.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t841FF36838662B6C2789AEED5D6016C8 /* UnimplementedViewComponentDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = E80581A669DE626F703216374FF4C3A1 /* UnimplementedViewComponentDescriptor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8446DCAC58446356C7F6D58717A0B41C /* Format.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 869D440DACC02CD2540C4CE6A499116F /* Format.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\"; }; };\n\t\t8455F11FC6E87759E2FCDDB9086B9527 /* RCTNativeAnimatedTurboModule.h in Headers */ = {isa = PBXBuildFile; fileRef = D4758B7FCDEC2C0806CEE3D106040093 /* RCTNativeAnimatedTurboModule.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t846A2D046969DDCC9B62226BB8E71C78 /* RawValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AB59CE368BC9400B2ABCD47AFB8C08C /* RawValue.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8494CFAC6607B7239C90ED77D2427B29 /* RCTDevMenu.h in Headers */ = {isa = PBXBuildFile; fileRef = EDBAAC4C0FEDEB6F19329DEE85E71512 /* RCTDevMenu.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t84D3648467DDC6B2AD609FFDC7234AD2 /* RCTLogBox.h in Headers */ = {isa = PBXBuildFile; fileRef = E570952D2C710A3EC6A39040970B220E /* RCTLogBox.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8527C5EC667D2988E0FF5B260187ED15 /* LegacyViewManagerInteropState.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7A860D2229C54CBF112DD02B57C926 /* LegacyViewManagerInteropState.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8558A61F1FC9DCE311F651F6839AD63A /* Sealable.h in Headers */ = {isa = PBXBuildFile; fileRef = D828B4DBBD448E09A3D7C599F4CEFEF3 /* Sealable.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8569FF4D1B56E1A399877F11FC5E97B7 /* RCTCxxModule.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D26752B3DE0424E4FA28589D9108BA /* RCTCxxModule.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t857BDC3DE3F7896BD773F402341D9C8B /* LayoutResults.h in Headers */ = {isa = PBXBuildFile; fileRef = ECC51259933A05380339556B6ABE282E /* LayoutResults.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t858CE2E693CE69AF1CDE8933197E0572 /* fixed-dtoa.h in Headers */ = {isa = PBXBuildFile; fileRef = BDA3C52C76B2C3F5E9BA936CB0B3B9C6 /* fixed-dtoa.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t85CE887F8160FAC60A5613E583CD369A /* FBString.h in Headers */ = {isa = PBXBuildFile; fileRef = 313F1FACBDF2947C76A286C8AFC6551D /* FBString.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t863865180BA34A40972C40C6A7C8E021 /* ComponentDescriptorFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = F5F74E1220FBDEDB27401F3F98612EC8 /* ComponentDescriptorFactory.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t865103DABCB9C2CA4DA86FE8311B4AFC /* PageTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DE6CB0254166C64BB61D724834E284BA /* PageTarget.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t869C6BC97E0783E17A7A32A4CB9C444D /* JSIndexedRAMBundle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 25A6D3EB52D98D8E0A7564596C8CE94A /* JSIndexedRAMBundle.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t86A39CCE3B6E3D293E0CE2C67781A81A /* RCTKeyCommands.m in Sources */ = {isa = PBXBuildFile; fileRef = 82667B9482B97C6E5629E4F6381B1965 /* RCTKeyCommands.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t86AE12D8AB4DFCEF8C5413A542FA699F /* RCTMountingManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B80D5D0E1943CE661F2F4C200BA7BE9 /* RCTMountingManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t86B3C2F4E98DEF836BAA645068EC7341 /* simdjson.h in Headers */ = {isa = PBXBuildFile; fileRef = A97083B6B19B7182A30872D4EBFEBE41 /* simdjson.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t86C2CD9FB54FB1F2AA9CF4F3D84578E4 /* RCT-Folly-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 729855E0C41B82077DDA2290F0B0BCBD /* RCT-Folly-dummy.m */; };\n\t\t86D02F0FB4C9CBB82EC56980E53B40A3 /* ImageRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 36C08C7FF3DFACBC39FCE541DCF803B6 /* ImageRequest.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t86E509A8309D2C829F649CA6E17F8856 /* RCTAttributedTextUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = D584937399C1E7BBAE37C4B6480368F6 /* RCTAttributedTextUtils.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t86E83BA3D9D13B74E9375EF5DABEBBFE /* RCTScrollContentShadowView.h in Headers */ = {isa = PBXBuildFile; fileRef = FF88A9733D935D4DBE027D36D5B591C1 /* RCTScrollContentShadowView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t86FE8980695E53A76E1F1E83E07F2AC3 /* RCTURLRequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E27D0C1422F9594DB63A196340A1C0E /* RCTURLRequestHandler.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t86FFDED80645961F5B0E1C77813A3E3C /* MacAddress.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A732660A46D8B89E811D42131A47E43 /* MacAddress.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t875518F410236D322133384F93B4EE9B /* React-jsi-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 359B6CEED91D1DF8B883DC40D5E04EEE /* React-jsi-dummy.m */; };\n\t\t8757125933F9FB281B0CA8D92413FD2A /* SRHTTPConnectMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 44D41289A83BA05369244074562FCAE8 /* SRHTTPConnectMessage.m */; };\n\t\t875A937197A2E17F4FFDCBEF110CD993 /* AtomicIntrusiveLinkedList.h in Headers */ = {isa = PBXBuildFile; fileRef = A7CDF9E97D044762C37CF380DC086899 /* AtomicIntrusiveLinkedList.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8778EC34B4FB5DDD57124C18CC26AEEC /* FMDatabaseQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 40B78C2265ACE3B8ACB7A504F9CFA4DE /* FMDatabaseQueue.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t87818F7E72E1C8E3028F461ABBCE56E3 /* pl.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E7807D90980DF5E58292BD819D067CCC /* pl.lproj */; };\n\t\t880558ACD71010548F8BC00CB06E3F67 /* RCTManagedPointer.h in Headers */ = {isa = PBXBuildFile; fileRef = B3842DDC8C8C33A9D3DB8FB30835698E /* RCTManagedPointer.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t882323307508D2F24D0977D0A77F86B5 /* Indestructible.h in Headers */ = {isa = PBXBuildFile; fileRef = 8325F6D78EEBC85AE983E28DE38AD770 /* Indestructible.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t882AF9DE6433B759F7BD1EDACDCF0024 /* RCTPerfMonitor.mm in Sources */ = {isa = PBXBuildFile; fileRef = A50AFF02E96B2A9FAD9F4CDF5D05C365 /* RCTPerfMonitor.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t886A63B1ED1A16230902FA3A13D84CB7 /* RCTReconnectingWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = AEB455EDDB077C84F1FFD562DFFBA54E /* RCTReconnectingWebSocket.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t88730960BF591557697D68FC435C89D8 /* ParagraphAttributes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 52332B91843419E05974FD7AA782856B /* ParagraphAttributes.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t88847364C16DA3DF2BC6288012F34BB2 /* CoreModulesPlugins.h in Headers */ = {isa = PBXBuildFile; fileRef = F40DA4337071C6A25D759BAE9D00C90A /* CoreModulesPlugins.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t88882DE62CCC5DDB83D711846353FA43 /* SRRandom.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C2D3D50F94DAC3059E02150AEC13F5F /* SRRandom.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t888D80843EE8FCA8A3111C91CA24A999 /* IntrusiveList.h in Headers */ = {isa = PBXBuildFile; fileRef = 866D0225560051A219BEE4D4664348F9 /* IntrusiveList.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t88C7EA300B0E07376EA1EB2A781FE1C2 /* bindingUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AD266EFC19E97B68AB736B2DFAE934E /* bindingUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t88C9FAD022478A7E8EF82D42816571C6 /* RCTComponentEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 830AFFE41A7F0C0AA095F4DB57B6BD4D /* RCTComponentEvent.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t88FF806A114A17DF66BCADF876DACC04 /* SystraceSection.h in Headers */ = {isa = PBXBuildFile; fileRef = 643840DD64D54B52A2193F98673994AE /* SystraceSection.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t89061AAC16A9D8755BC29388594191C0 /* TextInputShadowNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F468DC980FF349730A91EAB27AA80749 /* TextInputShadowNode.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t890821868B6146972E028C6CDCFAFB46 /* RCTAdditionAnimatedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A801C14BFA125ACB2E474AAFB4B2D03 /* RCTAdditionAnimatedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8933D7B181697994023E7AAEB3DD9909 /* RCTTrackingAnimatedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 18E04C8FC9E54D8A00245F3E4B386C0E /* RCTTrackingAnimatedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t89423B1A952759E81DC0C4287F475231 /* RCTDeprecation.h in Headers */ = {isa = PBXBuildFile; fileRef = B2A78B7CA6B87E3C5B857F9EB9B7AF87 /* RCTDeprecation.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8964DA67716421A13752C604BC9590A2 /* SRConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 2845C7EA5A46AFE22DC6C82FA344FB15 /* SRConstants.m */; };\n\t\t896B5C9C328433F866F22E2C7414673D /* Synchronized.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D4B16C5729900BD0CF675EE898C8327 /* Synchronized.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t89838E50A5FAC6006B7986F7130E99C7 /* fast-dtoa.cc in Sources */ = {isa = PBXBuildFile; fileRef = 6A3EDF523AE8279DAD3E84193359461D /* fast-dtoa.cc */; settings = {COMPILER_FLAGS = \"-Wno-unreachable-code\"; }; };\n\t\t898869098F6FB696AA71D98E461232CA /* RCTComponentViewClassDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 7219469EB101610CDE06F56EAFF2F90D /* RCTComponentViewClassDescriptor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t89B15B8D049992388A6BCF216AF8BE15 /* TurboModuleUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ED0263B5DB4AF04BF5391CA51E3AE6F4 /* TurboModuleUtils.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t89CCC3121E6749EC7C4D707AD992C550 /* RCTComponentViewRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 36164B0E9E5609F36A0106D648A0FA8E /* RCTComponentViewRegistry.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t89D89CF3D8BF72B6526EA0FF4E8FC1F8 /* logging.cc in Sources */ = {isa = PBXBuildFile; fileRef = B07F73246764E395281393D1BFD73751 /* logging.cc */; settings = {COMPILER_FLAGS = \"-Wno-shorten-64-to-32\"; }; };\n\t\t8A092C05BF760852783B87DB4FDB2AFD /* MaybeManagedPtr.h in Headers */ = {isa = PBXBuildFile; fileRef = 1260781BA130D5E430412D17AA9CF321 /* MaybeManagedPtr.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8A61C81F74DF0B4608AAD105548E9921 /* InputAccessoryShadowNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 5176B30F1DFC1E15711AA1F63DEFEEE3 /* InputAccessoryShadowNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8A79A8939884686638CEF48F3434E6AE /* RCTNetworkTask.mm in Sources */ = {isa = PBXBuildFile; fileRef = C2CB66217B1E850D02CEDC8E10195C8A /* RCTNetworkTask.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t8A819DCA8AD6D57C2222DBE0B7FE7190 /* RCTActivityIndicatorViewComponentView.h in Headers */ = {isa = PBXBuildFile; fileRef = 21E277EB0A609214CBB931D344238A64 /* RCTActivityIndicatorViewComponentView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8A8DA15355CE0296C45E81D47DE94307 /* TcpInfoDispatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EAB5C076EC5BA3D8E0D48CBF9F38DC1 /* TcpInfoDispatcher.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8AADCF981A3C5BFC9A728A4807F1FD57 /* RCTProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C00DC34CBF0C27CE15A57901CFE39D1 /* RCTProfile.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8B3013D13CA5D7852BCEC3F9A0A0D22E /* RCTSurfaceRegistry.mm in Sources */ = {isa = PBXBuildFile; fileRef = 32D1CC8F0E612A18C597E5BDCD724B17 /* RCTSurfaceRegistry.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t8B3A0DE1411F63948C1B7328AC4DC664 /* RCTSafeAreaShadowView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B75886BB83AA90D3B2DEFB75224490C /* RCTSafeAreaShadowView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8B6D7EFAE33ACDC84C5716F89DB43685 /* CoreFeatures.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 132132CB707C71FA5E68A7BB06EE4804 /* CoreFeatures.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t8B8982906FFDDCD41E210EA5727548EF /* conversions.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CA8FFB264289551FCCAE29495EBE650 /* conversions.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8B8AC90BDB270B8F075B58F2BC966E3E /* RCTBaseTextShadowView.h in Headers */ = {isa = PBXBuildFile; fileRef = CC9E0C53D02E49E161CC61AD2E78DD12 /* RCTBaseTextShadowView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8B9FA606ADA138041A461B1A45CC47BC /* RCTConversions.h in Headers */ = {isa = PBXBuildFile; fileRef = F5A6371CE2CB24DC0532ACC93642CC48 /* RCTConversions.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8BAF82EA2FC8B67DBAE9B4A39E32ED85 /* ShadowViewMutation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB2E2D07807B6BB7451133707BC5FF03 /* ShadowViewMutation.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t8BE990F2C07DD454945949C7EF8FBBE1 /* RCTLogBoxView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 498AA16C83135C6DAEFCEAE97628D0D5 /* RCTLogBoxView.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t8BF6DF9CF222FB4CA16C9FDF00D1A4BB /* RCTModalManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A9951E633F11568F42B8CA2DB0EAAE73 /* RCTModalManager.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t8C6CD8EF00A7B2AA432B528185A21005 /* RCTIdentifierPool.h in Headers */ = {isa = PBXBuildFile; fileRef = AD69277D74C06C01F9C13CD77A13038E /* RCTIdentifierPool.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8C7240FF4EDFF6B9A2A5E7802D6A8976 /* Singleton.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B799169876F75C6B694791908FAA1EB /* Singleton.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8CB06AE99C65D0CB47B460E9715D2447 /* hr.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 91392F3C2B6C40DD319492604906C7B0 /* hr.lproj */; };\n\t\t8CB4AD3BD8F8733099DBD330A38BF9BD /* LegacyViewManagerInteropShadowNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F7FB105B5F150706FC7A1068544C1C16 /* LegacyViewManagerInteropShadowNode.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t8CB5FB6855789B1CF6C224E66DBC0DD1 /* Telemetry.h in Headers */ = {isa = PBXBuildFile; fileRef = FDF1FDBD6E5C45FE24CB4F2C3B228AF2 /* Telemetry.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8D2E0D17D455244D4DADB8163EE9C146 /* RCTMountingManagerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = C2130B95F426EC491603E0487645BCAC /* RCTMountingManagerDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8D3920B60E2117BEE3BD89D4270299B3 /* JSIInstaller.h in Headers */ = {isa = PBXBuildFile; fileRef = 240A841CE45A01661CD44D4EE8B91BC5 /* JSIInstaller.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8D3CBE78A64B90795160670F9FABFF09 /* ViewComponentDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = F03D40C105C0F07D9C18AE34F3B494A0 /* ViewComponentDescriptor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8D594C2325978C5D20EE6C5C2824342E /* RCTImageStoreManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 7672883E0F8241100C66C2D877FCFDC7 /* RCTImageStoreManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8D6641689CE7A4839A8B823EA727C1AA /* FlexDirection.h in Headers */ = {isa = PBXBuildFile; fileRef = D042C4DD00523E4DF1235E10F891754B /* FlexDirection.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8D71047A3D5C9E1F408B1BD91EE59484 /* ShadowNodeFamily.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E4274F08E4BBF0B6491769157BBB91F /* ShadowNodeFamily.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8D8BBF7A84CBAE7584B4D446F86A2086 /* zu.lproj in Resources */ = {isa = PBXBuildFile; fileRef = F04C97A51C7A3AE18D87F7881C39DC76 /* zu.lproj */; };\n\t\t8DB2904D172809FA82F53D6DACB6770C /* TextProps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CF8779EB6F6185F6C461B3A8E5F7DD3D /* TextProps.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t8DBD42E153C1E210DD2D91CBE300795A /* compile.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F172D220F95765CFA361637BAAAA417 /* compile.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8DD704A7DFB3E7DB7CA5CF748EC11878 /* Edge.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A5F0251C69A9CCF2DB3222CE170671E /* Edge.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8DDC6079A4374C5B0D4B59CAABF373C0 /* RCTPackagerConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = FC938492EE25EDBA884D42C17EE1E89B /* RCTPackagerConnection.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8E1B5E2097D0875A90955BF49D724F19 /* ComponentDescriptors.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AE1B2934FABC52774A42A595531E4F6A /* ComponentDescriptors.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t8E6752CB584D97C2A86519B83B482227 /* UIView+React.h in Headers */ = {isa = PBXBuildFile; fileRef = 32680615BD888084B01D830F2196A3C7 /* UIView+React.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8E729B5904B3B5667E973370219CDEF4 /* React-Core-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AD9E5C254F43B4A3AC4E7A6452D879C /* React-Core-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8E85CB53CC69D87235AB1A5051D02DA5 /* RCTTextInputComponentView.mm in Sources */ = {isa = PBXBuildFile; fileRef = D015441B32F30C25792A1C654C1FD49B /* RCTTextInputComponentView.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t8E8EBCCDD1F8861EE6CA56DDED1D958F /* PropagateConst.h in Headers */ = {isa = PBXBuildFile; fileRef = C844508F5FF5CB3FE66B8F8DF7302612 /* PropagateConst.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8ED21B7AC493FE347E9E83369F9352CC /* Promise.h in Headers */ = {isa = PBXBuildFile; fileRef = 883F3E36A905B70FC2C8B78E92AC740A /* Promise.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8EE03FCDF67F4EE3290B517CFA87A7E8 /* RCTModuleMethod.mm in Sources */ = {isa = PBXBuildFile; fileRef = CB62AF8BE005DE4640777FBFF95866BF /* RCTModuleMethod.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t8EE950B8A3384D574B426B5A85C62D4D /* RuntimeSchedulerCallInvoker.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D66D180322220310B33E06C2A6650D3 /* RuntimeSchedulerCallInvoker.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8F323E2F2DA6F55192388F26F0C24927 /* RCTSurfacePresenterStub.h in Headers */ = {isa = PBXBuildFile; fileRef = 034CBF9A353EFD13BB30389694CD06AF /* RCTSurfacePresenterStub.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8F8C308FB213101092DF89E03DF5D3F2 /* ObjCTimerRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = F275B31E7A8AAE45DABF741983B8C743 /* ObjCTimerRegistry.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8F981C056361D8BEB7739CC67BC494B4 /* RCTTypedModuleConstants.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4E54C446AD8887C61105DE1F1011BC2F /* RCTTypedModuleConstants.mm */; };\n\t\t8FADB205FCA25F99038ED124EC0587A4 /* RWSpinLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F3F30A04837205FCBA040E0445525A6 /* RWSpinLock.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t8FCD1C8218809FF67978B99120C99DC9 /* React-logger-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 77BAB7AB8A4B785443BC2813FC1B32C6 /* React-logger-dummy.m */; };\n\t\t903DB9FA0A5B63EEC2030D326152B6FA /* RCTDisplayLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 69B9588066B95155E4417D77327555CD /* RCTDisplayLink.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t90429B015B1A484B8D95A975975DC51A /* SysSyscall.h in Headers */ = {isa = PBXBuildFile; fileRef = BB2D4F3D9EA6B428CD822160742EC53F /* SysSyscall.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9068BB732F9B931880C0F8BFE1133112 /* Random.h in Headers */ = {isa = PBXBuildFile; fileRef = 94D87B59FEAC0DBA4F9A7E928431AAAE /* Random.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t907AF22D8F8271E5F977F25DFA0F73A6 /* React-RCTImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 45FA7F5F8B8980E56D777737778E2381 /* React-RCTImage-dummy.m */; };\n\t\t907EB0B80C8BE1DA8C300AA92CB364A0 /* Log.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 37F9065181BD972C82D47E7F46FFBBAA /* Log.cpp */; settings = {COMPILER_FLAGS = \"-fno-omit-frame-pointer -fexceptions -Wall -Werror -std=c++20 -fPIC -fno-objc-arc\"; }; };\n\t\t908691D6E6A6240D9BC651336C71B697 /* ImageTelemetry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 340097AC9A9BF4BAD1E542E436217620 /* ImageTelemetry.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t908DF962421BEACE0D0EEAC2BEB84A30 /* RCTDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 30162323761B1AB1D7A828CC5D1BE36F /* RCTDefines.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t90BBE9AC94E874862E831FE5AE51A577 /* RCTLegacyUIManagerConstantsProvider.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0575009F97CFBDB1867FBAA80648479B /* RCTLegacyUIManagerConstantsProvider.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t90C0ED4C25BBE5201770D4FF695A81A6 /* Style.h in Headers */ = {isa = PBXBuildFile; fileRef = 5545A49E67978F2CEF8C77F63D7368FF /* Style.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t90ED9323F40C70F953900BEDF86C83CF /* ReactMarker.h in Headers */ = {isa = PBXBuildFile; fileRef = D3779D2E5E9D11A2A28A3B557D2841F9 /* ReactMarker.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t90F713B356228BE688BACF56AF55ACF2 /* SysUio.h in Headers */ = {isa = PBXBuildFile; fileRef = 79CC003D3F5205C371DC8BCBE46FD022 /* SysUio.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t90FE9EE300AD62DD80F8ACBEB966A72A /* RCTValueAnimatedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = D968F1CAEE31B74111F5F45D24E694BA /* RCTValueAnimatedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9111482AEA47A273F54C6A45660C17F8 /* RCTBorderCurve.h in Headers */ = {isa = PBXBuildFile; fileRef = E0246A845D54C7B635C77FFDE88894B9 /* RCTBorderCurve.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t91261AA9EF204EAA4F865018549E8476 /* RCTTrackingAnimatedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 18E04C8FC9E54D8A00245F3E4B386C0E /* RCTTrackingAnimatedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9129BAF1A295E5BA2BFA9D27E0DD8B30 /* YogaEnums.h in Headers */ = {isa = PBXBuildFile; fileRef = 229E898FFA1C9E93F86539379E9096C3 /* YogaEnums.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t914C439C1D26D04E388C679710CB249B /* CallbackWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = E99066C5DDF65197FF753C23E54313CC /* CallbackWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9178CD20BCFCB0BC939BC7561FCB33FB /* InspectorPackagerConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = E40225EFF83BFF372E2ACB0DEB6152DB /* InspectorPackagerConnection.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t919E20B121E45FB70B18B13A38BD4371 /* RCTImageComponentView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 012CC3CCEDDC11E02851DBC088F9B7A2 /* RCTImageComponentView.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t91A571775E906D836350ADADEC849A4A /* File.h in Headers */ = {isa = PBXBuildFile; fileRef = CBC8B43C8992F34DF7CD32D7923EDE53 /* File.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t91FE7C0592A4570B5BDEF0B5BD337FEA /* GFlags.h in Headers */ = {isa = PBXBuildFile; fileRef = 58591CA75671A3724AEF97FE040632D7 /* GFlags.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t92048C77172BB4D1D55779CEE7BA8F5C /* propsConversions.h in Headers */ = {isa = PBXBuildFile; fileRef = F83C31C20E032D387D9A04D68DAC8265 /* propsConversions.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9242F0F9E52CCA157276B60C7717847C /* RCTUtilsUIOverride.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D239EA1163C5886418BBB97A80CD68C /* RCTUtilsUIOverride.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t9271349E8FDF5329205E712797561D1D /* TurboModuleBinding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FD2B5192F4D25A120B9FBA56082E1498 /* TurboModuleBinding.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t927C8D7BB3740323066FE2E8CD53F02D /* threadsafe.h in Headers */ = {isa = PBXBuildFile; fileRef = 16E3111070B2202E4E59A2EB4AAF55A9 /* threadsafe.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t92F9C861E9C7D42BF5CBED7EBFC77D72 /* ValueFactoryEventPayload.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2CA71A360B05CFB72B96ACD04FA7ADB6 /* ValueFactoryEventPayload.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t9307396B4ADA5CC798FF0884900FC572 /* HermesInstance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B640A9964EA3E8305895667CD6375FAB /* HermesInstance.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t930BA86D8E612AC22708E752E4A61383 /* small_vector.h in Headers */ = {isa = PBXBuildFile; fileRef = DF63E196F2D472D716CD1CFF8D29C2EF /* small_vector.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t932C4B72A39D5E4B28B11735AEC65689 /* React-featureflags-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E390D39B5438A34CB65883263516478C /* React-featureflags-dummy.m */; };\n\t\t936A9AB6C986409BCEFF9F365015DD61 /* Subprocess.h in Headers */ = {isa = PBXBuildFile; fileRef = D1802F9C2D3A26DFED67D9A4805852E1 /* Subprocess.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t93728BE1C4A407884F562ADACEAC71F2 /* LayoutAnimationCallbackWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 20D52A5CA3FEAAB624DD5FABD5F70EF4 /* LayoutAnimationCallbackWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9376001A5415EA17C8FE5D79C03B3E05 /* React-debug-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 55399075C21EA2F4687C29DEBD4F00E7 /* React-debug-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t93917AFA25B6646D3B4C8B89C923372C /* RCTEventAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = CF04A0BE220BED59F7AEB367A64FB457 /* RCTEventAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t93ECDFFA540B3E946DAF9907951CCEFB /* NSDataBigString.h in Headers */ = {isa = PBXBuildFile; fileRef = F278184653BF83F13E9A2484D2F4F8C1 /* NSDataBigString.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9411CDA895F502CF9BAFEC71B6EB2D75 /* RCTFollyConvert.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B3894240F9F245719EDB8B1ADBE0FC7 /* RCTFollyConvert.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9435ABFC3D2347D3C2FA4178AD8363B1 /* ImageResponseObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 8229FB82BEAE5318CC636C3963FFF6F8 /* ImageResponseObserver.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t94596CFFB0AF1EAE8EABCCF8ABA45AB8 /* ConcurrentLazy.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FFF51245D8A86EAC0CA600E287ED6AD /* ConcurrentLazy.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t948EF6B8544D6C95F6864DB1E234052A /* ScrollViewProps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F1758BCE0D6DB0A37CD1E35331999A52 /* ScrollViewProps.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t94B9DAD9D6E6079306AAA42C6D3B711B /* RCTSettingsManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 159A07D2F149809ABC30E5FCBB89938F /* RCTSettingsManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t94CD80C023E882B4DA9D02927CDA9327 /* RCTSwitchComponentView.h in Headers */ = {isa = PBXBuildFile; fileRef = E3C150EC730101E36E8725C466227757 /* RCTSwitchComponentView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t94E79DD64E0788BB7AD3BD1210CB6EB0 /* Memory.h in Headers */ = {isa = PBXBuildFile; fileRef = 39A5BABF355F1FCE0AB1D652C33D7B9C /* Memory.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t950BAD90B56D30A54EBF43AF215D0C8D /* zh-Hant.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 8B0995DAA2C152F8B2BBE8B2BD71EB56 /* zh-Hant.lproj */; };\n\t\t9517335C8F1CE70427B5E0AF6F87FD29 /* react_native_assert.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D634D9C7371357029E41D29AD89E979 /* react_native_assert.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t951D58A9E7D698B929AF899C28E57034 /* RCTModalHostViewComponentView.h in Headers */ = {isa = PBXBuildFile; fileRef = 53C4B697D1793E966C34C78BD44F6D02 /* RCTModalHostViewComponentView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t95218D9E435AD62306483383FCAD7BC6 /* graphicsConversions.h in Headers */ = {isa = PBXBuildFile; fileRef = 8516ED23F91BAC902B146A3BDA21B3AB /* graphicsConversions.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t956D860AD7C9DC24AA722E80D15E4D6B /* ReactNativeConfig.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7D709C81D0C07E31A08F46AA3AAB09FD /* ReactNativeConfig.cpp */; };\n\t\t9593D619EFB09CA84DE565FF4D96EB48 /* LifoSem.h in Headers */ = {isa = PBXBuildFile; fileRef = C57BEDEC1840FD8209B8FAD43401C99D /* LifoSem.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9597882525C617A0252792A1542DEB7E /* RCTImageManagerProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BC7B5A86B19E285F310EB16BDE027DE /* RCTImageManagerProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t96234A6DD5EC92E93D8ECEDD53210730 /* RCTImageViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6678C1864A2A92768BBDC1C215172196 /* RCTImageViewManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t963D64DBA5EFD7B49E439C0B7207E7AF /* RCTProfileTrampoline-arm64.S in Sources */ = {isa = PBXBuildFile; fileRef = 4340CE46967CD10BEFC7859B55898A6D /* RCTProfileTrampoline-arm64.S */; };\n\t\t9697A6B4D46C8A478177B8A7BBC5087A /* State.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A923BB7F15C4A2B32DDE64B8D827632 /* State.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t96CC92BF70F2531207DA2C1317DE05BD /* BridgelessJSCallInvoker.h in Headers */ = {isa = PBXBuildFile; fileRef = E9B0012D9AC4C6EE1721D712922AF216 /* BridgelessJSCallInvoker.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t970B747DD08085BB38AA2CBE4015C91B /* Props.h in Headers */ = {isa = PBXBuildFile; fileRef = 327A412C03B8D29F20508FBD60D4EAD2 /* Props.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t97215F497B2ED4601FCA816AC3DA2375 /* RCTBaseTextInputView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A7155EA3AC352921BE68F7BD76C6F36 /* RCTBaseTextInputView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9766FC44D73330BFAAB4E4350CCCC6A5 /* RCTMultilineTextInputViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 55B1D50AB670D1ED574D945561008297 /* RCTMultilineTextInputViewManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t97787CD6E0C072679EE338808F2F63AF /* DoubleConversion-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F852C98DD1BF5640292AF6AAF675EA58 /* DoubleConversion-dummy.m */; };\n\t\t97B2A42B5817C59F462248A075991C5E /* RCTAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = 5627C2F1A2A3B2FFA118B0BD3069A5B9 /* RCTAssert.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t97DECF6E711E8B315123A6811DF80EC4 /* RCTPerformanceLoggerLabels.m in Sources */ = {isa = PBXBuildFile; fileRef = DFA83A2FCE36D7B3F4FF4946AC4AA3C5 /* RCTPerformanceLoggerLabels.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t97F384488C52BE0D4A9D53D345D00BC8 /* RCTResizeMode.mm in Sources */ = {isa = PBXBuildFile; fileRef = D73FC5BE76F5CED5EE11722EB194C596 /* RCTResizeMode.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\t980093FFA08606F31FCD65609A47C09E /* StyleValuePool.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F35EF9396775F51CA6146B0C7D16351 /* StyleValuePool.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t981417644439C651547814EC3FEA4928 /* RCTCxxInspectorPackagerConnectionDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = B69DAF065EE01F48CB5FBAC10F00EDE0 /* RCTCxxInspectorPackagerConnectionDelegate.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t98645489B7C5F09DCAA5CDE2C2D33D32 /* JSIInstaller.mm in Sources */ = {isa = PBXBuildFile; fileRef = 126C5DD1D6213610884F84302374D19F /* JSIInstaller.mm */; settings = {COMPILER_FLAGS = \"-Os\"; }; };\n\t\t988804049A0E839CEE4F97680EA6F030 /* BitIteratorDetail.h in Headers */ = {isa = PBXBuildFile; fileRef = 20FF0CE1BB1AB7D514D968DD961923FA /* BitIteratorDetail.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t98EA24E215B825D7E404CD8B1B3A6C3C /* RawTextProps.h in Headers */ = {isa = PBXBuildFile; fileRef = E4FDDD56EA9FAE7E380A57693269B4F0 /* RawTextProps.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t98FAF118BA6AC3B0B0BF4D1DA3521E51 /* RCTTurboModuleManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 41CA6E5A23C938EF530325403BEB5ABB /* RCTTurboModuleManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t98FF24FCA7950C2F975BB4096B9B26E7 /* UnimplementedViewComponentDescriptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DA13FC9D0FEA58079E338182B1BAE1B2 /* UnimplementedViewComponentDescriptor.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\t9939A9054B27EC267D364A8B16FB9959 /* AtomicHashArray-inl.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C581B89704C6C579DD637F11045901A /* AtomicHashArray-inl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t993B010DAB0C47A19FF3C8CB5F18F3BB /* RCTDiffClampAnimatedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 48B93F350B7CEAA9026208326081EA41 /* RCTDiffClampAnimatedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t996659F42631C1F1EF1EB37666EBEC84 /* RCTAppearance.h in Headers */ = {isa = PBXBuildFile; fileRef = 13A658922FD40E29EEAB7D23E4D3A2BD /* RCTAppearance.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9979B172D36F3FD1E5835B9D990C0603 /* JSBundleType.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DF430B965D7F43DCCD92803B07AD0F7 /* JSBundleType.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t998341B6CC0A0AD55671B6F0F1535978 /* RCTImageURLLoaderWithAttribution.h in Headers */ = {isa = PBXBuildFile; fileRef = 4133EE63EDE34BEA9FC63C4BB4801169 /* RCTImageURLLoaderWithAttribution.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t998B42D1DD666A96EF1B6DE78167C70B /* utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 37D820D975698FCA99C86CE71EF22A97 /* utils.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t99CC5B420D64ACDD783109436516FD04 /* RCTSinglelineTextInputView.h in Headers */ = {isa = PBXBuildFile; fileRef = 609281012AE698DC460A40129D138A06 /* RCTSinglelineTextInputView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9A24531C4E6DA4D2A91036A2F8C0BF4A /* Time.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BB0E5875A31D5E8CDCEA86F5A67276E /* Time.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9A35D386A3459053D8A2240EF17E13F4 /* RCTModulesConformingToProtocolsProvider.mm in Sources */ = {isa = PBXBuildFile; fileRef = B286D2E443FD0AC7BDE2FA335AE099A9 /* RCTModulesConformingToProtocolsProvider.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -Wno-nullability-completeness -std=c++20\"; }; };\n\t\t9A3A4D10C9D413158BC724A194B154E9 /* da.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 825AFF4407B94619036B3195D86313D2 /* da.lproj */; };\n\t\t9A4EE65B2E9B67E48FEA687692C36F66 /* RCTSurfacePointerHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = E0402A818FA8A0C89E390D0D4EC00165 /* RCTSurfacePointerHandler.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9A9022C47549BD26B9F45A7BFFB8A6BF /* RawPropsKeyMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DF730E6145C9D42DEB5C32702BE8C74 /* RawPropsKeyMap.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9AD21A8C1FB12C6F69D2E07588A0B966 /* ScrollViewProps.h in Headers */ = {isa = PBXBuildFile; fileRef = D5D85F064A48142714688A62D0169A8F /* ScrollViewProps.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9AE0B339D38F4BDCFD54AF8B4B74B9AD /* RCTDebuggingOverlayComponentView.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FA175D69859A3FE955C27E8F8107960 /* RCTDebuggingOverlayComponentView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9B29E7A144668C69B88E17DF3445B0C8 /* RCTErrorInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 735E5FCEACBC787C7FF33D2B0A5F3CAD /* RCTErrorInfo.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9B4920B859EB68134633DC1B38607162 /* RCTSurfaceRootShadowView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4343AD60D13A26A3F11E942DA9C12580 /* RCTSurfaceRootShadowView.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t9B71EE8ECFF2BAFFC391738C754A5A7B /* RCTPullToRefreshViewComponentView.mm in Sources */ = {isa = PBXBuildFile; fileRef = E82D575C7FB3C2A029BADE7276472510 /* RCTPullToRefreshViewComponentView.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\t9B7A6544F9E9805452DAC23861BEC337 /* RCTUIManagerObserverCoordinator.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1B9B081A11AD725344E711226D80CA4B /* RCTUIManagerObserverCoordinator.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t9B87B7263006E8E400822B725E60FFBE /* WatermelonDB.h in Headers */ = {isa = PBXBuildFile; fileRef = DB9466A46A68BC525A64AAAB5F5C1F6C /* WatermelonDB.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9BCC683CA550E64EE67D93F93BFFBD60 /* React-NativeModulesApple-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A59848A45BE0F5FCEF4561B500527CB /* React-NativeModulesApple-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9BCE5725306ABEC6584FCB1239B9CA22 /* RCTCxxBridgeDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = F07D525DF93C69AEC8946C90CEB695C1 /* RCTCxxBridgeDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9BE6267DB05B71DBB27C01E25769CBDA /* RCTTextShadowView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0A05EEA6DE2EF6E728D7085041633AFA /* RCTTextShadowView.mm */; };\n\t\t9C187D694BC2F39668C0730FF0BECF50 /* Optional.h in Headers */ = {isa = PBXBuildFile; fileRef = C02156579770C940D02208439EF989EE /* Optional.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9C1A1AD1616249A784D388BDF0097A98 /* Iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = E29A2CBF054A73452FE72177DE2FDF83 /* Iterator.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9C213142A14C7405ADC9288D76B1290C /* sk.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 72F4E61BD474BE602AFFC71C43FD918B /* sk.lproj */; };\n\t\t9C2375A58F12149DA1970C56AC0D8633 /* RCTEventDispatcherProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 5216E04A7C94A5B08BF8F3BD20CDAAD7 /* RCTEventDispatcherProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9C380E9FAFBB1F19957EED6469446B92 /* InspectorFlags.h in Headers */ = {isa = PBXBuildFile; fileRef = 704C76032CCE295710F90FEE18E4B95F /* InspectorFlags.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9CA0EAF6DDBF255B903EB6F6FC52E0D4 /* FmtCompile.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D107AF1088C433FC9328FB083C1609A /* FmtCompile.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9D28E53E71CE7B1B576FC946E8E18383 /* th.lproj in Resources */ = {isa = PBXBuildFile; fileRef = D23D4785660627F3CD0959228AD79333 /* th.lproj */; };\n\t\t9D2C4B6C64188ADED9A1A5F54328072A /* RCTMountingTransactionObserverCoordinator.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FA6B9156408ED84AEE6F56B8BB6FC8D /* RCTMountingTransactionObserverCoordinator.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9D2D3C5051C69BC67410C4758F73B91B /* ShadowNodes.h in Headers */ = {isa = PBXBuildFile; fileRef = 21EF07FFD2345957804DF019878563CF /* ShadowNodes.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9D4EC18EDF8D39C00319EDCBF1F79BFE /* Random-inl.h in Headers */ = {isa = PBXBuildFile; fileRef = 3762263B39103B7107F61608F0B0E2D8 /* Random-inl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9D5BB979650E52C9D6EDC21113C22E8C /* RCTInputAccessoryShadowView.mm in Sources */ = {isa = PBXBuildFile; fileRef = A846AD31825FC26747481C82D51B3091 /* RCTInputAccessoryShadowView.mm */; };\n\t\t9D724EF3BBE139FA8C05D4528A894F0E /* RCTView.m in Sources */ = {isa = PBXBuildFile; fileRef = A29983597DBADCA7A69A6EAE6BBED3C3 /* RCTView.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t9D92D08729B4FAAF303182FEBC7434D2 /* Builtins.h in Headers */ = {isa = PBXBuildFile; fileRef = 54C3134B4FA97F946996018EB76D6F2B /* Builtins.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9DA7609D0CA7E74EC3DD6F2ECE3B75D6 /* RCTVirtualTextView.mm in Sources */ = {isa = PBXBuildFile; fileRef = C5868FE71D3976986B3E0F19F4316F71 /* RCTVirtualTextView.mm */; };\n\t\t9DEB120143CCAE9182A2D84A8E9E6FBC /* NSURLRequest+SRWebSocketPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = F65B8FCE4C82DE06C4DC544668252210 /* NSURLRequest+SRWebSocketPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9DF893D515B79F5D02C027EF78786C88 /* RCTImageBlurUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 019948FE306C2A476268E8F263EA2122 /* RCTImageBlurUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9E5B5F823216896E6318DB55C9616AC9 /* RCTParagraphComponentAccessibilityProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 68EE2EFB5FD67165CD0BE5CB10F52DDD /* RCTParagraphComponentAccessibilityProvider.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9E62546DD0C89254100F01FB1C6313E9 /* ScrollViewEventEmitter.h in Headers */ = {isa = PBXBuildFile; fileRef = C0BA0D275A8C8269E34CE4A1AD5CCF35 /* ScrollViewEventEmitter.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9E6C43BA1F53691CB152B48B736A70B2 /* MeasureMode.h in Headers */ = {isa = PBXBuildFile; fileRef = A5FD51AD36118D278A13D28B6A1C0F24 /* MeasureMode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9E7BF4EF40C60244E247C1623968BDDF /* RCTModuloAnimatedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 88F146A98AD14FE819BCA98EB3275AD3 /* RCTModuloAnimatedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9EA31CC73780B94F35D97F87C4FB001C /* NSDataBigString.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6D624E232F1781DF596D0A786D21944C /* NSDataBigString.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\t9EAD4F18278E7EB2645F6DEA5C454695 /* RCTRootViewFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = FCAE6D5FA62309B748866975B6AA85DC /* RCTRootViewFactory.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9F22899D6776281D1CD11358A63C7D31 /* CalculateLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B1C2DDC7533E6E8B4EB9893DC9F6FDB1 /* CalculateLayout.cpp */; settings = {COMPILER_FLAGS = \"-fno-omit-frame-pointer -fexceptions -Wall -Werror -std=c++20 -fPIC -fno-objc-arc\"; }; };\n\t\t9F3A392095C5D5039ACB1A0B07BF9CA6 /* SRProxyConnect.h in Headers */ = {isa = PBXBuildFile; fileRef = C09D1BCC94FFE3C6143459C161E5ACEF /* SRProxyConnect.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\t9F77598A23E6FC5C8F7267848FA42DD7 /* React-RCTLinking-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0105FEC655FAF723FA2D179AFF610513 /* React-RCTLinking-dummy.m */; };\n\t\t9FDC7DCF86B38C6B6DC5A4653928D9DE /* CString.h in Headers */ = {isa = PBXBuildFile; fileRef = DF05023F7AE354185DE71C9D43F11B9D /* CString.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA01DF6EC80AEF728DCC406662A246C8C /* F14Table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7B5B3F15E7911D3E6C9DE70A968B0F80 /* F14Table.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\"; }; };\n\t\tA0414AFF72685EFA608465FD6F3C0855 /* RCTBlobCollector.mm in Sources */ = {isa = PBXBuildFile; fileRef = CC14D6144DA3CBC86D616E08D6D726E8 /* RCTBlobCollector.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\tA04D9EB219FF8B977B41D229BE877CE8 /* LayoutAnimationDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 860A6C48F7BFB2F514BB891173FD0D7E /* LayoutAnimationDriver.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA0BA02788E52121E2D2839A9778AF779 /* RCTModalManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 8203B91D615D3D818C75D20CC7EECACE /* RCTModalManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA0C26C8A77986A3E4CF105BC5A8DB603 /* ThrottledLifoSem.h in Headers */ = {isa = PBXBuildFile; fileRef = 1841AD95444E2505711CA1DEE133B7F8 /* ThrottledLifoSem.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA0CFCD0F7E1ACC5734A328D7956729AA /* RCTBridgeProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = DAA6445F1F3582CD4A38F23C8E688A65 /* RCTBridgeProxy.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA0FE61561DE7D4E63D766ED6280A7766 /* F14Mask.h in Headers */ = {isa = PBXBuildFile; fileRef = 5671AD120864F71635B5C5BD07138E67 /* F14Mask.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA1394038D409340FD789C018BBC1889B /* Pretty.h in Headers */ = {isa = PBXBuildFile; fileRef = CCCCA85307C7F5CAA6F8F137DC8860BE /* Pretty.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA19075D535E90DCF7736BF70C4512C46 /* RCTRedBoxExtraDataViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A24606F72343E19E228B3000540EC8FD /* RCTRedBoxExtraDataViewController.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tA1972E1E435534713DA2AFD946DD0856 /* RCTSurfaceStage.h in Headers */ = {isa = PBXBuildFile; fileRef = 7215C1FD70511C10EB945E8681577C16 /* RCTSurfaceStage.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA1F8338949D8668927E275528CCCC3B4 /* RCTEventDispatcher.mm in Sources */ = {isa = PBXBuildFile; fileRef = FBC65E4ADA0C93CAF6F0857E1767393E /* RCTEventDispatcher.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\tA21AB41F6F340F2D09106811A1702842 /* RCTBackedTextInputViewProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = FDD85087D17F29E409E05B785CAEF845 /* RCTBackedTextInputViewProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA2373B0F99A1174A8D32C95900769A04 /* Varint.h in Headers */ = {isa = PBXBuildFile; fileRef = 493BF367283D552EA0719F4472FB1C1E /* Varint.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA23B1493A362B7B10AC587B3F3D79B5F /* ConcreteShadowNode.h in Headers */ = {isa = PBXBuildFile; fileRef = A7C7A0603C70B03A5BAB896F01F15E47 /* ConcreteShadowNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA254132978ABCE50DAD9D233D0F89E0B /* AtomicNotification-inl.h in Headers */ = {isa = PBXBuildFile; fileRef = 96489235CABA0BF8A10434FC133718C8 /* AtomicNotification-inl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA26AD378981A03977F8B5859FC2E3520 /* RCTBaseTextInputView.mm in Sources */ = {isa = PBXBuildFile; fileRef = EB9567C0DEFF8F845D6478F3CFDBD1AF /* RCTBaseTextInputView.mm */; };\n\t\tA27584A1C4F237F91F194CC4258F5294 /* SpookyHashV1.h in Headers */ = {isa = PBXBuildFile; fileRef = 182071DF4FF23AD36C90547CC9C960E3 /* SpookyHashV1.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA276C17FE51EEC55219F3A15FC9278A1 /* React-jsinspector-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F2BC9F716D9565E236295A6DE40D75C /* React-jsinspector-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA28FA7E22D3A80A9EA98A5EA1DE6FF7C /* RCTSurfaceStage.m in Sources */ = {isa = PBXBuildFile; fileRef = BFE0C7F1527F398A2A69185EBFCF677F /* RCTSurfaceStage.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tA29A68DEAEAEA7CE6917E095DC77395F /* stl_logging.h in Headers */ = {isa = PBXBuildFile; fileRef = B222607BD79B79EA46BBA68F606016E7 /* stl_logging.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA2D2289CC073BE7056299A54E1245ED8 /* BenchmarkUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 79935ABC77CDB209D63CDB2A5C8B0F40 /* BenchmarkUtil.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA2DABF69571289A07D4949D5B6B732B1 /* YGNodeLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5B62D2EDAEE105EA46E50A51A6DCC4FB /* YGNodeLayout.cpp */; settings = {COMPILER_FLAGS = \"-fno-omit-frame-pointer -fexceptions -Wall -Werror -std=c++20 -fPIC -fno-objc-arc\"; }; };\n\t\tA2E1B929FDB6C978EE68D7A8DAE051EC /* React-rendererdebug-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 137A31E381AB4AA534731ED6AF105636 /* React-rendererdebug-dummy.m */; };\n\t\tA2E51C7BD2FFC062C48C10167934CCAC /* RCTSettingsPlugins.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C8F91F7CAFA9A5744781FD95C2E01DA /* RCTSettingsPlugins.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA2EFB06C6482D772F8442F4C783752E5 /* react_native_log.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0BD7AC8D29513BC50E69DFF8F4FD5522 /* react_native_log.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tA2F8AC56D5A31FAA851EA309CAB094CF /* ReactMarker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE03DA74B3DF71926399B020ADB5C3CC /* ReactMarker.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tA32D15308F27ECE2391DA0E67E184553 /* RCTSettingsPlugins.mm in Sources */ = {isa = PBXBuildFile; fileRef = E0839F609F20832C1729CED5ADCA18C9 /* RCTSettingsPlugins.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\tA38A237FA362893EFF6CA7A3CE4E9F4E /* RCTModuleData.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13A1EDC09A69ED3292AAE26A206851F9 /* RCTModuleData.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tA3C138B2295C7FA333A37D6504296970 /* RCTEventAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 404C04FF5A5FFA2678597943F9B2C076 /* RCTEventAnimation.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\tA3CD7C4D744038936727F5BBE64375AC /* ModalHostViewShadowNode.h in Headers */ = {isa = PBXBuildFile; fileRef = A5FAB647D0F4DBFEAA683CD3AFF2F587 /* ModalHostViewShadowNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA3CE4C1EAD893E3451AB41D1E13069C2 /* RCTCursor.h in Headers */ = {isa = PBXBuildFile; fileRef = 492C01ACF6D4D924E6561FCD33DB914D /* RCTCursor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA3EE983F94C4B475C21E8F62825FB9A0 /* BindingsInstaller.h in Headers */ = {isa = PBXBuildFile; fileRef = F310EF16EE5EAA4714DFD2F1713D1B73 /* BindingsInstaller.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA42C6A17F4D0042FBC3D655E31C73C15 /* SRSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 38D95650F41F3CE76BC04B5619B09B95 /* SRSecurityPolicy.m */; };\n\t\tA45DC96FB186B370BEE808C18E1862F0 /* TextInputShadowNode.h in Headers */ = {isa = PBXBuildFile; fileRef = E5E136EE3CB9AD65C230069245AFE89E /* TextInputShadowNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA4A4022B861D7CB000B2E7AD4ADAF9CA /* FileUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EEC8AE4B19CE176574DF457505E2B9CF /* FileUtil.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\"; }; };\n\t\tA4B4874755DEF120B2A86C12140EE4D5 /* ShadowTreeRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 43F384C21F24B355DE771A761C765E4B /* ShadowTreeRegistry.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tA51151FF17D9D07646B188DFD75A0AE1 /* RCTAdditionAnimatedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A801C14BFA125ACB2E474AAFB4B2D03 /* RCTAdditionAnimatedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA526E4E88DA34AF0F88D9F32C1A60C19 /* RCTImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DB28E8C209A78E622C0305EEB0B8A19 /* RCTImageView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA5376CA99127C041CA004A648022C1C5 /* ReactEventPriority.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F8C4243A150FEDAB173B67E50BC9174 /* ReactEventPriority.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA55A7FDB0ED4E2B992421280DE3DF1D2 /* FarmHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 531B578A8FF205619BD8E526C7C60930 /* FarmHash.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA55C66E5656D2B2D10BA7A72BF99EC50 /* NativeToJsBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 865BCA647C0A650C5EADD1CCF31CFA14 /* NativeToJsBridge.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA56D6EAD62CADD0537EB486ADFDCFA82 /* RCTDeprecation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E105C5D9C4A539112084489DC235CAB /* RCTDeprecation.m */; settings = {COMPILER_FLAGS = \"-Wnullable-to-nonnull-conversion -Wnullability-completeness -DOS_OBJECT_USE_OBJC=0\"; }; };\n\t\tA58560BE133410AEDF2DB9DB58DC3CEC /* RCTBundleAssetImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 6968091853F8202BC5D47745810C4DC4 /* RCTBundleAssetImageLoader.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA59FCD183BF94129D76323D85738AA5F /* RectangleEdges.h in Headers */ = {isa = PBXBuildFile; fileRef = 60DAB499CFAAD9EB49E01C7C8B9A5F15 /* RectangleEdges.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA5A30B2AF3B84C88541ABF6329E44CF7 /* PropsMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = AD945009ED5CD2E57F93715472E7BAAC /* PropsMacros.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA5E697E3D36B4DEB0134CD065243FDDF /* RCTAnimationPlugins.mm in Sources */ = {isa = PBXBuildFile; fileRef = 222FC254D773A0163299A97B210F3B1A /* RCTAnimationPlugins.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\tA61B1E1D334158CF2ED3116CC21C3F33 /* fi.lproj in Resources */ = {isa = PBXBuildFile; fileRef = A71AF6D224DB5B45B4A632DC900459A4 /* fi.lproj */; };\n\t\tA62607B1613E845DC2045E01320BCFBE /* BaseViewEventEmitter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A04DC956EC28B16DDE9F446048074A0D /* BaseViewEventEmitter.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tA64C2E2436921D1072D8A53C3DF89C6F /* Invoke.h in Headers */ = {isa = PBXBuildFile; fileRef = 7433BC11862172106E2F5C35B6657339 /* Invoke.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA64F035654CB2B7DCBC8F8724356C82E /* ImageEventEmitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 90D9EFC947AA0C68DCA4C6DD6EB901DE /* ImageEventEmitter.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA64FF4152676B429D3E3359E14BFD5B2 /* WMDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = FEBC85A59D1771FEE07769D206EDEC9B /* WMDatabase.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA67253AF093EFDC09F0995BC70346F69 /* LayoutConstraints.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 349041093547AE8E438BDD4E8A829CB7 /* LayoutConstraints.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tA691FFBD5381A9F24D87CE66F8F5F81A /* Gutter.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EAE4B2A9C96F883E85714C869494F81 /* Gutter.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA6A14B5D2532DF9B9CC2BA83095FC9A9 /* RCTCxxMethod.h in Headers */ = {isa = PBXBuildFile; fileRef = 080F0694AFBEBB45493A735532A9B8F8 /* RCTCxxMethod.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA6A384ACF91A0F0532A09484483AE49C /* SanitizeLeak.h in Headers */ = {isa = PBXBuildFile; fileRef = C128E32800DBBBE7BD73B0DB2EA50A53 /* SanitizeLeak.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA6B176A4E944BC9B06A1C03CD10681A0 /* glog-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D886821B444D6CB88E03807915CB1608 /* glog-dummy.m */; };\n\t\tA6F760D3AECEDF09C3CCA0D126B07C7E /* Overload.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F9A7D467E30F1383A11DE8EA731A421 /* Overload.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA72514BC4A3B50129690364CE05BB754 /* RCTObjcExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 96C45D3F8919F8B19727DA09E333BFE6 /* RCTObjcExecutor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA764E2968F6CD32CEE6C509E2845BDC7 /* RCTDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = E253CA8AF57F182CDA110861DF421A77 /* RCTDeviceInfo.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA77D12B428F49DBEC035E05EEAF4289C /* ModalHostViewComponentDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 337FF88F1B3B7E14D22211EF9A8C01DC /* ModalHostViewComponentDescriptor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA7C3F262E0817389B32853B800C6AB71 /* React-jsi-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 125AE03965ABF8E4C157E9FE3A55D187 /* React-jsi-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA7CD6D2F66EA3F1BF1E4E1A3D82CDA24 /* RCTTiming.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0C8E237AA818FABF9B7C6CDB03FA448A /* RCTTiming.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\tA7D30D7B1B80839FB303F4681082D409 /* RCTAppDelegate+Protected.h in Headers */ = {isa = PBXBuildFile; fileRef = BDC8FAF53DD63A22F83D735BBEC79C48 /* RCTAppDelegate+Protected.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA7F1FBD3434006B07373E5777C0EC0EB /* RCTModalHostViewComponentView.mm in Sources */ = {isa = PBXBuildFile; fileRef = E08FAB111E604490074792C7CFAC9084 /* RCTModalHostViewComponentView.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tA82CCE9C3F6E085AF4F6CC7A71DFC0A6 /* RCTModuloAnimatedNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 375DFEFC5E87FCB287285426D6DAA812 /* RCTModuloAnimatedNode.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\tA82FB98C2DC7B85649063C88C00725A8 /* RCTVirtualTextViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C37722D87F8B49DE9B83ACFE1C0A286A /* RCTVirtualTextViewManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA841E4574588119BFAC4C1ABBE42E3EC /* FMResultSet.m in Sources */ = {isa = PBXBuildFile; fileRef = B17C5DF58EBCAD0079663296EFB0D99F /* FMResultSet.m */; settings = {COMPILER_FLAGS = \"-Os\"; }; };\n\t\tA84C6C6ECCA510D53447DE2A92670783 /* RCTScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 314C4322103426F9256B2FBA495DB607 /* RCTScrollView.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tA867C1C27059E5551EBA984D27CDF4FF /* RCTSurfaceHostingView.mm in Sources */ = {isa = PBXBuildFile; fileRef = DFB701655BF99400D13CDA6EFDCC1AC7 /* RCTSurfaceHostingView.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tA8B268A6AD50300155466F4EBFE5220B /* SysUio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AC266D9F2BEB6CAC0650EC2695A1C7 /* SysUio.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\"; }; };\n\t\tA938E595D257EC2A792136FF03B1B030 /* event.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C6D5DD14D9959F1BCDA9EEF40E8671E /* event.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA93939302F504E8A673D78DE89013DAA /* NSTextStorage+FontScaling.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE4C50E4C03A98702AAB8CE87A3D81 /* NSTextStorage+FontScaling.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA93FB3B91CE02A0B704D2A989C363E9C /* es-ES.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 95FE5AE8E711BF2C04047FE31AFA930A /* es-ES.lproj */; };\n\t\tA95970C4A74B1F4378A0406E2484D32C /* Hash.h in Headers */ = {isa = PBXBuildFile; fileRef = EFDD8B247497E208D149C9C12E8045C7 /* Hash.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA95DE42763202885855D7D06BC84D1C7 /* base64.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AB42AC0EB19257BDB4CB23DD77110E6 /* base64.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA987774A31FA59F2A5D311C15EEF222D /* fmt-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 267039C69B6ECCDE54B5EF1AD931D1C0 /* fmt-dummy.m */; };\n\t\tA99DAE5BCBF57C5FF1C418A9CE856DAA /* RCTActivityIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 18DA86D744EE0EE17E265BBB90390A23 /* RCTActivityIndicatorView.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tA9A0682AC82CE2B25A2E0EEC1330EE68 /* Database.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 79BAE705D4C5DDF1F3222FC86D3DC110 /* Database.cpp */; settings = {COMPILER_FLAGS = \"-Os\"; }; };\n\t\tA9DBFF6662EFD601FDEC3789C5796033 /* ValueFactoryEventPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = F1AB976E1A25C3A525A7919E63A9BA92 /* ValueFactoryEventPayload.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tA9E1748FA1E9E944CF1BCE7376E7B033 /* UIView+ComponentViewProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 6368583633FFD741EE844FFC0D7DEA92 /* UIView+ComponentViewProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tAA62F32250BD7CC4CEFB9F7804B905E7 /* RCTModuleRegistry.m in Sources */ = {isa = PBXBuildFile; fileRef = F969DDD826E4A83C1AAE180C9E9DB314 /* RCTModuleRegistry.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tAA6CA9CE331D388BD5FE8AA5DA240A90 /* EventDispatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 520B63F372380D55B40793B5BB10A39F /* EventDispatcher.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tAA91C034F80AC8439B59BE80A30E96CB /* RCTGIFImageDecoder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 092DBE2F0CE18725FF1B0C8D08B1147C /* RCTGIFImageDecoder.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\tAA9C529959EA98EB49C28EE11BD7137B /* RuntimeSchedulerBinding.h in Headers */ = {isa = PBXBuildFile; fileRef = 949C0E997EA3B7239902690DA5D564D5 /* RuntimeSchedulerBinding.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tAB2A762779BA1CEB0922D08C0677AD46 /* RCTDiffClampAnimatedNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0314883711F418F964E23FC8DC255846 /* RCTDiffClampAnimatedNode.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\tAB4EFCE36686D94BCDFA88932177E82D /* FileUtilDetail.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD4757A98E1495E6C3DBC232D9872AE2 /* FileUtilDetail.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\"; }; };\n\t\tAB5EF33E0FF9C59C98CC579067194B5F /* RCTSyncImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 52E49CCBB965394C8B3C6525BA37644D /* RCTSyncImageManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tAB68948AE78A34C68EFB0AB1BC2C387B /* AccessibilityProps.h in Headers */ = {isa = PBXBuildFile; fileRef = EC88B7FD82BE95C8547982311739D454 /* AccessibilityProps.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tAB87442CD013BE84D9211A77BE390F9D /* RCTSurfaceTouchHandler.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1D68855FFC5514B5F5A3FD7EF50735D4 /* RCTSurfaceTouchHandler.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tAB88C2DEBE20FD6CE62478DBA925FE6E /* RCTBaseTextInputView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A7155EA3AC352921BE68F7BD76C6F36 /* RCTBaseTextInputView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tAB95787F449828E3C56FC5A5B502F056 /* UnstableLegacyViewManagerInteropComponentDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 3312F4682C3B648C87FBD7755CC0CE73 /* UnstableLegacyViewManagerInteropComponentDescriptor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tABA6E5E90611005CDA352D8179B5C97F /* RCTBlobCollector.h in Headers */ = {isa = PBXBuildFile; fileRef = FBC79A9C5A60A939EF7BBEFBE8449906 /* RCTBlobCollector.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tABBD121FC3379E6C4E0DB69D6C223F28 /* RCTFrameAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 33FBAF4A2C505DEA7624E5FE6146C7CB /* RCTFrameAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tABC708190BDCBD59B0B4A86CE919BA1D /* UnstableLegacyViewManagerAutomaticComponentDescriptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C638A35CBFBC692CA7A2C5870600E066 /* UnstableLegacyViewManagerAutomaticComponentDescriptor.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tABD6B1BFDA57AF34F462F5D6BFA170C5 /* String.h in Headers */ = {isa = PBXBuildFile; fileRef = B6577792B784C0F015CBBC9C2A12DDEC /* String.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tABDAE92094104A99B62D530A783B8446 /* RCTSurfaceProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = F1A6297972EED0526BCBF5B221AE18AC /* RCTSurfaceProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tAC022ED4B280CBF9CC05FD81E941DF74 /* RCTTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CC04D4366699171D90B6E14F8947CBD /* RCTTextView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tAC0456506411E770DAE78BB6A370A69D /* RCTJavaScriptLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F488B5803551A7C6E8D0B3F34C4823D0 /* RCTJavaScriptLoader.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tAC74571D81AF9246D9A46B8B069B9BB5 /* RCTRuntimeExecutor.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8E11E2044A1B7194DE5069CCBE8DD5AF /* RCTRuntimeExecutor.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tACDD1A69BD4842832E7BA0BB94F2DD32 /* InspectorPackagerConnectionImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = B02F47D538066B1D13C474E20A59039A /* InspectorPackagerConnectionImpl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tACE0A69608D1407DA250057C17E7281A /* RCTAnimatedNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = C7CB9D39DA448A9F742A4B023B065E17 /* RCTAnimatedNode.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\tAD0E3792C51B0E55F49C3558785D6863 /* RCTDebuggingOverlayManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FA7D9A20F443352B3F132A2348CEAF5 /* RCTDebuggingOverlayManager.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tAD4645BBE5F1978FE1062D8DF27003AF /* RCTBackedTextInputDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 415370226876D731C7B97EFB54012940 /* RCTBackedTextInputDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tAD579D452B17FA300A0513A780D080DC /* RawTextComponentDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = C3828F219A5F2BBBA5BAAA63512AB034 /* RawTextComponentDescriptor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tAD7532D08452F1A565E555D61945FB51 /* SRConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B87A884215B67C149F379E4B4E20F8A /* SRConstants.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tAD7A74E9D7AA2FEB89FCB880F9D08C56 /* SurfaceTelemetry.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C260B39655A7EBBA430142A5FAC7288 /* SurfaceTelemetry.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tADABCA286A349FD925529339BD32B6D0 /* RCTLinkingManager.h in Headers */ = {isa = PBXBuildFile; fileRef = F40435B6D082BD6480C723A692DFB94D /* RCTLinkingManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tADB44688E69516386D389D1DFD996878 /* EventListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4DDB397BCB393ACDDF3EB861945B730 /* EventListener.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tADFE734C91C7A833AE41533BDB4B479C /* NativeToJsBridge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 723CB5670ECFFB16F7B8F339EE9DB637 /* NativeToJsBridge.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tAE0B4659152C1B6CE26DA56940540CCE /* en-GB.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 66808C29ABD639B3D916CDB9C1A33496 /* en-GB.lproj */; };\n\t\tAE0DB91FEF11CE1FD97DE6B1A300E697 /* RCTComponentViewProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DC0B393EEF985A3E4643B20F6754757 /* RCTComponentViewProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tAE4FCD234B012BE65C7CA496861FDEAE /* RCTVirtualTextViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C37722D87F8B49DE9B83ACFE1C0A286A /* RCTVirtualTextViewManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tAE53F4F8AE46955F8D5F913F84AE9ACE /* Bits.h in Headers */ = {isa = PBXBuildFile; fileRef = E743BFAD7A14315554014A32748265E1 /* Bits.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tAE5CCCBE05510A4562480531D6A64515 /* ShadowNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AE8331A8B19DE05088A3AF1C06D9599D /* ShadowNode.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tAEA87805AEDC2CFC5CA3BC87F67DE795 /* RCTKeyCommands.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EA652E4CB7DDC6698F42743A59CB48F /* RCTKeyCommands.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tAEB70F3808CB6E0D00B663DA7FC98512 /* ReactNativeVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DA258A2CCF7FAA7A20EA853EAEA18AE /* ReactNativeVersion.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tAEC4C05B01303751276918D1FA20961D /* StatePipe.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D889D31C2B9F054FBB9309C335FCD66 /* StatePipe.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tAEE9B28ADA2F2437AA2DF260FEA3B558 /* RCTCxxConvert.m in Sources */ = {isa = PBXBuildFile; fileRef = 182B0C702A35C8585E02CD20E58ABF79 /* RCTCxxConvert.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tAF2E44664A31AFFE67DE6C1AB58A1709 /* RCTEventAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = CF04A0BE220BED59F7AEB367A64FB457 /* RCTEventAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tAF31D319038A2C77960FC990CE634F65 /* CacheLocality.h in Headers */ = {isa = PBXBuildFile; fileRef = B0A1643BF71DE16FFA228713DA55E535 /* CacheLocality.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tAF3E68485FEF1859CC6B9FF8DA2B65B7 /* SysTime.h in Headers */ = {isa = PBXBuildFile; fileRef = D7F312C3D9605D22499AC7486B1AB866 /* SysTime.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tAF405027DF88096366B45A503349F101 /* RCTSafeAreaViewLocalData.h in Headers */ = {isa = PBXBuildFile; fileRef = E38561935D0A79B947D909F1708ADA95 /* RCTSafeAreaViewLocalData.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tAF530C0F30401EA5E02563DB0FD3431B /* States.h in Headers */ = {isa = PBXBuildFile; fileRef = 80C9F8ECC69EABDD6B34127E2C1EBAB4 /* States.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tAF63E872921CA837B9532CC5211FD6BC /* RCTReactTaggedView.h in Headers */ = {isa = PBXBuildFile; fileRef = 50E197DCEAC19B139D61338F626D0ECE /* RCTReactTaggedView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tAF8A57DD74A29F065EC08C1171432681 /* RCTGenericDelegateSplitter.mm in Sources */ = {isa = PBXBuildFile; fileRef = 48C37A67E9B9AEBECBFDBF2939F0F488 /* RCTGenericDelegateSplitter.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tAFA07FBAE0CAEE001E4CD63FE6F716FA /* SysStat.h in Headers */ = {isa = PBXBuildFile; fileRef = 8627871C188DC96A2A53FD17E0445367 /* SysStat.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tAFB5AD9523C803DB448766320C6E2C73 /* Exception.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BFC3D5FFBC3735586FEBA16EF9D8157 /* Exception.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB05F1E0A450430FCFB47781C9C7B7E7C /* YGConfig.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C5BE15D5F354DA98A5ADA415D1FDB03 /* YGConfig.cpp */; settings = {COMPILER_FLAGS = \"-fno-omit-frame-pointer -fexceptions -Wall -Werror -std=c++20 -fPIC -fno-objc-arc\"; }; };\n\t\tB08FDA2BE608A087E4B93A5394734E2C /* HermesRuntimeAgentDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B81B76C387972027C9B1637E2E6A612 /* HermesRuntimeAgentDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB09BA4F1254FE042646506FF2C79AE14 /* RCTSurfaceSizeMeasureMode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6D84B0A7F1A70E6E9ABEEEB14CB6C80C /* RCTSurfaceSizeMeasureMode.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tB0EB53E50359F579A7E205E8370A5906 /* CancellationToken-inl.h in Headers */ = {isa = PBXBuildFile; fileRef = 91B53126F00778E3792F8BDC9EF291DA /* CancellationToken-inl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB10E4CBE3CC25EEDBB00CDBDA2464C7D /* RCTTextInputNativeCommands.h in Headers */ = {isa = PBXBuildFile; fileRef = 71871CA5216D720E9BCA31F7ED7CC373 /* RCTTextInputNativeCommands.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB15D6D1F87DDE02BFCC6766FFCD7218F /* RCTTextLayoutManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D0FCEB123126F6E7439D8ABC6DB35A1 /* RCTTextLayoutManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB1822AAA5CD811D59978BE7D8B57A8B1 /* RCTUITextField.h in Headers */ = {isa = PBXBuildFile; fileRef = B8426E288C9F4E8EADBFDB047F2B7941 /* RCTUITextField.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB1B19038EAA3237411A3B68C9A696A59 /* RCTParserUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 002E6C786A97F7958FC7E860BB5B4D1D /* RCTParserUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB1E3D66107E149510D1AF628543FED56 /* SurfaceManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D77858FA2EBA20F1263AC750FC03FE38 /* SurfaceManager.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tB1ED7A7AD7852A7431686CD7CA9D7587 /* Instance.h in Headers */ = {isa = PBXBuildFile; fileRef = D9D0F263D9FACBEBBE1FBF1918CE0445 /* Instance.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB1FB31DE01AF8497EA404D2EA2B380EB /* RCTInputAccessoryContentView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DE9453C0D97B2C7CCEC65A7D9965FF8 /* RCTInputAccessoryContentView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB20853E1492882F9DFBA5AEE732230CC /* UnstableLegacyViewManagerAutomaticShadowNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B4341AA7547FF0A90E6BC28D6C448F /* UnstableLegacyViewManagerAutomaticShadowNode.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tB21738D0170767FAB849DD08A62EBA80 /* nb.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 558ED3C1B5F36FE5842EBF04C4FC985C /* nb.lproj */; };\n\t\tB244559D2113F144FDF39CD9D1E1A47C /* WeakFamilyRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = BACC1D6F0CF3D0892CC092113C7FD1BA /* WeakFamilyRegistry.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB247DC209221D5988107ED3546ED7B5D /* Sockets.h in Headers */ = {isa = PBXBuildFile; fileRef = E96C6053E99BB795AC55280C6C0B918F /* Sockets.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB27A11C4410553392C96AA713C78C35F /* RCTNativeAnimatedTurboModule.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9652157178DCF97B039AEF273CD86695 /* RCTNativeAnimatedTurboModule.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\tB2912AFCB904C759106782657EFDC5C9 /* LayoutResults.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48B75222BE84998C3999916E6084DAD4 /* LayoutResults.cpp */; settings = {COMPILER_FLAGS = \"-fno-omit-frame-pointer -fexceptions -Wall -Werror -std=c++20 -fPIC -fno-objc-arc\"; }; };\n\t\tB2DC64D7C3CD066F1671B9F4D25DAB6D /* Range.h in Headers */ = {isa = PBXBuildFile; fileRef = 036EB421B5324C4C8F2FEE1BF08B8194 /* Range.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB3032B5AE72FAEF31190CBBC5B0CE62D /* ExceptionWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 977FB42CD545522302B7AEA55376D2F7 /* ExceptionWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB329882D9D9CC156F9C8F664B466BA4A /* InspectorData.h in Headers */ = {isa = PBXBuildFile; fileRef = 4167445C410188AABBBB4C4E2721565F /* InspectorData.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB32A5364142E8C32D36579A8084F970C /* MountingCoordinator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 308183F96466CA2C23FC665AD164BFD4 /* MountingCoordinator.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tB337848370ED5CE208F7515930D400E1 /* MoveWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = E9C1D370414FE653DCC9FAE636F19160 /* MoveWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB33ADB9AA3945A5FBE3DA6B5CBD94CCF /* RCTSegmentedControlManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AEF17D14D0B0DF8A55346CEFDBEA3396 /* RCTSegmentedControlManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB37C611FC0371BA16C13DF36D8DCB479 /* Unistd.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D2546E47F2D90167BFD3A489746A6E9 /* Unistd.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB38B9B77CEE53F8B3F021D142B3B4E89 /* ApplyTuple.h in Headers */ = {isa = PBXBuildFile; fileRef = C91E89106F76162BEA0A7DF8511D586A /* ApplyTuple.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB3A3E3277EB3013588EAD596B1F050CC /* RCTScrollViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = AD0288743440505A088DDFA69CE73173 /* RCTScrollViewManager.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tB3ABAB986361D498B16189ACBD3E9EA5 /* RuntimeScheduler_Modern.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1D12F92E6DE4195516C44922291730FB /* RuntimeScheduler_Modern.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tB3B5414D5E629029A44A3318840D674B /* SparseByteSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 97C17BDCBCF48F7FE1E2CE59E0B17252 /* SparseByteSet.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB3D418B8ABCCAC66082A0DD9C03B9628 /* SRLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EA37501D46115DDABA4571FDD025BD2 /* SRLog.m */; };\n\t\tB3D5EF797853D7097172DEF9E94C0146 /* SurfaceRegistryBinding.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E3D2F20B2620B37412790BDD9F15C17 /* SurfaceRegistryBinding.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB3D6AA3293A885840D24CA060CC25456 /* RCTConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DF8D4CCED43409861DD2CA66CD7733F /* RCTConstants.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tB40152986DF0C62D2E28E405141D7CBE /* RCTTrackingAnimatedNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = DE4D8C3CE090B2BA0138B08B60165BFD /* RCTTrackingAnimatedNode.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\tB42F97FAE85B0CA99A1BB0B32E53A135 /* RCTNativeAnimatedModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 16AFB3F99F57DB5AEF193C3CB1BC1A49 /* RCTNativeAnimatedModule.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB440D0AFCA4156431037F2FB84B63972 /* VirtualExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 066367DE103F744E9A009FA7A06E7F87 /* VirtualExecutor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB466FFB8D8540FE239690E867F3DE68A /* SpookyHashV2.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FDD74A51002058B82FB55AE5D657564 /* SpookyHashV2.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB482C575F5108FE43A5093BD905ED34C /* ReactCommon-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E7531C53649FE630D622444E87454709 /* ReactCommon-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB484D7DD1C2D947F0F986688389D0E3C /* Utility.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DD6F27078A03BF0ED7DCF3591290691 /* Utility.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB511DC7B0492C9D9D0A58F080612F4D7 /* CoreFeatures.h in Headers */ = {isa = PBXBuildFile; fileRef = EDB17360845E700286BDE806E67E8AA0 /* CoreFeatures.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB55B0004A9EC9C4A80588C16C8570BE3 /* RCTFont.h in Headers */ = {isa = PBXBuildFile; fileRef = C4B995B84A38F911427A6A5E55661B60 /* RCTFont.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB56044159ED68D13ED80B3251BF4C71D /* Yoga-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EE65A27409B6614EB4E7E08374FDCA8 /* Yoga-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB566B0A2794716116031E71BC440EA2A /* RCTReconnectingWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = A7E2525A0E66EF3136FD4342856314BC /* RCTReconnectingWebSocket.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tB58A2402967EDAD0B86779DF77DEA32F /* BufferedRuntimeExecutor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4FE6AAB9CCD62E8CE2B1E03FA145C8B8 /* BufferedRuntimeExecutor.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tB594B10156EF39FBB4350BFA868A2CC3 /* RCTRootViewInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = D51CB71E6C720763C7DFC73A256D9796 /* RCTRootViewInternal.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB5B21BBAC4214172C7C33720A5960FCC /* UIManagerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EA35A760668D0586965F521A3B21B4B /* UIManagerDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB5F96EFACDBA7885CA0B125F4D0030E5 /* TelemetryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 194D194CCB89C075CEA29192C47A2A33 /* TelemetryController.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB62B1C3E71BEAC7656E3F16525E73238 /* ReactNativeFeatureFlagsAccessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39499A61681F432C3F011D0926E7DAA4 /* ReactNativeFeatureFlagsAccessor.cpp */; };\n\t\tB648D871BBC7EBA6B48D239A116FF6B6 /* conversions.h in Headers */ = {isa = PBXBuildFile; fileRef = 289BDFFAEE5965ED8E6B54755E485A66 /* conversions.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB69C081CE535E0CE9BFBC9566B1259E8 /* Array.h in Headers */ = {isa = PBXBuildFile; fileRef = 792014C5B5CC53C6A4E7C3EAFA69D6ED /* Array.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB6A677D259948AA6850E60654D2CA6CB /* UniqueInstance.h in Headers */ = {isa = PBXBuildFile; fileRef = F51332CA416FB0997A5A9763AC54075F /* UniqueInstance.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB6ACD468C9A12D4E2D4177AE940172B9 /* TurboModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D4E8D2C968BF398ABDE0E66D90AA405 /* TurboModule.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB6DD615DFD63F8AA04F5EA15845F24B5 /* BaseTouch.h in Headers */ = {isa = PBXBuildFile; fileRef = 86DFAB05E161B696DFC1057DB247CBE3 /* BaseTouch.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB6ED23A64D2504CDB6B64CF944092AED /* Yoga-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 73301DA76E70E83388C9A33BCF56CEE5 /* Yoga-dummy.m */; };\n\t\tB6F880D22BC0E73B97487B747513ABEA /* Config.h in Headers */ = {isa = PBXBuildFile; fileRef = 94463E432EBBF80182004B420404987D /* Config.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB778958B3420C110829CAB8F36FD7C2C /* RCTUIUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = B597F21D264FDF22B451D67257AA9EF7 /* RCTUIUtils.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tB792854DB1139F6C4839DDC23FFE87CD /* RCTGenericDelegateSplitter.h in Headers */ = {isa = PBXBuildFile; fileRef = EEB4D9ABDCA5AC8FCD10C726DD32E01C /* RCTGenericDelegateSplitter.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB79CBEB0DF0D5B2BB1CA370C45ED444B /* BaseTextProps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCB964356FC077875C6D5B2218AF31AE /* BaseTextProps.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tB7A0E11FB2F78019300E8AA5E82299B3 /* PackTraits.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BD6398C6C92DF26317E3DC8E027D927 /* PackTraits.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB7B95F233F6AFFC68E4B9CD4F18E0EAF /* RCTAppDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C2BC45457F7B7889204A04BE2584DDE /* RCTAppDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB7CE41DF964F198D03359FD16C29AD66 /* RuntimeTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = DBD26F4D9278DAF3DEA356BE83D84C2B /* RuntimeTarget.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB7D7841ABF9F0411A5E5307D1DA2C3F6 /* ColorComponents.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A48CF42426D1757E19F5E0283D958A0 /* ColorComponents.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB7D7A68F6F82595F6811546D3F5FBE1F /* RCTImageSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 06AB36FC020F2569C74A4684B6B4CD49 /* RCTImageSource.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tB7E1E22D704AE6B45D5CE7493F1DD3F6 /* ReactNativeFeatureFlags.h in Headers */ = {isa = PBXBuildFile; fileRef = 75FB185880821A181DA77737EA85AF83 /* ReactNativeFeatureFlags.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB853DD690352D47747E1C0F628B2F965 /* RCTScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = DD3ED969E30456E3100D106C5E71ED9E /* RCTScrollView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB85768B4335CC10A4A576DAC90A71D93 /* RCTSurfacePresenterStub.m in Sources */ = {isa = PBXBuildFile; fileRef = 051EC8684B270AADB5DFA351ABA355C2 /* RCTSurfacePresenterStub.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tB87B2669F479637ABFED52ED65EF2313 /* RCTShadowView+Layout.m in Sources */ = {isa = PBXBuildFile; fileRef = AA78032AF49201693A01E81C17C66EA3 /* RCTShadowView+Layout.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tB88A2040ECB1F70E8F25F03E8F33187E /* Portability.h in Headers */ = {isa = PBXBuildFile; fileRef = DF4F0BE954C36F42882AC304D011030F /* Portability.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB88D6486C89EAA9B8FA7B9BBAA935016 /* RCTBaseTextInputShadowView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 857ABB199F3E6193128196415203918E /* RCTBaseTextInputShadowView.mm */; };\n\t\tB89B95DC19D784FF1D918EF174F7304C /* Hint.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DBAD76DF0AA6D7A788B0D3674035677 /* Hint.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB8C3FEE7D7B3755A0BF1C463308725ED /* TelemetryController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5823607D77DE3B854886CBA748F1433 /* TelemetryController.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tB8C5AC5B7DA9B2A06BA64F5A4293A1EE /* SharedMutex.h in Headers */ = {isa = PBXBuildFile; fileRef = AC04A5C67B4CC06104E1FAC9CDF58712 /* SharedMutex.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB8DC5312262AA5FA9C450ABC35A99FC3 /* IPAddressException.h in Headers */ = {isa = PBXBuildFile; fileRef = 789B5746A1B28065E10E29579DC6FE8F /* IPAddressException.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB8E0926005F78632DECE3D0E7A6B853F /* Database-sqlite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 79E82AE02BC6B9CCABF7C62D230F794F /* Database-sqlite.cpp */; settings = {COMPILER_FLAGS = \"-Os\"; }; };\n\t\tB8E580ED62C6E906A4E12DF1A29A578A /* EventEmitter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07C2F40D8790521504B9C05E652B31DE /* EventEmitter.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tB9059E18CB874DB0187746AD8FC588DD /* RCTSurfaceSizeMeasureMode.h in Headers */ = {isa = PBXBuildFile; fileRef = CF40503F32A96F47168359F16F99FC55 /* RCTSurfaceSizeMeasureMode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB93CE3FE617101FFA26C79EF78C145C4 /* UIManagerBinding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EF7790CCA0F33012360CF9BA24706CF9 /* UIManagerBinding.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tB945ECC66F0C651040D88DB13B191014 /* signalhandler.cc in Sources */ = {isa = PBXBuildFile; fileRef = 7706A182348778EF9482CF0A0A02DC41 /* signalhandler.cc */; settings = {COMPILER_FLAGS = \"-Wno-shorten-64-to-32\"; }; };\n\t\tB94D8534EACBCA2D52D42FE0F7EC7B6A /* Fcntl.h in Headers */ = {isa = PBXBuildFile; fileRef = A09332652A2DA7B2F95FDC212274928B /* Fcntl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB950ACC5E104B59E5EED2084C222FE73 /* AssertFatal.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EBA55B04BADD1F4ABB709051EF06C89 /* AssertFatal.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB95535EB465D0577E50655E252780F7C /* RCTSurfaceRootShadowViewDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F8E66FF737E243487DFC9781A2605FE /* RCTSurfaceRootShadowViewDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB95B3FEA85BF956F4A5CA3D0C820BC43 /* RCTComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = DCDAB8C1A8AF49504419868DFB5EE19B /* RCTComponent.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB965CFA26A338B7BF3BDE4F541A7ADE9 /* DebugStringConvertible.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DE0D3D7FDED11B0BBBDD597E67E6E5CD /* DebugStringConvertible.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tB9680AACE3CB0C78BD9987E51E119F54 /* SurfaceHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 92308B330D7A43F94B4AD41D0FEB8214 /* SurfaceHandler.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB9CD8F8C81F90DDB41B08F0B005D2FD2 /* RCTTextDecorationLineType.h in Headers */ = {isa = PBXBuildFile; fileRef = C3701203D3AD5D881037196F72FD8BB7 /* RCTTextDecorationLineType.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB9D6695B46C1A7889F7039E360A604F6 /* Vector.h in Headers */ = {isa = PBXBuildFile; fileRef = CFB81BB75D1D9BE93AA436949526503C /* Vector.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB9E1C9D4A16FFAF1560A278D0104CB8B /* HermesInstance.h in Headers */ = {isa = PBXBuildFile; fileRef = 019F5B5B17C82713C4D6098E01A6E634 /* HermesInstance.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tB9FD8BF287FCE73CDD7100E5A2CA7E24 /* DispatchMessageQueueThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 824AF1EEC669FDA2DBC78CB48CBC86B4 /* DispatchMessageQueueThread.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBA2CD9347081FBACC0B91878B7B5E2B6 /* RCTConvert.mm in Sources */ = {isa = PBXBuildFile; fileRef = B5CA3E3C33E4FE87189CA5272539AA13 /* RCTConvert.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tBA3ADF4A8E40C8AB0FBC1B0A393B3891 /* vlog_is_on.cc in Sources */ = {isa = PBXBuildFile; fileRef = AF297E87957501039602459E49565C20 /* vlog_is_on.cc */; settings = {COMPILER_FLAGS = \"-Wno-shorten-64-to-32\"; }; };\n\t\tBA4ECD7D27EEB764E12B599F80C19150 /* core.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E745C18EFA47BE9828C298066E9F6F5 /* core.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBA893830D9B18AEF81EDECAEECF9F495 /* SRMutex.m in Sources */ = {isa = PBXBuildFile; fileRef = BBAA6714B59FDAB63CB3D51FFFAB5E9F /* SRMutex.m */; };\n\t\tBACA247E7575A79D1D48E553058B2976 /* FollyMemset.h in Headers */ = {isa = PBXBuildFile; fileRef = 29A9D298DB1C62EA7C25E8F85CFF52F8 /* FollyMemset.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBAE41AC37444F16DC1364FC327A7C38B /* conversions.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B38F5BBD25E489CA1BCFF0B8B34AD39 /* conversions.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBB1ED891A520B5065A5DED3E37ACA7F0 /* ar.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 2633DC101FF0E08FE241777B60154AEF /* ar.lproj */; };\n\t\tBB290E6063D0D517A3C83B1DDA4BF000 /* RCTBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8CDDE02E3DE33048B69564671CBA6D96 /* RCTBridge.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tBB31575F6CB94C521F193DD6091B43C1 /* RCTModuleMethod.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AB9D50DBC3A7605124A8AC121341CFF /* RCTModuleMethod.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBB4F1FA68DADFBABA5CDF3C1D7045F38 /* Arena-inl.h in Headers */ = {isa = PBXBuildFile; fileRef = 466A8EAE41785C3EA08D830470EABB6B /* Arena-inl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBB715F4BA27FE3E850E271F2F75C37A6 /* Malloc.h in Headers */ = {isa = PBXBuildFile; fileRef = BD52A822E13E3FBE427F01FAFF774941 /* Malloc.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBB7454F5C1251EBA25AB7F058CB59A20 /* EnableSharedFromThis.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A2008DB4CB2932C0392674068ED82A6 /* EnableSharedFromThis.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBB894D03D378CDA7DED9870ADC869E5F /* TextLayoutManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 04308B32F6B6A66B18A8BFB8D050CD14 /* TextLayoutManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBB9B6DC3BA3E623DC5E09A9D554CA3D6 /* FMDatabaseAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F9A9F41C8712A5EA89926F9E34BB317 /* FMDatabaseAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBBB7CD52BA8A4BD1CA13E8607E69D734 /* RCTTextInputUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 39F4D12A0547EEA463DA17C682F69B34 /* RCTTextInputUtils.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tBBF174BA4A0B11366F598742295D97FC /* conversions.h in Headers */ = {isa = PBXBuildFile; fileRef = 1528B7D498ED533635A7109CF11814AC /* conversions.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBC62BEBADDC0DF99B2626677E09F4224 /* RCTSurface.h in Headers */ = {isa = PBXBuildFile; fileRef = 762588AD3F68541107FA36AF37D053F9 /* RCTSurface.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBC6A9D036DE803C84DFC46F74C1B54DC /* RCTLocalizationProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D7883FA7052AFA06DF3F841FBBB33EF /* RCTLocalizationProvider.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBC6F9DEE2138A6B67A96F83FBFEFD5A5 /* Size.h in Headers */ = {isa = PBXBuildFile; fileRef = 9130DC48E60A16B3033E4C4648557B52 /* Size.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBC6FBBC737C9E7B5B1DFA21DF4EB9A0B /* RootProps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD77E6961ACDBD3730EC6702236118AC /* RootProps.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tBC7F8E1CBD8D713846A0BBFB5CACCFEF /* RCTDeprecation-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1147DF7D7F05EA4A85F3A1FF854A3B85 /* RCTDeprecation-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBC8F3B887DB5312669D79FBBED471C90 /* IPAddressV6.h in Headers */ = {isa = PBXBuildFile; fileRef = 662EDB351806ACAF98C186A204C9A85E /* IPAddressV6.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBC9D1F143856CC6872D6C3559711EDAF /* Enumerate.h in Headers */ = {isa = PBXBuildFile; fileRef = 9052E26FF92020AFAA064B27532BDD02 /* Enumerate.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBCAF65D4FF616E0657166D728E13A11C /* DistributedMutex.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C93DB36FA986D128CB97DE275C7A0B4 /* DistributedMutex.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBCF538F2334EA778995D5BC9776E8110 /* RCTLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 39650BDAA0AACD5B404A81046E1DC6C8 /* RCTLog.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBD01F6099618E01DA2E418D865E8560C /* RCTTurboModuleManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 446FE57F2A972700F005CD2CC41F8710 /* RCTTurboModuleManager.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tBD19A05C58B1EC18B47AAF026E4DC966 /* Hint-inl.h in Headers */ = {isa = PBXBuildFile; fileRef = BF031C91FD312DC63FF16FE7D183B230 /* Hint-inl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBD2AFB55C0FB4463B222D2413DD85C73 /* SysTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B9509822D0A4EC87A2AA3BC68342DF3 /* SysTypes.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBD6827747579EA86DBDAAA32D9084BE3 /* ModuleRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = C9E855C72DB65E8045F7D611DB8E0AC7 /* ModuleRegistry.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBD69072959AE8E10FB9E6B91DE1FE1FB /* RCTImageBlurUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8CFB7A8BE97081BCC80D943BAD260E5A /* RCTImageBlurUtils.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\tBD99C2863EFA1867E4CC53CF50951B2F /* NativeComponentRegistryBinding.h in Headers */ = {isa = PBXBuildFile; fileRef = D6270B25D28322D56823F16246CD7C57 /* NativeComponentRegistryBinding.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBD9F5BFFA46041D4E554AC866B630F26 /* PixelGrid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0D9123036D19728374029B1BD6567BA8 /* PixelGrid.cpp */; settings = {COMPILER_FLAGS = \"-fno-omit-frame-pointer -fexceptions -Wall -Werror -std=c++20 -fPIC -fno-objc-arc\"; }; };\n\t\tBDA63FE5A587CF5C5ED9DD8BCE0B4244 /* ostream.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D826D3061A245096B1C382B690FA981 /* ostream.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBDB5B6E32C9C64AAC0AF0F3D37F137F9 /* WeakList.h in Headers */ = {isa = PBXBuildFile; fileRef = 963CB6F0F1E28EA98A2EED61461AC386 /* WeakList.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBDE6C06ADC0B7FE944334E2321297371 /* Checksum.h in Headers */ = {isa = PBXBuildFile; fileRef = AB1459102548D6C97BDF32F7673BD1DC /* Checksum.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBDEFFBF8EF6DDBC1114CD89E77DDD2B4 /* Aligned.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AE62E3EA1E11A2011DFB36206854AB4 /* Aligned.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBE32F467ADEA0C6CC8C6AB51E53C8360 /* React-RCTFabric-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 51F1662929364AF9AB1F5EFD515C39CA /* React-RCTFabric-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBE3E5B126114B81C72E7C74D3ECFBE63 /* BoundAxis.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C8906A6C460D393729CA02A57186E7 /* BoundAxis.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBE55E4FD3612515277281F56F4DCBBE3 /* HostPlatformViewTraitsInitializer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A64B900827AD880DCA0F0CDC3BDA727 /* HostPlatformViewTraitsInitializer.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBE72B86093B43341E6E66A17E39FC367 /* Float.h in Headers */ = {isa = PBXBuildFile; fileRef = A67702A5BB9FE81CBF2BBE1340D12764 /* Float.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBE78B704D8C638CDE420A05430C23402 /* HeterogeneousAccess-fwd.h in Headers */ = {isa = PBXBuildFile; fileRef = B32CE247FEEC1814744A3421CB654796 /* HeterogeneousAccess-fwd.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBE89C52B16C25B11A806A9C95D163AC9 /* RCTSwitch.h in Headers */ = {isa = PBXBuildFile; fileRef = 4168B7BDC6AE9FC9B5C87C96C641EA8E /* RCTSwitch.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBE9378E4048139E2434CD8416D014949 /* Rect.h in Headers */ = {isa = PBXBuildFile; fileRef = FC391A89C7D8499E264ADBDD9F59F736 /* Rect.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBEB43DD0A82C63C5DA77BDEBF27EAB11 /* RawProps.h in Headers */ = {isa = PBXBuildFile; fileRef = CC381BCFEEAC649BB62889E972FAD4E3 /* RawProps.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBECF0A8247DDD53567BC16E3F7F7FBA5 /* RCTPullToRefreshViewComponentView.h in Headers */ = {isa = PBXBuildFile; fileRef = 51B45045020F47D86FEF4BD034627881 /* RCTPullToRefreshViewComponentView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBEE20927650F0E34B770955423009032 /* FallbackRuntimeAgentDelegate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9849504D06A58E365E3512F08D8AD6DF /* FallbackRuntimeAgentDelegate.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tBF50613A6236144CFC64B76482D8604A /* RCTUtilsUIOverride.h in Headers */ = {isa = PBXBuildFile; fileRef = F9317E9FDB1763149AA85D21D664A706 /* RCTUtilsUIOverride.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBF7F76D1757734E5AA71B29C9225ED2C /* SysMman.h in Headers */ = {isa = PBXBuildFile; fileRef = 506A5EB970B15ADBF0D61002534BC9B1 /* SysMman.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBF8E3A91D5B558AB51CEE906B5AD877E /* jsi.h in Headers */ = {isa = PBXBuildFile; fileRef = 469194BAB9EE78B8BC1A3877E5EB169C /* jsi.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBF95BCE7DEEBE179C23F8F6D13EB1A5C /* react_native_log.h in Headers */ = {isa = PBXBuildFile; fileRef = 944561AB0FA2778925F3B3BD1ACD8B3C /* react_native_log.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBF998BBFB68ECD47CD96ED1B92D5A9A4 /* traits.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CE3815AC95E2E19EFA825C26B6DD16A /* traits.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBF99D3180B889F62B09F91350E7C662B /* RCTSinglelineTextInputViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 70FD25025D88D2C467D14135D309D155 /* RCTSinglelineTextInputViewManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBFBCF7EE822DE23E5F13DB60A08EE12A /* RCTDivisionAnimatedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = AB89B71C07D924F2DA582CF6A4C3CFA4 /* RCTDivisionAnimatedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBFCA21C2893743BB4DA5287E067E2CE8 /* Sealable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCAC25D53F76C3CA7747058E179BEC03 /* Sealable.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tBFCCDE2C5A4302237A973BB40482C84A /* RCTJSStackFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = FF16234911D787047083140DEC397AC5 /* RCTJSStackFrame.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tBFDD5C42EECE46A1E9056A6A35207FA5 /* ParagraphShadowNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 11F2C5264D76056FDC6FDCEE75FEEE82 /* ParagraphShadowNode.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tC016F3769390ED58641BA2886319108C /* RCTComponentViewFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = FFA331C6B5744B16007B95A0D3EA96D8 /* RCTComponentViewFactory.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC032E5BB08569C501D19399A5F42C999 /* CPortability.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DC4F893B0788A2E9A80A4BD69265922 /* CPortability.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC08677D33FB9E6187D04980860872F5B /* YGNodeStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 91C4877BD9BE873DF4DF6B5DCC0CC740 /* YGNodeStyle.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC0897BC0137C74A33DD2883F8E433ECE /* FileUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = FF88C9A8B1E0A79468C40F286C239533 /* FileUtil.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC0AA8E5DC19580CD56E6741BA43B2836 /* Database-turboSync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C508463B95043E7E700C0414CB55E23A /* Database-turboSync.cpp */; settings = {COMPILER_FLAGS = \"-Os\"; }; };\n\t\tC0ACAA415557A9541189F735338188F6 /* RCTRefreshControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 45C6CA880F0AD8CC31C1BF775228C3EF /* RCTRefreshControl.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tC0AE938053DA32A5D3A7BBFE90F6B81A /* RCTErrorCustomizer.h in Headers */ = {isa = PBXBuildFile; fileRef = BAB8070C18EDCE8B518A4AD6B7ABA7D4 /* RCTErrorCustomizer.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC0C35A59710DB7C0E344E402A71E326A /* Futex-inl.h in Headers */ = {isa = PBXBuildFile; fileRef = 0101C2B932AED7971A900220D55C0B86 /* Futex-inl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC11C62BF75D485758FE41A15F556D6A6 /* ParagraphProps.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C7A8CC093D61D93FAFE2A423F9CE0B7 /* ParagraphProps.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC14128969BE1C6AB075A68A94478FEA9 /* RCTRefreshControlManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F14EDE5F666391049AE8B82BFE391E88 /* RCTRefreshControlManager.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tC183B242623BA337D3C0F828AD6BA9AD /* UniqueMonostate.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A474E2B602BF03DC7153DA54029EFCD /* UniqueMonostate.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC1A8B83142B9F3C7DC02D5E53BA45AF8 /* strtod.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43EB5BDEB4E6A695F071E994CDEDF34A /* strtod.cc */; settings = {COMPILER_FLAGS = \"-Wno-unreachable-code\"; }; };\n\t\tC1B26D9A55F1A2C8CDE164527BF69595 /* RCTMultilineTextInputViewManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = D9C558B0DD5120E2A4ED354C91A0A581 /* RCTMultilineTextInputViewManager.mm */; };\n\t\tC1EB13FC1F8A6376FE9200436FEF08B6 /* Windows.h in Headers */ = {isa = PBXBuildFile; fileRef = B8EE883969234B8D43CEA19B78B08828 /* Windows.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC20E436D91DA5203A47F3D6F3E562C6D /* RCTActionSheetManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 27D5B6E7F5A0D017C0081BAF95A9E8AF /* RCTActionSheetManager.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\tC214AD1E1FFAAD2EBCA4A756CCA4A07D /* NSURLRequest+SRWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = F8AFFDB6E319041377C5799A85CD2848 /* NSURLRequest+SRWebSocket.m */; };\n\t\tC2619EDFD44B3B235FB459A25B4A72B7 /* Bits.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B0A8E8F61759E910B9953C7FF640925 /* Bits.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC27DC9FF99360274DA538C421B4F71C1 /* RCTAppSetupUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = A0E5972A9C9EBA5B3038586A11E0FCF5 /* RCTAppSetupUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC2812E54502D0AE67E89826DF1F68331 /* RCTBundleAssetImageLoader.mm in Sources */ = {isa = PBXBuildFile; fileRef = 307CE5CEEA4E06A6A255CA72344E783B /* RCTBundleAssetImageLoader.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\tC28578E54BCAC6BAD431CC47C0D837DB /* RCTTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CC04D4366699171D90B6E14F8947CBD /* RCTTextView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC28EBE70902BCE47AB96EDB66AE8C397 /* primitives.h in Headers */ = {isa = PBXBuildFile; fileRef = EA92D2D183344B3DA53FE9FC7B307DE6 /* primitives.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC2AF2A840E1928C9F60C0AA90B705BFA /* F14IntrinsicsAvailability.h in Headers */ = {isa = PBXBuildFile; fileRef = 173353D36092C2DD008D22FDEA5C21AC /* F14IntrinsicsAvailability.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC2DF30B6DE01B7D903B28E6013811564 /* RCTTextAttributes.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8980AF1403E1F2A16DA44CAC4004F1E9 /* RCTTextAttributes.mm */; };\n\t\tC324ED09ACD63780DE0215EED2E91E81 /* SimpleSimdStringUtilsImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 696D9C59C6F80DB952F1142DBCBBF620 /* SimpleSimdStringUtilsImpl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC38870EFB4A053C9D2A3C9C2988AD348 /* SocketAddress.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AAE8CC35982681A17144AA7022C354D /* SocketAddress.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC38C0624ADE70CC7A4721C78981D8051 /* RCTNativeAnimatedNodesManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C32C30AB7EF3BB474BC4B4DFD2FC61C0 /* RCTNativeAnimatedNodesManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC39630188B797485BDB7AE5D8FC4B7CC /* fast-dtoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 28D7BEABBC1EB38780017A5D14CC2E0F /* fast-dtoa.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC3A9C328C82327A71B8E84B9D9953642 /* bindingUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 33A82E15C4F5EEC134A1C086B421B62D /* bindingUtils.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tC3FC726B41D7E5C3AE7913D10FCA7710 /* RCTStatusBarManager.h in Headers */ = {isa = PBXBuildFile; fileRef = A53C026A38554E36070D5FF7477DE9BD /* RCTStatusBarManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC429AED5A28ED5CED26E118A328A138C /* ModalHostViewState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DABCCB9297D8973E3EB46EEFEDDEDCB4 /* ModalHostViewState.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tC4730E88D130D0B7B7B6AD61C046C45D /* PlatformRunLoopObserver.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6075D4D4439E8587250CA17C18029EFE /* PlatformRunLoopObserver.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tC518D5794D6157C417922E2E4B2B82A6 /* RCTImageViewManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 26E19B9D750F023C6ABA23E46C660990 /* RCTImageViewManager.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\tC536D1DF09153CABFB88C9BDA95EAA1E /* json_pointer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E02117FB47D5E097A2FE278E42ED7D2A /* json_pointer.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\"; }; };\n\t\tC53735A70163AB0A8E31BD1F52A5225B /* StyleValueHandle.h in Headers */ = {isa = PBXBuildFile; fileRef = B9F029DADA46B18ADF047508F6813174 /* StyleValueHandle.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC53B4E78EE7B685B08EADB598B3D73C0 /* TimerManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F8273DFC8BCEB15B1ACE7AA5FB60DFA /* TimerManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC54B8565B5FFD71C349912AF08E0CE61 /* ExecutionContext.h in Headers */ = {isa = PBXBuildFile; fileRef = F9FB962222C7D13D456DA7490A882D10 /* ExecutionContext.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC55E12D16DFC55B05F20AC48CC367A4D /* NativeModulePerfLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BE67D2E5B439024289DCAE23AB7DFE4 /* NativeModulePerfLogger.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC5683D8CE70A467CD760436F464EBF07 /* RCTActionSheetManager.h in Headers */ = {isa = PBXBuildFile; fileRef = FFD4B861CCFBFBB3B9059A2DCEDE8D24 /* RCTActionSheetManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC5875E99005BE017DE24E9F217EA362F /* RCTHTTPRequestHandler.mm in Sources */ = {isa = PBXBuildFile; fileRef = 445199601546E45056A827DFB23F4148 /* RCTHTTPRequestHandler.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\tC59BF33E43C2399EA30FEAB9463C27AC /* RCTDevLoadingViewProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 25984569AD3852F629F09301282C7769 /* RCTDevLoadingViewProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC5C73190B9AE8ECC8D69A6B28FEE407F /* RCTScrollContentView.h in Headers */ = {isa = PBXBuildFile; fileRef = CF44B022CA9C008F36C080D66685928C /* RCTScrollContentView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC6747C938C8A8C6E92C0590D74661B76 /* React-featureflags-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E8BF57389A0D82185746D63D05645956 /* React-featureflags-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC684EF50FF0928A3EB0D633FAD9CFF31 /* RCTFileRequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = BDC9CA0EA4B12AEE132FF43037AE8E00 /* RCTFileRequestHandler.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC6928A6A1531FA166407A1A84E0D76D8 /* ComponentDescriptorProviderRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 081F794580583CC4DFEB6D2CF2DF3D3D /* ComponentDescriptorProviderRegistry.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tC6CDF82E4F1DB6694DC892F9E734C059 /* RCTSubtractionAnimatedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = D837D755183ED658A920B4FD642A3F16 /* RCTSubtractionAnimatedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC6EDCB116DA4E5DF0B2208B9D1F6AEF3 /* Function.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DB326307140B9D4967E5C75EE4D451D /* Function.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC722DB4057046A629115CE023B7A47D6 /* LongLivedObject.h in Headers */ = {isa = PBXBuildFile; fileRef = B862E1391D01BF787FE43136140D8C85 /* LongLivedObject.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC77CB2DD8FD053075C9A2178F2617423 /* RCTEnhancedScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E169D2216CF9E719B147E7377742BBD /* RCTEnhancedScrollView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC786F85A5EF2AC362596E13AA803CEBA /* HardwareConcurrency.h in Headers */ = {isa = PBXBuildFile; fileRef = 8980B7C2D6023D0EC77EF277C17227D1 /* HardwareConcurrency.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC7871DFEB70AFC8C34E686E281A6A237 /* ParagraphLayoutManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 92EE42BB2B8D888B92EDD257DA21325E /* ParagraphLayoutManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC791DDB6F088C6A6850CA660286643E4 /* stubs.h in Headers */ = {isa = PBXBuildFile; fileRef = AEBD60021620778CF66B52B3BB90BDF5 /* stubs.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC7C573418A056B8AB963F9493EA16B0E /* React-RuntimeCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E0295F5F6E41D3C5358AC3BC796E1F70 /* React-RuntimeCore-dummy.m */; };\n\t\tC8036C771D671E36BEDD71CB224AE037 /* ImageProps.h in Headers */ = {isa = PBXBuildFile; fileRef = C6326DF244B84C66EDAF7AB7E2A7C98C /* ImageProps.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC8116CD6D7885B9BF76539C205568E78 /* AtomicHashUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = BBE2B529666092F7DEC3C687F33200F0 /* AtomicHashUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC82241B63061787791128A1EC9E9F5B7 /* TrailingPosition.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FB8DB4CA6FB75873D74FF57CA59968C /* TrailingPosition.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC828B700D5250C25780C5E58917B34B4 /* Parsing.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE123FC7D80F16C162FBB579CF5DBD81 /* Parsing.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tC838669A2A7E0BED3B5A3636674F8736 /* WMDatabaseBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = FB687C9F11521E5B9F74197C09608F8E /* WMDatabaseBridge.m */; settings = {COMPILER_FLAGS = \"-Os\"; }; };\n\t\tC85AF2DA0E711B6D8061354E44155F49 /* RCTInputAccessoryViewContent.mm in Sources */ = {isa = PBXBuildFile; fileRef = 85234EF8449BC006516D4A6A62B9F438 /* RCTInputAccessoryViewContent.mm */; };\n\t\tC85DCBF8B4568557FFDC434149051C1D /* LogLevel.h in Headers */ = {isa = PBXBuildFile; fileRef = 795A0388C8652FBA4A957C30BE9222F8 /* LogLevel.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC8600F63A7EF1DE7EE7E9303EC941496 /* React-Codegen-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 739F5A9F956FCC84E8E36F6798EA859B /* React-Codegen-dummy.m */; };\n\t\tC872CAE403B0D04BB730CC1DE6247C69 /* stop_watch.h in Headers */ = {isa = PBXBuildFile; fileRef = 035C4CAE603317412DE18DE1D8300A94 /* stop_watch.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC8809AF5166285F86569DF60E9E4588B /* Format-inl.h in Headers */ = {isa = PBXBuildFile; fileRef = 48D1454DD898A877C683DE012FCE946E /* Format-inl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC8FA2EB937D2445F1741FAA0ACBA9FD7 /* RawTextProps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E66752688584187D6864081ED411C01F /* RawTextProps.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tC9218E0506DC81BD1B8759BFFC4C0D17 /* NodeType.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C4D1C251906CB5D9F8086B2747C1522 /* NodeType.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC92E995FC44274E6EB6B58EB6B6E5A71 /* RCTBackedTextInputDelegateAdapter.mm in Sources */ = {isa = PBXBuildFile; fileRef = E1530C1A41641E337C100090EDB4CD24 /* RCTBackedTextInputDelegateAdapter.mm */; };\n\t\tC93A122778F03045ED2729B67D3D3E9F /* RCTDevSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BE42F9FEE2CC91F9B2D0CD06DCFA3B4 /* RCTDevSettings.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC94ACD989BE1642BD08003091B0B9A6A /* RCTScrollViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 68F7A0C0E60467EF299D038EF39D12DD /* RCTScrollViewManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC95402DE1ECEBACD3DDE1B93F5D50453 /* SRError.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DFF996F36C36E3B8BE3131F1026090F /* SRError.m */; };\n\t\tC9673DD1A700BA1297C0EEF20E6F1F51 /* RuntimeScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E78187A78E9550C8C47E82A7E0800C4 /* RuntimeScheduler.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC96741C72BE65B64A4AEAB8481F58285 /* zh-Hans.lproj in Resources */ = {isa = PBXBuildFile; fileRef = A8FBD27727A3838365F69F39FCE1378C /* zh-Hans.lproj */; };\n\t\tC96B7502400A4B3C2BF51868F40533CA /* jsi-inl.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D24D1273C6645B9F73FB2F6C0A44A1D /* jsi-inl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC9763A53EB913A90DDFD3B05F894F445 /* RCTImageUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51B5078EBA4D2CDB62D5B9977620515C /* RCTImageUtils.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\tC9778BE281C609F2FD4ED0209BB020AD /* YGNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B7333F82E7D58CECA09AB6ABF206727 /* YGNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tC9CB9FE580283AD17838DF762300199B /* TransactionTelemetry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6FBDF0EE578C484F397C21E43F49F7E7 /* TransactionTelemetry.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tC9D61E8CE5FBF6840501CFF665CEE31A /* RCTInspector.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0349E57AC52849B1E2956F92F2F74D82 /* RCTInspector.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tC9DF4C4D56788006D3E45A2D743D5670 /* RCTBlobManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1371AFE6C3E17A03757544B99B0C563C /* RCTBlobManager.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\tC9F6E53C80C424F26ABFB545F428ADC8 /* SRDelegateController.h in Headers */ = {isa = PBXBuildFile; fileRef = DD1FD8F5FBF34CB4BF85DC2E8496E125 /* SRDelegateController.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCA684AA0DA0CFE870A28282C20B5585D /* Config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A2433055CA015DE51A8A13B2AAAE5155 /* Config.cpp */; settings = {COMPILER_FLAGS = \"-fno-omit-frame-pointer -fexceptions -Wall -Werror -std=c++20 -fPIC -fno-objc-arc\"; }; };\n\t\tCA842D589D81256002BBC46FAEDD0DC2 /* LayoutableShadowNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C95BE4329B2B85F46818C25087E9147A /* LayoutableShadowNode.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tCA84E75F9218D17F7CDAED715D619E5D /* PageAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = ADF560A03C559A77C9107C87619CB4E7 /* PageAgent.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCAA34B58E886CD7FFEA08D44224E647C /* ReentrantAllocator.h in Headers */ = {isa = PBXBuildFile; fileRef = 31842C0B4263119B5232CF1827757893 /* ReentrantAllocator.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCB16BF4D09FCFAD2BA7261CBE4357028 /* RootShadowNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5607E93C1618AA4B1B9A7B366EA9EB0F /* RootShadowNode.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tCB354C58134A502F6190E3C3C1BE2672 /* Align.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C322EC9FEFA80208EF7FC20F8E76803 /* Align.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCB360F4117FB09CBC5BE701D8FC23832 /* BridgelessNativeMethodCallInvoker.h in Headers */ = {isa = PBXBuildFile; fileRef = 77660F5EBDC0FC5CF88F31395F69A2D6 /* BridgelessNativeMethodCallInvoker.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCB3C2589382123E2648E2EE15DCD7717 /* UnimplementedViewShadowNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 22A6AF9D5AAC8F547507F26CAC3BE8EA /* UnimplementedViewShadowNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCBAE1BAD49EE72A5219F0810B2E2285A /* RCTVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C090425A0AC38F41F277453CBF5B235 /* RCTVersion.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCBAFAA32CD193D8766E0AA81E5043296 /* MemoryIdler.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F8E6E55AFFCF9BD68B2B5B508CCEC75 /* MemoryIdler.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCC03051DBCACE8B77F865DD060DAFA03 /* RCTCxxInspectorPackagerConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EEEE05EBCE258D71886371521451AF3 /* RCTCxxInspectorPackagerConnection.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCC0CADD2F0F0E0729FE5F9C9605CBCC1 /* xchar.h in Headers */ = {isa = PBXBuildFile; fileRef = D181C872FF8059D494F78C6BAF4765FA /* xchar.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCC1068FC78F21AC9E9DC34700188D70A /* RCTImageUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = C0C96A892BD79DFF4E7AD6082E8D7F4F /* RCTImageUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCC1A997B5C11BC4868D250FBBF8B0C1E /* Unicode.h in Headers */ = {isa = PBXBuildFile; fileRef = 83B1804846FC5FA7ACBFC82E7F5B9746 /* Unicode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCC21D14AE3380035230F2E4D94C48724 /* RCTSourceCode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 959BD66DF33D8DD073B3E7135B2954F7 /* RCTSourceCode.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\tCC4CE15B64E3D6123467FE8E3BB099BF /* RCTBridgeProxy+Cxx.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A1561C46AF8A258D7CDA8942E5C9828 /* RCTBridgeProxy+Cxx.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCC5BCB4CA3A1336C2B736EC0C18BDF49 /* React-FabricImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 926F478934D57018C94BFB51AF5970C8 /* React-FabricImage-dummy.m */; };\n\t\tCC6A3584C37F8AAF1DB1E24E2879A29F /* RCTVibrationPlugins.h in Headers */ = {isa = PBXBuildFile; fileRef = 0829B215BF56AF5014B3A1F4D600D8D5 /* RCTVibrationPlugins.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCC6E3938A4EF0A6DB2B0D56ED41F4976 /* RCTAnimationUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3FA9E0C5DE547662B3285AAE677F1CBF /* RCTAnimationUtils.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\tCC9050FCD05014AE5E216B89B1760808 /* RCTModalHostViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = C56554BC73CCF6D61610A28081393A2A /* RCTModalHostViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCCA37D065218C0C45FDDF8CC70E835B7 /* WMDatabaseBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = C5B6D34CEC3C6CE2295EEDA15E8B7DD0 /* WMDatabaseBridge.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCCD0BF1B78D5A69D873D2841DBA1869C /* RCTSpringAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 9113D58420F951D0F8E7D507C99E9190 /* RCTSpringAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCCE0086EBD30F01C080E3B021727B3FA /* RCTRawTextShadowView.h in Headers */ = {isa = PBXBuildFile; fileRef = EAF8192C1B7013E06F84C24D2B1110B0 /* RCTRawTextShadowView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCCE444B1936ACA47326F4959A4A1172B /* ShadowTreeRevision.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3D6DBF11CFCFF077F1E73E67C1B435B6 /* ShadowTreeRevision.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tCCE6526143D52DD765D5B173B8EFB74D /* TextInputState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A6A3F0A2B90931BC1EC1C3E21381C797 /* TextInputState.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tCCE7ED5BBA97D0A5598471FC277F8AB6 /* RCTVibration.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4F21E8185A97B7403E0532DBCEAE20ED /* RCTVibration.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\tCD639A6F3B9AC7F773C16CF14E65FFE0 /* Iterators.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CA3417ED0B8CDE1906D3202E80B148D /* Iterators.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCDA9AA0D1528A162879E3E394100DE76 /* ConcreteState.h in Headers */ = {isa = PBXBuildFile; fileRef = 46F019BC62AF7DC88D7C7732C66B0216 /* ConcreteState.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCDB8B07A16C926213D3894D3C27A65E4 /* primitives.h in Headers */ = {isa = PBXBuildFile; fileRef = A4EB08646CC21410C4622CEE62B7DC51 /* primitives.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCDE3F42EA3A73ED13A9096434E7A1599 /* SRHTTPConnectMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 90C01A0B4DB17D752D3BDD87C1B4D35E /* SRHTTPConnectMessage.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCE24A9E32AA34B04A30BB385163BE369 /* FollyMemcpy.h in Headers */ = {isa = PBXBuildFile; fileRef = 7350D90D235F0E829948F766094A036B /* FollyMemcpy.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCE297BDDD210CFFECB76D3DDE5F79D3F /* F14Map.h in Headers */ = {isa = PBXBuildFile; fileRef = D96F738CE283D062C54E36FE7D38A7AF /* F14Map.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCE6B34445994B4A63A62A2E845DC3979 /* RCTValueAnimatedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = D968F1CAEE31B74111F5F45D24E694BA /* RCTValueAnimatedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCEA7FB8A9AF33E5A6299B7AC9F1F3018 /* RCTJSThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 93E43D1F91E0AD0BD2B3B8127C452C9D /* RCTJSThread.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCEA8A8F5218290D21CA3D0F9FBE73D05 /* ContextContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B644FFAD498B469A3633A360744C403 /* ContextContainer.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCEBDF609628A96683A1298905EB10E39 /* StateData.h in Headers */ = {isa = PBXBuildFile; fileRef = 96AEA8A2506861840BC63D873CC2961A /* StateData.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCED9A3245D7A70EDF4C68CBD7962505D /* SimdCharPlatform.h in Headers */ = {isa = PBXBuildFile; fileRef = 63B3B00A3AAC44C23D4F7E237FE0D5C5 /* SimdCharPlatform.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCEECA36CB4ECD4DB8650B1C0AFD35463 /* json_patch.h in Headers */ = {isa = PBXBuildFile; fileRef = 917B25EF0D073A826D0E80F0B81BFB26 /* json_patch.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCEEF5F179C75EB5D8C84E49E94F90BBF /* YGEnums.h in Headers */ = {isa = PBXBuildFile; fileRef = D70B1BA1E566B78E8FFA9FDB20C45D1D /* YGEnums.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCF09FB6845E2AC4E839B337CAB546E51 /* DynamicConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = 582D8ADF4BEE51D724800E05D34ACDCA /* DynamicConverter.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCF16D91D0F7C3653BAFCDC818A70F695 /* ImageTelemetry.h in Headers */ = {isa = PBXBuildFile; fileRef = C3A0E653F207D8208760F39D89431669 /* ImageTelemetry.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCF5119F6D4E8A0C521F7D0158B43D1E1 /* LayoutableShadowNode.h in Headers */ = {isa = PBXBuildFile; fileRef = D40F2678A9E0D12E6FEE80ED9004E5BE /* LayoutableShadowNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCF64AFCC6883E96BF7808D1467D18514 /* LayoutMetrics.h in Headers */ = {isa = PBXBuildFile; fileRef = A35672FA86AA809C95DB1AD01D1F4E30 /* LayoutMetrics.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCF679B941190DB17482EAAB2423482B4 /* Access.h in Headers */ = {isa = PBXBuildFile; fileRef = 6629455746E57DAB397BA5E289A81B37 /* Access.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCF9190469C904527AF29EE59E32447EC /* RCTSurfacePointerHandler.mm in Sources */ = {isa = PBXBuildFile; fileRef = 44356704310DCCAB77D9F8693D62FE0B /* RCTSurfacePointerHandler.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tCF92DE7237153EF5E90B30A3682BF1C8 /* HostPlatformTouch.h in Headers */ = {isa = PBXBuildFile; fileRef = CB960EC9C47A40C34C5B59FF58A14FCF /* HostPlatformTouch.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCFCE4649CD6C9EDC4A1E1798B4D609E3 /* Baseline.h in Headers */ = {isa = PBXBuildFile; fileRef = EEAA1C4C0F827F9E5B0E9A8A96B8B9D7 /* Baseline.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tCFCF9B04CFF0ED4C5A05E5BB8CB7949D /* LegacyViewManagerInteropShadowNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ED447FF7E9E303F98B593502FAA8151 /* LegacyViewManagerInteropShadowNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD003AF5F1E96BB49180B4461CFD27434 /* RCTModalHostViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6641C8CC47F08AA0D3136808CBCB811D /* RCTModalHostViewManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD011BB8962CE2E4274EB53AA1B967D44 /* SanitizeThread.h in Headers */ = {isa = PBXBuildFile; fileRef = CA69419C699C779F51EC2294FE37593C /* SanitizeThread.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD029A199B240E746CD4A89367F3888FE /* RCTBridgeProxy.mm in Sources */ = {isa = PBXBuildFile; fileRef = AEC06D85B7F38501A5719E0618BBDCB6 /* RCTBridgeProxy.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tD0515E6C90A79FC61FA6AA4547A22242 /* Function.h in Headers */ = {isa = PBXBuildFile; fileRef = 56AAE7ABD3415795FAEEE07A449DD7AE /* Function.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD0521A5D06CA09FFB9EB9EDB701566C0 /* el.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 0F403305468DF1F3BDD4EB48076E71DC /* el.lproj */; };\n\t\tD06694D3AD50DB51D293984A9018A124 /* CancellationToken.h in Headers */ = {isa = PBXBuildFile; fileRef = FC43226FF6ADEAB1549A1CDD67BEC74A /* CancellationToken.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD08C6F38B916C0B5EC43E9CFA026685D /* logging.h in Headers */ = {isa = PBXBuildFile; fileRef = 02AB5D40CC6820F70D656AA73BEA1C64 /* logging.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD0940A21900A9EE7EAEA223B36E1FB73 /* ThreadLocal.h in Headers */ = {isa = PBXBuildFile; fileRef = 4478194C75B2D184014614829944D5CC /* ThreadLocal.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD09944151640950A50227FED4D33D066 /* F14Map-fwd.h in Headers */ = {isa = PBXBuildFile; fileRef = 4873FC718C30FB33CE887064BF8E5DE8 /* F14Map-fwd.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD0AABA0B25ED1795CF662870AD7F0EC9 /* HermesRuntimeAgentDelegate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C80CD944FB88B23807F5AAAF7CB21069 /* HermesRuntimeAgentDelegate.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tD0EFDBC75FA87E68439E6A39448AC532 /* JSRuntimeFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6536CE777152C1FAFBE3DC240DF67324 /* JSRuntimeFactory.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tD0F6F87BD68C9516D0D0142646B8C905 /* ParagraphLayoutManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 46EA19D378721E8E4D853840E6430E2C /* ParagraphLayoutManager.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tD115801DD61F22629F88BCF5BCBA5E36 /* React-hermes-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1363975620BCD9B8C433172AE2F17F0F /* React-hermes-dummy.m */; };\n\t\tD118BCB36B5A104E9E977BADC0B7C9A0 /* CallbackWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = E0C3160ABF695152C97A85E56B140C4B /* CallbackWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD18A57DE0C2C135355388DF5C2EB6C7E /* fromRawValueShared.h in Headers */ = {isa = PBXBuildFile; fileRef = 296F41E25D51A2758C6CBFAB3A8B8FAD /* fromRawValueShared.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD19E93538E81D1EA6110AB9D09F8CBB5 /* HazptrThrLocal.h in Headers */ = {isa = PBXBuildFile; fileRef = C7891A1695A92EF0EE3D79FC7792120E /* HazptrThrLocal.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD1BBFFF4257883AE32ED7139FD296BE6 /* ImageResponse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 06E34251980A9A80A1D27297F3B60B98 /* ImageResponse.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tD1C4AA3D4A4063C85BF05DF7F95FDAB5 /* RCTUnimplementedNativeComponentView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 431DEF836033B057B6067879CB291040 /* RCTUnimplementedNativeComponentView.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tD1FA44DE7190AAFE62E2857974D5BE69 /* SafeAreaViewShadowNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8332BB1363344A31DAAB30F13244873B /* SafeAreaViewShadowNode.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tD21B7BB8606BF188823CB4024222D8C7 /* he.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 46E1F838DD66034E7F76591680E8F0F6 /* he.lproj */; };\n\t\tD21E8439B7C2A9FA86AB82CBAD4FECD9 /* Memory.h in Headers */ = {isa = PBXBuildFile; fileRef = 77A1CFA157156B29C57AF9F7AACA682D /* Memory.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD244559AE36BD566F5DFFDBAFCFFE2BF /* AttributedString.h in Headers */ = {isa = PBXBuildFile; fileRef = AE414480637A9BC7CFC2B70C16C12024 /* AttributedString.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD277B419655B9919F8FF7DA23CDAA69A /* FBReactNativeSpecJSI.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F8788C15B11DF4D16CE2A85BE243AA0 /* FBReactNativeSpecJSI.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD298D5529CA5B29208077A481AE2BF38 /* conversions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F46D9F3383D17EBE93722534A1D68D4 /* conversions.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD2AA4B00D9EB36E405C793FA585D476A /* ViewPropsInterpolation.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DEAC3AED56C9C3D215091D714CEC25C /* ViewPropsInterpolation.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD2D6709D8BE4016F130D13598CECF0D4 /* RCTMultilineTextInputView.h in Headers */ = {isa = PBXBuildFile; fileRef = 15AD43283A6A2C9FC3B3AFE6DCF2E636 /* RCTMultilineTextInputView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD2EED5D51C2C3C5AA6414C428BB9C234 /* ShadowTreeRevision.h in Headers */ = {isa = PBXBuildFile; fileRef = E78F20D79CCC9323B970100544DF75D4 /* ShadowTreeRevision.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD307D309F89DA135DDA8A239255D00ED /* StubView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BEF5A191F5C9D7D1C8386FB298882BE /* StubView.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tD319199F318F9F518DF028E18D8052F2 /* RCTRootView.m in Sources */ = {isa = PBXBuildFile; fileRef = FDAA60177E608D75C530E2C86C1BD33A /* RCTRootView.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tD31B9E80DB2BF39407F507F3B5723506 /* RawTextShadowNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C3154BBEBE29BF292E5169F75CBD889 /* RawTextShadowNode.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tD384DF0C480D44CCBCA312A430085AE7 /* Props.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C80C73D05140B68E7E4D8EC8138AABF5 /* Props.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tD39ABFBBDFD1585768162153F9F8DA53 /* RCTDiffClampAnimatedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 48B93F350B7CEAA9026208326081EA41 /* RCTDiffClampAnimatedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD39F47151D6CAFF00BA7EA53C31DEFA8 /* React-jsinspector-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E0FE53778FF8DB18F69972C1000366F /* React-jsinspector-dummy.m */; };\n\t\tD3A424FD85699ECAA4514C62046BCD9C /* ConnectionDemux.h in Headers */ = {isa = PBXBuildFile; fileRef = 281DE643AC3EC1BC9357383486F2FB11 /* ConnectionDemux.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD3EBECC8D67FF3FC5EAA9C674B0E118A /* SimdForEach.h in Headers */ = {isa = PBXBuildFile; fileRef = 12BF91C85904FD8BA917DDBF03ECCC1D /* SimdForEach.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD403CB498CF79EC0939F733B153D0057 /* RCTTextView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 394174FFAD60F61AE02F3A5C011D30BC /* RCTTextView.mm */; };\n\t\tD4176277B387E1C890B5D11845DEB224 /* SourceLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0834C175FB5FEC893A25F29A77A057B6 /* SourceLocation.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD473DD75F33B177EDD13C68DE02D058B /* id.lproj in Resources */ = {isa = PBXBuildFile; fileRef = DE0FDA05FBBF20ED1DD8039C9EF483D2 /* id.lproj */; };\n\t\tD47AF34FA46EDE8475273445306B7937 /* Fingerprint.h in Headers */ = {isa = PBXBuildFile; fileRef = 163CDA479246FA5F4CF5C7949B3FC9F7 /* Fingerprint.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD48E92175A87C0C0244115F10ACB1E08 /* RCTVirtualTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = 447C966873650F5BE0F53C20B5B181AD /* RCTVirtualTextView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD49827B0FAC4BD22AB3B08E10FC71051 /* FingerprintPolynomial.h in Headers */ = {isa = PBXBuildFile; fileRef = 55BB048CB3ED0500BC5E984EC4283580 /* FingerprintPolynomial.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD4A9A5DE800574D5EA3FBAF7A3FCE239 /* PixelGrid.h in Headers */ = {isa = PBXBuildFile; fileRef = EF112ACF0D0F90B1AAF3D112F650FA09 /* PixelGrid.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD59713A7BC16D46A1359CFB93E730D3C /* ja.lproj in Resources */ = {isa = PBXBuildFile; fileRef = ED0D60F3F216448664954D0D5A35FECE /* ja.lproj */; };\n\t\tD5A493A2DC6BB01DCF68C20D070211F1 /* HazptrRec.h in Headers */ = {isa = PBXBuildFile; fileRef = 21CDEC81B1AACA4065BD3385AB630454 /* HazptrRec.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD5CCF9F221CFF9B657B72954E2ECD096 /* AttributedStringBox.h in Headers */ = {isa = PBXBuildFile; fileRef = 2415A1FAF902321B20BE9690DAF25F46 /* AttributedStringBox.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD612BC5C887E6996DDC550FE55D73EEE /* AsyncTrace.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D024556120FC57697C2ECE69C53D36B /* AsyncTrace.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD62F1180412478ECE031FBB09BB2415F /* RCTFrameUpdate.m in Sources */ = {isa = PBXBuildFile; fileRef = FAF931EFC80EAFDA3EA6E9A6F62665B8 /* RCTFrameUpdate.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tD68E9C9482F92F4500306D7CA38AFE5A /* flags.h in Headers */ = {isa = PBXBuildFile; fileRef = 94ED4B520996293EF041391736BBBA24 /* flags.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD6914F306266D61018820AF2CBABBA72 /* RCTNativeAnimatedModule.mm in Sources */ = {isa = PBXBuildFile; fileRef = F1455C7DE425F051F50E3E27295C794D /* RCTNativeAnimatedModule.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\tD6F3E2B8FE24B7FB165754CD936DDEC4 /* RCTSwitchManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E53A2DCCFA3939F1CADE98C7ADABB2F1 /* RCTSwitchManager.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tD7A16B0C6D721716F7C5A70A6433C529 /* FMResultSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 6189337A90AFF99D9CD0BDCCA472E2B3 /* FMResultSet.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD7A16D49963032254D9E148DAE6AEFC7 /* RCTSurfaceDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 99E72FB672688243BE5F6E35ABA1E42F /* RCTSurfaceDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD7C2C28BD650E3478980431139788E33 /* SRWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 00A22970BA931D4D5E31AD98D11E9EAC /* SRWebSocket.m */; };\n\t\tD7C36B197E1986F1A8811387DD9A2200 /* RCTUnimplementedViewComponentView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 509A9FBAE4B5971C315FA3AB4924204D /* RCTUnimplementedViewComponentView.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tD8447913DFCF5B46D25A9E40632A51A0 /* IOVec.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F85C8CC15CDC85E857260E4CDDF9817 /* IOVec.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD851A600C947B91F7DB5B09DD6367D2B /* React-RuntimeApple-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DEABC445C02152DF5E8A3B39AF9F9162 /* React-RuntimeApple-dummy.m */; };\n\t\tD874563FB7B3E2324F5D62A96A1D66FB /* Lock.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E606A9762AB8D4C06B74BC1924936FF /* Lock.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD87EFE084AEE4FEB4474C02F2E3AC1DF /* StubView.h in Headers */ = {isa = PBXBuildFile; fileRef = A341E5DC44E63AA9B8DFF0E0E059A5F4 /* StubView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD8AAC2DE2E3EA0008B8B5555BF2E3524 /* EventEmitter.h in Headers */ = {isa = PBXBuildFile; fileRef = A7BB8379D1CD88BE60A5A0D33D8572A2 /* EventEmitter.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD8B93E14456B42603AE3567F8E2A37E0 /* SafeAreaViewState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C25232818C41EA94B5E01D6E8903AC74 /* SafeAreaViewState.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tD8C3D24EF338C7C89FD89FB0366AD660 /* RCTDefaultCxxLogFunction.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CC64A671E937AD1149E00BF8AAC2F08 /* RCTDefaultCxxLogFunction.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD8D7FDEC5BB612E2631EE13379B9CF71 /* RCTDefaultCxxLogFunction.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1D4F51217F7A23436A551FB1BF267D5C /* RCTDefaultCxxLogFunction.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tD9243AC9718468197B02FE4EAA191680 /* TurboModulePerfLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A858627701B92C8E35A54D44F1CDF1B /* TurboModulePerfLogger.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD924621A02EA0FCD7E776A06D2AA64C9 /* RCTJSStackFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B71C59B43EE3845C93BBDBA007C75CA /* RCTJSStackFrame.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tD92EE1301D88213094E73A53FB12CC7A /* strtod.h in Headers */ = {isa = PBXBuildFile; fileRef = A43C1B14F1018F4B603503BF2E6E2524 /* strtod.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD93DE7406180B3F14BFB6494C9C55978 /* RCTInterpolationAnimatedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = F78A76F0BB8E6B3D92D46FB8C08FF72B /* RCTInterpolationAnimatedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD9C64AA891BD63910BE6D918867618E2 /* RCTBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 9472948FA5D6097F7AAF46BA5247C4C0 /* RCTBridge.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD9C6BE55D798E8A52E85D425CD9294FB /* CachedMeasurement.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F08F17DB62670269DC70CC1F4817168 /* CachedMeasurement.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD9D6B9A1B8A9324BA41626AE691533BA /* FileUtilDetail.h in Headers */ = {isa = PBXBuildFile; fileRef = FC3E576BEEE24C22BAB754F8BDA7D822 /* FileUtilDetail.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tD9ED192F400D44DC02D98A20B123F16C /* RCTScrollableProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = CC8769294DD05CF0DEF8259E34DE9AAC /* RCTScrollableProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDA23FF23D0B832AD6C6CC5A1C07D5A6A /* String-inl.h in Headers */ = {isa = PBXBuildFile; fileRef = 31FAF051F6D95F34219F912CE1C6F2F4 /* String-inl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDA550251907D606E20F2DED4C4EE56AC /* Pods-WatermelonTester-WatermelonTesterTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 00F247CF24ECD2EFFF35AC12E91E6FE7 /* Pods-WatermelonTester-WatermelonTesterTests-dummy.m */; };\n\t\tDA7BD6553D0FB0F62E5C8DCFF0AACDE2 /* AccessibilityPrimitives.h in Headers */ = {isa = PBXBuildFile; fileRef = 92427655A24DF879C52D7AA18EBFF83E /* AccessibilityPrimitives.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDA7F88713B1145113DA6A418AA6A57B1 /* React-jserrorhandler-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F3EC6BC861DA61263020A86CB2DDC307 /* React-jserrorhandler-dummy.m */; };\n\t\tDA8147A7DA1E5F9AB6671763701F2FEF /* LegacyViewManagerInteropComponentDescriptor.mm in Sources */ = {isa = PBXBuildFile; fileRef = CAAD19E5409FDE0BA4AE1A1A0483BA00 /* LegacyViewManagerInteropComponentDescriptor.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tDAA86EAE8591A539EC9709B9AC8E4881 /* RCTMountingManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 32A7462E31DA20BFC4BF96677609574A /* RCTMountingManager.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tDAC9300F3F4F2080C390F9E5913E3586 /* SysFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 60B6FDAEA7F1F74C6155EF59EFCCA58E /* SysFile.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDAEBA537EB67618319D0FC4583FF7A6B /* TurboModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4809815C39CA6793B26579FDDA54 /* TurboModule.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tDB1C77BB649348CF505F9311A4D9BB98 /* YogaLayoutableShadowNode.h in Headers */ = {isa = PBXBuildFile; fileRef = DA3B2DE0E7759775141A6DD8F1ACA6DE /* YogaLayoutableShadowNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDB330BA756D9108372BB5C51B9BA73D7 /* RCTCustomPullToRefreshViewProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 5466515A64A57AE3158EEA66741CDABC /* RCTCustomPullToRefreshViewProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDB423C91AD697AC50ED1D8717786DB82 /* MPMCPipelineDetail.h in Headers */ = {isa = PBXBuildFile; fileRef = 40B6CCC5214ADD7CDAC59A0304AB0B44 /* MPMCPipelineDetail.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDBAB9A747E25B02895BCC957ADD16902 /* fr.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 61074D38D23CB60AF7788D75C0DEFE73 /* fr.lproj */; };\n\t\tDBD56004083F156CFDCC1D9EDCB75C1A /* GMock.h in Headers */ = {isa = PBXBuildFile; fileRef = D83B4FAAFD8B9F4100D6F3F2AAF2598F /* GMock.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDC004696A79087E85BD8B4ACCD0AEBCC /* F14Table.h in Headers */ = {isa = PBXBuildFile; fileRef = 59164B030AA6BE9DC3304EDD7E90FEEE /* F14Table.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDC0175AB5F97BE5219331D7156CE1659 /* Poly-inl.h in Headers */ = {isa = PBXBuildFile; fileRef = B6F37D13CE5A1DE0E74413865B70883A /* Poly-inl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDC04153187DA66719B11FFBCED9AEA12 /* Cache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 374717629E05164C820F2052E54AAA91 /* Cache.cpp */; settings = {COMPILER_FLAGS = \"-fno-omit-frame-pointer -fexceptions -Wall -Werror -std=c++20 -fPIC -fno-objc-arc\"; }; };\n\t\tDC28F68C0796FB7F8337CAFA89BA23CF /* React-utils-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = AE729B821BDA784B45AFF8A65039D05F /* React-utils-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDC5A073E59515BBFB3FBAA977043E3AF /* React-Codegen-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941C8C17A58C26823E12140D3831D05 /* React-Codegen-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDC63013E20DCE2ADE76BE9407831C26C /* primitives.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D7F16F5E30C11527357DD52C8CB2954 /* primitives.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDC6986A6AC95089763A68D148457F484 /* RCTBridgeModuleDecorator.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DEEED6BBD30D6FA84E9F8A0F6D3BFB9 /* RCTBridgeModuleDecorator.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tDC9E608807384B1F9324A5A88FF2AF45 /* RCTSurfaceView.mm in Sources */ = {isa = PBXBuildFile; fileRef = CCF757AC8F0183D61E1DA8706776938C /* RCTSurfaceView.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tDCDB89602CC48D42D8A5F52640A92C54 /* RCTProfile.m in Sources */ = {isa = PBXBuildFile; fileRef = 4ABE2E714C1175CCFDB7C0F72CE4B611 /* RCTProfile.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tDCFBA2EB42ADCB16CD0529E175BC6AA4 /* RCTEventEmitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 52FA0467104A3E0506B07D0F4D83C94A /* RCTEventEmitter.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDD10FCD5C9B98144C6806F70FC9B7C6A /* UIManagerAnimationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 46F5E5B9B1380E064D67E9508C78BACF /* UIManagerAnimationDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDD34249033E690DE83215ADFB07FC012 /* Demangle.h in Headers */ = {isa = PBXBuildFile; fileRef = 95F4490C7C830CE7EDFD1E7F79557E18 /* Demangle.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDD368E98EC732E72C2F1A4E3DAD73864 /* ShadowNodeFamily.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2782757DC9A193842FF73CDFEC4F5F65 /* ShadowNodeFamily.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tDDB0B0190141D436ABDA58404D1499A8 /* Try.h in Headers */ = {isa = PBXBuildFile; fileRef = 05CAC01452155CC5956412107FDEDDAD /* Try.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDDB67DC583A9C49F0D3A01592065F391 /* ReactNativeFeatureFlagsProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = E7A75689694710ACECFF3C8C79D55E6D /* ReactNativeFeatureFlagsProvider.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDDEB4462BF2B783F42E8EB99035624D7 /* RCTColorAnimatedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 991E213D38BB44AE5C3367DDE4A4D4D8 /* RCTColorAnimatedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDDEB7BAACD5EDCC03E4CC411477A9161 /* EventEmitters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B18233FA84BEC01AFCB96FC16BD3B983 /* EventEmitters.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tDDED52C98E3DB3DE7B916FFA6E38389E /* RCTFabricComponentsPlugins.h in Headers */ = {isa = PBXBuildFile; fileRef = 05CEFC84AD6E69D2E073A1A739700477 /* RCTFabricComponentsPlugins.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDE170A39631C63A89F2286B7AFBF7E16 /* RCTDevLoadingView.mm in Sources */ = {isa = PBXBuildFile; fileRef = F277FEF63DB910E42C66936C8592693A /* RCTDevLoadingView.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\tDE170A419A4F9680E64D24A8098D12E8 /* EvictingCacheMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 119AE002F412B1467B684F7738048356 /* EvictingCacheMap.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDE3E9A5EC28083C37C4F79EB720E4C84 /* TimerManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C178BA891B154BE1B7A5B0CF16AFD27D /* TimerManager.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tDE4BD4F32114191405334654FC2E18AF /* RCTSafeAreaViewLocalData.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B65B6162E9749D1E3F3D1232D886392 /* RCTSafeAreaViewLocalData.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tDE66748432F9109389013EC8F90A07FE /* ImageRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D006447B5017B8009E226E6E0AACE40 /* ImageRequest.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDE6D3EF512445AED97626F2FD2C6E144 /* RCTInteropTurboModule.h in Headers */ = {isa = PBXBuildFile; fileRef = DBF242B856D15CC59A314DC9A8B2701B /* RCTInteropTurboModule.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDE92F90C06BC1B8BF2FC386891260157 /* Convert.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2EDFEA3A7670F7D6AB0267AFA7E2F1 /* Convert.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDE955502F25186EF5AD32CC67482739B /* AbsoluteLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB96EF13B6D928DBB3A8D90C1ADF57D5 /* AbsoluteLayout.cpp */; settings = {COMPILER_FLAGS = \"-fno-omit-frame-pointer -fexceptions -Wall -Werror -std=c++20 -fPIC -fno-objc-arc\"; }; };\n\t\tDECBCF943B2007810250A795467B4DB6 /* FlexLine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6D3BD65E387AF4A8FE10216CABF03885 /* FlexLine.cpp */; settings = {COMPILER_FLAGS = \"-fno-omit-frame-pointer -fexceptions -Wall -Werror -std=c++20 -fPIC -fno-objc-arc\"; }; };\n\t\tDEE25205878E37681E37F7C8F3B2929F /* ShadowNodeFragment.h in Headers */ = {isa = PBXBuildFile; fileRef = 1598F75BEAFDD5C3F7AD8DCDD6D5D2C4 /* ShadowNodeFragment.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDF036DC6537C4E015C97F52AFCFD32FC /* RCTActivityIndicatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FB7F5153FEFAD2FCC98DA600D4A18B3 /* RCTActivityIndicatorView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDF410589C0140F902BB7B8E4C1C38CA0 /* AtomicUnorderedMapUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 13DDAD72F9C7DC4D814F4D340784ECEB /* AtomicUnorderedMapUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDF52659D4B342F45BCDFC299BB9F3176 /* RCTTouchEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = EC17C0D5E26D47755381DCEAE6861774 /* RCTTouchEvent.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tDF58E8CF0A1D74B0B1D6582660B33A6B /* RCTAnimatedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 29B488F05847F4968004034A803BA1EE /* RCTAnimatedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDF670DA3ED5334665E6359FE60D70590 /* Merge.h in Headers */ = {isa = PBXBuildFile; fileRef = 3859A11BD5B175A2E7059AE9B7A747F3 /* Merge.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tDF6D6AE3A41D68BBB6934A6215CF0543 /* RCTHermesInstance.mm in Sources */ = {isa = PBXBuildFile; fileRef = 32854BF47BB04F74CF858BD8BDE66C35 /* RCTHermesInstance.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tDF91D11B9CE5FCD990B5344711241E38 /* Database-jsi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C339EF963613DD1C7090A3FB6A1FE530 /* Database-jsi.cpp */; settings = {COMPILER_FLAGS = \"-Os\"; }; };\n\t\tDFE0FDDAB89D558D7E5C4FE84CE8A831 /* RCTFontUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0B38F938F0F9868A60309B113ECB3CAA /* RCTFontUtils.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tDFF18CB9F6E9C5DBC1794BC83CEE2B40 /* LeakChecker.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F6E474235C8459CDC4689EE8FA90735 /* LeakChecker.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE01BFDB73F70CBCB2CFC52444346AF77 /* format-inl.h in Headers */ = {isa = PBXBuildFile; fileRef = 808C3DF73EDCFD47A21FDB81992E3ADB /* format-inl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE03DA0EF491E76A7B522F8AA29B6F505 /* RCTSurfaceView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BE3CC89AB9CCAD959EA3B472BA6F99A /* RCTSurfaceView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE0616E92063B1D7177AD59E30BF80474 /* RCTAccessibilityManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = BB7DBF3AC428AEC78260C9DC4CA49106 /* RCTAccessibilityManager.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\tE0B886B9E9EDFC2C6DC982BD03453490 /* RCTInputAccessoryViewManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = BCA23E868E68363495BB8DE9AA165F77 /* RCTInputAccessoryViewManager.mm */; };\n\t\tE0E7AA9F8861860CFB84E20C9489E5DB /* simdjson-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D2D1B033752AE5FACB195379C2792DA4 /* simdjson-dummy.m */; };\n\t\tE10A1CA856FB54018BD7A8F30AE09540 /* RCTInputAccessoryViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 11F7F6FA2445CB7E109866B0BE0CC3E6 /* RCTInputAccessoryViewManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE11ADB7262AFE9B01BE2A4D975123EAA /* RelaxedAtomic.h in Headers */ = {isa = PBXBuildFile; fileRef = 6551222A25B1F6FAF1575662C8BDA2AB /* RelaxedAtomic.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE1398CF744BD639B09992EA62651FA74 /* PicoSpinLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BBB556BC44275845C988BDF27E10880 /* PicoSpinLock.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE1549E411581F07CCF13356092963823 /* Math.h in Headers */ = {isa = PBXBuildFile; fileRef = 72188071CCFD3B99269572936DAC43DD /* Math.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE15E8C2E4FA6E09EBE76FB1CFD27499C /* React-Fabric-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FC0DBFC356D08CBF5C195717E58618A /* React-Fabric-dummy.m */; };\n\t\tE187EF2A89D79C4FB2ADBF3CC9206292 /* Executor.h in Headers */ = {isa = PBXBuildFile; fileRef = 5433FC0C0EE55FB7FA9D9BCA99A39650 /* Executor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE18F8DA28CD01BA27291E774755C9EC6 /* Registration.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CA5F6EB56C2B8E096CBC6A7B9532E76 /* Registration.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE19474B280DFA77E434C1C2048E81937 /* RAMBundleRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A7C0933E0C4119F5E32E5A260746A2F /* RAMBundleRegistry.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE19D4347CEDC9DE18C2B12A42F2ED1EA /* SafeAreaViewState.h in Headers */ = {isa = PBXBuildFile; fileRef = 6344807426DBEA83083B947671B91C7D /* SafeAreaViewState.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE1AD7A00786590B1156FD21A44BB9D94 /* EventEmitters.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DA7D4069EAB7AD175067D9475F75335 /* EventEmitters.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE1B6548D2CF64C426F0BF369865FBD90 /* RCTUIManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 203BEC3028800526EBC07D8825427B33 /* RCTUIManager.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tE1DB2693E8C7C7187DA8BA2D5C7B2F11 /* ru.lproj in Resources */ = {isa = PBXBuildFile; fileRef = FA397527B29CC2470176B423C005BEE9 /* ru.lproj */; };\n\t\tE200A4AE1E40E3119E83786F9B9EE687 /* RCTBaseTextInputShadowView.h in Headers */ = {isa = PBXBuildFile; fileRef = 33623931DB49F9BE0BB2BEAD565E5AC5 /* RCTBaseTextInputShadowView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE22FDC89AEB18B28B58FE9516DCDEA07 /* AtFork.h in Headers */ = {isa = PBXBuildFile; fileRef = 84861068E0BD421B437C1FB5C00F434D /* AtFork.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE28AB3E3CA812DEDE441BBD946498138 /* FBVector.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D66CDE2F1E5ADE815D245C01F720E05 /* FBVector.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE298A4C07A8B16A83998C5FFCCD88905 /* PointerEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4997893AEC6DB585E2DB2AC06E6557FD /* PointerEvent.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tE2B0F3FEA364E0821B7A190C31E16462 /* primitives.h in Headers */ = {isa = PBXBuildFile; fileRef = 25A59FDE9D2F710EAEE9BF60F424C713 /* primitives.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE2EEB36768E7218D47E9C3CCDC290138 /* json_pointer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5435E25ABF1C803D1D8B6ADE22E2664D /* json_pointer.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE30137F6C7AA4B42A4E8B0069F36DD63 /* RCTReactTaggedView.mm in Sources */ = {isa = PBXBuildFile; fileRef = C1C38809AFDAD38F285E4E8EF2CAC4E6 /* RCTReactTaggedView.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tE306E120D9274E1261E24B71BDEC3F9D /* RCTRootShadowView.h in Headers */ = {isa = PBXBuildFile; fileRef = 40070AAA8193578B4B19218FCBD1F506 /* RCTRootShadowView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE31A87C273F43A0F04ED6AE8C2C562ED /* Sqlite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BBC2C48E868D4877BF151ED8DFB3604A /* Sqlite.cpp */; settings = {COMPILER_FLAGS = \"-Os\"; }; };\n\t\tE31E02EC62FF9E9E089267079E217636 /* Latch.h in Headers */ = {isa = PBXBuildFile; fileRef = 256EFD340D35D7E450AACBE294E874A8 /* Latch.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE339752BDF80501597F6B9FA4BDF020B /* format.cc in Sources */ = {isa = PBXBuildFile; fileRef = 52FAACC98D9676B0C965D8484DF9C51E /* format.cc */; };\n\t\tE344034251B2B0C79981FBE2659E2ADC /* React-RCTVibration-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A870B9A0F18A8C3F9075851CE67E22B /* React-RCTVibration-dummy.m */; };\n\t\tE36699C263918D6CD3CC8D53D29B1CC0 /* TextInputProps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C461F175EB336FD8750A4B7A86919F1 /* TextInputProps.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tE38C5A95C3B86DE8DF5D85ECE0855055 /* RCTScheduler.mm in Sources */ = {isa = PBXBuildFile; fileRef = 619ABD655227A08759F91622DF2A1E18 /* RCTScheduler.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tE3A121600E7E1AF0BAD4F458FB4F3BA8 /* RCTNativeAnimatedTurboModule.h in Headers */ = {isa = PBXBuildFile; fileRef = D4758B7FCDEC2C0806CEE3D106040093 /* RCTNativeAnimatedTurboModule.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE3A1C4B353CA38F45A94333BF57BC185 /* MicroLock.h in Headers */ = {isa = PBXBuildFile; fileRef = B02E6E730A273BCBAAB434BD6D2576E3 /* MicroLock.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE3BF65D170B30D844332C8C4223E8E85 /* InspectorUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 434BDC67E1145AE964DB9AA3C0D4F3AE /* InspectorUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE3D5DDDC6A93D60C763C6DADA4FD722B /* RCTModalHostViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4738F10785BD68311DE222F91337CB33 /* RCTModalHostViewManager.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tE47925115CBFC067E6C815ADAE6A56DB /* RCTBaseTextViewManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = E13EF6E51F9F10FBD304A4FADDBB25A8 /* RCTBaseTextViewManager.mm */; };\n\t\tE4D2C49797D59B2052F4B053076FE96E /* Likely.h in Headers */ = {isa = PBXBuildFile; fileRef = CBED11019ED3BE2CD4C26A2FD21B24C1 /* Likely.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE4DBCAA513C14C66C493FA72587F87BC /* RCTTextShadowView.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AEA1EA0BA3625CC695A4E11E09FA24B /* RCTTextShadowView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE4DED56A63CBA885B68CE8ACB532234C /* FormatTraits.h in Headers */ = {isa = PBXBuildFile; fileRef = 375B4BBE3235F1250E48C6F479A52A01 /* FormatTraits.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE5073F2F6330149725DFF68FF2754A20 /* Scheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = BD52E6EAC24FFDEAD05FA9425D5C5A03 /* Scheduler.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE51D79B40AF3291F91E6759876CA3EFB /* RCTTransformAnimatedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BD826EA734516D956DB671826DED506 /* RCTTransformAnimatedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE54B039781E19ECACF0DD70219DBD68A /* RCTConvert+CoreLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7BCA4D8FBC217D22B4EEB15EB03957 /* RCTConvert+CoreLocation.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE59E696DBBF7EBAE641CF83E785ACDA3 /* ImageState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 285EDB99AD277EB30467D34D174D268F /* ImageState.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tE5BA12AB6988A4F766D4BE419C785092 /* PlatformColorParser.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0622E264BBCF6697F9CA2A6775362A8F /* PlatformColorParser.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tE5CA44114FBA3754AF18B7499FF88E10 /* RCTTurboModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 631FE1EE541BDAE0AFB75102923ACDCC /* RCTTurboModule.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE5E55BF988954948EFE319F6580A5DD2 /* RCTPrimitives.h in Headers */ = {isa = PBXBuildFile; fileRef = C1A69366D6E38FE28ED9651968AA7CF6 /* RCTPrimitives.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE5E6E25B9472F6F0AF1255623F14E6A3 /* RCTColorAnimatedNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5825A770C846E9DE0D37D57F8AE02E36 /* RCTColorAnimatedNode.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\tE6018F88579345128C47ABB20076E368 /* BaseTouch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCA65CA4802405E6B52F20951F6A6E74 /* BaseTouch.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tE60661F419313219CAB90AAA4BC569CF /* Asm.h in Headers */ = {isa = PBXBuildFile; fileRef = C5691B7E1407E2A5D9208B3CCFBC6BDF /* Asm.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE62F21693DF34EBFBE00D49D4DF19B1C /* InputAccessoryComponentDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 12C530B1088E418C923CD9F26CBCAB6F /* InputAccessoryComponentDescriptor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE651055717D4190079F013D6D6062009 /* JSIExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AFDFA1B816E14B8A48D630F83DC6574 /* JSIExecutor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE66AD268C60422D082BEE54709653AA9 /* json.h in Headers */ = {isa = PBXBuildFile; fileRef = C047105E3027DC4381475187A7547D3D /* json.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE66C0C4875358F85C28B08F431A9A93B /* raw_logging.cc in Sources */ = {isa = PBXBuildFile; fileRef = EF33D80102A84702AA2E2212D875E506 /* raw_logging.cc */; settings = {COMPILER_FLAGS = \"-Wno-shorten-64-to-32\"; }; };\n\t\tE6B3C3E594F4BF128654E22C4B19807C /* RCTComponentViewRegistry.mm in Sources */ = {isa = PBXBuildFile; fileRef = 723B1846FB58ABF6C06939E1199945A2 /* RCTComponentViewRegistry.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tE6BFEF471AFCFF63E7C2D7BA1F89621E /* RCTEventEmitter.m in Sources */ = {isa = PBXBuildFile; fileRef = BC3E9A24F4A8A5F217C0B3D7CA9EBAEB /* RCTEventEmitter.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tE6C45A4D06FD310A02A987816341A5F8 /* chrono.h in Headers */ = {isa = PBXBuildFile; fileRef = C00CAED0C07FE50074D84727D68C0B0A /* chrono.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE6EB7B76986AE0D3873CA9441B399E76 /* RCTActivityIndicatorViewComponentView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7B1A1BCA9AF04E480CF3A0F15DC4277A /* RCTActivityIndicatorViewComponentView.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tE71D9D6FB89A2C9AE52FE7C5A3C475C5 /* double-conversion.cc in Sources */ = {isa = PBXBuildFile; fileRef = 1E7B7C0191645527408193552D9E40CF /* double-conversion.cc */; settings = {COMPILER_FLAGS = \"-Wno-unreachable-code\"; }; };\n\t\tE743F863A0F857A5DA6A7F1E5D813BCC /* LegacyUIManagerConstantsProviderBinding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 906C0BC7CCCBAF7E35B934CFD17FC44F /* LegacyUIManagerConstantsProviderBinding.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tE7AB4FF7D66E7FFC299A8E48497DE691 /* SpinLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 3605A12CF33B3DFBE0B5DD2DE36994C3 /* SpinLock.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE80A175FF7F506B78BD9376B8D68EB2F /* RCTWebSocketExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EC34A00D8B5E0E79B1DFEF7D2D5651B /* RCTWebSocketExecutor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE8143FF13D3DFB1BFDFD7F666A80CBBB /* LegacyViewManagerInteropViewEventEmitter.h in Headers */ = {isa = PBXBuildFile; fileRef = DDEC6CF7899D39C510AF9B96223825C0 /* LegacyViewManagerInteropViewEventEmitter.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE820B7A84455768483923BE4CB7E895C /* YGNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 98C9E5135E046EC50D915DC1941F6D87 /* YGNode.cpp */; settings = {COMPILER_FLAGS = \"-fno-omit-frame-pointer -fexceptions -Wall -Werror -std=c++20 -fPIC -fno-objc-arc\"; }; };\n\t\tE8246C3EF8CEB14A7575546B4C5CECD7 /* ParkingLot.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D1AF6F139CF74E2FE8BDA319FFEE74E /* ParkingLot.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE838D80FCB87FDDD82E7D2764D8C2E8A /* RCTInputAccessoryView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1DC27EF5E8E8BA5F9132B0790BA1C022 /* RCTInputAccessoryView.mm */; };\n\t\tE895EC817D4A74A7BB7F47CBAEEF4D70 /* RCTLegacyViewManagerInteropCoordinator.h in Headers */ = {isa = PBXBuildFile; fileRef = 32DC15B6A3F5954F7FA2FF42937538A5 /* RCTLegacyViewManagerInteropCoordinator.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE8C5BA1F6806B8ADC9B77E0D87BE6426 /* DiscriminatedPtr.h in Headers */ = {isa = PBXBuildFile; fileRef = 584180DC3B2C183B2687C5F1857403FF /* DiscriminatedPtr.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE8F692582B234462685FB7967E14E8F9 /* ConnectionDemux.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A11628FF9D522105C68BD01BB4D05697 /* ConnectionDemux.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tE8FD4F2B225C52C7C56487D34692AEB8 /* SessionState.h in Headers */ = {isa = PBXBuildFile; fileRef = F4FDC94B0FAFD47D454687DEABE33319 /* SessionState.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE936778E2B61A9184F53E9FC6CF0D106 /* Scheduler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C4F24837075E70019E647A6DFDD4EB4B /* Scheduler.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tE94921804AC15DB216F286A5109E560A /* Conv.h in Headers */ = {isa = PBXBuildFile; fileRef = 2837BF8ABDA1EC92282A5DF6381E0A27 /* Conv.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE964DAEBFF053EC3DE9B68C14E78DEA7 /* RCTViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A294F9716939BAB7421C72EE8DE2D3C2 /* RCTViewManager.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tE99B6103EBDB6840C784DAD2CED495E7 /* bignum-dtoa.cc in Sources */ = {isa = PBXBuildFile; fileRef = B1492BA96B69489FCA50F4BBFD32CDD2 /* bignum-dtoa.cc */; settings = {COMPILER_FLAGS = \"-Wno-unreachable-code\"; }; };\n\t\tE9A31945402EA221C68AC46BD4839F8F /* RCTImageLoaderLoggable.h in Headers */ = {isa = PBXBuildFile; fileRef = 0467EB815B94E64E6883C328F1F0F5BA /* RCTImageLoaderLoggable.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE9BD0DCBBEC08FEA24C2D8CEBC731832 /* RCTInputAccessoryView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B510656AC02DF313FD0F8F0C11489FC /* RCTInputAccessoryView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE9BE847CB39266616A343D766185AE45 /* RWSpinLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 02E1E7FDCE905C0071E5B85EDEE735B7 /* RWSpinLock.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE9D2FF0ECEDFA4C76E42992CE55EAFDF /* RCTInputAccessoryViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 11F7F6FA2445CB7E109866B0BE0CC3E6 /* RCTInputAccessoryViewManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE9D7B312A5C84965CD84BD92FB62B13C /* RCTImagePrimitivesConversions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C0E7A0629DD1A33991E0281C1D7EA6F /* RCTImagePrimitivesConversions.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tE9E9BC877650CF84F4905AEA78C32B8A /* RCTBackedTextInputDelegateAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 6316526F1CBE0396E9767EDFD35C9870 /* RCTBackedTextInputDelegateAdapter.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tEA2E47AC9688F7DBDE75EC611BC68334 /* RCTCxxBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = DC46EBB3ED4F2E3ADA6C2752DF776F59 /* RCTCxxBridge.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tEA48224CDE82427964F18FAEB2358A26 /* PointerHoverTracker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5A623EC312D3BCD944313E099426740F /* PointerHoverTracker.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tEA50617F174E74906FE903B0D0FA3DFD /* RawEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B389CA633B6575A2FA37718B19A4756 /* RawEvent.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tEA64CBFA402C1BC6683F8FD457F438B4 /* RCTTextAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = B6501460FCAA027C674AB185B605DE1E /* RCTTextAttributes.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tEA929F09DE084CC45B3450DC9D78B195 /* SRHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B292553D4F61C21C058393BBC5C292F /* SRHash.m */; };\n\t\tEAA499218101102AB5F773BF2B50EF87 /* React-cxxreact-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 003FB8B8AF1CBB8E2E7A70E7564183A5 /* React-cxxreact-dummy.m */; };\n\t\tEABC36AD3C5E7A062DD1E648173390BD /* RCTMountingTransactionObserving.h in Headers */ = {isa = PBXBuildFile; fileRef = F1FA54C72A9856CD3D0A6B6E24B06E7E /* RCTMountingTransactionObserving.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tEACBE1A3AD0FFB544227FAA98CB212AA /* RCTHTTPRequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 23DDF8148799041A2BF94450407CEBD2 /* RCTHTTPRequestHandler.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tEB135E9D630C14745D6176C4C75F6E68 /* LeakChecker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 550DDF0017EBD296665C75C459009C19 /* LeakChecker.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tEB3E3453EFB9D515C27B942DBC8CA533 /* RCTScrollViewComponentView.h in Headers */ = {isa = PBXBuildFile; fileRef = 671925498D3BA63FE33CF36268979415 /* RCTScrollViewComponentView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tEB47B8FFFB73B9925CF7F1B1E30AC084 /* RCTShadowView.m in Sources */ = {isa = PBXBuildFile; fileRef = A0E2B3DDC742F701942096E520561398 /* RCTShadowView.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tEB8D31492F4B85D40BA5EA1861C0742B /* String.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41CF2183FB0C77CBF6E075298A85E705 /* String.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\"; }; };\n\t\tEBA1024BBBA34339B28107E04BE06DDD /* RCTWebSocketModule.mm in Sources */ = {isa = PBXBuildFile; fileRef = 78BE41CF03440AB09080B75960AF8455 /* RCTWebSocketModule.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\tEBFA2EC449CC7806AD2DFD54A9840763 /* RootShadowNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 489E69C87D3FBB7418B3000B710B6899 /* RootShadowNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tEBFBA6DE22BAD2C406C2392366EC51BB /* RCTValueAnimatedNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 62B08039C2AE783CAF032BCB76890355 /* RCTValueAnimatedNode.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\tEC2759F6A364F02C68F0BD622AFA6DC5 /* primitives.h in Headers */ = {isa = PBXBuildFile; fileRef = D469751A218330A8AA5F4F551ED6F9A5 /* primitives.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tEC366E71583207A1FF0C46AE4BB7C276 /* MemoryResource.h in Headers */ = {isa = PBXBuildFile; fileRef = F89AC6E92A39CCDDE8DAD6BE98D3C4D1 /* MemoryResource.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tEC459A986FF283D828DC0709F40EA216 /* Cast.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DB23B7557FA39253FE65A599E922ED6 /* Cast.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tEC6ACE9F6F6F8AF98C952D03A7071FAA /* HostPlatformColor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7237AA79C8E933F1CAB9DE0BDD0B0A5 /* HostPlatformColor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tEC8695E06B4FF360C0D7764B5419727F /* RCTPlatformColorUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9C46ED3EA004CAAFEB6FEF89B7AF2F0C /* RCTPlatformColorUtils.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tEC92E4BFA408ADBD17CCB1BB91FAD18D /* RCTMultipartDataTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 416D956A2968ACC6583A761D4976F6FF /* RCTMultipartDataTask.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tEC997A618F6AB5D3076F860176E66314 /* Array.h in Headers */ = {isa = PBXBuildFile; fileRef = 774B7D8E1CE74C04CEDEC68A34DAC344 /* Array.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tEC9F0699E5A4CF55F21FAFE6057B6640 /* Dimension.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F64B0C65747B5007B92D204D69F6EFC /* Dimension.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tECAEA2A0100A0AE72A3E437FD005881E /* RCTSafeAreaViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 285863D5864C49AC3FDF1567E1986DDB /* RCTSafeAreaViewManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tED0D26A030DA133A07D84696D9FD9623 /* RCTSpringAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 513728BBF69F10E478D203C24AE89494 /* RCTSpringAnimation.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\tED0E6B99D524187706AC30E2B53F55D4 /* RCTRootView.h in Headers */ = {isa = PBXBuildFile; fileRef = E54B7595EDCA1E1302CD4C135A4612AA /* RCTRootView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tED158AE6B16238DA0174AC1F4CC24510 /* RCTCallableJSModules.m in Sources */ = {isa = PBXBuildFile; fileRef = F275D02F7C84889FF25195DE592C2875 /* RCTCallableJSModules.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tED1E9F472F169CCBA252A035D6B4AAB5 /* RCTProfileTrampoline-i386.S in Sources */ = {isa = PBXBuildFile; fileRef = 45BE03CDBA0ACF037784CA42392A374F /* RCTProfileTrampoline-i386.S */; };\n\t\tED39B921713470029BD17D4E33380B52 /* Malloc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0E956492B6B4F762B69C00A6496D5AD0 /* Malloc.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\"; }; };\n\t\tED40B12F85AFF22FE31122D1ED1D2FC6 /* React-RCTText-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A063348780E28C80CDFC691EE7F2C78D /* React-RCTText-dummy.m */; };\n\t\tED92DB0641F90C061852E17704C6A69B /* RCTTextTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = 169BFFC72EEA61E28D560B57CD831CD0 /* RCTTextTransform.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tED9BAECED6D57D15B8680D8A9F1FC645 /* Differentiator.h in Headers */ = {isa = PBXBuildFile; fileRef = 881BC753A7C248050EC65DCFDF4A1F50 /* Differentiator.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tEDE01A5FA2DF59BC41E22117D6B82708 /* ShadowView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9BE7B7E0E20673111D75C477804554AF /* ShadowView.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tEDFC9B54A30EA3B68823A2511866FD00 /* RuntimeScheduler_Legacy.h in Headers */ = {isa = PBXBuildFile; fileRef = BF9077AF110CAC64D90AC1EDA3F0B610 /* RuntimeScheduler_Legacy.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tEE0C008A89AB0B833235FE60CBDFD831 /* Transform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D67413975CF3DA436729109845A30A9F /* Transform.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tEE442608008693F4732B90E3E929F104 /* RCTImageComponentView.h in Headers */ = {isa = PBXBuildFile; fileRef = 475E63C49DABE072747B2ACDE9DE0BA5 /* RCTImageComponentView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tEE5FC9431E2D8B9E8E29AE277727E9FA /* Constexpr.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CAB10F1ADF33F5BF62A774463140259 /* Constexpr.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tEE7A0A4956CB8103954A69F4355C44A9 /* RCTAppearance.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4DA4CDB70B04DEA86A7EA3B9F6B6C060 /* RCTAppearance.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness\"; }; };\n\t\tEE907C353DD8D1953A2994C57CBFE26C /* RCTShadowView.h in Headers */ = {isa = PBXBuildFile; fileRef = 070773F376061291576F78B4FAA81792 /* RCTShadowView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tEE9B9C393116AD263A9A4FAF44923FCC /* RCTCxxMethod.mm in Sources */ = {isa = PBXBuildFile; fileRef = 37689F6A0CBD1039206E7D3A8E8E6C68 /* RCTCxxMethod.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tEE9C939880E3A056DAC25A4A496399E4 /* InstanceTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BAC8D0807F88C47E4DFD9F7C7859B82 /* InstanceTarget.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tEEC7964460506D85D5B80B2CDEF357FD /* RCTView.h in Headers */ = {isa = PBXBuildFile; fileRef = 191255608BFC29BB27805F33B002132B /* RCTView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tEEDE418A860EF1BD9051813C5FAF85F5 /* RCTInvalidating.h in Headers */ = {isa = PBXBuildFile; fileRef = BD57ADA2122AD9C7A9EA86F634218B28 /* RCTInvalidating.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tEF146B59AE948C6C6364E8EA84B78330 /* Shell.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C54A77AACDC4EFCA476CD638F5287E1 /* Shell.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tEF4DDB2FEB551BD01E6F56CEB268451E /* to_underlying.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A5CA98B839AFCD15AE40CBB92C32436 /* to_underlying.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tEF4FE23B38609E50DF2186EAA3475E5A /* ScrollViewState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 11B65C1CE4591582924CEE6C134FDC1D /* ScrollViewState.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tEFC8646A57CDAB8216B48B40855D4C6F /* UncaughtExceptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FC9D5FE940DF4FC829E173DF00483AB /* UncaughtExceptions.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tEFDA386A564A1209D1F07193AE52EE6A /* UnbatchedEventQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A50DCAB2950F79811B921C5568362684 /* UnbatchedEventQueue.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tEFF65D240F771DB091184AAF4242F8ED /* RCTAlertController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B0D676D74E69A0350EF5A4FE2794335 /* RCTAlertController.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF03496F8445E3AACE9451043A837CADE /* DynamicPropsUtilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 44C17CFBA5F0AAEEAA6587B65BBD9539 /* DynamicPropsUtilities.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tF0380AC81B8D35CAB3F13DB5217E64AD /* RCTManagedPointer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 032ED6B89EEB973216298316E5766563 /* RCTManagedPointer.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tF05DECC41DE2DA7BAE020C3C695C3179 /* RCTSurfacePresenter.mm in Sources */ = {isa = PBXBuildFile; fileRef = 456E948706116C0DD64555FF6BF85B08 /* RCTSurfacePresenter.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tF071C60F210B522606D5581D12975A4B /* RCTCxxInspectorPackagerConnectionDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = A6D5BA68A42EABFFF8C42BAFF6B32E74 /* RCTCxxInspectorPackagerConnectionDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF08150A3F6B8849BBBF47FFFE171DD70 /* Sse.h in Headers */ = {isa = PBXBuildFile; fileRef = D33BF9E42E6E5CEF3647C99A049FDCA1 /* Sse.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF0ADB8F0BFF669D9F7C16579DA584E6E /* TextProps.h in Headers */ = {isa = PBXBuildFile; fileRef = 89D75BA444F9A4BBB02531A804E2707A /* TextProps.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF0BAC6D2EB66EF5AF8CB77C031595704 /* pt-PT.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 65814B713B9CD521A09E7AF980ECF508 /* pt-PT.lproj */; };\n\t\tF0D13FA0AEDD0027AD18A56E95626A3A /* RCTFabricModalHostViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 34A2168F62C5C8BB1DEEA7D485022A12 /* RCTFabricModalHostViewController.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF0D80CAC8195D04EC5ACCB34AFA9E62C /* RCTRawTextViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 07A90696C4EB8690ED661E5470ECC1C5 /* RCTRawTextViewManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF0EA77CE762E75EE68A7E59C4BC05275 /* ImageState.h in Headers */ = {isa = PBXBuildFile; fileRef = A602AFB5786A8427B22008771FA2A005 /* ImageState.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF102B4B1F081DCBE8CC11C5CCA367B77 /* RCTJSThread.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C4CB2CD0399561C3717DBAB197899E7 /* RCTJSThread.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tF124B4C3977784DC8F6C302D4772EF51 /* TextInputEventEmitter.h in Headers */ = {isa = PBXBuildFile; fileRef = B00F5D1C6554CAE9A8E6D6AE4ECFE335 /* TextInputEventEmitter.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF130698EEF950DE0175BC6B9190FF988 /* CxxTurboModuleUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 13EBFD759F626BF0B8380604322D2E84 /* CxxTurboModuleUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF133C4AD67CB54836E98512AEA7655A8 /* RCTUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = DDE9E8B67A4B7CFB8776B906B7C48F53 /* RCTUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF140F9B4A685AE28A89CA9D9752DA6F4 /* React-runtimescheduler-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 90E8031BF4BBAA174907FCBE801328F4 /* React-runtimescheduler-dummy.m */; };\n\t\tF1E2974DDB47A364980F1BE4690F2775 /* RCTBackedTextInputDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 415370226876D731C7B97EFB54012940 /* RCTBackedTextInputDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF1F4420804BCE4EC9ECF3A3B61CB6FB4 /* RCTThirdPartyFabricComponentsProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = CEC15E29682C912628AE02FBF18DB8D6 /* RCTThirdPartyFabricComponentsProvider.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF239D21943CA530CFE4BFA2B5453635C /* RCTImageLoaderWithAttributionProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = B0F4AFE806278086D88DF7F801882C7B /* RCTImageLoaderWithAttributionProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF242AC86651355EE9C81409CB11CF29E /* SurfaceRegistryBinding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3E71733432C7AC618E5FB1B2C20C71F3 /* SurfaceRegistryBinding.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tF248056FE6F3501E0F531C786FD64037 /* RCTBaseTextViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 854FD3BEF6FF2E1CB963FD11F173D53D /* RCTBaseTextViewManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF24F01675337F85C3D9AF5949695F0AC /* InstanceHandle.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DD6B4C58B299EAE1A3E500A3EDE0002 /* InstanceHandle.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF250802327640CC520B809636DE1F35E /* RecoverableError.h in Headers */ = {isa = PBXBuildFile; fileRef = 2552D17D22931F4E3F05CF400B52A72D /* RecoverableError.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF25611B54DD87B0B21C8E273CC2BDA9A /* SRSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F3CE6C5B501D1E1D2852C705DEDDBC7 /* SRSecurityPolicy.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF25917F0AB2EE892D61580D25F0F5090 /* EventPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = F5D3D4E731B1EF9C93FC2A49ABDAD388 /* EventPayload.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF2708B41187A44B25530C27BCB5DAE44 /* RawPropsKey.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FA93F3F56F84CCD73CC13AB0A744B8A /* RawPropsKey.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF2743CD8B2B3A444BB0D76A7C0FC860C /* propsConversions.h in Headers */ = {isa = PBXBuildFile; fileRef = 713D582F6B367593E27B9841A06592D1 /* propsConversions.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF2B68B0957E8649F575BCACD150607B8 /* RCTTextInputUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 0838EA9EBC4E14FB79309CD7604BB3EE /* RCTTextInputUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF2CF697CCA0405E54F78738FCE93A2F9 /* AsynchronousEventBeat.h in Headers */ = {isa = PBXBuildFile; fileRef = 00C9C239F8FE3A38880888D537B1808F /* AsynchronousEventBeat.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF3175308C1003660267E09A833D010FB /* TouchEventEmitter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 98BB183E94BA72BD56983DB14089B952 /* TouchEventEmitter.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tF369A2BE769607CE5EBCEEAF694E2DCC /* RCTCxxModule.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3E8E0103E022F0A7BE670C99DDEC11FE /* RCTCxxModule.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tF39A7B4D3EA94DBC9F0D8A5266ED5CEA /* JsErrorHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7962560BAE3A465763EDEF2274FEB730 /* JsErrorHandler.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tF3EE1091BDCEE12DBFD1B540E651C997 /* RCTRootShadowView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8817E84E8D2A30EF3D7C5A9EFE82A593 /* RCTRootShadowView.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tF45F8C649B66BE9FEBADCE67FEF12833 /* SysMembarrier.h in Headers */ = {isa = PBXBuildFile; fileRef = DF804855D1456E2DC29B632585EFE659 /* SysMembarrier.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF4CA5518B31E3A44A9E41DC637347B7D /* RootComponentDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 19CE4DC4612BEAACFA7B4D6EA7464CC4 /* RootComponentDescriptor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF4D5FD12FAB7BDC8710108C11EE0B292 /* BatchedEventQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BBF469B26873251B537670801999C9B /* BatchedEventQueue.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF5005D6D96BF20979717A1CF0017BC64 /* ModalHostViewState.h in Headers */ = {isa = PBXBuildFile; fileRef = 26799F85A2F48699DF73E4A5B1EE067A /* ModalHostViewState.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF52BD1C855995DB98A32185DB7BE9145 /* ImageResponseObserverCoordinator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4929D6CBAA4CA6E284FE157B1BD57DA0 /* ImageResponseObserverCoordinator.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tF54989E7C3ECBAA533AB0403B431A6DD /* YogaLayoutableShadowNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 652305363535478E0661CB82413687EB /* YogaLayoutableShadowNode.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tF54F56CC1E8D4C92243DDFCC50ADF87B /* SplitStringSimd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C106E727DA66F2360E99B166ED1F9FBC /* SplitStringSimd.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\"; }; };\n\t\tF599678CBCE5FA3A056E96545DB7916D /* rounding.h in Headers */ = {isa = PBXBuildFile; fileRef = 22B331FFC962649EE96FA4C6FF47CC23 /* rounding.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF62F7C9B6B3D4C75CA27889AF8F5D099 /* NetworkSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = BE5A44A54B39A676EB8ECEF3D4CF8E3D /* NetworkSocket.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF6510C9AC9E136A7463F72A71254AD5E /* UIManagerBinding.h in Headers */ = {isa = PBXBuildFile; fileRef = 79BC7FAFCA2807334B0B7E151993C6FC /* UIManagerBinding.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF65B7A2D7B9A82CCB314BB9D9A79B142 /* RCTNativeModule.mm in Sources */ = {isa = PBXBuildFile; fileRef = AAD779B1757E51874AD3E315AE0911BF /* RCTNativeModule.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tF674F6349A05690574BC66CFB35B60D6 /* Cache.h in Headers */ = {isa = PBXBuildFile; fileRef = E7FC6C39FE3AE33F288AB26DDA6BD6C4 /* Cache.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF689FBD38D86423A5C0CA8860800DB03 /* CacheLocality.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 47ECF5C97B3CE613ADC79EB219369BD2 /* CacheLocality.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\"; }; };\n\t\tF6A7E8738C0E504937CBF3B8B193D026 /* nl.lproj in Resources */ = {isa = PBXBuildFile; fileRef = A3A1C115325E8DCA58106218ADDBA397 /* nl.lproj */; };\n\t\tF736A3086A24F89EC27986F4F5DFE62D /* JSINativeModules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F89962533E4FDDA2F999DA26DF69D135 /* JSINativeModules.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tF76E0AB3B56CF65826F916918C8E3B05 /* demangle.cc in Sources */ = {isa = PBXBuildFile; fileRef = BCA4B995FCA633E532EC78345A862CC7 /* demangle.cc */; settings = {COMPILER_FLAGS = \"-Wno-shorten-64-to-32\"; }; };\n\t\tF7C692B78A07D122735D336A834ED83B /* SlowFingerprint.h in Headers */ = {isa = PBXBuildFile; fileRef = 985183EC5FB028AC6A6FCC26CC91696A /* SlowFingerprint.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF7CCD35E242791EAD335DBA830CAF627 /* RCTUITextView.h in Headers */ = {isa = PBXBuildFile; fileRef = F6312EB0499C783D68B98C5D0AFAB4A7 /* RCTUITextView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF7E4395AE1128CA640E2737A237DA346 /* RCTLegacyViewManagerInteropCoordinatorAdapter.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51CBEFF89517A9EE045E0A3F9D3939B5 /* RCTLegacyViewManagerInteropCoordinatorAdapter.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tF8097A05D32126DC5E6019E1759235FF /* RCTMultipartStreamReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 65125E07440A02A058E96A2DAE8C8438 /* RCTMultipartStreamReader.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tF81C865E5B5533C436995EC5E52A4B02 /* HeterogeneousAccess.h in Headers */ = {isa = PBXBuildFile; fileRef = D8C79C91A7FCAF5C973C5E74CCAC73C5 /* HeterogeneousAccess.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF863DC654B26CC6295C8F8D909B5C229 /* RCTInitializing.h in Headers */ = {isa = PBXBuildFile; fileRef = F65EDF84A53562B923789233A6319309 /* RCTInitializing.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF8C937BE0952BA6404982198BF2D4323 /* RCTLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C4FC7D25DF3E8899A55391A2FBA5740 /* RCTLayout.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tF8E1AB2A19BB2FCCD643BFF425B2DA3A /* ExecutionContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8231A4F6131F749AEA92BF670465B6DD /* ExecutionContext.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tF8F6918DEA2269A706DB0786EA73D733 /* Base.h in Headers */ = {isa = PBXBuildFile; fileRef = 3018115A5F8C04479A8AE64B102BE2C5 /* Base.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF901B09A64206BD8481364EF79C7D52B /* RCTAccessibilityElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B0AF45BF7087251B0C904F885ED8178D /* RCTAccessibilityElement.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF92D7374EFCC337E0153EF9BF6E660A5 /* FormatArg.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F8E380C0D44C30A7EB64835C56687EA /* FormatArg.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF97D444DBAEAF3A5C876EEFA7FBA1A44 /* ScopeGuard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A6BB42C32564D7C067A75160B7457050 /* ScopeGuard.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DFOLLY_HAVE_PTHREAD=1 -Wno-documentation -faligned-new\"; }; };\n\t\tF9A183D9BEA7E6725F4DD901F0583A00 /* FMDatabasePool.h in Headers */ = {isa = PBXBuildFile; fileRef = FFA2A883F42A90CB3B4B86BA995A7239 /* FMDatabasePool.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF9E214AD4CE39C95F7CB3A7DF2521A86 /* RCTModulesConformingToProtocolsProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 033B1F5C19B781492F29A47DA4EFD3A4 /* RCTModulesConformingToProtocolsProvider.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF9E6052152BB44E91B62957A180638AB /* ko.lproj in Resources */ = {isa = PBXBuildFile; fileRef = AD18C7CE1E7A5577FEB2D0F7000A7E5F /* ko.lproj */; };\n\t\tF9E8743FF34708E334614F893FBF83B1 /* RCTMultipartDataTask.h in Headers */ = {isa = PBXBuildFile; fileRef = AFB08F045558C6DADC89C84CC798C71B /* RCTMultipartDataTask.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tF9FBD5F032C5E741A03EB97EB74867A9 /* RCTSyncImageManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34310C6EE4D078D016C21151602FCF90 /* RCTSyncImageManager.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tFA31953D65A12B9338B2363FCC9CC4C9 /* RCTProfileTrampoline-arm.S in Sources */ = {isa = PBXBuildFile; fileRef = 942322E848A28FE125A1C9A84F16D548 /* RCTProfileTrampoline-arm.S */; };\n\t\tFA3876E333033226CDF04768A947C7EC /* UIManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AF94AB49F3DFCBD87BA7862CC44A3D1D /* UIManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFA441FA915776C369C08804D23D7DA51 /* Lazy.h in Headers */ = {isa = PBXBuildFile; fileRef = F07A956888DB0839EE8710AF70182297 /* Lazy.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFA517A5F883F194823AC6289673A6563 /* MicroSpinLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A7404AB8D8964BFE0531C56682163D1 /* MicroSpinLock.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFA7F0D692EE1B5D551494F3059D5F30E /* MountingTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = A23EC0B053A41A76F8AE3B595FF6B87A /* MountingTransaction.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFA80E10B2923469227CEB02B29ABD5E1 /* UIView+React.m in Sources */ = {isa = PBXBuildFile; fileRef = A5B22DA0749C539DAE387FAB7E1507FC /* UIView+React.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tFA97A04B1279EB33668144798ED22447 /* Ordering.h in Headers */ = {isa = PBXBuildFile; fileRef = C4EC4C02AFACADF949E7010ACACF4B85 /* Ordering.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFAA0D40E6EB5DA76CA69A3F12F7705E2 /* ThreadId.h in Headers */ = {isa = PBXBuildFile; fileRef = F69D2C7C3E6181971A1F8D04108BC7D4 /* ThreadId.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFAB9F94A3091F4A570F19CB366F46516 /* RuntimeSchedulerCallInvoker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AEF49BE28E7D87B31F7411604BFADC49 /* RuntimeSchedulerCallInvoker.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tFACA8109B0EC6154E355B2B3F3CE7F17 /* InstanceAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 766F8957B06DFCFCD48D2426262EFF74 /* InstanceAgent.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFB26DBB9C1BDDF94A43349306AFBFEC5 /* utils.h in Headers */ = {isa = PBXBuildFile; fileRef = A4D384B56D16CD122C5BFFBD16EFEF46 /* utils.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFB51B40685C9A6010A007BE6CA582655 /* RCTInspector.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D16D5EC0CC9F855658FDAD755B9B8F7 /* RCTInspector.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFB9F5AADA3A6FAA282D800FC90BD863C /* RCTRootContentView.h in Headers */ = {isa = PBXBuildFile; fileRef = BD8C1858F1B1566DD6C1B389057F984F /* RCTRootContentView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFBAC357014D2034EA5D2C9B1B17E5E32 /* Baton.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F4BF0D6B00930EFF4155DC9B790AFDD /* Baton.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFBC28207A3782629D8ECB7F7D22E1FA6 /* RCTRefreshControl.h in Headers */ = {isa = PBXBuildFile; fileRef = CD16933416FD2EC375DDCB34E3995C89 /* RCTRefreshControl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFBD08445396B14C26414793EBE1D352D /* InstanceTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E6FD88D73CEF39AD0A723267614B20B6 /* InstanceTarget.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tFBD75089B4755555A82486ACFDC1F103 /* FMDatabaseQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = A45E1BB2ACE5150BEF6C4801CE86896C /* FMDatabaseQueue.m */; settings = {COMPILER_FLAGS = \"-Os\"; }; };\n\t\tFBD79427FC052DF19357B1FE491B6D93 /* Task.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 750B7BB6414518C2A827B8877B15A353 /* Task.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tFBDD186A5D7B5E12FB15B56B23F595A5 /* UnstableLegacyViewManagerAutomaticShadowNode.h in Headers */ = {isa = PBXBuildFile; fileRef = EDB46ABA9CC235068ECA4A848DB17EE8 /* UnstableLegacyViewManagerAutomaticShadowNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFBF16827FFCE880C6C9310D61C773760 /* SimpleSimdStringUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = AB6B32F88010B897C8CBEDA90F51EF81 /* SimpleSimdStringUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFC40472096744F71321EB900227DBDCF /* RCTNativeModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 4489977C9B5B35F7F5A112139189B7E0 /* RCTNativeModule.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFC4BA81798FA9C1FB1C0064280A6D8FA /* RCTInputAccessoryViewContent.h in Headers */ = {isa = PBXBuildFile; fileRef = 48151421313275AE47A1F36C49F1AC43 /* RCTInputAccessoryViewContent.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFC73229D9DC21849A4BF5E101EF69154 /* RCTDynamicTypeRamp.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C5791AD6F4A42E6F15A4AE3E13672C9 /* RCTDynamicTypeRamp.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFC894BAE1C98F8C86943904E2C83A368 /* JsArgumentHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = A74ED5352ACAC24B76D223C19F8C62F3 /* JsArgumentHelpers.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFCFBAB68412C83F9EC2FB13D4130D695 /* Object.h in Headers */ = {isa = PBXBuildFile; fileRef = 342244AFF6DAC97CF99A001A770A5E4F /* Object.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFD1412F7EA27E8EC3820F7587AE22248 /* RCTRawTextViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 07A90696C4EB8690ED661E5470ECC1C5 /* RCTRawTextViewManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFD2289F6888F0B2154D3A3018727535B /* RCTTextTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = 169BFFC72EEA61E28D560B57CD831CD0 /* RCTTextTransform.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFD2E98D9CB060B5341099B9ADB7B098D /* Foreach-inl.h in Headers */ = {isa = PBXBuildFile; fileRef = A6072D5AD4221696B9DE9D90F1EB0439 /* Foreach-inl.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFD39522D224A22B7B91E3BFB6D598CB4 /* RuntimeSchedulerClock.h in Headers */ = {isa = PBXBuildFile; fileRef = D7139195D968D34865DEE54652AEED4C /* RuntimeSchedulerClock.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFD3EB3EB8AB44B1B40F04D32CCAD4388 /* ranges.h in Headers */ = {isa = PBXBuildFile; fileRef = 75A1EC0889B2FF4178C4B15A8C8EAE88 /* ranges.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFD6C993EEC7B56C5CD8F3E8DDDE62EA4 /* RCTVirtualTextShadowView.h in Headers */ = {isa = PBXBuildFile; fileRef = E0B0A85C6C1A686DD387938C318B3E03 /* RCTVirtualTextShadowView.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFDA9294EC4CF28A1AE0E07DD15E8A938 /* TextInputComponentDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 63CBEBB4485380F9D7F6FBA437DF4E46 /* TextInputComponentDescriptor.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFDACFB7A65FFD5270F807735B27D1DBA /* RCTLocalizedString.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4181C0A4A1994121AF233A5C57DEC990 /* RCTLocalizedString.mm */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tFDDF426085594202FFB84A5A244FF421 /* RCTLayoutAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F5C6F9D16A1A659B8CB769DDEC445DE /* RCTLayoutAnimation.m */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -DUSE_HERMES=1\"; }; };\n\t\tFE12A07411DA6DBDF3D79CB4FB59C8AD /* RCTBundleURLProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = E3339D6705C5DCAD1A55DFC2EA80C646 /* RCTBundleURLProvider.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFE246A8CBD588F3885A9F3746184B7A7 /* debugStringConvertibleUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 77F3BA61BC36947AE25324E0B86A12E5 /* debugStringConvertibleUtils.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFE2957561C5BA3A18683A03C5EDC995C /* Libgen.h in Headers */ = {isa = PBXBuildFile; fileRef = EF23890C4D36D03EA1DD037AFEFF15C6 /* Libgen.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFE3962EC610FE961F8B6C1D916E9C04A /* SRHash.h in Headers */ = {isa = PBXBuildFile; fileRef = BC384C199B1347B14BCE2CC3091CC47B /* SRHash.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFE80AB3F468FEBAF4F9FD0883C9C3FBA /* TextInputProps.h in Headers */ = {isa = PBXBuildFile; fileRef = A5419C82AB201A4405D35E3F97C867FB /* TextInputProps.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFE877895E55021546425F770C014D9F8 /* es.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 70D50FBA71B5522FC8324C5638AAABC4 /* es.lproj */; };\n\t\tFE9A7BCB54E09D6B3715DF452B959454 /* InstanceHandle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2A29138DBA1381888F4701360BF91338 /* InstanceHandle.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tFEC88C9D9E42428AEBEA8C790889E70D /* RCTInterpolationAnimatedNode.h in Headers */ = {isa = PBXBuildFile; fileRef = F78A76F0BB8E6B3D92D46FB8C08FF72B /* RCTInterpolationAnimatedNode.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFECF2B95FB337E11258FC827F97C5516 /* Libunwind.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C46B7B386338A3CF2226940A341403E /* Libunwind.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFEEC6DC9DB1C67C87F3FAAA274B199CC /* Baseline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BD47E6AE7775E09A0E4B2548E31BD9A8 /* Baseline.cpp */; settings = {COMPILER_FLAGS = \"-fno-omit-frame-pointer -fexceptions -Wall -Werror -std=c++20 -fPIC -fno-objc-arc\"; }; };\n\t\tFEF9BDB3467FE72D2EE093812C803692 /* LegacyViewManagerInteropViewProps.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D7CB8AC94086CDE9ABBF0A55442AE9F /* LegacyViewManagerInteropViewProps.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFF172C3FABCC4E7394876885F64E36D4 /* RawPropsKeyMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8BA983DC0304E53A494B8BC8368D3C /* RawPropsKeyMap.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tFF2681C5F344F1C15BB22CAB3D37600B /* IntrusiveHeap.h in Headers */ = {isa = PBXBuildFile; fileRef = B9FF361F61B7A378542F02A30393DF63 /* IntrusiveHeap.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFF3BCD88224B32B38359A33CA2787889 /* jsi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1340E22099179F463C3487BAB8420980 /* jsi.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tFF54B55BA08CEBF4015B4B981EEB17F2 /* LegacyViewManagerInteropViewEventEmitter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 938D7993FE352F22F90BB01751E733E9 /* LegacyViewManagerInteropViewEventEmitter.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\"; }; };\n\t\tFF76D3A832ADFED4BFA28BED56073394 /* SocketFileDescriptorMap.h in Headers */ = {isa = PBXBuildFile; fileRef = E6362057149C3EE30EE5985649A70E12 /* SocketFileDescriptorMap.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFF9D0574D3726083613F591EB3EB608E /* RCTImageEditingManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4242FEAF60FC3ACE3D98A5A77B65D724 /* RCTImageEditingManager.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFFB0AD6EF400000E5DB3695E6D232D13 /* Color.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8C66234F6FC8A3E3EADCA342B130FB54 /* Color.cpp */; settings = {COMPILER_FLAGS = \"-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation\"; }; };\n\t\tFFED29E1CC4B6F3236B8A5D380AC3447 /* MapUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D6609F1FFDAA711D16BE1CBBFCEF19C /* MapUtil.h */; settings = {ATTRIBUTES = (Project, ); }; };\n\t\tFFFD58B8888202E20B594C6DEDBCBA07 /* RCTAnimationPlugins.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AE808F4B51B3F24D61558A014CF22A5 /* RCTAnimationPlugins.h */; settings = {ATTRIBUTES = (Project, ); }; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t0289B273CF2E170BB6BE507F5FFA82D0 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2AB2EF542954AB1C999E03BFEF8DE806;\n\t\t\tremoteInfo = DoubleConversion;\n\t\t};\n\t\t032B7BB6E4D024DB5071E49DEDDDAC9C /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 52C3F83DB80E5D527EDA54FA1DE5470A;\n\t\t\tremoteInfo = \"React-runtimescheduler\";\n\t\t};\n\t\t03E24E6D4CF66A0B6865B7EA2B2BCDD4 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 985FEA01F314F3C00F0C1E1181E6C4A5;\n\t\t\tremoteInfo = \"hermes-engine\";\n\t\t};\n\t\t04672A342746A9D23A216E3D51356039 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 1BEE828C124E6416179B904A9F66D794;\n\t\t\tremoteInfo = React;\n\t\t};\n\t\t04F2717E51D21D9611B67F123B87B7E7 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 0C050E11C4409D3BFAE9CC219C4D6195;\n\t\t\tremoteInfo = \"React-debug\";\n\t\t};\n\t\t0557F03CE366CCC0279E44D78CF0BEF8 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2681CB7EF647E61F4F9A43029C235607;\n\t\t\tremoteInfo = \"React-callinvoker\";\n\t\t};\n\t\t056D3BFB7D1D8A7D376FAFA2B66FB8C8 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EC55D52694092A9D0E6A78EB01207EB5;\n\t\t\tremoteInfo = \"RCT-Folly\";\n\t\t};\n\t\t05D52A397C8C50527687630B5436F9CC /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = FA877ADC442CB19CF61793D234C8B131;\n\t\t\tremoteInfo = \"React-jsi\";\n\t\t};\n\t\t0661428190F98F0AEA09E706F72C0E14 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 463F41A7E8B252F8AC5024DA1F4AF6DA;\n\t\t\tremoteInfo = \"React-cxxreact\";\n\t\t};\n\t\t06708061FBD54D734CD69C96FF4BC80B /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EC55D52694092A9D0E6A78EB01207EB5;\n\t\t\tremoteInfo = \"RCT-Folly\";\n\t\t};\n\t\t072B6EE4F36C319A81BD03E2D2FD3B6C /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 4F265533AAB7C8985856EC78A33164BB;\n\t\t\tremoteInfo = \"React-RCTImage\";\n\t\t};\n\t\t0743DC1CCDBCCF6C3ECD3224DB5EF4B7 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D0EFEFB685D97280256C559792236873;\n\t\t\tremoteInfo = glog;\n\t\t};\n\t\t07FEE5CA0F570179CD895CC0EBCEF25A /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D0EFEFB685D97280256C559792236873;\n\t\t\tremoteInfo = glog;\n\t\t};\n\t\t0841A812345E34F753B65CB24CDDECE4 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = B6D5DD49633DFF0657B8C3F08EB3ABA9;\n\t\t\tremoteInfo = ReactCommon;\n\t\t};\n\t\t08479658374D8A84889129BFF1758177 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = E7E7CE52C8C68B17224FF8C262D80ABF;\n\t\t\tremoteInfo = RCTRequired;\n\t\t};\n\t\t08DDB51BD53715626AC1CFA447E04B23 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 28CE447E6F9C5F0EECC0CDD607D06A24;\n\t\t\tremoteInfo = \"React-featureflags\";\n\t\t};\n\t\t0934208EB4E70167C10A41B542FE527B /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = FA877ADC442CB19CF61793D234C8B131;\n\t\t\tremoteInfo = \"React-jsi\";\n\t\t};\n\t\t099FD4302E1571C43E7CC5DABCE768E9 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 30621D5A9764AC0BD9D02E87B2EA6665;\n\t\t\tremoteInfo = \"React-utils\";\n\t\t};\n\t\t09E19762D2B4D46BC3E1439FDA65CFFB /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 54EB12219122432FA744088BC5A680D2;\n\t\t\tremoteInfo = \"React-runtimeexecutor\";\n\t\t};\n\t\t0A67297851E496410FDCA56C2F856355 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 0C050E11C4409D3BFAE9CC219C4D6195;\n\t\t\tremoteInfo = \"React-debug\";\n\t\t};\n\t\t0B1EB341796A0626399359C3ED0B7588 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = F1E2583679398CB5F4D2B3272E9B198F;\n\t\t\tremoteInfo = \"React-perflogger\";\n\t\t};\n\t\t0BBE9531017E2DAF1FE8803E7ECD8206 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D20469A9A1E5CFB26045EAEBE3F88E5E;\n\t\t\tremoteInfo = RCTTypeSafety;\n\t\t};\n\t\t0BD3FE504C29567775D9641CEBB9B2B5 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D0EFEFB685D97280256C559792236873;\n\t\t\tremoteInfo = glog;\n\t\t};\n\t\t0C03E6CB4D11169816C5B19652383FE6 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 985FEA01F314F3C00F0C1E1181E6C4A5;\n\t\t\tremoteInfo = \"hermes-engine\";\n\t\t};\n\t\t0C2AF7FB43C100B3E1DB0861160AA83D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 8DED5282246ABFC24F4460D3066C84A0;\n\t\t\tremoteInfo = \"React-RCTFabric\";\n\t\t};\n\t\t0C7EAE61CE963E0C8DB1A375BF29D31F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 0C050E11C4409D3BFAE9CC219C4D6195;\n\t\t\tremoteInfo = \"React-debug\";\n\t\t};\n\t\t0C825C2B1718A18CE8B22578116AD9D9 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 7ACAA9BE580DD31A5CB9D97C45D9492D;\n\t\t\tremoteInfo = \"React-Core\";\n\t\t};\n\t\t0D062956D3247F5A6F2348C5E96A2381 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = B69D68A280EC3E60655BD2C715ACB004;\n\t\t\tremoteInfo = \"React-nativeconfig\";\n\t\t};\n\t\t0DF13E7D33E4641BF3808510F4CD10FD /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 463F41A7E8B252F8AC5024DA1F4AF6DA;\n\t\t\tremoteInfo = \"React-cxxreact\";\n\t\t};\n\t\t0DF9EB235A025A0E7225BD3835E9A8CC /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 52C3F83DB80E5D527EDA54FA1DE5470A;\n\t\t\tremoteInfo = \"React-runtimescheduler\";\n\t\t};\n\t\t0EF26FFCE4BA23EC50BD19A5D1FEBBEA /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = FA877ADC442CB19CF61793D234C8B131;\n\t\t\tremoteInfo = \"React-jsi\";\n\t\t};\n\t\t0F6F6C6360E16A9A1264290F55453760 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 7ACAA9BE580DD31A5CB9D97C45D9492D;\n\t\t\tremoteInfo = \"React-Core\";\n\t\t};\n\t\t0FE34725473963448614574DB7872734 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 091003D98BDA80B01B9E35CADE3947F0;\n\t\t\tremoteInfo = \"React-Mapbuffer\";\n\t\t};\n\t\t1135D39403406304B5E3DE1CC9D85673 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EC55D52694092A9D0E6A78EB01207EB5;\n\t\t\tremoteInfo = \"RCT-Folly\";\n\t\t};\n\t\t118C58C79101D96E6FC10ED86A908701 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = E7E7CE52C8C68B17224FF8C262D80ABF;\n\t\t\tremoteInfo = RCTRequired;\n\t\t};\n\t\t11F2156C55352C7A4376481AC963683D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2AB2EF542954AB1C999E03BFEF8DE806;\n\t\t\tremoteInfo = DoubleConversion;\n\t\t};\n\t\t1250E130FB93020268E26EB59677362A /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EC55D52694092A9D0E6A78EB01207EB5;\n\t\t\tremoteInfo = \"RCT-Folly\";\n\t\t};\n\t\t12CBD29BC4AA7FCAC2191790822A8408 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 091003D98BDA80B01B9E35CADE3947F0;\n\t\t\tremoteInfo = \"React-Mapbuffer\";\n\t\t};\n\t\t135C6D27FB0B505651E80CFC705195AB /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2681CB7EF647E61F4F9A43029C235607;\n\t\t\tremoteInfo = \"React-callinvoker\";\n\t\t};\n\t\t13788842E11AC14A80C18C631F34DD4B /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 20F066A71CEA5EECC7463413442F2B77;\n\t\t\tremoteInfo = \"React-hermes\";\n\t\t};\n\t\t139B8D68D2E558E28083C605874A0BD6 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 7ACAA9BE580DD31A5CB9D97C45D9492D;\n\t\t\tremoteInfo = \"React-Core\";\n\t\t};\n\t\t14CA7990CDEB12D4182EC6BF39D5E9D3 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = C7F600C052808C7C987C26EC74B3A290;\n\t\t\tremoteInfo = \"React-RuntimeCore\";\n\t\t};\n\t\t15CBA2BD8EF64756C0767A60F7567316 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D0EFEFB685D97280256C559792236873;\n\t\t\tremoteInfo = glog;\n\t\t};\n\t\t15FC817CF5576B0F64C53F4746531CBE /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2681CB7EF647E61F4F9A43029C235607;\n\t\t\tremoteInfo = \"React-callinvoker\";\n\t\t};\n\t\t18DAF4BB014890F9475879A59FA277D5 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2AB2EF542954AB1C999E03BFEF8DE806;\n\t\t\tremoteInfo = DoubleConversion;\n\t\t};\n\t\t18FF611EE7F2DCFF095EE41573494D81 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 4F265533AAB7C8985856EC78A33164BB;\n\t\t\tremoteInfo = \"React-RCTImage\";\n\t\t};\n\t\t1970E63906E04E6F5CC4059A6A594441 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = B69D68A280EC3E60655BD2C715ACB004;\n\t\t\tremoteInfo = \"React-nativeconfig\";\n\t\t};\n\t\t1A02A3242E08B500151ABD06A45B91A0 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = B6D5DD49633DFF0657B8C3F08EB3ABA9;\n\t\t\tremoteInfo = ReactCommon;\n\t\t};\n\t\t1A311E894E75265D572441282B7479A6 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = E7E7CE52C8C68B17224FF8C262D80ABF;\n\t\t\tremoteInfo = RCTRequired;\n\t\t};\n\t\t1A4CA94B561EE5E2CA5F1A7FEA2624BA /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 30621D5A9764AC0BD9D02E87B2EA6665;\n\t\t\tremoteInfo = \"React-utils\";\n\t\t};\n\t\t1A500E4E5049684BC5D74DB12E6823B0 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D0EFEFB685D97280256C559792236873;\n\t\t\tremoteInfo = glog;\n\t\t};\n\t\t1AC57A05EB292291B8BBEB18785A89FD /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = B6D5DD49633DFF0657B8C3F08EB3ABA9;\n\t\t\tremoteInfo = ReactCommon;\n\t\t};\n\t\t1B6912BA8E189A53A0F2DFB318AD1DB8 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DA0709CAAD589C6E7963495210438021;\n\t\t\tremoteInfo = \"React-jsiexecutor\";\n\t\t};\n\t\t1C26555D9AAE15CA4E6E78862CB2F8D7 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = B5E1D7706FCB7EC5FF39F8CDA49A5653;\n\t\t\tremoteInfo = \"React-ImageManager\";\n\t\t};\n\t\t1C2EB609658547D5066D047531E2E9CA /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EC55D52694092A9D0E6A78EB01207EB5;\n\t\t\tremoteInfo = \"RCT-Folly\";\n\t\t};\n\t\t1C9ACB0F83A2D9C2A753C9B8B7CE9AAD /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2AB2EF542954AB1C999E03BFEF8DE806;\n\t\t\tremoteInfo = DoubleConversion;\n\t\t};\n\t\t1E121B19C6FC0D95DB4FD3A9D9DFF81B /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2AB2EF542954AB1C999E03BFEF8DE806;\n\t\t\tremoteInfo = DoubleConversion;\n\t\t};\n\t\t1E43F670654169F733EBF0224B62C200 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 02B79DFED924FA19CA90EC69614733E1;\n\t\t\tremoteInfo = fmt;\n\t\t};\n\t\t1F19152BF279C2350CFF110149351FCA /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EC55D52694092A9D0E6A78EB01207EB5;\n\t\t\tremoteInfo = \"RCT-Folly\";\n\t\t};\n\t\t1F447B67D4490096D87F14FD5876C024 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 20F066A71CEA5EECC7463413442F2B77;\n\t\t\tremoteInfo = \"React-hermes\";\n\t\t};\n\t\t1F710C3EC863E54A48B767BB86D76737 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = B41E34C6B259B9994C513BE178912491;\n\t\t\tremoteInfo = \"React-rncore\";\n\t\t};\n\t\t1FBDF52E2B645612778A2C4BCAF5EEC0 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 463F41A7E8B252F8AC5024DA1F4AF6DA;\n\t\t\tremoteInfo = \"React-cxxreact\";\n\t\t};\n\t\t21E5AFABF1F1B440FA387F63E1ECDAE1 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 680299219D3A48D42A648AF6706275A9;\n\t\t\tremoteInfo = \"React-RCTSettings\";\n\t\t};\n\t\t2218ADE51E9ABC2171A5F0151EFD97C5 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 4BDD270EACFE5730793AEF0B9BCCBA31;\n\t\t\tremoteInfo = \"React-graphics\";\n\t\t};\n\t\t2289B5373AAC50ECC91CFE1B2F2350BB /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 985FEA01F314F3C00F0C1E1181E6C4A5;\n\t\t\tremoteInfo = \"hermes-engine\";\n\t\t};\n\t\t22A5E21755926CF3126E545874B29A8B /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5807741745EB757C97C09F2D56726BE0;\n\t\t\tremoteInfo = \"React-NativeModulesApple\";\n\t\t};\n\t\t230B69802ADF4E4DE0EC880F086EDF62 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = B6D5DD49633DFF0657B8C3F08EB3ABA9;\n\t\t\tremoteInfo = ReactCommon;\n\t\t};\n\t\t235EEBD6BE88E5969BC95CCFAE81FDDD /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 53D121F9F9BB0F8AC1C94A12C5A8572F;\n\t\t\tremoteInfo = \"React-RCTVibration\";\n\t\t};\n\t\t23A81CB39D9D41819B69211A5E314A35 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 02B79DFED924FA19CA90EC69614733E1;\n\t\t\tremoteInfo = fmt;\n\t\t};\n\t\t24F856B5ACF07FE391D964E89D193522 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 28CE447E6F9C5F0EECC0CDD607D06A24;\n\t\t\tremoteInfo = \"React-featureflags\";\n\t\t};\n\t\t25F35441911D6EBBD57C36461F4A2942 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 718331030FAA6D88E74D4B2240BB4AC8;\n\t\t\tremoteInfo = \"React-jsitracing\";\n\t\t};\n\t\t2602E2C102AE096CF1AB67655B312CC2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DA0709CAAD589C6E7963495210438021;\n\t\t\tremoteInfo = \"React-jsiexecutor\";\n\t\t};\n\t\t264D33E2CA9CA59026ACCC8C30F173A1 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 45B79B0C60C74716DCD2AD7BE782A719;\n\t\t\tremoteInfo = simdjson;\n\t\t};\n\t\t26D71B5A7F452CFB83A0E25D8921B661 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EC55D52694092A9D0E6A78EB01207EB5;\n\t\t\tremoteInfo = \"RCT-Folly\";\n\t\t};\n\t\t26E8C064D0C350303EC25814160E5507 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EC55D52694092A9D0E6A78EB01207EB5;\n\t\t\tremoteInfo = \"RCT-Folly\";\n\t\t};\n\t\t27227816A0AC9C79094F475A7E539F7D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 7ACAA9BE580DD31A5CB9D97C45D9492D;\n\t\t\tremoteInfo = \"React-Core\";\n\t\t};\n\t\t2787D1BB90BE7254AF9CAA44E76EDF74 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 083B602EA19B4AD50EC53C0602F29A7D;\n\t\t\tremoteInfo = \"React-logger\";\n\t\t};\n\t\t27BE5FAC5CF6C00EE6638453367C29EA /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 95D98F901D07557EF7CA38D3F03832C5;\n\t\t\tremoteInfo = \"React-RCTBlob\";\n\t\t};\n\t\t283F65F4310F568BCD5E39DD9008F1A3 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = FA877ADC442CB19CF61793D234C8B131;\n\t\t\tremoteInfo = \"React-jsi\";\n\t\t};\n\t\t285E1159FDF1A7A09F6A29288FE2D2C3 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 50DBAF155FAFB994E067BA8820221EDF;\n\t\t\tremoteInfo = \"React-Fabric\";\n\t\t};\n\t\t287546B862BA34A1C2963EFC525D4BB6 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 1948D0B63D2CF6A48E18B0B292BC6091;\n\t\t\tremoteInfo = SocketRocket;\n\t\t};\n\t\t28996E64427C63ECE41813C12F1D9F45 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 0EF07AE1AD53436E8D2B9B0086EA0163;\n\t\t\tremoteInfo = \"React-RuntimeHermes\";\n\t\t};\n\t\t28B7BD8A9C0D88C589EF663047A7D58E /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5211B5AB7B81060AA8E78614DD75D3AB;\n\t\t\tremoteInfo = RCTDeprecation;\n\t\t};\n\t\t29D99B6382EC442BC3E615262B0BCBED /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 53D121F9F9BB0F8AC1C94A12C5A8572F;\n\t\t\tremoteInfo = \"React-RCTVibration\";\n\t\t};\n\t\t2A2CA8F5135943250F0EF215F952D316 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 30621D5A9764AC0BD9D02E87B2EA6665;\n\t\t\tremoteInfo = \"React-utils\";\n\t\t};\n\t\t2B40EAAE1015F3040D2BFC3B84B8C0A2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D20469A9A1E5CFB26045EAEBE3F88E5E;\n\t\t\tremoteInfo = RCTTypeSafety;\n\t\t};\n\t\t2C70C777E30B0F495E6558B96A5DEC57 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EC55D52694092A9D0E6A78EB01207EB5;\n\t\t\tremoteInfo = \"RCT-Folly\";\n\t\t};\n\t\t2C77EA8CB35EF7DA9E933C9A98AC198E /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = F7D033C4C128EECAA020990641FA985F;\n\t\t\tremoteInfo = \"React-jsinspector\";\n\t\t};\n\t\t2CABC33625B79BE358899318EC118B55 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 02B79DFED924FA19CA90EC69614733E1;\n\t\t\tremoteInfo = fmt;\n\t\t};\n\t\t2D200046FECD427C246D4E124454B60A /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = FA877ADC442CB19CF61793D234C8B131;\n\t\t\tremoteInfo = \"React-jsi\";\n\t\t};\n\t\t2D8279F103F61BD0E0316515B2A4FE66 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D0EFEFB685D97280256C559792236873;\n\t\t\tremoteInfo = glog;\n\t\t};\n\t\t2DD25C6A74A6A39833B87AE38122594D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 985FEA01F314F3C00F0C1E1181E6C4A5;\n\t\t\tremoteInfo = \"hermes-engine\";\n\t\t};\n\t\t2F14569C24AAF9E98FAFC248465DC9E5 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DBD2D83E10F8B7D3F4E0E34E6A9FCFA6;\n\t\t\tremoteInfo = \"React-RCTText\";\n\t\t};\n\t\t2F88905B01E2F8DF3A2DA844E7BC7E4E /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D0EFEFB685D97280256C559792236873;\n\t\t\tremoteInfo = glog;\n\t\t};\n\t\t2FEFCC000DB45DE8C15B1E1827963871 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = B6D5DD49633DFF0657B8C3F08EB3ABA9;\n\t\t\tremoteInfo = ReactCommon;\n\t\t};\n\t\t30052770A781E8047C3AB8E1C984E45A /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 28CE447E6F9C5F0EECC0CDD607D06A24;\n\t\t\tremoteInfo = \"React-featureflags\";\n\t\t};\n\t\t3096A1AE919BEDEEAA93EBC59209A823 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 7ACAA9BE580DD31A5CB9D97C45D9492D;\n\t\t\tremoteInfo = \"React-Core\";\n\t\t};\n\t\t3121C4A5AF5E102C5C18BC41E9B82EF6 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2B25F90D819B9ADF2AF2D8733A890333;\n\t\t\tremoteInfo = Yoga;\n\t\t};\n\t\t31F652266E48E74C758B9C69EF3CD90F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D0EFEFB685D97280256C559792236873;\n\t\t\tremoteInfo = glog;\n\t\t};\n\t\t3249A44E515B7313CDC9965DDD33667F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 1BEE828C124E6416179B904A9F66D794;\n\t\t\tremoteInfo = React;\n\t\t};\n\t\t336517C4087738649F1E1F4AB8F8519E /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 50DBAF155FAFB994E067BA8820221EDF;\n\t\t\tremoteInfo = \"React-Fabric\";\n\t\t};\n\t\t338D244FA8653B3233AA255D4D1925CC /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EC55D52694092A9D0E6A78EB01207EB5;\n\t\t\tremoteInfo = \"RCT-Folly\";\n\t\t};\n\t\t33DBC0FBD8A36E91BF0D798BC0FD460F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 02B79DFED924FA19CA90EC69614733E1;\n\t\t\tremoteInfo = fmt;\n\t\t};\n\t\t34B293D00EA654992B64C623FB73669A /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5807741745EB757C97C09F2D56726BE0;\n\t\t\tremoteInfo = \"React-NativeModulesApple\";\n\t\t};\n\t\t34CA178C3014A040FF0B0E0EC2D01AC5 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = FA877ADC442CB19CF61793D234C8B131;\n\t\t\tremoteInfo = \"React-jsi\";\n\t\t};\n\t\t3550D2C7B73010DD94B2507B76857F52 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = B69D68A280EC3E60655BD2C715ACB004;\n\t\t\tremoteInfo = \"React-nativeconfig\";\n\t\t};\n\t\t35C37DC0ECDD2A729AC821C38BB059FB /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D0EFEFB685D97280256C559792236873;\n\t\t\tremoteInfo = glog;\n\t\t};\n\t\t364D2CA644CE7284EB0D9AA88411CBF4 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 651511D7DA7F07F9FC9AA40A2E86270D;\n\t\t\tremoteInfo = \"React-RCTNetwork\";\n\t\t};\n\t\t36D6711AE32882ED3092979037CC3405 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = C7F600C052808C7C987C26EC74B3A290;\n\t\t\tremoteInfo = \"React-RuntimeCore\";\n\t\t};\n\t\t37BFECCBE92D5B1175C2BF3EEA9DB4A8 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D20469A9A1E5CFB26045EAEBE3F88E5E;\n\t\t\tremoteInfo = RCTTypeSafety;\n\t\t};\n\t\t3890C233A2B634142790E17AFC8D817D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EFEA55B1B776B6EB4B16F363BFE64D1A;\n\t\t\tremoteInfo = boost;\n\t\t};\n\t\t392CD5DB7A14441675CAE5C1C2F2476E /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5807741745EB757C97C09F2D56726BE0;\n\t\t\tremoteInfo = \"React-NativeModulesApple\";\n\t\t};\n\t\t39783E66536947564F9D020A74569042 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EC55D52694092A9D0E6A78EB01207EB5;\n\t\t\tremoteInfo = \"RCT-Folly\";\n\t\t};\n\t\t3A88FFAE788BA5C7005A06203E2D5B09 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EC55D52694092A9D0E6A78EB01207EB5;\n\t\t\tremoteInfo = \"RCT-Folly\";\n\t\t};\n\t\t3AB1A2D14D238F5E0D710BD34D8999D2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 1948D0B63D2CF6A48E18B0B292BC6091;\n\t\t\tremoteInfo = SocketRocket;\n\t\t};\n\t\t3B60C2EC4FC7EADBFC082C9611FE195C /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 7ACAA9BE580DD31A5CB9D97C45D9492D;\n\t\t\tremoteInfo = \"React-Core\";\n\t\t};\n\t\t3B755BC14CE1029B5A4285D2C338D848 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EC55D52694092A9D0E6A78EB01207EB5;\n\t\t\tremoteInfo = \"RCT-Folly\";\n\t\t};\n\t\t3B8A3FBDB20D3A657E89E7BDB7525ED8 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 9F96BF8B7FC28F5CF47242D7A73B11DA;\n\t\t\tremoteInfo = \"React-rendererdebug\";\n\t\t};\n\t\t3BDB96421767BAAB9AE9DC3CE9603198 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 30621D5A9764AC0BD9D02E87B2EA6665;\n\t\t\tremoteInfo = \"React-utils\";\n\t\t};\n\t\t3D499367E58E5470425EDA61A0B51FBE /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = F7D033C4C128EECAA020990641FA985F;\n\t\t\tremoteInfo = \"React-jsinspector\";\n\t\t};\n\t\t3D8C75E02193D4335F7C8480891CA121 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = E7E7CE52C8C68B17224FF8C262D80ABF;\n\t\t\tremoteInfo = RCTRequired;\n\t\t};\n\t\t3F15F1D48A07466A9F8B095CCA36826C /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = B41E34C6B259B9994C513BE178912491;\n\t\t\tremoteInfo = \"React-rncore\";\n\t\t};\n\t\t3F8E945B2CF235F1E5DF37577F4BD617 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 4BDD270EACFE5730793AEF0B9BCCBA31;\n\t\t\tremoteInfo = \"React-graphics\";\n\t\t};\n\t\t3FA3F4824D892562720F7C1FE88A3FA3 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D0EFEFB685D97280256C559792236873;\n\t\t\tremoteInfo = glog;\n\t\t};\n\t\t402D782A605F7C3F6A1DF1E51ADD1ACB /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = FA877ADC442CB19CF61793D234C8B131;\n\t\t\tremoteInfo = \"React-jsi\";\n\t\t};\n\t\t413B66FC8CA959FDE6EE3BD8E75010EF /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2B25F90D819B9ADF2AF2D8733A890333;\n\t\t\tremoteInfo = Yoga;\n\t\t};\n\t\t41514EC3994603CBBAC966997FF940DE /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5807741745EB757C97C09F2D56726BE0;\n\t\t\tremoteInfo = \"React-NativeModulesApple\";\n\t\t};\n\t\t417228EA0C0EED361BDA2C73B4EAEDD7 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 52C3F83DB80E5D527EDA54FA1DE5470A;\n\t\t\tremoteInfo = \"React-runtimescheduler\";\n\t\t};\n\t\t41DB73748AA04BD6E5CD07130AAFD267 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 9F96BF8B7FC28F5CF47242D7A73B11DA;\n\t\t\tremoteInfo = \"React-rendererdebug\";\n\t\t};\n\t\t427FF6CB1456A5DB2E43054C10D407AF /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 27F648AD269E94404D6A7547C4F9C683;\n\t\t\tremoteInfo = \"React-jserrorhandler\";\n\t\t};\n\t\t42E337250953477C0425F2B20469DB03 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 7ACAA9BE580DD31A5CB9D97C45D9492D;\n\t\t\tremoteInfo = \"React-Core\";\n\t\t};\n\t\t42FB8544361ABBF9AD8C4C00BE603100 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2B25F90D819B9ADF2AF2D8733A890333;\n\t\t\tremoteInfo = Yoga;\n\t\t};\n\t\t437ECCE96742319D859D14A7A0DCC529 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 938CCE22F6C4094B3FB6CF1478579E4B;\n\t\t\tremoteInfo = \"React-RCTAnimation\";\n\t\t};\n\t\t44520E623CF92B2AE884CEB68AC7F3C5 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = F7D033C4C128EECAA020990641FA985F;\n\t\t\tremoteInfo = \"React-jsinspector\";\n\t\t};\n\t\t447510A29A4CA824A55F4762DE64486E /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 54EB12219122432FA744088BC5A680D2;\n\t\t\tremoteInfo = \"React-runtimeexecutor\";\n\t\t};\n\t\t448906A26AA70E7B13E7A1279A5D8B2B /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D0EFEFB685D97280256C559792236873;\n\t\t\tremoteInfo = glog;\n\t\t};\n\t\t45058A3929052B17227F15D8771739C3 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 45B79B0C60C74716DCD2AD7BE782A719;\n\t\t\tremoteInfo = simdjson;\n\t\t};\n\t\t45BBA5E24DF3E98A1E33D5F7099F04C8 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D20469A9A1E5CFB26045EAEBE3F88E5E;\n\t\t\tremoteInfo = RCTTypeSafety;\n\t\t};\n\t\t46052FF3D71EC89028E59421AD272DCF /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EC55D52694092A9D0E6A78EB01207EB5;\n\t\t\tremoteInfo = \"RCT-Folly\";\n\t\t};\n\t\t46618F284AA8BA31B4AFA45A8E9F507B /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D20469A9A1E5CFB26045EAEBE3F88E5E;\n\t\t\tremoteInfo = RCTTypeSafety;\n\t\t};\n\t\t46F60D279BF0CC26216ED024A0D81294 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 938CCE22F6C4094B3FB6CF1478579E4B;\n\t\t\tremoteInfo = \"React-RCTAnimation\";\n\t\t};\n\t\t470C26614128A65CB3DFE45361C557CA /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 66B8F5758E6F90E16807A85C003CE61F;\n\t\t\tremoteInfo = \"React-Codegen\";\n\t\t};\n\t\t489C8E3E3F5C65782BA9904E88317584 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 91D38B18A4E42B1622B83F450706C2F5;\n\t\t\tremoteInfo = \"React-RuntimeApple\";\n\t\t};\n\t\t496FB04383EBFF21B0C7DD179C13F5C7 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 9F96BF8B7FC28F5CF47242D7A73B11DA;\n\t\t\tremoteInfo = \"React-rendererdebug\";\n\t\t};\n\t\t4A785EB5F5F23DD60E8AF051ECB80951 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D0EFEFB685D97280256C559792236873;\n\t\t\tremoteInfo = glog;\n\t\t};\n\t\t4ADC4B7DC0EDA1567BEF58C181AD6FD5 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = F7D033C4C128EECAA020990641FA985F;\n\t\t\tremoteInfo = \"React-jsinspector\";\n\t\t};\n\t\t4B134C8FBCBB969A1215D405FA8F1A10 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 30621D5A9764AC0BD9D02E87B2EA6665;\n\t\t\tremoteInfo = \"React-utils\";\n\t\t};\n\t\t4BD82DCEA208F83CDCBFE4428A843743 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2B25F90D819B9ADF2AF2D8733A890333;\n\t\t\tremoteInfo = Yoga;\n\t\t};\n\t\t4BF37A59C4356B532FE3C0348A090A3F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = FA877ADC442CB19CF61793D234C8B131;\n\t\t\tremoteInfo = \"React-jsi\";\n\t\t};\n\t\t4C00808CD01965B91DB4DE20301AE79A /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EC55D52694092A9D0E6A78EB01207EB5;\n\t\t\tremoteInfo = \"RCT-Folly\";\n\t\t};\n\t\t4CE094B8C5B23C55458F418C324291C1 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 11989A5E568B3B69655EE0C13DCDA3F9;\n\t\t\tremoteInfo = \"React-RCTActionSheet\";\n\t\t};\n\t\t4EB019076F5C4DBB606BC5E48F450D01 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 718331030FAA6D88E74D4B2240BB4AC8;\n\t\t\tremoteInfo = \"React-jsitracing\";\n\t\t};\n\t\t4F625582906102063209333EE277CEDC /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = FA877ADC442CB19CF61793D234C8B131;\n\t\t\tremoteInfo = \"React-jsi\";\n\t\t};\n\t\t4F93A5639AC8DE235E8468EB71917E7A /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 4F265533AAB7C8985856EC78A33164BB;\n\t\t\tremoteInfo = \"React-RCTImage\";\n\t\t};\n\t\t50664CD9ED7985A1E90103A79BE4B4CC /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 0C050E11C4409D3BFAE9CC219C4D6195;\n\t\t\tremoteInfo = \"React-debug\";\n\t\t};\n\t\t50EB5FDA61EF17A3F3258D62A351B614 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D0EFEFB685D97280256C559792236873;\n\t\t\tremoteInfo = glog;\n\t\t};\n\t\t51059926E149D7D7A46AD514913F4BA7 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = FA877ADC442CB19CF61793D234C8B131;\n\t\t\tremoteInfo = \"React-jsi\";\n\t\t};\n\t\t514032619C079D0613FD26B75A133435 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = FA877ADC442CB19CF61793D234C8B131;\n\t\t\tremoteInfo = \"React-jsi\";\n\t\t};\n\t\t51590C4C9586B9EBD9EB9276CDA00E78 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2B25F90D819B9ADF2AF2D8733A890333;\n\t\t\tremoteInfo = Yoga;\n\t\t};\n\t\t51D23F496B041E29ECBBBB9469B006F7 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 66B8F5758E6F90E16807A85C003CE61F;\n\t\t\tremoteInfo = \"React-Codegen\";\n\t\t};\n\t\t523986A4CBA0A9B854F1B1F504672E41 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = FA877ADC442CB19CF61793D234C8B131;\n\t\t\tremoteInfo = \"React-jsi\";\n\t\t};\n\t\t528B726925AA1576C46D6FAB03891176 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 20F066A71CEA5EECC7463413442F2B77;\n\t\t\tremoteInfo = \"React-hermes\";\n\t\t};\n\t\t531F38502E184028FEC2387DBD9F5A3C /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = FA877ADC442CB19CF61793D234C8B131;\n\t\t\tremoteInfo = \"React-jsi\";\n\t\t};\n\t\t5330B576E39CDDCC6D01B0513A2C8F64 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 7ACAA9BE580DD31A5CB9D97C45D9492D;\n\t\t\tremoteInfo = \"React-Core\";\n\t\t};\n\t\t55742B771D95D2D70CE4E7DF35415F5B /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2B25F90D819B9ADF2AF2D8733A890333;\n\t\t\tremoteInfo = Yoga;\n\t\t};\n\t\t57B24B86E8BC2DC4B873AFA4728A28F2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 28CE447E6F9C5F0EECC0CDD607D06A24;\n\t\t\tremoteInfo = \"React-featureflags\";\n\t\t};\n\t\t5858410DB9604D764DDB1D8DBF572A73 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2681CB7EF647E61F4F9A43029C235607;\n\t\t\tremoteInfo = \"React-callinvoker\";\n\t\t};\n\t\t58D01897CD4E2D764437DA0038900ACE /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 938CCE22F6C4094B3FB6CF1478579E4B;\n\t\t\tremoteInfo = \"React-RCTAnimation\";\n\t\t};\n\t\t58D8334E9B16E13EB96FE3FE0FDCF10F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 30621D5A9764AC0BD9D02E87B2EA6665;\n\t\t\tremoteInfo = \"React-utils\";\n\t\t};\n\t\t593B340C65DA8AEF21E6D8AC52660544 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 28CE447E6F9C5F0EECC0CDD607D06A24;\n\t\t\tremoteInfo = \"React-featureflags\";\n\t\t};\n\t\t5A2F2307A099C28BD6575DF53A5FE136 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EC55D52694092A9D0E6A78EB01207EB5;\n\t\t\tremoteInfo = \"RCT-Folly\";\n\t\t};\n\t\t5A66969F2F26AF689BBE09506F583E5E /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = F7D033C4C128EECAA020990641FA985F;\n\t\t\tremoteInfo = \"React-jsinspector\";\n\t\t};\n\t\t5A8596426591472EAFCA3DA6207F0A23 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 54EB12219122432FA744088BC5A680D2;\n\t\t\tremoteInfo = \"React-runtimeexecutor\";\n\t\t};\n\t\t5E1475973708794027FA6EF77468A061 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EC55D52694092A9D0E6A78EB01207EB5;\n\t\t\tremoteInfo = \"RCT-Folly\";\n\t\t};\n\t\t5E1C8506319413FB7230B196CCEC1DD5 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D20469A9A1E5CFB26045EAEBE3F88E5E;\n\t\t\tremoteInfo = RCTTypeSafety;\n\t\t};\n\t\t5F9ECC8664AEFB7D24B15E1ABEBDCD7F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 4F265533AAB7C8985856EC78A33164BB;\n\t\t\tremoteInfo = \"React-RCTImage\";\n\t\t};\n\t\t610DAF4DFC508DEF059AAF2D6327FB30 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D20469A9A1E5CFB26045EAEBE3F88E5E;\n\t\t\tremoteInfo = RCTTypeSafety;\n\t\t};\n\t\t6192A6F195A09747939210F1954336E5 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 4F265533AAB7C8985856EC78A33164BB;\n\t\t\tremoteInfo = \"React-RCTImage\";\n\t\t};\n\t\t61A7088DDA0CCE984A0F70AEFF5F251B /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = E7E7CE52C8C68B17224FF8C262D80ABF;\n\t\t\tremoteInfo = RCTRequired;\n\t\t};\n\t\t645CCB35B56EBAFA23B7777FA9A688EF /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 02B79DFED924FA19CA90EC69614733E1;\n\t\t\tremoteInfo = fmt;\n\t\t};\n\t\t64B026DA708A8DEF22DD19ACC82A7D53 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 0C050E11C4409D3BFAE9CC219C4D6195;\n\t\t\tremoteInfo = \"React-debug\";\n\t\t};\n\t\t667B3C248D30D99BF4AB387DA12EF8B7 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 985FEA01F314F3C00F0C1E1181E6C4A5;\n\t\t\tremoteInfo = \"hermes-engine\";\n\t\t};\n\t\t6682A5C614DCD26B5D7B0DE8C3DEB7C0 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 463F41A7E8B252F8AC5024DA1F4AF6DA;\n\t\t\tremoteInfo = \"React-cxxreact\";\n\t\t};\n\t\t696C092D7D2F0C8C73C9FD35C3516D5F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 0C050E11C4409D3BFAE9CC219C4D6195;\n\t\t\tremoteInfo = \"React-debug\";\n\t\t};\n\t\t6978B0EF9BF761495B5E4F97D979BEB2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = FA877ADC442CB19CF61793D234C8B131;\n\t\t\tremoteInfo = \"React-jsi\";\n\t\t};\n\t\t69F28387CD69BA9EB00ECC48BBE04334 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 463F41A7E8B252F8AC5024DA1F4AF6DA;\n\t\t\tremoteInfo = \"React-cxxreact\";\n\t\t};\n\t\t6AB1F4BFD6B96C93DA1B7CD8F20A79C1 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 463F41A7E8B252F8AC5024DA1F4AF6DA;\n\t\t\tremoteInfo = \"React-cxxreact\";\n\t\t};\n\t\t6C63CA93F2CEB17BE0AB630B55D93DF7 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EC55D52694092A9D0E6A78EB01207EB5;\n\t\t\tremoteInfo = \"RCT-Folly\";\n\t\t};\n\t\t6CA22A265B4F5BEDA7386E7D1A288083 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = FA877ADC442CB19CF61793D234C8B131;\n\t\t\tremoteInfo = \"React-jsi\";\n\t\t};\n\t\t6CB5A0DC349F027AC1A42CECDA2717AD /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 985FEA01F314F3C00F0C1E1181E6C4A5;\n\t\t\tremoteInfo = \"hermes-engine\";\n\t\t};\n\t\t6D203869C95F377D019F57240B097418 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = FA877ADC442CB19CF61793D234C8B131;\n\t\t\tremoteInfo = \"React-jsi\";\n\t\t};\n\t\t6EB4F5AD2509B4497784B3A8CBBC25D4 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 4BDD270EACFE5730793AEF0B9BCCBA31;\n\t\t\tremoteInfo = \"React-graphics\";\n\t\t};\n\t\t6EE56E372692932C8B3E2285CB2D30EA /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 54EB12219122432FA744088BC5A680D2;\n\t\t\tremoteInfo = \"React-runtimeexecutor\";\n\t\t};\n\t\t6F59DF752512991C7BB5D7117332E2B8 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 680299219D3A48D42A648AF6706275A9;\n\t\t\tremoteInfo = \"React-RCTSettings\";\n\t\t};\n\t\t6FA0C82671E5EDF5C2E8608E281E5574 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 30621D5A9764AC0BD9D02E87B2EA6665;\n\t\t\tremoteInfo = \"React-utils\";\n\t\t};\n\t\t7089361FEE21B329190B5FB28FA6C854 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 66B8F5758E6F90E16807A85C003CE61F;\n\t\t\tremoteInfo = \"React-Codegen\";\n\t\t};\n\t\t708E537269B7F5B976508E358B90ACD8 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2AB2EF542954AB1C999E03BFEF8DE806;\n\t\t\tremoteInfo = DoubleConversion;\n\t\t};\n\t\t7158D0B64E400178ECFE8BDBAD235DA5 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 45B79B0C60C74716DCD2AD7BE782A719;\n\t\t\tremoteInfo = simdjson;\n\t\t};\n\t\t7199A02DB198016F4957677CAFD37169 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 7ACAA9BE580DD31A5CB9D97C45D9492D;\n\t\t\tremoteInfo = \"React-Core\";\n\t\t};\n\t\t72691AD3B737BB0E261D6450E7CC91BF /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2AB2EF542954AB1C999E03BFEF8DE806;\n\t\t\tremoteInfo = DoubleConversion;\n\t\t};\n\t\t72F15D17342DFAFB7E374C97225B301A /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 985FEA01F314F3C00F0C1E1181E6C4A5;\n\t\t\tremoteInfo = \"hermes-engine\";\n\t\t};\n\t\t7324B3C23CC2660EE8AB34F268610F69 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = B6D5DD49633DFF0657B8C3F08EB3ABA9;\n\t\t\tremoteInfo = ReactCommon;\n\t\t};\n\t\t7396E7BB1E1E864764B1A04E411A22AD /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5211B5AB7B81060AA8E78614DD75D3AB;\n\t\t\tremoteInfo = RCTDeprecation;\n\t\t};\n\t\t73E1F467A179064813358CA300786586 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 66B8F5758E6F90E16807A85C003CE61F;\n\t\t\tremoteInfo = \"React-Codegen\";\n\t\t};\n\t\t761B75C34BB1B42FA942F96540E4BC15 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D20469A9A1E5CFB26045EAEBE3F88E5E;\n\t\t\tremoteInfo = RCTTypeSafety;\n\t\t};\n\t\t768701873B0599D6AC08259EE1D5EC9B /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = F1E2583679398CB5F4D2B3272E9B198F;\n\t\t\tremoteInfo = \"React-perflogger\";\n\t\t};\n\t\t77392EDC06BFD0919392085F508634CC /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 7ACAA9BE580DD31A5CB9D97C45D9492D;\n\t\t\tremoteInfo = \"React-Core\";\n\t\t};\n\t\t773DAF3A7CD1AD560A4E58D7260D2A72 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = B6D5DD49633DFF0657B8C3F08EB3ABA9;\n\t\t\tremoteInfo = ReactCommon;\n\t\t};\n\t\t77B61E545D3EE505689E5A88FB34006D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 02B79DFED924FA19CA90EC69614733E1;\n\t\t\tremoteInfo = fmt;\n\t\t};\n\t\t77BB51BE51B9062B6A3C86AB77078D7C /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = B5E1D7706FCB7EC5FF39F8CDA49A5653;\n\t\t\tremoteInfo = \"React-ImageManager\";\n\t\t};\n\t\t77E927E30D46B85E76EB2A6BC7C528FC /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EC55D52694092A9D0E6A78EB01207EB5;\n\t\t\tremoteInfo = \"RCT-Folly\";\n\t\t};\n\t\t788F525F7864E34BCFE6BA0BC508EAA7 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 66B8F5758E6F90E16807A85C003CE61F;\n\t\t\tremoteInfo = \"React-Codegen\";\n\t\t};\n\t\t7891D6AA1F6DB7DF67CCDC6B30B255ED /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DA0709CAAD589C6E7963495210438021;\n\t\t\tremoteInfo = \"React-jsiexecutor\";\n\t\t};\n\t\t792C4CE9FB1431C17A2D5C379D689D80 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 54EB12219122432FA744088BC5A680D2;\n\t\t\tremoteInfo = \"React-runtimeexecutor\";\n\t\t};\n\t\t7931E9AD775D7BC33B55B25BE876C6CE /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 66B8F5758E6F90E16807A85C003CE61F;\n\t\t\tremoteInfo = \"React-Codegen\";\n\t\t};\n\t\t79DB034638266C6FDC5132A84FA94A15 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = B69D68A280EC3E60655BD2C715ACB004;\n\t\t\tremoteInfo = \"React-nativeconfig\";\n\t\t};\n\t\t79F6D476FC0E744BD4FCC435BDAD2B7D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 9F96BF8B7FC28F5CF47242D7A73B11DA;\n\t\t\tremoteInfo = \"React-rendererdebug\";\n\t\t};\n\t\t7A705528BECC75FF15B9B5472224FFF2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 0C050E11C4409D3BFAE9CC219C4D6195;\n\t\t\tremoteInfo = \"React-debug\";\n\t\t};\n\t\t7AF4C2BA2D63C5F0125DB0C240A10756 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 02B79DFED924FA19CA90EC69614733E1;\n\t\t\tremoteInfo = fmt;\n\t\t};\n\t\t7AF7CA4C4F7DB433479DC151414ECC52 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 27F648AD269E94404D6A7547C4F9C683;\n\t\t\tremoteInfo = \"React-jserrorhandler\";\n\t\t};\n\t\t7B2A662A0484D478867544ECF561FF26 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = F1E2583679398CB5F4D2B3272E9B198F;\n\t\t\tremoteInfo = \"React-perflogger\";\n\t\t};\n\t\t7C40A37CAC285B68DA5664FAD4BE3490 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2681CB7EF647E61F4F9A43029C235607;\n\t\t\tremoteInfo = \"React-callinvoker\";\n\t\t};\n\t\t7E2AE44A3348102D3E4ACF43FE59A494 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EFEA55B1B776B6EB4B16F363BFE64D1A;\n\t\t\tremoteInfo = boost;\n\t\t};\n\t\t7E51A5346FA1F405D4A2D9A3CD02A15B /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 1BEE828C124E6416179B904A9F66D794;\n\t\t\tremoteInfo = React;\n\t\t};\n\t\t7F45F83A2EAD4093F12D40375946D470 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 02B79DFED924FA19CA90EC69614733E1;\n\t\t\tremoteInfo = fmt;\n\t\t};\n\t\t7F9ADB115EE8B656B0A4D9610F64585F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 9F96BF8B7FC28F5CF47242D7A73B11DA;\n\t\t\tremoteInfo = \"React-rendererdebug\";\n\t\t};\n\t\t7FA15A1437F7473F4EBF6CD2EA187A28 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 0EF07AE1AD53436E8D2B9B0086EA0163;\n\t\t\tremoteInfo = \"React-RuntimeHermes\";\n\t\t};\n\t\t814E75E2466186389C470A40FABEFBD9 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 718331030FAA6D88E74D4B2240BB4AC8;\n\t\t\tremoteInfo = \"React-jsitracing\";\n\t\t};\n\t\t818B8E1B916E53B3B8B415FF901A52E1 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 28CE447E6F9C5F0EECC0CDD607D06A24;\n\t\t\tremoteInfo = \"React-featureflags\";\n\t\t};\n\t\t8469D13E4B9BE29DE37C00B9952D6926 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 6FE9147F8AAA4DE676C190F680F47AE2;\n\t\t\tremoteInfo = \"React-RCTLinking\";\n\t\t};\n\t\t8642894287941BD14F9F24B434B84BFB /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5807741745EB757C97C09F2D56726BE0;\n\t\t\tremoteInfo = \"React-NativeModulesApple\";\n\t\t};\n\t\t869A59EE24894AED06764354C10A5F69 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 02B79DFED924FA19CA90EC69614733E1;\n\t\t\tremoteInfo = fmt;\n\t\t};\n\t\t86A2C6528D2E3ACA552AD500A9049C6B /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 50DBAF155FAFB994E067BA8820221EDF;\n\t\t\tremoteInfo = \"React-Fabric\";\n\t\t};\n\t\t86B5CD38F12BDE8F478A7604F2D1F3CF /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 8CC4EAA817AA86310D1900F1DAB3580F;\n\t\t\tremoteInfo = FBLazyVector;\n\t\t};\n\t\t87161657935B5B7DF31A7B031AA1BD08 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = C7F600C052808C7C987C26EC74B3A290;\n\t\t\tremoteInfo = \"React-RuntimeCore\";\n\t\t};\n\t\t87DFC9D147D55C9822337F8738882886 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DBD2D83E10F8B7D3F4E0E34E6A9FCFA6;\n\t\t\tremoteInfo = \"React-RCTText\";\n\t\t};\n\t\t883C9E9E5FF6809D00655B5826DB4507 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = F1E2583679398CB5F4D2B3272E9B198F;\n\t\t\tremoteInfo = \"React-perflogger\";\n\t\t};\n\t\t883DE70A71CAD81F2E1643C8AE798850 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 651511D7DA7F07F9FC9AA40A2E86270D;\n\t\t\tremoteInfo = \"React-RCTNetwork\";\n\t\t};\n\t\t88F22E372111C3D44383E8AD8F2A1EB3 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 30621D5A9764AC0BD9D02E87B2EA6665;\n\t\t\tremoteInfo = \"React-utils\";\n\t\t};\n\t\t8A01A6A20F4A040DA3724AB2B41C4904 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2B25F90D819B9ADF2AF2D8733A890333;\n\t\t\tremoteInfo = Yoga;\n\t\t};\n\t\t8A0C1EFB40903E64193D071D4DEEF627 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 66B8F5758E6F90E16807A85C003CE61F;\n\t\t\tremoteInfo = \"React-Codegen\";\n\t\t};\n\t\t8AAB6C3E51B1E70B078CFD8A4025514F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 27F648AD269E94404D6A7547C4F9C683;\n\t\t\tremoteInfo = \"React-jserrorhandler\";\n\t\t};\n\t\t8AF54EC1E32237AFABA09EB72FE50F7B /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2AB2EF542954AB1C999E03BFEF8DE806;\n\t\t\tremoteInfo = DoubleConversion;\n\t\t};\n\t\t8AFA4A6B9474BF388393B2BBB377418A /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 54EB12219122432FA744088BC5A680D2;\n\t\t\tremoteInfo = \"React-runtimeexecutor\";\n\t\t};\n\t\t8B89516148A1AC15EE488B8C02430723 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EC55D52694092A9D0E6A78EB01207EB5;\n\t\t\tremoteInfo = \"RCT-Folly\";\n\t\t};\n\t\t8B9623D05D47EDD8969CEB97507656FA /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 7ACAA9BE580DD31A5CB9D97C45D9492D;\n\t\t\tremoteInfo = \"React-Core\";\n\t\t};\n\t\t8BAC0CA3123950377D2AA004B741EE09 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 1948D0B63D2CF6A48E18B0B292BC6091;\n\t\t\tremoteInfo = SocketRocket;\n\t\t};\n\t\t8BE4793AB705B3DB8FC95B2A3022A7FA /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2AB2EF542954AB1C999E03BFEF8DE806;\n\t\t\tremoteInfo = DoubleConversion;\n\t\t};\n\t\t8CAFE184AE4C9DD706ECA03373F2C811 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 463F41A7E8B252F8AC5024DA1F4AF6DA;\n\t\t\tremoteInfo = \"React-cxxreact\";\n\t\t};\n\t\t8E103A8D0B29AC65D37AF2C9C3397C3F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D0EFEFB685D97280256C559792236873;\n\t\t\tremoteInfo = glog;\n\t\t};\n\t\t8E227252A1A04992FDE9D414D398EA61 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 11989A5E568B3B69655EE0C13DCDA3F9;\n\t\t\tremoteInfo = \"React-RCTActionSheet\";\n\t\t};\n\t\t8F3EDB0170BE68F1914E876834457955 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 985FEA01F314F3C00F0C1E1181E6C4A5;\n\t\t\tremoteInfo = \"hermes-engine\";\n\t\t};\n\t\t8F4D9EF766DC665762826021BF5B3634 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = C7F600C052808C7C987C26EC74B3A290;\n\t\t\tremoteInfo = \"React-RuntimeCore\";\n\t\t};\n\t\t90A4F01A4656FD0ECCE693D3DCFE4357 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = B6D5DD49633DFF0657B8C3F08EB3ABA9;\n\t\t\tremoteInfo = ReactCommon;\n\t\t};\n\t\t9115D774EC904629CCFA0383996AEA60 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = F7D033C4C128EECAA020990641FA985F;\n\t\t\tremoteInfo = \"React-jsinspector\";\n\t\t};\n\t\t91973EF9B88BD3433821DE7E02BCCE66 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 4F265533AAB7C8985856EC78A33164BB;\n\t\t\tremoteInfo = \"React-RCTImage\";\n\t\t};\n\t\t92FD7911CF88661BEC8C53326ACD95D0 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5807741745EB757C97C09F2D56726BE0;\n\t\t\tremoteInfo = \"React-NativeModulesApple\";\n\t\t};\n\t\t930D2D66F0FBD7D28F5478091197C541 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5807741745EB757C97C09F2D56726BE0;\n\t\t\tremoteInfo = \"React-NativeModulesApple\";\n\t\t};\n\t\t933D10BF42FEB63C8C84E9E62A6B915F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 985FEA01F314F3C00F0C1E1181E6C4A5;\n\t\t\tremoteInfo = \"hermes-engine\";\n\t\t};\n\t\t944A26AFF7616415AC12303FFE76129E /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EFEA55B1B776B6EB4B16F363BFE64D1A;\n\t\t\tremoteInfo = boost;\n\t\t};\n\t\t959FC78A558AA1E2398AF55E20BC5287 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 95D98F901D07557EF7CA38D3F03832C5;\n\t\t\tremoteInfo = \"React-RCTBlob\";\n\t\t};\n\t\t96889FED11AA7E66812D490878B97588 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 4BDD270EACFE5730793AEF0B9BCCBA31;\n\t\t\tremoteInfo = \"React-graphics\";\n\t\t};\n\t\t96A265B0FD2164A7B4764841E73AB8AC /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 0C050E11C4409D3BFAE9CC219C4D6195;\n\t\t\tremoteInfo = \"React-debug\";\n\t\t};\n\t\t96C05CE8F4A9CD43357BA06485F8994A /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = B6D5DD49633DFF0657B8C3F08EB3ABA9;\n\t\t\tremoteInfo = ReactCommon;\n\t\t};\n\t\t97012073F5E77B63FDFB697A4A57C498 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 0C050E11C4409D3BFAE9CC219C4D6195;\n\t\t\tremoteInfo = \"React-debug\";\n\t\t};\n\t\t9716285D0C3617CC9DDE2D786CDB6197 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 7ACAA9BE580DD31A5CB9D97C45D9492D;\n\t\t\tremoteInfo = \"React-Core\";\n\t\t};\n\t\t971D502A30449EA83A63979D19F07B5F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 8CC4EAA817AA86310D1900F1DAB3580F;\n\t\t\tremoteInfo = FBLazyVector;\n\t\t};\n\t\t9731399883802412C950BE25D7336D43 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = FA877ADC442CB19CF61793D234C8B131;\n\t\t\tremoteInfo = \"React-jsi\";\n\t\t};\n\t\t98690A3B0D01A5936AEB8B172475F68E /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5807741745EB757C97C09F2D56726BE0;\n\t\t\tremoteInfo = \"React-NativeModulesApple\";\n\t\t};\n\t\t988C8AFF6DCF1A105E13A420302F1153 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DA0709CAAD589C6E7963495210438021;\n\t\t\tremoteInfo = \"React-jsiexecutor\";\n\t\t};\n\t\t995ED0C60B49D159FBA98BBF575252AB /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 54EB12219122432FA744088BC5A680D2;\n\t\t\tremoteInfo = \"React-runtimeexecutor\";\n\t\t};\n\t\t998BEC830E92ED33C97E6586736FB998 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 6FE9147F8AAA4DE676C190F680F47AE2;\n\t\t\tremoteInfo = \"React-RCTLinking\";\n\t\t};\n\t\t9A147EEF518A7ED1EA0464E07F6906DF /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EC55D52694092A9D0E6A78EB01207EB5;\n\t\t\tremoteInfo = \"RCT-Folly\";\n\t\t};\n\t\t9A59483D3DD8007F31406C2A1D52E8EB /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 4BDD270EACFE5730793AEF0B9BCCBA31;\n\t\t\tremoteInfo = \"React-graphics\";\n\t\t};\n\t\t9A63F0A7EC65A8B4E2442C2C924DAD9C /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 7ACAA9BE580DD31A5CB9D97C45D9492D;\n\t\t\tremoteInfo = \"React-Core\";\n\t\t};\n\t\t9AEF32BD5E0F56B926EBB7614301D7E3 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = B6D5DD49633DFF0657B8C3F08EB3ABA9;\n\t\t\tremoteInfo = ReactCommon;\n\t\t};\n\t\t9B17177FFD8673933D9AE3E550401161 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2AB2EF542954AB1C999E03BFEF8DE806;\n\t\t\tremoteInfo = DoubleConversion;\n\t\t};\n\t\t9B1FF7A4C16CAF1E413DCF4BF011434F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = FA877ADC442CB19CF61793D234C8B131;\n\t\t\tremoteInfo = \"React-jsi\";\n\t\t};\n\t\t9B4885D4819D4BD1CF3E930B405AAB10 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 54EB12219122432FA744088BC5A680D2;\n\t\t\tremoteInfo = \"React-runtimeexecutor\";\n\t\t};\n\t\t9B7B281009C520D53B98B8EAFC1D496D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5807741745EB757C97C09F2D56726BE0;\n\t\t\tremoteInfo = \"React-NativeModulesApple\";\n\t\t};\n\t\t9BD7E734058A20C28CFAD01F1663879C /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = F1E2583679398CB5F4D2B3272E9B198F;\n\t\t\tremoteInfo = \"React-perflogger\";\n\t\t};\n\t\t9CB9DF07CCF04684461C49FDB7B2E465 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 7ACAA9BE580DD31A5CB9D97C45D9492D;\n\t\t\tremoteInfo = \"React-Core\";\n\t\t};\n\t\t9CBBC8352CBACE024F392C5D07EFB01A /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 091003D98BDA80B01B9E35CADE3947F0;\n\t\t\tremoteInfo = \"React-Mapbuffer\";\n\t\t};\n\t\t9D4B5C2351B1CA9FA4CE976414BF39CB /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 985FEA01F314F3C00F0C1E1181E6C4A5;\n\t\t\tremoteInfo = \"hermes-engine\";\n\t\t};\n\t\t9DB104CB96E00AE543CF960D565F4C47 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 02B79DFED924FA19CA90EC69614733E1;\n\t\t\tremoteInfo = fmt;\n\t\t};\n\t\t9DD0DFC1F39DAB437E177EB09A8FD48D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DA0709CAAD589C6E7963495210438021;\n\t\t\tremoteInfo = \"React-jsiexecutor\";\n\t\t};\n\t\t9E867B5A451015DC03204207736A9926 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 27F648AD269E94404D6A7547C4F9C683;\n\t\t\tremoteInfo = \"React-jserrorhandler\";\n\t\t};\n\t\t9EA4F6BD0A3AE917E71F8807C80DB748 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 66B8F5758E6F90E16807A85C003CE61F;\n\t\t\tremoteInfo = \"React-Codegen\";\n\t\t};\n\t\tA01FB08457ECBD7EE89F447BFC03E9C5 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 66B8F5758E6F90E16807A85C003CE61F;\n\t\t\tremoteInfo = \"React-Codegen\";\n\t\t};\n\t\tA16731871E95A4B80332D99A82AEAB81 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = C7F600C052808C7C987C26EC74B3A290;\n\t\t\tremoteInfo = \"React-RuntimeCore\";\n\t\t};\n\t\tA1B6243BC985420127EDB25166DBB848 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 0C050E11C4409D3BFAE9CC219C4D6195;\n\t\t\tremoteInfo = \"React-debug\";\n\t\t};\n\t\tA1EE308B2938947861CD549712D6075F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = E16E206437995280D349D4B67695C894;\n\t\t\tremoteInfo = \"React-CoreModules\";\n\t\t};\n\t\tA1F1CFBE1F81137945063038F1DAA104 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 0C050E11C4409D3BFAE9CC219C4D6195;\n\t\t\tremoteInfo = \"React-debug\";\n\t\t};\n\t\tA2DB2A457F35677E14332209CA3AB475 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = B5E1D7706FCB7EC5FF39F8CDA49A5653;\n\t\t\tremoteInfo = \"React-ImageManager\";\n\t\t};\n\t\tA2EB194373B9393B3358E1E1FA0EBD05 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = E16E206437995280D349D4B67695C894;\n\t\t\tremoteInfo = \"React-CoreModules\";\n\t\t};\n\t\tA3265F4A2E09A773944413294B402BBA /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 02B79DFED924FA19CA90EC69614733E1;\n\t\t\tremoteInfo = fmt;\n\t\t};\n\t\tA33E41C8F72330ECDE20BF394124C97B /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 985FEA01F314F3C00F0C1E1181E6C4A5;\n\t\t\tremoteInfo = \"hermes-engine\";\n\t\t};\n\t\tA3F6FC01C2191DE3CE03D589BC558A96 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 28CE447E6F9C5F0EECC0CDD607D06A24;\n\t\t\tremoteInfo = \"React-featureflags\";\n\t\t};\n\t\tA4E91955EC6E6D3061E9510D936E61FF /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = F7D033C4C128EECAA020990641FA985F;\n\t\t\tremoteInfo = \"React-jsinspector\";\n\t\t};\n\t\tA4EAB72AACA2C806DE0C40C49536CDD2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 7ACAA9BE580DD31A5CB9D97C45D9492D;\n\t\t\tremoteInfo = \"React-Core\";\n\t\t};\n\t\tA57A1E5DA1CF9F45264F198239F502CD /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5211B5AB7B81060AA8E78614DD75D3AB;\n\t\t\tremoteInfo = RCTDeprecation;\n\t\t};\n\t\tA5B19FE633CD3598242AF5724C8D0208 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = F7D033C4C128EECAA020990641FA985F;\n\t\t\tremoteInfo = \"React-jsinspector\";\n\t\t};\n\t\tA6398B134777D879B1B01FAAF9E7312A /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2AB2EF542954AB1C999E03BFEF8DE806;\n\t\t\tremoteInfo = DoubleConversion;\n\t\t};\n\t\tA677F1A562B3A7E3375C13B645B0298A /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 985FEA01F314F3C00F0C1E1181E6C4A5;\n\t\t\tremoteInfo = \"hermes-engine\";\n\t\t};\n\t\tA6BA9A6BD8EA1A3C362C27947713ED7A /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 28CE447E6F9C5F0EECC0CDD607D06A24;\n\t\t\tremoteInfo = \"React-featureflags\";\n\t\t};\n\t\tA842D588D7B9637FFFA8197AD63B597C /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = FA877ADC442CB19CF61793D234C8B131;\n\t\t\tremoteInfo = \"React-jsi\";\n\t\t};\n\t\tA92361FFAA6D27AFF02987D72B991DE4 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = F7D033C4C128EECAA020990641FA985F;\n\t\t\tremoteInfo = \"React-jsinspector\";\n\t\t};\n\t\tAA28726CD41308E7D4C6D49AF678D9CD /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 54EB12219122432FA744088BC5A680D2;\n\t\t\tremoteInfo = \"React-runtimeexecutor\";\n\t\t};\n\t\tAA7D7226734A644480DC2905FB4F0756 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 985FEA01F314F3C00F0C1E1181E6C4A5;\n\t\t\tremoteInfo = \"hermes-engine\";\n\t\t};\n\t\tAC0EFE9849C86BC9EEE3998C75BF7E59 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 30621D5A9764AC0BD9D02E87B2EA6665;\n\t\t\tremoteInfo = \"React-utils\";\n\t\t};\n\t\tAD65D943B25FB162F127D788B3B7414F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EC55D52694092A9D0E6A78EB01207EB5;\n\t\t\tremoteInfo = \"RCT-Folly\";\n\t\t};\n\t\tAD88ADDC23C72D9E68F949E2F6392A9C /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = E16E206437995280D349D4B67695C894;\n\t\t\tremoteInfo = \"React-CoreModules\";\n\t\t};\n\t\tADD9114A2BFC1CBDFC55DD169FA98452 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 95D98F901D07557EF7CA38D3F03832C5;\n\t\t\tremoteInfo = \"React-RCTBlob\";\n\t\t};\n\t\tAE45C8D28B14130F12EC5C170DA2B7AA /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = E7E7CE52C8C68B17224FF8C262D80ABF;\n\t\t\tremoteInfo = RCTRequired;\n\t\t};\n\t\tAE96CA5B7DA7C75729EC0BEF7C0FFE9D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = FA877ADC442CB19CF61793D234C8B131;\n\t\t\tremoteInfo = \"React-jsi\";\n\t\t};\n\t\tAF0A642DD817CD7C29D4688D8B28274A /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 7ACAA9BE580DD31A5CB9D97C45D9492D;\n\t\t\tremoteInfo = \"React-Core\";\n\t\t};\n\t\tB050846017362E483E884DFA743A5521 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2AB2EF542954AB1C999E03BFEF8DE806;\n\t\t\tremoteInfo = DoubleConversion;\n\t\t};\n\t\tB08201482F085FFB7749B3B3BFA4755C /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 985FEA01F314F3C00F0C1E1181E6C4A5;\n\t\t\tremoteInfo = \"hermes-engine\";\n\t\t};\n\t\tB0FBC836348A84E5E4A688B8A910CE45 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D20469A9A1E5CFB26045EAEBE3F88E5E;\n\t\t\tremoteInfo = RCTTypeSafety;\n\t\t};\n\t\tB122FEC78343AAB6003C5DAA20FF12A8 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 0C050E11C4409D3BFAE9CC219C4D6195;\n\t\t\tremoteInfo = \"React-debug\";\n\t\t};\n\t\tB1E7A179678B5CAAFE7D32BEB902FE50 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2681CB7EF647E61F4F9A43029C235607;\n\t\t\tremoteInfo = \"React-callinvoker\";\n\t\t};\n\t\tB20E23EC66F22E90033D795BDB740B4E /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 91D38B18A4E42B1622B83F450706C2F5;\n\t\t\tremoteInfo = \"React-RuntimeApple\";\n\t\t};\n\t\tB23E152C21979D346C6142DA964C43C5 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 9F96BF8B7FC28F5CF47242D7A73B11DA;\n\t\t\tremoteInfo = \"React-rendererdebug\";\n\t\t};\n\t\tB24AA1E618A3ECA98448662282BBE973 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EC55D52694092A9D0E6A78EB01207EB5;\n\t\t\tremoteInfo = \"RCT-Folly\";\n\t\t};\n\t\tB389764894DEAE9026600EDBCD8A4763 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D0EFEFB685D97280256C559792236873;\n\t\t\tremoteInfo = glog;\n\t\t};\n\t\tB3A65B874F5E1F12E1BEE7077B201AF2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 651511D7DA7F07F9FC9AA40A2E86270D;\n\t\t\tremoteInfo = \"React-RCTNetwork\";\n\t\t};\n\t\tB4449874149D49635F8A5CCEFA2B7B71 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = B6D5DD49633DFF0657B8C3F08EB3ABA9;\n\t\t\tremoteInfo = ReactCommon;\n\t\t};\n\t\tB455D622235FFAB0ECAD084D352B56F9 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 1948D0B63D2CF6A48E18B0B292BC6091;\n\t\t\tremoteInfo = SocketRocket;\n\t\t};\n\t\tB46597F4B2FF6D8BBB0FCAC80B136EDB /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = B6D5DD49633DFF0657B8C3F08EB3ABA9;\n\t\t\tremoteInfo = ReactCommon;\n\t\t};\n\t\tB49957FEA3DBA79C960C4BF33FB89693 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = C2B1B75CCC326124F29FE703CC59BFB7;\n\t\t\tremoteInfo = \"React-RCTAppDelegate\";\n\t\t};\n\t\tB4AB08DEA37CE87C1E80287F854825E6 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D20469A9A1E5CFB26045EAEBE3F88E5E;\n\t\t\tremoteInfo = RCTTypeSafety;\n\t\t};\n\t\tB55F062B69D12DE3FB7C6C27877E9D6C /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DA0709CAAD589C6E7963495210438021;\n\t\t\tremoteInfo = \"React-jsiexecutor\";\n\t\t};\n\t\tB5C49ED7C22908993DA03524268054A1 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = FA877ADC442CB19CF61793D234C8B131;\n\t\t\tremoteInfo = \"React-jsi\";\n\t\t};\n\t\tB6DD8966E1DDD9372FDA125F3D9731FF /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = F7D033C4C128EECAA020990641FA985F;\n\t\t\tremoteInfo = \"React-jsinspector\";\n\t\t};\n\t\tB833B6E10AB7E3C290E1FEF08CB30A4D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 4BDD270EACFE5730793AEF0B9BCCBA31;\n\t\t\tremoteInfo = \"React-graphics\";\n\t\t};\n\t\tB875F5E8A9737CADD56F2D32A8D43A6C /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 30621D5A9764AC0BD9D02E87B2EA6665;\n\t\t\tremoteInfo = \"React-utils\";\n\t\t};\n\t\tB8FAF58B12747184E841D23CA71CB990 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2AB2EF542954AB1C999E03BFEF8DE806;\n\t\t\tremoteInfo = DoubleConversion;\n\t\t};\n\t\tB91FF145DD7C0FE0686A53DB45FF39BA /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = B5E1D7706FCB7EC5FF39F8CDA49A5653;\n\t\t\tremoteInfo = \"React-ImageManager\";\n\t\t};\n\t\tB96395E64F84E570087610FC9A4A1AE7 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 11989A5E568B3B69655EE0C13DCDA3F9;\n\t\t\tremoteInfo = \"React-RCTActionSheet\";\n\t\t};\n\t\tB9A089006BD78E0587595CAB4CA1C15D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D0EFEFB685D97280256C559792236873;\n\t\t\tremoteInfo = glog;\n\t\t};\n\t\tBB5387DCE059C87AA11AECE4CE628A71 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5807741745EB757C97C09F2D56726BE0;\n\t\t\tremoteInfo = \"React-NativeModulesApple\";\n\t\t};\n\t\tBB57699D36CDF102FB4067D36F1B26F9 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 66B8F5758E6F90E16807A85C003CE61F;\n\t\t\tremoteInfo = \"React-Codegen\";\n\t\t};\n\t\tBC0528EBC67F7BABF5B54EF212893752 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EC55D52694092A9D0E6A78EB01207EB5;\n\t\t\tremoteInfo = \"RCT-Folly\";\n\t\t};\n\t\tBCB974246F67E3F682F23D3000A7BC16 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 083B602EA19B4AD50EC53C0602F29A7D;\n\t\t\tremoteInfo = \"React-logger\";\n\t\t};\n\t\tBD62BAA4B5FFFEAA64CF2EE7B03345C5 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 52C3F83DB80E5D527EDA54FA1DE5470A;\n\t\t\tremoteInfo = \"React-runtimescheduler\";\n\t\t};\n\t\tBF7B3AA185D91BA8D010D8A33C7CB137 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 6FE9147F8AAA4DE676C190F680F47AE2;\n\t\t\tremoteInfo = \"React-RCTLinking\";\n\t\t};\n\t\tBF9E600B486A8F752CFBCEC2CC0B1A5A /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 0EF07AE1AD53436E8D2B9B0086EA0163;\n\t\t\tremoteInfo = \"React-RuntimeHermes\";\n\t\t};\n\t\tC0833537177F0AC13EEDE7B7CADA02A2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DBD2D83E10F8B7D3F4E0E34E6A9FCFA6;\n\t\t\tremoteInfo = \"React-RCTText\";\n\t\t};\n\t\tC0C3D74CFBF3E116388373D57BE4F7BA /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = FA877ADC442CB19CF61793D234C8B131;\n\t\t\tremoteInfo = \"React-jsi\";\n\t\t};\n\t\tC1DD7823D300707FC9C52212F93B32DA /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 50DBAF155FAFB994E067BA8820221EDF;\n\t\t\tremoteInfo = \"React-Fabric\";\n\t\t};\n\t\tC23661E7B14F7FAC97B8196253811D53 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 985FEA01F314F3C00F0C1E1181E6C4A5;\n\t\t\tremoteInfo = \"hermes-engine\";\n\t\t};\n\t\tC295D62C015F11982CF4D6A807934AF9 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 9F96BF8B7FC28F5CF47242D7A73B11DA;\n\t\t\tremoteInfo = \"React-rendererdebug\";\n\t\t};\n\t\tC2A4DC273F4357B0C430FAA2E640C336 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EFEA55B1B776B6EB4B16F363BFE64D1A;\n\t\t\tremoteInfo = boost;\n\t\t};\n\t\tC339D19AFB5425F4ACFF222B89E642C5 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = E16E206437995280D349D4B67695C894;\n\t\t\tremoteInfo = \"React-CoreModules\";\n\t\t};\n\t\tC342240C879F110F98B32A6586138BAC /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 52C3F83DB80E5D527EDA54FA1DE5470A;\n\t\t\tremoteInfo = \"React-runtimescheduler\";\n\t\t};\n\t\tC442623A96CC4090A6637148EE99E00E /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 02B79DFED924FA19CA90EC69614733E1;\n\t\t\tremoteInfo = fmt;\n\t\t};\n\t\tC47BEEA64665700E66E269BE0C90CEF9 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 30621D5A9764AC0BD9D02E87B2EA6665;\n\t\t\tremoteInfo = \"React-utils\";\n\t\t};\n\t\tC4A085BD4076C29C8993F50E76C4AACA /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 20F066A71CEA5EECC7463413442F2B77;\n\t\t\tremoteInfo = \"React-hermes\";\n\t\t};\n\t\tC4B664DF5B07F01FA8E61FD0BD39255D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 28CE447E6F9C5F0EECC0CDD607D06A24;\n\t\t\tremoteInfo = \"React-featureflags\";\n\t\t};\n\t\tC4C8A76B4B78C8FC91DE8EA0A599DDC7 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 02B79DFED924FA19CA90EC69614733E1;\n\t\t\tremoteInfo = fmt;\n\t\t};\n\t\tC4DAD2BFEDB2B46B30A4918334C3C155 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2AB2EF542954AB1C999E03BFEF8DE806;\n\t\t\tremoteInfo = DoubleConversion;\n\t\t};\n\t\tC5168006894FB43521F0A0CBECEBD219 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 4BDD270EACFE5730793AEF0B9BCCBA31;\n\t\t\tremoteInfo = \"React-graphics\";\n\t\t};\n\t\tC539F15154AF65EF5205178A0B981D18 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = F7D033C4C128EECAA020990641FA985F;\n\t\t\tremoteInfo = \"React-jsinspector\";\n\t\t};\n\t\tC5B2D41028C0D910182768F522988D50 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EC55D52694092A9D0E6A78EB01207EB5;\n\t\t\tremoteInfo = \"RCT-Folly\";\n\t\t};\n\t\tC6175853BCA38145859D6574962C8592 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 8DED5282246ABFC24F4460D3066C84A0;\n\t\t\tremoteInfo = \"React-RCTFabric\";\n\t\t};\n\t\tC66D90E52EFB399DB604AC9B7394D4BD /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = FA877ADC442CB19CF61793D234C8B131;\n\t\t\tremoteInfo = \"React-jsi\";\n\t\t};\n\t\tC73838D3F0AFD4D6E76EA1E846E47074 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 083B602EA19B4AD50EC53C0602F29A7D;\n\t\t\tremoteInfo = \"React-logger\";\n\t\t};\n\t\tC79A04F3B768DBE6A492AE991E3C6729 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = FA877ADC442CB19CF61793D234C8B131;\n\t\t\tremoteInfo = \"React-jsi\";\n\t\t};\n\t\tC85A7AAACB052BE3D7FC7D52B64204D5 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 53D121F9F9BB0F8AC1C94A12C5A8572F;\n\t\t\tremoteInfo = \"React-RCTVibration\";\n\t\t};\n\t\tC92744C875EAA3E6A25003782211CED0 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EC55D52694092A9D0E6A78EB01207EB5;\n\t\t\tremoteInfo = \"RCT-Folly\";\n\t\t};\n\t\tC933D0F25D6C20C3379299E2CB42F4FC /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 463F41A7E8B252F8AC5024DA1F4AF6DA;\n\t\t\tremoteInfo = \"React-cxxreact\";\n\t\t};\n\t\tC9E7B9CABFA8CCAEC5A1E5899E48575E /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D0EFEFB685D97280256C559792236873;\n\t\t\tremoteInfo = glog;\n\t\t};\n\t\tCAF6538D653E2F4593BDD6FB47ABD0D2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = B6D5DD49633DFF0657B8C3F08EB3ABA9;\n\t\t\tremoteInfo = ReactCommon;\n\t\t};\n\t\tCB02A6F103714BDDE795941B4C8F0F1C /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 0EF07AE1AD53436E8D2B9B0086EA0163;\n\t\t\tremoteInfo = \"React-RuntimeHermes\";\n\t\t};\n\t\tCBA1639E79B6F6752FA0776C8012648E /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 651511D7DA7F07F9FC9AA40A2E86270D;\n\t\t\tremoteInfo = \"React-RCTNetwork\";\n\t\t};\n\t\tCBBEE84629A720F7DD2A47F106239061 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EF554722D0D580AC702A6DAB8FDBB2B5;\n\t\t\tremoteInfo = WatermelonDB;\n\t\t};\n\t\tCBE3C92A7423E48BDE15756DF5F7D413 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 463F41A7E8B252F8AC5024DA1F4AF6DA;\n\t\t\tremoteInfo = \"React-cxxreact\";\n\t\t};\n\t\tCD5EB770BFF7AE41F049E4F510CDA6C9 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 52C3F83DB80E5D527EDA54FA1DE5470A;\n\t\t\tremoteInfo = \"React-runtimescheduler\";\n\t\t};\n\t\tCDB9A6A5720EBE3436BD3F35A6AD8D51 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 985FEA01F314F3C00F0C1E1181E6C4A5;\n\t\t\tremoteInfo = \"hermes-engine\";\n\t\t};\n\t\tCE32EDC6F22FAF26BF32FF9864DBF404 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = FA877ADC442CB19CF61793D234C8B131;\n\t\t\tremoteInfo = \"React-jsi\";\n\t\t};\n\t\tCEA49CA159329299D1916EE8ABEDB910 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2AB2EF542954AB1C999E03BFEF8DE806;\n\t\t\tremoteInfo = DoubleConversion;\n\t\t};\n\t\tCF674C4E3255977E4A866B743B5F5753 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DA0709CAAD589C6E7963495210438021;\n\t\t\tremoteInfo = \"React-jsiexecutor\";\n\t\t};\n\t\tCFA19FA3F85DE79CCD37BCCD68515599 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 985FEA01F314F3C00F0C1E1181E6C4A5;\n\t\t\tremoteInfo = \"hermes-engine\";\n\t\t};\n\t\tD075EC87D0910DE9AA411C7752F01529 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = F1E2583679398CB5F4D2B3272E9B198F;\n\t\t\tremoteInfo = \"React-perflogger\";\n\t\t};\n\t\tD13160E9F6A39A4293D2FE5667F854E0 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D0EFEFB685D97280256C559792236873;\n\t\t\tremoteInfo = glog;\n\t\t};\n\t\tD16A2BB3F9D5A639C2B53437E64AF9DF /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 985FEA01F314F3C00F0C1E1181E6C4A5;\n\t\t\tremoteInfo = \"hermes-engine\";\n\t\t};\n\t\tD27EDB53457EAF10C145163B90FDE993 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EC55D52694092A9D0E6A78EB01207EB5;\n\t\t\tremoteInfo = \"RCT-Folly\";\n\t\t};\n\t\tD3E449977C2F1B93649FE5935155E48B /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EF554722D0D580AC702A6DAB8FDBB2B5;\n\t\t\tremoteInfo = WatermelonDB;\n\t\t};\n\t\tD42DE5667CC9F955711A2DF1BE3A0849 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = F7D033C4C128EECAA020990641FA985F;\n\t\t\tremoteInfo = \"React-jsinspector\";\n\t\t};\n\t\tD45B03393137D2E267BC703865B2BC4D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 20F066A71CEA5EECC7463413442F2B77;\n\t\t\tremoteInfo = \"React-hermes\";\n\t\t};\n\t\tD468F98852D61A99CD42F174A928E8DA /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = B6D5DD49633DFF0657B8C3F08EB3ABA9;\n\t\t\tremoteInfo = ReactCommon;\n\t\t};\n\t\tD8DE127140187183B98BE7DF5DAB9829 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 7ACAA9BE580DD31A5CB9D97C45D9492D;\n\t\t\tremoteInfo = \"React-Core\";\n\t\t};\n\t\tD90130736CF11060AA5F3044DC0B78F5 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EC55D52694092A9D0E6A78EB01207EB5;\n\t\t\tremoteInfo = \"RCT-Folly\";\n\t\t};\n\t\tD93CC2B32B540A9EB1BD1841FD97DF47 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 9F96BF8B7FC28F5CF47242D7A73B11DA;\n\t\t\tremoteInfo = \"React-rendererdebug\";\n\t\t};\n\t\tD96E678A5C6F642E7B0A7E9DC29CF465 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 463F41A7E8B252F8AC5024DA1F4AF6DA;\n\t\t\tremoteInfo = \"React-cxxreact\";\n\t\t};\n\t\tDA4C32AA37270D436CCA7DDE5E8265E4 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 30621D5A9764AC0BD9D02E87B2EA6665;\n\t\t\tremoteInfo = \"React-utils\";\n\t\t};\n\t\tDABD0E6D1231888CF69153902DD90A4D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 9F96BF8B7FC28F5CF47242D7A73B11DA;\n\t\t\tremoteInfo = \"React-rendererdebug\";\n\t\t};\n\t\tDB0DED4E98D854FD7FE257842C962DEC /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 7ACAA9BE580DD31A5CB9D97C45D9492D;\n\t\t\tremoteInfo = \"React-Core\";\n\t\t};\n\t\tDB4AC6BAFB227C3B7803DC6E4A2F3FFB /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DA0709CAAD589C6E7963495210438021;\n\t\t\tremoteInfo = \"React-jsiexecutor\";\n\t\t};\n\t\tDBFC4C49A506639725CD60B7FBF76663 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = F7D033C4C128EECAA020990641FA985F;\n\t\t\tremoteInfo = \"React-jsinspector\";\n\t\t};\n\t\tDC87078558AE74568DA001162E941EDB /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 52C3F83DB80E5D527EDA54FA1DE5470A;\n\t\t\tremoteInfo = \"React-runtimescheduler\";\n\t\t};\n\t\tDF22E5AEB4E3571295EA7B3334BC0393 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 02B79DFED924FA19CA90EC69614733E1;\n\t\t\tremoteInfo = fmt;\n\t\t};\n\t\tDFA19DBEE7782E6D2AC285DEDEC6A394 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 8CC4EAA817AA86310D1900F1DAB3580F;\n\t\t\tremoteInfo = FBLazyVector;\n\t\t};\n\t\tE02813002DF6996D9EA968D5DABFD914 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D0EFEFB685D97280256C559792236873;\n\t\t\tremoteInfo = glog;\n\t\t};\n\t\tE13F53BC3F75A136CF62B889D823DA98 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 0C050E11C4409D3BFAE9CC219C4D6195;\n\t\t\tremoteInfo = \"React-debug\";\n\t\t};\n\t\tE30707A046BC4EB23766FDCF95E28060 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = E7E7CE52C8C68B17224FF8C262D80ABF;\n\t\t\tremoteInfo = RCTRequired;\n\t\t};\n\t\tE328FF71A41B524BF24AFE31D600C8BE /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 50DBAF155FAFB994E067BA8820221EDF;\n\t\t\tremoteInfo = \"React-Fabric\";\n\t\t};\n\t\tE32D9D5625622F59A4E891AB2F0BBE8F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 7ACAA9BE580DD31A5CB9D97C45D9492D;\n\t\t\tremoteInfo = \"React-Core\";\n\t\t};\n\t\tE3DB328B666D52096C8CDE6E0757E653 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 8DED5282246ABFC24F4460D3066C84A0;\n\t\t\tremoteInfo = \"React-RCTFabric\";\n\t\t};\n\t\tE442B4B6A2F8AA2C693319580C2AF969 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 651511D7DA7F07F9FC9AA40A2E86270D;\n\t\t\tremoteInfo = \"React-RCTNetwork\";\n\t\t};\n\t\tE4E5A824873AA8676EF52F2A30A1CFF4 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2681CB7EF647E61F4F9A43029C235607;\n\t\t\tremoteInfo = \"React-callinvoker\";\n\t\t};\n\t\tE562BBB8918D279CDB88A2BF9C9269F9 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5807741745EB757C97C09F2D56726BE0;\n\t\t\tremoteInfo = \"React-NativeModulesApple\";\n\t\t};\n\t\tE59433E2F97541C6CE25FB34745C0597 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EC55D52694092A9D0E6A78EB01207EB5;\n\t\t\tremoteInfo = \"RCT-Folly\";\n\t\t};\n\t\tE643492F477E73D73B4DBB1DB06BC7D4 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 7ACAA9BE580DD31A5CB9D97C45D9492D;\n\t\t\tremoteInfo = \"React-Core\";\n\t\t};\n\t\tE77D75EB8A5E3950C1D5870DC0615F3C /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D20469A9A1E5CFB26045EAEBE3F88E5E;\n\t\t\tremoteInfo = RCTTypeSafety;\n\t\t};\n\t\tE805BB9AA384D87FA227760D8A9A9768 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 463F41A7E8B252F8AC5024DA1F4AF6DA;\n\t\t\tremoteInfo = \"React-cxxreact\";\n\t\t};\n\t\tE813DFDA85C90877A292688B397709DC /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 091003D98BDA80B01B9E35CADE3947F0;\n\t\t\tremoteInfo = \"React-Mapbuffer\";\n\t\t};\n\t\tE84A9F4D561E1111D32BA3A2B52CDAE0 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 985FEA01F314F3C00F0C1E1181E6C4A5;\n\t\t\tremoteInfo = \"hermes-engine\";\n\t\t};\n\t\tE8F7C167F6E0596B97FAF940464F2AAD /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 50DBAF155FAFB994E067BA8820221EDF;\n\t\t\tremoteInfo = \"React-Fabric\";\n\t\t};\n\t\tE9109ED22CA9A2A178B56EA9072F0E53 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = A5E93F38E96B3A37575BEC88AD69AE85;\n\t\t\tremoteInfo = \"React-FabricImage\";\n\t\t};\n\t\tE99784687BF13C6C13BFDF77C9349E3B /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = A5E93F38E96B3A37575BEC88AD69AE85;\n\t\t\tremoteInfo = \"React-FabricImage\";\n\t\t};\n\t\tEACA86167645B5C3ADBDA0097D75461F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5807741745EB757C97C09F2D56726BE0;\n\t\t\tremoteInfo = \"React-NativeModulesApple\";\n\t\t};\n\t\tEB6C649F337A405031F9117FA5BA3422 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DBD2D83E10F8B7D3F4E0E34E6A9FCFA6;\n\t\t\tremoteInfo = \"React-RCTText\";\n\t\t};\n\t\tEC57A96C51CBD5A348B2228A7A2873D2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EFEA55B1B776B6EB4B16F363BFE64D1A;\n\t\t\tremoteInfo = boost;\n\t\t};\n\t\tEC85AE697848BE48B6F09210FF86EC9D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 8DED5282246ABFC24F4460D3066C84A0;\n\t\t\tremoteInfo = \"React-RCTFabric\";\n\t\t};\n\t\tEDA92014437974EDFA693F292BA3683B /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 91D38B18A4E42B1622B83F450706C2F5;\n\t\t\tremoteInfo = \"React-RuntimeApple\";\n\t\t};\n\t\tEDE299B0E0E532AF35E34DAD285C0EDE /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = C2B1B75CCC326124F29FE703CC59BFB7;\n\t\t\tremoteInfo = \"React-RCTAppDelegate\";\n\t\t};\n\t\tEE1123BB0790B159E0219DC27196EAAD /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 95D98F901D07557EF7CA38D3F03832C5;\n\t\t\tremoteInfo = \"React-RCTBlob\";\n\t\t};\n\t\tEEA71226533D5815064A1C73FDC18AD0 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = B69D68A280EC3E60655BD2C715ACB004;\n\t\t\tremoteInfo = \"React-nativeconfig\";\n\t\t};\n\t\tEFB0F809D1F6A97E2AACC5F39FBBDE3A /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = DA0709CAAD589C6E7963495210438021;\n\t\t\tremoteInfo = \"React-jsiexecutor\";\n\t\t};\n\t\tEFEA2A4D8B63216CE096FFA9CD177CB8 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = A5E93F38E96B3A37575BEC88AD69AE85;\n\t\t\tremoteInfo = \"React-FabricImage\";\n\t\t};\n\t\tF0E873B663A5E11DCE0F94915EB97DBA /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D0DD0961119C95E188122B13F3BF4380;\n\t\t\tremoteInfo = \"React-Core-RCTI18nStrings\";\n\t\t};\n\t\tF1A51BC2544543B9EA596410040D2824 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 680299219D3A48D42A648AF6706275A9;\n\t\t\tremoteInfo = \"React-RCTSettings\";\n\t\t};\n\t\tF211E267308F7BC87A3AE4BDF64731B9 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5807741745EB757C97C09F2D56726BE0;\n\t\t\tremoteInfo = \"React-NativeModulesApple\";\n\t\t};\n\t\tF36DB966C710B5B333317F75182AED2F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = FA877ADC442CB19CF61793D234C8B131;\n\t\t\tremoteInfo = \"React-jsi\";\n\t\t};\n\t\tF3C88D21EC8227A4B6BD15269AD29503 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 50DBAF155FAFB994E067BA8820221EDF;\n\t\t\tremoteInfo = \"React-Fabric\";\n\t\t};\n\t\tF50B829B9F8783D3CD5445F9A714C6AB /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 083B602EA19B4AD50EC53C0602F29A7D;\n\t\t\tremoteInfo = \"React-logger\";\n\t\t};\n\t\tF56BDF2AF7A7909B3FD7EA17263A86AE /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = FA877ADC442CB19CF61793D234C8B131;\n\t\t\tremoteInfo = \"React-jsi\";\n\t\t};\n\t\tF57A6DB070CE213FEBA51D9C1BC21F64 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 985FEA01F314F3C00F0C1E1181E6C4A5;\n\t\t\tremoteInfo = \"hermes-engine\";\n\t\t};\n\t\tF5A41D11AE2DF6500E1139FE35DBF1C1 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D0EFEFB685D97280256C559792236873;\n\t\t\tremoteInfo = glog;\n\t\t};\n\t\tF5E042F5B280EE727999F2C1B0962307 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 30621D5A9764AC0BD9D02E87B2EA6665;\n\t\t\tremoteInfo = \"React-utils\";\n\t\t};\n\t\tF63BA3F544EFE63F8DF41943535FD194 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D0EFEFB685D97280256C559792236873;\n\t\t\tremoteInfo = glog;\n\t\t};\n\t\tF6E4CB08E98088B45C9D01C8C23CD322 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = FA877ADC442CB19CF61793D234C8B131;\n\t\t\tremoteInfo = \"React-jsi\";\n\t\t};\n\t\tF716144FE8AF405D0ED3829E084D2D2D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 66B8F5758E6F90E16807A85C003CE61F;\n\t\t\tremoteInfo = \"React-Codegen\";\n\t\t};\n\t\tF82661C856CFC4537BC562D480B0745F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 0C050E11C4409D3BFAE9CC219C4D6195;\n\t\t\tremoteInfo = \"React-debug\";\n\t\t};\n\t\tF9EAF1F1FB5D7937A895952B6DC44E2C /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 083B602EA19B4AD50EC53C0602F29A7D;\n\t\t\tremoteInfo = \"React-logger\";\n\t\t};\n\t\tFA61B1CBE12C5E6B493717A35DCAC02E /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EC55D52694092A9D0E6A78EB01207EB5;\n\t\t\tremoteInfo = \"RCT-Folly\";\n\t\t};\n\t\tFB5D5685F38BF27A4A50D156889136B0 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D0EFEFB685D97280256C559792236873;\n\t\t\tremoteInfo = glog;\n\t\t};\n\t\tFC6FA740B07F549C508BFDF59462093D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = B6D5DD49633DFF0657B8C3F08EB3ABA9;\n\t\t\tremoteInfo = ReactCommon;\n\t\t};\n\t\tFCFB21480542CCDF3413834C2D79C0C1 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 083B602EA19B4AD50EC53C0602F29A7D;\n\t\t\tremoteInfo = \"React-logger\";\n\t\t};\n\t\tFE1420DC552A75EB281D3E84CA466A96 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = F1E2583679398CB5F4D2B3272E9B198F;\n\t\t\tremoteInfo = \"React-perflogger\";\n\t\t};\n\t\tFE15B6EE25FDCF10BE7095256D053D75 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = A5E93F38E96B3A37575BEC88AD69AE85;\n\t\t\tremoteInfo = \"React-FabricImage\";\n\t\t};\n\t\tFE3B276DC9F6BE63ACFEBDDE0FC16DEA /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 4BDD270EACFE5730793AEF0B9BCCBA31;\n\t\t\tremoteInfo = \"React-graphics\";\n\t\t};\n\t\tFE8F2CB304E07FDAD18F6B92924C58C0 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2AB2EF542954AB1C999E03BFEF8DE806;\n\t\t\tremoteInfo = DoubleConversion;\n\t\t};\n\t\tFED80D2E46769763C5739E2DA56C4340 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 28CE447E6F9C5F0EECC0CDD607D06A24;\n\t\t\tremoteInfo = \"React-featureflags\";\n\t\t};\n\t\tFEEBE7070BF647FB6130AFBC699EDA46 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 30621D5A9764AC0BD9D02E87B2EA6665;\n\t\t\tremoteInfo = \"React-utils\";\n\t\t};\n\t\tFEFEC4A876DE93DA3E16A9AB06227889 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 651511D7DA7F07F9FC9AA40A2E86270D;\n\t\t\tremoteInfo = \"React-RCTNetwork\";\n\t\t};\n\t\tFEFEF086D7B146B96B992081E8C52CA3 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 7ACAA9BE580DD31A5CB9D97C45D9492D;\n\t\t\tremoteInfo = \"React-Core\";\n\t\t};\n\t\tFF35B4A5726139AAB006E9EE7C4A644B /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 7ACAA9BE580DD31A5CB9D97C45D9492D;\n\t\t\tremoteInfo = \"React-Core\";\n\t\t};\n\t\tFF6DE5A6963902391657FC083B9682A9 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = FA877ADC442CB19CF61793D234C8B131;\n\t\t\tremoteInfo = \"React-jsi\";\n\t\t};\n\t\tFFFED8AC52E33B03563EFCEEEFF2513C /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 30621D5A9764AC0BD9D02E87B2EA6665;\n\t\t\tremoteInfo = \"React-utils\";\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t002E6C786A97F7958FC7E860BB5B4D1D /* RCTParserUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTParserUtils.h; sourceTree = \"<group>\"; };\n\t\t003FB8B8AF1CBB8E2E7A70E7564183A5 /* React-cxxreact-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-cxxreact-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t005EE10ECBC2C2E6ED007588CF1B3163 /* JSIndexedRAMBundle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = JSIndexedRAMBundle.h; sourceTree = \"<group>\"; };\n\t\t0096A03750976681A81FDECEB7A7D8BE /* RCTConvert+Text.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = \"RCTConvert+Text.mm\"; sourceTree = \"<group>\"; };\n\t\t00A22970BA931D4D5E31AD98D11E9EAC /* SRWebSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRWebSocket.m; path = SocketRocket/SRWebSocket.m; sourceTree = \"<group>\"; };\n\t\t00C9C239F8FE3A38880888D537B1808F /* AsynchronousEventBeat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AsynchronousEventBeat.h; path = react/renderer/scheduler/AsynchronousEventBeat.h; sourceTree = \"<group>\"; };\n\t\t00D0EC9AE90BED5D79B9CAE98DAE902E /* PlatformColorParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PlatformColorParser.h; sourceTree = \"<group>\"; };\n\t\t00F247CF24ECD2EFFF35AC12E91E6FE7 /* Pods-WatermelonTester-WatermelonTesterTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"Pods-WatermelonTester-WatermelonTesterTests-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t0101C2B932AED7971A900220D55C0B86 /* Futex-inl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"Futex-inl.h\"; path = \"folly/detail/Futex-inl.h\"; sourceTree = \"<group>\"; };\n\t\t0105FEC655FAF723FA2D179AFF610513 /* React-RCTLinking-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-RCTLinking-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t012CC3CCEDDC11E02851DBC088F9B7A2 /* RCTImageComponentView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTImageComponentView.mm; sourceTree = \"<group>\"; };\n\t\t012EABDBEA471F999B6DA0663BE3C7BC /* React-Core.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = \"React-Core.modulemap\"; sourceTree = \"<group>\"; };\n\t\t0146BE1DD8D87E794B0CFD58725CC02C /* glog.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = glog.debug.xcconfig; sourceTree = \"<group>\"; };\n\t\t017AAA982C6D59AF8E6BE61915541DEC /* RCTActivityIndicatorViewManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTActivityIndicatorViewManager.h; sourceTree = \"<group>\"; };\n\t\t019948FE306C2A476268E8F263EA2122 /* RCTImageBlurUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTImageBlurUtils.h; path = Libraries/Image/RCTImageBlurUtils.h; sourceTree = \"<group>\"; };\n\t\t019F5B5B17C82713C4D6098E01A6E634 /* HermesInstance.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HermesInstance.h; path = hermes/HermesInstance.h; sourceTree = \"<group>\"; };\n\t\t020982AF78C5E396F3E5F3B1DAB98A95 /* MapBuffer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = MapBuffer.cpp; path = react/renderer/mapbuffer/MapBuffer.cpp; sourceTree = \"<group>\"; };\n\t\t026CCB0609AA0FC063D3220DE6C274D7 /* React-featureflags.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-featureflags.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t02AB5D40CC6820F70D656AA73BEA1C64 /* logging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = logging.h; path = src/glog/logging.h; sourceTree = \"<group>\"; };\n\t\t02E1E7FDCE905C0071E5B85EDEE735B7 /* RWSpinLock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RWSpinLock.h; path = folly/RWSpinLock.h; sourceTree = \"<group>\"; };\n\t\t0314883711F418F964E23FC8DC255846 /* RCTDiffClampAnimatedNode.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTDiffClampAnimatedNode.mm; sourceTree = \"<group>\"; };\n\t\t032ED6B89EEB973216298316E5766563 /* RCTManagedPointer.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTManagedPointer.mm; sourceTree = \"<group>\"; };\n\t\t033B1F5C19B781492F29A47DA4EFD3A4 /* RCTModulesConformingToProtocolsProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTModulesConformingToProtocolsProvider.h; sourceTree = \"<group>\"; };\n\t\t0349E57AC52849B1E2956F92F2F74D82 /* RCTInspector.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTInspector.mm; sourceTree = \"<group>\"; };\n\t\t034CBF9A353EFD13BB30389694CD06AF /* RCTSurfacePresenterStub.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSurfacePresenterStub.h; sourceTree = \"<group>\"; };\n\t\t035C4CAE603317412DE18DE1D8300A94 /* stop_watch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stop_watch.h; path = folly/stop_watch.h; sourceTree = \"<group>\"; };\n\t\t036EB421B5324C4C8F2FEE1BF08B8194 /* Range.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Range.h; path = folly/Range.h; sourceTree = \"<group>\"; };\n\t\t03AD611B7986C5B131631A16A6DD5262 /* RCTPackagerConnection.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTPackagerConnection.mm; sourceTree = \"<group>\"; };\n\t\t03C08820B4F8B692940FAF14B621C83F /* MemoryMapping.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MemoryMapping.h; path = folly/system/MemoryMapping.h; sourceTree = \"<group>\"; };\n\t\t03DD688F3EE201B455FF2DD77C7D1A1E /* RCTLinkingPlugins.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTLinkingPlugins.mm; sourceTree = \"<group>\"; };\n\t\t03ED5FB48027087AD3888234008E8F67 /* Pods-WatermelonTester-WatermelonTesterTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = \"Pods-WatermelonTester-WatermelonTesterTests-resources.sh\"; sourceTree = \"<group>\"; };\n\t\t04160B32874923084312A1D40F4703C3 /* RCTLegacyUIManagerConstantsProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTLegacyUIManagerConstantsProvider.h; path = ReactCommon/RCTLegacyUIManagerConstantsProvider.h; sourceTree = \"<group>\"; };\n\t\t04308B32F6B6A66B18A8BFB8D050CD14 /* TextLayoutManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TextLayoutManager.h; sourceTree = \"<group>\"; };\n\t\t0467EB815B94E64E6883C328F1F0F5BA /* RCTImageLoaderLoggable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTImageLoaderLoggable.h; path = Libraries/Image/RCTImageLoaderLoggable.h; sourceTree = \"<group>\"; };\n\t\t047508626E4450B1D2FB80B3358F97F6 /* React-ImageManager.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-ImageManager.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t051EC8684B270AADB5DFA351ABA355C2 /* RCTSurfacePresenterStub.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTSurfacePresenterStub.m; sourceTree = \"<group>\"; };\n\t\t0575009F97CFBDB1867FBAA80648479B /* RCTLegacyUIManagerConstantsProvider.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RCTLegacyUIManagerConstantsProvider.mm; path = ReactCommon/RCTLegacyUIManagerConstantsProvider.mm; sourceTree = \"<group>\"; };\n\t\t0585010DB2257C8B62F3B1BE51449BDA /* SocketRocket-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"SocketRocket-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t05A8338A74887E54877E3B5E2360A93D /* ConcreteComponentDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ConcreteComponentDescriptor.h; path = react/renderer/core/ConcreteComponentDescriptor.h; sourceTree = \"<group>\"; };\n\t\t05CAC01452155CC5956412107FDEDDAD /* Try.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Try.h; path = folly/Try.h; sourceTree = \"<group>\"; };\n\t\t05CEFC84AD6E69D2E073A1A739700477 /* RCTFabricComponentsPlugins.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTFabricComponentsPlugins.h; sourceTree = \"<group>\"; };\n\t\t05DBC9C72F0FBD718ED0DED3984CE795 /* LegacyViewManagerInteropState.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = LegacyViewManagerInteropState.mm; path = react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropState.mm; sourceTree = \"<group>\"; };\n\t\t05E7D2C113326591CAF18117371EEF7E /* LayoutMetrics.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = LayoutMetrics.cpp; path = react/renderer/core/LayoutMetrics.cpp; sourceTree = \"<group>\"; };\n\t\t0622E264BBCF6697F9CA2A6775362A8F /* PlatformColorParser.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = PlatformColorParser.mm; sourceTree = \"<group>\"; };\n\t\t066367DE103F744E9A009FA7A06E7F87 /* VirtualExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VirtualExecutor.h; path = folly/VirtualExecutor.h; sourceTree = \"<group>\"; };\n\t\t068DB205A59C74E3480D49B43B734439 /* protocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = protocol.h; path = folly/functional/protocol.h; sourceTree = \"<group>\"; };\n\t\t0696F27878C985C7F2D9DBBD0BA700E5 /* RCTSettingsManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTSettingsManager.mm; sourceTree = \"<group>\"; };\n\t\t06A12441B1C3D7A2CB937C85CAF45CCE /* RCTImageView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTImageView.mm; sourceTree = \"<group>\"; };\n\t\t06AB36FC020F2569C74A4684B6B4CD49 /* RCTImageSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTImageSource.m; sourceTree = \"<group>\"; };\n\t\t06E34251980A9A80A1D27297F3B60B98 /* ImageResponse.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ImageResponse.cpp; path = react/renderer/imagemanager/ImageResponse.cpp; sourceTree = \"<group>\"; };\n\t\t06E5E1100A0E21FAB430C3718568BD64 /* ErrorUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ErrorUtils.h; sourceTree = \"<group>\"; };\n\t\t070773F376061291576F78B4FAA81792 /* RCTShadowView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTShadowView.h; sourceTree = \"<group>\"; };\n\t\t071916D0DED7AE1D3E16FC6FEF5AEFAD /* Transform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Transform.h; sourceTree = \"<group>\"; };\n\t\t07248FECF4EA760047A9A71945D1E7E2 /* RCTPropsAnimatedNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTPropsAnimatedNode.h; sourceTree = \"<group>\"; };\n\t\t07319E2772F29181135D234449AFFC14 /* React-featureflags.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = \"React-featureflags.modulemap\"; sourceTree = \"<group>\"; };\n\t\t0741545417754F6F394479EDADE0B5F6 /* RCTTypedModuleConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTTypedModuleConstants.h; sourceTree = \"<group>\"; };\n\t\t07A90696C4EB8690ED661E5470ECC1C5 /* RCTRawTextViewManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTRawTextViewManager.h; sourceTree = \"<group>\"; };\n\t\t07AE3DB6F5EB2B92FE81A1B8A4CE6BE8 /* RCTDeprecation.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RCTDeprecation.release.xcconfig; sourceTree = \"<group>\"; };\n\t\t07BDDD0C6666F54BB37E72A8F733FB50 /* NetOpsDispatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NetOpsDispatcher.h; path = folly/net/NetOpsDispatcher.h; sourceTree = \"<group>\"; };\n\t\t07C2F40D8790521504B9C05E652B31DE /* EventEmitter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = EventEmitter.cpp; path = react/renderer/core/EventEmitter.cpp; sourceTree = \"<group>\"; };\n\t\t080F0694AFBEBB45493A735532A9B8F8 /* RCTCxxMethod.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTCxxMethod.h; sourceTree = \"<group>\"; };\n\t\t0810AA4CE6F716164879BBA08BF3EDCC /* ReactCommon-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"ReactCommon-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t081F794580583CC4DFEB6D2CF2DF3D3D /* ComponentDescriptorProviderRegistry.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ComponentDescriptorProviderRegistry.cpp; path = react/renderer/componentregistry/ComponentDescriptorProviderRegistry.cpp; sourceTree = \"<group>\"; };\n\t\t0829B215BF56AF5014B3A1F4D600D8D5 /* RCTVibrationPlugins.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTVibrationPlugins.h; path = Libraries/Vibration/RCTVibrationPlugins.h; sourceTree = \"<group>\"; };\n\t\t0834C175FB5FEC893A25F29A77A057B6 /* SourceLocation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SourceLocation.h; path = folly/portability/SourceLocation.h; sourceTree = \"<group>\"; };\n\t\t0838EA9EBC4E14FB79309CD7604BB3EE /* RCTTextInputUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTTextInputUtils.h; sourceTree = \"<group>\"; };\n\t\t08986599EA9FB16EDB0C58CAC0A405F8 /* printf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = printf.h; path = include/fmt/printf.h; sourceTree = \"<group>\"; };\n\t\t089961A4AC420F0D1B51AF0717493120 /* React-RCTAnimation-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-RCTAnimation-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t08A72E0FF2CF1B17D479A7069A5C1123 /* RCTSourceCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTSourceCode.h; path = React/CoreModules/RCTSourceCode.h; sourceTree = \"<group>\"; };\n\t\t090C56DE791731685F76F2010E681C1E /* LegacyUIManagerConstantsProviderBinding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LegacyUIManagerConstantsProviderBinding.h; sourceTree = \"<group>\"; };\n\t\t092DBE2F0CE18725FF1B0C8D08B1147C /* RCTGIFImageDecoder.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTGIFImageDecoder.mm; sourceTree = \"<group>\"; };\n\t\t0991F79F05F020ABEA8DE3AFD72A7B08 /* Database.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Database.h; sourceTree = \"<group>\"; };\n\t\t099CB5926F7A7C10C82306F50F31CAE7 /* HazptrDomain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HazptrDomain.h; path = folly/synchronization/HazptrDomain.h; sourceTree = \"<group>\"; };\n\t\t09CACB20A3D99F350BE5A1565F4ACA67 /* MountingCoordinator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MountingCoordinator.h; path = react/renderer/mounting/MountingCoordinator.h; sourceTree = \"<group>\"; };\n\t\t09E3B1D3DA53A6062C5B417F4010FF1D /* React-RCTActionSheet.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-RCTActionSheet.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t0A05EEA6DE2EF6E728D7085041633AFA /* RCTTextShadowView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTTextShadowView.mm; sourceTree = \"<group>\"; };\n\t\t0A190A345B19C93427A45B7A6CC52FDF /* DatabasePlatform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = DatabasePlatform.h; sourceTree = \"<group>\"; };\n\t\t0A801C14BFA125ACB2E474AAFB4B2D03 /* RCTAdditionAnimatedNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTAdditionAnimatedNode.h; sourceTree = \"<group>\"; };\n\t\t0AA655BCC979429F0F18E3B0FA7422BD /* ParagraphShadowNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParagraphShadowNode.h; path = react/renderer/components/text/ParagraphShadowNode.h; sourceTree = \"<group>\"; };\n\t\t0AB45FDFADEB5035DFD513D71DB737DC /* React-featureflags.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-featureflags.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t0ACDA1105A253290970D63F1EB10F574 /* Errata.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Errata.h; sourceTree = \"<group>\"; };\n\t\t0AD8F1840702844270F2F2AB1CEEAE08 /* React-RCTLinking-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-RCTLinking-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t0B38F938F0F9868A60309B113ECB3CAA /* RCTFontUtils.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTFontUtils.mm; sourceTree = \"<group>\"; };\n\t\t0B87A884215B67C149F379E4B4E20F8A /* SRConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRConstants.h; path = SocketRocket/Internal/SRConstants.h; sourceTree = \"<group>\"; };\n\t\t0BB0E5875A31D5E8CDCEA86F5A67276E /* Time.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Time.h; path = folly/portability/Time.h; sourceTree = \"<group>\"; };\n\t\t0BD79853D3326455B2119D890DC49815 /* MapBufferBuilder.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = MapBufferBuilder.cpp; path = react/renderer/mapbuffer/MapBufferBuilder.cpp; sourceTree = \"<group>\"; };\n\t\t0BD7AC8D29513BC50E69DFF8F4FD5522 /* react_native_log.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = react_native_log.cpp; sourceTree = \"<group>\"; };\n\t\t0BE37755D7657BED9301FBB569B8B3F9 /* AsyncDebuggerAPI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AsyncDebuggerAPI.h; path = destroot/include/hermes/AsyncDebuggerAPI.h; sourceTree = \"<group>\"; };\n\t\t0BEE9CFB3C6827C1D888BAFC061BB79A /* ShadowTreeDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ShadowTreeDelegate.h; path = react/renderer/mounting/ShadowTreeDelegate.h; sourceTree = \"<group>\"; };\n\t\t0BFAD875BDFCB017A45CCF7A1AD8AE34 /* boost.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = boost.debug.xcconfig; sourceTree = \"<group>\"; };\n\t\t0BFB85B76F6C2F9809214837BFA1F944 /* bignum.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = bignum.cc; path = \"double-conversion/bignum.cc\"; sourceTree = \"<group>\"; };\n\t\t0C0FFE3B52F5FC5B9E85936F71606010 /* TimeoutQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TimeoutQueue.h; path = folly/TimeoutQueue.h; sourceTree = \"<group>\"; };\n\t\t0C2BC45457F7B7889204A04BE2584DDE /* RCTAppDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTAppDelegate.h; sourceTree = \"<group>\"; };\n\t\t0C4FC7D25DF3E8899A55391A2FBA5740 /* RCTLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTLayout.m; sourceTree = \"<group>\"; };\n\t\t0C6723FFC2422C5B1BE0FFFF1B17CC36 /* RCT-Folly.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = \"RCT-Folly.modulemap\"; sourceTree = \"<group>\"; };\n\t\t0C73DEF93EB855958CC048BCB076258B /* AtomicHashArray.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AtomicHashArray.h; path = folly/AtomicHashArray.h; sourceTree = \"<group>\"; };\n\t\t0C81656E6394B680E495643EDC27FC6E /* Assume.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Assume.h; path = folly/lang/Assume.h; sourceTree = \"<group>\"; };\n\t\t0C867898C76A4282B23A18DB01393712 /* RawPropsKey.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = RawPropsKey.cpp; path = react/renderer/core/RawPropsKey.cpp; sourceTree = \"<group>\"; };\n\t\t0C8868803CE5E240AD3BBEBB15555C0F /* UnrollUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UnrollUtils.h; path = folly/detail/UnrollUtils.h; sourceTree = \"<group>\"; };\n\t\t0C897CCFDE4BF7130CDDA0286B966FDB /* SafeAreaViewComponentDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SafeAreaViewComponentDescriptor.h; path = react/renderer/components/safeareaview/SafeAreaViewComponentDescriptor.h; sourceTree = \"<group>\"; };\n\t\t0C8E237AA818FABF9B7C6CDB03FA448A /* RCTTiming.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTTiming.mm; sourceTree = \"<group>\"; };\n\t\t0CBCEC21A3A50591C487CAFD8DCF2CED /* View.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = View.h; path = folly/container/View.h; sourceTree = \"<group>\"; };\n\t\t0CD4200922C77CCA406FFAC67124F437 /* RCTSurfaceHostingView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSurfaceHostingView.h; sourceTree = \"<group>\"; };\n\t\t0D01E2CE505FD137C83D5A00A839D8B9 /* React-jsitracing.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-jsitracing.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t0D107AF1088C433FC9328FB083C1609A /* FmtCompile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FmtCompile.h; path = folly/portability/FmtCompile.h; sourceTree = \"<group>\"; };\n\t\t0D1AF6F139CF74E2FE8BDA319FFEE74E /* ParkingLot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParkingLot.h; path = folly/synchronization/ParkingLot.h; sourceTree = \"<group>\"; };\n\t\t0D6609F1FFDAA711D16BE1CBBFCEF19C /* MapUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MapUtil.h; path = folly/MapUtil.h; sourceTree = \"<group>\"; };\n\t\t0D6775356C3C08E3F8AEEA4E5D9A9A05 /* BaseTextShadowNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BaseTextShadowNode.h; path = react/renderer/components/text/BaseTextShadowNode.h; sourceTree = \"<group>\"; };\n\t\t0D7CB8AC94086CDE9ABBF0A55442AE9F /* LegacyViewManagerInteropViewProps.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LegacyViewManagerInteropViewProps.h; path = react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropViewProps.h; sourceTree = \"<group>\"; };\n\t\t0D8FEE5EFC0D5C3452E4502887D2D780 /* RCTBorderStyle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTBorderStyle.h; sourceTree = \"<group>\"; };\n\t\t0D9123036D19728374029B1BD6567BA8 /* PixelGrid.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = PixelGrid.cpp; sourceTree = \"<group>\"; };\n\t\t0DE9029B11C02C40098A6D686789D830 /* RCTRefreshControlManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTRefreshControlManager.h; sourceTree = \"<group>\"; };\n\t\t0DE9453C0D97B2C7CCEC65A7D9965FF8 /* RCTInputAccessoryContentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTInputAccessoryContentView.h; sourceTree = \"<group>\"; };\n\t\t0DF430B965D7F43DCCD92803B07AD0F7 /* JSBundleType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = JSBundleType.h; sourceTree = \"<group>\"; };\n\t\t0DFF996F36C36E3B8BE3131F1026090F /* SRError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRError.m; path = SocketRocket/Internal/Utilities/SRError.m; sourceTree = \"<group>\"; };\n\t\t0E07224933F2530B0ADD76E3867C3FA8 /* React-Codegen-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-Codegen-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t0E27D0C1422F9594DB63A196340A1C0E /* RCTURLRequestHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTURLRequestHandler.h; sourceTree = \"<group>\"; };\n\t\t0E432DBE0F06DDCE804C5D453ED121C3 /* HostPlatformViewProps.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = HostPlatformViewProps.h; sourceTree = \"<group>\"; };\n\t\t0E4412A2483337D140CD540D4751F2FB /* AtomicLinkedList.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AtomicLinkedList.h; path = folly/AtomicLinkedList.h; sourceTree = \"<group>\"; };\n\t\t0E46F0129DD1A6A967F2580EB63011DB /* EventDispatcher.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = EventDispatcher.cpp; path = react/renderer/core/EventDispatcher.cpp; sourceTree = \"<group>\"; };\n\t\t0E8EF1F55FE2016CDA7B786F01C8882E /* PerfScoped.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PerfScoped.h; path = folly/detail/PerfScoped.h; sourceTree = \"<group>\"; };\n\t\t0E956492B6B4F762B69C00A6496D5AD0 /* Malloc.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = Malloc.cpp; path = folly/portability/Malloc.cpp; sourceTree = \"<group>\"; };\n\t\t0E9B6C8F56601C7A8963DC42032FDCD4 /* RCTRootContentView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTRootContentView.m; sourceTree = \"<group>\"; };\n\t\t0EAB4DE45806E1FB41C909B6AE2B53C2 /* RCTRedBoxSetEnabled.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTRedBoxSetEnabled.h; sourceTree = \"<group>\"; };\n\t\t0EAE4B2A9C96F883E85714C869494F81 /* Gutter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Gutter.h; sourceTree = \"<group>\"; };\n\t\t0EB25BDE8A306950B650A09F1A8ED625 /* React-logger.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-logger.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t0EBD024CC0AC3DC8897152BE3FB46E12 /* UIManagerMountHook.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UIManagerMountHook.h; path = react/renderer/uimanager/UIManagerMountHook.h; sourceTree = \"<group>\"; };\n\t\t0EE4437365F516793455723C0F9555B1 /* RCTViewUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTViewUtils.h; sourceTree = \"<group>\"; };\n\t\t0EE92B6EF155BE970721A6B2647F4AF4 /* F14Set-fwd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"F14Set-fwd.h\"; path = \"folly/container/F14Set-fwd.h\"; sourceTree = \"<group>\"; };\n\t\t0EEA744CEB6248472C8D4DCFAB2E718C /* React-Mapbuffer-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-Mapbuffer-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t0F403305468DF1F3BDD4EB48076E71DC /* el.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = el.lproj; path = React/I18n/strings/el.lproj; sourceTree = \"<group>\"; };\n\t\t0F4162FD06F15F97900434A78640AA96 /* RCTTextSelection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTTextSelection.h; sourceTree = \"<group>\"; };\n\t\t0F5B11863A62393419B2A19ECDD56569 /* conversions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = conversions.h; path = react/renderer/components/textinput/platform/ios/react/renderer/components/iostextinput/conversions.h; sourceTree = \"<group>\"; };\n\t\t0F6E474235C8459CDC4689EE8FA90735 /* LeakChecker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LeakChecker.h; path = react/renderer/leakchecker/LeakChecker.h; sourceTree = \"<group>\"; };\n\t\t0F8273DFC8BCEB15B1ACE7AA5FB60DFA /* TimerManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TimerManager.h; sourceTree = \"<group>\"; };\n\t\t0F9298A1BC8933244F1905CC7B380EA1 /* RCTBridge+Inspector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"RCTBridge+Inspector.h\"; sourceTree = \"<group>\"; };\n\t\t0FB451B2BE52BDDEC46C0D989282A4A7 /* RCTHermesInstance.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTHermesInstance.h; path = ReactCommon/RCTHermesInstance.h; sourceTree = \"<group>\"; };\n\t\t0FD37A9A693B3CEB099DDA9955E3C67F /* ValueUnit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ValueUnit.h; sourceTree = \"<group>\"; };\n\t\t0FE5FBB2B14D4BC374CECD01A71C50C3 /* WatermelonDB.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = WatermelonDB.debug.xcconfig; sourceTree = \"<group>\"; };\n\t\t102110A5E77C7808CB1EAFF9A4489E0B /* InstanceAgent.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = InstanceAgent.cpp; sourceTree = \"<group>\"; };\n\t\t106A05F0520EFBA0E22815812BDA18F5 /* ReactCommon.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ReactCommon.debug.xcconfig; sourceTree = \"<group>\"; };\n\t\t108A53F43BD5185295474605F7659C5C /* React-RCTNetwork-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-RCTNetwork-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t109F9C2934C9D047C914A988E8DFBBA6 /* RCTAnimationDriver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTAnimationDriver.h; sourceTree = \"<group>\"; };\n\t\t10CFAB7D8A0F2282F1390473E5C37F0A /* InputAccessoryShadowNode.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = InputAccessoryShadowNode.cpp; path = react/renderer/components/inputaccessory/InputAccessoryShadowNode.cpp; sourceTree = \"<group>\"; };\n\t\t10CFD843724D42F53E4373E441FD4EBB /* hash_combine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = hash_combine.h; sourceTree = \"<group>\"; };\n\t\t10F169E67E9F6AF9D77C49B765487E70 /* Arena.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Arena.h; path = folly/memory/Arena.h; sourceTree = \"<group>\"; };\n\t\t11168BD52EB1FA983258A217EBF918E9 /* SRURLUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRURLUtilities.h; path = SocketRocket/Internal/Utilities/SRURLUtilities.h; sourceTree = \"<group>\"; };\n\t\t1147DF7D7F05EA4A85F3A1FF854A3B85 /* RCTDeprecation-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"RCTDeprecation-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\t11570ADC72BE55D73F846D94EDF7C249 /* React-NativeModulesApple-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-NativeModulesApple-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t119AE002F412B1467B684F7738048356 /* EvictingCacheMap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EvictingCacheMap.h; path = folly/container/EvictingCacheMap.h; sourceTree = \"<group>\"; };\n\t\t11B65C1CE4591582924CEE6C134FDC1D /* ScrollViewState.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ScrollViewState.cpp; path = react/renderer/components/scrollview/ScrollViewState.cpp; sourceTree = \"<group>\"; };\n\t\t11C43FEC006F4FB4810E35B57EDCC84B /* SharedMutex.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = SharedMutex.cpp; path = folly/SharedMutex.cpp; sourceTree = \"<group>\"; };\n\t\t11F2C5264D76056FDC6FDCEE75FEEE82 /* ParagraphShadowNode.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ParagraphShadowNode.cpp; path = react/renderer/components/text/ParagraphShadowNode.cpp; sourceTree = \"<group>\"; };\n\t\t11F7F6FA2445CB7E109866B0BE0CC3E6 /* RCTInputAccessoryViewManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTInputAccessoryViewManager.h; sourceTree = \"<group>\"; };\n\t\t11FCAB3F234C2F7A1E00B43655EF0707 /* React-RCTVibration.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-RCTVibration.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t125AE03965ABF8E4C157E9FE3A55D187 /* React-jsi-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-jsi-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\t1260781BA130D5E430412D17AA9CF321 /* MaybeManagedPtr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MaybeManagedPtr.h; path = folly/MaybeManagedPtr.h; sourceTree = \"<group>\"; };\n\t\t126C5DD1D6213610884F84302374D19F /* JSIInstaller.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = JSIInstaller.mm; sourceTree = \"<group>\"; };\n\t\t128F50FE92E188CCCF4F6F5CFB09C64F /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = \"<group>\"; };\n\t\t12A7093733E6C2A1819EAFD7B6275C0B /* JsErrorHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = JsErrorHandler.h; sourceTree = \"<group>\"; };\n\t\t12B4501A9455AFB01AA0089214B8A38D /* React-jsi.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-jsi.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t12BBC4125F0A832B58555EA01B639783 /* RCTLinkingManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTLinkingManager.mm; sourceTree = \"<group>\"; };\n\t\t12BF91C85904FD8BA917DDBF03ECCC1D /* SimdForEach.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SimdForEach.h; path = folly/detail/SimdForEach.h; sourceTree = \"<group>\"; };\n\t\t12C4D9C3A09316945470A899D769DF18 /* BatchedEventQueue.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = BatchedEventQueue.cpp; path = react/renderer/core/BatchedEventQueue.cpp; sourceTree = \"<group>\"; };\n\t\t12C530B1088E418C923CD9F26CBCAB6F /* InputAccessoryComponentDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = InputAccessoryComponentDescriptor.h; path = react/renderer/components/inputaccessory/InputAccessoryComponentDescriptor.h; sourceTree = \"<group>\"; };\n\t\t12F4585D8579A5039D742D7E3913D0B6 /* RCTImageResponseDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTImageResponseDelegate.h; path = Fabric/RCTImageResponseDelegate.h; sourceTree = \"<group>\"; };\n\t\t130677CC93E00689A413DE1C5D45754D /* F14Policy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = F14Policy.h; path = folly/container/detail/F14Policy.h; sourceTree = \"<group>\"; };\n\t\t132132CB707C71FA5E68A7BB06EE4804 /* CoreFeatures.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = CoreFeatures.cpp; sourceTree = \"<group>\"; };\n\t\t1338B219849CEDF7FE7D3407E9663E27 /* React-ImageManager.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-ImageManager.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t1340E22099179F463C3487BAB8420980 /* jsi.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = jsi.cpp; sourceTree = \"<group>\"; };\n\t\t1363975620BCD9B8C433172AE2F17F0F /* React-hermes-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-hermes-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t1371AFE6C3E17A03757544B99B0C563C /* RCTBlobManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTBlobManager.mm; sourceTree = \"<group>\"; };\n\t\t137A31E381AB4AA534731ED6AF105636 /* React-rendererdebug-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-rendererdebug-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t1381503C42FFF460E946860A32A6F981 /* React-RuntimeApple */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-RuntimeApple\"; path = \"libReact-RuntimeApple.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t13A1EDC09A69ED3292AAE26A206851F9 /* RCTModuleData.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTModuleData.mm; sourceTree = \"<group>\"; };\n\t\t13A658922FD40E29EEAB7D23E4D3A2BD /* RCTAppearance.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTAppearance.h; path = React/CoreModules/RCTAppearance.h; sourceTree = \"<group>\"; };\n\t\t13DDAD72F9C7DC4D814F4D340784ECEB /* AtomicUnorderedMapUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AtomicUnorderedMapUtils.h; path = folly/detail/AtomicUnorderedMapUtils.h; sourceTree = \"<group>\"; };\n\t\t13E6AE2DFCC178D3B20D130A2FA35FAC /* RootProps.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RootProps.h; path = react/renderer/components/root/RootProps.h; sourceTree = \"<group>\"; };\n\t\t13EBFD759F626BF0B8380604322D2E84 /* CxxTurboModuleUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CxxTurboModuleUtils.h; path = react/nativemodule/core/ReactCommon/CxxTurboModuleUtils.h; sourceTree = \"<group>\"; };\n\t\t13EEFF365502DE9E6776D22ADDDCE4A5 /* React-RCTImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-RCTImage-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t145565A2AB5DD84BEAFA27EAFA2F4141 /* BridgelessNativeMethodCallInvoker.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = BridgelessNativeMethodCallInvoker.cpp; sourceTree = \"<group>\"; };\n\t\t14631AAC5EAA775CD7C68A1D2E2D51C0 /* RCTLocalAssetImageLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTLocalAssetImageLoader.h; path = Libraries/Image/RCTLocalAssetImageLoader.h; sourceTree = \"<group>\"; };\n\t\t14D9F600ECC14E962003AAB9F191233A /* YGPixelGrid.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YGPixelGrid.h; path = yoga/YGPixelGrid.h; sourceTree = \"<group>\"; };\n\t\t1528B7D498ED533635A7109CF11814AC /* conversions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = conversions.h; path = react/renderer/components/view/conversions.h; sourceTree = \"<group>\"; };\n\t\t1544C565704FC17B15EBCF4F926F4C60 /* React-jsiexecutor.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-jsiexecutor.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t157BEE76ABB5FC023F974602BC587B8A /* React-Fabric.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-Fabric.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t1598F75BEAFDD5C3F7AD8DCDD6D5D2C4 /* ShadowNodeFragment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ShadowNodeFragment.h; path = react/renderer/core/ShadowNodeFragment.h; sourceTree = \"<group>\"; };\n\t\t159A07D2F149809ABC30E5FCBB89938F /* RCTSettingsManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTSettingsManager.h; path = Libraries/Settings/RCTSettingsManager.h; sourceTree = \"<group>\"; };\n\t\t15AD43283A6A2C9FC3B3AFE6DCF2E636 /* RCTMultilineTextInputView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTMultilineTextInputView.h; sourceTree = \"<group>\"; };\n\t\t15D526144725A1A4158A2B28A0B914E5 /* NSRunLoop+SRWebSocketPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"NSRunLoop+SRWebSocketPrivate.h\"; path = \"SocketRocket/Internal/NSRunLoop+SRWebSocketPrivate.h\"; sourceTree = \"<group>\"; };\n\t\t15D5A0BFD941071680CCF747591837C8 /* UIView+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"UIView+Private.h\"; sourceTree = \"<group>\"; };\n\t\t15E1BE174AEA123290CA37B86EFDD5F2 /* RCTWebSocketModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTWebSocketModule.h; path = React/CoreModules/RCTWebSocketModule.h; sourceTree = \"<group>\"; };\n\t\t15E1FB248EB6C077E99CE7C0E381D4FC /* React-debug-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-debug-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t163349EF8EF0ABE776CEB5D5A72C377A /* RCTImageDataDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTImageDataDecoder.h; path = Libraries/Image/RCTImageDataDecoder.h; sourceTree = \"<group>\"; };\n\t\t163CDA479246FA5F4CF5C7949B3FC9F7 /* Fingerprint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Fingerprint.h; path = folly/Fingerprint.h; sourceTree = \"<group>\"; };\n\t\t166D6C41B0081CEA737676E813606B04 /* RCTDevLoadingViewSetEnabled.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTDevLoadingViewSetEnabled.h; sourceTree = \"<group>\"; };\n\t\t169BFFC72EEA61E28D560B57CD831CD0 /* RCTTextTransform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTTextTransform.h; path = Libraries/Text/RCTTextTransform.h; sourceTree = \"<group>\"; };\n\t\t16ADA7CA003A807781299F67A1578DF4 /* RCTAnimationUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTAnimationUtils.h; path = Libraries/NativeAnimation/RCTAnimationUtils.h; sourceTree = \"<group>\"; };\n\t\t16AFB3F99F57DB5AEF193C3CB1BC1A49 /* RCTNativeAnimatedModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTNativeAnimatedModule.h; path = Libraries/NativeAnimation/RCTNativeAnimatedModule.h; sourceTree = \"<group>\"; };\n\t\t16BD9C5268EF8F747D73A1B1E9C395CD /* Stdio.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Stdio.h; path = folly/portability/Stdio.h; sourceTree = \"<group>\"; };\n\t\t16E3111070B2202E4E59A2EB4AAF55A9 /* threadsafe.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = threadsafe.h; path = jsi/threadsafe.h; sourceTree = \"<group>\"; };\n\t\t16F3181ABDCFFB13D360DA6C3047FC89 /* RCTInstance.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTInstance.h; path = ReactCommon/RCTInstance.h; sourceTree = \"<group>\"; };\n\t\t1731535F9FF01DC7DE5758D88594F0CD /* args.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = args.h; path = include/fmt/args.h; sourceTree = \"<group>\"; };\n\t\t173353D36092C2DD008D22FDEA5C21AC /* F14IntrinsicsAvailability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = F14IntrinsicsAvailability.h; path = folly/container/detail/F14IntrinsicsAvailability.h; sourceTree = \"<group>\"; };\n\t\t1749F4295539F83F4BA4637FE2C39F34 /* RCTUIManagerUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTUIManagerUtils.m; sourceTree = \"<group>\"; };\n\t\t17A0B50A888B86A9F608EBDAB0EA9B29 /* React-callinvoker.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-callinvoker.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t17E08D0C97050157936C9ACE4FAF61CA /* ScrollViewEventEmitter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ScrollViewEventEmitter.cpp; path = react/renderer/components/scrollview/ScrollViewEventEmitter.cpp; sourceTree = \"<group>\"; };\n\t\t181D4079537F9E8B578405C805CEE545 /* RCTBlobManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTBlobManager.h; path = Libraries/Blob/RCTBlobManager.h; sourceTree = \"<group>\"; };\n\t\t182071DF4FF23AD36C90547CC9C960E3 /* SpookyHashV1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpookyHashV1.h; path = folly/hash/SpookyHashV1.h; sourceTree = \"<group>\"; };\n\t\t182B0C702A35C8585E02CD20E58ABF79 /* RCTCxxConvert.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTCxxConvert.m; sourceTree = \"<group>\"; };\n\t\t1841AD95444E2505711CA1DEE133B7F8 /* ThrottledLifoSem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ThrottledLifoSem.h; path = folly/synchronization/ThrottledLifoSem.h; sourceTree = \"<group>\"; };\n\t\t18590B13A8701CBEA8A9383645C889B3 /* RCTDivisionAnimatedNode.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTDivisionAnimatedNode.mm; sourceTree = \"<group>\"; };\n\t\t189A7A88790E4B177BFC5728470F1A12 /* React-RCTText.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-RCTText.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t18B4341AA7547FF0A90E6BC28D6C448F /* UnstableLegacyViewManagerAutomaticShadowNode.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = UnstableLegacyViewManagerAutomaticShadowNode.cpp; path = react/renderer/components/legacyviewmanagerinterop/UnstableLegacyViewManagerAutomaticShadowNode.cpp; sourceTree = \"<group>\"; };\n\t\t18DA86D744EE0EE17E265BBB90390A23 /* RCTActivityIndicatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTActivityIndicatorView.m; sourceTree = \"<group>\"; };\n\t\t18E04C8FC9E54D8A00245F3E4B386C0E /* RCTTrackingAnimatedNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTTrackingAnimatedNode.h; sourceTree = \"<group>\"; };\n\t\t18EF461AA27476D0FDF425B3D2483EBA /* ShadowNodeTraits.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ShadowNodeTraits.h; path = react/renderer/core/ShadowNodeTraits.h; sourceTree = \"<group>\"; };\n\t\t19006C0042936BC7BC14B717FB85308A /* BaseViewProps.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BaseViewProps.h; path = react/renderer/components/view/BaseViewProps.h; sourceTree = \"<group>\"; };\n\t\t191255608BFC29BB27805F33B002132B /* RCTView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTView.h; sourceTree = \"<group>\"; };\n\t\t1936453FF2A7E3A13063C4917C4D5598 /* RCT-Folly */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"RCT-Folly\"; path = \"libRCT-Folly.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t193D60EE177645F7547D71A2810D872F /* ThreadSafetyAnalysis.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ThreadSafetyAnalysis.h; path = destroot/include/hermes/ThreadSafetyAnalysis.h; sourceTree = \"<group>\"; };\n\t\t194D194CCB89C075CEA29192C47A2A33 /* TelemetryController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TelemetryController.h; path = react/renderer/mounting/TelemetryController.h; sourceTree = \"<group>\"; };\n\t\t196B06D9D049A05D1552FD603A608719 /* RCTConvert+Transform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"RCTConvert+Transform.h\"; sourceTree = \"<group>\"; };\n\t\t19853EBFDCA4264503A59B9DBEDB47E4 /* RCTFontProperties.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTFontProperties.h; sourceTree = \"<group>\"; };\n\t\t19CE4DC4612BEAACFA7B4D6EA7464CC4 /* RootComponentDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RootComponentDescriptor.h; path = react/renderer/components/root/RootComponentDescriptor.h; sourceTree = \"<group>\"; };\n\t\t19D4CF0857B96FBEA270CC2CD46B424F /* RawProps.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = RawProps.cpp; path = react/renderer/core/RawProps.cpp; sourceTree = \"<group>\"; };\n\t\t1A2E8DDEAB65BA26685A7F1CE66A6C2B /* ThreadCachedInt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ThreadCachedInt.h; path = folly/ThreadCachedInt.h; sourceTree = \"<group>\"; };\n\t\t1A57B42E48BE086DEBC492BDE3BBD3C9 /* RCTDevMenu.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTDevMenu.mm; sourceTree = \"<group>\"; };\n\t\t1AA86F8B69827747B651178FB5B21A21 /* SizingMode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SizingMode.h; sourceTree = \"<group>\"; };\n\t\t1AB59CE368BC9400B2ABCD47AFB8C08C /* RawValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RawValue.h; path = react/renderer/core/RawValue.h; sourceTree = \"<group>\"; };\n\t\t1AB864487EEC16CB2CBD3A5CA275FCA1 /* Foreach.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Foreach.h; path = folly/container/Foreach.h; sourceTree = \"<group>\"; };\n\t\t1AD8831E19FF419852060A20EFC9943A /* React-nativeconfig.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-nativeconfig.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t1ADB11086CA7355EACB08F3BD428C0A9 /* EventLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EventLogger.h; path = react/renderer/core/EventLogger.h; sourceTree = \"<group>\"; };\n\t\t1AFB9A68F41FAA405A3AAE37295C10B3 /* ThreadCachedArena.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ThreadCachedArena.h; path = folly/memory/ThreadCachedArena.h; sourceTree = \"<group>\"; };\n\t\t1B14B05F1E3FA960A779224B96DBB041 /* UnbatchedEventQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UnbatchedEventQueue.h; path = react/renderer/core/UnbatchedEventQueue.h; sourceTree = \"<group>\"; };\n\t\t1B389CA633B6575A2FA37718B19A4756 /* RawEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RawEvent.h; path = react/renderer/core/RawEvent.h; sourceTree = \"<group>\"; };\n\t\t1B6371A9E6D76C16AD518CC288F335F4 /* jsilib.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = jsilib.h; path = jsi/jsilib.h; sourceTree = \"<group>\"; };\n\t\t1B644FFAD498B469A3633A360744C403 /* ContextContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ContextContainer.h; sourceTree = \"<group>\"; };\n\t\t1B95AB0EF143A97263C1017EABE0E073 /* DebugStringConvertibleItem.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = DebugStringConvertibleItem.cpp; sourceTree = \"<group>\"; };\n\t\t1B9B081A11AD725344E711226D80CA4B /* RCTUIManagerObserverCoordinator.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTUIManagerObserverCoordinator.mm; sourceTree = \"<group>\"; };\n\t\t1BBB556BC44275845C988BDF27E10880 /* PicoSpinLock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PicoSpinLock.h; path = folly/synchronization/PicoSpinLock.h; sourceTree = \"<group>\"; };\n\t\t1BF78B5D7B2AFC98B3545C8C9DA66D16 /* RCTSurfaceView+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"RCTSurfaceView+Internal.h\"; sourceTree = \"<group>\"; };\n\t\t1C2D3D50F94DAC3059E02150AEC13F5F /* SRRandom.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRRandom.h; path = SocketRocket/Internal/Utilities/SRRandom.h; sourceTree = \"<group>\"; };\n\t\t1C48A5DDAEDABFF1B422CC636928EFAD /* ShadowNodes.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ShadowNodes.cpp; path = react/renderer/components/rncore/ShadowNodes.cpp; sourceTree = \"<group>\"; };\n\t\t1C5225A85D60908066F79256FD961B24 /* YGNodeStyle.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = YGNodeStyle.cpp; path = yoga/YGNodeStyle.cpp; sourceTree = \"<group>\"; };\n\t\t1C6F2A8DD916FFABBB7924E8D417B7EC /* ScopeGuard.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ScopeGuard.h; path = folly/ScopeGuard.h; sourceTree = \"<group>\"; };\n\t\t1C7F9675F0DDF7D607F4527AEEA7CE9A /* PlatformTimerRegistry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PlatformTimerRegistry.h; sourceTree = \"<group>\"; };\n\t\t1C93DB36FA986D128CB97DE275C7A0B4 /* DistributedMutex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DistributedMutex.h; path = folly/synchronization/DistributedMutex.h; sourceTree = \"<group>\"; };\n\t\t1C9CA7D5550AD1D94A7AA763FBA17534 /* DoubleConversion.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DoubleConversion.release.xcconfig; sourceTree = \"<group>\"; };\n\t\t1CB19BE6FA86208CB5F4A61FAACE298E /* WeightedEvictingCacheMap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WeightedEvictingCacheMap.h; path = folly/container/WeightedEvictingCacheMap.h; sourceTree = \"<group>\"; };\n\t\t1CBBEDCDAA1BFA365580787F950200AD /* RCTJavaScriptLoader.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTJavaScriptLoader.mm; sourceTree = \"<group>\"; };\n\t\t1CEDA3FBCCC6D4495CE2BD141F7EA3B2 /* GLog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GLog.h; path = folly/GLog.h; sourceTree = \"<group>\"; };\n\t\t1D0F55A1CBF2A5D8A9F6B0B49A152959 /* NetOps.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NetOps.h; path = folly/net/NetOps.h; sourceTree = \"<group>\"; };\n\t\t1D12F92E6DE4195516C44922291730FB /* RuntimeScheduler_Modern.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = RuntimeScheduler_Modern.cpp; sourceTree = \"<group>\"; };\n\t\t1D239EA1163C5886418BBB97A80CD68C /* RCTUtilsUIOverride.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTUtilsUIOverride.m; sourceTree = \"<group>\"; };\n\t\t1D3B27D8E985D0BA1FD18A34437498E8 /* React-utils-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-utils-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t1D4F51217F7A23436A551FB1BF267D5C /* RCTDefaultCxxLogFunction.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTDefaultCxxLogFunction.mm; sourceTree = \"<group>\"; };\n\t\t1D68855FFC5514B5F5A3FD7EF50735D4 /* RCTSurfaceTouchHandler.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RCTSurfaceTouchHandler.mm; path = Fabric/RCTSurfaceTouchHandler.mm; sourceTree = \"<group>\"; };\n\t\t1DA258A2CCF7FAA7A20EA853EAEA18AE /* ReactNativeVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ReactNativeVersion.h; sourceTree = \"<group>\"; };\n\t\t1DC27EF5E8E8BA5F9132B0790BA1C022 /* RCTInputAccessoryView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTInputAccessoryView.mm; sourceTree = \"<group>\"; };\n\t\t1DC4F893B0788A2E9A80A4BD69265922 /* CPortability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CPortability.h; path = folly/CPortability.h; sourceTree = \"<group>\"; };\n\t\t1DD6F27078A03BF0ED7DCF3591290691 /* Utility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Utility.h; path = folly/synchronization/Utility.h; sourceTree = \"<group>\"; };\n\t\t1DEAC3AED56C9C3D215091D714CEC25C /* ViewPropsInterpolation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ViewPropsInterpolation.h; path = react/renderer/components/view/ViewPropsInterpolation.h; sourceTree = \"<group>\"; };\n\t\t1E04881EDF02715BD6AC2C6ED3FBB37E /* React-rendererdebug */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-rendererdebug\"; path = \"libReact-rendererdebug.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t1E2EDFEA3A7670F7D6AB0267AFA7E2F1 /* Convert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Convert.h; path = react/bridging/Convert.h; sourceTree = \"<group>\"; };\n\t\t1E649614D7644BF68C2F5D4CB3FBF8DC /* React-NativeModulesApple */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-NativeModulesApple\"; path = \"libReact-NativeModulesApple.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t1E7B7C0191645527408193552D9E40CF /* double-conversion.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = \"double-conversion.cc\"; path = \"double-conversion/double-conversion.cc\"; sourceTree = \"<group>\"; };\n\t\t1E8D7F44C4927699FE5FFB25997A96F8 /* React-RuntimeApple.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-RuntimeApple.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t1E9ACDD39D4A14DDC16406CDD0457ED3 /* AString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AString.h; path = react/bridging/AString.h; sourceTree = \"<group>\"; };\n\t\t1EB0389666D3316FBF79F7AA176DAC97 /* RCTBlobPlugins.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTBlobPlugins.h; sourceTree = \"<group>\"; };\n\t\t1F2594C363D96114D88D6D3996A6AD08 /* ShadowNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ShadowNode.h; path = react/renderer/core/ShadowNode.h; sourceTree = \"<group>\"; };\n\t\t1F4BF0D6B00930EFF4155DC9B790AFDD /* Baton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Baton.h; path = folly/synchronization/Baton.h; sourceTree = \"<group>\"; };\n\t\t1FBF294CE17585A6CEAE66F34026AA0C /* PointerEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PointerEvent.h; path = react/renderer/components/view/PointerEvent.h; sourceTree = \"<group>\"; };\n\t\t1FC9D5FE940DF4FC829E173DF00483AB /* UncaughtExceptions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UncaughtExceptions.h; path = folly/lang/UncaughtExceptions.h; sourceTree = \"<group>\"; };\n\t\t1FD672FEBEC49B42EEBB59B54F5CD143 /* LegacyViewManagerInteropComponentDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LegacyViewManagerInteropComponentDescriptor.h; path = react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropComponentDescriptor.h; sourceTree = \"<group>\"; };\n\t\t2002DD4A0F6B3EB4DD29785216A66D9B /* Utility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Utility.h; path = folly/Utility.h; sourceTree = \"<group>\"; };\n\t\t203BEC3028800526EBC07D8825427B33 /* RCTUIManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTUIManager.m; sourceTree = \"<group>\"; };\n\t\t203F90BE1C271A4963AF8779D2AA90AE /* React-RuntimeHermes-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-RuntimeHermes-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t207D72871056994F29476846F29AF947 /* PolyException.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PolyException.h; path = folly/PolyException.h; sourceTree = \"<group>\"; };\n\t\t20A766A5111A8B644D96FABB67848743 /* React-graphics-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-graphics-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t20D52A5CA3FEAAB624DD5FABD5F70EF4 /* LayoutAnimationCallbackWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LayoutAnimationCallbackWrapper.h; path = react/renderer/animations/LayoutAnimationCallbackWrapper.h; sourceTree = \"<group>\"; };\n\t\t20DB7A7891E6EF51C69DA252EF43EE25 /* SimpleThreadSafeCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SimpleThreadSafeCache.h; sourceTree = \"<group>\"; };\n\t\t20FCC48835414C2B85BB6A73AECE0309 /* RCTInputAccessoryComponentView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTInputAccessoryComponentView.mm; sourceTree = \"<group>\"; };\n\t\t20FF0CE1BB1AB7D514D968DD961923FA /* BitIteratorDetail.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BitIteratorDetail.h; path = folly/container/detail/BitIteratorDetail.h; sourceTree = \"<group>\"; };\n\t\t210ED618EB38145265ACDB75A78B11AB /* React-jsiexecutor.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-jsiexecutor.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t21754846DD83D3794B287A3D6BB4DA9C /* RCTBaseTextInputViewManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTBaseTextInputViewManager.h; sourceTree = \"<group>\"; };\n\t\t21CDEC81B1AACA4065BD3385AB630454 /* HazptrRec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HazptrRec.h; path = folly/synchronization/HazptrRec.h; sourceTree = \"<group>\"; };\n\t\t21E277EB0A609214CBB931D344238A64 /* RCTActivityIndicatorViewComponentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTActivityIndicatorViewComponentView.h; sourceTree = \"<group>\"; };\n\t\t21EF07FFD2345957804DF019878563CF /* ShadowNodes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ShadowNodes.h; path = react/renderer/components/rncore/ShadowNodes.h; sourceTree = \"<group>\"; };\n\t\t222FC254D773A0163299A97B210F3B1A /* RCTAnimationPlugins.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTAnimationPlugins.mm; sourceTree = \"<group>\"; };\n\t\t224F3D752D59D26136CB03C3D3C240F2 /* RCTDecayAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTDecayAnimation.mm; sourceTree = \"<group>\"; };\n\t\t229E898FFA1C9E93F86539379E9096C3 /* YogaEnums.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = YogaEnums.h; sourceTree = \"<group>\"; };\n\t\t22A6AF9D5AAC8F547507F26CAC3BE8EA /* UnimplementedViewShadowNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UnimplementedViewShadowNode.h; path = react/renderer/components/unimplementedview/UnimplementedViewShadowNode.h; sourceTree = \"<group>\"; };\n\t\t22B331FFC962649EE96FA4C6FF47CC23 /* rounding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rounding.h; sourceTree = \"<group>\"; };\n\t\t22BBDCDC9E5BB7D47CB6C63BAD034B4B /* format.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = format.h; path = include/fmt/format.h; sourceTree = \"<group>\"; };\n\t\t22BF4B17D357A3BD3840AF11EBE43257 /* AtomicStruct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AtomicStruct.h; path = folly/synchronization/AtomicStruct.h; sourceTree = \"<group>\"; };\n\t\t22F665521DA4A7B91AD3CDC51E8779D6 /* React-RuntimeCore.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-RuntimeCore.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t232D444DA9A20C7509F589FFF2D7E4CF /* ThreadLocalDetail.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ThreadLocalDetail.h; path = folly/detail/ThreadLocalDetail.h; sourceTree = \"<group>\"; };\n\t\t2362BA983B00A2A04C7C991889E743A5 /* RCTTouchableComponentViewProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTTouchableComponentViewProtocol.h; path = Fabric/RCTTouchableComponentViewProtocol.h; sourceTree = \"<group>\"; };\n\t\t23C5959A240F9A33D470E539FE162B9D /* DefaultKeepAliveExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DefaultKeepAliveExecutor.h; path = folly/DefaultKeepAliveExecutor.h; sourceTree = \"<group>\"; };\n\t\t23DDF8148799041A2BF94450407CEBD2 /* RCTHTTPRequestHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTHTTPRequestHandler.h; path = Libraries/Network/RCTHTTPRequestHandler.h; sourceTree = \"<group>\"; };\n\t\t23F1171EF1ED7FAD36769DFA9AE002FD /* RCTUIImageViewAnimated.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTUIImageViewAnimated.h; path = Libraries/Image/RCTUIImageViewAnimated.h; sourceTree = \"<group>\"; };\n\t\t240A841CE45A01661CD44D4EE8B91BC5 /* JSIInstaller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = JSIInstaller.h; sourceTree = \"<group>\"; };\n\t\t2415A1FAF902321B20BE9690DAF25F46 /* AttributedStringBox.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AttributedStringBox.h; path = react/renderer/attributedstring/AttributedStringBox.h; sourceTree = \"<group>\"; };\n\t\t2462C72B87ED90695E43B971F24B8FCF /* ExperimentalFeature.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ExperimentalFeature.h; sourceTree = \"<group>\"; };\n\t\t2552D17D22931F4E3F05CF400B52A72D /* RecoverableError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RecoverableError.h; sourceTree = \"<group>\"; };\n\t\t256EFD340D35D7E450AACBE294E874A8 /* Latch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Latch.h; path = folly/synchronization/Latch.h; sourceTree = \"<group>\"; };\n\t\t2577F299FCB0A19824FE989BE77B8E8F /* React-jsinspector */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-jsinspector\"; path = \"libReact-jsinspector.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t258F35FF5ABDDEBA091F066B015EE1D9 /* RCTSurfaceRootView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSurfaceRootView.h; sourceTree = \"<group>\"; };\n\t\t25984569AD3852F629F09301282C7769 /* RCTDevLoadingViewProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTDevLoadingViewProtocol.h; sourceTree = \"<group>\"; };\n\t\t25A59FDE9D2F710EAEE9BF60F424C713 /* primitives.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = primitives.h; path = react/renderer/components/scrollview/primitives.h; sourceTree = \"<group>\"; };\n\t\t25A6D3EB52D98D8E0A7564596C8CE94A /* JSIndexedRAMBundle.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = JSIndexedRAMBundle.cpp; sourceTree = \"<group>\"; };\n\t\t25B4E76DD481D3490220E28604E55673 /* DistributedMutex-inl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"DistributedMutex-inl.h\"; path = \"folly/synchronization/DistributedMutex-inl.h\"; sourceTree = \"<group>\"; };\n\t\t25CB321AD79DD7DE8F00445FA9998552 /* RCTPerformanceLoggerLabels.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTPerformanceLoggerLabels.h; sourceTree = \"<group>\"; };\n\t\t25EBF2FA7FFEDCE7086F43F67F482A2C /* Geometry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Geometry.h; sourceTree = \"<group>\"; };\n\t\t26055A5589650C9F928DD1BFF922B86B /* RCTAutoInsetsProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTAutoInsetsProtocol.h; sourceTree = \"<group>\"; };\n\t\t2633DC101FF0E08FE241777B60154AEF /* ar.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = ar.lproj; path = React/I18n/strings/ar.lproj; sourceTree = \"<group>\"; };\n\t\t267039C69B6ECCDE54B5EF1AD931D1C0 /* fmt-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"fmt-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t26799F85A2F48699DF73E4A5B1EE067A /* ModalHostViewState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ModalHostViewState.h; path = react/renderer/components/modal/ModalHostViewState.h; sourceTree = \"<group>\"; };\n\t\t26902E3757E5D682AFC6C628AF7BD7DD /* React-Fabric-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-Fabric-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\t269BE773C9482484B70949A40F4EA525 /* React-RCTSettings */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-RCTSettings\"; path = \"libReact-RCTSettings.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t26A39561F9B37AA0AFE252734CC8891B /* React-Fabric.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = \"React-Fabric.modulemap\"; sourceTree = \"<group>\"; };\n\t\t26E19B9D750F023C6ABA23E46C660990 /* RCTImageViewManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTImageViewManager.mm; sourceTree = \"<group>\"; };\n\t\t26F81C8DE0CC3E7649EDDFE8DFDED895 /* React-RCTFabric-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-RCTFabric-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t271F7075A09B7F53F77295612BE17BE8 /* UIManager.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = UIManager.cpp; path = react/renderer/uimanager/UIManager.cpp; sourceTree = \"<group>\"; };\n\t\t2726901F064D66A4F014D07BB986BF67 /* React-RCTSettings-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-RCTSettings-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t2779D7D33AA6E41DCE7991AF63682C57 /* Poly.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Poly.h; path = folly/Poly.h; sourceTree = \"<group>\"; };\n\t\t2782757DC9A193842FF73CDFEC4F5F65 /* ShadowNodeFamily.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ShadowNodeFamily.cpp; path = react/renderer/core/ShadowNodeFamily.cpp; sourceTree = \"<group>\"; };\n\t\t27D5B6E7F5A0D017C0081BAF95A9E8AF /* RCTActionSheetManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTActionSheetManager.mm; sourceTree = \"<group>\"; };\n\t\t27DB05F6CB39113BE10AD3A747787E40 /* F14Set.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = F14Set.h; path = folly/container/F14Set.h; sourceTree = \"<group>\"; };\n\t\t27DE3F3B20B7CEFB975091316FFFB6CC /* StateUpdate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = StateUpdate.h; path = react/renderer/core/StateUpdate.h; sourceTree = \"<group>\"; };\n\t\t27F831318E526AEB0F7F8A65C1891EC5 /* YogaStylableProps.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YogaStylableProps.h; path = react/renderer/components/view/YogaStylableProps.h; sourceTree = \"<group>\"; };\n\t\t28134A7E3E4CF5A0D60FE5E683407AAC /* MPMCQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMCQueue.h; path = folly/MPMCQueue.h; sourceTree = \"<group>\"; };\n\t\t281DE643AC3EC1BC9357383486F2FB11 /* ConnectionDemux.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ConnectionDemux.h; sourceTree = \"<group>\"; };\n\t\t2837BF8ABDA1EC92282A5DF6381E0A27 /* Conv.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Conv.h; path = folly/Conv.h; sourceTree = \"<group>\"; };\n\t\t2845C7EA5A46AFE22DC6C82FA344FB15 /* SRConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRConstants.m; path = SocketRocket/Internal/SRConstants.m; sourceTree = \"<group>\"; };\n\t\t285863D5864C49AC3FDF1567E1986DDB /* RCTSafeAreaViewManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSafeAreaViewManager.h; sourceTree = \"<group>\"; };\n\t\t285EDB99AD277EB30467D34D174D268F /* ImageState.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ImageState.cpp; path = react/renderer/components/image/ImageState.cpp; sourceTree = \"<group>\"; };\n\t\t287D6D149E8F946A10D3DCE0418FB1FC /* RCTComponentViewHelpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTComponentViewHelpers.h; path = react/renderer/components/scrollview/RCTComponentViewHelpers.h; sourceTree = \"<group>\"; };\n\t\t2880387D5A0780F29656704977F6A10D /* JsArgumentHelpers-inl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"JsArgumentHelpers-inl.h\"; sourceTree = \"<group>\"; };\n\t\t289131589CCC21FDAAADD8DA0E1EA4A5 /* RCTTextViewManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTTextViewManager.h; sourceTree = \"<group>\"; };\n\t\t28992A73B6E2E3C1194912C0730023B1 /* RCTSinglelineTextInputView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTSinglelineTextInputView.mm; sourceTree = \"<group>\"; };\n\t\t289BDFFAEE5965ED8E6B54755E485A66 /* conversions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = conversions.h; path = react/renderer/animations/conversions.h; sourceTree = \"<group>\"; };\n\t\t28D7BEABBC1EB38780017A5D14CC2E0F /* fast-dtoa.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"fast-dtoa.h\"; path = \"double-conversion/fast-dtoa.h\"; sourceTree = \"<group>\"; };\n\t\t28F712315F7CD5B5F84A557475518AF3 /* RCTSinglelineTextInputViewManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTSinglelineTextInputViewManager.mm; sourceTree = \"<group>\"; };\n\t\t28FF824B4005CDF78CA3A774CFD2549B /* AccessibilityProps.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = AccessibilityProps.cpp; path = react/renderer/components/view/AccessibilityProps.cpp; sourceTree = \"<group>\"; };\n\t\t29069E0EE8AF62E25BA127E3020926FD /* RawPropsParser.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = RawPropsParser.cpp; path = react/renderer/core/RawPropsParser.cpp; sourceTree = \"<group>\"; };\n\t\t292CA568BD4ABB3A490EAADD2CA64FB7 /* React-cxxreact.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-cxxreact.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t296D3832DB6A00F26BCB4D9A491A88E6 /* TextAttributes.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = TextAttributes.cpp; path = react/renderer/attributedstring/TextAttributes.cpp; sourceTree = \"<group>\"; };\n\t\t296F41E25D51A2758C6CBFAB3A8B8FAD /* fromRawValueShared.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fromRawValueShared.h; sourceTree = \"<group>\"; };\n\t\t2993AE002A77BF7B39AAE55DB661DD31 /* TurboCxxModule.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = TurboCxxModule.cpp; path = react/nativemodule/core/ReactCommon/TurboCxxModule.cpp; sourceTree = \"<group>\"; };\n\t\t29A9D298DB1C62EA7C25E8F85CFF52F8 /* FollyMemset.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FollyMemset.h; path = folly/FollyMemset.h; sourceTree = \"<group>\"; };\n\t\t29B488F05847F4968004034A803BA1EE /* RCTAnimatedNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTAnimatedNode.h; sourceTree = \"<group>\"; };\n\t\t2A29138DBA1381888F4701360BF91338 /* InstanceHandle.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = InstanceHandle.cpp; path = react/renderer/core/InstanceHandle.cpp; sourceTree = \"<group>\"; };\n\t\t2A474E2B602BF03DC7153DA54029EFCD /* UniqueMonostate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = UniqueMonostate.h; sourceTree = \"<group>\"; };\n\t\t2A64B900827AD880DCA0F0CDC3BDA727 /* HostPlatformViewTraitsInitializer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = HostPlatformViewTraitsInitializer.h; sourceTree = \"<group>\"; };\n\t\t2A6A08279C8FADD3D8FF81B1C2112A8F /* CppAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CppAttributes.h; path = folly/CppAttributes.h; sourceTree = \"<group>\"; };\n\t\t2A7AEC733FC3F4650B9340E574530161 /* HermesExecutorFactory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = HermesExecutorFactory.cpp; sourceTree = \"<group>\"; };\n\t\t2AE808F4B51B3F24D61558A014CF22A5 /* RCTAnimationPlugins.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTAnimationPlugins.h; path = Libraries/NativeAnimation/RCTAnimationPlugins.h; sourceTree = \"<group>\"; };\n\t\t2AEA71EA50563CCA7CAD2D0EA99BC4C3 /* React-RuntimeHermes.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-RuntimeHermes.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t2AF4509521B4076AA29D6287EFE1BE14 /* React-CoreModules.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-CoreModules.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t2AF790ECD36E6DBEB706E9E072597102 /* RCTBridgeDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTBridgeDelegate.h; sourceTree = \"<group>\"; };\n\t\t2AFDFA1B816E14B8A48D630F83DC6574 /* JSIExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSIExecutor.h; path = jsireact/JSIExecutor.h; sourceTree = \"<group>\"; };\n\t\t2B044C64ECD89051E79887F2F8FE57D5 /* React-RCTNetwork.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-RCTNetwork.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t2B38F5BBD25E489CA1BCFF0B8B34AD39 /* conversions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = conversions.h; path = react/renderer/components/scrollview/conversions.h; sourceTree = \"<group>\"; };\n\t\t2B7A860D2229C54CBF112DD02B57C926 /* LegacyViewManagerInteropState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LegacyViewManagerInteropState.h; path = react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropState.h; sourceTree = \"<group>\"; };\n\t\t2B7BCA4D8FBC217D22B4EEB15EB03957 /* RCTConvert+CoreLocation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"RCTConvert+CoreLocation.h\"; sourceTree = \"<group>\"; };\n\t\t2BAEF360C04D98022913BA78AC8A5A0F /* RCTImageShadowView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTImageShadowView.mm; sourceTree = \"<group>\"; };\n\t\t2C090425A0AC38F41F277453CBF5B235 /* RCTVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTVersion.h; sourceTree = \"<group>\"; };\n\t\t2C17F91E7D084760672DD64B292DF5B5 /* Singleton-inl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"Singleton-inl.h\"; path = \"folly/Singleton-inl.h\"; sourceTree = \"<group>\"; };\n\t\t2C4F509606F5C64CB085DA2D927CDC93 /* jsi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = jsi.h; sourceTree = \"<group>\"; };\n\t\t2C5887CFA052BA4652642CE173F3C2F4 /* RCTScrollEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTScrollEvent.h; sourceTree = \"<group>\"; };\n\t\t2C795DB945B2C3AA8C9DB7C2065D7C38 /* RCTMessageThread.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTMessageThread.h; sourceTree = \"<group>\"; };\n\t\t2CA71A360B05CFB72B96ACD04FA7ADB6 /* ValueFactoryEventPayload.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ValueFactoryEventPayload.cpp; path = react/renderer/core/ValueFactoryEventPayload.cpp; sourceTree = \"<group>\"; };\n\t\t2CCBE13D47A90960E21168709D81A256 /* SmallLocks.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SmallLocks.h; path = folly/synchronization/SmallLocks.h; sourceTree = \"<group>\"; };\n\t\t2CE3815AC95E2E19EFA825C26B6DD16A /* traits.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = traits.h; path = folly/functional/traits.h; sourceTree = \"<group>\"; };\n\t\t2D006447B5017B8009E226E6E0AACE40 /* ImageRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ImageRequest.h; path = react/renderer/imagemanager/ImageRequest.h; sourceTree = \"<group>\"; };\n\t\t2D3B7CA09D694AABDB4E6816701346CC /* TextAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TextAttributes.h; path = react/renderer/attributedstring/TextAttributes.h; sourceTree = \"<group>\"; };\n\t\t2D50029B232140A61A9034E9BCCA51BB /* FBReactNativeSpec-generated.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = \"FBReactNativeSpec-generated.mm\"; sourceTree = \"<group>\"; };\n\t\t2D889D31C2B9F054FBB9309C335FCD66 /* StatePipe.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = StatePipe.h; path = react/renderer/core/StatePipe.h; sourceTree = \"<group>\"; };\n\t\t2DACD0189E12C716542A13351B01B317 /* RCTUIManagerObserverCoordinator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTUIManagerObserverCoordinator.h; sourceTree = \"<group>\"; };\n\t\t2DEEED6BBD30D6FA84E9F8A0F6D3BFB9 /* RCTBridgeModuleDecorator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTBridgeModuleDecorator.m; sourceTree = \"<group>\"; };\n\t\t2DF730E6145C9D42DEB5C32702BE8C74 /* RawPropsKeyMap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RawPropsKeyMap.h; path = react/renderer/core/RawPropsKeyMap.h; sourceTree = \"<group>\"; };\n\t\t2E12202A59E36B86AFC6D2CB7CC7B1A2 /* React-CoreModules.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-CoreModules.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t2E2A892270F483593BF828FD99446809 /* React-RCTBlob.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-RCTBlob.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t2E89F76541853DEFE4E1B570E724F503 /* RCT-Folly.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"RCT-Folly.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t2EA911281D978CB40351D59D5598FC9B /* MicroSpinLock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MicroSpinLock.h; path = folly/MicroSpinLock.h; sourceTree = \"<group>\"; };\n\t\t2EAAC08BE2B9CE538A0D58679E781247 /* bignum-dtoa.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"bignum-dtoa.h\"; path = \"double-conversion/bignum-dtoa.h\"; sourceTree = \"<group>\"; };\n\t\t2EC34A00D8B5E0E79B1DFEF7D2D5651B /* RCTWebSocketExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTWebSocketExecutor.h; path = React/CoreModules/RCTWebSocketExecutor.h; sourceTree = \"<group>\"; };\n\t\t2ED447FF7E9E303F98B593502FAA8151 /* LegacyViewManagerInteropShadowNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LegacyViewManagerInteropShadowNode.h; path = react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropShadowNode.h; sourceTree = \"<group>\"; };\n\t\t2EDE07F5836F143CD7857CB2E5B5E136 /* EventPayloadType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EventPayloadType.h; path = react/renderer/core/EventPayloadType.h; sourceTree = \"<group>\"; };\n\t\t2F2BC9F716D9565E236295A6DE40D75C /* React-jsinspector-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-jsinspector-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\t2F8E66FF737E243487DFC9781A2605FE /* RCTSurfaceRootShadowViewDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSurfaceRootShadowViewDelegate.h; sourceTree = \"<group>\"; };\n\t\t2F8E6E55AFFCF9BD68B2B5B508CCEC75 /* MemoryIdler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MemoryIdler.h; path = folly/detail/MemoryIdler.h; sourceTree = \"<group>\"; };\n\t\t2FA6B9156408ED84AEE6F56B8BB6FC8D /* RCTMountingTransactionObserverCoordinator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTMountingTransactionObserverCoordinator.h; sourceTree = \"<group>\"; };\n\t\t30162323761B1AB1D7A828CC5D1BE36F /* RCTDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTDefines.h; sourceTree = \"<group>\"; };\n\t\t3018115A5F8C04479A8AE64B102BE2C5 /* Base.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Base.h; path = react/bridging/Base.h; sourceTree = \"<group>\"; };\n\t\t3053B3AC995ECECC071744E464935607 /* ShadowNodeFragment.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ShadowNodeFragment.cpp; path = react/renderer/core/ShadowNodeFragment.cpp; sourceTree = \"<group>\"; };\n\t\t307CE5CEEA4E06A6A255CA72344E783B /* RCTBundleAssetImageLoader.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTBundleAssetImageLoader.mm; sourceTree = \"<group>\"; };\n\t\t30800F41E56952F66104FBA05648D6FB /* React-jsinspector.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-jsinspector.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t308183F96466CA2C23FC665AD164BFD4 /* MountingCoordinator.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = MountingCoordinator.cpp; path = react/renderer/mounting/MountingCoordinator.cpp; sourceTree = \"<group>\"; };\n\t\t30DD3B64FEFD7A1AB8A1EC8B9D52D87F /* YGValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YGValue.h; path = yoga/YGValue.h; sourceTree = \"<group>\"; };\n\t\t3109CDF60BA119DB536601600983564B /* simdjson.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = simdjson.modulemap; sourceTree = \"<group>\"; };\n\t\t313F1FACBDF2947C76A286C8AFC6551D /* FBString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBString.h; path = folly/FBString.h; sourceTree = \"<group>\"; };\n\t\t314C4322103426F9256B2FBA495DB607 /* RCTScrollView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTScrollView.m; sourceTree = \"<group>\"; };\n\t\t315FDA4F573874F2BD0A7F57C70AF3E1 /* RCT-Folly-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"RCT-Folly-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\t31660B4E9DCE9F8ABCACB98B2176D664 /* React-NativeModulesApple.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-NativeModulesApple.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t316C9C14CDBDF9673A95F2B8F066A5FF /* React-graphics.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = \"React-graphics.modulemap\"; sourceTree = \"<group>\"; };\n\t\t31842C0B4263119B5232CF1827757893 /* ReentrantAllocator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ReentrantAllocator.h; path = folly/memory/ReentrantAllocator.h; sourceTree = \"<group>\"; };\n\t\t318D26E55C7F26B32EFB91A5243FBAF8 /* ViewShadowNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ViewShadowNode.h; path = react/renderer/components/view/ViewShadowNode.h; sourceTree = \"<group>\"; };\n\t\t31E12D3E887518AC0490584345788F27 /* BaseViewProps.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = BaseViewProps.cpp; path = react/renderer/components/view/BaseViewProps.cpp; sourceTree = \"<group>\"; };\n\t\t31FAF051F6D95F34219F912CE1C6F2F4 /* String-inl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"String-inl.h\"; path = \"folly/String-inl.h\"; sourceTree = \"<group>\"; };\n\t\t32208C8C13E5E8750C70406B6FADABA1 /* RCTAssert.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTAssert.m; sourceTree = \"<group>\"; };\n\t\t325477957D7D1B6F9F9C72D859C2E8BE /* React-perflogger.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-perflogger.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t32680615BD888084B01D830F2196A3C7 /* UIView+React.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"UIView+React.h\"; sourceTree = \"<group>\"; };\n\t\t326E52CD3C6A37497F8D253F7BACCFB5 /* Sched.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Sched.h; path = folly/portability/Sched.h; sourceTree = \"<group>\"; };\n\t\t326FC938C2E12371A877E5FA46F37777 /* LongLivedObject.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = LongLivedObject.cpp; path = react/bridging/LongLivedObject.cpp; sourceTree = \"<group>\"; };\n\t\t327A412C03B8D29F20508FBD60D4EAD2 /* Props.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Props.h; path = react/renderer/core/Props.h; sourceTree = \"<group>\"; };\n\t\t32854BF47BB04F74CF858BD8BDE66C35 /* RCTHermesInstance.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RCTHermesInstance.mm; path = ReactCommon/RCTHermesInstance.mm; sourceTree = \"<group>\"; };\n\t\t32A7462E31DA20BFC4BF96677609574A /* RCTMountingManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTMountingManager.mm; sourceTree = \"<group>\"; };\n\t\t32AC266D9F2BEB6CAC0650EC2695A1C7 /* SysUio.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = SysUio.cpp; path = folly/portability/SysUio.cpp; sourceTree = \"<group>\"; };\n\t\t32B62C1AD7CDAE58FE4EF82AB2C29AAA /* Uri.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Uri.h; path = folly/Uri.h; sourceTree = \"<group>\"; };\n\t\t32C612DD10C738AA24310145376A8756 /* DebuggerTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DebuggerTypes.h; path = destroot/include/hermes/Public/DebuggerTypes.h; sourceTree = \"<group>\"; };\n\t\t32D1CC8F0E612A18C597E5BDCD724B17 /* RCTSurfaceRegistry.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RCTSurfaceRegistry.mm; path = Fabric/RCTSurfaceRegistry.mm; sourceTree = \"<group>\"; };\n\t\t32DC15B6A3F5954F7FA2FF42937538A5 /* RCTLegacyViewManagerInteropCoordinator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTLegacyViewManagerInteropCoordinator.h; path = react/renderer/components/legacyviewmanagerinterop/RCTLegacyViewManagerInteropCoordinator.h; sourceTree = \"<group>\"; };\n\t\t32E0BB05F9F652F49EAE1D3EE8E0714E /* UnstableLegacyViewManagerAutomaticComponentDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UnstableLegacyViewManagerAutomaticComponentDescriptor.h; path = react/renderer/components/legacyviewmanagerinterop/UnstableLegacyViewManagerAutomaticComponentDescriptor.h; sourceTree = \"<group>\"; };\n\t\t3312F4682C3B648C87FBD7755CC0CE73 /* UnstableLegacyViewManagerInteropComponentDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UnstableLegacyViewManagerInteropComponentDescriptor.h; path = react/renderer/components/legacyviewmanagerinterop/UnstableLegacyViewManagerInteropComponentDescriptor.h; sourceTree = \"<group>\"; };\n\t\t3329F3B4064042B4C1D4BDA08241A80B /* JSOutOfMemoryError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSOutOfMemoryError.h; path = destroot/include/hermes/Public/JSOutOfMemoryError.h; sourceTree = \"<group>\"; };\n\t\t33623931DB49F9BE0BB2BEAD565E5AC5 /* RCTBaseTextInputShadowView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTBaseTextInputShadowView.h; sourceTree = \"<group>\"; };\n\t\t337FF88F1B3B7E14D22211EF9A8C01DC /* ModalHostViewComponentDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ModalHostViewComponentDescriptor.h; path = react/renderer/components/modal/ModalHostViewComponentDescriptor.h; sourceTree = \"<group>\"; };\n\t\t33A82E15C4F5EEC134A1C086B421B62D /* bindingUtils.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = bindingUtils.cpp; path = react/renderer/uimanager/bindingUtils.cpp; sourceTree = \"<group>\"; };\n\t\t33AFE6C6C66107B924778D5E609CBE54 /* React-RCTActionSheet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-RCTActionSheet.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t33BB544E228494D0AF9CB4E5A11EF94D /* conversions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = conversions.h; sourceTree = \"<group>\"; };\n\t\t33C0BE36B9FBC218A7F9944F9E03ABC9 /* RCTWrapperViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTWrapperViewController.m; sourceTree = \"<group>\"; };\n\t\t33E070F404266F952E77980CFA788C4D /* diy-fp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"diy-fp.h\"; path = \"double-conversion/diy-fp.h\"; sourceTree = \"<group>\"; };\n\t\t33EEBF1D210254B5452CE560F81C9D38 /* RCTDeprecation */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = RCTDeprecation; path = libRCTDeprecation.a; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t33FBAF4A2C505DEA7624E5FE6146C7CB /* RCTFrameAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTFrameAnimation.h; sourceTree = \"<group>\"; };\n\t\t340097AC9A9BF4BAD1E542E436217620 /* ImageTelemetry.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ImageTelemetry.cpp; path = react/renderer/imagemanager/ImageTelemetry.cpp; sourceTree = \"<group>\"; };\n\t\t341947EF5C4F684C9D99E78AEFE835DC /* TimerStats.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TimerStats.h; path = destroot/include/hermes/TimerStats.h; sourceTree = \"<group>\"; };\n\t\t342244AFF6DAC97CF99A001A770A5E4F /* Object.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Object.h; path = react/bridging/Object.h; sourceTree = \"<group>\"; };\n\t\t343040AFE22D6B494755190C0C2FC6FF /* ParagraphProps.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ParagraphProps.cpp; path = react/renderer/components/text/ParagraphProps.cpp; sourceTree = \"<group>\"; };\n\t\t34310C6EE4D078D016C21151602FCF90 /* RCTSyncImageManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RCTSyncImageManager.mm; path = react/renderer/imagemanager/RCTSyncImageManager.mm; sourceTree = \"<group>\"; };\n\t\t34875B2D75347ECF94E81DEA4C80D47A /* React-graphics-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-graphics-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\t349041093547AE8E438BDD4E8A829CB7 /* LayoutConstraints.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = LayoutConstraints.cpp; path = react/renderer/core/LayoutConstraints.cpp; sourceTree = \"<group>\"; };\n\t\t34A2168F62C5C8BB1DEEA7D485022A12 /* RCTFabricModalHostViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTFabricModalHostViewController.h; sourceTree = \"<group>\"; };\n\t\t34DB7C7BB2A350937253113F587A18E4 /* TextShadowNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TextShadowNode.h; path = react/renderer/components/text/TextShadowNode.h; sourceTree = \"<group>\"; };\n\t\t350583A27DECF7088A05CC2259BE2E98 /* RCTParagraphComponentView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTParagraphComponentView.mm; sourceTree = \"<group>\"; };\n\t\t354A705EB660FEBF388788D956A9E58A /* ToAscii.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ToAscii.cpp; path = folly/lang/ToAscii.cpp; sourceTree = \"<group>\"; };\n\t\t35645CAF1F9339B964422D6014D3FB62 /* InspectorInterfaces.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorInterfaces.cpp; sourceTree = \"<group>\"; };\n\t\t357C89461C2B2C6319BF4ADE3900971C /* AtomicNotification.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AtomicNotification.h; path = folly/synchronization/AtomicNotification.h; sourceTree = \"<group>\"; };\n\t\t359747BC6AC4881D3081F8B6AA532321 /* TouchEventEmitter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TouchEventEmitter.h; path = react/renderer/components/view/TouchEventEmitter.h; sourceTree = \"<group>\"; };\n\t\t359B6CEED91D1DF8B883DC40D5E04EEE /* React-jsi-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-jsi-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t35B3256FA995F839DF8DCEEFCF7DD785 /* RCTImageShadowView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTImageShadowView.h; path = Libraries/Image/RCTImageShadowView.h; sourceTree = \"<group>\"; };\n\t\t35D8CF26BB70259E361BDEA1E77D32E1 /* RCTBorderDrawing.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTBorderDrawing.m; sourceTree = \"<group>\"; };\n\t\t3605A12CF33B3DFBE0B5DD2DE36994C3 /* SpinLock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpinLock.h; path = folly/SpinLock.h; sourceTree = \"<group>\"; };\n\t\t3615AC64FDF6640D810E405776FA9A03 /* MessageQueueThread.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MessageQueueThread.h; sourceTree = \"<group>\"; };\n\t\t36164B0E9E5609F36A0106D648A0FA8E /* RCTComponentViewRegistry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTComponentViewRegistry.h; sourceTree = \"<group>\"; };\n\t\t361BB64B7C65C06474C5DFD08FD49799 /* CxxModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CxxModule.h; sourceTree = \"<group>\"; };\n\t\t367ACA1132BAD5F80E6CE0171064F750 /* RCTBridgeModuleDecorator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTBridgeModuleDecorator.h; sourceTree = \"<group>\"; };\n\t\t36C08C7FF3DFACBC39FCE541DCF803B6 /* ImageRequest.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ImageRequest.cpp; path = react/renderer/imagemanager/ImageRequest.cpp; sourceTree = \"<group>\"; };\n\t\t36EDA6F605E6CEF5F9A72D38C0AA3DED /* ThreadName.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ThreadName.h; path = folly/system/ThreadName.h; sourceTree = \"<group>\"; };\n\t\t373F105CB4DEE4BDB90F46875B73BFA8 /* RCTModalHostViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTModalHostViewController.m; sourceTree = \"<group>\"; };\n\t\t374717629E05164C820F2052E54AAA91 /* Cache.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = Cache.cpp; sourceTree = \"<group>\"; };\n\t\t37560CB0B831B9181D0E9FE412A827E5 /* RCTSurfaceRootShadowView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSurfaceRootShadowView.h; sourceTree = \"<group>\"; };\n\t\t37592FDAD45752511010F4B06AC57355 /* React-cxxreact */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-cxxreact\"; path = \"libReact-cxxreact.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t375B4BBE3235F1250E48C6F479A52A01 /* FormatTraits.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FormatTraits.h; path = folly/FormatTraits.h; sourceTree = \"<group>\"; };\n\t\t375DFEFC5E87FCB287285426D6DAA812 /* RCTModuloAnimatedNode.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTModuloAnimatedNode.mm; sourceTree = \"<group>\"; };\n\t\t3762263B39103B7107F61608F0B0E2D8 /* Random-inl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"Random-inl.h\"; path = \"folly/Random-inl.h\"; sourceTree = \"<group>\"; };\n\t\t37689F6A0CBD1039206E7D3A8E8E6C68 /* RCTCxxMethod.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTCxxMethod.mm; sourceTree = \"<group>\"; };\n\t\t37CF653BFF872793202265BF76118EAA /* DoubleConversion-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"DoubleConversion-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t37D820D975698FCA99C86CE71EF22A97 /* utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = utils.h; path = \"double-conversion/utils.h\"; sourceTree = \"<group>\"; };\n\t\t37DFC8EAF78BE0F070D18753D61D9C59 /* IPAddressSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IPAddressSource.h; path = folly/detail/IPAddressSource.h; sourceTree = \"<group>\"; };\n\t\t37F9065181BD972C82D47E7F46FFBBAA /* Log.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = Log.cpp; sourceTree = \"<group>\"; };\n\t\t3859A11BD5B175A2E7059AE9B7A747F3 /* Merge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Merge.h; path = folly/container/Merge.h; sourceTree = \"<group>\"; };\n\t\t3863C406F7D65140B03ADDF3E62B9914 /* MethodCall.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MethodCall.h; sourceTree = \"<group>\"; };\n\t\t38D95650F41F3CE76BC04B5619B09B95 /* SRSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRSecurityPolicy.m; path = SocketRocket/SRSecurityPolicy.m; sourceTree = \"<group>\"; };\n\t\t394174FFAD60F61AE02F3A5C011D30BC /* RCTTextView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTTextView.mm; sourceTree = \"<group>\"; };\n\t\t3948308FBBC9426B8AAFA7391786B0E8 /* React-Codegen.podspec.json */ = {isa = PBXFileReference; includeInIndex = 1; path = \"React-Codegen.podspec.json\"; sourceTree = \"<group>\"; };\n\t\t39499A61681F432C3F011D0926E7DAA4 /* ReactNativeFeatureFlagsAccessor.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = ReactNativeFeatureFlagsAccessor.cpp; sourceTree = \"<group>\"; };\n\t\t3954F92E91DCCCD316FC570C39037C55 /* MapBufferBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MapBufferBuilder.h; path = react/renderer/mapbuffer/MapBufferBuilder.h; sourceTree = \"<group>\"; };\n\t\t39650BDAA0AACD5B404A81046E1DC6C8 /* RCTLog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTLog.h; sourceTree = \"<group>\"; };\n\t\t39A5BABF355F1FCE0AB1D652C33D7B9C /* Memory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Memory.h; path = folly/portability/Memory.h; sourceTree = \"<group>\"; };\n\t\t39D0105B481E5FB78C661496BD63B8A5 /* React-RCTAppDelegate */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-RCTAppDelegate\"; path = \"libReact-RCTAppDelegate.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t39F4D12A0547EEA463DA17C682F69B34 /* RCTTextInputUtils.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTTextInputUtils.mm; sourceTree = \"<group>\"; };\n\t\t39F844696BFB60487E053DE52768656B /* RCTSwitchManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSwitchManager.h; sourceTree = \"<group>\"; };\n\t\t3A32F2995E9FBCA38F66600B356DD02C /* TcpInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TcpInfo.h; path = folly/net/TcpInfo.h; sourceTree = \"<group>\"; };\n\t\t3A48CF42426D1757E19F5E0283D958A0 /* ColorComponents.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ColorComponents.h; sourceTree = \"<group>\"; };\n\t\t3A50B808D51766F1C0B42436A7163DDD /* RCTImageResponseObserverProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTImageResponseObserverProxy.h; path = Fabric/RCTImageResponseObserverProxy.h; sourceTree = \"<group>\"; };\n\t\t3A6A2A0A084F0C30F0774529E7FC9E72 /* RCTImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTImageCache.h; path = Libraries/Image/RCTImageCache.h; sourceTree = \"<group>\"; };\n\t\t3A75958C7177C6CC36B895D30E732E64 /* RCTRuntimeExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTRuntimeExecutor.h; path = ReactCommon/RCTRuntimeExecutor.h; sourceTree = \"<group>\"; };\n\t\t3A7C0933E0C4119F5E32E5A260746A2F /* RAMBundleRegistry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RAMBundleRegistry.h; sourceTree = \"<group>\"; };\n\t\t3AD266EFC19E97B68AB736B2DFAE934E /* bindingUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = bindingUtils.h; path = react/renderer/uimanager/bindingUtils.h; sourceTree = \"<group>\"; };\n\t\t3AD33F21CFF457D719E527B0A4413B4E /* RCTSegmentedControl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSegmentedControl.h; sourceTree = \"<group>\"; };\n\t\t3AD9E5C254F43B4A3AC4E7A6452D879C /* React-Core-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-Core-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\t3B03D90250BBDC20A58910E9BAE12F13 /* RCTDeviceInfo.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTDeviceInfo.mm; sourceTree = \"<group>\"; };\n\t\t3B0D676D74E69A0350EF5A4FE2794335 /* RCTAlertController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTAlertController.h; path = React/CoreModules/RCTAlertController.h; sourceTree = \"<group>\"; };\n\t\t3B4291E3436CE7DD23B4E403E8E8B12D /* RangeCommon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RangeCommon.h; path = folly/detail/RangeCommon.h; sourceTree = \"<group>\"; };\n\t\t3B7CA49DCCF91C74062D35600488A355 /* React-jsi.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-jsi.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t3B80393CC9C72D221195616E0DA5B67F /* RCTNetworkPlugins.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTNetworkPlugins.h; path = Libraries/Network/RCTNetworkPlugins.h; sourceTree = \"<group>\"; };\n\t\t3B9822B49D137DD1BBFAE4C9206C7F97 /* Number.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Number.h; path = react/bridging/Number.h; sourceTree = \"<group>\"; };\n\t\t3BD8588452A16BCC311A2F90E96B104A /* CxxTurboModuleUtils.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = CxxTurboModuleUtils.cpp; path = react/nativemodule/core/ReactCommon/CxxTurboModuleUtils.cpp; sourceTree = \"<group>\"; };\n\t\t3BFC3D5FFBC3735586FEBA16EF9D8157 /* Exception.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Exception.h; path = folly/lang/Exception.h; sourceTree = \"<group>\"; };\n\t\t3C0913180FEC5C605ACD33BB9E09CDAD /* AbsoluteLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = AbsoluteLayout.h; sourceTree = \"<group>\"; };\n\t\t3C3877360CD1523AEBF6A0B3BECBB8D6 /* React-rendererdebug.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-rendererdebug.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t3C3F05EDE07B5034C963F9F6CE67E5A9 /* TraceInterpreter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TraceInterpreter.h; path = destroot/include/hermes/TraceInterpreter.h; sourceTree = \"<group>\"; };\n\t\t3C581B89704C6C579DD637F11045901A /* AtomicHashArray-inl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"AtomicHashArray-inl.h\"; path = \"folly/AtomicHashArray-inl.h\"; sourceTree = \"<group>\"; };\n\t\t3C6D5DD14D9959F1BCDA9EEF40E8671E /* event.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = event.h; sourceTree = \"<group>\"; };\n\t\t3C7A8CC093D61D93FAFE2A423F9CE0B7 /* ParagraphProps.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParagraphProps.h; path = react/renderer/components/text/ParagraphProps.h; sourceTree = \"<group>\"; };\n\t\t3C987DB1C26CAE3839EA088A41B167DF /* RCTNetworking.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTNetworking.mm; sourceTree = \"<group>\"; };\n\t\t3CA7A9404CCDD6BA22C97F8348CE3209 /* glog */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = glog; path = libglog.a; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t3CAE7021D6D8066FCD1D39076F4A85C1 /* RCTInspectorPackagerConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTInspectorPackagerConnection.m; sourceTree = \"<group>\"; };\n\t\t3CC7171C241F88DC2439CD6C9B3B9BDA /* RCTSegmentedControl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTSegmentedControl.m; sourceTree = \"<group>\"; };\n\t\t3D158DF7B71452128F42AE32CD1FB9F8 /* MessageInterfaces.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MessageInterfaces.h; path = destroot/include/hermes/inspector/chrome/MessageInterfaces.h; sourceTree = \"<group>\"; };\n\t\t3D16D5EC0CC9F855658FDAD755B9B8F7 /* RCTInspector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTInspector.h; sourceTree = \"<group>\"; };\n\t\t3D2546E47F2D90167BFD3A489746A6E9 /* Unistd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Unistd.h; path = folly/portability/Unistd.h; sourceTree = \"<group>\"; };\n\t\t3D4E8D2C968BF398ABDE0E66D90AA405 /* TurboModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TurboModule.h; path = react/nativemodule/core/ReactCommon/TurboModule.h; sourceTree = \"<group>\"; };\n\t\t3D66CDE2F1E5ADE815D245C01F720E05 /* FBVector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBVector.h; path = folly/FBVector.h; sourceTree = \"<group>\"; };\n\t\t3D6DBF11CFCFF077F1E73E67C1B435B6 /* ShadowTreeRevision.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ShadowTreeRevision.cpp; path = react/renderer/mounting/ShadowTreeRevision.cpp; sourceTree = \"<group>\"; };\n\t\t3D7F16F5E30C11527357DD52C8CB2954 /* primitives.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = primitives.h; path = react/renderer/components/view/primitives.h; sourceTree = \"<group>\"; };\n\t\t3D85474333A22BB675B886226092484B /* GCConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCConfig.h; path = destroot/include/hermes/Public/GCConfig.h; sourceTree = \"<group>\"; };\n\t\t3DDD563C6ADBEC41164125E51B67EE77 /* RCTLegacyViewManagerInteropCoordinatorAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTLegacyViewManagerInteropCoordinatorAdapter.h; sourceTree = \"<group>\"; };\n\t\t3E169D2216CF9E719B147E7377742BBD /* RCTEnhancedScrollView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTEnhancedScrollView.h; sourceTree = \"<group>\"; };\n\t\t3E71733432C7AC618E5FB1B2C20C71F3 /* SurfaceRegistryBinding.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = SurfaceRegistryBinding.cpp; path = react/renderer/uimanager/SurfaceRegistryBinding.cpp; sourceTree = \"<group>\"; };\n\t\t3E8E0103E022F0A7BE670C99DDEC11FE /* RCTCxxModule.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTCxxModule.mm; sourceTree = \"<group>\"; };\n\t\t3EA37501D46115DDABA4571FDD025BD2 /* SRLog.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRLog.m; path = SocketRocket/Internal/Utilities/SRLog.m; sourceTree = \"<group>\"; };\n\t\t3EA47022B15AB1C45235DBA9B57DA776 /* DoubleConversion.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DoubleConversion.debug.xcconfig; sourceTree = \"<group>\"; };\n\t\t3EA8CBF160B60CE7141E34124CD98495 /* React-runtimescheduler.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-runtimescheduler.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t3F3E458396D3574B4ADE0076519B87B9 /* RuntimeSchedulerBinding.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = RuntimeSchedulerBinding.cpp; sourceTree = \"<group>\"; };\n\t\t3F5A0CA304F0EDE4723DD50DC013E5A9 /* RCTInspectorPackagerConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTInspectorPackagerConnection.h; sourceTree = \"<group>\"; };\n\t\t3F5C6F9D16A1A659B8CB769DDEC445DE /* RCTLayoutAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTLayoutAnimation.m; sourceTree = \"<group>\"; };\n\t\t3F64B0C65747B5007B92D204D69F6EFC /* Dimension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Dimension.h; sourceTree = \"<group>\"; };\n\t\t3F8788C15B11DF4D16CE2A85BE243AA0 /* FBReactNativeSpecJSI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FBReactNativeSpecJSI.h; sourceTree = \"<group>\"; };\n\t\t3F93EBBC760E206C8883BE32A9915097 /* SRMutex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRMutex.h; path = SocketRocket/Internal/Utilities/SRMutex.h; sourceTree = \"<group>\"; };\n\t\t3FA9E0C5DE547662B3285AAE677F1CBF /* RCTAnimationUtils.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTAnimationUtils.mm; sourceTree = \"<group>\"; };\n\t\t3FB252110B7F6302C421C46ADF22A0BD /* RCTDeprecation-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"RCTDeprecation-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t3FE4624E81D0E4F7D216C71603A6BB12 /* RCTURLRequestDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTURLRequestDelegate.h; sourceTree = \"<group>\"; };\n\t\t3FF99AA51CC63F9D02051442963EEB0E /* RCTDebuggingOverlay.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTDebuggingOverlay.m; sourceTree = \"<group>\"; };\n\t\t3FFEDA5AF4FED3EB1CC515BC9BAB2760 /* HazptrObjLinked.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HazptrObjLinked.h; path = folly/synchronization/HazptrObjLinked.h; sourceTree = \"<group>\"; };\n\t\t40070AAA8193578B4B19218FCBD1F506 /* RCTRootShadowView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTRootShadowView.h; sourceTree = \"<group>\"; };\n\t\t4013A3D961F88A9A042C082ECAEB35E8 /* RCTScheduler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTScheduler.h; path = Fabric/RCTScheduler.h; sourceTree = \"<group>\"; };\n\t\t401A553AA0753FF3548A286F009A8820 /* React-RCTAppDelegate-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-RCTAppDelegate-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\t404C04FF5A5FFA2678597943F9B2C076 /* RCTEventAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTEventAnimation.mm; sourceTree = \"<group>\"; };\n\t\t40578E9386680C689D002917E383C065 /* RCTConvert+CoreLocation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"RCTConvert+CoreLocation.m\"; sourceTree = \"<group>\"; };\n\t\t4059CB54B248E9CAF8D2648832EF03C3 /* RCTEventDispatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTEventDispatcher.h; path = React/CoreModules/RCTEventDispatcher.h; sourceTree = \"<group>\"; };\n\t\t40B6CCC5214ADD7CDAC59A0304AB0B44 /* MPMCPipelineDetail.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMCPipelineDetail.h; path = folly/detail/MPMCPipelineDetail.h; sourceTree = \"<group>\"; };\n\t\t40B78C2265ACE3B8ACB7A504F9CFA4DE /* FMDatabaseQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FMDatabaseQueue.h; sourceTree = \"<group>\"; };\n\t\t40CFEC8038EA506FF0CAC998C27E80BF /* RCTScrollContentView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTScrollContentView.m; sourceTree = \"<group>\"; };\n\t\t40E5A309579F3C1A9D1F5C45ED9FFA0F /* RuntimeTarget.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = RuntimeTarget.cpp; sourceTree = \"<group>\"; };\n\t\t411B0CC2295DAA5FACED75F6D4BA67ED /* hu.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = hu.lproj; path = React/I18n/strings/hu.lproj; sourceTree = \"<group>\"; };\n\t\t411C75B9AC2022189E60C99722CAFE94 /* React-jsitracing.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-jsitracing.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t41232C04153D6B0482F696CC52538B79 /* React-NativeModulesApple.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = \"React-NativeModulesApple.modulemap\"; sourceTree = \"<group>\"; };\n\t\t412F97DED69E29E2A7146162142A9FF5 /* RCTI18nUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTI18nUtil.m; sourceTree = \"<group>\"; };\n\t\t4133EE63EDE34BEA9FC63C4BB4801169 /* RCTImageURLLoaderWithAttribution.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTImageURLLoaderWithAttribution.h; path = Libraries/Image/RCTImageURLLoaderWithAttribution.h; sourceTree = \"<group>\"; };\n\t\t413649D5C571D8A6170C6A4424CD088F /* Pods-WatermelonTester-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"Pods-WatermelonTester-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t4148047344F184B4D856D414B9B4349D /* hermes-engine.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"hermes-engine.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t415370226876D731C7B97EFB54012940 /* RCTBackedTextInputDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTBackedTextInputDelegate.h; sourceTree = \"<group>\"; };\n\t\t4167445C410188AABBBB4C4E2721565F /* InspectorData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = InspectorData.h; path = react/renderer/scheduler/InspectorData.h; sourceTree = \"<group>\"; };\n\t\t4168B7BDC6AE9FC9B5C87C96C641EA8E /* RCTSwitch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSwitch.h; sourceTree = \"<group>\"; };\n\t\t416D956A2968ACC6583A761D4976F6FF /* RCTMultipartDataTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTMultipartDataTask.m; sourceTree = \"<group>\"; };\n\t\t4181C0A4A1994121AF233A5C57DEC990 /* RCTLocalizedString.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTLocalizedString.mm; sourceTree = \"<group>\"; };\n\t\t41CA6E5A23C938EF530325403BEB5ABB /* RCTTurboModuleManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTTurboModuleManager.h; path = ReactCommon/RCTTurboModuleManager.h; sourceTree = \"<group>\"; };\n\t\t41CF2183FB0C77CBF6E075298A85E705 /* String.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = String.cpp; path = folly/String.cpp; sourceTree = \"<group>\"; };\n\t\t41D562BB5F84842F8DF9293C3DEB309C /* RCTTurboModule.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RCTTurboModule.mm; path = ReactCommon/RCTTurboModule.mm; sourceTree = \"<group>\"; };\n\t\t41E25EEE9BD95F7330BCB968457D0541 /* RCTComponentEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTComponentEvent.m; sourceTree = \"<group>\"; };\n\t\t41EC212BC4905E428935BED6DA109744 /* RCTLayoutAnimationGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTLayoutAnimationGroup.h; sourceTree = \"<group>\"; };\n\t\t42069F17D0B92E1DCE65D62807AAC0E8 /* RCTScrollContentShadowView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTScrollContentShadowView.m; sourceTree = \"<group>\"; };\n\t\t4242FEAF60FC3ACE3D98A5A77B65D724 /* RCTImageEditingManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTImageEditingManager.h; path = Libraries/Image/RCTImageEditingManager.h; sourceTree = \"<group>\"; };\n\t\t4279CDB721ED8120EB0EF927416392FE /* RCTImageURLLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTImageURLLoader.h; path = Libraries/Image/RCTImageURLLoader.h; sourceTree = \"<group>\"; };\n\t\t427B91D65DD3F677FDB0BBC6941F4424 /* ReactNativeFeatureFlagsAccessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ReactNativeFeatureFlagsAccessor.h; sourceTree = \"<group>\"; };\n\t\t42A97962C25A869DDED1914B699BD747 /* RCTAnimationType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTAnimationType.h; sourceTree = \"<group>\"; };\n\t\t42E6807903C30860853913241D16DBE5 /* FMDatabasePool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = FMDatabasePool.m; sourceTree = \"<group>\"; };\n\t\t42F83B7067F1043FA268569B56994602 /* React-jsiexecutor-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-jsiexecutor-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t4319E1967E8F6E050D8E035D7E5D4598 /* FlexDirection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FlexDirection.h; sourceTree = \"<group>\"; };\n\t\t431DEF836033B057B6067879CB291040 /* RCTUnimplementedNativeComponentView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTUnimplementedNativeComponentView.mm; sourceTree = \"<group>\"; };\n\t\t4340CE46967CD10BEFC7859B55898A6D /* RCTProfileTrampoline-arm64.S */ = {isa = PBXFileReference; includeInIndex = 1; path = \"RCTProfileTrampoline-arm64.S\"; sourceTree = \"<group>\"; };\n\t\t4343AD60D13A26A3F11E942DA9C12580 /* RCTSurfaceRootShadowView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTSurfaceRootShadowView.m; sourceTree = \"<group>\"; };\n\t\t434BDC67E1145AE964DB9AA3C0D4F3AE /* InspectorUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = InspectorUtilities.h; sourceTree = \"<group>\"; };\n\t\t43E01084CFFDCD00B181AAEBF7F6EC46 /* RCTBridgeConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTBridgeConstants.h; sourceTree = \"<group>\"; };\n\t\t43EB5BDEB4E6A695F071E994CDEDF34A /* strtod.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = strtod.cc; path = \"double-conversion/strtod.cc\"; sourceTree = \"<group>\"; };\n\t\t43F384C21F24B355DE771A761C765E4B /* ShadowTreeRegistry.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ShadowTreeRegistry.cpp; path = react/renderer/mounting/ShadowTreeRegistry.cpp; sourceTree = \"<group>\"; };\n\t\t4403122C16D5B003C8984E009EAF54F1 /* primitives.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = primitives.h; path = react/renderer/uimanager/primitives.h; sourceTree = \"<group>\"; };\n\t\t441AA6664650EC12BAF8937E4A882741 /* React-Codegen.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-Codegen.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t44356704310DCCAB77D9F8693D62FE0B /* RCTSurfacePointerHandler.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RCTSurfacePointerHandler.mm; path = Fabric/RCTSurfacePointerHandler.mm; sourceTree = \"<group>\"; };\n\t\t445199601546E45056A827DFB23F4148 /* RCTHTTPRequestHandler.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTHTTPRequestHandler.mm; sourceTree = \"<group>\"; };\n\t\t446FE57F2A972700F005CD2CC41F8710 /* RCTTurboModuleManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RCTTurboModuleManager.mm; path = ReactCommon/RCTTurboModuleManager.mm; sourceTree = \"<group>\"; };\n\t\t4478194C75B2D184014614829944D5CC /* ThreadLocal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ThreadLocal.h; path = folly/ThreadLocal.h; sourceTree = \"<group>\"; };\n\t\t447C966873650F5BE0F53C20B5B181AD /* RCTVirtualTextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTVirtualTextView.h; sourceTree = \"<group>\"; };\n\t\t4489977C9B5B35F7F5A112139189B7E0 /* RCTNativeModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTNativeModule.h; sourceTree = \"<group>\"; };\n\t\t44C17CFBA5F0AAEEAA6587B65BBD9539 /* DynamicPropsUtilities.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = DynamicPropsUtilities.cpp; path = react/renderer/core/DynamicPropsUtilities.cpp; sourceTree = \"<group>\"; };\n\t\t44D41289A83BA05369244074562FCAE8 /* SRHTTPConnectMessage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRHTTPConnectMessage.m; path = SocketRocket/Internal/Utilities/SRHTTPConnectMessage.m; sourceTree = \"<group>\"; };\n\t\t456E948706116C0DD64555FF6BF85B08 /* RCTSurfacePresenter.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RCTSurfacePresenter.mm; path = Fabric/RCTSurfacePresenter.mm; sourceTree = \"<group>\"; };\n\t\t459822FB423F933D32F755CA3A5D55CC /* glog-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"glog-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\t459B7A62CD1A78C3B1D3BA7499CB76CD /* UnimplementedViewProps.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UnimplementedViewProps.h; path = react/renderer/components/unimplementedview/UnimplementedViewProps.h; sourceTree = \"<group>\"; };\n\t\t45A5B3AB48BF8E29430504561E8566AA /* React-jsinspector-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-jsinspector-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t45BE03CDBA0ACF037784CA42392A374F /* RCTProfileTrampoline-i386.S */ = {isa = PBXFileReference; includeInIndex = 1; path = \"RCTProfileTrampoline-i386.S\"; sourceTree = \"<group>\"; };\n\t\t45C6CA880F0AD8CC31C1BF775228C3EF /* RCTRefreshControl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTRefreshControl.m; sourceTree = \"<group>\"; };\n\t\t45D864901AF697040097CE5D0FCD717F /* Log.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Log.h; sourceTree = \"<group>\"; };\n\t\t45D9999C07AC6FD97A5897196483760E /* RuntimeScheduler_Modern.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RuntimeScheduler_Modern.h; sourceTree = \"<group>\"; };\n\t\t45E05ACB5D6C411D85AD9B6A40C2DD2E /* RuntimeAgent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RuntimeAgent.h; sourceTree = \"<group>\"; };\n\t\t45FA7F5F8B8980E56D777737778E2381 /* React-RCTImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-RCTImage-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t464776232CDC5618B023B03B587FF834 /* simdjson-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"simdjson-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t466A8EAE41785C3EA08D830470EABB6B /* Arena-inl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"Arena-inl.h\"; path = \"folly/memory/Arena-inl.h\"; sourceTree = \"<group>\"; };\n\t\t468E6DDCB31D801D029C02EF35D5C24C /* React-runtimeexecutor.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-runtimeexecutor.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t469194BAB9EE78B8BC1A3877E5EB169C /* jsi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = jsi.h; path = jsi/jsi.h; sourceTree = \"<group>\"; };\n\t\t4695EA457448E4B94A1CB1A54D7440C3 /* RCTLog.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTLog.mm; sourceTree = \"<group>\"; };\n\t\t46E1F838DD66034E7F76591680E8F0F6 /* he.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = he.lproj; path = React/I18n/strings/he.lproj; sourceTree = \"<group>\"; };\n\t\t46EA19D378721E8E4D853840E6430E2C /* ParagraphLayoutManager.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ParagraphLayoutManager.cpp; path = react/renderer/components/text/ParagraphLayoutManager.cpp; sourceTree = \"<group>\"; };\n\t\t46EDCFA392F4FA15E1D6087289E0B88B /* fmt-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"fmt-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t46F019BC62AF7DC88D7C7732C66B0216 /* ConcreteState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ConcreteState.h; path = react/renderer/core/ConcreteState.h; sourceTree = \"<group>\"; };\n\t\t46F5E5B9B1380E064D67E9508C78BACF /* UIManagerAnimationDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UIManagerAnimationDelegate.h; path = react/renderer/uimanager/UIManagerAnimationDelegate.h; sourceTree = \"<group>\"; };\n\t\t4738F10785BD68311DE222F91337CB33 /* RCTModalHostViewManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTModalHostViewManager.m; sourceTree = \"<group>\"; };\n\t\t473969280531057CD249A18AC62DD076 /* AtomicUnorderedMap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AtomicUnorderedMap.h; path = folly/AtomicUnorderedMap.h; sourceTree = \"<group>\"; };\n\t\t475E63C49DABE072747B2ACDE9DE0BA5 /* RCTImageComponentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTImageComponentView.h; sourceTree = \"<group>\"; };\n\t\t479CC64ABABA112D0CD8C3AF4C19786C /* Pods-WatermelonTester-WatermelonTesterTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = \"Pods-WatermelonTester-WatermelonTesterTests-acknowledgements.plist\"; sourceTree = \"<group>\"; };\n\t\t47AD1D90749E8B75D93FDBB70F9F6ABA /* TokenBucket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TokenBucket.h; path = folly/TokenBucket.h; sourceTree = \"<group>\"; };\n\t\t47BE5F90D494B6D74BB9880F6EBD0D1D /* RCTLegacyViewManagerInteropComponentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTLegacyViewManagerInteropComponentView.h; sourceTree = \"<group>\"; };\n\t\t47ECF5C97B3CE613ADC79EB219369BD2 /* CacheLocality.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = CacheLocality.cpp; path = folly/concurrency/CacheLocality.cpp; sourceTree = \"<group>\"; };\n\t\t4811CBBB4C46F7C891F1F7E426628CBD /* RCTNetworkPlugins.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTNetworkPlugins.mm; sourceTree = \"<group>\"; };\n\t\t48151421313275AE47A1F36C49F1AC43 /* RCTInputAccessoryViewContent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTInputAccessoryViewContent.h; sourceTree = \"<group>\"; };\n\t\t4815C38AF6C2FD23A9E98263CAFC071E /* Unit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Unit.h; path = folly/Unit.h; sourceTree = \"<group>\"; };\n\t\t481D4593ECDD5D02E193B28FEF265A45 /* simdjson.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = simdjson.release.xcconfig; sourceTree = \"<group>\"; };\n\t\t482077692C71BA225ECEBBE9626B7C22 /* ReactCommon.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = ReactCommon.podspec; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t485B66F0206CCA9ACBE8269CA49B3639 /* RCTBundleURLProvider.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTBundleURLProvider.mm; sourceTree = \"<group>\"; };\n\t\t4873FC718C30FB33CE887064BF8E5DE8 /* F14Map-fwd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"F14Map-fwd.h\"; path = \"folly/container/F14Map-fwd.h\"; sourceTree = \"<group>\"; };\n\t\t488ADD85E24689EBD7862B0D4E7CA547 /* FallbackRuntimeAgentDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FallbackRuntimeAgentDelegate.h; sourceTree = \"<group>\"; };\n\t\t489E69C87D3FBB7418B3000B710B6899 /* RootShadowNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RootShadowNode.h; path = react/renderer/components/root/RootShadowNode.h; sourceTree = \"<group>\"; };\n\t\t48A56339A525A7972D16108E1C573FA7 /* IndexedMemPool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IndexedMemPool.h; path = folly/IndexedMemPool.h; sourceTree = \"<group>\"; };\n\t\t48B75222BE84998C3999916E6084DAD4 /* LayoutResults.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = LayoutResults.cpp; sourceTree = \"<group>\"; };\n\t\t48B93F350B7CEAA9026208326081EA41 /* RCTDiffClampAnimatedNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTDiffClampAnimatedNode.h; sourceTree = \"<group>\"; };\n\t\t48C37A67E9B9AEBECBFDBF2939F0F488 /* RCTGenericDelegateSplitter.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTGenericDelegateSplitter.mm; sourceTree = \"<group>\"; };\n\t\t48D1454DD898A877C683DE012FCE946E /* Format-inl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"Format-inl.h\"; path = \"folly/Format-inl.h\"; sourceTree = \"<group>\"; };\n\t\t48D442CA49CE18D23E61AE09E67355CC /* React-jsinspector.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-jsinspector.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t4929D6CBAA4CA6E284FE157B1BD57DA0 /* ImageResponseObserverCoordinator.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ImageResponseObserverCoordinator.cpp; path = react/renderer/imagemanager/ImageResponseObserverCoordinator.cpp; sourceTree = \"<group>\"; };\n\t\t492BFB87D3FC79B8A5E5053209507E96 /* RCTInspectorDevServerHelper.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTInspectorDevServerHelper.mm; sourceTree = \"<group>\"; };\n\t\t492C01ACF6D4D924E6561FCD33DB914D /* RCTCursor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTCursor.h; sourceTree = \"<group>\"; };\n\t\t492E9A2ED4F5B423E522887CB7BCF477 /* RCTDisplayWeakRefreshable.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTDisplayWeakRefreshable.mm; sourceTree = \"<group>\"; };\n\t\t493BF367283D552EA0719F4472FB1C1E /* Varint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Varint.h; path = folly/Varint.h; sourceTree = \"<group>\"; };\n\t\t49549BCF8744CE247C53A44E2598E79D /* React-RuntimeCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-RuntimeCore-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t498AA16C83135C6DAEFCEAE97628D0D5 /* RCTLogBoxView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTLogBoxView.mm; sourceTree = \"<group>\"; };\n\t\t4997893AEC6DB585E2DB2AC06E6557FD /* PointerEvent.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = PointerEvent.cpp; path = react/renderer/components/view/PointerEvent.cpp; sourceTree = \"<group>\"; };\n\t\t49B8EB5E3B6498FDDA1A80E45FA97979 /* ReactNativeFeatureFlags.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = ReactNativeFeatureFlags.cpp; sourceTree = \"<group>\"; };\n\t\t49C7723A5D97C7404CB0972A1F44276F /* Yoga.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Yoga.debug.xcconfig; sourceTree = \"<group>\"; };\n\t\t49C8ED14DB40A8E3E597CC83FDA19B4B /* RCTComponentData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTComponentData.m; sourceTree = \"<group>\"; };\n\t\t4A1561C46AF8A258D7CDA8942E5C9828 /* RCTBridgeProxy+Cxx.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"RCTBridgeProxy+Cxx.h\"; sourceTree = \"<group>\"; };\n\t\t4A3E59A3CCA7D3024E30ACFBCE006065 /* DebuggerAPI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DebuggerAPI.h; path = destroot/include/hermes/DebuggerAPI.h; sourceTree = \"<group>\"; };\n\t\t4ABE2E714C1175CCFDB7C0F72CE4B611 /* RCTProfile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTProfile.m; sourceTree = \"<group>\"; };\n\t\t4AE459B4FB63DF08755386C3B4D759D8 /* FBReactNativeSpecJSI-generated.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = \"FBReactNativeSpecJSI-generated.cpp\"; sourceTree = \"<group>\"; };\n\t\t4B22A0860FE6BF2F9CC4F24C6A16C02B /* EventQueueProcessor.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = EventQueueProcessor.cpp; path = react/renderer/core/EventQueueProcessor.cpp; sourceTree = \"<group>\"; };\n\t\t4B2CA6BADDBABE04EA3FC848D2DFBA7C /* React-RCTFabric.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-RCTFabric.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t4B2DFF23AC104B04562F5A613D62A6E2 /* RCTSurfacePresenter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTSurfacePresenter.h; path = Fabric/RCTSurfacePresenter.h; sourceTree = \"<group>\"; };\n\t\t4B3894240F9F245719EDB8B1ADBE0FC7 /* RCTFollyConvert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTFollyConvert.h; sourceTree = \"<group>\"; };\n\t\t4B56A61B8E70277D187E3D37BFBF7897 /* stubs.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = stubs.cpp; path = react/renderer/mounting/stubs.cpp; sourceTree = \"<group>\"; };\n\t\t4B62C6CE9D343C56E332C5816AC631E6 /* RCTConvert+Text.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"RCTConvert+Text.h\"; path = \"Libraries/Text/RCTConvert+Text.h\"; sourceTree = \"<group>\"; };\n\t\t4BA4FB0F0557FD723CB5B38C308FCE50 /* Yoga.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Yoga.h; path = yoga/Yoga.h; sourceTree = \"<group>\"; };\n\t\t4BAC8D0807F88C47E4DFD9F7C7859B82 /* InstanceTarget.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = InstanceTarget.h; sourceTree = \"<group>\"; };\n\t\t4BB78B415F6A4B0EED05C08EA7A7D03D /* RCTImageLoader.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTImageLoader.mm; sourceTree = \"<group>\"; };\n\t\t4BB7FF49C6C69146DEE4B499147BB9B0 /* InspectorFlags.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorFlags.cpp; sourceTree = \"<group>\"; };\n\t\t4BC7B5A86B19E285F310EB16BDE027DE /* RCTImageManagerProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTImageManagerProtocol.h; path = react/renderer/imagemanager/RCTImageManagerProtocol.h; sourceTree = \"<group>\"; };\n\t\t4BEF5A191F5C9D7D1C8386FB298882BE /* StubView.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = StubView.cpp; path = react/renderer/mounting/StubView.cpp; sourceTree = \"<group>\"; };\n\t\t4BEF797D469DBDB850A55FFDD493B789 /* RCTCxxInspectorWebSocketAdapter.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTCxxInspectorWebSocketAdapter.mm; sourceTree = \"<group>\"; };\n\t\t4C0E7A0629DD1A33991E0281C1D7EA6F /* RCTImagePrimitivesConversions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTImagePrimitivesConversions.h; path = react/renderer/imagemanager/RCTImagePrimitivesConversions.h; sourceTree = \"<group>\"; };\n\t\t4C138289B336DA780427BF289634EA74 /* RCTRequired.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RCTRequired.debug.xcconfig; sourceTree = \"<group>\"; };\n\t\t4C260B39655A7EBBA430142A5FAC7288 /* SurfaceTelemetry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SurfaceTelemetry.h; path = react/renderer/telemetry/SurfaceTelemetry.h; sourceTree = \"<group>\"; };\n\t\t4C46B7B386338A3CF2226940A341403E /* Libunwind.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Libunwind.h; path = folly/portability/Libunwind.h; sourceTree = \"<group>\"; };\n\t\t4C4CB2CD0399561C3717DBAB197899E7 /* RCTJSThread.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTJSThread.m; sourceTree = \"<group>\"; };\n\t\t4C4D1C251906CB5D9F8086B2747C1522 /* NodeType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = NodeType.h; sourceTree = \"<group>\"; };\n\t\t4C4D4C35312AE9ACB8D59A46D0D6051A /* double-conversion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"double-conversion.h\"; path = \"double-conversion/double-conversion.h\"; sourceTree = \"<group>\"; };\n\t\t4C5E9B3E860020EB74A5A0DCB92E545F /* RunLoopObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RunLoopObserver.h; sourceTree = \"<group>\"; };\n\t\t4C664E2A68FE1D2FA0458ED4485088A9 /* React-RCTText.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-RCTText.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t4C8F91F7CAFA9A5744781FD95C2E01DA /* RCTSettingsPlugins.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTSettingsPlugins.h; path = Libraries/Settings/RCTSettingsPlugins.h; sourceTree = \"<group>\"; };\n\t\t4CAB10F1ADF33F5BF62A774463140259 /* Constexpr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Constexpr.h; path = folly/portability/Constexpr.h; sourceTree = \"<group>\"; };\n\t\t4CC04D4366699171D90B6E14F8947CBD /* RCTTextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTTextView.h; sourceTree = \"<group>\"; };\n\t\t4CE7D7393D013F61BE78DD0E2CDA786F /* EventBeat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EventBeat.h; path = react/renderer/core/EventBeat.h; sourceTree = \"<group>\"; };\n\t\t4D0CA4B3C631CF1CCBBF61F2587F57B7 /* BaseTextShadowNode.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = BaseTextShadowNode.cpp; path = react/renderer/components/text/BaseTextShadowNode.cpp; sourceTree = \"<group>\"; };\n\t\t4D27045A96C63465EC6F9A1AED2DED9D /* React-jsiexecutor.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-jsiexecutor.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t4DA4CDB70B04DEA86A7EA3B9F6B6C060 /* RCTAppearance.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTAppearance.mm; sourceTree = \"<group>\"; };\n\t\t4DC0B393EEF985A3E4643B20F6754757 /* RCTComponentViewProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTComponentViewProtocol.h; sourceTree = \"<group>\"; };\n\t\t4DD488FCCA9EEDD9B68B8F99D105C44A /* Preprocessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Preprocessor.h; path = folly/Preprocessor.h; sourceTree = \"<group>\"; };\n\t\t4DD6B4C58B299EAE1A3E500A3EDE0002 /* InstanceHandle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = InstanceHandle.h; path = react/renderer/core/InstanceHandle.h; sourceTree = \"<group>\"; };\n\t\t4DE72A397551E705994E98D86904430A /* React-RuntimeHermes.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-RuntimeHermes.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t4E105C5D9C4A539112084489DC235CAB /* RCTDeprecation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTDeprecation.m; sourceTree = \"<group>\"; };\n\t\t4E54C446AD8887C61105DE1F1011BC2F /* RCTTypedModuleConstants.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTTypedModuleConstants.mm; sourceTree = \"<group>\"; };\n\t\t4E606A9762AB8D4C06B74BC1924936FF /* Lock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Lock.h; path = folly/synchronization/Lock.h; sourceTree = \"<group>\"; };\n\t\t4E97DA6EC4EC14E2148BD7844BD1F3A3 /* SanitizeAddress.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SanitizeAddress.h; path = folly/memory/SanitizeAddress.h; sourceTree = \"<group>\"; };\n\t\t4ECA42F97FBA48C55D95F16BEB240CE4 /* CtorConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CtorConfig.h; path = destroot/include/hermes/Public/CtorConfig.h; sourceTree = \"<group>\"; };\n\t\t4EE65A27409B6614EB4E7E08374FDCA8 /* Yoga-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"Yoga-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\t4EEB093EC638788E1D7EDFEC04D19432 /* RCTDevLoadingViewSetEnabled.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTDevLoadingViewSetEnabled.m; sourceTree = \"<group>\"; };\n\t\t4F1014498794A7BE263384E6C973334C /* ImageShadowNode.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ImageShadowNode.cpp; path = react/renderer/components/image/ImageShadowNode.cpp; sourceTree = \"<group>\"; };\n\t\t4F21E8185A97B7403E0532DBCEAE20ED /* RCTVibration.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTVibration.mm; sourceTree = \"<group>\"; };\n\t\t4F2D0D22F314D7C2DE88B31A3FC2C571 /* conversions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = conversions.h; path = react/renderer/attributedstring/conversions.h; sourceTree = \"<group>\"; };\n\t\t4F3E9C98444FA55E416B857143C48013 /* React-RuntimeHermes */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-RuntimeHermes\"; path = \"libReact-RuntimeHermes.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t4F3F30A04837205FCBA040E0445525A6 /* RWSpinLock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RWSpinLock.h; path = folly/synchronization/RWSpinLock.h; sourceTree = \"<group>\"; };\n\t\t4F46D9F3383D17EBE93722534A1D68D4 /* conversions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = conversions.h; path = react/renderer/components/text/conversions.h; sourceTree = \"<group>\"; };\n\t\t4FE6AAB9CCD62E8CE2B1E03FA145C8B8 /* BufferedRuntimeExecutor.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = BufferedRuntimeExecutor.cpp; sourceTree = \"<group>\"; };\n\t\t500E0FB005F00271DB2A0C68724900DA /* RCTShadowView+Layout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"RCTShadowView+Layout.h\"; sourceTree = \"<group>\"; };\n\t\t506A5EB970B15ADBF0D61002534BC9B1 /* SysMman.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SysMman.h; path = folly/portability/SysMman.h; sourceTree = \"<group>\"; };\n\t\t506E11C60093C5C364DE8F3F2F22AC41 /* RCTLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTLayout.h; sourceTree = \"<group>\"; };\n\t\t507CCE949602395770BDF4CA5A58B07A /* StubViewTree.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = StubViewTree.cpp; path = react/renderer/mounting/StubViewTree.cpp; sourceTree = \"<group>\"; };\n\t\t509A9FBAE4B5971C315FA3AB4924204D /* RCTUnimplementedViewComponentView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTUnimplementedViewComponentView.mm; sourceTree = \"<group>\"; };\n\t\t50A063D0B84A8706BF9D36E052AFDCA4 /* SysResource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SysResource.h; path = folly/portability/SysResource.h; sourceTree = \"<group>\"; };\n\t\t50CCFCC93BE3FD24C09BEB499BEACA7B /* React-cxxreact.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-cxxreact.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t50DAB08AF16996E1B2836D9927C3D32A /* React-RCTImage.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-RCTImage.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t50E197DCEAC19B139D61338F626D0ECE /* RCTReactTaggedView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTReactTaggedView.h; sourceTree = \"<group>\"; };\n\t\t513728BBF69F10E478D203C24AE89494 /* RCTSpringAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTSpringAnimation.mm; sourceTree = \"<group>\"; };\n\t\t51396501E3E25FB7DCB5E276B819C556 /* WatermelonDB-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"WatermelonDB-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t51582CF5BC4E40FAA616B6363DF4B4A5 /* ImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ImageManager.h; path = react/renderer/imagemanager/ImageManager.h; sourceTree = \"<group>\"; };\n\t\t5176B30F1DFC1E15711AA1F63DEFEEE3 /* InputAccessoryShadowNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = InputAccessoryShadowNode.h; path = react/renderer/components/inputaccessory/InputAccessoryShadowNode.h; sourceTree = \"<group>\"; };\n\t\t5181AFE5FC05B015D0F98EAB49991236 /* RCTNullability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTNullability.h; sourceTree = \"<group>\"; };\n\t\t51B45045020F47D86FEF4BD034627881 /* RCTPullToRefreshViewComponentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTPullToRefreshViewComponentView.h; sourceTree = \"<group>\"; };\n\t\t51B5078EBA4D2CDB62D5B9977620515C /* RCTImageUtils.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTImageUtils.mm; sourceTree = \"<group>\"; };\n\t\t51BFECF146A1165D167989F92AE6C0CC /* TypeInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TypeInfo.h; path = folly/lang/TypeInfo.h; sourceTree = \"<group>\"; };\n\t\t51C1705E9B13860E1A5ED501BF5D9BD4 /* RawValue.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = RawValue.cpp; path = react/renderer/core/RawValue.cpp; sourceTree = \"<group>\"; };\n\t\t51CBEFF89517A9EE045E0A3F9D3939B5 /* RCTLegacyViewManagerInteropCoordinatorAdapter.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTLegacyViewManagerInteropCoordinatorAdapter.mm; sourceTree = \"<group>\"; };\n\t\t51F1662929364AF9AB1F5EFD515C39CA /* React-RCTFabric-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-RCTFabric-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\t51FCC6E2D2922D4288A83D114839FF83 /* React-CoreModules-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-CoreModules-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t520B63F372380D55B40793B5BB10A39F /* EventDispatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EventDispatcher.h; path = react/renderer/core/EventDispatcher.h; sourceTree = \"<group>\"; };\n\t\t5216E04A7C94A5B08BF8F3BD20CDAAD7 /* RCTEventDispatcherProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTEventDispatcherProtocol.h; sourceTree = \"<group>\"; };\n\t\t522269B8DAFA9F8734D95340BC29600A /* diy-fp.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = \"diy-fp.cc\"; path = \"double-conversion/diy-fp.cc\"; sourceTree = \"<group>\"; };\n\t\t52271E0F8ED452014891F20BD4947CFF /* UIManagerCommitHook.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UIManagerCommitHook.h; path = react/renderer/uimanager/UIManagerCommitHook.h; sourceTree = \"<group>\"; };\n\t\t522819EFAF89C9070CB50445ACD48721 /* TurboModulePerfLogger.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = TurboModulePerfLogger.cpp; path = react/nativemodule/core/ReactCommon/TurboModulePerfLogger.cpp; sourceTree = \"<group>\"; };\n\t\t52332B91843419E05974FD7AA782856B /* ParagraphAttributes.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ParagraphAttributes.cpp; path = react/renderer/attributedstring/ParagraphAttributes.cpp; sourceTree = \"<group>\"; };\n\t\t52350E9ADA2301F7191C925F1DCDD5BE /* RCTTouchHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTTouchHandler.m; sourceTree = \"<group>\"; };\n\t\t52DD466CEB37236E0239E023F92F17AF /* ComponentDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ComponentDescriptor.h; path = react/renderer/core/ComponentDescriptor.h; sourceTree = \"<group>\"; };\n\t\t52DFAF9CB84CA1E1BDC56A3F71A3C404 /* FBLazyVector.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FBLazyVector.release.xcconfig; sourceTree = \"<group>\"; };\n\t\t52E49CCBB965394C8B3C6525BA37644D /* RCTSyncImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTSyncImageManager.h; path = react/renderer/imagemanager/RCTSyncImageManager.h; sourceTree = \"<group>\"; };\n\t\t52FA0467104A3E0506B07D0F4D83C94A /* RCTEventEmitter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTEventEmitter.h; sourceTree = \"<group>\"; };\n\t\t52FAACC98D9676B0C965D8484DF9C51E /* format.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = format.cc; path = src/format.cc; sourceTree = \"<group>\"; };\n\t\t52FB16E6F0925BA9FE8A9E2D77086C08 /* RuntimeConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RuntimeConfig.h; path = destroot/include/hermes/Public/RuntimeConfig.h; sourceTree = \"<group>\"; };\n\t\t531B578A8FF205619BD8E526C7C60930 /* FarmHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FarmHash.h; path = folly/hash/FarmHash.h; sourceTree = \"<group>\"; };\n\t\t5366D59A6C60853DE6216206318AD290 /* React-perflogger-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-perflogger-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t53698A773FE28A1702762D414C8FD31B /* RCTCxxInspectorPackagerConnection.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTCxxInspectorPackagerConnection.mm; sourceTree = \"<group>\"; };\n\t\t53B4E188053652EA7D2E30691509AA9F /* RCTFrameUpdate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTFrameUpdate.h; sourceTree = \"<group>\"; };\n\t\t53C4B697D1793E966C34C78BD44F6D02 /* RCTModalHostViewComponentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTModalHostViewComponentView.h; sourceTree = \"<group>\"; };\n\t\t53F62FE9FCA2DB3B3BA9F838F5513256 /* RCTAttributedTextUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTAttributedTextUtils.h; sourceTree = \"<group>\"; };\n\t\t5424951447BE1FD64194B009E9504B50 /* RCTScrollEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTScrollEvent.m; sourceTree = \"<group>\"; };\n\t\t5433FC0C0EE55FB7FA9D9BCA99A39650 /* Executor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Executor.h; path = folly/Executor.h; sourceTree = \"<group>\"; };\n\t\t5435E25ABF1C803D1D8B6ADE22E2664D /* json_pointer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = json_pointer.h; path = folly/json_pointer.h; sourceTree = \"<group>\"; };\n\t\t543D873E1BAD025BDD864DB650682C5D /* React-RCTSettings.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-RCTSettings.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t544A0D0CF86148CB2EF0B78039179444 /* RCTDataRequestHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTDataRequestHandler.h; path = Libraries/Network/RCTDataRequestHandler.h; sourceTree = \"<group>\"; };\n\t\t5466515A64A57AE3158EEA66741CDABC /* RCTCustomPullToRefreshViewProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTCustomPullToRefreshViewProtocol.h; sourceTree = \"<group>\"; };\n\t\t54977C60EFA8732D452D9D03923B5270 /* Unicode.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = Unicode.cpp; path = folly/Unicode.cpp; sourceTree = \"<group>\"; };\n\t\t54B9E0DF52755792E0D7A095A1592309 /* React-RCTBlob.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-RCTBlob.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t54C3134B4FA97F946996018EB76D6F2B /* Builtins.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Builtins.h; path = folly/portability/Builtins.h; sourceTree = \"<group>\"; };\n\t\t54CED87C8170B13841D92A0113192459 /* WMDatabaseDriver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = WMDatabaseDriver.h; sourceTree = \"<group>\"; };\n\t\t550DDF0017EBD296665C75C459009C19 /* LeakChecker.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = LeakChecker.cpp; path = react/renderer/leakchecker/LeakChecker.cpp; sourceTree = \"<group>\"; };\n\t\t5510FC0409FF02AA7A39E8542D74B323 /* YGEnums.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = YGEnums.cpp; path = yoga/YGEnums.cpp; sourceTree = \"<group>\"; };\n\t\t553967D7C1E460B2FF3E819215A2EC75 /* CrashManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CrashManager.h; path = destroot/include/hermes/Public/CrashManager.h; sourceTree = \"<group>\"; };\n\t\t55399075C21EA2F4687C29DEBD4F00E7 /* React-debug-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-debug-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\t5545A49E67978F2CEF8C77F63D7368FF /* Style.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Style.h; sourceTree = \"<group>\"; };\n\t\t555499AEC258DE52284D569572113A79 /* bignum.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = bignum.h; path = \"double-conversion/bignum.h\"; sourceTree = \"<group>\"; };\n\t\t555C8E2826D8F277B972F2B66D34F22B /* fixed-dtoa.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = \"fixed-dtoa.cc\"; path = \"double-conversion/fixed-dtoa.cc\"; sourceTree = \"<group>\"; };\n\t\t558A2EBBB9500DC131AEC7C0A404E3B9 /* TracingRuntime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TracingRuntime.h; path = destroot/include/hermes/TracingRuntime.h; sourceTree = \"<group>\"; };\n\t\t558ED3C1B5F36FE5842EBF04C4FC985C /* nb.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = nb.lproj; path = React/I18n/strings/nb.lproj; sourceTree = \"<group>\"; };\n\t\t55B1D50AB670D1ED574D945561008297 /* RCTMultilineTextInputViewManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTMultilineTextInputViewManager.h; sourceTree = \"<group>\"; };\n\t\t55BB048CB3ED0500BC5E984EC4283580 /* FingerprintPolynomial.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FingerprintPolynomial.h; path = folly/detail/FingerprintPolynomial.h; sourceTree = \"<group>\"; };\n\t\t55EADA43B34BE3D62BAE2D869390C842 /* Futex.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = Futex.cpp; path = folly/detail/Futex.cpp; sourceTree = \"<group>\"; };\n\t\t55F26557222F60DEF94D6A5C8A9D24F9 /* React-RCTNetwork.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-RCTNetwork.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t5601EFF66A7656BA9E668AE17351D360 /* React.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = React.debug.xcconfig; sourceTree = \"<group>\"; };\n\t\t5607E93C1618AA4B1B9A7B366EA9EB0F /* RootShadowNode.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = RootShadowNode.cpp; path = react/renderer/components/root/RootShadowNode.cpp; sourceTree = \"<group>\"; };\n\t\t561201E4162AB6CB05D4F749A565AFCC /* Align.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Align.h; sourceTree = \"<group>\"; };\n\t\t56124900DA31ECD2F222CD4A72DBF2BC /* React-jsinspector.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = \"React-jsinspector.modulemap\"; sourceTree = \"<group>\"; };\n\t\t561C2BF4C1B754CC987BD95FC0FA1F37 /* hermes-engine-xcframeworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = \"hermes-engine-xcframeworks.sh\"; sourceTree = \"<group>\"; };\n\t\t5627C2F1A2A3B2FFA118B0BD3069A5B9 /* RCTAssert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTAssert.h; sourceTree = \"<group>\"; };\n\t\t5648100E641B6682FAC595B66FFBC6B5 /* Pods-WatermelonTester-WatermelonTesterTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = \"Pods-WatermelonTester-WatermelonTesterTests-frameworks.sh\"; sourceTree = \"<group>\"; };\n\t\t5660D2686BFA4493932307298F162071 /* ExecutionContextManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ExecutionContextManager.h; sourceTree = \"<group>\"; };\n\t\t5671AD120864F71635B5C5BD07138E67 /* F14Mask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = F14Mask.h; path = folly/container/detail/F14Mask.h; sourceTree = \"<group>\"; };\n\t\t5675EDF737917D753E24442B6327797A /* RCTRootViewDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTRootViewDelegate.h; sourceTree = \"<group>\"; };\n\t\t5676712895937C4B56B481AD3916DC06 /* WeakFamilyRegistry.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = WeakFamilyRegistry.cpp; path = react/renderer/leakchecker/WeakFamilyRegistry.cpp; sourceTree = \"<group>\"; };\n\t\t568619787B3509509A5FFEA27285F968 /* RCTUIUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTUIUtils.h; sourceTree = \"<group>\"; };\n\t\t56909D6C087AAA9D6C77D684FEC0C328 /* simdjson.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = simdjson.debug.xcconfig; sourceTree = \"<group>\"; };\n\t\t56AAE7ABD3415795FAEEE07A449DD7AE /* Function.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Function.h; path = folly/Function.h; sourceTree = \"<group>\"; };\n\t\t56B4C070CA7B93A1F321D02E003223BA /* glog.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = glog.modulemap; sourceTree = \"<group>\"; };\n\t\t56BBA94041D86275E476DAC1DD401197 /* RCTFabricSurface.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTFabricSurface.mm; sourceTree = \"<group>\"; };\n\t\t56D34A45C0AD73CC42339EC6A2CA028E /* StateUpdate.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = StateUpdate.cpp; path = react/renderer/core/StateUpdate.cpp; sourceTree = \"<group>\"; };\n\t\t57094883E054C3166427AC3CFF403965 /* Differentiator.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = Differentiator.cpp; path = react/renderer/mounting/Differentiator.cpp; sourceTree = \"<group>\"; };\n\t\t570DABFC32CF97AB28B8269609BAD9F8 /* Class.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Class.h; path = react/bridging/Class.h; sourceTree = \"<group>\"; };\n\t\t5732AA2AC0D6C97862F2E84E6A43D27D /* RCTFPSGraph.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTFPSGraph.h; path = React/CoreModules/RCTFPSGraph.h; sourceTree = \"<group>\"; };\n\t\t5742CED06F824159A9F9C6FCDF8F66EB /* RCTTransformAnimatedNode.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTTransformAnimatedNode.mm; sourceTree = \"<group>\"; };\n\t\t5744FF8972259231F82207B5D2C1B114 /* vi.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = vi.lproj; path = React/I18n/strings/vi.lproj; sourceTree = \"<group>\"; };\n\t\t5776F9A564A106E1D34D8C2B6FB41C78 /* TcpInfoTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TcpInfoTypes.h; path = folly/net/TcpInfoTypes.h; sourceTree = \"<group>\"; };\n\t\t57BBCC84BCDB23D6ADA72EA6128CE796 /* RCTImageCache.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTImageCache.mm; sourceTree = \"<group>\"; };\n\t\t57C409D3D492DAB7368ECE438E121DB5 /* RCTStyleAnimatedNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTStyleAnimatedNode.h; sourceTree = \"<group>\"; };\n\t\t58025C2DBA6481310CDDD6E2AF2341E3 /* React-utils.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-utils.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t581A1FBA46FBC346F25CDD31C00AE6B9 /* SingletonThreadLocal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SingletonThreadLocal.h; path = folly/SingletonThreadLocal.h; sourceTree = \"<group>\"; };\n\t\t581AB95CD00868534D40A89FC7298A36 /* RCTPlatform.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTPlatform.mm; sourceTree = \"<group>\"; };\n\t\t5825A770C846E9DE0D37D57F8AE02E36 /* RCTColorAnimatedNode.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTColorAnimatedNode.mm; sourceTree = \"<group>\"; };\n\t\t582D8ADF4BEE51D724800E05D34ACDCA /* DynamicConverter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DynamicConverter.h; path = folly/DynamicConverter.h; sourceTree = \"<group>\"; };\n\t\t584180DC3B2C183B2687C5F1857403FF /* DiscriminatedPtr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DiscriminatedPtr.h; path = folly/DiscriminatedPtr.h; sourceTree = \"<group>\"; };\n\t\t58591CA75671A3724AEF97FE040632D7 /* GFlags.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GFlags.h; path = folly/portability/GFlags.h; sourceTree = \"<group>\"; };\n\t\t586843BE182EC40BA0F3E64B3128724F /* RCTRawTextShadowView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTRawTextShadowView.mm; sourceTree = \"<group>\"; };\n\t\t586BE0D668A4FAAEE338C3991530ACC0 /* PThread.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PThread.h; path = folly/portability/PThread.h; sourceTree = \"<group>\"; };\n\t\t5883D7A51536D3FB292BBC1FEF7C6C1C /* React.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = React.release.xcconfig; sourceTree = \"<group>\"; };\n\t\t58B548A2C55831264828B2298FF825B1 /* CpuId.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CpuId.h; path = folly/CpuId.h; sourceTree = \"<group>\"; };\n\t\t58C1E8B779C42177C4AE37F87FA08B90 /* React-CoreModules.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-CoreModules.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t59164B030AA6BE9DC3304EDD7E90FEEE /* F14Table.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = F14Table.h; path = folly/container/detail/F14Table.h; sourceTree = \"<group>\"; };\n\t\t5931C556E2652C0F4090A1106D4FEAD0 /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = en.lproj; path = React/I18n/strings/en.lproj; sourceTree = \"<group>\"; };\n\t\t598C51078F81B88ECED26E0192A48207 /* WMDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = WMDatabase.m; sourceTree = \"<group>\"; };\n\t\t59FDF98892BF9744DCB3D5402C366923 /* RCTAlertManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTAlertManager.h; path = React/CoreModules/RCTAlertManager.h; sourceTree = \"<group>\"; };\n\t\t5A0B5D9D59E5E269C5427D81B4D4CF05 /* Pods-WatermelonTester-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = \"Pods-WatermelonTester-frameworks.sh\"; sourceTree = \"<group>\"; };\n\t\t5A5CA98B839AFCD15AE40CBB92C32436 /* to_underlying.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = to_underlying.h; sourceTree = \"<group>\"; };\n\t\t5A623EC312D3BCD944313E099426740F /* PointerHoverTracker.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = PointerHoverTracker.cpp; path = react/renderer/uimanager/PointerHoverTracker.cpp; sourceTree = \"<group>\"; };\n\t\t5AA54A19E2135E09B9C8C0767385FD3A /* React-graphics */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-graphics\"; path = \"libReact-graphics.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t5AC69D8640FF5ADCACD89B82CB9E1110 /* React-utils-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-utils-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t5AE62E3EA1E11A2011DFB36206854AB4 /* Aligned.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Aligned.h; path = folly/lang/Aligned.h; sourceTree = \"<group>\"; };\n\t\t5AEA1EA0BA3625CC695A4E11E09FA24B /* RCTTextShadowView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTTextShadowView.h; sourceTree = \"<group>\"; };\n\t\t5B47FFA4BCF0EC2E8F7A7330A0B625F7 /* RCTViewManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTViewManager.h; sourceTree = \"<group>\"; };\n\t\t5B62D2EDAEE105EA46E50A51A6DCC4FB /* YGNodeLayout.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = YGNodeLayout.cpp; path = yoga/YGNodeLayout.cpp; sourceTree = \"<group>\"; };\n\t\t5B81B76C387972027C9B1637E2E6A612 /* HermesRuntimeAgentDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = HermesRuntimeAgentDelegate.h; sourceTree = \"<group>\"; };\n\t\t5BD6398C6C92DF26317E3DC8E027D927 /* PackTraits.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PackTraits.h; sourceTree = \"<group>\"; };\n\t\t5BD78C8466D2DAC22B989C5EFC592BAD /* Badge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Badge.h; path = folly/lang/Badge.h; sourceTree = \"<group>\"; };\n\t\t5C02361943CFC4D43BDE38DB0C69F197 /* Config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Config.h; path = folly/portability/Config.h; sourceTree = \"<group>\"; };\n\t\t5C3154BBEBE29BF292E5169F75CBD889 /* RawTextShadowNode.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = RawTextShadowNode.cpp; path = react/renderer/components/text/RawTextShadowNode.cpp; sourceTree = \"<group>\"; };\n\t\t5C54A77AACDC4EFCA476CD638F5287E1 /* Shell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Shell.h; path = folly/system/Shell.h; sourceTree = \"<group>\"; };\n\t\t5C6AF51B4A4EA15B2F122DBA7BA5B2A0 /* ConcreteViewShadowNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ConcreteViewShadowNode.h; path = react/renderer/components/view/ConcreteViewShadowNode.h; sourceTree = \"<group>\"; };\n\t\t5CA8FFB264289551FCCAE29495EBE650 /* conversions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = conversions.h; path = react/renderer/core/conversions.h; sourceTree = \"<group>\"; };\n\t\t5CD701537B4A3BB9EB36F3D0373E62EC /* React-Mapbuffer.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-Mapbuffer.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t5D024556120FC57697C2ECE69C53D36B /* AsyncTrace.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AsyncTrace.h; path = folly/detail/AsyncTrace.h; sourceTree = \"<group>\"; };\n\t\t5D1C0A821BD026A9A939C64687CBD024 /* Pods-WatermelonTester-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = \"Pods-WatermelonTester-resources.sh\"; sourceTree = \"<group>\"; };\n\t\t5D24035ED25B87D45E72A4CFB861C024 /* React-Core-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-Core-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t5D826D3061A245096B1C382B690FA981 /* ostream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ostream.h; path = include/fmt/ostream.h; sourceTree = \"<group>\"; };\n\t\t5D8D501AFD4360EBEB5A66144AEC1729 /* BufferedRuntimeExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BufferedRuntimeExecutor.h; sourceTree = \"<group>\"; };\n\t\t5DA7D4069EAB7AD175067D9475F75335 /* EventEmitters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EventEmitters.h; path = react/renderer/components/rncore/EventEmitters.h; sourceTree = \"<group>\"; };\n\t\t5DC5AD5C90390C13DD621B5A02EEE993 /* Chrono.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Chrono.h; path = folly/Chrono.h; sourceTree = \"<group>\"; };\n\t\t5E08C1229511DE5F11A5D0235BB42789 /* MessageTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MessageTypes.h; path = destroot/include/hermes/inspector/chrome/MessageTypes.h; sourceTree = \"<group>\"; };\n\t\t5E2250F8ED2A809808FB295A155DA713 /* PropsParserContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PropsParserContext.h; path = react/renderer/core/PropsParserContext.h; sourceTree = \"<group>\"; };\n\t\t5E4D8475C8A1839D5568E707455D012D /* DebugStringConvertibleItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = DebugStringConvertibleItem.h; sourceTree = \"<group>\"; };\n\t\t5E745C18EFA47BE9828C298066E9F6F5 /* core.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = core.h; path = include/fmt/core.h; sourceTree = \"<group>\"; };\n\t\t5E78187A78E9550C8C47E82A7E0800C4 /* RuntimeScheduler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RuntimeScheduler.h; sourceTree = \"<group>\"; };\n\t\t5E9F375741E65415151EE9093DC1535E /* RCTPackagerClient.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTPackagerClient.m; sourceTree = \"<group>\"; };\n\t\t5EA1F0E80816FE3C537ADE1BE9E97082 /* RCTI18nManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTI18nManager.h; path = React/CoreModules/RCTI18nManager.h; sourceTree = \"<group>\"; };\n\t\t5ED53EC43FC74FD8B1F3A1C21AF5D357 /* DoubleConversion.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DoubleConversion.modulemap; sourceTree = \"<group>\"; };\n\t\t5F7413AEE06FEB42B977D20F6A6C5D5E /* MessageTypesInlines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MessageTypesInlines.h; path = destroot/include/hermes/inspector/chrome/MessageTypesInlines.h; sourceTree = \"<group>\"; };\n\t\t5F85C8CC15CDC85E857260E4CDDF9817 /* IOVec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IOVec.h; path = folly/portability/IOVec.h; sourceTree = \"<group>\"; };\n\t\t5F8810FFDF257E41E57C7103FDC6A5BB /* SRDelegateController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRDelegateController.m; path = SocketRocket/Internal/Delegate/SRDelegateController.m; sourceTree = \"<group>\"; };\n\t\t5F8E380C0D44C30A7EB64835C56687EA /* FormatArg.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FormatArg.h; path = folly/FormatArg.h; sourceTree = \"<group>\"; };\n\t\t5FA7D9A20F443352B3F132A2348CEAF5 /* RCTDebuggingOverlayManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTDebuggingOverlayManager.m; sourceTree = \"<group>\"; };\n\t\t5FAC834F5ADBD6F3EEF6BE67C8BE5F06 /* FixedString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FixedString.h; path = folly/FixedString.h; sourceTree = \"<group>\"; };\n\t\t5FB7F5153FEFAD2FCC98DA600D4A18B3 /* RCTActivityIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTActivityIndicatorView.h; sourceTree = \"<group>\"; };\n\t\t5FCFFA906B90C33953D846D226E2DF4B /* RCTPerformanceLogger.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTPerformanceLogger.mm; sourceTree = \"<group>\"; };\n\t\t5FD76DB8A83861EF7CD0449CFC4DE097 /* Filesystem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Filesystem.h; path = folly/portability/Filesystem.h; sourceTree = \"<group>\"; };\n\t\t5FFB2C7DB283EB3379974035A76B3B13 /* ShadowTree.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ShadowTree.h; path = react/renderer/mounting/ShadowTree.h; sourceTree = \"<group>\"; };\n\t\t606BAB14D960C896D177B10A3540386B /* RCTTypeSafety-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"RCTTypeSafety-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t6075D4D4439E8587250CA17C18029EFE /* PlatformRunLoopObserver.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = PlatformRunLoopObserver.mm; sourceTree = \"<group>\"; };\n\t\t608A42FC636CC123077F86095300FDD8 /* HostPlatformColor.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = HostPlatformColor.mm; sourceTree = \"<group>\"; };\n\t\t609281012AE698DC460A40129D138A06 /* RCTSinglelineTextInputView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSinglelineTextInputView.h; sourceTree = \"<group>\"; };\n\t\t60B6FDAEA7F1F74C6155EF59EFCCA58E /* SysFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SysFile.h; path = folly/portability/SysFile.h; sourceTree = \"<group>\"; };\n\t\t60D5A56E763D6E7C4FBE797565062EEA /* React-nativeconfig */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-nativeconfig\"; path = \"libReact-nativeconfig.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t60DAB499CFAAD9EB49E01C7C8B9A5F15 /* RectangleEdges.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RectangleEdges.h; sourceTree = \"<group>\"; };\n\t\t60E4F60D2C2C4C8B7116D0D69FD78717 /* ScrollViewState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ScrollViewState.h; path = react/renderer/components/scrollview/ScrollViewState.h; sourceTree = \"<group>\"; };\n\t\t61074D38D23CB60AF7788D75C0DEFE73 /* fr.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = fr.lproj; path = React/I18n/strings/fr.lproj; sourceTree = \"<group>\"; };\n\t\t610A9C5BDF3BEADA074AB1F27B23F1F8 /* ScrollViewComponentDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ScrollViewComponentDescriptor.h; path = react/renderer/components/scrollview/ScrollViewComponentDescriptor.h; sourceTree = \"<group>\"; };\n\t\t611398E0E68366F20ADC93BC5D04C7B0 /* TouchEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TouchEvent.h; path = react/renderer/components/view/TouchEvent.h; sourceTree = \"<group>\"; };\n\t\t6117F9BDA4E91FB3D03F3728A914954A /* SRRunLoopThread.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRRunLoopThread.h; path = SocketRocket/Internal/RunLoop/SRRunLoopThread.h; sourceTree = \"<group>\"; };\n\t\t615E52518F5B3DD85052695A2414331A /* React-CoreModules-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-CoreModules-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t6189337A90AFF99D9CD0BDCCA472E2B3 /* FMResultSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FMResultSet.h; sourceTree = \"<group>\"; };\n\t\t6196FA4E5DE772F34B620947921AB6EF /* RCTPerformanceLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTPerformanceLogger.h; sourceTree = \"<group>\"; };\n\t\t619ABD655227A08759F91622DF2A1E18 /* RCTScheduler.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RCTScheduler.mm; path = Fabric/RCTScheduler.mm; sourceTree = \"<group>\"; };\n\t\t61A6746F63145AAB8BD430D845B4B7F6 /* LegacyViewManagerInteropViewProps.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = LegacyViewManagerInteropViewProps.cpp; path = react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropViewProps.cpp; sourceTree = \"<group>\"; };\n\t\t61A80F68AE163B384B7D7A9E76B6046C /* React-FabricImage */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-FabricImage\"; path = \"libReact-FabricImage.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t62321BBFBF2E8E88A946FF1C2655F069 /* ComponentDescriptorRegistry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ComponentDescriptorRegistry.h; path = react/renderer/componentregistry/ComponentDescriptorRegistry.h; sourceTree = \"<group>\"; };\n\t\t629C51A688E90B65323CE6CC51796EE5 /* RCTUnimplementedViewComponentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTUnimplementedViewComponentView.h; sourceTree = \"<group>\"; };\n\t\t62B08039C2AE783CAF032BCB76890355 /* RCTValueAnimatedNode.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTValueAnimatedNode.mm; sourceTree = \"<group>\"; };\n\t\t62BB6D3A4CA3201C55AA818B8A0753A0 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = \"<group>\"; };\n\t\t62DB4477408C47E85F683E8ED165D3AB /* RCTSurfaceRegistry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTSurfaceRegistry.h; path = Fabric/RCTSurfaceRegistry.h; sourceTree = \"<group>\"; };\n\t\t62F2B8A9CA2FD124CEED393804E7351A /* RCTImagePlugins.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTImagePlugins.h; path = Libraries/Image/RCTImagePlugins.h; sourceTree = \"<group>\"; };\n\t\t6316526F1CBE0396E9767EDFD35C9870 /* RCTBackedTextInputDelegateAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTBackedTextInputDelegateAdapter.h; sourceTree = \"<group>\"; };\n\t\t631FE1EE541BDAE0AFB75102923ACDCC /* RCTTurboModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTTurboModule.h; path = ReactCommon/RCTTurboModule.h; sourceTree = \"<group>\"; };\n\t\t6344807426DBEA83083B947671B91C7D /* SafeAreaViewState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SafeAreaViewState.h; path = react/renderer/components/safeareaview/SafeAreaViewState.h; sourceTree = \"<group>\"; };\n\t\t635016B0AE2DF86EDCC11EB4FBB41D5F /* WMDatabaseDriver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = WMDatabaseDriver.m; sourceTree = \"<group>\"; };\n\t\t6353D5B2828F0A532FAC374FF901DD8D /* SurfaceTelemetry.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = SurfaceTelemetry.cpp; path = react/renderer/telemetry/SurfaceTelemetry.cpp; sourceTree = \"<group>\"; };\n\t\t63646CDACE649B0945C14C4A4A8DB7A3 /* RCTRawTextViewManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTRawTextViewManager.mm; sourceTree = \"<group>\"; };\n\t\t6368583633FFD741EE844FFC0D7DEA92 /* UIView+ComponentViewProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"UIView+ComponentViewProtocol.h\"; sourceTree = \"<group>\"; };\n\t\t6387BDDE6369AEDABBA8E222A92D7DDE /* WatermelonDB.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = WatermelonDB.release.xcconfig; sourceTree = \"<group>\"; };\n\t\t63B3B00A3AAC44C23D4F7E237FE0D5C5 /* SimdCharPlatform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SimdCharPlatform.h; path = folly/detail/SimdCharPlatform.h; sourceTree = \"<group>\"; };\n\t\t63BFBBE25C646A1C221EEA23F4224C1D /* RCTScrollViewComponentView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTScrollViewComponentView.mm; sourceTree = \"<group>\"; };\n\t\t63CBEBB4485380F9D7F6FBA437DF4E46 /* TextInputComponentDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TextInputComponentDescriptor.h; path = react/renderer/components/textinput/platform/ios/react/renderer/components/iostextinput/TextInputComponentDescriptor.h; sourceTree = \"<group>\"; };\n\t\t63DB097D064EEC088A4DDB9A0F3030F8 /* SRPinningSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRPinningSecurityPolicy.m; path = SocketRocket/Internal/Security/SRPinningSecurityPolicy.m; sourceTree = \"<group>\"; };\n\t\t63F5F0571EA83996B53E596BF37008E4 /* Byte.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Byte.h; path = folly/lang/Byte.h; sourceTree = \"<group>\"; };\n\t\t641D2E46DE82FDC74711D6550B34BB4B /* react_native_expect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = react_native_expect.h; sourceTree = \"<group>\"; };\n\t\t6424FC955FE5FD23D675EE7BA5D86749 /* RCTFileRequestHandler.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTFileRequestHandler.mm; sourceTree = \"<group>\"; };\n\t\t643840DD64D54B52A2193F98673994AE /* SystraceSection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SystraceSection.h; sourceTree = \"<group>\"; };\n\t\t6456B7E29C4C1FE96FE03B584C20AFD9 /* SchedulerPriority.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SchedulerPriority.h; path = ReactCommon/SchedulerPriority.h; sourceTree = \"<group>\"; };\n\t\t645F364C7D0579436F0E777A3156F8C5 /* RCTImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTImageManager.h; path = react/renderer/imagemanager/RCTImageManager.h; sourceTree = \"<group>\"; };\n\t\t64B98B991654E98484D4253805E17035 /* ComponentDescriptorRegistry.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ComponentDescriptorRegistry.cpp; path = react/renderer/componentregistry/ComponentDescriptorRegistry.cpp; sourceTree = \"<group>\"; };\n\t\t64E2EBE04E636B603A934FE6A23B5CFA /* React-logger-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-logger-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t650E79C6CD8DFAF97DD3E4B49C99A6BB /* RCTLocalizedString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTLocalizedString.h; sourceTree = \"<group>\"; };\n\t\t65125E07440A02A058E96A2DAE8C8438 /* RCTMultipartStreamReader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTMultipartStreamReader.m; sourceTree = \"<group>\"; };\n\t\t651A43C1D1C89E7F8CBDD08B496E2160 /* SynchronousEventBeat.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = SynchronousEventBeat.cpp; path = react/renderer/scheduler/SynchronousEventBeat.cpp; sourceTree = \"<group>\"; };\n\t\t652305363535478E0661CB82413687EB /* YogaLayoutableShadowNode.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = YogaLayoutableShadowNode.cpp; path = react/renderer/components/view/YogaLayoutableShadowNode.cpp; sourceTree = \"<group>\"; };\n\t\t6536CE777152C1FAFBE3DC240DF67324 /* JSRuntimeFactory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = JSRuntimeFactory.cpp; sourceTree = \"<group>\"; };\n\t\t654197BBD530E127C270633DB539A166 /* React-rendererdebug-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-rendererdebug-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\t6551222A25B1F6FAF1575662C8BDA2AB /* RelaxedAtomic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RelaxedAtomic.h; path = folly/synchronization/RelaxedAtomic.h; sourceTree = \"<group>\"; };\n\t\t65814B713B9CD521A09E7AF980ECF508 /* pt-PT.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = \"pt-PT.lproj\"; path = \"React/I18n/strings/pt-PT.lproj\"; sourceTree = \"<group>\"; };\n\t\t65D0A19C165FA1126B1360680FE6DB12 /* Yoga */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = Yoga; path = libYoga.a; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t65D4FD7CDCA49048491D835A28092DCC /* React-rendererdebug.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-rendererdebug.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t6629455746E57DAB397BA5E289A81B37 /* Access.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Access.h; path = folly/lang/Access.h; sourceTree = \"<group>\"; };\n\t\t662EDB351806ACAF98C186A204C9A85E /* IPAddressV6.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IPAddressV6.h; path = folly/IPAddressV6.h; sourceTree = \"<group>\"; };\n\t\t6641C8CC47F08AA0D3136808CBCB811D /* RCTModalHostViewManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTModalHostViewManager.h; sourceTree = \"<group>\"; };\n\t\t666E72807891C591E025A75410CD2A26 /* React-perflogger */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-perflogger\"; path = \"libReact-perflogger.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t6678C1864A2A92768BBDC1C215172196 /* RCTImageViewManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTImageViewManager.h; path = Libraries/Image/RCTImageViewManager.h; sourceTree = \"<group>\"; };\n\t\t66808C29ABD639B3D916CDB9C1A33496 /* en-GB.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = \"en-GB.lproj\"; path = \"React/I18n/strings/en-GB.lproj\"; sourceTree = \"<group>\"; };\n\t\t66C9CDB63BA2D2FD4FCD5F884193C864 /* HazptrObj.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HazptrObj.h; path = folly/synchronization/HazptrObj.h; sourceTree = \"<group>\"; };\n\t\t66E1BAC6CC436F67ACD51B9211A14858 /* Pods-WatermelonTester-WatermelonTesterTests */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"Pods-WatermelonTester-WatermelonTesterTests\"; path = \"libPods-WatermelonTester-WatermelonTesterTests.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t671925498D3BA63FE33CF36268979415 /* RCTScrollViewComponentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTScrollViewComponentView.h; sourceTree = \"<group>\"; };\n\t\t672462DC44BB30457BE236484F3C6E87 /* Hazptr-fwd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"Hazptr-fwd.h\"; path = \"folly/synchronization/Hazptr-fwd.h\"; sourceTree = \"<group>\"; };\n\t\t673B55D5784B9139A1BB1AEE5F4945A2 /* simdjson.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = simdjson.podspec; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t67610BE7173AD3B20491234782354847 /* SynchronizedPtr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SynchronizedPtr.h; path = folly/SynchronizedPtr.h; sourceTree = \"<group>\"; };\n\t\t67659C3BADBA7BF553069160A417E2A0 /* FBReactNativeSpec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FBReactNativeSpec.h; sourceTree = \"<group>\"; };\n\t\t6771D231F4C8C5976470A369C474B32E /* React-CoreModules */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-CoreModules\"; path = \"libReact-CoreModules.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t682FB404BC26FD7A5CE7722DC28CA1D9 /* RCTImageStoreManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTImageStoreManager.mm; sourceTree = \"<group>\"; };\n\t\t686FA922FDC06D95A33307B2DFE9C50E /* Extern.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Extern.h; path = folly/lang/Extern.h; sourceTree = \"<group>\"; };\n\t\t687B26F2B573590EF9ACE0B564A2A4D8 /* dynamic-inl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"dynamic-inl.h\"; path = \"folly/dynamic-inl.h\"; sourceTree = \"<group>\"; };\n\t\t68A69845486F5D6ABF2D33019902E0E4 /* MessageConverters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MessageConverters.h; path = destroot/include/hermes/inspector/chrome/MessageConverters.h; sourceTree = \"<group>\"; };\n\t\t68EE2EFB5FD67165CD0BE5CB10F52DDD /* RCTParagraphComponentAccessibilityProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTParagraphComponentAccessibilityProvider.h; sourceTree = \"<group>\"; };\n\t\t68F513FA3A624FF445C0F9B1A615E3A2 /* RCTFontUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTFontUtils.h; sourceTree = \"<group>\"; };\n\t\t68F7A0C0E60467EF299D038EF39D12DD /* RCTScrollViewManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTScrollViewManager.h; sourceTree = \"<group>\"; };\n\t\t69063AD95BA07DF28A18417CF3A1B53C /* React-callinvoker.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-callinvoker.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t69377A3F74E51E3872AC1F550123E373 /* React-RCTActionSheet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-RCTActionSheet.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t6941C8C17A58C26823E12140D3831D05 /* React-Codegen-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-Codegen-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\t69486EEF399C8CC4D8DAE942C37D23FD /* React-RCTLinking.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-RCTLinking.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t6960AF2620CFE6726A4B805D48001166 /* fnv1a.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fnv1a.h; sourceTree = \"<group>\"; };\n\t\t6968091853F8202BC5D47745810C4DC4 /* RCTBundleAssetImageLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTBundleAssetImageLoader.h; path = Libraries/Image/RCTBundleAssetImageLoader.h; sourceTree = \"<group>\"; };\n\t\t696D9C59C6F80DB952F1142DBCBBF620 /* SimpleSimdStringUtilsImpl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SimpleSimdStringUtilsImpl.h; path = folly/detail/SimpleSimdStringUtilsImpl.h; sourceTree = \"<group>\"; };\n\t\t697110B0CEDE98EAA089612835E9E5AF /* Pods-WatermelonTester-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = \"Pods-WatermelonTester-acknowledgements.plist\"; sourceTree = \"<group>\"; };\n\t\t69B9588066B95155E4417D77327555CD /* RCTDisplayLink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTDisplayLink.h; sourceTree = \"<group>\"; };\n\t\t69E632279F0013ADFF7F6ECDE2FAF2E7 /* RCTFabricComponentsPlugins.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTFabricComponentsPlugins.mm; sourceTree = \"<group>\"; };\n\t\t6A2008DB4CB2932C0392674068ED82A6 /* EnableSharedFromThis.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EnableSharedFromThis.h; path = folly/memory/EnableSharedFromThis.h; sourceTree = \"<group>\"; };\n\t\t6A3EDF523AE8279DAD3E84193359461D /* fast-dtoa.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = \"fast-dtoa.cc\"; path = \"double-conversion/fast-dtoa.cc\"; sourceTree = \"<group>\"; };\n\t\t6A49FC170B2F422E9973F529DFC94316 /* RCTLogBoxView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTLogBoxView.h; path = React/CoreModules/RCTLogBoxView.h; sourceTree = \"<group>\"; };\n\t\t6A69BE346BCF36781D025E02DA26992E /* RCTErrorInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTErrorInfo.m; sourceTree = \"<group>\"; };\n\t\t6A732660A46D8B89E811D42131A47E43 /* MacAddress.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MacAddress.h; path = folly/MacAddress.h; sourceTree = \"<group>\"; };\n\t\t6A923BB7F15C4A2B32DDE64B8D827632 /* State.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = State.h; path = react/renderer/core/State.h; sourceTree = \"<group>\"; };\n\t\t6AAB3F0857A0C2C40FE99C2A4ED8BB69 /* RCTConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTConstants.h; sourceTree = \"<group>\"; };\n\t\t6ABE82ECFCA457CEA1122532AFFC13E1 /* YGMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YGMacros.h; path = yoga/YGMacros.h; sourceTree = \"<group>\"; };\n\t\t6ACCDC510D9A68B13F2A48E358E2BE26 /* LongLivedObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LongLivedObject.h; path = react/nativemodule/core/ReactCommon/LongLivedObject.h; sourceTree = \"<group>\"; };\n\t\t6B17F4F65DD01BD81E40664BAFB61F37 /* RCTCxxInspectorWebSocketAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTCxxInspectorWebSocketAdapter.h; sourceTree = \"<group>\"; };\n\t\t6B9509822D0A4EC87A2AA3BC68342DF3 /* SysTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SysTypes.h; path = folly/portability/SysTypes.h; sourceTree = \"<group>\"; };\n\t\t6BB02A1AFF68DB9D0E2B844F9E1E8A2F /* ComponentDescriptorProviderRegistry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ComponentDescriptorProviderRegistry.h; path = react/renderer/componentregistry/ComponentDescriptorProviderRegistry.h; sourceTree = \"<group>\"; };\n\t\t6BE67D2E5B439024289DCAE23AB7DFE4 /* NativeModulePerfLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NativeModulePerfLogger.h; path = reactperflogger/NativeModulePerfLogger.h; sourceTree = \"<group>\"; };\n\t\t6C00DC34CBF0C27CE15A57901CFE39D1 /* RCTProfile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTProfile.h; sourceTree = \"<group>\"; };\n\t\t6C8572256406ADB7551DFDDCDC585255 /* RCTSafeAreaShadowView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTSafeAreaShadowView.m; sourceTree = \"<group>\"; };\n\t\t6CA38E07EBA75420D2E3C5C4B52A3B22 /* Event.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Event.h; path = folly/portability/Event.h; sourceTree = \"<group>\"; };\n\t\t6CD702447664E9814FDF64C2521FE0A8 /* glog.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = glog.release.xcconfig; sourceTree = \"<group>\"; };\n\t\t6CEDDCFAB391081A6C3EB050DB9303AF /* ReactCdp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ReactCdp.h; sourceTree = \"<group>\"; };\n\t\t6CEE94FB9A70376F30A45C598232AD61 /* event.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = event.cpp; sourceTree = \"<group>\"; };\n\t\t6CFB318332DD9F15BA0F4E2A1CB54F41 /* React-jsi.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-jsi.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t6D220B48D2758B94E0D0CB1968C018CF /* SRIOConsumerPool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRIOConsumerPool.m; path = SocketRocket/Internal/IOConsumer/SRIOConsumerPool.m; sourceTree = \"<group>\"; };\n\t\t6D2C764374D96A2A95EB7DEDB1AD4B23 /* Atomic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Atomic.h; path = folly/portability/Atomic.h; sourceTree = \"<group>\"; };\n\t\t6D3BD65E387AF4A8FE10216CABF03885 /* FlexLine.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = FlexLine.cpp; sourceTree = \"<group>\"; };\n\t\t6D3D07411F82B089A181E94AD1F54DF7 /* WebSocketInterfaces.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = WebSocketInterfaces.h; sourceTree = \"<group>\"; };\n\t\t6D624E232F1781DF596D0A786D21944C /* NSDataBigString.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = NSDataBigString.mm; sourceTree = \"<group>\"; };\n\t\t6D66D180322220310B33E06C2A6650D3 /* RuntimeSchedulerCallInvoker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RuntimeSchedulerCallInvoker.h; sourceTree = \"<group>\"; };\n\t\t6D7520FE4D76AC547890B7D6B4C69894 /* TextComponentDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TextComponentDescriptor.h; path = react/renderer/components/text/TextComponentDescriptor.h; sourceTree = \"<group>\"; };\n\t\t6D84B0A7F1A70E6E9ABEEEB14CB6C80C /* RCTSurfaceSizeMeasureMode.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTSurfaceSizeMeasureMode.mm; sourceTree = \"<group>\"; };\n\t\t6D899FAEC06F009C28975CC142A41EC9 /* React-RuntimeCore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-RuntimeCore.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t6DB0EF48E6F6F59EEEBA2E0AB6C7E410 /* JSINativeModules.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSINativeModules.h; path = jsireact/JSINativeModules.h; sourceTree = \"<group>\"; };\n\t\t6DB23B7557FA39253FE65A599E922ED6 /* Cast.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Cast.h; path = folly/lang/Cast.h; sourceTree = \"<group>\"; };\n\t\t6DCF6A50893A882EA7E8F44D10AD971D /* ConcurrentSkipList-inl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"ConcurrentSkipList-inl.h\"; path = \"folly/ConcurrentSkipList-inl.h\"; sourceTree = \"<group>\"; };\n\t\t6DF638889DD6D88E1694A065C0A27BC6 /* React-rendererdebug.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-rendererdebug.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t6E3D2F20B2620B37412790BDD9F15C17 /* SurfaceRegistryBinding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SurfaceRegistryBinding.h; path = react/renderer/uimanager/SurfaceRegistryBinding.h; sourceTree = \"<group>\"; };\n\t\t6E4274F08E4BBF0B6491769157BBB91F /* ShadowNodeFamily.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ShadowNodeFamily.h; path = react/renderer/core/ShadowNodeFamily.h; sourceTree = \"<group>\"; };\n\t\t6EADDB0E9C832143081D058CA7259028 /* RCTComponentViewFactory.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTComponentViewFactory.mm; sourceTree = \"<group>\"; };\n\t\t6EBA55B04BADD1F4ABB709051EF06C89 /* AssertFatal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = AssertFatal.h; sourceTree = \"<group>\"; };\n\t\t6ECE543138E064055C9EBCDC09788205 /* UIView+ComponentViewProtocol.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = \"UIView+ComponentViewProtocol.mm\"; sourceTree = \"<group>\"; };\n\t\t6ED2C07E6AE77BBD9A6856E523EF6A06 /* React-debug */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-debug\"; path = \"libReact-debug.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t6ED440A6B8C1D4FBA39CD54ECE8D51F3 /* RCTComponentViewDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTComponentViewDescriptor.h; sourceTree = \"<group>\"; };\n\t\t6EEEE05EBCE258D71886371521451AF3 /* RCTCxxInspectorPackagerConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTCxxInspectorPackagerConnection.h; sourceTree = \"<group>\"; };\n\t\t6F004C69796236836B1136C0778862F1 /* React-jsi.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = \"React-jsi.modulemap\"; sourceTree = \"<group>\"; };\n\t\t6F03806CF8FEA9AE1097FB463956AAD4 /* React-nativeconfig.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-nativeconfig.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t6F2BCB43F2D90CA90AFD57677AF6013E /* ConstexprMath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ConstexprMath.h; path = folly/ConstexprMath.h; sourceTree = \"<group>\"; };\n\t\t6F3CE6C5B501D1E1D2852C705DEDDBC7 /* SRSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRSecurityPolicy.h; path = SocketRocket/SRSecurityPolicy.h; sourceTree = \"<group>\"; };\n\t\t6F72B3F616F35DD1A397AD34A9471C80 /* zh-Hant-HK.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = \"zh-Hant-HK.lproj\"; path = \"React/I18n/strings/zh-Hant-HK.lproj\"; sourceTree = \"<group>\"; };\n\t\t6F8D2287EF58ADD156913AF3C0FA5266 /* primitives.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = primitives.h; path = react/renderer/imagemanager/primitives.h; sourceTree = \"<group>\"; };\n\t\t6F9A7D467E30F1383A11DE8EA731A421 /* Overload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Overload.h; path = folly/Overload.h; sourceTree = \"<group>\"; };\n\t\t6F9A9F41C8712A5EA89926F9E34BB317 /* FMDatabaseAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FMDatabaseAdditions.h; sourceTree = \"<group>\"; };\n\t\t6FA175D69859A3FE955C27E8F8107960 /* RCTDebuggingOverlayComponentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTDebuggingOverlayComponentView.h; sourceTree = \"<group>\"; };\n\t\t6FA659BE9F28613C4D7F98DAC5FD1C4B /* TransactionTelemetry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TransactionTelemetry.h; path = react/renderer/telemetry/TransactionTelemetry.h; sourceTree = \"<group>\"; };\n\t\t6FBDF0EE578C484F397C21E43F49F7E7 /* TransactionTelemetry.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = TransactionTelemetry.cpp; path = react/renderer/telemetry/TransactionTelemetry.cpp; sourceTree = \"<group>\"; };\n\t\t6FC0DBFC356D08CBF5C195717E58618A /* React-Fabric-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-Fabric-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t6FC40232E2C55EB617E3DFB087BA95C0 /* JSIDynamic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSIDynamic.h; path = jsi/JSIDynamic.h; sourceTree = \"<group>\"; };\n\t\t6FD6F1B6DC37EB6391F042FC9AC7E69F /* RCTAppSetupUtils.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTAppSetupUtils.mm; sourceTree = \"<group>\"; };\n\t\t6FFB7B2992BB53405E6B771A5BA1E97D /* DoubleConversion */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = DoubleConversion; path = libDoubleConversion.a; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t701DA5EF2C35D3F8011D186617366218 /* MallctlHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MallctlHelper.h; path = folly/memory/MallctlHelper.h; sourceTree = \"<group>\"; };\n\t\t704A79E5BDF7B5ECE6197D355854F3A9 /* RCTParagraphComponentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTParagraphComponentView.h; sourceTree = \"<group>\"; };\n\t\t704C76032CCE295710F90FEE18E4B95F /* InspectorFlags.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = InspectorFlags.h; sourceTree = \"<group>\"; };\n\t\t70D50FBA71B5522FC8324C5638AAABC4 /* es.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = es.lproj; path = React/I18n/strings/es.lproj; sourceTree = \"<group>\"; };\n\t\t70E1E31923E3DCF47FC3FD8EA049C063 /* React-RuntimeApple.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-RuntimeApple.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t70EAB919380BCD43218C8BA42AA15E04 /* RCTI18nUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTI18nUtil.h; sourceTree = \"<group>\"; };\n\t\t70FD25025D88D2C467D14135D309D155 /* RCTSinglelineTextInputViewManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSinglelineTextInputViewManager.h; sourceTree = \"<group>\"; };\n\t\t7125A220ACBD1ACDAEC0A33004BF401B /* React-jserrorhandler.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-jserrorhandler.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t713D582F6B367593E27B9841A06592D1 /* propsConversions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = propsConversions.h; path = react/renderer/core/propsConversions.h; sourceTree = \"<group>\"; };\n\t\t7157DE4FF39A888005019A6919C6304D /* boost.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = boost.release.xcconfig; sourceTree = \"<group>\"; };\n\t\t717D5148DA07668AC04A61F52407FF5A /* RCTObjectAnimatedNode.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTObjectAnimatedNode.mm; sourceTree = \"<group>\"; };\n\t\t71871CA5216D720E9BCA31F7ED7CC373 /* RCTTextInputNativeCommands.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTTextInputNativeCommands.h; sourceTree = \"<group>\"; };\n\t\t718D4D78E0BAE0CC2A7AE58A6FBEA36A /* SafeAssert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SafeAssert.h; path = folly/lang/SafeAssert.h; sourceTree = \"<group>\"; };\n\t\t71B4D481359E1DC4C88FF4956C3F95BC /* TextInputEventEmitter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = TextInputEventEmitter.cpp; path = react/renderer/components/textinput/platform/ios/react/renderer/components/iostextinput/TextInputEventEmitter.cpp; sourceTree = \"<group>\"; };\n\t\t7215C1FD70511C10EB945E8681577C16 /* RCTSurfaceStage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSurfaceStage.h; sourceTree = \"<group>\"; };\n\t\t72188071CCFD3B99269572936DAC43DD /* Math.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Math.h; path = folly/Math.h; sourceTree = \"<group>\"; };\n\t\t7219469EB101610CDE06F56EAFF2F90D /* RCTComponentViewClassDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTComponentViewClassDescriptor.h; sourceTree = \"<group>\"; };\n\t\t723B1846FB58ABF6C06939E1199945A2 /* RCTComponentViewRegistry.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTComponentViewRegistry.mm; sourceTree = \"<group>\"; };\n\t\t723CB5670ECFFB16F7B8F339EE9DB637 /* NativeToJsBridge.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = NativeToJsBridge.cpp; sourceTree = \"<group>\"; };\n\t\t7291DE7A0A52B6E6CFC50DAF5E4DE540 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = \"<group>\"; };\n\t\t729855E0C41B82077DDA2290F0B0BCBD /* RCT-Folly-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"RCT-Folly-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t7299BD666C1DD5C0DB7343D26EB7DFDA /* FloatOptional.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FloatOptional.h; sourceTree = \"<group>\"; };\n\t\t72F4E61BD474BE602AFFC71C43FD918B /* sk.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = sk.lproj; path = React/I18n/strings/sk.lproj; sourceTree = \"<group>\"; };\n\t\t7301D9F85906E2D5E3E899138ED1462A /* RCTBorderDrawing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTBorderDrawing.h; sourceTree = \"<group>\"; };\n\t\t73058D524065BD36521A8D2FAA24552A /* utils.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = utils.cpp; path = react/renderer/animations/utils.cpp; sourceTree = \"<group>\"; };\n\t\t732337B1201688C67D6881C87C976B08 /* ParagraphAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParagraphAttributes.h; path = react/renderer/attributedstring/ParagraphAttributes.h; sourceTree = \"<group>\"; };\n\t\t732688D92C1058B4D3B68B3EF5CB178C /* dynamic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = dynamic.h; path = folly/dynamic.h; sourceTree = \"<group>\"; };\n\t\t73301DA76E70E83388C9A33BCF56CEE5 /* Yoga-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"Yoga-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t7338ABD9F7418479DEDE3C5284F4FF6D /* CxxNativeModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CxxNativeModule.h; sourceTree = \"<group>\"; };\n\t\t734BE1C2E4FE1B7AA7823A95F6F55FB4 /* React-runtimescheduler.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-runtimescheduler.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t735061C18CFE3076A4C204A7CCE1D301 /* RCTI18nManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTI18nManager.mm; sourceTree = \"<group>\"; };\n\t\t7350D90D235F0E829948F766094A036B /* FollyMemcpy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FollyMemcpy.h; path = folly/FollyMemcpy.h; sourceTree = \"<group>\"; };\n\t\t735E5FCEACBC787C7FF33D2B0A5F3CAD /* RCTErrorInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTErrorInfo.h; sourceTree = \"<group>\"; };\n\t\t739F5A9F956FCC84E8E36F6798EA859B /* React-Codegen-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-Codegen-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t73AB6FD4B3DF99EC222564D6743427C3 /* ManagedObjectWrapper.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = ManagedObjectWrapper.mm; sourceTree = \"<group>\"; };\n\t\t73B3A96DAB49C42270A59966B121F1A7 /* Pods-WatermelonTester.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"Pods-WatermelonTester.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t73F9F5B50A8454106AEB1EAA5892325D /* SRWebSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRWebSocket.h; path = SocketRocket/SRWebSocket.h; sourceTree = \"<group>\"; };\n\t\t7433BC11862172106E2F5C35B6657339 /* Invoke.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Invoke.h; path = folly/functional/Invoke.h; sourceTree = \"<group>\"; };\n\t\t74634074E7E5AADD54F61ACB94B63759 /* RCTDeprecation-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"RCTDeprecation-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t74C292E04485F2E866A8C5507A5B0F9B /* RCTRuntimeExecutorModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTRuntimeExecutorModule.h; sourceTree = \"<group>\"; };\n\t\t74C2C2A0E994E59EC1C51CEF553541EF /* UTF8String.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UTF8String.h; path = folly/UTF8String.h; sourceTree = \"<group>\"; };\n\t\t74F0A4078D35270995DBAA54BA83A8B7 /* RCTHost.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RCTHost.mm; path = ReactCommon/RCTHost.mm; sourceTree = \"<group>\"; };\n\t\t74F2B9390AF33F8E9969AE22B88C8280 /* FloatComparison.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FloatComparison.h; sourceTree = \"<group>\"; };\n\t\t75003887015004482CFDA84D733744C1 /* ro.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = ro.lproj; path = React/I18n/strings/ro.lproj; sourceTree = \"<group>\"; };\n\t\t750B7BB6414518C2A827B8877B15A353 /* Task.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = Task.cpp; sourceTree = \"<group>\"; };\n\t\t751490A9CC81CC3D1FD6DE9D1A2309B0 /* React-debug-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-debug-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t75527CABA73184F431A0FFA3918A6D5B /* RuntimeAgent.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = RuntimeAgent.cpp; sourceTree = \"<group>\"; };\n\t\t75666A7E9DF4B81A7D9C5A782A0BCE03 /* Point.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Point.h; sourceTree = \"<group>\"; };\n\t\t7568E7B5AE849AB3EBC22558FB87A3A0 /* React-jsitracing.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-jsitracing.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t75A1EC0889B2FF4178C4B15A8C8EAE88 /* ranges.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ranges.h; path = include/fmt/ranges.h; sourceTree = \"<group>\"; };\n\t\t75AFE3EB6154E61D88A4F383A81B33F0 /* RCTTextSelection.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTTextSelection.mm; sourceTree = \"<group>\"; };\n\t\t75BD04A47CB6E45D70FC6CC41F55E9D0 /* React-ImageManager-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-ImageManager-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\t75F4E00A45E47775648B3C5AE641D5F7 /* TurboModuleUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TurboModuleUtils.h; path = react/nativemodule/core/ReactCommon/TurboModuleUtils.h; sourceTree = \"<group>\"; };\n\t\t75FB185880821A181DA77737EA85AF83 /* ReactNativeFeatureFlags.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ReactNativeFeatureFlags.h; sourceTree = \"<group>\"; };\n\t\t761CE3FB688FBACCB93A3B8CE521B969 /* RCTImageEditingManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTImageEditingManager.mm; sourceTree = \"<group>\"; };\n\t\t762588AD3F68541107FA36AF37D053F9 /* RCTSurface.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSurface.h; sourceTree = \"<group>\"; };\n\t\t766F8957B06DFCFCD48D2426262EFF74 /* InstanceAgent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = InstanceAgent.h; sourceTree = \"<group>\"; };\n\t\t7672883E0F8241100C66C2D877FCFDC7 /* RCTImageStoreManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTImageStoreManager.h; path = Libraries/Image/RCTImageStoreManager.h; sourceTree = \"<group>\"; };\n\t\t769BAEE9C92AEEA6A5C4C98AE6FFBD88 /* SimdAnyOf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SimdAnyOf.h; path = folly/detail/SimdAnyOf.h; sourceTree = \"<group>\"; };\n\t\t76A1CBFC82E23FC317730FE377F95CCB /* React-RuntimeHermes-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-RuntimeHermes-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t76B9170886E7F923EC5E35A34EEF7A2E /* BridgeNativeModulePerfLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BridgeNativeModulePerfLogger.h; path = reactperflogger/BridgeNativeModulePerfLogger.h; sourceTree = \"<group>\"; };\n\t\t76E0CAC8E63CBC0B9C2BA14BB8864475 /* React-RCTSettings-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-RCTSettings-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t7706A182348778EF9482CF0A0A02DC41 /* signalhandler.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = signalhandler.cc; path = src/signalhandler.cc; sourceTree = \"<group>\"; };\n\t\t774B7D8E1CE74C04CEDEC68A34DAC344 /* Array.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Array.h; path = react/bridging/Array.h; sourceTree = \"<group>\"; };\n\t\t7761A07D372FD8689FEED3327D1DA8FD /* ComponentDescriptorProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ComponentDescriptorProvider.h; path = react/renderer/componentregistry/ComponentDescriptorProvider.h; sourceTree = \"<group>\"; };\n\t\t77660F5EBDC0FC5CF88F31395F69A2D6 /* BridgelessNativeMethodCallInvoker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BridgelessNativeMethodCallInvoker.h; sourceTree = \"<group>\"; };\n\t\t776825034C674A4EB458170D6BBB3139 /* React-RuntimeCore.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-RuntimeCore.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t776D1F938E2ED7503BB26ACB324E4DF9 /* State.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = State.cpp; path = react/renderer/core/State.cpp; sourceTree = \"<group>\"; };\n\t\t777152D60FDE62FB7858028E0F494386 /* DynamicPropsUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DynamicPropsUtilities.h; path = react/renderer/core/DynamicPropsUtilities.h; sourceTree = \"<group>\"; };\n\t\t7777F6D0013ADB2C7FBD5FE217F042EE /* ieee.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ieee.h; path = \"double-conversion/ieee.h\"; sourceTree = \"<group>\"; };\n\t\t7780098F7787B2514F2C008CC3E13B73 /* RCTTypeSafety-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"RCTTypeSafety-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\t77A1CFA157156B29C57AF9F7AACA682D /* Memory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Memory.h; path = folly/Memory.h; sourceTree = \"<group>\"; };\n\t\t77B6947FB86A59093DFA118F372E24B2 /* React-hermes-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-hermes-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t77B99168E6021298797F07B5B41C5A77 /* Try-inl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"Try-inl.h\"; path = \"folly/Try-inl.h\"; sourceTree = \"<group>\"; };\n\t\t77BAB7AB8A4B785443BC2813FC1B32C6 /* React-logger-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-logger-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t77C83209E6AE78202FC38E3CDF6E4666 /* MountingOverrideDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MountingOverrideDelegate.h; path = react/renderer/mounting/MountingOverrideDelegate.h; sourceTree = \"<group>\"; };\n\t\t77CE993F9446B711B336A9AF061A5504 /* fmt.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = fmt.release.xcconfig; sourceTree = \"<group>\"; };\n\t\t77F3BA61BC36947AE25324E0B86A12E5 /* debugStringConvertibleUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = debugStringConvertibleUtils.h; sourceTree = \"<group>\"; };\n\t\t77FD8EC2BDFA965A8B3238C611476897 /* RCTLegacyViewManagerInteropCoordinator.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RCTLegacyViewManagerInteropCoordinator.mm; path = react/renderer/components/legacyviewmanagerinterop/RCTLegacyViewManagerInteropCoordinator.mm; sourceTree = \"<group>\"; };\n\t\t780886372A0B2B7809DF714CB50EBA56 /* React-cxxreact.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-cxxreact.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t7841C02BBC8782E7B8D3EF2815A6026C /* RawEvent.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = RawEvent.cpp; path = react/renderer/core/RawEvent.cpp; sourceTree = \"<group>\"; };\n\t\t788308AAA58E926CC60655199F7DA6BC /* dynamic.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = dynamic.cpp; path = folly/dynamic.cpp; sourceTree = \"<group>\"; };\n\t\t789B5746A1B28065E10E29579DC6FE8F /* IPAddressException.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IPAddressException.h; path = folly/IPAddressException.h; sourceTree = \"<group>\"; };\n\t\t78B7DDD1D6B4E8239B45FF43C990D36E /* RCTMessageThread.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTMessageThread.mm; sourceTree = \"<group>\"; };\n\t\t78BE41CF03440AB09080B75960AF8455 /* RCTWebSocketModule.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTWebSocketModule.mm; sourceTree = \"<group>\"; };\n\t\t78D72FC8CF42B31C8EDAD6F8657F610F /* React-RCTAnimation.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-RCTAnimation.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t792014C5B5CC53C6A4E7C3EAFA69D6ED /* Array.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Array.h; path = folly/container/Array.h; sourceTree = \"<group>\"; };\n\t\t795A0388C8652FBA4A957C30BE9222F8 /* LogLevel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LogLevel.h; sourceTree = \"<group>\"; };\n\t\t7962560BAE3A465763EDEF2274FEB730 /* JsErrorHandler.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = JsErrorHandler.cpp; sourceTree = \"<group>\"; };\n\t\t797702F6E9E25223D401BD7E13885F76 /* SharedFunction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SharedFunction.h; sourceTree = \"<group>\"; };\n\t\t79935ABC77CDB209D63CDB2A5C8B0F40 /* BenchmarkUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BenchmarkUtil.h; path = folly/BenchmarkUtil.h; sourceTree = \"<group>\"; };\n\t\t79BAE705D4C5DDF1F3222FC86D3DC110 /* Database.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = Database.cpp; sourceTree = \"<group>\"; };\n\t\t79BC7FAFCA2807334B0B7E151993C6FC /* UIManagerBinding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UIManagerBinding.h; path = react/renderer/uimanager/UIManagerBinding.h; sourceTree = \"<group>\"; };\n\t\t79CC003D3F5205C371DC8BCBE46FD022 /* SysUio.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SysUio.h; path = folly/portability/SysUio.h; sourceTree = \"<group>\"; };\n\t\t79E82AE02BC6B9CCABF7C62D230F794F /* Database-sqlite.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = \"Database-sqlite.cpp\"; sourceTree = \"<group>\"; };\n\t\t79F230CA43B3923BA705770F29C504C6 /* glog-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"glog-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t79F8EC97641C2D3B51B87DB668615513 /* CoreModulesPlugins.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = CoreModulesPlugins.mm; sourceTree = \"<group>\"; };\n\t\t79FC786FA7244B7B38C8D7E7D63FD675 /* RCTJSIExecutorRuntimeInstaller.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTJSIExecutorRuntimeInstaller.mm; sourceTree = \"<group>\"; };\n\t\t7A230B7C6D6ECDDCB14F95021BE6FDEB /* symbolize.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = symbolize.cc; path = src/symbolize.cc; sourceTree = \"<group>\"; };\n\t\t7A3BCF7F218979C84533F1F242327D9F /* BitIterator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BitIterator.h; path = folly/container/BitIterator.h; sourceTree = \"<group>\"; };\n\t\t7A4636B3DC5A729E8F40B4860ACEC4B4 /* EventQueueProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EventQueueProcessor.h; path = react/renderer/core/EventQueueProcessor.h; sourceTree = \"<group>\"; };\n\t\t7A4D45A1805126ED1CD25C84B4FFE9C2 /* SRPinningSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRPinningSecurityPolicy.h; path = SocketRocket/Internal/Security/SRPinningSecurityPolicy.h; sourceTree = \"<group>\"; };\n\t\t7A59848A45BE0F5FCEF4561B500527CB /* React-NativeModulesApple-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-NativeModulesApple-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\t7A7404AB8D8964BFE0531C56682163D1 /* MicroSpinLock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MicroSpinLock.h; path = folly/synchronization/MicroSpinLock.h; sourceTree = \"<group>\"; };\n\t\t7A7A0F200C7B88BDC44875E323134B8D /* ScrollViewShadowNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ScrollViewShadowNode.h; path = react/renderer/components/scrollview/ScrollViewShadowNode.h; sourceTree = \"<group>\"; };\n\t\t7AB42AC0EB19257BDB4CB23DD77110E6 /* base64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = base64.h; path = folly/base64.h; sourceTree = \"<group>\"; };\n\t\t7AB9D50DBC3A7605124A8AC121341CFF /* RCTModuleMethod.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTModuleMethod.h; sourceTree = \"<group>\"; };\n\t\t7ACDCCE812E169B5C2EE32A4A130D907 /* RCTImageResponseObserverProxy.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RCTImageResponseObserverProxy.mm; path = Fabric/RCTImageResponseObserverProxy.mm; sourceTree = \"<group>\"; };\n\t\t7AE90B08B12F40EABE9BDF5B888E8832 /* ShadowNodeTraits.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ShadowNodeTraits.cpp; path = react/renderer/core/ShadowNodeTraits.cpp; sourceTree = \"<group>\"; };\n\t\t7AEAEA20EE165C0C9C90A2B2BDD3C21A /* ShadowViewMutation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ShadowViewMutation.h; path = react/renderer/mounting/ShadowViewMutation.h; sourceTree = \"<group>\"; };\n\t\t7B0A8E8F61759E910B9953C7FF640925 /* Bits.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bits.h; path = folly/lang/Bits.h; sourceTree = \"<group>\"; };\n\t\t7B1A1BCA9AF04E480CF3A0F15DC4277A /* RCTActivityIndicatorViewComponentView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTActivityIndicatorViewComponentView.mm; sourceTree = \"<group>\"; };\n\t\t7B292553D4F61C21C058393BBC5C292F /* SRHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRHash.m; path = SocketRocket/Internal/Utilities/SRHash.m; sourceTree = \"<group>\"; };\n\t\t7B300B21C62B9776F40F71E7688DA14C /* ManagedObjectWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ManagedObjectWrapper.h; sourceTree = \"<group>\"; };\n\t\t7B514510C45046BE196402FD4E82FB33 /* SRIOConsumer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRIOConsumer.m; path = SocketRocket/Internal/IOConsumer/SRIOConsumer.m; sourceTree = \"<group>\"; };\n\t\t7B51B43D6B45FB260FFA0B15BFED390E /* React-jsinspector.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-jsinspector.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t7B5B3F15E7911D3E6C9DE70A968B0F80 /* F14Table.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = F14Table.cpp; path = folly/container/detail/F14Table.cpp; sourceTree = \"<group>\"; };\n\t\t7B65B6162E9749D1E3F3D1232D886392 /* RCTSafeAreaViewLocalData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTSafeAreaViewLocalData.m; sourceTree = \"<group>\"; };\n\t\t7B6F9E5C10CE8D8B1931589BD93D12D7 /* RAMBundleRegistry.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = RAMBundleRegistry.cpp; sourceTree = \"<group>\"; };\n\t\t7B71C59B43EE3845C93BBDBA007C75CA /* RCTJSStackFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTJSStackFrame.m; sourceTree = \"<group>\"; };\n\t\t7B7333F82E7D58CECA09AB6ABF206727 /* YGNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YGNode.h; path = yoga/YGNode.h; sourceTree = \"<group>\"; };\n\t\t7B799169876F75C6B694791908FAA1EB /* Singleton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Singleton.h; path = folly/Singleton.h; sourceTree = \"<group>\"; };\n\t\t7B80D5D0E1943CE661F2F4C200BA7BE9 /* RCTMountingManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTMountingManager.h; sourceTree = \"<group>\"; };\n\t\t7B87E0987F27CB7E57A4A864D574EC7C /* Node.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = Node.cpp; sourceTree = \"<group>\"; };\n\t\t7BB5D02B327460A7F87EA512F38B2123 /* RCTObjcExecutor.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTObjcExecutor.mm; sourceTree = \"<group>\"; };\n\t\t7BBF469B26873251B537670801999C9B /* BatchedEventQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BatchedEventQueue.h; path = react/renderer/core/BatchedEventQueue.h; sourceTree = \"<group>\"; };\n\t\t7BE42F9FEE2CC91F9B2D0CD06DCFA3B4 /* RCTDevSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTDevSettings.h; path = React/CoreModules/RCTDevSettings.h; sourceTree = \"<group>\"; };\n\t\t7C12044FAE55F8C0F0F5BC236FA00BFC /* Bridging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bridging.h; path = react/bridging/Bridging.h; sourceTree = \"<group>\"; };\n\t\t7C322EC9FEFA80208EF7FC20F8E76803 /* Align.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Align.h; sourceTree = \"<group>\"; };\n\t\t7C461F175EB336FD8750A4B7A86919F1 /* TextInputProps.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = TextInputProps.cpp; path = react/renderer/components/textinput/platform/ios/react/renderer/components/iostextinput/TextInputProps.cpp; sourceTree = \"<group>\"; };\n\t\t7C5BE15D5F354DA98A5ADA415D1FDB03 /* YGConfig.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = YGConfig.cpp; path = yoga/YGConfig.cpp; sourceTree = \"<group>\"; };\n\t\t7C910125B6ECED6233B803D062331A90 /* React-RCTNetwork.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-RCTNetwork.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t7C95BBE34A199CF72BBFBFC172AC6E71 /* HostPlatformViewEventEmitter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = HostPlatformViewEventEmitter.h; sourceTree = \"<group>\"; };\n\t\t7CA5F6EB56C2B8E096CBC6A7B9532E76 /* Registration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Registration.h; sourceTree = \"<group>\"; };\n\t\t7CC64A671E937AD1149E00BF8AAC2F08 /* RCTDefaultCxxLogFunction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTDefaultCxxLogFunction.h; sourceTree = \"<group>\"; };\n\t\t7CE12A7D304717866DC9F308C7951109 /* Props.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Props.h; path = react/renderer/components/rncore/Props.h; sourceTree = \"<group>\"; };\n\t\t7CF233AD4BB7085F76873B35632274C6 /* React-RCTText-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-RCTText-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t7D0C7E3FC36DCB52EB03EDF13AE747FE /* TextShadowNode.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = TextShadowNode.cpp; path = react/renderer/components/text/TextShadowNode.cpp; sourceTree = \"<group>\"; };\n\t\t7D4B16C5729900BD0CF675EE898C8327 /* Synchronized.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Synchronized.h; path = folly/Synchronized.h; sourceTree = \"<group>\"; };\n\t\t7D709C81D0C07E31A08F46AA3AAB09FD /* ReactNativeConfig.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ReactNativeConfig.cpp; path = react/config/ReactNativeConfig.cpp; sourceTree = \"<group>\"; };\n\t\t7DB6E20FB18E511B8C98C3656B364612 /* RCTDevSettings.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTDevSettings.mm; sourceTree = \"<group>\"; };\n\t\t7DF60B1D14EECCD8446FC1A15E8766B4 /* RCTReloadCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTReloadCommand.h; sourceTree = \"<group>\"; };\n\t\t7E0FE53778FF8DB18F69972C1000366F /* React-jsinspector-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-jsinspector-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t7E424FA9074DD171A4AE55BE52EFAFAB /* MallocImpl.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = MallocImpl.cpp; path = folly/memory/detail/MallocImpl.cpp; sourceTree = \"<group>\"; };\n\t\t7E589066D508A38B86B7F0F4BC726DB0 /* RCTBridgeModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTBridgeModule.h; sourceTree = \"<group>\"; };\n\t\t7E7B0E688C2DE7016DCA160FE81176F4 /* React-cxxreact-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-cxxreact-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t7E8209264577462872BC1AE7772C476E /* PackedSyncPtr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PackedSyncPtr.h; path = folly/PackedSyncPtr.h; sourceTree = \"<group>\"; };\n\t\t7EA35A760668D0586965F521A3B21B4B /* UIManagerDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UIManagerDelegate.h; path = react/renderer/uimanager/UIManagerDelegate.h; sourceTree = \"<group>\"; };\n\t\t7EAB5C076EC5BA3D8E0D48CBF9F38DC1 /* TcpInfoDispatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TcpInfoDispatcher.h; path = folly/net/TcpInfoDispatcher.h; sourceTree = \"<group>\"; };\n\t\t7ED3FB4188B6B018D64337B5E28DF81D /* EventTarget.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EventTarget.h; path = react/renderer/core/EventTarget.h; sourceTree = \"<group>\"; };\n\t\t7F08F17DB62670269DC70CC1F4817168 /* CachedMeasurement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CachedMeasurement.h; sourceTree = \"<group>\"; };\n\t\t7F1A707D6F8DE921DFA42211D2036148 /* Color.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Color.h; sourceTree = \"<group>\"; };\n\t\t7F7639A56DEF6356718C6D5EC6AF3F7F /* RCTImageURLLoaderWithAttribution.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTImageURLLoaderWithAttribution.mm; sourceTree = \"<group>\"; };\n\t\t7F7D564B2A15203C1BFCF6B38C70A0CF /* RCTTypeSafety.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RCTTypeSafety.modulemap; sourceTree = \"<group>\"; };\n\t\t7FF0FE18123413DA783550212321BE91 /* DatabasePlatformIOS.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = DatabasePlatformIOS.mm; sourceTree = \"<group>\"; };\n\t\t7FFA741A8EC26DD612783B14F5682ED2 /* not_null.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = not_null.h; path = folly/memory/not_null.h; sourceTree = \"<group>\"; };\n\t\t7FFF51245D8A86EAC0CA600E287ED6AD /* ConcurrentLazy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ConcurrentLazy.h; path = folly/ConcurrentLazy.h; sourceTree = \"<group>\"; };\n\t\t802121F5B756ACBFDD6D08C36246DADD /* React-RCTLinking */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-RCTLinking\"; path = \"libReact-RCTLinking.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t804154B57731765E15D5EEACEF594E8F /* ParagraphEventEmitter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParagraphEventEmitter.h; path = react/renderer/components/text/ParagraphEventEmitter.h; sourceTree = \"<group>\"; };\n\t\t808C3DF73EDCFD47A21FDB81992E3ADB /* format-inl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"format-inl.h\"; path = \"include/fmt/format-inl.h\"; sourceTree = \"<group>\"; };\n\t\t80C0E79E7C53BAA868A44B3B53AEDC66 /* JSIExecutor.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = JSIExecutor.cpp; path = jsireact/JSIExecutor.cpp; sourceTree = \"<group>\"; };\n\t\t80C9F8ECC69EABDD6B34127E2C1EBAB4 /* States.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = States.h; path = react/renderer/components/rncore/States.h; sourceTree = \"<group>\"; };\n\t\t80D64042B21EA7CEEB535422CBABD3F1 /* ModuleRegistry.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = ModuleRegistry.cpp; sourceTree = \"<group>\"; };\n\t\t80F9DAC31E738BCDB2481B8D0EFF7D4D /* pt.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = pt.lproj; path = React/I18n/strings/pt.lproj; sourceTree = \"<group>\"; };\n\t\t81460E74A5068268C47A7DAC94730797 /* React-jsi-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-jsi-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t816B94D26D0966A297B8BFCB1F24039B /* SharedProxyCxxModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SharedProxyCxxModule.h; sourceTree = \"<group>\"; };\n\t\t8176863C104CD771DDB717C9059C2ADE /* NSRunLoop+SRWebSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"NSRunLoop+SRWebSocket.m\"; path = \"SocketRocket/NSRunLoop+SRWebSocket.m\"; sourceTree = \"<group>\"; };\n\t\t819B22FC019823E75AE6A15AF791911F /* RCTConvertHelpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTConvertHelpers.h; sourceTree = \"<group>\"; };\n\t\t8203B91D615D3D818C75D20CC7EECACE /* RCTModalManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTModalManager.h; sourceTree = \"<group>\"; };\n\t\t8229FB82BEAE5318CC636C3963FFF6F8 /* ImageResponseObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ImageResponseObserver.h; path = react/renderer/imagemanager/ImageResponseObserver.h; sourceTree = \"<group>\"; };\n\t\t8231A4F6131F749AEA92BF670465B6DD /* ExecutionContext.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = ExecutionContext.cpp; sourceTree = \"<group>\"; };\n\t\t824AF1EEC669FDA2DBC78CB48CBC86B4 /* DispatchMessageQueueThread.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = DispatchMessageQueueThread.h; sourceTree = \"<group>\"; };\n\t\t82552A36AF98B4CFE12CF35D745DFEBA /* RCTConvertHelpers.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTConvertHelpers.mm; sourceTree = \"<group>\"; };\n\t\t825AFF4407B94619036B3195D86313D2 /* da.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = da.lproj; path = React/I18n/strings/da.lproj; sourceTree = \"<group>\"; };\n\t\t82667B9482B97C6E5629E4F6381B1965 /* RCTKeyCommands.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTKeyCommands.m; sourceTree = \"<group>\"; };\n\t\t82BDE129A63F08D401D705753189D8B0 /* ThreadId.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ThreadId.cpp; path = folly/system/ThreadId.cpp; sourceTree = \"<group>\"; };\n\t\t82C0C34C914DB0E6E56880987BB5F0AC /* FlexLine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FlexLine.h; sourceTree = \"<group>\"; };\n\t\t830AFFE41A7F0C0AA095F4DB57B6BD4D /* RCTComponentEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTComponentEvent.h; sourceTree = \"<group>\"; };\n\t\t8325F6D78EEBC85AE983E28DE38AD770 /* Indestructible.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Indestructible.h; path = folly/Indestructible.h; sourceTree = \"<group>\"; };\n\t\t832DCF641540319B774328DFB00B9620 /* IPAddress.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IPAddress.h; path = folly/IPAddress.h; sourceTree = \"<group>\"; };\n\t\t8332BB1363344A31DAAB30F13244873B /* SafeAreaViewShadowNode.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = SafeAreaViewShadowNode.cpp; path = react/renderer/components/safeareaview/SafeAreaViewShadowNode.cpp; sourceTree = \"<group>\"; };\n\t\t8399C3FD21BCD992B7C6EF8E65D7C561 /* JSONValueInterfaces.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSONValueInterfaces.h; path = destroot/include/hermes/inspector/chrome/JSONValueInterfaces.h; sourceTree = \"<group>\"; };\n\t\t83B1804846FC5FA7ACBFC82E7F5B9746 /* Unicode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Unicode.h; path = folly/Unicode.h; sourceTree = \"<group>\"; };\n\t\t83D60FC0472C44AE0EB307C8EBC943AA /* SynthTrace.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SynthTrace.h; path = destroot/include/hermes/SynthTrace.h; sourceTree = \"<group>\"; };\n\t\t83E8DBA50CF66D81EB39C5BF3384B3D3 /* RCTBridge+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"RCTBridge+Private.h\"; sourceTree = \"<group>\"; };\n\t\t840FA9BF8D964570C73D3D561CF489CE /* RCTKeyboardObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTKeyboardObserver.h; path = React/CoreModules/RCTKeyboardObserver.h; sourceTree = \"<group>\"; };\n\t\t846735472D63BEB4DB75ECD903ECD756 /* React-hermes.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-hermes.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t846EE9DAE34FA678FA761E65DD2F08E5 /* ImageComponentDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ImageComponentDescriptor.h; path = react/renderer/components/image/ImageComponentDescriptor.h; sourceTree = \"<group>\"; };\n\t\t84861068E0BD421B437C1FB5C00F434D /* AtFork.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AtFork.h; path = folly/system/AtFork.h; sourceTree = \"<group>\"; };\n\t\t84C69750863FB2783C4C3DA5FBF5A671 /* ImageShadowNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ImageShadowNode.h; path = react/renderer/components/image/ImageShadowNode.h; sourceTree = \"<group>\"; };\n\t\t84C78B3BD305937A8FB7F156B1068561 /* hi.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = hi.lproj; path = React/I18n/strings/hi.lproj; sourceTree = \"<group>\"; };\n\t\t84D47D15D9888ECC847619622D47F370 /* RCTInputAccessoryShadowView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTInputAccessoryShadowView.h; sourceTree = \"<group>\"; };\n\t\t84D732F0DC5E41F018DF129A1E36E683 /* EventTarget.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = EventTarget.cpp; path = react/renderer/core/EventTarget.cpp; sourceTree = \"<group>\"; };\n\t\t84E154DAD162F4A18EEEA3624CF6A532 /* Pods-WatermelonTester-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = \"Pods-WatermelonTester-acknowledgements.markdown\"; sourceTree = \"<group>\"; };\n\t\t8516ED23F91BAC902B146A3BDA21B3AB /* graphicsConversions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = graphicsConversions.h; path = react/renderer/core/graphicsConversions.h; sourceTree = \"<group>\"; };\n\t\t85234EF8449BC006516D4A6A62B9F438 /* RCTInputAccessoryViewContent.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTInputAccessoryViewContent.mm; sourceTree = \"<group>\"; };\n\t\t854FD3BEF6FF2E1CB963FD11F173D53D /* RCTBaseTextViewManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTBaseTextViewManager.h; sourceTree = \"<group>\"; };\n\t\t856575C5A576BBE72D1C55601F788145 /* SpookyHashV2.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = SpookyHashV2.cpp; path = folly/hash/SpookyHashV2.cpp; sourceTree = \"<group>\"; };\n\t\t857ABB199F3E6193128196415203918E /* RCTBaseTextInputShadowView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTBaseTextInputShadowView.mm; sourceTree = \"<group>\"; };\n\t\t85A01882ED06DFEA2E0CE78BCDB204A7 /* SocketRocket */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = SocketRocket; path = libSocketRocket.a; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t860A6C48F7BFB2F514BB891173FD0D7E /* LayoutAnimationDriver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LayoutAnimationDriver.h; path = react/renderer/animations/LayoutAnimationDriver.h; sourceTree = \"<group>\"; };\n\t\t8612AE35A990235C979983FD304D7330 /* RCTAnimatedImage.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTAnimatedImage.mm; sourceTree = \"<group>\"; };\n\t\t861717776176D0307718AB2E8E102C67 /* AtomicHashMap-inl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"AtomicHashMap-inl.h\"; path = \"folly/AtomicHashMap-inl.h\"; sourceTree = \"<group>\"; };\n\t\t8627871C188DC96A2A53FD17E0445367 /* SysStat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SysStat.h; path = folly/portability/SysStat.h; sourceTree = \"<group>\"; };\n\t\t865BCA647C0A650C5EADD1CCF31CFA14 /* NativeToJsBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = NativeToJsBridge.h; sourceTree = \"<group>\"; };\n\t\t866D0225560051A219BEE4D4664348F9 /* IntrusiveList.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IntrusiveList.h; path = folly/IntrusiveList.h; sourceTree = \"<group>\"; };\n\t\t869D440DACC02CD2540C4CE6A499116F /* Format.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = Format.cpp; path = folly/Format.cpp; sourceTree = \"<group>\"; };\n\t\t86C40F819940022A549E70BECA41B61A /* BaseTextProps.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BaseTextProps.h; path = react/renderer/components/text/BaseTextProps.h; sourceTree = \"<group>\"; };\n\t\t86C8906A6C460D393729CA02A57186E7 /* BoundAxis.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BoundAxis.h; sourceTree = \"<group>\"; };\n\t\t86CD21C661338CF76FD714E4819D0BEF /* Singleton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Singleton.h; path = folly/detail/Singleton.h; sourceTree = \"<group>\"; };\n\t\t86DFAB05E161B696DFC1057DB247CBE3 /* BaseTouch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BaseTouch.h; path = react/renderer/components/view/BaseTouch.h; sourceTree = \"<group>\"; };\n\t\t86F28687E953C2F68F76CE4BB56DE52A /* RCTBundleManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTBundleManager.m; sourceTree = \"<group>\"; };\n\t\t86FBADB1ADE032495E4DC6B80BC37BFB /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = \"<group>\"; };\n\t\t875E97EA9D0677F39C4C3599772B2F46 /* RCTTurboModuleRegistry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTTurboModuleRegistry.h; sourceTree = \"<group>\"; };\n\t\t87D33A3159E4827D6FAE051C897E7019 /* RCTReloadCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTReloadCommand.m; sourceTree = \"<group>\"; };\n\t\t8817E84E8D2A30EF3D7C5A9EFE82A593 /* RCTRootShadowView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTRootShadowView.m; sourceTree = \"<group>\"; };\n\t\t881BC753A7C248050EC65DCFDF4A1F50 /* Differentiator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Differentiator.h; path = react/renderer/mounting/Differentiator.h; sourceTree = \"<group>\"; };\n\t\t883F3E36A905B70FC2C8B78E92AC740A /* Promise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Promise.h; path = react/bridging/Promise.h; sourceTree = \"<group>\"; };\n\t\t887027C7FF12FB7338869C776A7CEFBF /* React-RCTFabric-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-RCTFabric-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t88B840D20BFE171BE3DD9DFE4EC33AC0 /* LayoutPrimitives.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LayoutPrimitives.h; path = react/renderer/core/LayoutPrimitives.h; sourceTree = \"<group>\"; };\n\t\t88DDF4F26D766FFE558EA52E582A0879 /* React-nativeconfig-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-nativeconfig-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t88F146A98AD14FE819BCA98EB3275AD3 /* RCTModuloAnimatedNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTModuloAnimatedNode.h; sourceTree = \"<group>\"; };\n\t\t88FE98CEA078C7FBF78F8FA3A02093CE /* RCTRefreshableProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTRefreshableProtocol.h; sourceTree = \"<group>\"; };\n\t\t890A2DE43F7CEC807F5D45DD7FD1CE74 /* ExceptionString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ExceptionString.h; path = folly/ExceptionString.h; sourceTree = \"<group>\"; };\n\t\t890E8592B2798AA968BD07CDFB3EDD9A /* TurnSequencer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TurnSequencer.h; path = folly/detail/TurnSequencer.h; sourceTree = \"<group>\"; };\n\t\t890F493171D8B37E354419CA6A05C95A /* RCTClipboard.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTClipboard.h; path = React/CoreModules/RCTClipboard.h; sourceTree = \"<group>\"; };\n\t\t8980AF1403E1F2A16DA44CAC4004F1E9 /* RCTTextAttributes.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTTextAttributes.mm; sourceTree = \"<group>\"; };\n\t\t8980B7C2D6023D0EC77EF277C17227D1 /* HardwareConcurrency.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HardwareConcurrency.h; path = folly/system/HardwareConcurrency.h; sourceTree = \"<group>\"; };\n\t\t89BF32B08D57FC97C721EFC866E0143F /* RCTMockDef.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTMockDef.h; sourceTree = \"<group>\"; };\n\t\t89D75BA444F9A4BBB02531A804E2707A /* TextProps.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TextProps.h; path = react/renderer/components/text/TextProps.h; sourceTree = \"<group>\"; };\n\t\t8A50EA432D2B83B1014E46448CA68632 /* EventBeat.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = EventBeat.cpp; path = react/renderer/core/EventBeat.cpp; sourceTree = \"<group>\"; };\n\t\t8A7155EA3AC352921BE68F7BD76C6F36 /* RCTBaseTextInputView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTBaseTextInputView.h; sourceTree = \"<group>\"; };\n\t\t8A80985843E4723FCDE8D548AB93AC54 /* React-Mapbuffer.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-Mapbuffer.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t8A81DCEC265B36C702B32207D90DA5F9 /* RCTImagePlugins.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTImagePlugins.mm; sourceTree = \"<group>\"; };\n\t\t8A858627701B92C8E35A54D44F1CDF1B /* TurboModulePerfLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TurboModulePerfLogger.h; path = react/nativemodule/core/ReactCommon/TurboModulePerfLogger.h; sourceTree = \"<group>\"; };\n\t\t8AAE8CC35982681A17144AA7022C354D /* SocketAddress.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SocketAddress.h; path = folly/SocketAddress.h; sourceTree = \"<group>\"; };\n\t\t8AFE8F048924F7A8798499375AA68271 /* CString.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = CString.cpp; path = folly/lang/CString.cpp; sourceTree = \"<group>\"; };\n\t\t8B0995DAA2C152F8B2BBE8B2BD71EB56 /* zh-Hant.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = \"zh-Hant.lproj\"; path = \"React/I18n/strings/zh-Hant.lproj\"; sourceTree = \"<group>\"; };\n\t\t8B510656AC02DF313FD0F8F0C11489FC /* RCTInputAccessoryView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTInputAccessoryView.h; sourceTree = \"<group>\"; };\n\t\t8B75886BB83AA90D3B2DEFB75224490C /* RCTSafeAreaShadowView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSafeAreaShadowView.h; sourceTree = \"<group>\"; };\n\t\t8B7D86572DB2B5C7CF324979D3984A2B /* AtomicHashMap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AtomicHashMap.h; path = folly/AtomicHashMap.h; sourceTree = \"<group>\"; };\n\t\t8B8BA983DC0304E53A494B8BC8368D3C /* RawPropsKeyMap.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = RawPropsKeyMap.cpp; path = react/renderer/core/RawPropsKeyMap.cpp; sourceTree = \"<group>\"; };\n\t\t8BE3CC89AB9CCAD959EA3B472BA6F99A /* RCTSurfaceView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSurfaceView.h; sourceTree = \"<group>\"; };\n\t\t8C190024D996EF72661EA3DECD88FD76 /* React-RCTLinking.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-RCTLinking.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t8C5791AD6F4A42E6F15A4AE3E13672C9 /* RCTDynamicTypeRamp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTDynamicTypeRamp.h; sourceTree = \"<group>\"; };\n\t\t8C66234F6FC8A3E3EADCA342B130FB54 /* Color.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = Color.cpp; sourceTree = \"<group>\"; };\n\t\t8CB48239EFF087F22AC48A83F592D64F /* RCTParagraphComponentAccessibilityProvider.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTParagraphComponentAccessibilityProvider.mm; sourceTree = \"<group>\"; };\n\t\t8CC0120933FC3F3C92122A211D47CC57 /* React-graphics.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-graphics.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t8CD6649A7EC8CDD2CF31FCF0EBBD4501 /* cs.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = cs.lproj; path = React/I18n/strings/cs.lproj; sourceTree = \"<group>\"; };\n\t\t8CDDE02E3DE33048B69564671CBA6D96 /* RCTBridge.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTBridge.mm; sourceTree = \"<group>\"; };\n\t\t8CFB7A8BE97081BCC80D943BAD260E5A /* RCTImageBlurUtils.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTImageBlurUtils.mm; sourceTree = \"<group>\"; };\n\t\t8D07443F9F8CE58F73EE39187877455E /* hermes-engine.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"hermes-engine.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t8D1CC2D4F8A104E3B6F891431E7ECE1B /* SafeAreaViewShadowNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SafeAreaViewShadowNode.h; path = react/renderer/components/safeareaview/SafeAreaViewShadowNode.h; sourceTree = \"<group>\"; };\n\t\t8D7883FA7052AFA06DF3F841FBBB33EF /* RCTLocalizationProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTLocalizationProvider.h; path = Fabric/RCTLocalizationProvider.h; sourceTree = \"<group>\"; };\n\t\t8D7C4A3E62FB0FF7DF9D127631B944B1 /* RCTAccessibilityManager+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"RCTAccessibilityManager+Internal.h\"; path = \"React/CoreModules/RCTAccessibilityManager+Internal.h\"; sourceTree = \"<group>\"; };\n\t\t8DF8D4CCED43409861DD2CA66CD7733F /* RCTConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTConstants.m; sourceTree = \"<group>\"; };\n\t\t8E06A966DFD16239C4A4825D8200F89D /* JSIDynamic.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = JSIDynamic.cpp; path = jsi/JSIDynamic.cpp; sourceTree = \"<group>\"; };\n\t\t8E11E2044A1B7194DE5069CCBE8DD5AF /* RCTRuntimeExecutor.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RCTRuntimeExecutor.mm; path = ReactCommon/RCTRuntimeExecutor.mm; sourceTree = \"<group>\"; };\n\t\t8E2FD3C024F95AA7EF9D1ECD43A5E807 /* ScrollViewShadowNode.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ScrollViewShadowNode.cpp; path = react/renderer/components/scrollview/ScrollViewShadowNode.cpp; sourceTree = \"<group>\"; };\n\t\t8E38DDBA8B3F295D182A2E60FC4F968B /* Sqlite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Sqlite.h; sourceTree = \"<group>\"; };\n\t\t8E748C5FBED7C0C756FC4C4A6B5C2E8C /* OpenSSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OpenSSL.h; path = folly/portability/OpenSSL.h; sourceTree = \"<group>\"; };\n\t\t8E76F01C60DFCE85A1C8CB416B3636D3 /* FBXXHashUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FBXXHashUtils.h; sourceTree = \"<group>\"; };\n\t\t8E93927BD0D92FEB9D950507CCF5E2FF /* RCTLinkingPlugins.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTLinkingPlugins.h; path = Libraries/LinkingIOS/RCTLinkingPlugins.h; sourceTree = \"<group>\"; };\n\t\t8F172D220F95765CFA361637BAAAA417 /* compile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = compile.h; path = include/fmt/compile.h; sourceTree = \"<group>\"; };\n\t\t8F35EF9396775F51CA6146B0C7D16351 /* StyleValuePool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = StyleValuePool.h; sourceTree = \"<group>\"; };\n\t\t8F517BDFB455C4400751998134FC0B9E /* FBLazyVector.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = FBLazyVector.podspec; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t8F593DCCC2DAFF6D4243AAD2A5156F10 /* ReactNativeConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ReactNativeConfig.h; path = react/config/ReactNativeConfig.h; sourceTree = \"<group>\"; };\n\t\t8F671A2A4E4BD8E767A5A396E4793F09 /* NetOps.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = NetOps.cpp; path = folly/net/NetOps.cpp; sourceTree = \"<group>\"; };\n\t\t8FA3CC41DE47D337EEEC4F2523A5A366 /* RCTVibrationPlugins.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTVibrationPlugins.mm; sourceTree = \"<group>\"; };\n\t\t8FA93F3F56F84CCD73CC13AB0A744B8A /* RawPropsKey.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RawPropsKey.h; path = react/renderer/core/RawPropsKey.h; sourceTree = \"<group>\"; };\n\t\t8FC5170482B4001507331897446093A4 /* React-RCTBlob.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-RCTBlob.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t8FDD74A51002058B82FB55AE5D657564 /* SpookyHashV2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpookyHashV2.h; path = folly/hash/SpookyHashV2.h; sourceTree = \"<group>\"; };\n\t\t90049B8377428D5B7434F2C8680C87CF /* RCTPointerEvents.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTPointerEvents.h; sourceTree = \"<group>\"; };\n\t\t902581D4E30B461C86B20B03CC2F5AA6 /* React-RCTAppDelegate.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-RCTAppDelegate.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t9033A744B6DD1EB398DCC4DEC2188393 /* React-debug.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-debug.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t9046E45D1CA4C4109F20975FE05769E0 /* FBLazyVector.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FBLazyVector.debug.xcconfig; sourceTree = \"<group>\"; };\n\t\t9052E26FF92020AFAA064B27532BDD02 /* Enumerate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Enumerate.h; path = folly/container/Enumerate.h; sourceTree = \"<group>\"; };\n\t\t90666F35881E0B6CF16A7F6D502820C6 /* LayoutAnimationDriver.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = LayoutAnimationDriver.cpp; path = react/renderer/animations/LayoutAnimationDriver.cpp; sourceTree = \"<group>\"; };\n\t\t906802F5C01093C45F849B1189752669 /* RCTRootComponentView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTRootComponentView.mm; sourceTree = \"<group>\"; };\n\t\t906C0BC7CCCBAF7E35B934CFD17FC44F /* LegacyUIManagerConstantsProviderBinding.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = LegacyUIManagerConstantsProviderBinding.cpp; sourceTree = \"<group>\"; };\n\t\t908D006CABFC90D4BADBF7B0C2544818 /* Access.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Access.h; path = folly/container/Access.h; sourceTree = \"<group>\"; };\n\t\t90C01A0B4DB17D752D3BDD87C1B4D35E /* SRHTTPConnectMessage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRHTTPConnectMessage.h; path = SocketRocket/Internal/Utilities/SRHTTPConnectMessage.h; sourceTree = \"<group>\"; };\n\t\t90CE57248719DB1AD38AECFB8A66AF11 /* ExecutionContextManager.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = ExecutionContextManager.cpp; sourceTree = \"<group>\"; };\n\t\t90D9EFC947AA0C68DCA4C6DD6EB901DE /* ImageEventEmitter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ImageEventEmitter.h; path = react/renderer/components/image/ImageEventEmitter.h; sourceTree = \"<group>\"; };\n\t\t90E8031BF4BBAA174907FCBE801328F4 /* React-runtimescheduler-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-runtimescheduler-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t9103371D49F49FB8704F83F623604846 /* RCTTextPrimitivesConversions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTTextPrimitivesConversions.h; sourceTree = \"<group>\"; };\n\t\t9113D58420F951D0F8E7D507C99E9190 /* RCTSpringAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSpringAnimation.h; sourceTree = \"<group>\"; };\n\t\t9130DC48E60A16B3033E4C4648557B52 /* Size.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Size.h; sourceTree = \"<group>\"; };\n\t\t91392F3C2B6C40DD319492604906C7B0 /* hr.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = hr.lproj; path = React/I18n/strings/hr.lproj; sourceTree = \"<group>\"; };\n\t\t9146BC2894F3FC7F11EDB10CB1B6B9B3 /* ViewShadowNode.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ViewShadowNode.cpp; path = react/renderer/components/view/ViewShadowNode.cpp; sourceTree = \"<group>\"; };\n\t\t917B25EF0D073A826D0E80F0B81BFB26 /* json_patch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = json_patch.h; path = folly/json_patch.h; sourceTree = \"<group>\"; };\n\t\t91946E0E55C67A006BFC6A09B6757F34 /* RCTFileReaderModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTFileReaderModule.h; path = Libraries/Blob/RCTFileReaderModule.h; sourceTree = \"<group>\"; };\n\t\t91B53126F00778E3792F8BDC9EF291DA /* CancellationToken-inl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"CancellationToken-inl.h\"; path = \"folly/CancellationToken-inl.h\"; sourceTree = \"<group>\"; };\n\t\t91C4877BD9BE873DF4DF6B5DCC0CC740 /* YGNodeStyle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YGNodeStyle.h; path = yoga/YGNodeStyle.h; sourceTree = \"<group>\"; };\n\t\t91CE745FCDC2F917FBFE8E7C44B21638 /* sv.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = sv.lproj; path = React/I18n/strings/sv.lproj; sourceTree = \"<group>\"; };\n\t\t91DEEA05C7FC3B3FE85F51D16F0060A1 /* RCTNetworkTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTNetworkTask.h; path = Libraries/Network/RCTNetworkTask.h; sourceTree = \"<group>\"; };\n\t\t91E5E966C9BA06A775879A6EFFEF786D /* Hazptr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Hazptr.h; path = folly/synchronization/Hazptr.h; sourceTree = \"<group>\"; };\n\t\t92308B330D7A43F94B4AD41D0FEB8214 /* SurfaceHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SurfaceHandler.h; path = react/renderer/scheduler/SurfaceHandler.h; sourceTree = \"<group>\"; };\n\t\t92427655A24DF879C52D7AA18EBFF83E /* AccessibilityPrimitives.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AccessibilityPrimitives.h; path = react/renderer/components/view/AccessibilityPrimitives.h; sourceTree = \"<group>\"; };\n\t\t925A2297E6EEF7197A415C4C41AE8027 /* RCTBlobPlugins.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTBlobPlugins.mm; sourceTree = \"<group>\"; };\n\t\t926F478934D57018C94BFB51AF5970C8 /* React-FabricImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-FabricImage-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t92EE42BB2B8D888B92EDD257DA21325E /* ParagraphLayoutManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParagraphLayoutManager.h; path = react/renderer/components/text/ParagraphLayoutManager.h; sourceTree = \"<group>\"; };\n\t\t92F7C8691D5DED9946359E1BF469148A /* React-RuntimeApple-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-RuntimeApple-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t937EF872F9B051F189B72F49D8D54CAD /* RangeSse42.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RangeSse42.h; path = folly/detail/RangeSse42.h; sourceTree = \"<group>\"; };\n\t\t93802254A23BD2E21FC5B6FC137CB7EE /* RCTRedBox.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTRedBox.mm; sourceTree = \"<group>\"; };\n\t\t938D7993FE352F22F90BB01751E733E9 /* LegacyViewManagerInteropViewEventEmitter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = LegacyViewManagerInteropViewEventEmitter.cpp; path = react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropViewEventEmitter.cpp; sourceTree = \"<group>\"; };\n\t\t938DC03F8EB05E7BDD33175BF907D170 /* IPAddressV4.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IPAddressV4.h; path = folly/IPAddressV4.h; sourceTree = \"<group>\"; };\n\t\t93C1BA5C7F7A59628950008F9375BF82 /* RCTDevLoadingView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTDevLoadingView.h; path = React/CoreModules/RCTDevLoadingView.h; sourceTree = \"<group>\"; };\n\t\t93E43D1F91E0AD0BD2B3B8127C452C9D /* RCTJSThread.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTJSThread.h; sourceTree = \"<group>\"; };\n\t\t93E465757376E937D199FB1ED68BB46C /* RCTVibration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTVibration.h; path = Libraries/Vibration/RCTVibration.h; sourceTree = \"<group>\"; };\n\t\t940919353E8C57E4A2A3101E8CD0FA67 /* RCTUITextField.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTUITextField.mm; sourceTree = \"<group>\"; };\n\t\t9414F0292C4CA9913CEEC7F61F3E32B3 /* React-jserrorhandler.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-jserrorhandler.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t942322E848A28FE125A1C9A84F16D548 /* RCTProfileTrampoline-arm.S */ = {isa = PBXFileReference; includeInIndex = 1; path = \"RCTProfileTrampoline-arm.S\"; sourceTree = \"<group>\"; };\n\t\t944561AB0FA2778925F3B3BD1ACD8B3C /* react_native_log.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = react_native_log.h; sourceTree = \"<group>\"; };\n\t\t94463E432EBBF80182004B420404987D /* Config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Config.h; sourceTree = \"<group>\"; };\n\t\t946B80B815D8B4AF5B32C1A04E7E061B /* React-perflogger.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-perflogger.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t9472948FA5D6097F7AAF46BA5247C4C0 /* RCTBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTBridge.h; sourceTree = \"<group>\"; };\n\t\t949C0E997EA3B7239902690DA5D564D5 /* RuntimeSchedulerBinding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RuntimeSchedulerBinding.h; sourceTree = \"<group>\"; };\n\t\t94D87B59FEAC0DBA4F9A7E928431AAAE /* Random.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Random.h; path = folly/Random.h; sourceTree = \"<group>\"; };\n\t\t94ED4B520996293EF041391736BBBA24 /* flags.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = flags.h; sourceTree = \"<group>\"; };\n\t\t959BD66DF33D8DD073B3E7135B2954F7 /* RCTSourceCode.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTSourceCode.mm; sourceTree = \"<group>\"; };\n\t\t95D17842EC6B842F72D0A2E4DA506E78 /* ShadowTree.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ShadowTree.cpp; path = react/renderer/mounting/ShadowTree.cpp; sourceTree = \"<group>\"; };\n\t\t95F4490C7C830CE7EDFD1E7F79557E18 /* Demangle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Demangle.h; path = folly/Demangle.h; sourceTree = \"<group>\"; };\n\t\t95FAFB9E62426C075E9E5E41D65333EB /* RCTSurfaceRootView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTSurfaceRootView.mm; sourceTree = \"<group>\"; };\n\t\t95FE5AE8E711BF2C04047FE31AFA930A /* es-ES.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = \"es-ES.lproj\"; path = \"React/I18n/strings/es-ES.lproj\"; sourceTree = \"<group>\"; };\n\t\t9621CF80D2D681568C8BCAB003EA22F2 /* ShadowTreeRegistry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ShadowTreeRegistry.h; path = react/renderer/mounting/ShadowTreeRegistry.h; sourceTree = \"<group>\"; };\n\t\t9628B2A1454DADB30631AE9787FC337F /* React-rendererdebug-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-rendererdebug-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t962AA8023E519A1F58D71BC1F73C95D0 /* GroupVarintDetail.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GroupVarintDetail.h; path = folly/detail/GroupVarintDetail.h; sourceTree = \"<group>\"; };\n\t\t963A0C06992A9D8797E0E1BA9A14DB04 /* RCTFPSGraph.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTFPSGraph.mm; sourceTree = \"<group>\"; };\n\t\t963CB6F0F1E28EA98A2EED61461AC386 /* WeakList.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = WeakList.h; sourceTree = \"<group>\"; };\n\t\t963DAA4960B3974FFBB8DE571F07B048 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = \"<group>\"; };\n\t\t96489235CABA0BF8A10434FC133718C8 /* AtomicNotification-inl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"AtomicNotification-inl.h\"; path = \"folly/synchronization/AtomicNotification-inl.h\"; sourceTree = \"<group>\"; };\n\t\t9652157178DCF97B039AEF273CD86695 /* RCTNativeAnimatedTurboModule.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTNativeAnimatedTurboModule.mm; sourceTree = \"<group>\"; };\n\t\t9668F22AD81B720182D9C7F1133935F2 /* hermes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = hermes.h; path = destroot/include/hermes/hermes.h; sourceTree = \"<group>\"; };\n\t\t967DBD838FB53E8907C105802E22ECCA /* React-Codegen.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-Codegen.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t969D216DADA9AF02B0339E42E569D42B /* SRIOConsumer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRIOConsumer.h; path = SocketRocket/Internal/IOConsumer/SRIOConsumer.h; sourceTree = \"<group>\"; };\n\t\t96AEA8A2506861840BC63D873CC2961A /* StateData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = StateData.h; path = react/renderer/core/StateData.h; sourceTree = \"<group>\"; };\n\t\t96C1ECDE3D239B5524C2DD16740B8B8C /* RCTConvert+Transform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"RCTConvert+Transform.m\"; sourceTree = \"<group>\"; };\n\t\t96C45D3F8919F8B19727DA09E333BFE6 /* RCTObjcExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTObjcExecutor.h; sourceTree = \"<group>\"; };\n\t\t96F9A50575BD572DC92EEFE7118DE559 /* PlatformRunLoopObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PlatformRunLoopObserver.h; sourceTree = \"<group>\"; };\n\t\t96FCCADF61AA384004BF02F11E1A50B9 /* Task.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Task.h; sourceTree = \"<group>\"; };\n\t\t971F6C319DDD4BD078954A5EF77B5BA7 /* React-featureflags */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-featureflags\"; path = \"libReact-featureflags.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t97537A67023F6E33A60145FD2CCD320F /* InspectorUtilities.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorUtilities.cpp; sourceTree = \"<group>\"; };\n\t\t976E60D841E3AEC485885E2A36C843AC /* RCTDataRequestHandler.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTDataRequestHandler.mm; sourceTree = \"<group>\"; };\n\t\t977FB42CD545522302B7AEA55376D2F7 /* ExceptionWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ExceptionWrapper.h; path = folly/ExceptionWrapper.h; sourceTree = \"<group>\"; };\n\t\t9788F37552AF8A0A123A07FA7D080CFA /* ValueFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ValueFactory.h; path = react/renderer/core/ValueFactory.h; sourceTree = \"<group>\"; };\n\t\t97A95308B6D47ED59BD75934355ADDF6 /* TextMeasureCache.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = TextMeasureCache.cpp; path = react/renderer/textlayoutmanager/TextMeasureCache.cpp; sourceTree = \"<group>\"; };\n\t\t97BEF627FC626AA3E7E8CA75193664A3 /* RCT-Folly-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"RCT-Folly-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t97C17BDCBCF48F7FE1E2CE59E0B17252 /* SparseByteSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SparseByteSet.h; path = folly/container/SparseByteSet.h; sourceTree = \"<group>\"; };\n\t\t982AAB27F58C71E3FA007537ED46BB9D /* PolyDetail.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PolyDetail.h; path = folly/detail/PolyDetail.h; sourceTree = \"<group>\"; };\n\t\t9833AD993B14B7CEE86ECA66FA7A7B7A /* React-RCTAppDelegate.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = \"React-RCTAppDelegate.modulemap\"; sourceTree = \"<group>\"; };\n\t\t9841711B9F3A736014573E0B62D9C1F9 /* YGNodeLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YGNodeLayout.h; path = yoga/YGNodeLayout.h; sourceTree = \"<group>\"; };\n\t\t9848E5EDA897DF122EF07B42AF3EEB86 /* GTest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTest.h; path = folly/portability/GTest.h; sourceTree = \"<group>\"; };\n\t\t9849504D06A58E365E3512F08D8AD6DF /* FallbackRuntimeAgentDelegate.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = FallbackRuntimeAgentDelegate.cpp; sourceTree = \"<group>\"; };\n\t\t985183EC5FB028AC6A6FCC26CC91696A /* SlowFingerprint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SlowFingerprint.h; path = folly/detail/SlowFingerprint.h; sourceTree = \"<group>\"; };\n\t\t9862B8B78362BC8D98438DB2C5675196 /* SanitizeThread.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = SanitizeThread.cpp; path = folly/synchronization/SanitizeThread.cpp; sourceTree = \"<group>\"; };\n\t\t98BB183E94BA72BD56983DB14089B952 /* TouchEventEmitter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = TouchEventEmitter.cpp; path = react/renderer/components/view/TouchEventEmitter.cpp; sourceTree = \"<group>\"; };\n\t\t98C9E5135E046EC50D915DC1941F6D87 /* YGNode.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = YGNode.cpp; path = yoga/YGNode.cpp; sourceTree = \"<group>\"; };\n\t\t98CDD541D0DC28ECF520BEE664E58AEC /* RCTActivityIndicatorViewManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTActivityIndicatorViewManager.m; sourceTree = \"<group>\"; };\n\t\t98D0A9133BF9CECCDCD33D1F4C38B4C8 /* RCTAccessibilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTAccessibilityManager.h; path = React/CoreModules/RCTAccessibilityManager.h; sourceTree = \"<group>\"; };\n\t\t991E213D38BB44AE5C3367DDE4A4D4D8 /* RCTColorAnimatedNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTColorAnimatedNode.h; sourceTree = \"<group>\"; };\n\t\t9934CD5B42C888E8A4F1D3552AEE6B13 /* React-Fabric.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-Fabric.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t996448BB93D8203D8D6C59B2D0B33BDA /* ImageEventEmitter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ImageEventEmitter.cpp; path = react/renderer/components/image/ImageEventEmitter.cpp; sourceTree = \"<group>\"; };\n\t\t99706928F57B54531F9949E340BFECB8 /* RCTJSThreadManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTJSThreadManager.h; path = ReactCommon/RCTJSThreadManager.h; sourceTree = \"<group>\"; };\n\t\t997842162A2D57DA5A2636E554A28F19 /* React-utils.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-utils.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t997B7B2A3CC26B9D704D7CB940D7E4C6 /* Align.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Align.h; path = folly/lang/Align.h; sourceTree = \"<group>\"; };\n\t\t99E222D0C7D14CFBD1BC586704C58A9D /* React-runtimeexecutor.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-runtimeexecutor.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t99E72FB672688243BE5F6E35ABA1E42F /* RCTSurfaceDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSurfaceDelegate.h; sourceTree = \"<group>\"; };\n\t\t99E851596D4A5EE743DC493671DB9DA3 /* Partial.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Partial.h; path = folly/functional/Partial.h; sourceTree = \"<group>\"; };\n\t\t99F1158A135CC58252D861686496E8DE /* RCTStatusBarManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTStatusBarManager.mm; sourceTree = \"<group>\"; };\n\t\t9A2407C78B8F357AFB081AF5B1BC953A /* RCTSafeAreaViewComponentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSafeAreaViewComponentView.h; sourceTree = \"<group>\"; };\n\t\t9A2D8939F820583ACA4B8154B63050D7 /* cached-powers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"cached-powers.h\"; path = \"double-conversion/cached-powers.h\"; sourceTree = \"<group>\"; };\n\t\t9A5F0251C69A9CCF2DB3222CE170671E /* Edge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Edge.h; sourceTree = \"<group>\"; };\n\t\t9A62D11BB82CB6A24A13CAE4D0F6632A /* GCTripwireContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GCTripwireContext.h; path = destroot/include/hermes/Public/GCTripwireContext.h; sourceTree = \"<group>\"; };\n\t\t9A6F7F2DCBC2D9334AE0C6DE812A653E /* RCTDeprecation.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = RCTDeprecation.podspec; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t9A7E0B4304900884F1F7552E271BAE80 /* SplitStringSimd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SplitStringSimd.h; path = folly/detail/SplitStringSimd.h; sourceTree = \"<group>\"; };\n\t\t9A870B9A0F18A8C3F9075851CE67E22B /* React-RCTVibration-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-RCTVibration-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t9A909CE9BFF1F0B380221FDEE11D0211 /* RCTSurface.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTSurface.mm; sourceTree = \"<group>\"; };\n\t\t9A9617B1637CABEDDB4A95483334CB93 /* RCTLayoutAnimationGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTLayoutAnimationGroup.m; sourceTree = \"<group>\"; };\n\t\t9B36F42640063CCA329D93AC8F874A56 /* DebugStringConvertible.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = DebugStringConvertible.h; sourceTree = \"<group>\"; };\n\t\t9B40A55CAE96B9EC2411B625D3F58ABD /* ScopedExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ScopedExecutor.h; sourceTree = \"<group>\"; };\n\t\t9BC40B6E05AAAA8B1786166F41BD0EBF /* RCTPerformanceLoggerUtils.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RCTPerformanceLoggerUtils.mm; path = ReactCommon/RCTPerformanceLoggerUtils.mm; sourceTree = \"<group>\"; };\n\t\t9BD826EA734516D956DB671826DED506 /* RCTTransformAnimatedNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTTransformAnimatedNode.h; sourceTree = \"<group>\"; };\n\t\t9BE7B7E0E20673111D75C477804554AF /* ShadowView.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ShadowView.cpp; path = react/renderer/mounting/ShadowView.cpp; sourceTree = \"<group>\"; };\n\t\t9C0FAA307377663772FDCD8EEA4D9752 /* SRLog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRLog.h; path = SocketRocket/Internal/Utilities/SRLog.h; sourceTree = \"<group>\"; };\n\t\t9C46ED3EA004CAAFEB6FEF89B7AF2F0C /* RCTPlatformColorUtils.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTPlatformColorUtils.mm; sourceTree = \"<group>\"; };\n\t\t9C99F752EEC9741F33EED362076074BF /* YogaStylableProps.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = YogaStylableProps.cpp; path = react/renderer/components/view/YogaStylableProps.cpp; sourceTree = \"<group>\"; };\n\t\t9C9BD5B613E101C64C2992C9C6D47EAC /* RCTNativeAnimatedNodesManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTNativeAnimatedNodesManager.mm; sourceTree = \"<group>\"; };\n\t\t9CA3417ED0B8CDE1906D3202E80B148D /* Iterators.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Iterators.h; path = folly/detail/Iterators.h; sourceTree = \"<group>\"; };\n\t\t9D0FCEB123126F6E7439D8ABC6DB35A1 /* RCTTextLayoutManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTTextLayoutManager.h; sourceTree = \"<group>\"; };\n\t\t9D24D1273C6645B9F73FB2F6C0A44A1D /* jsi-inl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"jsi-inl.h\"; path = \"jsi/jsi-inl.h\"; sourceTree = \"<group>\"; };\n\t\t9D5CD2B433F8011D807EABA3442374E7 /* RCTRedBoxExtraDataViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTRedBoxExtraDataViewController.h; sourceTree = \"<group>\"; };\n\t\t9D634D9C7371357029E41D29AD89E979 /* react_native_assert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = react_native_assert.h; sourceTree = \"<group>\"; };\n\t\t9D7DA62E7DF50F0A454C529AA78EA7E5 /* Display.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Display.h; sourceTree = \"<group>\"; };\n\t\t9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t9DB28E8C209A78E622C0305EEB0B8A19 /* RCTImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTImageView.h; path = Libraries/Image/RCTImageView.h; sourceTree = \"<group>\"; };\n\t\t9DB326307140B9D4967E5C75EE4D451D /* Function.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Function.h; path = react/bridging/Function.h; sourceTree = \"<group>\"; };\n\t\t9DBAD76DF0AA6D7A788B0D3674035677 /* Hint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Hint.h; path = folly/lang/Hint.h; sourceTree = \"<group>\"; };\n\t\t9DD30C23A0277639DFBEA7BDEC6DFEE3 /* UninitializedMemoryHacks.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UninitializedMemoryHacks.h; path = folly/memory/UninitializedMemoryHacks.h; sourceTree = \"<group>\"; };\n\t\t9DF1753017BD4FC4A6370681CBE48C79 /* TextInputState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TextInputState.h; path = react/renderer/components/textinput/platform/ios/react/renderer/components/iostextinput/TextInputState.h; sourceTree = \"<group>\"; };\n\t\t9E177524AAB858045AD52E1FFD4C991A /* PointerHoverTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PointerHoverTracker.h; path = react/renderer/uimanager/PointerHoverTracker.h; sourceTree = \"<group>\"; };\n\t\t9E1FB69666F2C09161B2E1A2535CC43A /* RCTLayoutAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTLayoutAnimation.h; sourceTree = \"<group>\"; };\n\t\t9E6068776F49102288177FE25869B4F8 /* Demangle.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = Demangle.cpp; path = folly/Demangle.cpp; sourceTree = \"<group>\"; };\n\t\t9E725BADB6EC401BE33F493BD4BE2793 /* ParagraphComponentDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParagraphComponentDescriptor.h; path = react/renderer/components/text/ParagraphComponentDescriptor.h; sourceTree = \"<group>\"; };\n\t\t9EA2794840FA725A97054EE3C4C201C0 /* RCTAnimatedImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTAnimatedImage.h; path = Libraries/Image/RCTAnimatedImage.h; sourceTree = \"<group>\"; };\n\t\t9EA652E4CB7DDC6698F42743A59CB48F /* RCTKeyCommands.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTKeyCommands.h; sourceTree = \"<group>\"; };\n\t\t9EB5D5242D476B50F6A84EA6ECF95DAF /* React-FabricImage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-FabricImage.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t9EED1EEAD5AA1DD78D49501ECED7AB7D /* RCTInterpolationAnimatedNode.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTInterpolationAnimatedNode.mm; sourceTree = \"<group>\"; };\n\t\t9F03A2E19DD75677633924F1B93787D1 /* React-RCTAppDelegate.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-RCTAppDelegate.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t9F4B2863206A2795EDD2B67B16FAC91C /* RCTNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTNetworking.h; path = Libraries/Network/RCTNetworking.h; sourceTree = \"<group>\"; };\n\t\t9F5340BCCBE419D365ECF7F577F67C2B /* React-NativeModulesApple-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-NativeModulesApple-dummy.m\"; sourceTree = \"<group>\"; };\n\t\t9F7378714B1A2275988B900E389392EE /* RCTTouchEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTTouchEvent.h; sourceTree = \"<group>\"; };\n\t\t9F8C4243A150FEDAB173B67E50BC9174 /* ReactEventPriority.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ReactEventPriority.h; path = react/renderer/core/ReactEventPriority.h; sourceTree = \"<group>\"; };\n\t\t9FB8DB4CA6FB75873D74FF57CA59968C /* TrailingPosition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TrailingPosition.h; sourceTree = \"<group>\"; };\n\t\t9FBD5986BF1B3B3D5B97CC5217DFE41D /* YGConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YGConfig.h; path = yoga/YGConfig.h; sourceTree = \"<group>\"; };\n\t\tA04DC956EC28B16DDE9F446048074A0D /* BaseViewEventEmitter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = BaseViewEventEmitter.cpp; path = react/renderer/components/view/BaseViewEventEmitter.cpp; sourceTree = \"<group>\"; };\n\t\tA063348780E28C80CDFC691EE7F2C78D /* React-RCTText-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-RCTText-dummy.m\"; sourceTree = \"<group>\"; };\n\t\tA07442CD10380BE0C2F7C19CA5D62FB6 /* RCTSubtractionAnimatedNode.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTSubtractionAnimatedNode.mm; sourceTree = \"<group>\"; };\n\t\tA07A822153FEC0A3E902A56BD0450957 /* React-RuntimeHermes.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-RuntimeHermes.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tA09332652A2DA7B2F95FDC212274928B /* Fcntl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Fcntl.h; path = folly/portability/Fcntl.h; sourceTree = \"<group>\"; };\n\t\tA0A2F69D09350A6A5AFA9864BBB84FFE /* React-Codegen.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = \"React-Codegen.modulemap\"; sourceTree = \"<group>\"; };\n\t\tA0C9633F0AEEFB533D94C4D5B1D9CFDE /* React-perflogger.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-perflogger.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tA0CFE0D44D175E1A391C2129A3C3EBEF /* RCTAlertManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTAlertManager.mm; sourceTree = \"<group>\"; };\n\t\tA0DF3FB6417DB1CED9E5F8CF270DC9F6 /* RCTRootComponentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTRootComponentView.h; sourceTree = \"<group>\"; };\n\t\tA0E2B3DDC742F701942096E520561398 /* RCTShadowView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTShadowView.m; sourceTree = \"<group>\"; };\n\t\tA0E5972A9C9EBA5B3038586A11E0FCF5 /* RCTAppSetupUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTAppSetupUtils.h; sourceTree = \"<group>\"; };\n\t\tA0F0DECC4F2AEFAABCD0C3A4F368C487 /* RCTVersion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTVersion.m; sourceTree = \"<group>\"; };\n\t\tA11628FF9D522105C68BD01BB4D05697 /* ConnectionDemux.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = ConnectionDemux.cpp; sourceTree = \"<group>\"; };\n\t\tA1EEF0D5633DA10F123E110EDC4C4947 /* BridgelessJSCallInvoker.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = BridgelessJSCallInvoker.cpp; sourceTree = \"<group>\"; };\n\t\tA213D84A5E7EB977D2213B29DCE12629 /* React-nativeconfig.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-nativeconfig.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\tA21CEC9ACA2547F2173B743914CC6A16 /* ViewProps.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ViewProps.h; path = react/renderer/components/view/ViewProps.h; sourceTree = \"<group>\"; };\n\t\tA2237CD09A4316F9776CDCDA5907FAF5 /* RCTViewComponentView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTViewComponentView.mm; sourceTree = \"<group>\"; };\n\t\tA23EC0B053A41A76F8AE3B595FF6B87A /* MountingTransaction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MountingTransaction.h; path = react/renderer/mounting/MountingTransaction.h; sourceTree = \"<group>\"; };\n\t\tA2433055CA015DE51A8A13B2AAAE5155 /* Config.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = Config.cpp; sourceTree = \"<group>\"; };\n\t\tA24606F72343E19E228B3000540EC8FD /* RCTRedBoxExtraDataViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTRedBoxExtraDataViewController.m; sourceTree = \"<group>\"; };\n\t\tA275DD42FB75440C81B2F60BD6B23196 /* fmt.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = fmt.debug.xcconfig; sourceTree = \"<group>\"; };\n\t\tA27676D6AF709B183CC889284CE2B3D1 /* Direction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Direction.h; sourceTree = \"<group>\"; };\n\t\tA294F9716939BAB7421C72EE8DE2D3C2 /* RCTViewManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTViewManager.m; sourceTree = \"<group>\"; };\n\t\tA29983597DBADCA7A69A6EAE6BBED3C3 /* RCTView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTView.m; sourceTree = \"<group>\"; };\n\t\tA2E8652189AEFEC58162855B790CFA15 /* Futex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Futex.h; path = folly/detail/Futex.h; sourceTree = \"<group>\"; };\n\t\tA31AB8CE7A0BE03B38908CD5083FD09A /* React-debug.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = \"React-debug.modulemap\"; sourceTree = \"<group>\"; };\n\t\tA322F1AA7B7D88649BEF8224A0A6AC08 /* RCTViewRegistry.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTViewRegistry.m; sourceTree = \"<group>\"; };\n\t\tA341E5DC44E63AA9B8DFF0E0E059A5F4 /* StubView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = StubView.h; path = react/renderer/mounting/StubView.h; sourceTree = \"<group>\"; };\n\t\tA349B258597025E561C3C8C773B51674 /* RCTEnhancedScrollView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTEnhancedScrollView.mm; sourceTree = \"<group>\"; };\n\t\tA35672FA86AA809C95DB1AD01D1F4E30 /* LayoutMetrics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LayoutMetrics.h; path = react/renderer/core/LayoutMetrics.h; sourceTree = \"<group>\"; };\n\t\tA3A1C115325E8DCA58106218ADDBA397 /* nl.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = nl.lproj; path = React/I18n/strings/nl.lproj; sourceTree = \"<group>\"; };\n\t\tA3B4504723D37DDB3A1BBB28AE41070F /* Dirent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Dirent.h; path = folly/portability/Dirent.h; sourceTree = \"<group>\"; };\n\t\tA3F08746919747A6F56A2864E48BDDD3 /* EventQueue.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = EventQueue.cpp; path = react/renderer/core/EventQueue.cpp; sourceTree = \"<group>\"; };\n\t\tA43C1B14F1018F4B603503BF2E6E2524 /* strtod.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = strtod.h; path = \"double-conversion/strtod.h\"; sourceTree = \"<group>\"; };\n\t\tA44876BED8E87761881D41D005CCA0E7 /* ImageManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = ImageManager.mm; path = react/renderer/imagemanager/ImageManager.mm; sourceTree = \"<group>\"; };\n\t\tA45E1BB2ACE5150BEF6C4801CE86896C /* FMDatabaseQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = FMDatabaseQueue.m; sourceTree = \"<group>\"; };\n\t\tA46EE0867CB9E92996C6DE17ED0EE3DB /* RCTSafeAreaViewComponentView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTSafeAreaViewComponentView.mm; sourceTree = \"<group>\"; };\n\t\tA4841C02742AC28A86287DBC07806A0E /* RCTInteropTurboModule.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RCTInteropTurboModule.mm; path = ReactCommon/RCTInteropTurboModule.mm; sourceTree = \"<group>\"; };\n\t\tA4AFB126642929BDB526E70B71748879 /* EventQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EventQueue.h; path = react/renderer/core/EventQueue.h; sourceTree = \"<group>\"; };\n\t\tA4D384B56D16CD122C5BFFBD16EFEF46 /* utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = utils.h; path = react/renderer/animations/utils.h; sourceTree = \"<group>\"; };\n\t\tA4DBF56470408F62F5CFC5811EC41C55 /* ParkingLot.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ParkingLot.cpp; path = folly/synchronization/ParkingLot.cpp; sourceTree = \"<group>\"; };\n\t\tA4DDB397BCB393ACDDF3EB861945B730 /* EventListener.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = EventListener.cpp; path = react/renderer/core/EventListener.cpp; sourceTree = \"<group>\"; };\n\t\tA4EB08646CC21410C4622CEE62B7DC51 /* primitives.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = primitives.h; path = react/renderer/components/textinput/platform/ios/react/renderer/components/iostextinput/primitives.h; sourceTree = \"<group>\"; };\n\t\tA50AFF02E96B2A9FAD9F4CDF5D05C365 /* RCTPerfMonitor.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTPerfMonitor.mm; sourceTree = \"<group>\"; };\n\t\tA50DCAB2950F79811B921C5568362684 /* UnbatchedEventQueue.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = UnbatchedEventQueue.cpp; path = react/renderer/core/UnbatchedEventQueue.cpp; sourceTree = \"<group>\"; };\n\t\tA511E79FFB4293C0F4E1849EB6DAA5E9 /* FMDatabaseAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = FMDatabaseAdditions.m; sourceTree = \"<group>\"; };\n\t\tA53C026A38554E36070D5FF7477DE9BD /* RCTStatusBarManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTStatusBarManager.h; path = React/CoreModules/RCTStatusBarManager.h; sourceTree = \"<group>\"; };\n\t\tA5419C82AB201A4405D35E3F97C867FB /* TextInputProps.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TextInputProps.h; path = react/renderer/components/textinput/platform/ios/react/renderer/components/iostextinput/TextInputProps.h; sourceTree = \"<group>\"; };\n\t\tA5823607D77DE3B854886CBA748F1433 /* TelemetryController.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = TelemetryController.cpp; path = react/renderer/mounting/TelemetryController.cpp; sourceTree = \"<group>\"; };\n\t\tA5B22DA0749C539DAE387FAB7E1507FC /* UIView+React.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"UIView+React.m\"; sourceTree = \"<group>\"; };\n\t\tA5B49761F8D1EB12585DD45CAA2E489F /* React-logger */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-logger\"; path = \"libReact-logger.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA5E92316DAA53D54019FF1D5E3697030 /* simdjson.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = simdjson.cpp; path = src/simdjson.cpp; sourceTree = \"<group>\"; };\n\t\tA5FAB647D0F4DBFEAA683CD3AFF2F587 /* ModalHostViewShadowNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ModalHostViewShadowNode.h; path = react/renderer/components/modal/ModalHostViewShadowNode.h; sourceTree = \"<group>\"; };\n\t\tA5FD51AD36118D278A13D28B6A1C0F24 /* MeasureMode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MeasureMode.h; sourceTree = \"<group>\"; };\n\t\tA602AFB5786A8427B22008771FA2A005 /* ImageState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ImageState.h; path = react/renderer/components/image/ImageState.h; sourceTree = \"<group>\"; };\n\t\tA6072D5AD4221696B9DE9D90F1EB0439 /* Foreach-inl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"Foreach-inl.h\"; path = \"folly/container/Foreach-inl.h\"; sourceTree = \"<group>\"; };\n\t\tA613E889F5C29F0DAC3CCA3F322423D6 /* RCTStyleAnimatedNode.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTStyleAnimatedNode.mm; sourceTree = \"<group>\"; };\n\t\tA616744A9B894FE3A9A3A1E53EA13CA3 /* React-Fabric-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-Fabric-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\tA67702A5BB9FE81CBF2BBE1340D12764 /* Float.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Float.h; sourceTree = \"<group>\"; };\n\t\tA67E85E5F06FDA406D3A1B378BDF0C5C /* React-runtimescheduler */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-runtimescheduler\"; path = \"libReact-runtimescheduler.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA68E5A9B69A3BA0FD52CAF7A354EC93B /* React-RCTNetwork */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-RCTNetwork\"; path = \"libReact-RCTNetwork.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA6A3F0A2B90931BC1EC1C3E21381C797 /* TextInputState.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = TextInputState.cpp; path = react/renderer/components/textinput/platform/ios/react/renderer/components/iostextinput/TextInputState.cpp; sourceTree = \"<group>\"; };\n\t\tA6BB42C32564D7C067A75160B7457050 /* ScopeGuard.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ScopeGuard.cpp; path = folly/ScopeGuard.cpp; sourceTree = \"<group>\"; };\n\t\tA6D5BA68A42EABFFF8C42BAFF6B32E74 /* RCTCxxInspectorPackagerConnectionDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTCxxInspectorPackagerConnectionDelegate.h; sourceTree = \"<group>\"; };\n\t\tA6D702ACCFE3931509F2790C6E153783 /* RCTTouchHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTTouchHandler.h; sourceTree = \"<group>\"; };\n\t\tA6E21B3D9A76F241B93CEF7D2AA19709 /* New.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = New.h; path = folly/lang/New.h; sourceTree = \"<group>\"; };\n\t\tA71AF6D224DB5B45B4A632DC900459A4 /* fi.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = fi.lproj; path = React/I18n/strings/fi.lproj; sourceTree = \"<group>\"; };\n\t\tA7237AA79C8E933F1CAB9DE0BDD0B0A5 /* HostPlatformColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = HostPlatformColor.h; sourceTree = \"<group>\"; };\n\t\tA73C90F6C769770D58136250FCF48CCC /* React-hermes.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-hermes.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tA74ED5352ACAC24B76D223C19F8C62F3 /* JsArgumentHelpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = JsArgumentHelpers.h; sourceTree = \"<group>\"; };\n\t\tA75D554108476D6BB8046C09E3577B9C /* RuntimeExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RuntimeExecutor.h; path = ReactCommon/RuntimeExecutor.h; sourceTree = \"<group>\"; };\n\t\tA7BB8379D1CD88BE60A5A0D33D8572A2 /* EventEmitter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EventEmitter.h; path = react/renderer/core/EventEmitter.h; sourceTree = \"<group>\"; };\n\t\tA7C3FA3DEC4092F63BB39E1F2566D4BC /* React-runtimeexecutor.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-runtimeexecutor.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tA7C7A0603C70B03A5BAB896F01F15E47 /* ConcreteShadowNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ConcreteShadowNode.h; path = react/renderer/core/ConcreteShadowNode.h; sourceTree = \"<group>\"; };\n\t\tA7CDF9E97D044762C37CF380DC086899 /* AtomicIntrusiveLinkedList.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AtomicIntrusiveLinkedList.h; path = folly/AtomicIntrusiveLinkedList.h; sourceTree = \"<group>\"; };\n\t\tA7DC83484741B6CEE36700BCB855A982 /* ShadowView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ShadowView.h; path = react/renderer/mounting/ShadowView.h; sourceTree = \"<group>\"; };\n\t\tA7E2525A0E66EF3136FD4342856314BC /* RCTReconnectingWebSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RCTReconnectingWebSocket.m; path = Libraries/WebSocket/RCTReconnectingWebSocket.m; sourceTree = \"<group>\"; };\n\t\tA7FEE6ECF7F217445EBD97C857669637 /* RCTTiming.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTTiming.h; path = React/CoreModules/RCTTiming.h; sourceTree = \"<group>\"; };\n\t\tA807F600D199623AAC1E47F99AD43C8F /* WatermelonDB-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"WatermelonDB-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\tA80A385542A9347C200F57687297EA39 /* simdjson-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"simdjson-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\tA846AD31825FC26747481C82D51B3091 /* RCTInputAccessoryShadowView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTInputAccessoryShadowView.mm; sourceTree = \"<group>\"; };\n\t\tA854CDECEC563F33590796054B7822E0 /* not_null-inl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"not_null-inl.h\"; path = \"folly/memory/not_null-inl.h\"; sourceTree = \"<group>\"; };\n\t\tA85C9B1C1144724CD503C69AEA9FCD8B /* RCTShadowView+Internal.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"RCTShadowView+Internal.m\"; sourceTree = \"<group>\"; };\n\t\tA8AFB5F8828D81AB1CE785F5BD4DC61F /* TextMeasureCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TextMeasureCache.h; path = react/renderer/textlayoutmanager/TextMeasureCache.h; sourceTree = \"<group>\"; };\n\t\tA8CB248587D48F0A957641CB162717A4 /* React-nativeconfig-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-nativeconfig-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\tA8FBD27727A3838365F69F39FCE1378C /* zh-Hans.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = \"zh-Hans.lproj\"; path = \"React/I18n/strings/zh-Hans.lproj\"; sourceTree = \"<group>\"; };\n\t\tA945AE383969D5B4AC29974625C53F64 /* Rcu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Rcu.h; path = folly/synchronization/Rcu.h; sourceTree = \"<group>\"; };\n\t\tA956484ABC9353D13F5C213DFF6F76A7 /* RCTDecayAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTDecayAnimation.h; sourceTree = \"<group>\"; };\n\t\tA97083B6B19B7182A30872D4EBFEBE41 /* simdjson.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = simdjson.h; path = src/simdjson.h; sourceTree = \"<group>\"; };\n\t\tA9951E633F11568F42B8CA2DB0EAAE73 /* RCTModalManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTModalManager.m; sourceTree = \"<group>\"; };\n\t\tA9C67AC080A782225408DA978D1DA4CA /* conversions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = conversions.h; path = react/renderer/components/image/conversions.h; sourceTree = \"<group>\"; };\n\t\tAA1553BA7C531B0C6FB8F13D06F2F39B /* RCTConvert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTConvert.h; sourceTree = \"<group>\"; };\n\t\tAA29C6591A2E715C33B132EAC7AF7008 /* RCTJSIExecutorRuntimeInstaller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTJSIExecutorRuntimeInstaller.h; sourceTree = \"<group>\"; };\n\t\tAA3A3C340B0E34E2DE91A75386812EC9 /* utilities.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = utilities.cc; path = src/utilities.cc; sourceTree = \"<group>\"; };\n\t\tAA78032AF49201693A01E81C17C66EA3 /* RCTShadowView+Layout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"RCTShadowView+Layout.m\"; sourceTree = \"<group>\"; };\n\t\tAAB226E4AB2DF48BAF6AC83AC49AC1CD /* RCTRedBox.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTRedBox.h; path = React/CoreModules/RCTRedBox.h; sourceTree = \"<group>\"; };\n\t\tAAD779B1757E51874AD3E315AE0911BF /* RCTNativeModule.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTNativeModule.mm; sourceTree = \"<group>\"; };\n\t\tAAE64CF21F806223D54976C43C7CA94B /* RCTAppDelegate.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTAppDelegate.mm; sourceTree = \"<group>\"; };\n\t\tAAF4DA1DA2D688AADC65A0DA9B5471DF /* SRError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRError.h; path = SocketRocket/Internal/Utilities/SRError.h; sourceTree = \"<group>\"; };\n\t\tAB1459102548D6C97BDF32F7673BD1DC /* Checksum.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Checksum.h; path = folly/hash/Checksum.h; sourceTree = \"<group>\"; };\n\t\tAB17B662459CE9B65E9A84AF92104DEF /* YGPixelGrid.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = YGPixelGrid.cpp; path = yoga/YGPixelGrid.cpp; sourceTree = \"<group>\"; };\n\t\tAB3065BC1723E238FF985D2A37F0A542 /* RCT-Folly.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"RCT-Folly.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tAB6B32F88010B897C8CBEDA90F51EF81 /* SimpleSimdStringUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SimpleSimdStringUtils.h; path = folly/detail/SimpleSimdStringUtils.h; sourceTree = \"<group>\"; };\n\t\tAB89B71C07D924F2DA582CF6A4C3CFA4 /* RCTDivisionAnimatedNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTDivisionAnimatedNode.h; sourceTree = \"<group>\"; };\n\t\tABA37D7615C32B1F5B407A5EE086D7F7 /* Node.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Node.h; sourceTree = \"<group>\"; };\n\t\tABA56E2973B5F2DA40756B56701FEC9D /* InspectorInterfaces.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = InspectorInterfaces.h; sourceTree = \"<group>\"; };\n\t\tAC04A5C67B4CC06104E1FAC9CDF58712 /* SharedMutex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SharedMutex.h; path = folly/SharedMutex.h; sourceTree = \"<group>\"; };\n\t\tAC1448E3360F6A62DEB6D6BE3EACB26A /* ParagraphEventEmitter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ParagraphEventEmitter.cpp; path = react/renderer/components/text/ParagraphEventEmitter.cpp; sourceTree = \"<group>\"; };\n\t\tAC18E26348C64BD7E409DF012EC8FD1E /* ComponentDescriptors.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ComponentDescriptors.h; path = react/renderer/components/rncore/ComponentDescriptors.h; sourceTree = \"<group>\"; };\n\t\tAC18F953AA41F612F2CB8153565DB590 /* TextLayoutManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = TextLayoutManager.mm; sourceTree = \"<group>\"; };\n\t\tAC1A3A6597F7D2D59AD0CE67E1A09CD2 /* RCTLegacyViewManagerInteropComponentView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTLegacyViewManagerInteropComponentView.mm; sourceTree = \"<group>\"; };\n\t\tACA2D560DF5674F43C2F0CF72BCBF485 /* RCTImageLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTImageLoader.h; path = Libraries/Image/RCTImageLoader.h; sourceTree = \"<group>\"; };\n\t\tACE440831164AF324B22178CA5BE40D0 /* FBLazyVector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBLazyVector.h; path = FBLazyVector/FBLazyVector.h; sourceTree = \"<group>\"; };\n\t\tAD0288743440505A088DDFA69CE73173 /* RCTScrollViewManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTScrollViewManager.m; sourceTree = \"<group>\"; };\n\t\tAD09CCE53769CA1F7BC1031AEBE1E2CE /* uk.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = uk.lproj; path = React/I18n/strings/uk.lproj; sourceTree = \"<group>\"; };\n\t\tAD13EA361260D530BA7944F0CFC046E1 /* RCTParserUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTParserUtils.m; sourceTree = \"<group>\"; };\n\t\tAD16D5AA10E8416443D8D1FF1460C44B /* Format.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Format.h; path = folly/Format.h; sourceTree = \"<group>\"; };\n\t\tAD18C7CE1E7A5577FEB2D0F7000A7E5F /* ko.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = ko.lproj; path = React/I18n/strings/ko.lproj; sourceTree = \"<group>\"; };\n\t\tAD2710EC72C624EB87F820405512AA45 /* React-Fabric.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-Fabric.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tAD29B45C17572843FBF6146FD5BF87E6 /* SRIOConsumerPool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRIOConsumerPool.h; path = SocketRocket/Internal/IOConsumer/SRIOConsumerPool.h; sourceTree = \"<group>\"; };\n\t\tAD4769F2911766BA548AFD0FFEDF8426 /* RCTScrollContentViewManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTScrollContentViewManager.h; sourceTree = \"<group>\"; };\n\t\tAD4FFB5F1B30B5584201585D67221D38 /* RCTLogBox.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTLogBox.mm; sourceTree = \"<group>\"; };\n\t\tAD601E06293D3A3930BE7C2006B41F2B /* SaturatingSemaphore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SaturatingSemaphore.h; path = folly/synchronization/SaturatingSemaphore.h; sourceTree = \"<group>\"; };\n\t\tAD69277D74C06C01F9C13CD77A13038E /* RCTIdentifierPool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTIdentifierPool.h; sourceTree = \"<group>\"; };\n\t\tAD77E6961ACDBD3730EC6702236118AC /* RootProps.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = RootProps.cpp; path = react/renderer/components/root/RootProps.cpp; sourceTree = \"<group>\"; };\n\t\tAD945009ED5CD2E57F93715472E7BAAC /* PropsMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PropsMacros.h; path = react/renderer/core/PropsMacros.h; sourceTree = \"<group>\"; };\n\t\tADB0726235787BE84DE49AC4624711EA /* tr.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = tr.lproj; path = React/I18n/strings/tr.lproj; sourceTree = \"<group>\"; };\n\t\tADC21E6203A42D717BE49E8E588CB0D5 /* SplitStringSimdImpl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SplitStringSimdImpl.h; path = folly/detail/SplitStringSimdImpl.h; sourceTree = \"<group>\"; };\n\t\tADD320EC4221CCC1B76BB433ED455CEC /* React-debug.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-debug.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tADF560A03C559A77C9107C87619CB4E7 /* PageAgent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PageAgent.h; sourceTree = \"<group>\"; };\n\t\tAE1B2934FABC52774A42A595531E4F6A /* ComponentDescriptors.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ComponentDescriptors.cpp; path = react/renderer/components/rncore/ComponentDescriptors.cpp; sourceTree = \"<group>\"; };\n\t\tAE3CEE292BC38DDDB735B092E8F32A0D /* RCTDebuggingOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTDebuggingOverlay.h; sourceTree = \"<group>\"; };\n\t\tAE414480637A9BC7CFC2B70C16C12024 /* AttributedString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AttributedString.h; path = react/renderer/attributedstring/AttributedString.h; sourceTree = \"<group>\"; };\n\t\tAE45D4CB885CACA4B317542378B0D81F /* NSURLRequest+SRWebSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"NSURLRequest+SRWebSocket.h\"; path = \"SocketRocket/NSURLRequest+SRWebSocket.h\"; sourceTree = \"<group>\"; };\n\t\tAE55EB0D8F0641B6A3B9BC048B6A5DF7 /* RawTextShadowNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RawTextShadowNode.h; path = react/renderer/components/text/RawTextShadowNode.h; sourceTree = \"<group>\"; };\n\t\tAE729B821BDA784B45AFF8A65039D05F /* React-utils-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-utils-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\tAE8331A8B19DE05088A3AF1C06D9599D /* ShadowNode.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ShadowNode.cpp; path = react/renderer/core/ShadowNode.cpp; sourceTree = \"<group>\"; };\n\t\tAE85DC12DF3E30AE258ACC3C9861E350 /* JSBigString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = JSBigString.h; sourceTree = \"<group>\"; };\n\t\tAE8C9FA47D47B64CE6F506ABE68FCF06 /* DiscriminatedPtrDetail.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DiscriminatedPtrDetail.h; path = folly/detail/DiscriminatedPtrDetail.h; sourceTree = \"<group>\"; };\n\t\tAEA7713221A3B353A10E5D4A3E848D96 /* LayoutConstraints.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LayoutConstraints.h; path = react/renderer/core/LayoutConstraints.h; sourceTree = \"<group>\"; };\n\t\tAEB455EDDB077C84F1FFD562DFFBA54E /* RCTReconnectingWebSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTReconnectingWebSocket.h; path = Libraries/WebSocket/RCTReconnectingWebSocket.h; sourceTree = \"<group>\"; };\n\t\tAEBD60021620778CF66B52B3BB90BDF5 /* stubs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stubs.h; path = react/renderer/mounting/stubs.h; sourceTree = \"<group>\"; };\n\t\tAEC06D85B7F38501A5719E0618BBDCB6 /* RCTBridgeProxy.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTBridgeProxy.mm; sourceTree = \"<group>\"; };\n\t\tAEC9AF86778FE1E50193C715FFD9DE49 /* React-debug.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-debug.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\tAEE7D821FE2F99E06D93025BCCDE581E /* RCTSafeAreaView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSafeAreaView.h; sourceTree = \"<group>\"; };\n\t\tAEF17D14D0B0DF8A55346CEFDBEA3396 /* RCTSegmentedControlManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSegmentedControlManager.h; sourceTree = \"<group>\"; };\n\t\tAEF49BE28E7D87B31F7411604BFADC49 /* RuntimeSchedulerCallInvoker.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = RuntimeSchedulerCallInvoker.cpp; sourceTree = \"<group>\"; };\n\t\tAF0447D9E9E638217D6EABE45C7E0632 /* RCTMultiplicationAnimatedNode.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTMultiplicationAnimatedNode.mm; sourceTree = \"<group>\"; };\n\t\tAF18A646E6EA4CC7C73600700D4BDAF3 /* PageAgent.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = PageAgent.cpp; sourceTree = \"<group>\"; };\n\t\tAF297E87957501039602459E49565C20 /* vlog_is_on.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = vlog_is_on.cc; path = src/vlog_is_on.cc; sourceTree = \"<group>\"; };\n\t\tAF67768C4A075A1A0B7A20EF50D517BD /* RCTMultipartStreamReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTMultipartStreamReader.h; sourceTree = \"<group>\"; };\n\t\tAF7E566A1E46C435965177310C115248 /* UnimplementedViewShadowNode.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = UnimplementedViewShadowNode.cpp; path = react/renderer/components/unimplementedview/UnimplementedViewShadowNode.cpp; sourceTree = \"<group>\"; };\n\t\tAF94AB49F3DFCBD87BA7862CC44A3D1D /* UIManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UIManager.h; path = react/renderer/uimanager/UIManager.h; sourceTree = \"<group>\"; };\n\t\tAF9D4809815C39CA6793B26579FDDA54 /* TurboModule.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = TurboModule.cpp; path = react/nativemodule/core/ReactCommon/TurboModule.cpp; sourceTree = \"<group>\"; };\n\t\tAFAEF578C155F412D05E26AF9E63C602 /* AtFork.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = AtFork.cpp; path = folly/system/AtFork.cpp; sourceTree = \"<group>\"; };\n\t\tAFB08F045558C6DADC89C84CC798C71B /* RCTMultipartDataTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTMultipartDataTask.h; sourceTree = \"<group>\"; };\n\t\tAFC58F8C987D57066ED35DEFA2DA396E /* React.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = React.podspec; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\tAFE2AC3DE4D98F6A8B6D36ADB8E51F46 /* AtomicUtil-inl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"AtomicUtil-inl.h\"; path = \"folly/synchronization/AtomicUtil-inl.h\"; sourceTree = \"<group>\"; };\n\t\tB00F5D1C6554CAE9A8E6D6AE4ECFE335 /* TextInputEventEmitter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TextInputEventEmitter.h; path = react/renderer/components/textinput/platform/ios/react/renderer/components/iostextinput/TextInputEventEmitter.h; sourceTree = \"<group>\"; };\n\t\tB01C2C65E7B02816E8148154C56575AF /* MethodCall.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = MethodCall.cpp; sourceTree = \"<group>\"; };\n\t\tB02E6E730A273BCBAAB434BD6D2576E3 /* MicroLock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MicroLock.h; path = folly/MicroLock.h; sourceTree = \"<group>\"; };\n\t\tB02F47D538066B1D13C474E20A59039A /* InspectorPackagerConnectionImpl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = InspectorPackagerConnectionImpl.h; sourceTree = \"<group>\"; };\n\t\tB041282BB6E0CD0755E03B990F035982 /* React-RCTBlob-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-RCTBlob-dummy.m\"; sourceTree = \"<group>\"; };\n\t\tB06BDA64A8C366F85CA16B5D0E328839 /* RCTViewComponentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTViewComponentView.h; sourceTree = \"<group>\"; };\n\t\tB07F73246764E395281393D1BFD73751 /* logging.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = logging.cc; path = src/logging.cc; sourceTree = \"<group>\"; };\n\t\tB0846154EC35111B28426222762CF880 /* React-RCTFabric.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-RCTFabric.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tB0A1643BF71DE16FFA228713DA55E535 /* CacheLocality.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CacheLocality.h; path = folly/concurrency/CacheLocality.h; sourceTree = \"<group>\"; };\n\t\tB0AF45BF7087251B0C904F885ED8178D /* RCTAccessibilityElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTAccessibilityElement.h; sourceTree = \"<group>\"; };\n\t\tB0F4AFE806278086D88DF7F801882C7B /* RCTImageLoaderWithAttributionProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTImageLoaderWithAttributionProtocol.h; path = Libraries/Image/RCTImageLoaderWithAttributionProtocol.h; sourceTree = \"<group>\"; };\n\t\tB10A2905CFE3A22DA9F68FED8B2A937E /* RCTTypeSafety.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = RCTTypeSafety.podspec; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\tB10FA4019F5C607FA08931E27E127784 /* React-RCTVibration.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-RCTVibration.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\tB1492BA96B69489FCA50F4BBFD32CDD2 /* bignum-dtoa.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = \"bignum-dtoa.cc\"; path = \"double-conversion/bignum-dtoa.cc\"; sourceTree = \"<group>\"; };\n\t\tB159432A0D462B5E94046B7320846BC4 /* CArray.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CArray.h; path = folly/lang/CArray.h; sourceTree = \"<group>\"; };\n\t\tB17B5D76BCAC42472B55462BAE850852 /* React-graphics.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-graphics.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tB17C5DF58EBCAD0079663296EFB0D99F /* FMResultSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = FMResultSet.m; sourceTree = \"<group>\"; };\n\t\tB18233FA84BEC01AFCB96FC16BD3B983 /* EventEmitters.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = EventEmitters.cpp; path = react/renderer/components/rncore/EventEmitters.cpp; sourceTree = \"<group>\"; };\n\t\tB1BC0D650AD4A6CB2A62DB5D7C94556A /* WatermelonDB */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = WatermelonDB; path = libWatermelonDB.a; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tB1C2DDC7533E6E8B4EB9893DC9F6FDB1 /* CalculateLayout.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = CalculateLayout.cpp; sourceTree = \"<group>\"; };\n\t\tB1D124CF8B584CB0F39373CE1FD657A6 /* ParagraphState.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ParagraphState.cpp; path = react/renderer/components/text/ParagraphState.cpp; sourceTree = \"<group>\"; };\n\t\tB1E12CAD2C6FB4F2DF64F7CCC6D15E3F /* EventPriority.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EventPriority.h; path = react/renderer/core/EventPriority.h; sourceTree = \"<group>\"; };\n\t\tB1F4D64B534E21B5E81E8A4107B004EE /* RCTModuleData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTModuleData.h; sourceTree = \"<group>\"; };\n\t\tB222607BD79B79EA46BBA68F606016E7 /* stl_logging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stl_logging.h; path = src/glog/stl_logging.h; sourceTree = \"<group>\"; };\n\t\tB286D2E443FD0AC7BDE2FA335AE099A9 /* RCTModulesConformingToProtocolsProvider.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTModulesConformingToProtocolsProvider.mm; sourceTree = \"<group>\"; };\n\t\tB2912664908CB6F78177A7A284D257A7 /* RCTLocalAssetImageLoader.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTLocalAssetImageLoader.mm; sourceTree = \"<group>\"; };\n\t\tB2A78B7CA6B87E3C5B857F9EB9B7AF87 /* RCTDeprecation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTDeprecation.h; sourceTree = \"<group>\"; };\n\t\tB2DA18CEB3A1B39D6DEFDA830C70B7AE /* SafeAssert.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = SafeAssert.cpp; path = folly/lang/SafeAssert.cpp; sourceTree = \"<group>\"; };\n\t\tB32465A7B304C55D416657F5078DC373 /* color.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = color.h; path = include/fmt/color.h; sourceTree = \"<group>\"; };\n\t\tB32CE247FEEC1814744A3421CB654796 /* HeterogeneousAccess-fwd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"HeterogeneousAccess-fwd.h\"; path = \"folly/container/HeterogeneousAccess-fwd.h\"; sourceTree = \"<group>\"; };\n\t\tB357588581A44158631A618472611CF2 /* RCTInputAccessoryComponentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTInputAccessoryComponentView.h; sourceTree = \"<group>\"; };\n\t\tB3842DDC8C8C33A9D3DB8FB30835698E /* RCTManagedPointer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTManagedPointer.h; sourceTree = \"<group>\"; };\n\t\tB3A27AAA848CC83E397DC39A9E46B682 /* RCTWebSocketExecutor.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTWebSocketExecutor.mm; sourceTree = \"<group>\"; };\n\t\tB41CA2872B3100D34E5916BD9747FFA2 /* Replaceable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Replaceable.h; path = folly/Replaceable.h; sourceTree = \"<group>\"; };\n\t\tB46136D54F40F23675446372805B6B0D /* GroupVarint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GroupVarint.h; path = folly/GroupVarint.h; sourceTree = \"<group>\"; };\n\t\tB4731BEAE5B9F1A65FB492F06B455F7F /* Stdlib.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Stdlib.h; path = folly/portability/Stdlib.h; sourceTree = \"<group>\"; };\n\t\tB49E927D98F0202C6C5CD21E1077E16E /* ReactCommon.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ReactCommon.release.xcconfig; sourceTree = \"<group>\"; };\n\t\tB54D8461C2AF60CF1BF611F2D31ED2EB /* ImageProps.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ImageProps.cpp; path = react/renderer/components/image/ImageProps.cpp; sourceTree = \"<group>\"; };\n\t\tB597F21D264FDF22B451D67257AA9EF7 /* RCTUIUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTUIUtils.m; sourceTree = \"<group>\"; };\n\t\tB5C07CBA21F57FACAAB67EAB0200D145 /* RCTSurfaceHostingProxyRootView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTSurfaceHostingProxyRootView.mm; sourceTree = \"<group>\"; };\n\t\tB5CA3E3C33E4FE87189CA5272539AA13 /* RCTConvert.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTConvert.mm; sourceTree = \"<group>\"; };\n\t\tB5F4950574A43023D083A3E3731760A1 /* RCTSwitchComponentView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTSwitchComponentView.mm; sourceTree = \"<group>\"; };\n\t\tB640A9964EA3E8305895667CD6375FAB /* HermesInstance.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = HermesInstance.cpp; path = hermes/HermesInstance.cpp; sourceTree = \"<group>\"; };\n\t\tB6501460FCAA027C674AB185B605DE1E /* RCTTextAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTTextAttributes.h; path = Libraries/Text/RCTTextAttributes.h; sourceTree = \"<group>\"; };\n\t\tB6577792B784C0F015CBBC9C2A12DDEC /* String.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = String.h; path = folly/portability/String.h; sourceTree = \"<group>\"; };\n\t\tB69DAF065EE01F48CB5FBAC10F00EDE0 /* RCTCxxInspectorPackagerConnectionDelegate.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTCxxInspectorPackagerConnectionDelegate.mm; sourceTree = \"<group>\"; };\n\t\tB6A866CA3EE1ADEEDF264EFCEC0F0F57 /* std.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = std.h; path = include/fmt/std.h; sourceTree = \"<group>\"; };\n\t\tB6B15808FE6325BFE9D87ECA96CA3A11 /* ObjCTimerRegistry.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = ObjCTimerRegistry.mm; path = ReactCommon/ObjCTimerRegistry.mm; sourceTree = \"<group>\"; };\n\t\tB6F37D13CE5A1DE0E74413865B70883A /* Poly-inl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"Poly-inl.h\"; path = \"folly/Poly-inl.h\"; sourceTree = \"<group>\"; };\n\t\tB70C6129736E666B55CAAA7398C8E6CF /* React-RCTAnimation.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-RCTAnimation.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\tB711337B1DBE8FDF8CF854026E0D14C1 /* Touch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Touch.h; path = react/renderer/components/view/Touch.h; sourceTree = \"<group>\"; };\n\t\tB7610E9FDE749C16C0B1CDAAF3B2DDC2 /* React-utils */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-utils\"; path = \"libReact-utils.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tB77DA9E6D8A90D0BDB388D5130CFD6A5 /* React-FabricImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-FabricImage-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\tB797800645D9DCAD28A63367CF4B5E31 /* raw_logging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = raw_logging.h; path = src/glog/raw_logging.h; sourceTree = \"<group>\"; };\n\t\tB7DAE91AFA1AEC4FD04392E412D1D4CE /* RCTExceptionsManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTExceptionsManager.mm; sourceTree = \"<group>\"; };\n\t\tB83DFBC0279E4DF8CFA602D622946926 /* CheckedMath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CheckedMath.h; path = folly/lang/CheckedMath.h; sourceTree = \"<group>\"; };\n\t\tB8426E288C9F4E8EADBFDB047F2B7941 /* RCTUITextField.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTUITextField.h; sourceTree = \"<group>\"; };\n\t\tB84580A87121CAF61CB478AB93D9261B /* LayoutContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LayoutContext.h; path = react/renderer/core/LayoutContext.h; sourceTree = \"<group>\"; };\n\t\tB862E1391D01BF787FE43136140D8C85 /* LongLivedObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LongLivedObject.h; path = react/bridging/LongLivedObject.h; sourceTree = \"<group>\"; };\n\t\tB868435FC1BB39A3949840802519A500 /* RCTAccessibilityElement.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTAccessibilityElement.mm; sourceTree = \"<group>\"; };\n\t\tB86E6473CEA7651AF56AB4A0DE22037C /* RCTGIFImageDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTGIFImageDecoder.h; path = Libraries/Image/RCTGIFImageDecoder.h; sourceTree = \"<group>\"; };\n\t\tB87758E567704381060EF12FB7B025AB /* instrumentation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = instrumentation.h; path = jsi/instrumentation.h; sourceTree = \"<group>\"; };\n\t\tB8BDA25E90049F9C70AA8B349A93426F /* React-graphics.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-graphics.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tB8C5097DA5EAA46AB4FF88AA6F8D6F5B /* Database-batch.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = \"Database-batch.cpp\"; sourceTree = \"<group>\"; };\n\t\tB8E9BBBEFDC785C048DDEF9EA28FFED5 /* ParagraphState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ParagraphState.h; path = react/renderer/components/text/ParagraphState.h; sourceTree = \"<group>\"; };\n\t\tB8EE883969234B8D43CEA19B78B08828 /* Windows.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Windows.h; path = folly/portability/Windows.h; sourceTree = \"<group>\"; };\n\t\tB96DBA623627412849117547371D9FEC /* RCTCxxUtils.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTCxxUtils.mm; sourceTree = \"<group>\"; };\n\t\tB97F33E9BF0E6E5FD86B0667D950EEC9 /* de.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = de.lproj; path = React/I18n/strings/de.lproj; sourceTree = \"<group>\"; };\n\t\tB9CC2B87AA979A0CE226E57B8BE306A7 /* Malloc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Malloc.h; path = folly/memory/Malloc.h; sourceTree = \"<group>\"; };\n\t\tB9CF763D328B9FF7CD87693E3153F680 /* RuntimeScheduler.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = RuntimeScheduler.cpp; sourceTree = \"<group>\"; };\n\t\tB9E96DFFC840B1E714C6D186A6B41717 /* CxxNativeModule.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = CxxNativeModule.cpp; sourceTree = \"<group>\"; };\n\t\tB9F029DADA46B18ADF047508F6813174 /* StyleValueHandle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = StyleValueHandle.h; sourceTree = \"<group>\"; };\n\t\tB9FF361F61B7A378542F02A30393DF63 /* IntrusiveHeap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IntrusiveHeap.h; path = folly/container/IntrusiveHeap.h; sourceTree = \"<group>\"; };\n\t\tBA4DC46A209C68A22450F45E72C9E535 /* SRURLUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRURLUtilities.m; path = SocketRocket/Internal/Utilities/SRURLUtilities.m; sourceTree = \"<group>\"; };\n\t\tBA7531AA0EDD6697C7D87500F8EFA087 /* LayoutAnimationKeyFrameManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LayoutAnimationKeyFrameManager.h; path = react/renderer/animations/LayoutAnimationKeyFrameManager.h; sourceTree = \"<group>\"; };\n\t\tBA8E2E00FBECFA8789E6D5D77E043D32 /* hermes_tracing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = hermes_tracing.h; path = destroot/include/hermes/hermes_tracing.h; sourceTree = \"<group>\"; };\n\t\tBA9901F19F900300AC2E7122D5AC01A6 /* RCTHost+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"RCTHost+Internal.h\"; path = \"ReactCommon/RCTHost+Internal.h\"; sourceTree = \"<group>\"; };\n\t\tBAA3CCBDA9FDF8609E0495A48B080979 /* MapBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MapBuffer.h; path = react/renderer/mapbuffer/MapBuffer.h; sourceTree = \"<group>\"; };\n\t\tBAB8070C18EDCE8B518A4AD6B7ABA7D4 /* RCTErrorCustomizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTErrorCustomizer.h; sourceTree = \"<group>\"; };\n\t\tBACC1D6F0CF3D0892CC092113C7FD1BA /* WeakFamilyRegistry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WeakFamilyRegistry.h; path = react/renderer/leakchecker/WeakFamilyRegistry.h; sourceTree = \"<group>\"; };\n\t\tBAD62DA0698330C52546D1DD499A6B27 /* RCTJavaScriptExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTJavaScriptExecutor.h; sourceTree = \"<group>\"; };\n\t\tBAF67687A73C975DC1D89F35DD7A68A5 /* SRSIMDHelpers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRSIMDHelpers.m; path = SocketRocket/Internal/Utilities/SRSIMDHelpers.m; sourceTree = \"<group>\"; };\n\t\tBB06B409B4DDC6FA88630157B314F883 /* HazptrHolder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HazptrHolder.h; path = folly/synchronization/HazptrHolder.h; sourceTree = \"<group>\"; };\n\t\tBB2D4F3D9EA6B428CD822160742EC53F /* SysSyscall.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SysSyscall.h; path = folly/portability/SysSyscall.h; sourceTree = \"<group>\"; };\n\t\tBB2E2D07807B6BB7451133707BC5FF03 /* ShadowViewMutation.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ShadowViewMutation.cpp; path = react/renderer/mounting/ShadowViewMutation.cpp; sourceTree = \"<group>\"; };\n\t\tBB7DBF3AC428AEC78260C9DC4CA49106 /* RCTAccessibilityManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTAccessibilityManager.mm; sourceTree = \"<group>\"; };\n\t\tBB8765CFA285D06EB4EA1DE8DE702634 /* React-hermes.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-hermes.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\tBB8A5342B551F92B8A2537BCC6ED51F5 /* SchedulerPriorityUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SchedulerPriorityUtils.h; sourceTree = \"<group>\"; };\n\t\tBB8ABBAD57F26EF6E656FCE9B68DB2F2 /* RCTUIImageViewAnimated.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTUIImageViewAnimated.mm; sourceTree = \"<group>\"; };\n\t\tBB96EF13B6D928DBB3A8D90C1ADF57D5 /* AbsoluteLayout.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = AbsoluteLayout.cpp; sourceTree = \"<group>\"; };\n\t\tBB971ED75CA1674F0FAAC4500BBC50A4 /* RCTSafeAreaViewManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTSafeAreaViewManager.m; sourceTree = \"<group>\"; };\n\t\tBBA46B29F3F06B0AEC0E48F4C7C99C23 /* Registration.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = Registration.cpp; sourceTree = \"<group>\"; };\n\t\tBBAA6714B59FDAB63CB3D51FFFAB5E9F /* SRMutex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRMutex.m; path = SocketRocket/Internal/Utilities/SRMutex.m; sourceTree = \"<group>\"; };\n\t\tBBC2C48E868D4877BF151ED8DFB3604A /* Sqlite.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = Sqlite.cpp; sourceTree = \"<group>\"; };\n\t\tBBCFDB39D48C37A3AF9AA77A7A2AFE14 /* SRSIMDHelpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRSIMDHelpers.h; path = SocketRocket/Internal/Utilities/SRSIMDHelpers.h; sourceTree = \"<group>\"; };\n\t\tBBDAB2AA9EAB8FF0DA4637A65C5425B5 /* RCTRequired.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = RCTRequired.podspec; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\tBBE2B529666092F7DEC3C687F33200F0 /* AtomicHashUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AtomicHashUtils.h; path = folly/detail/AtomicHashUtils.h; sourceTree = \"<group>\"; };\n\t\tBBFA4AD81E9D3D79B1B796B93AE70766 /* React-graphics-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-graphics-dummy.m\"; sourceTree = \"<group>\"; };\n\t\tBC22B5A34F36A3E0B23AF08AE83EE25D /* RCTPerformanceLoggerUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTPerformanceLoggerUtils.h; path = ReactCommon/RCTPerformanceLoggerUtils.h; sourceTree = \"<group>\"; };\n\t\tBC384C199B1347B14BCE2CC3091CC47B /* SRHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRHash.h; path = SocketRocket/Internal/Utilities/SRHash.h; sourceTree = \"<group>\"; };\n\t\tBC3E9A24F4A8A5F217C0B3D7CA9EBAEB /* RCTEventEmitter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTEventEmitter.m; sourceTree = \"<group>\"; };\n\t\tBC611E2FF7C83C727ED3ABB22AE435FC /* Conv.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = Conv.cpp; path = folly/Conv.cpp; sourceTree = \"<group>\"; };\n\t\tBC6B8699949BC42E05A2CD3F716AFC65 /* AtomicRef.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AtomicRef.h; path = folly/synchronization/AtomicRef.h; sourceTree = \"<group>\"; };\n\t\tBC8A1AA2067618E92E2DC37877060EA1 /* StaticSingletonManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = StaticSingletonManager.h; path = folly/detail/StaticSingletonManager.h; sourceTree = \"<group>\"; };\n\t\tBCA23E868E68363495BB8DE9AA165F77 /* RCTInputAccessoryViewManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTInputAccessoryViewManager.mm; sourceTree = \"<group>\"; };\n\t\tBCA4B995FCA633E532EC78345A862CC7 /* demangle.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = demangle.cc; path = src/demangle.cc; sourceTree = \"<group>\"; };\n\t\tBCA65CA4802405E6B52F20951F6A6E74 /* BaseTouch.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = BaseTouch.cpp; path = react/renderer/components/view/BaseTouch.cpp; sourceTree = \"<group>\"; };\n\t\tBCA6A0AD322E97D31E8AB398E6F754C1 /* Wrap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Wrap.h; sourceTree = \"<group>\"; };\n\t\tBCAC25D53F76C3CA7747058E179BEC03 /* Sealable.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = Sealable.cpp; path = react/renderer/core/Sealable.cpp; sourceTree = \"<group>\"; };\n\t\tBCB964356FC077875C6D5B2218AF31AE /* BaseTextProps.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = BaseTextProps.cpp; path = react/renderer/components/text/BaseTextProps.cpp; sourceTree = \"<group>\"; };\n\t\tBCE80CF8B841672C3A200AF86984A1ED /* SocketRocket-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"SocketRocket-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\tBD47E6AE7775E09A0E4B2548E31BD9A8 /* Baseline.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = Baseline.cpp; sourceTree = \"<group>\"; };\n\t\tBD485A11989B9D9DA494C47A98A5F09D /* TextLayoutContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TextLayoutContext.h; path = react/renderer/textlayoutmanager/TextLayoutContext.h; sourceTree = \"<group>\"; };\n\t\tBD52A822E13E3FBE427F01FAFF774941 /* Malloc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Malloc.h; path = folly/portability/Malloc.h; sourceTree = \"<group>\"; };\n\t\tBD52E6EAC24FFDEAD05FA9425D5C5A03 /* Scheduler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Scheduler.h; path = react/renderer/scheduler/Scheduler.h; sourceTree = \"<group>\"; };\n\t\tBD57ADA2122AD9C7A9EA86F634218B28 /* RCTInvalidating.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTInvalidating.h; sourceTree = \"<group>\"; };\n\t\tBD71E2539823621820F84384064C253A /* React-Core */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-Core\"; path = \"libReact-Core.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tBD845FCB6E8D03B954E98CC67262C224 /* React-ImageManager-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-ImageManager-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\tBD8C1858F1B1566DD6C1B389057F984F /* RCTRootContentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTRootContentView.h; sourceTree = \"<group>\"; };\n\t\tBD916666DA53F0458FF557DC851A7FEA /* ReactCommon.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ReactCommon.modulemap; sourceTree = \"<group>\"; };\n\t\tBDA3C52C76B2C3F5E9BA936CB0B3B9C6 /* fixed-dtoa.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"fixed-dtoa.h\"; path = \"double-conversion/fixed-dtoa.h\"; sourceTree = \"<group>\"; };\n\t\tBDC8FAF53DD63A22F83D735BBEC79C48 /* RCTAppDelegate+Protected.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"RCTAppDelegate+Protected.h\"; sourceTree = \"<group>\"; };\n\t\tBDC9CA0EA4B12AEE132FF43037AE8E00 /* RCTFileRequestHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTFileRequestHandler.h; path = Libraries/Network/RCTFileRequestHandler.h; sourceTree = \"<group>\"; };\n\t\tBDED2FDDA75EFFC4F049DF04CA2B0B69 /* React-ImageManager-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-ImageManager-dummy.m\"; sourceTree = \"<group>\"; };\n\t\tBDF4907BCEC9C6B68A50F5CBD6A193CA /* RCTTextLayoutManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTTextLayoutManager.mm; sourceTree = \"<group>\"; };\n\t\tBE03DA74B3DF71926399B020ADB5C3CC /* ReactMarker.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = ReactMarker.cpp; sourceTree = \"<group>\"; };\n\t\tBE2252C1E227B6B138921BA745C6ABC7 /* Traits.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Traits.h; path = folly/Traits.h; sourceTree = \"<group>\"; };\n\t\tBE5A44A54B39A676EB8ECEF3D4CF8E3D /* NetworkSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NetworkSocket.h; path = folly/net/NetworkSocket.h; sourceTree = \"<group>\"; };\n\t\tBEC2935F7CAC9628D23D98B726129B8A /* React-ImageManager.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-ImageManager.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tBEFECA4F48E22E7225529497330DEB8B /* RValueReferenceWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RValueReferenceWrapper.h; path = folly/lang/RValueReferenceWrapper.h; sourceTree = \"<group>\"; };\n\t\tBF031C91FD312DC63FF16FE7D183B230 /* Hint-inl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"Hint-inl.h\"; path = \"folly/lang/Hint-inl.h\"; sourceTree = \"<group>\"; };\n\t\tBF131B6BFD3FDF6FD3D006300FEC04E3 /* InputAccessoryState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = InputAccessoryState.h; path = react/renderer/components/inputaccessory/InputAccessoryState.h; sourceTree = \"<group>\"; };\n\t\tBF2A098BFA676BEB807B64FA44567B00 /* Props.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = Props.cpp; path = react/renderer/core/Props.cpp; sourceTree = \"<group>\"; };\n\t\tBF9077AF110CAC64D90AC1EDA3F0B610 /* RuntimeScheduler_Legacy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RuntimeScheduler_Legacy.h; sourceTree = \"<group>\"; };\n\t\tBFE0C7F1527F398A2A69185EBFCF677F /* RCTSurfaceStage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTSurfaceStage.m; sourceTree = \"<group>\"; };\n\t\tC00CAED0C07FE50074D84727D68C0B0A /* chrono.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = chrono.h; path = include/fmt/chrono.h; sourceTree = \"<group>\"; };\n\t\tC02156579770C940D02208439EF989EE /* Optional.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Optional.h; path = folly/Optional.h; sourceTree = \"<group>\"; };\n\t\tC02EAF482D8B4DE45E3A58A25AE1FA91 /* React-jserrorhandler */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-jserrorhandler\"; path = \"libReact-jserrorhandler.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tC042000B32A98F9B8FE68F105D95B8D4 /* SocketFastOpen.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SocketFastOpen.h; path = folly/detail/SocketFastOpen.h; sourceTree = \"<group>\"; };\n\t\tC047105E3027DC4381475187A7547D3D /* json.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = json.h; path = folly/json.h; sourceTree = \"<group>\"; };\n\t\tC04C2CB4CB7F9503B14959FFE4F63EC3 /* ResourceBundle-RCTI18nStrings-React-Core-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = \"ResourceBundle-RCTI18nStrings-React-Core-Info.plist\"; sourceTree = \"<group>\"; };\n\t\tC059BACE08D3A4EC8B1895D76B07DFE6 /* RCTFileReaderModule.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTFileReaderModule.mm; sourceTree = \"<group>\"; };\n\t\tC089C57BC7269AC9D829D12FB382C87C /* React-RCTBlob-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-RCTBlob-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\tC08BAC1C65562A0491860C45DF8E309A /* React-ImageManager.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = \"React-ImageManager.modulemap\"; sourceTree = \"<group>\"; };\n\t\tC09D1BCC94FFE3C6143459C161E5ACEF /* SRProxyConnect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRProxyConnect.h; path = SocketRocket/Internal/Proxy/SRProxyConnect.h; sourceTree = \"<group>\"; };\n\t\tC0BA0D275A8C8269E34CE4A1AD5CCF35 /* ScrollViewEventEmitter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ScrollViewEventEmitter.h; path = react/renderer/components/scrollview/ScrollViewEventEmitter.h; sourceTree = \"<group>\"; };\n\t\tC0C96A892BD79DFF4E7AD6082E8D7F4F /* RCTImageUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTImageUtils.h; path = Libraries/Image/RCTImageUtils.h; sourceTree = \"<group>\"; };\n\t\tC106E727DA66F2360E99B166ED1F9FBC /* SplitStringSimd.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = SplitStringSimd.cpp; path = folly/detail/SplitStringSimd.cpp; sourceTree = \"<group>\"; };\n\t\tC128E32800DBBBE7BD73B0DB2EA50A53 /* SanitizeLeak.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SanitizeLeak.h; path = folly/memory/SanitizeLeak.h; sourceTree = \"<group>\"; };\n\t\tC1761C0EF012288CCBB296F26485316A /* StyleLength.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = StyleLength.h; sourceTree = \"<group>\"; };\n\t\tC178BA891B154BE1B7A5B0CF16AFD27D /* TimerManager.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = TimerManager.cpp; sourceTree = \"<group>\"; };\n\t\tC1A69366D6E38FE28ED9651968AA7CF6 /* RCTPrimitives.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTPrimitives.h; path = Fabric/RCTPrimitives.h; sourceTree = \"<group>\"; };\n\t\tC1A919103EAC9813D236486C34FC0A21 /* React-RCTVibration */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-RCTVibration\"; path = \"libReact-RCTVibration.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tC1C38809AFDAD38F285E4E8EF2CAC4E6 /* RCTReactTaggedView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTReactTaggedView.mm; sourceTree = \"<group>\"; };\n\t\tC2130B95F426EC491603E0487645BCAC /* RCTMountingManagerDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTMountingManagerDelegate.h; sourceTree = \"<group>\"; };\n\t\tC22873AF49E658011AF710A68003CFF7 /* Database-query.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = \"Database-query.cpp\"; sourceTree = \"<group>\"; };\n\t\tC230DA31F009BBBB74798CD3CE527F8E /* F14MapFallback.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = F14MapFallback.h; path = folly/container/detail/F14MapFallback.h; sourceTree = \"<group>\"; };\n\t\tC25232818C41EA94B5E01D6E8903AC74 /* SafeAreaViewState.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = SafeAreaViewState.cpp; path = react/renderer/components/safeareaview/SafeAreaViewState.cpp; sourceTree = \"<group>\"; };\n\t\tC2A33F80F6DC091C0F0D9E733BE5F440 /* RCTFollyConvert.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTFollyConvert.mm; sourceTree = \"<group>\"; };\n\t\tC2CB66217B1E850D02CEDC8E10195C8A /* RCTNetworkTask.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTNetworkTask.mm; sourceTree = \"<group>\"; };\n\t\tC31DDCFAF4110E35C011007CE400A3D4 /* RCTRequired.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RCTRequired.release.xcconfig; sourceTree = \"<group>\"; };\n\t\tC32920036DAE3C20F1840181BC975BDA /* DoubleConversion-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"DoubleConversion-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\tC32C30AB7EF3BB474BC4B4DFD2FC61C0 /* RCTNativeAnimatedNodesManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTNativeAnimatedNodesManager.h; path = Libraries/NativeAnimation/RCTNativeAnimatedNodesManager.h; sourceTree = \"<group>\"; };\n\t\tC339EF963613DD1C7090A3FB6A1FE530 /* Database-jsi.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = \"Database-jsi.cpp\"; sourceTree = \"<group>\"; };\n\t\tC3701203D3AD5D881037196F72FD8BB7 /* RCTTextDecorationLineType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTTextDecorationLineType.h; sourceTree = \"<group>\"; };\n\t\tC37722D87F8B49DE9B83ACFE1C0A286A /* RCTVirtualTextViewManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTVirtualTextViewManager.h; sourceTree = \"<group>\"; };\n\t\tC3828F219A5F2BBBA5BAAA63512AB034 /* RawTextComponentDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RawTextComponentDescriptor.h; path = react/renderer/components/text/RawTextComponentDescriptor.h; sourceTree = \"<group>\"; };\n\t\tC3A0E653F207D8208760F39D89431669 /* ImageTelemetry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ImageTelemetry.h; path = react/renderer/imagemanager/ImageTelemetry.h; sourceTree = \"<group>\"; };\n\t\tC3A48141C5DA78A08DB8A2E1D30AB6D9 /* Syslog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Syslog.h; path = folly/portability/Syslog.h; sourceTree = \"<group>\"; };\n\t\tC3BDBA3AD30FF77F76488476893F6023 /* Pods-WatermelonTester-WatermelonTesterTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = \"Pods-WatermelonTester-WatermelonTesterTests-acknowledgements.markdown\"; sourceTree = \"<group>\"; };\n\t\tC3D78A44188C6EFED4F1A257A66CB85A /* JSExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = JSExecutor.h; sourceTree = \"<group>\"; };\n\t\tC488747CC15D138B30ADB8E498B04FF4 /* RCTLocalizationProvider.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RCTLocalizationProvider.mm; path = Fabric/RCTLocalizationProvider.mm; sourceTree = \"<group>\"; };\n\t\tC4B995B84A38F911427A6A5E55661B60 /* RCTFont.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTFont.h; sourceTree = \"<group>\"; };\n\t\tC4BD888172BAA8E70F8568E61F2FAEC1 /* React-Core.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-Core.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\tC4CDFBC1ECF32EC053DEB342DEE1B1C2 /* EventListener.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EventListener.h; path = react/renderer/core/EventListener.h; sourceTree = \"<group>\"; };\n\t\tC4EC4C02AFACADF949E7010ACACF4B85 /* Ordering.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Ordering.h; path = folly/lang/Ordering.h; sourceTree = \"<group>\"; };\n\t\tC4F24837075E70019E647A6DFDD4EB4B /* Scheduler.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = Scheduler.cpp; path = react/renderer/scheduler/Scheduler.cpp; sourceTree = \"<group>\"; };\n\t\tC508463B95043E7E700C0414CB55E23A /* Database-turboSync.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = \"Database-turboSync.cpp\"; sourceTree = \"<group>\"; };\n\t\tC51C4243A2C445225C52EAD81BE81D66 /* JSExecutor.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = JSExecutor.cpp; sourceTree = \"<group>\"; };\n\t\tC53D999F11FC29298A3B8D1AA6A8120E /* React-RCTAnimation-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-RCTAnimation-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\tC55375F5233C369562ED2EB95C0B34D6 /* RCTModalHostView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTModalHostView.h; sourceTree = \"<group>\"; };\n\t\tC56554BC73CCF6D61610A28081393A2A /* RCTModalHostViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTModalHostViewController.h; sourceTree = \"<group>\"; };\n\t\tC5691B7E1407E2A5D9208B3CCFBC6BDF /* Asm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Asm.h; path = folly/portability/Asm.h; sourceTree = \"<group>\"; };\n\t\tC57BEDEC1840FD8209B8FAD43401C99D /* LifoSem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LifoSem.h; path = folly/synchronization/LifoSem.h; sourceTree = \"<group>\"; };\n\t\tC5868FE71D3976986B3E0F19F4316F71 /* RCTVirtualTextView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTVirtualTextView.mm; sourceTree = \"<group>\"; };\n\t\tC5B05D7AD22B1F14DC12650D34552F69 /* RCTImageLoaderProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTImageLoaderProtocol.h; path = Libraries/Image/RCTImageLoaderProtocol.h; sourceTree = \"<group>\"; };\n\t\tC5B6D34CEC3C6CE2295EEDA15E8B7DD0 /* WMDatabaseBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = WMDatabaseBridge.h; sourceTree = \"<group>\"; };\n\t\tC609BD215F18E3B6ACB3641DBF1B200C /* React-rncore.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-rncore.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tC60F31851CF169CE81AA452AA4663164 /* RCTPlatform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTPlatform.h; path = React/CoreModules/RCTPlatform.h; sourceTree = \"<group>\"; };\n\t\tC6326DF244B84C66EDAF7AB7E2A7C98C /* ImageProps.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ImageProps.h; path = react/renderer/components/image/ImageProps.h; sourceTree = \"<group>\"; };\n\t\tC638A35CBFBC692CA7A2C5870600E066 /* UnstableLegacyViewManagerAutomaticComponentDescriptor.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = UnstableLegacyViewManagerAutomaticComponentDescriptor.cpp; path = react/renderer/components/legacyviewmanagerinterop/UnstableLegacyViewManagerAutomaticComponentDescriptor.cpp; sourceTree = \"<group>\"; };\n\t\tC6ADA6DF7563BCB106FC1DEC13D21F53 /* React-jsiexecutor-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-jsiexecutor-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\tC6CD5E1D0A40A3BD51F58A9904E1EF53 /* HermesExport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HermesExport.h; path = destroot/include/hermes/Public/HermesExport.h; sourceTree = \"<group>\"; };\n\t\tC6D26752B3DE0424E4FA28589D9108BA /* RCTCxxModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTCxxModule.h; sourceTree = \"<group>\"; };\n\t\tC7426F344668A4D9141914CE841C3534 /* SystraceSection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SystraceSection.h; sourceTree = \"<group>\"; };\n\t\tC7891A1695A92EF0EE3D79FC7792120E /* HazptrThrLocal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HazptrThrLocal.h; path = folly/synchronization/HazptrThrLocal.h; sourceTree = \"<group>\"; };\n\t\tC7956DABB206C95A799C60F678F09BB6 /* AssertFatal.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = AssertFatal.cpp; sourceTree = \"<group>\"; };\n\t\tC7C5E5529D9183D4DA7499E3C615C519 /* Yoga.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Yoga.modulemap; sourceTree = \"<group>\"; };\n\t\tC7CB9D39DA448A9F742A4B023B065E17 /* RCTAnimatedNode.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTAnimatedNode.mm; sourceTree = \"<group>\"; };\n\t\tC80C73D05140B68E7E4D8EC8138AABF5 /* Props.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = Props.cpp; path = react/renderer/components/rncore/Props.cpp; sourceTree = \"<group>\"; };\n\t\tC80CD944FB88B23807F5AAAF7CB21069 /* HermesRuntimeAgentDelegate.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = HermesRuntimeAgentDelegate.cpp; sourceTree = \"<group>\"; };\n\t\tC844508F5FF5CB3FE66B8F8DF7302612 /* PropagateConst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PropagateConst.h; path = folly/lang/PropagateConst.h; sourceTree = \"<group>\"; };\n\t\tC87FD57CD4AD96B0BBB45FC4FEFA1AE7 /* MPMCPipeline.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMCPipeline.h; path = folly/MPMCPipeline.h; sourceTree = \"<group>\"; };\n\t\tC8980F597D1A97A167ACA46B54A4BC70 /* React-RCTAnimation.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-RCTAnimation.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tC8D1859AA4CE974FEC530D5684F25E81 /* React-FabricImage.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-FabricImage.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\tC8E070E3387DCB006D125024D0D086B2 /* FMDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = FMDatabase.m; sourceTree = \"<group>\"; };\n\t\tC91E89106F76162BEA0A7DF8511D586A /* ApplyTuple.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ApplyTuple.h; path = folly/functional/ApplyTuple.h; sourceTree = \"<group>\"; };\n\t\tC941106D9D54AE237C5110F5638389AC /* React-Mapbuffer */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-Mapbuffer\"; path = \"libReact-Mapbuffer.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tC95BE4329B2B85F46818C25087E9147A /* LayoutableShadowNode.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = LayoutableShadowNode.cpp; path = react/renderer/core/LayoutableShadowNode.cpp; sourceTree = \"<group>\"; };\n\t\tC981FCFDF37E877B75038B1246411D6A /* Exception.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Exception.h; path = folly/Exception.h; sourceTree = \"<group>\"; };\n\t\tC9BBAB8DD3A07A56FC902CC374E80A3B /* AtomicUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AtomicUtil.h; path = folly/synchronization/AtomicUtil.h; sourceTree = \"<group>\"; };\n\t\tC9D9E5911728E23B08C57B041A401477 /* RCTSegmentedControlManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTSegmentedControlManager.m; sourceTree = \"<group>\"; };\n\t\tC9E855C72DB65E8045F7D611DB8E0AC7 /* ModuleRegistry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ModuleRegistry.h; sourceTree = \"<group>\"; };\n\t\tC9FA2111792B3263822E75649BD66902 /* SocketRocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SocketRocket.h; path = SocketRocket/SocketRocket.h; sourceTree = \"<group>\"; };\n\t\tCA2B21403EE25DB9893B6E8891C8E2DD /* Yoga-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"Yoga-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\tCA69419C699C779F51EC2294FE37593C /* SanitizeThread.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SanitizeThread.h; path = folly/synchronization/SanitizeThread.h; sourceTree = \"<group>\"; };\n\t\tCA736D745963DE632943D6EE6AE51217 /* Justify.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Justify.h; sourceTree = \"<group>\"; };\n\t\tCA86A71648C8045BF8A96B225E26E40D /* CustomizationPoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CustomizationPoint.h; path = folly/lang/CustomizationPoint.h; sourceTree = \"<group>\"; };\n\t\tCA9B104BA2C9A1DDE13179A64BD014B9 /* WatermelonDB.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = WatermelonDB.podspec; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\tCAACD991F2CF50067B4447D8419F5B05 /* RuntimeAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RuntimeAdapter.h; path = destroot/include/hermes/inspector/RuntimeAdapter.h; sourceTree = \"<group>\"; };\n\t\tCAAD19E5409FDE0BA4AE1A1A0483BA00 /* LegacyViewManagerInteropComponentDescriptor.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = LegacyViewManagerInteropComponentDescriptor.mm; path = react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropComponentDescriptor.mm; sourceTree = \"<group>\"; };\n\t\tCADAFD82F38E6E1F5955E921DD980A8C /* RCTFrameAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTFrameAnimation.mm; sourceTree = \"<group>\"; };\n\t\tCB027A92361F7CF889CAB836E490C149 /* ConcurrentSkipList.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ConcurrentSkipList.h; path = folly/ConcurrentSkipList.h; sourceTree = \"<group>\"; };\n\t\tCB0D3B1D12723CB6F6A4B5A53775B4DC /* ComponentDescriptor.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ComponentDescriptor.cpp; path = react/renderer/core/ComponentDescriptor.cpp; sourceTree = \"<group>\"; };\n\t\tCB62AF8BE005DE4640777FBFF95866BF /* RCTModuleMethod.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTModuleMethod.mm; sourceTree = \"<group>\"; };\n\t\tCB960EC9C47A40C34C5B59FF58A14FCF /* HostPlatformTouch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = HostPlatformTouch.h; sourceTree = \"<group>\"; };\n\t\tCBB1209D9BF3AC7A5E77178DCA9C126A /* React-perflogger-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-perflogger-dummy.m\"; sourceTree = \"<group>\"; };\n\t\tCBC8B43C8992F34DF7CD32D7923EDE53 /* File.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = File.h; path = folly/File.h; sourceTree = \"<group>\"; };\n\t\tCBED11019ED3BE2CD4C26A2FD21B24C1 /* Likely.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Likely.h; path = folly/Likely.h; sourceTree = \"<group>\"; };\n\t\tCC013CC571FE4BC5DEEFD2D0D37B0093 /* RCTBaseTextShadowView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTBaseTextShadowView.mm; sourceTree = \"<group>\"; };\n\t\tCC0F7AC9D01EB889E5370F93AB275754 /* React-jserrorhandler.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-jserrorhandler.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\tCC14D6144DA3CBC86D616E08D6D726E8 /* RCTBlobCollector.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTBlobCollector.mm; sourceTree = \"<group>\"; };\n\t\tCC1AF02076781F56494CFE9B171135BF /* RCTBundleManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTBundleManager.h; sourceTree = \"<group>\"; };\n\t\tCC381BCFEEAC649BB62889E972FAD4E3 /* RawProps.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RawProps.h; path = react/renderer/core/RawProps.h; sourceTree = \"<group>\"; };\n\t\tCC3E8F86C7DCFECB3326885EC3BF91AF /* decorator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = decorator.h; path = jsi/decorator.h; sourceTree = \"<group>\"; };\n\t\tCC8769294DD05CF0DEF8259E34DE9AAC /* RCTScrollableProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTScrollableProtocol.h; sourceTree = \"<group>\"; };\n\t\tCC91FDC94E55938A0F105FCC3D4FE542 /* SRProxyConnect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRProxyConnect.m; path = SocketRocket/Internal/Proxy/SRProxyConnect.m; sourceTree = \"<group>\"; };\n\t\tCC9E0C53D02E49E161CC61AD2E78DD12 /* RCTBaseTextShadowView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTBaseTextShadowView.h; sourceTree = \"<group>\"; };\n\t\tCCB913EB7EC2FFF2A1F039FCAFFF3042 /* RawPropsParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RawPropsParser.h; path = react/renderer/core/RawPropsParser.h; sourceTree = \"<group>\"; };\n\t\tCCC91F4882F9AD8CBAA5347E76589517 /* RCTProfileTrampoline-x86_64.S */ = {isa = PBXFileReference; includeInIndex = 1; path = \"RCTProfileTrampoline-x86_64.S\"; sourceTree = \"<group>\"; };\n\t\tCCCCA85307C7F5CAA6F8F137DC8860BE /* Pretty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Pretty.h; path = folly/lang/Pretty.h; sourceTree = \"<group>\"; };\n\t\tCCF757AC8F0183D61E1DA8706776938C /* RCTSurfaceView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTSurfaceView.mm; sourceTree = \"<group>\"; };\n\t\tCD0C06BAC55CB15F45E71416B7D4DA0E /* SRRandom.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRRandom.m; path = SocketRocket/Internal/Utilities/SRRandom.m; sourceTree = \"<group>\"; };\n\t\tCD16933416FD2EC375DDCB34E3995C89 /* RCTRefreshControl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTRefreshControl.h; sourceTree = \"<group>\"; };\n\t\tCE02C2175E3E663763ADD7A4613D0103 /* RunLoopObserver.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = RunLoopObserver.cpp; sourceTree = \"<group>\"; };\n\t\tCE4F352241E750994254CACB3900290C /* Exception.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = Exception.cpp; path = folly/lang/Exception.cpp; sourceTree = \"<group>\"; };\n\t\tCEA45A2349847B8CEAC9ABF565A04BD0 /* React-ImageManager */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-ImageManager\"; path = \"libReact-ImageManager.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tCEC15E29682C912628AE02FBF18DB8D6 /* RCTThirdPartyFabricComponentsProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTThirdPartyFabricComponentsProvider.h; path = Fabric/RCTThirdPartyFabricComponentsProvider.h; sourceTree = \"<group>\"; };\n\t\tCF04A0BE220BED59F7AEB367A64FB457 /* RCTEventAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTEventAnimation.h; sourceTree = \"<group>\"; };\n\t\tCF0CC535988C4C141BA1AF044FA0790A /* Buffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Buffer.h; path = destroot/include/hermes/Public/Buffer.h; sourceTree = \"<group>\"; };\n\t\tCF40503F32A96F47168359F16F99FC55 /* RCTSurfaceSizeMeasureMode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSurfaceSizeMeasureMode.h; sourceTree = \"<group>\"; };\n\t\tCF44B022CA9C008F36C080D66685928C /* RCTScrollContentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTScrollContentView.h; sourceTree = \"<group>\"; };\n\t\tCF485BFE7872C54223E057A72A0AB6A3 /* EventPipe.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EventPipe.h; path = react/renderer/core/EventPipe.h; sourceTree = \"<group>\"; };\n\t\tCF6A928C7A982274E5574B81E88B799B /* RCTShadowView+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"RCTShadowView+Internal.h\"; sourceTree = \"<group>\"; };\n\t\tCF8779EB6F6185F6C461B3A8E5F7DD3D /* TextProps.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = TextProps.cpp; path = react/renderer/components/text/TextProps.cpp; sourceTree = \"<group>\"; };\n\t\tCF9E8353281D1C3DE0C65A3F7643C68B /* Launder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Launder.h; path = folly/lang/Launder.h; sourceTree = \"<group>\"; };\n\t\tCF9F9BDD710866E3AB298A535A581739 /* RCTInspectorDevServerHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTInspectorDevServerHelper.h; sourceTree = \"<group>\"; };\n\t\tCFB81BB75D1D9BE93AA436949526503C /* Vector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Vector.h; sourceTree = \"<group>\"; };\n\t\tCFBAA91154D63D788000A507C872D157 /* IPAddress.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IPAddress.h; path = folly/detail/IPAddress.h; sourceTree = \"<group>\"; };\n\t\tCFF243F787BCE91857A23806EAB84741 /* React-Mapbuffer-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-Mapbuffer-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\tD015441B32F30C25792A1C654C1FD49B /* RCTTextInputComponentView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTTextInputComponentView.mm; sourceTree = \"<group>\"; };\n\t\tD042C4DD00523E4DF1235E10F891754B /* FlexDirection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FlexDirection.h; sourceTree = \"<group>\"; };\n\t\tD078B11D9117F5852F1C821A0DD6E65E /* RCTExceptionsManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTExceptionsManager.h; path = React/CoreModules/RCTExceptionsManager.h; sourceTree = \"<group>\"; };\n\t\tD095CAA67ED3E639CF404B5BA46489E6 /* React-RCTVibration-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-RCTVibration-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\tD0D6E9C9334A02233898F7AD14D17E2C /* RCTSurfacePresenterBridgeAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTSurfacePresenterBridgeAdapter.h; path = Fabric/RCTSurfacePresenterBridgeAdapter.h; sourceTree = \"<group>\"; };\n\t\tD0FF6F026B2F3AD02FA2F0B47E571D6B /* RCTEventDispatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTEventDispatcher.m; sourceTree = \"<group>\"; };\n\t\tD11BE31D2BF618CFBCC52352A6567B70 /* PointerEventsProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PointerEventsProcessor.h; path = react/renderer/uimanager/PointerEventsProcessor.h; sourceTree = \"<group>\"; };\n\t\tD14147B88E3AAA44C3CB4E3E9B1D01EE /* SurfaceManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SurfaceManager.h; path = react/renderer/scheduler/SurfaceManager.h; sourceTree = \"<group>\"; };\n\t\tD1802F9C2D3A26DFED67D9A4805852E1 /* Subprocess.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Subprocess.h; path = folly/Subprocess.h; sourceTree = \"<group>\"; };\n\t\tD181C872FF8059D494F78C6BAF4765FA /* xchar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = xchar.h; path = include/fmt/xchar.h; sourceTree = \"<group>\"; };\n\t\tD1A2CC54073AD525A26E9DC8CA1044F5 /* React-Core.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-Core.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tD1AD68A2EB98FCB1663BE5F5916FA962 /* React-jserrorhandler-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-jserrorhandler-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\tD1C29624546038DCFAE9385CBC490A7F /* WaitOptions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WaitOptions.h; path = folly/synchronization/WaitOptions.h; sourceTree = \"<group>\"; };\n\t\tD22EED118A762A7D7BC88A4ADBB7026E /* React-RuntimeCore */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-RuntimeCore\"; path = \"libReact-RuntimeCore.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD23D4785660627F3CD0959228AD79333 /* th.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = th.lproj; path = React/I18n/strings/th.lproj; sourceTree = \"<group>\"; };\n\t\tD24AD310EE0E5FC9562D150864F26033 /* RCTDebuggingOverlayComponentView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTDebuggingOverlayComponentView.mm; sourceTree = \"<group>\"; };\n\t\tD2540C4EDDFB7CCCB96D25E31E2F57B8 /* RCTClipboard.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTClipboard.mm; sourceTree = \"<group>\"; };\n\t\tD2D1B033752AE5FACB195379C2792DA4 /* simdjson-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"simdjson-dummy.m\"; sourceTree = \"<group>\"; };\n\t\tD2E26EF832C651D9123567DC1E118CA8 /* RuntimeScheduler_Legacy.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = RuntimeScheduler_Legacy.cpp; sourceTree = \"<group>\"; };\n\t\tD2E2734D8657ABDA8E52005D327C59A4 /* JSRuntimeFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = JSRuntimeFactory.h; sourceTree = \"<group>\"; };\n\t\tD2E4E35B35014E917353983248FC5B53 /* FMDB.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FMDB.h; sourceTree = \"<group>\"; };\n\t\tD2E639F57C80F20E749E4AAA4336E32B /* ExceptionWrapper-inl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"ExceptionWrapper-inl.h\"; path = \"folly/ExceptionWrapper-inl.h\"; sourceTree = \"<group>\"; };\n\t\tD2F955F57435151EED343EB06358A2A7 /* PhysicalEdge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PhysicalEdge.h; sourceTree = \"<group>\"; };\n\t\tD325DB74A674890FFA71EB148DA83A39 /* RCTPackagerClient.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTPackagerClient.h; sourceTree = \"<group>\"; };\n\t\tD33BF9E42E6E5CEF3647C99A049FDCA1 /* Sse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Sse.h; path = folly/detail/Sse.h; sourceTree = \"<group>\"; };\n\t\tD3779D2E5E9D11A2A28A3B557D2841F9 /* ReactMarker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ReactMarker.h; sourceTree = \"<group>\"; };\n\t\tD37C2939F3CFD83C906796976DC6425E /* JSModulesUnbundle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = JSModulesUnbundle.h; sourceTree = \"<group>\"; };\n\t\tD3897A8D57FA7C5B759902F2D3CEA752 /* RCTAppState.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTAppState.mm; sourceTree = \"<group>\"; };\n\t\tD3CD42FBDC4A9051EBFC9BBE6DB02349 /* RCTRootViewFactory.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTRootViewFactory.mm; sourceTree = \"<group>\"; };\n\t\tD3F40B6C62C59C16116BE5B43DD2B6E4 /* RCTCxxUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTCxxUtils.h; sourceTree = \"<group>\"; };\n\t\tD401F70F6554582A86F6BB451C06116B /* CallInvoker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CallInvoker.h; path = ReactCommon/CallInvoker.h; sourceTree = \"<group>\"; };\n\t\tD40D2FA9CCC999A6A1985688544C9701 /* Pods-WatermelonTester-WatermelonTesterTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"Pods-WatermelonTester-WatermelonTesterTests.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tD40F2678A9E0D12E6FEE80ED9004E5BE /* LayoutableShadowNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LayoutableShadowNode.h; path = react/renderer/core/LayoutableShadowNode.h; sourceTree = \"<group>\"; };\n\t\tD4586CC35438203A980E60618B09852C /* primitives.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = primitives.h; sourceTree = \"<group>\"; };\n\t\tD469751A218330A8AA5F4F551ED6F9A5 /* primitives.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = primitives.h; path = react/renderer/attributedstring/primitives.h; sourceTree = \"<group>\"; };\n\t\tD4758B7FCDEC2C0806CEE3D106040093 /* RCTNativeAnimatedTurboModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTNativeAnimatedTurboModule.h; path = Libraries/NativeAnimation/RCTNativeAnimatedTurboModule.h; sourceTree = \"<group>\"; };\n\t\tD47708686F705FA831C439C1F56306F5 /* RCTResizeMode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTResizeMode.h; path = Libraries/Image/RCTResizeMode.h; sourceTree = \"<group>\"; };\n\t\tD4B7F151F4E0EB1DCE46AA538CDA20CE /* componentNameByReactViewName.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = componentNameByReactViewName.cpp; path = react/renderer/componentregistry/componentNameByReactViewName.cpp; sourceTree = \"<group>\"; };\n\t\tD50E86E9CDA03CB5CEA275C7EE896DD2 /* ReactInstance.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ReactInstance.h; sourceTree = \"<group>\"; };\n\t\tD51CB71E6C720763C7DFC73A256D9796 /* RCTRootViewInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTRootViewInternal.h; sourceTree = \"<group>\"; };\n\t\tD5266C5C2A1441F787E4EAA90B9166DA /* TypeList.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TypeList.h; path = folly/detail/TypeList.h; sourceTree = \"<group>\"; };\n\t\tD584937399C1E7BBAE37C4B6480368F6 /* RCTAttributedTextUtils.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTAttributedTextUtils.mm; sourceTree = \"<group>\"; };\n\t\tD5C775614AC76D44CECB6BE08B022F1F /* ReactCommon */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = ReactCommon; path = libReactCommon.a; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD5D85F064A48142714688A62D0169A8F /* ScrollViewProps.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ScrollViewProps.h; path = react/renderer/components/scrollview/ScrollViewProps.h; sourceTree = \"<group>\"; };\n\t\tD5F538BF3285BAC9B7F01B8E674355D6 /* RCTAlertController.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTAlertController.mm; sourceTree = \"<group>\"; };\n\t\tD5F81F5AAC387C14EE7017B61CB495EC /* Pods-WatermelonTester.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"Pods-WatermelonTester.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tD6270B25D28322D56823F16246CD7C57 /* NativeComponentRegistryBinding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NativeComponentRegistryBinding.h; path = react/renderer/componentregistry/native/NativeComponentRegistryBinding.h; sourceTree = \"<group>\"; };\n\t\tD63DB3EEA2658569FE4F58A50743B58C /* RCTSafeAreaView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTSafeAreaView.m; sourceTree = \"<group>\"; };\n\t\tD666A8452A306A927BD1BED745FC5CB5 /* JSBigString.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = JSBigString.cpp; sourceTree = \"<group>\"; };\n\t\tD673246C2C1796D3D74599E1964A310D /* F14SetFallback.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = F14SetFallback.h; path = folly/container/detail/F14SetFallback.h; sourceTree = \"<group>\"; };\n\t\tD67413975CF3DA436729109845A30A9F /* Transform.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = Transform.cpp; sourceTree = \"<group>\"; };\n\t\tD6A3CF2FDC9D571D60BAB0281B6FA1BD /* Pods-WatermelonTester */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"Pods-WatermelonTester\"; path = \"libPods-WatermelonTester.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD6AA075D0670043A067B8F82481DEBA1 /* RCTPLTag.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTPLTag.h; sourceTree = \"<group>\"; };\n\t\tD6CB644C7E059627F4E16F567D961E18 /* React-logger.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-logger.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\tD6E3C9F461BA9508AFA8E2471F36E21F /* React-runtimescheduler-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-runtimescheduler-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\tD70B1BA1E566B78E8FFA9FDB20C45D1D /* YGEnums.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YGEnums.h; path = yoga/YGEnums.h; sourceTree = \"<group>\"; };\n\t\tD7139195D968D34865DEE54652AEED4C /* RuntimeSchedulerClock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RuntimeSchedulerClock.h; sourceTree = \"<group>\"; };\n\t\tD73FC5BE76F5CED5EE11722EB194C596 /* RCTResizeMode.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTResizeMode.mm; sourceTree = \"<group>\"; };\n\t\tD74ED33694328372E1EA1BA3F0EDD255 /* accessibilityPropsConversions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = accessibilityPropsConversions.h; path = react/renderer/components/view/accessibilityPropsConversions.h; sourceTree = \"<group>\"; };\n\t\tD77858FA2EBA20F1263AC750FC03FE38 /* SurfaceManager.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = SurfaceManager.cpp; path = react/renderer/scheduler/SurfaceManager.cpp; sourceTree = \"<group>\"; };\n\t\tD7914657C80BFE4F7E8E537249F07FD6 /* ToAscii.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ToAscii.h; path = folly/lang/ToAscii.h; sourceTree = \"<group>\"; };\n\t\tD7D198038E6A0A8EAA233D9E57B97AC6 /* RCTComponentData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTComponentData.h; sourceTree = \"<group>\"; };\n\t\tD7F312C3D9605D22499AC7486B1AB866 /* SysTime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SysTime.h; path = folly/portability/SysTime.h; sourceTree = \"<group>\"; };\n\t\tD802137E8093DB1F0B0848206D7FCB8E /* HazptrThreadPoolExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HazptrThreadPoolExecutor.h; path = folly/synchronization/HazptrThreadPoolExecutor.h; sourceTree = \"<group>\"; };\n\t\tD828B4DBBD448E09A3D7C599F4CEFEF3 /* Sealable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Sealable.h; path = react/renderer/core/Sealable.h; sourceTree = \"<group>\"; };\n\t\tD82A92B30EAD44574D7D78331C054CBF /* ReactInstance.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = ReactInstance.cpp; sourceTree = \"<group>\"; };\n\t\tD837D755183ED658A920B4FD642A3F16 /* RCTSubtractionAnimatedNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSubtractionAnimatedNode.h; sourceTree = \"<group>\"; };\n\t\tD83B4FAAFD8B9F4100D6F3F2AAF2598F /* GMock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GMock.h; path = folly/portability/GMock.h; sourceTree = \"<group>\"; };\n\t\tD869113E22557F357D518366520103CC /* Expected.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Expected.h; path = folly/Expected.h; sourceTree = \"<group>\"; };\n\t\tD886821B444D6CB88E03807915CB1608 /* glog-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"glog-dummy.m\"; sourceTree = \"<group>\"; };\n\t\tD89495ADCC3AEE3B5696CC8A442CC151 /* Padded.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Padded.h; path = folly/Padded.h; sourceTree = \"<group>\"; };\n\t\tD8A9743F92811B06400AED3B4A0C3135 /* React-RCTNetwork-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-RCTNetwork-dummy.m\"; sourceTree = \"<group>\"; };\n\t\tD8C79C91A7FCAF5C973C5E74CCAC73C5 /* HeterogeneousAccess.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HeterogeneousAccess.h; path = folly/container/HeterogeneousAccess.h; sourceTree = \"<group>\"; };\n\t\tD8FE00B7A123C71C5F84EA661B962CBE /* propsConversions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = propsConversions.h; path = react/renderer/components/textinput/platform/ios/react/renderer/components/iostextinput/propsConversions.h; sourceTree = \"<group>\"; };\n\t\tD958FC3ECB59DEF56F7A316CFF3FE5E5 /* React-RCTAppDelegate-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-RCTAppDelegate-dummy.m\"; sourceTree = \"<group>\"; };\n\t\tD968F1CAEE31B74111F5F45D24E694BA /* RCTValueAnimatedNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTValueAnimatedNode.h; sourceTree = \"<group>\"; };\n\t\tD96F738CE283D062C54E36FE7D38A7AF /* F14Map.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = F14Map.h; path = folly/container/F14Map.h; sourceTree = \"<group>\"; };\n\t\tD97182C50F2513A513AF827227D35D9F /* SchedulerDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SchedulerDelegate.h; path = react/renderer/scheduler/SchedulerDelegate.h; sourceTree = \"<group>\"; };\n\t\tD9722AC2B3A09F57A4EF66060A291E1E /* RCTSwitch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTSwitch.m; sourceTree = \"<group>\"; };\n\t\tD9C558B0DD5120E2A4ED354C91A0A581 /* RCTMultilineTextInputViewManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTMultilineTextInputViewManager.mm; sourceTree = \"<group>\"; };\n\t\tD9D0F263D9FACBEBBE1FBF1918CE0445 /* Instance.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Instance.h; sourceTree = \"<group>\"; };\n\t\tD9F334F2E90E3EE462FC4192AF5C03BD /* React-jsi */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-jsi\"; path = \"libReact-jsi.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD9F52BE4E914A8BB9CDE60E8D6D9067A /* React-RCTText.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-RCTText.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tD9F8A226925F0E4037D08493438FE44D /* RCTRequired.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTRequired.h; sourceTree = \"<group>\"; };\n\t\tDA12408D51CF845CE9C49609B11D2C6D /* PositionType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PositionType.h; sourceTree = \"<group>\"; };\n\t\tDA13FC9D0FEA58079E338182B1BAE1B2 /* UnimplementedViewComponentDescriptor.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = UnimplementedViewComponentDescriptor.cpp; path = react/renderer/components/unimplementedview/UnimplementedViewComponentDescriptor.cpp; sourceTree = \"<group>\"; };\n\t\tDA3239428E42490C3045975A1FC6A276 /* ImageResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ImageResponse.h; path = react/renderer/imagemanager/ImageResponse.h; sourceTree = \"<group>\"; };\n\t\tDA3B2DE0E7759775141A6DD8F1ACA6DE /* YogaLayoutableShadowNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YogaLayoutableShadowNode.h; path = react/renderer/components/view/YogaLayoutableShadowNode.h; sourceTree = \"<group>\"; };\n\t\tDA46A7224AD028908740366CEBA9D908 /* AttributedStringBox.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = AttributedStringBox.cpp; path = react/renderer/attributedstring/AttributedStringBox.cpp; sourceTree = \"<group>\"; };\n\t\tDA7ABB6DD8AEACED51D63B2C774E3A63 /* React-RCTFabric */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-RCTFabric\"; path = \"libReact-RCTFabric.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tDAA6445F1F3582CD4A38F23C8E688A65 /* RCTBridgeProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTBridgeProxy.h; sourceTree = \"<group>\"; };\n\t\tDAA88CD24C578A8D699BEE467905F247 /* TurboModuleBinding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TurboModuleBinding.h; path = react/nativemodule/core/ReactCommon/TurboModuleBinding.h; sourceTree = \"<group>\"; };\n\t\tDAB01DFE83E0C8658D41522C80D2366D /* RCTWrapperViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTWrapperViewController.h; sourceTree = \"<group>\"; };\n\t\tDABCCB9297D8973E3EB46EEFEDDEDCB4 /* ModalHostViewState.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ModalHostViewState.cpp; path = react/renderer/components/modal/ModalHostViewState.cpp; sourceTree = \"<group>\"; };\n\t\tDAD8B71DF2DFCF15AAF98C06D37D5703 /* React-hermes */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-hermes\"; path = \"libReact-hermes.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tDAEB77A1371F2344F999D880C3A90E0B /* React-RuntimeApple.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-RuntimeApple.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tDAEBDA32E972C2DD6BC87FC03C2F7B79 /* RCTAdditionAnimatedNode.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTAdditionAnimatedNode.mm; sourceTree = \"<group>\"; };\n\t\tDAFF833F6075C65A5629CFE2099DA2DE /* NSTextStorage+FontScaling.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"NSTextStorage+FontScaling.m\"; sourceTree = \"<group>\"; };\n\t\tDB05D38A61483D308412FA789EE36CBC /* DelayedInit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DelayedInit.h; path = folly/synchronization/DelayedInit.h; sourceTree = \"<group>\"; };\n\t\tDB2D4AA87F51B33CB9A6EC8B96ED1D23 /* RCTFabricModalHostViewController.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTFabricModalHostViewController.mm; sourceTree = \"<group>\"; };\n\t\tDB54433DB90DCA8B444031497CC05E80 /* RCTJSThreadManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RCTJSThreadManager.mm; path = ReactCommon/RCTJSThreadManager.mm; sourceTree = \"<group>\"; };\n\t\tDB5A191A4D4CA731E31AFC8EA19625A2 /* RCTUnimplementedNativeComponentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTUnimplementedNativeComponentView.h; sourceTree = \"<group>\"; };\n\t\tDB76EBADE7E968B611B89EC60AA71910 /* heap_vector_types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = heap_vector_types.h; path = folly/container/heap_vector_types.h; sourceTree = \"<group>\"; };\n\t\tDB803AD9555BB8D6B00BBA6644681627 /* Yoga.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Yoga.release.xcconfig; sourceTree = \"<group>\"; };\n\t\tDB93F82879D24A74491FCA910E31A733 /* React-utils.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-utils.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tDB9466A46A68BC525A64AAAB5F5C1F6C /* WatermelonDB.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = WatermelonDB.h; sourceTree = \"<group>\"; };\n\t\tDBD26F4D9278DAF3DEA356BE83D84C2B /* RuntimeTarget.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RuntimeTarget.h; sourceTree = \"<group>\"; };\n\t\tDBF242B856D15CC59A314DC9A8B2701B /* RCTInteropTurboModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTInteropTurboModule.h; path = ReactCommon/RCTInteropTurboModule.h; sourceTree = \"<group>\"; };\n\t\tDC2247332E34E9A5EEAC651BFE23CE54 /* AsymmetricThreadFence.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AsymmetricThreadFence.h; path = folly/synchronization/AsymmetricThreadFence.h; sourceTree = \"<group>\"; };\n\t\tDC24DA11D62A60707D4DA680FD726094 /* ReactNativeFeatureFlagsDefaults.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ReactNativeFeatureFlagsDefaults.h; sourceTree = \"<group>\"; };\n\t\tDC46EBB3ED4F2E3ADA6C2752DF776F59 /* RCTCxxBridge.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTCxxBridge.mm; sourceTree = \"<group>\"; };\n\t\tDC5E287FACF5FD6F1EC1566E83AC741C /* SynchronousEventBeat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SynchronousEventBeat.h; path = react/renderer/scheduler/SynchronousEventBeat.h; sourceTree = \"<group>\"; };\n\t\tDC79C41D3256C56029659B9591017FCF /* Parsing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Parsing.h; sourceTree = \"<group>\"; };\n\t\tDC7BB8BEE774754AA2ABA4E7FE98E101 /* RCTTextInputComponentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTTextInputComponentView.h; sourceTree = \"<group>\"; };\n\t\tDCDAB8C1A8AF49504419868DFB5EE19B /* RCTComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTComponent.h; sourceTree = \"<group>\"; };\n\t\tDD04C8CE4CFE3A8CBF7FEFC33B333653 /* NativeComponentRegistryBinding.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = NativeComponentRegistryBinding.cpp; path = react/renderer/componentregistry/native/NativeComponentRegistryBinding.cpp; sourceTree = \"<group>\"; };\n\t\tDD12CDD757C637C9F44622EFFFFB58B1 /* RCTImageSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTImageSource.h; sourceTree = \"<group>\"; };\n\t\tDD1FD8F5FBF34CB4BF85DC2E8496E125 /* SRDelegateController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRDelegateController.h; path = SocketRocket/Internal/Delegate/SRDelegateController.h; sourceTree = \"<group>\"; };\n\t\tDD2869F37A6F486F8994AEF1E2A9E0D4 /* RCTSurfacePresenterBridgeAdapter.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RCTSurfacePresenterBridgeAdapter.mm; path = Fabric/RCTSurfacePresenterBridgeAdapter.mm; sourceTree = \"<group>\"; };\n\t\tDD33EAFFA1FBDE7A2DA696E03388F6CA /* NSRunLoop+SRWebSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"NSRunLoop+SRWebSocket.h\"; path = \"SocketRocket/NSRunLoop+SRWebSocket.h\"; sourceTree = \"<group>\"; };\n\t\tDD3A4B3EC7E715CA1E677122514FEFE8 /* DatabaseBridge.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = DatabaseBridge.cpp; sourceTree = \"<group>\"; };\n\t\tDD3ED969E30456E3100D106C5E71ED9E /* RCTScrollView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTScrollView.h; sourceTree = \"<group>\"; };\n\t\tDD4757A98E1495E6C3DBC232D9872AE2 /* FileUtilDetail.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = FileUtilDetail.cpp; path = folly/detail/FileUtilDetail.cpp; sourceTree = \"<group>\"; };\n\t\tDD754522EEA5CC221FED5671228D41ED /* ConstructorCallbackList.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ConstructorCallbackList.h; path = folly/ConstructorCallbackList.h; sourceTree = \"<group>\"; };\n\t\tDD9C6B9D5678AE4BC86F7AB978C63029 /* SRRunLoopThread.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRRunLoopThread.m; path = SocketRocket/Internal/RunLoop/SRRunLoopThread.m; sourceTree = \"<group>\"; };\n\t\tDDE9E8B67A4B7CFB8776B906B7C48F53 /* RCTUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTUtils.h; sourceTree = \"<group>\"; };\n\t\tDDEC6CF7899D39C510AF9B96223825C0 /* LegacyViewManagerInteropViewEventEmitter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LegacyViewManagerInteropViewEventEmitter.h; path = react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropViewEventEmitter.h; sourceTree = \"<group>\"; };\n\t\tDDED685F4B3E6B9AD98CDA1F1594C02B /* String.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = String.h; path = folly/String.h; sourceTree = \"<group>\"; };\n\t\tDE0D3D7FDED11B0BBBDD597E67E6E5CD /* DebugStringConvertible.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = DebugStringConvertible.cpp; sourceTree = \"<group>\"; };\n\t\tDE0FDA05FBBF20ED1DD8039C9EF483D2 /* id.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = id.lproj; path = React/I18n/strings/id.lproj; sourceTree = \"<group>\"; };\n\t\tDE4D8C3CE090B2BA0138B08B60165BFD /* RCTTrackingAnimatedNode.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTTrackingAnimatedNode.mm; sourceTree = \"<group>\"; };\n\t\tDE6CB0254166C64BB61D724834E284BA /* PageTarget.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = PageTarget.cpp; sourceTree = \"<group>\"; };\n\t\tDE73D8A5ECB254D9D3F8C36C8D201F89 /* React-Fabric */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-Fabric\"; path = \"libReact-Fabric.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tDEABC445C02152DF5E8A3B39AF9F9162 /* React-RuntimeApple-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-RuntimeApple-dummy.m\"; sourceTree = \"<group>\"; };\n\t\tDECEAEDC186B345BDAAD789EDD05B9FD /* RCTDeprecation.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RCTDeprecation.debug.xcconfig; sourceTree = \"<group>\"; };\n\t\tDEFDBFF0494ECD44CD200BB0D4A18A33 /* react_native_assert.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = react_native_assert.cpp; sourceTree = \"<group>\"; };\n\t\tDF05023F7AE354185DE71C9D43F11B9D /* CString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CString.h; path = folly/lang/CString.h; sourceTree = \"<group>\"; };\n\t\tDF4F0BE954C36F42882AC304D011030F /* Portability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Portability.h; path = folly/Portability.h; sourceTree = \"<group>\"; };\n\t\tDF63E196F2D472D716CD1CFF8D29C2EF /* small_vector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = small_vector.h; path = folly/small_vector.h; sourceTree = \"<group>\"; };\n\t\tDF804855D1456E2DC29B632585EFE659 /* SysMembarrier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SysMembarrier.h; path = folly/portability/SysMembarrier.h; sourceTree = \"<group>\"; };\n\t\tDFA6EA2550443AA8D5C90B1C550AD342 /* FMDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FMDatabase.h; sourceTree = \"<group>\"; };\n\t\tDFA83A2FCE36D7B3F4FF4946AC4AA3C5 /* RCTPerformanceLoggerLabels.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTPerformanceLoggerLabels.m; sourceTree = \"<group>\"; };\n\t\tDFB701655BF99400D13CDA6EFDCC1AC7 /* RCTSurfaceHostingView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTSurfaceHostingView.mm; sourceTree = \"<group>\"; };\n\t\tDFD95BCA231BF7294B54BBBE1F7A43A2 /* Util.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Util.h; path = folly/container/detail/Util.h; sourceTree = \"<group>\"; };\n\t\tDFDFCA220F4E0487D24966099C7AC6BD /* React-rncore.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-rncore.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tE0004F076A577E394A0CC4F9AEC7F57B /* RCTMultilineTextInputView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTMultilineTextInputView.mm; sourceTree = \"<group>\"; };\n\t\tE02117FB47D5E097A2FE278E42ED7D2A /* json_pointer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = json_pointer.cpp; path = folly/json_pointer.cpp; sourceTree = \"<group>\"; };\n\t\tE0246A845D54C7B635C77FFDE88894B9 /* RCTBorderCurve.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTBorderCurve.h; sourceTree = \"<group>\"; };\n\t\tE0264569A1DCA41D8267A2DEC02B3043 /* BridgeNativeModulePerfLogger.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = BridgeNativeModulePerfLogger.cpp; path = reactperflogger/BridgeNativeModulePerfLogger.cpp; sourceTree = \"<group>\"; };\n\t\tE0295F5F6E41D3C5358AC3BC796E1F70 /* React-RuntimeCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-RuntimeCore-dummy.m\"; sourceTree = \"<group>\"; };\n\t\tE0402A818FA8A0C89E390D0D4EC00165 /* RCTSurfacePointerHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTSurfacePointerHandler.h; path = Fabric/RCTSurfacePointerHandler.h; sourceTree = \"<group>\"; };\n\t\tE0529EAB67BFDD4AEA0A80301D04CE2C /* ObserverContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ObserverContainer.h; path = folly/ObserverContainer.h; sourceTree = \"<group>\"; };\n\t\tE0817B1CB0DBAA45D6A064FE340FD13C /* RCTScrollContentViewManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTScrollContentViewManager.m; sourceTree = \"<group>\"; };\n\t\tE0839F609F20832C1729CED5ADCA18C9 /* RCTSettingsPlugins.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTSettingsPlugins.mm; sourceTree = \"<group>\"; };\n\t\tE08FAB111E604490074792C7CFAC9084 /* RCTModalHostViewComponentView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTModalHostViewComponentView.mm; sourceTree = \"<group>\"; };\n\t\tE0A2C37B0C4B50C0E4B5366E9B824F12 /* RuntimeTaskRunner.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RuntimeTaskRunner.h; path = destroot/include/hermes/RuntimeTaskRunner.h; sourceTree = \"<group>\"; };\n\t\tE0B0A85C6C1A686DD387938C318B3E03 /* RCTVirtualTextShadowView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTVirtualTextShadowView.h; sourceTree = \"<group>\"; };\n\t\tE0C3160ABF695152C97A85E56B140C4B /* CallbackWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CallbackWrapper.h; path = react/bridging/CallbackWrapper.h; sourceTree = \"<group>\"; };\n\t\tE0D2348E6FB9A55FE8BC6E93389B9432 /* JSIHelpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = JSIHelpers.h; sourceTree = \"<group>\"; };\n\t\tE0E6784EF6FD3D1F4FC47BCD8E352359 /* RCTInputAccessoryContentView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTInputAccessoryContentView.mm; sourceTree = \"<group>\"; };\n\t\tE1140A4CC7FEA96D57FF547DA1D75EA0 /* Pods-WatermelonTester-WatermelonTesterTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"Pods-WatermelonTester-WatermelonTesterTests.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tE13EF6E51F9F10FBD304A4FADDBB25A8 /* RCTBaseTextViewManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTBaseTextViewManager.mm; sourceTree = \"<group>\"; };\n\t\tE1530C1A41641E337C100090EDB4CD24 /* RCTBackedTextInputDelegateAdapter.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTBackedTextInputDelegateAdapter.mm; sourceTree = \"<group>\"; };\n\t\tE1BDFFD718B2082F582FF8627388E098 /* CalculateLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CalculateLayout.h; sourceTree = \"<group>\"; };\n\t\tE22E7E12AEEE2122E9587F6CBE60EC1A /* RCTSurfaceHostingProxyRootView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSurfaceHostingProxyRootView.h; sourceTree = \"<group>\"; };\n\t\tE253CA8AF57F182CDA110861DF421A77 /* RCTDeviceInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTDeviceInfo.h; path = React/CoreModules/RCTDeviceInfo.h; sourceTree = \"<group>\"; };\n\t\tE29A2CBF054A73452FE72177DE2FDF83 /* Iterator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Iterator.h; path = folly/container/Iterator.h; sourceTree = \"<group>\"; };\n\t\tE2B590F31CAE0577156C53171FEFEF07 /* React-FabricImage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-FabricImage.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tE2F009051F05B8597141D79A5583D4FF /* React-featureflags.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-featureflags.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tE3339D6705C5DCAD1A55DFC2EA80C646 /* RCTBundleURLProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTBundleURLProvider.h; sourceTree = \"<group>\"; };\n\t\tE3438873735D5FAD55DAADE60C49CACC /* RCTUITextView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTUITextView.mm; sourceTree = \"<group>\"; };\n\t\tE38250C1621C85BBCC9EA54DCC289145 /* React-RCTAppDelegate-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-RCTAppDelegate-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\tE38561935D0A79B947D909F1708ADA95 /* RCTSafeAreaViewLocalData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSafeAreaViewLocalData.h; sourceTree = \"<group>\"; };\n\t\tE390D39B5438A34CB65883263516478C /* React-featureflags-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-featureflags-dummy.m\"; sourceTree = \"<group>\"; };\n\t\tE39930085671F1947A94AAE3B2EB3580 /* React-NativeModulesApple.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-NativeModulesApple.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tE39F032BC206A3CC16C40890B632D25E /* React-logger.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-logger.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tE3A3132932FB8BCA22D8C2EB34C0BA27 /* RCTAppState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTAppState.h; path = React/CoreModules/RCTAppState.h; sourceTree = \"<group>\"; };\n\t\tE3C150EC730101E36E8725C466227757 /* RCTSwitchComponentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSwitchComponentView.h; sourceTree = \"<group>\"; };\n\t\tE40225EFF83BFF372E2ACB0DEB6152DB /* InspectorPackagerConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = InspectorPackagerConnection.h; sourceTree = \"<group>\"; };\n\t\tE416B0C3A1EC58515DEC41DF3D02E01B /* ClockGettimeWrappers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ClockGettimeWrappers.h; path = folly/ClockGettimeWrappers.h; sourceTree = \"<group>\"; };\n\t\tE4216CD44D8D54D9837A48C53488FC2E /* RCTBridgeConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTBridgeConstants.m; sourceTree = \"<group>\"; };\n\t\tE488A78562494C4DFA18485430C98C6D /* Value.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Value.h; path = react/bridging/Value.h; sourceTree = \"<group>\"; };\n\t\tE4FDDD56EA9FAE7E380A57693269B4F0 /* RawTextProps.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RawTextProps.h; path = react/renderer/components/text/RawTextProps.h; sourceTree = \"<group>\"; };\n\t\tE50E54D57E4CB3E0920119CF69AD9A2D /* React-Core-RCTI18nStrings */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = \"React-Core-RCTI18nStrings\"; path = RCTI18nStrings.bundle; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tE52A7A09F41E9EADFAE686BE3A607CBD /* RCTUIManagerUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTUIManagerUtils.h; sourceTree = \"<group>\"; };\n\t\tE537D35052D701095C980ECF42D55AC4 /* YGValue.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = YGValue.cpp; path = yoga/YGValue.cpp; sourceTree = \"<group>\"; };\n\t\tE53A2DCCFA3939F1CADE98C7ADABB2F1 /* RCTSwitchManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTSwitchManager.m; sourceTree = \"<group>\"; };\n\t\tE54B7595EDCA1E1302CD4C135A4612AA /* RCTRootView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTRootView.h; sourceTree = \"<group>\"; };\n\t\tE553A373CAD882BEE4374E43EBAD7556 /* React-RCTImage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-RCTImage.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tE55A5082F7AD7430141AC089256155B4 /* ViewEventEmitter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ViewEventEmitter.h; path = react/renderer/components/view/ViewEventEmitter.h; sourceTree = \"<group>\"; };\n\t\tE570952D2C710A3EC6A39040970B220E /* RCTLogBox.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTLogBox.h; path = React/CoreModules/RCTLogBox.h; sourceTree = \"<group>\"; };\n\t\tE5745DFD5BE516C91A82DD1988970E10 /* Math.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Math.h; path = folly/portability/Math.h; sourceTree = \"<group>\"; };\n\t\tE590E42E80DFE90E35C644EC5BA97D77 /* RCTDisplayLink.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTDisplayLink.m; sourceTree = \"<group>\"; };\n\t\tE5961E4180C070D8C68E4EDF389C0A2C /* React-RCTSettings.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-RCTSettings.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\tE598B862EA984799230DF69702BF2488 /* RCTBridgeMethod.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTBridgeMethod.h; sourceTree = \"<group>\"; };\n\t\tE5CB5398F86031A46AD389FAA73E2323 /* RCTTypeSafety.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RCTTypeSafety.release.xcconfig; sourceTree = \"<group>\"; };\n\t\tE5E136EE3CB9AD65C230069245AFE89E /* TextInputShadowNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TextInputShadowNode.h; path = react/renderer/components/textinput/platform/ios/react/renderer/components/iostextinput/TextInputShadowNode.h; sourceTree = \"<group>\"; };\n\t\tE606EFA2C4D098DAEBD8DFD0734E2535 /* ms.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = ms.lproj; path = React/I18n/strings/ms.lproj; sourceTree = \"<group>\"; };\n\t\tE625C620A161CC1506E07E4C53FC7859 /* RCTFabricSurface.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTFabricSurface.h; sourceTree = \"<group>\"; };\n\t\tE6362057149C3EE30EE5985649A70E12 /* SocketFileDescriptorMap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SocketFileDescriptorMap.h; path = folly/net/detail/SocketFileDescriptorMap.h; sourceTree = \"<group>\"; };\n\t\tE66752688584187D6864081ED411C01F /* RawTextProps.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = RawTextProps.cpp; path = react/renderer/components/text/RawTextProps.cpp; sourceTree = \"<group>\"; };\n\t\tE6A16705C69FC7DE11C2469A4A0F8358 /* React-RCTText */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-RCTText\"; path = \"libReact-RCTText.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tE6AF50262FD901B97155797FE9CCADC0 /* TurboCxxModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TurboCxxModule.h; path = react/nativemodule/core/ReactCommon/TurboCxxModule.h; sourceTree = \"<group>\"; };\n\t\tE6FCE774BCFCEC0A37C02233EE1A6DAF /* Yoga.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = Yoga.podspec; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\tE6FD88D73CEF39AD0A723267614B20B6 /* InstanceTarget.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = InstanceTarget.cpp; sourceTree = \"<group>\"; };\n\t\tE7178FECB829C9576A3723658B07F087 /* React-Codegen */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-Codegen\"; path = \"libReact-Codegen.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tE727F73300B53155B530D74924AD2BA8 /* RCTCxxConvert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTCxxConvert.h; sourceTree = \"<group>\"; };\n\t\tE743BFAD7A14315554014A32748265E1 /* Bits.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bits.h; path = folly/Bits.h; sourceTree = \"<group>\"; };\n\t\tE743DC457E6CABC5B13E68A381C20913 /* EventLogger.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = EventLogger.cpp; path = react/renderer/core/EventLogger.cpp; sourceTree = \"<group>\"; };\n\t\tE7531C53649FE630D622444E87454709 /* ReactCommon-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"ReactCommon-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\tE7807D90980DF5E58292BD819D067CCC /* pl.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = pl.lproj; path = React/I18n/strings/pl.lproj; sourceTree = \"<group>\"; };\n\t\tE78F20D79CCC9323B970100544DF75D4 /* ShadowTreeRevision.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ShadowTreeRevision.h; path = react/renderer/mounting/ShadowTreeRevision.h; sourceTree = \"<group>\"; };\n\t\tE7A75689694710ACECFF3C8C79D55E6D /* ReactNativeFeatureFlagsProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ReactNativeFeatureFlagsProvider.h; sourceTree = \"<group>\"; };\n\t\tE7ADD63BE36BD61FB54992AEEC51FACC /* PageTarget.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PageTarget.h; sourceTree = \"<group>\"; };\n\t\tE7FC6C39FE3AE33F288AB26DDA6BD6C4 /* Cache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Cache.h; sourceTree = \"<group>\"; };\n\t\tE80581A669DE626F703216374FF4C3A1 /* UnimplementedViewComponentDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UnimplementedViewComponentDescriptor.h; path = react/renderer/components/unimplementedview/UnimplementedViewComponentDescriptor.h; sourceTree = \"<group>\"; };\n\t\tE82D575C7FB3C2A029BADE7276472510 /* RCTPullToRefreshViewComponentView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTPullToRefreshViewComponentView.mm; sourceTree = \"<group>\"; };\n\t\tE8855C5F693E52309BAEA8C716104F71 /* RCTDebuggingOverlayManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTDebuggingOverlayManager.h; sourceTree = \"<group>\"; };\n\t\tE8A80DDDD78CE9D5045965620EF601A1 /* os.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = os.h; path = include/fmt/os.h; sourceTree = \"<group>\"; };\n\t\tE8A93054841794EAD58EB675761B8905 /* SocketRocket.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SocketRocket.release.xcconfig; sourceTree = \"<group>\"; };\n\t\tE8BF57389A0D82185746D63D05645956 /* React-featureflags-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-featureflags-umbrella.h\"; sourceTree = \"<group>\"; };\n\t\tE8C7733DDA1AF4D8C84201C849CE6990 /* React-rncore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-rncore.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\tE8CB40AE7BA0C7EB4EDD1532C9B8FAE8 /* SmallValueBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SmallValueBuffer.h; sourceTree = \"<group>\"; };\n\t\tE927497A3701D0E6AEB8ED2AF83B915B /* RCTMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTMacros.h; sourceTree = \"<group>\"; };\n\t\tE951AE3ED64705A1E7CF71EDD854B178 /* React-RCTImage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-RCTImage.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tE96C6053E99BB795AC55280C6C0B918F /* Sockets.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Sockets.h; path = folly/portability/Sockets.h; sourceTree = \"<group>\"; };\n\t\tE99066C5DDF65197FF753C23E54313CC /* CallbackWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CallbackWrapper.h; path = react/nativemodule/core/ReactCommon/CallbackWrapper.h; sourceTree = \"<group>\"; };\n\t\tE9AD225EDBC81406F600822BE5CB48E9 /* RCTThirdPartyFabricComponentsProvider.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RCTThirdPartyFabricComponentsProvider.mm; path = Fabric/RCTThirdPartyFabricComponentsProvider.mm; sourceTree = \"<group>\"; };\n\t\tE9B0012D9AC4C6EE1721D712922AF216 /* BridgelessJSCallInvoker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BridgelessJSCallInvoker.h; sourceTree = \"<group>\"; };\n\t\tE9C1D370414FE653DCC9FAE636F19160 /* MoveWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoveWrapper.h; path = folly/MoveWrapper.h; sourceTree = \"<group>\"; };\n\t\tE9C75E943A657F3153FF32A050DA7592 /* UnimplementedViewProps.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = UnimplementedViewProps.cpp; path = react/renderer/components/unimplementedview/UnimplementedViewProps.cpp; sourceTree = \"<group>\"; };\n\t\tE9D85EEAF42C9AF3CC1666F33CF872DD /* ReactPrimitives.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ReactPrimitives.h; path = react/renderer/core/ReactPrimitives.h; sourceTree = \"<group>\"; };\n\t\tE9E1F270CEDFF108574DFFDBE7F91985 /* NativeModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = NativeModule.h; sourceTree = \"<group>\"; };\n\t\tEA282133F1BB10E022D47B6CACE22054 /* RCTTypeSafety-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"RCTTypeSafety-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\tEA4EE4C6FAFA0A824AFDB30A96D0C144 /* Unit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Unit.h; sourceTree = \"<group>\"; };\n\t\tEA8C03F6178FA2682E0DD2D5F53F222E /* StubViewTree.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = StubViewTree.h; path = react/renderer/mounting/StubViewTree.h; sourceTree = \"<group>\"; };\n\t\tEA92D2D183344B3DA53FE9FC7B307DE6 /* primitives.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = primitives.h; path = react/renderer/animations/primitives.h; sourceTree = \"<group>\"; };\n\t\tEA980E88736BC513D1E4D3CF3B6A67E8 /* React-runtimescheduler.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-runtimescheduler.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tEAA2B5EA3356A9C6FCE82CC15F04FDC0 /* React-RCTSettings.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-RCTSettings.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tEADB1A8E010B5CA7F0E6C4071A9DDA92 /* RCTDisplayWeakRefreshable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTDisplayWeakRefreshable.h; path = Libraries/Image/RCTDisplayWeakRefreshable.h; sourceTree = \"<group>\"; };\n\t\tEADE36F3457E268442D18E096152CF53 /* RCTInstance.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RCTInstance.mm; path = ReactCommon/RCTInstance.mm; sourceTree = \"<group>\"; };\n\t\tEAF8192C1B7013E06F84C24D2B1110B0 /* RCTRawTextShadowView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTRawTextShadowView.h; sourceTree = \"<group>\"; };\n\t\tEB2EBC367DAD012021CB28C5D9106469 /* simdjson */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = simdjson; path = libsimdjson.a; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tEB71E81BC5E30853849F01DE038FCE31 /* UniqueInstance.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = UniqueInstance.cpp; path = folly/detail/UniqueInstance.cpp; sourceTree = \"<group>\"; };\n\t\tEB8033D6D308790A5A46B3BC15DD1BED /* TouchEvent.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = TouchEvent.cpp; path = react/renderer/components/view/TouchEvent.cpp; sourceTree = \"<group>\"; };\n\t\tEB9567C0DEFF8F845D6478F3CFDBD1AF /* RCTBaseTextInputView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTBaseTextInputView.mm; sourceTree = \"<group>\"; };\n\t\tEBC95FE616AEF3E48E3F113E5BB076C4 /* RCTImageManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = RCTImageManager.mm; path = react/renderer/imagemanager/RCTImageManager.mm; sourceTree = \"<group>\"; };\n\t\tEBF0BD1DADF4AA41730BF0DC7AF614AC /* RCTDeprecation.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RCTDeprecation.modulemap; sourceTree = \"<group>\"; };\n\t\tEC10C9531C237863B28A6E20B64DC15A /* RCTModalHostView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTModalHostView.m; sourceTree = \"<group>\"; };\n\t\tEC10CD8ABAB17D209CCD5FD3E42F2367 /* React-utils.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = \"React-utils.modulemap\"; sourceTree = \"<group>\"; };\n\t\tEC17C0D5E26D47755381DCEAE6861774 /* RCTTouchEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTTouchEvent.m; sourceTree = \"<group>\"; };\n\t\tEC5F5A9DB399E74A3B0F0CDEE200B40E /* Overflow.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Overflow.h; sourceTree = \"<group>\"; };\n\t\tEC7EC957168B2840A6783186671E89DB /* React-callinvoker.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-callinvoker.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tEC80A594ED6C17D4D0B191D585BE4089 /* RCTUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTUtils.m; sourceTree = \"<group>\"; };\n\t\tEC88B7FD82BE95C8547982311739D454 /* AccessibilityProps.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AccessibilityProps.h; path = react/renderer/components/view/AccessibilityProps.h; sourceTree = \"<group>\"; };\n\t\tECC51259933A05380339556B6ABE282E /* LayoutResults.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = LayoutResults.h; sourceTree = \"<group>\"; };\n\t\tECF657DA48FE202E91262C142A30C2EA /* Benchmark.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Benchmark.h; path = folly/Benchmark.h; sourceTree = \"<group>\"; };\n\t\tED025FBB53B0B481493FAFFAED14F5E6 /* RCTViewUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTViewUtils.m; sourceTree = \"<group>\"; };\n\t\tED0263B5DB4AF04BF5391CA51E3AE6F4 /* TurboModuleUtils.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = TurboModuleUtils.cpp; path = react/nativemodule/core/ReactCommon/TurboModuleUtils.cpp; sourceTree = \"<group>\"; };\n\t\tED075D1904D8F2A132AD09A4B59B2BE9 /* RCTKeyboardObserver.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTKeyboardObserver.mm; sourceTree = \"<group>\"; };\n\t\tED0D60F3F216448664954D0D5A35FECE /* ja.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = ja.lproj; path = React/I18n/strings/ja.lproj; sourceTree = \"<group>\"; };\n\t\tED3AFC07867C7C0F7FA6437AB25AB2C0 /* RCTHost.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTHost.h; path = ReactCommon/RCTHost.h; sourceTree = \"<group>\"; };\n\t\tED8BCB98B8CAFA45445802548B32ED28 /* ModalHostViewShadowNode.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ModalHostViewShadowNode.cpp; path = react/renderer/components/modal/ModalHostViewShadowNode.cpp; sourceTree = \"<group>\"; };\n\t\tED92914EB3DF6C80AB5B7CF1AF9F3EE4 /* Thunk.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Thunk.h; path = folly/lang/Thunk.h; sourceTree = \"<group>\"; };\n\t\tEDB17360845E700286BDE806E67E8AA0 /* CoreFeatures.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CoreFeatures.h; sourceTree = \"<group>\"; };\n\t\tEDB46ABA9CC235068ECA4A848DB17EE8 /* UnstableLegacyViewManagerAutomaticShadowNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UnstableLegacyViewManagerAutomaticShadowNode.h; path = react/renderer/components/legacyviewmanagerinterop/UnstableLegacyViewManagerAutomaticShadowNode.h; sourceTree = \"<group>\"; };\n\t\tEDBAAC4C0FEDEB6F19329DEE85E71512 /* RCTDevMenu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTDevMenu.h; path = React/CoreModules/RCTDevMenu.h; sourceTree = \"<group>\"; };\n\t\tEDE4A26ED9B011F0E70494EBA45F89FE /* RCTFont.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTFont.mm; sourceTree = \"<group>\"; };\n\t\tEDE4EBF1DFE11D301F8A60F2D5B99F29 /* RCTTypeSafety.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RCTTypeSafety.debug.xcconfig; sourceTree = \"<group>\"; };\n\t\tEE85F8AC8EA65010815F0C5ED9826E3F /* React-RCTFabric.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = \"React-RCTFabric.modulemap\"; sourceTree = \"<group>\"; };\n\t\tEEAA1C4C0F827F9E5B0E9A8A96B8B9D7 /* Baseline.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Baseline.h; sourceTree = \"<group>\"; };\n\t\tEEB4D9ABDCA5AC8FCD10C726DD32E01C /* RCTGenericDelegateSplitter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTGenericDelegateSplitter.h; sourceTree = \"<group>\"; };\n\t\tEEC8AE4B19CE176574DF457505E2B9CF /* FileUtil.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = FileUtil.cpp; path = folly/FileUtil.cpp; sourceTree = \"<group>\"; };\n\t\tEEDBF403E8E0B3885E65C2741B536BC5 /* React-RCTImage */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-RCTImage\"; path = \"libReact-RCTImage.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tEF09FB3371BC4A515D26FC037059DD61 /* React-rendererdebug.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = \"React-rendererdebug.modulemap\"; sourceTree = \"<group>\"; };\n\t\tEF112ACF0D0F90B1AAF3D112F650FA09 /* PixelGrid.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PixelGrid.h; sourceTree = \"<group>\"; };\n\t\tEF23890C4D36D03EA1DD037AFEFF15C6 /* Libgen.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Libgen.h; path = folly/portability/Libgen.h; sourceTree = \"<group>\"; };\n\t\tEF33D80102A84702AA2E2212D875E506 /* raw_logging.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = raw_logging.cc; path = src/raw_logging.cc; sourceTree = \"<group>\"; };\n\t\tEF3D0DF483D191D626F907294861A317 /* ProducerConsumerQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ProducerConsumerQueue.h; path = folly/ProducerConsumerQueue.h; sourceTree = \"<group>\"; };\n\t\tEF7790CCA0F33012360CF9BA24706CF9 /* UIManagerBinding.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = UIManagerBinding.cpp; path = react/renderer/uimanager/UIManagerBinding.cpp; sourceTree = \"<group>\"; };\n\t\tEFB5E0D35E76A4F34C8D5195B2051AF6 /* AsynchronousEventBeat.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = AsynchronousEventBeat.cpp; path = react/renderer/scheduler/AsynchronousEventBeat.cpp; sourceTree = \"<group>\"; };\n\t\tEFCF80831E029EAC9ECFEDFA8C0B0BE9 /* ConcurrentBitSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ConcurrentBitSet.h; path = folly/ConcurrentBitSet.h; sourceTree = \"<group>\"; };\n\t\tEFDD8B247497E208D149C9C12E8045C7 /* Hash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Hash.h; path = folly/hash/Hash.h; sourceTree = \"<group>\"; };\n\t\tF03D40C105C0F07D9C18AE34F3B494A0 /* ViewComponentDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ViewComponentDescriptor.h; path = react/renderer/components/view/ViewComponentDescriptor.h; sourceTree = \"<group>\"; };\n\t\tF03DB7552362CE2CC5261B0ECE866C50 /* React-Core-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-Core-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\tF04C97A51C7A3AE18D87F7881C39DC76 /* zu.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = zu.lproj; path = React/I18n/strings/zu.lproj; sourceTree = \"<group>\"; };\n\t\tF07A956888DB0839EE8710AF70182297 /* Lazy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Lazy.h; path = folly/Lazy.h; sourceTree = \"<group>\"; };\n\t\tF07D525DF93C69AEC8946C90CEB695C1 /* RCTCxxBridgeDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTCxxBridgeDelegate.h; sourceTree = \"<group>\"; };\n\t\tF08460D67FAF18E84D6207E257538D64 /* log_severity.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = log_severity.h; path = src/glog/log_severity.h; sourceTree = \"<group>\"; };\n\t\tF0868E477C8DA25C9CE631F4131B2C2F /* CallbackOStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CallbackOStream.h; path = destroot/include/hermes/inspector/chrome/CallbackOStream.h; sourceTree = \"<group>\"; };\n\t\tF0A85939544D109BFA4572C401B51D9E /* PointerEventsProcessor.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = PointerEventsProcessor.cpp; path = react/renderer/uimanager/PointerEventsProcessor.cpp; sourceTree = \"<group>\"; };\n\t\tF0DF8AFAE1CBEF65355E92467584E4A5 /* componentNameByReactViewName.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = componentNameByReactViewName.h; path = react/renderer/componentregistry/componentNameByReactViewName.h; sourceTree = \"<group>\"; };\n\t\tF0EA3D90914575269885513BFC07386C /* React-Mapbuffer.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-Mapbuffer.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tF138DB447C457AE8D0B432C87AB6D5C2 /* NativeSemaphore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NativeSemaphore.h; path = folly/synchronization/NativeSemaphore.h; sourceTree = \"<group>\"; };\n\t\tF1446E5B5E1E6532A8129EC19A5BC514 /* FileUtilVectorDetail.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FileUtilVectorDetail.h; path = folly/detail/FileUtilVectorDetail.h; sourceTree = \"<group>\"; };\n\t\tF1455C7DE425F051F50E3E27295C794D /* RCTNativeAnimatedModule.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTNativeAnimatedModule.mm; sourceTree = \"<group>\"; };\n\t\tF14EDE5F666391049AE8B82BFE391E88 /* RCTRefreshControlManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTRefreshControlManager.m; sourceTree = \"<group>\"; };\n\t\tF15F1FDA5B8172C6781AEDF956D65B0C /* Error.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Error.h; path = react/bridging/Error.h; sourceTree = \"<group>\"; };\n\t\tF1758BCE0D6DB0A37CD1E35331999A52 /* ScrollViewProps.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ScrollViewProps.cpp; path = react/renderer/components/scrollview/ScrollViewProps.cpp; sourceTree = \"<group>\"; };\n\t\tF17EBB71C3E56527394A1105831F5DF5 /* React-featureflags-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"React-featureflags-prefix.pch\"; sourceTree = \"<group>\"; };\n\t\tF1A6297972EED0526BCBF5B221AE18AC /* RCTSurfaceProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTSurfaceProtocol.h; sourceTree = \"<group>\"; };\n\t\tF1AB976E1A25C3A525A7919E63A9BA92 /* ValueFactoryEventPayload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ValueFactoryEventPayload.h; path = react/renderer/core/ValueFactoryEventPayload.h; sourceTree = \"<group>\"; };\n\t\tF1FA54C72A9856CD3D0A6B6E24B06E7E /* RCTMountingTransactionObserving.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTMountingTransactionObserving.h; sourceTree = \"<group>\"; };\n\t\tF2164B5DB3B104B55F7AEC0D7FC1AF24 /* SchedulerToolbox.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SchedulerToolbox.h; path = react/renderer/scheduler/SchedulerToolbox.h; sourceTree = \"<group>\"; };\n\t\tF21C8B792A111FE6F3696917CC8DD458 /* CDPHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CDPHandler.h; path = destroot/include/hermes/inspector/chrome/CDPHandler.h; sourceTree = \"<group>\"; };\n\t\tF261A91F0724E8B1486A1BC201FD1425 /* RCTMountingTransactionObserverCoordinator.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTMountingTransactionObserverCoordinator.mm; sourceTree = \"<group>\"; };\n\t\tF275B31E7A8AAE45DABF741983B8C743 /* ObjCTimerRegistry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ObjCTimerRegistry.h; path = ReactCommon/ObjCTimerRegistry.h; sourceTree = \"<group>\"; };\n\t\tF275D02F7C84889FF25195DE592C2875 /* RCTCallableJSModules.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTCallableJSModules.m; sourceTree = \"<group>\"; };\n\t\tF277FEF63DB910E42C66936C8592693A /* RCTDevLoadingView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTDevLoadingView.mm; sourceTree = \"<group>\"; };\n\t\tF278184653BF83F13E9A2484D2F4F8C1 /* NSDataBigString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = NSDataBigString.h; sourceTree = \"<group>\"; };\n\t\tF28A2D4EC3F7FA5178A446213C416F6C /* RCTMultiplicationAnimatedNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTMultiplicationAnimatedNode.h; sourceTree = \"<group>\"; };\n\t\tF2E7C88DFCD460A4B46B913ADEB8A641 /* React-jsiexecutor */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-jsiexecutor\"; path = \"libReact-jsiexecutor.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tF3070DCC47CC323B0236AAA591CC207A /* InspectorPackagerConnection.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorPackagerConnection.cpp; sourceTree = \"<group>\"; };\n\t\tF310EF16EE5EAA4714DFD2F1713D1B73 /* BindingsInstaller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BindingsInstaller.h; sourceTree = \"<group>\"; };\n\t\tF336A6F8A52B443F471C3A212D86DC43 /* cached-powers.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = \"cached-powers.cc\"; path = \"double-conversion/cached-powers.cc\"; sourceTree = \"<group>\"; };\n\t\tF35ECB508AB87E99C735B9A8219E2790 /* RCTObjectAnimatedNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTObjectAnimatedNode.h; sourceTree = \"<group>\"; };\n\t\tF37B91C0C1BDCB74BF74E5D62F1A84B8 /* flags.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = flags.h; sourceTree = \"<group>\"; };\n\t\tF3822D806026A4FCC42B9B6C3AD50045 /* Comparison.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Comparison.h; sourceTree = \"<group>\"; };\n\t\tF3EC6BC861DA61263020A86CB2DDC307 /* React-jserrorhandler-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"React-jserrorhandler-dummy.m\"; sourceTree = \"<group>\"; };\n\t\tF3F5D9E03D596413A96FCC9292384B7D /* States.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = States.cpp; path = react/renderer/components/rncore/States.cpp; sourceTree = \"<group>\"; };\n\t\tF40435B6D082BD6480C723A692DFB94D /* RCTLinkingManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTLinkingManager.h; path = Libraries/LinkingIOS/RCTLinkingManager.h; sourceTree = \"<group>\"; };\n\t\tF40DA4337071C6A25D759BAE9D00C90A /* CoreModulesPlugins.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CoreModulesPlugins.h; path = React/CoreModules/CoreModulesPlugins.h; sourceTree = \"<group>\"; };\n\t\tF4116A5CF0A3EC97879DE8D115EB9AC5 /* Dynamic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Dynamic.h; path = react/bridging/Dynamic.h; sourceTree = \"<group>\"; };\n\t\tF468DC980FF349730A91EAB27AA80749 /* TextInputShadowNode.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = TextInputShadowNode.cpp; path = react/renderer/components/textinput/platform/ios/react/renderer/components/iostextinput/TextInputShadowNode.cpp; sourceTree = \"<group>\"; };\n\t\tF481D215714FD018CDA8C79540DDC6A8 /* LayoutAnimationStatusDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LayoutAnimationStatusDelegate.h; path = react/renderer/uimanager/LayoutAnimationStatusDelegate.h; sourceTree = \"<group>\"; };\n\t\tF488B5803551A7C6E8D0B3F34C4823D0 /* RCTJavaScriptLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTJavaScriptLoader.h; sourceTree = \"<group>\"; };\n\t\tF4A1A873A0B3D3C8636143BB6282A12D /* RCTSurfaceTouchHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTSurfaceTouchHandler.h; path = Fabric/RCTSurfaceTouchHandler.h; sourceTree = \"<group>\"; };\n\t\tF4BDA69E3BCB0166D49FB679ABADCA00 /* fmt */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = fmt; path = libfmt.a; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tF4D03D4133A485BCCB2117CF4DDE2ED6 /* RuntimeAgentDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RuntimeAgentDelegate.h; sourceTree = \"<group>\"; };\n\t\tF4FDC94B0FAFD47D454687DEABE33319 /* SessionState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SessionState.h; sourceTree = \"<group>\"; };\n\t\tF51332CA416FB0997A5A9763AC54075F /* UniqueInstance.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UniqueInstance.h; path = folly/detail/UniqueInstance.h; sourceTree = \"<group>\"; };\n\t\tF524D0F42CA29ACE3E6C3098C858C502 /* Keep.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Keep.h; path = folly/lang/Keep.h; sourceTree = \"<group>\"; };\n\t\tF56A35A5E128A460F52E75B7F79344AC /* RawPropsPrimitives.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RawPropsPrimitives.h; path = react/renderer/core/RawPropsPrimitives.h; sourceTree = \"<group>\"; };\n\t\tF5710B431788CFA607B0F39F45EC6E64 /* MountingTransaction.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = MountingTransaction.cpp; path = react/renderer/mounting/MountingTransaction.cpp; sourceTree = \"<group>\"; };\n\t\tF59674BB4A1D0F323148B07D7D682AC2 /* RectangleCorners.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RectangleCorners.h; sourceTree = \"<group>\"; };\n\t\tF59815A7A4241A59BAFADEAB6160D7C8 /* Builtin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Builtin.h; path = folly/lang/Builtin.h; sourceTree = \"<group>\"; };\n\t\tF5A6371CE2CB24DC0532ACC93642CC48 /* RCTConversions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTConversions.h; path = Fabric/RCTConversions.h; sourceTree = \"<group>\"; };\n\t\tF5D3D4E731B1EF9C93FC2A49ABDAD388 /* EventPayload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EventPayload.h; path = react/renderer/core/EventPayload.h; sourceTree = \"<group>\"; };\n\t\tF5DE3D6B8F9687E6EC775B55B6F528E4 /* CompileJS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CompileJS.h; path = destroot/include/hermes/CompileJS.h; sourceTree = \"<group>\"; };\n\t\tF5F74E1220FBDEDB27401F3F98612EC8 /* ComponentDescriptorFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ComponentDescriptorFactory.h; path = react/renderer/componentregistry/ComponentDescriptorFactory.h; sourceTree = \"<group>\"; };\n\t\tF60384F886271F9FE990A1E05F65D620 /* LayoutAnimationKeyFrameManager.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = LayoutAnimationKeyFrameManager.cpp; path = react/renderer/animations/LayoutAnimationKeyFrameManager.cpp; sourceTree = \"<group>\"; };\n\t\tF6312EB0499C783D68B98C5D0AFAB4A7 /* RCTUITextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTUITextView.h; sourceTree = \"<group>\"; };\n\t\tF65B8FCE4C82DE06C4DC544668252210 /* NSURLRequest+SRWebSocketPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"NSURLRequest+SRWebSocketPrivate.h\"; path = \"SocketRocket/Internal/NSURLRequest+SRWebSocketPrivate.h\"; sourceTree = \"<group>\"; };\n\t\tF65EDF84A53562B923789233A6319309 /* RCTInitializing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTInitializing.h; sourceTree = \"<group>\"; };\n\t\tF6649A5E0CB0CD5E9B98CB49FE510D25 /* Hash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Hash.h; path = folly/Hash.h; sourceTree = \"<group>\"; };\n\t\tF680F8EC8BBE5EFCCD2F2F64A35E6132 /* React-RCTAppDelegate.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-RCTAppDelegate.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\tF69D2C7C3E6181971A1F8D04108BC7D4 /* ThreadId.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ThreadId.h; path = folly/system/ThreadId.h; sourceTree = \"<group>\"; };\n\t\tF6BD4677A9809440AF9F9498F2E0115B /* RCTBaseTextInputViewManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTBaseTextInputViewManager.mm; sourceTree = \"<group>\"; };\n\t\tF713F14C913C9157BF2CDF26BF5F279C /* SynthTraceParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SynthTraceParser.h; path = destroot/include/hermes/SynthTraceParser.h; sourceTree = \"<group>\"; };\n\t\tF71EBF73F354B475D465FF6DE9A66707 /* React-RCTBlob */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-RCTBlob\"; path = \"libReact-RCTBlob.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tF78A76F0BB8E6B3D92D46FB8C08FF72B /* RCTInterpolationAnimatedNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTInterpolationAnimatedNode.h; sourceTree = \"<group>\"; };\n\t\tF7CA9A9E0677E6E622E8C0C6BFC057B5 /* HermesExecutorFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = HermesExecutorFactory.h; sourceTree = \"<group>\"; };\n\t\tF7CB0C6D6849C6DA8C5BCBFA3B2651ED /* RCTVirtualTextViewManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTVirtualTextViewManager.mm; sourceTree = \"<group>\"; };\n\t\tF7D701E7AA313B498D488AA43D416F3F /* ImageResponseObserverCoordinator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ImageResponseObserverCoordinator.h; path = react/renderer/imagemanager/ImageResponseObserverCoordinator.h; sourceTree = \"<group>\"; };\n\t\tF7DCF7DBDA1DB363572544D437D1EB4A /* MallocImpl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MallocImpl.h; path = folly/memory/detail/MallocImpl.h; sourceTree = \"<group>\"; };\n\t\tF7FB105B5F150706FC7A1068544C1C16 /* LegacyViewManagerInteropShadowNode.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = LegacyViewManagerInteropShadowNode.cpp; path = react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropShadowNode.cpp; sourceTree = \"<group>\"; };\n\t\tF8025E613E68EA6B0C75074A74BB97E4 /* RCTComponentViewHelpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTComponentViewHelpers.h; path = react/renderer/components/rncore/RCTComponentViewHelpers.h; sourceTree = \"<group>\"; };\n\t\tF804F0627373E6C63D34AAD65291FD24 /* sorted_vector_types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = sorted_vector_types.h; path = folly/sorted_vector_types.h; sourceTree = \"<group>\"; };\n\t\tF83C31C20E032D387D9A04D68DAC8265 /* propsConversions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = propsConversions.h; path = react/renderer/components/view/propsConversions.h; sourceTree = \"<group>\"; };\n\t\tF852C98DD1BF5640292AF6AAF675EA58 /* DoubleConversion-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"DoubleConversion-dummy.m\"; sourceTree = \"<group>\"; };\n\t\tF89962533E4FDDA2F999DA26DF69D135 /* JSINativeModules.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = JSINativeModules.cpp; path = jsireact/JSINativeModules.cpp; sourceTree = \"<group>\"; };\n\t\tF89AC6E92A39CCDDE8DAD6BE98D3C4D1 /* MemoryResource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MemoryResource.h; path = folly/memory/MemoryResource.h; sourceTree = \"<group>\"; };\n\t\tF8AFFDB6E319041377C5799A85CD2848 /* NSURLRequest+SRWebSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = \"NSURLRequest+SRWebSocket.m\"; path = \"SocketRocket/NSURLRequest+SRWebSocket.m\"; sourceTree = \"<group>\"; };\n\t\tF8DEF690935571E2BA15F11F274EE883 /* RCTContextContainerHandling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTContextContainerHandling.h; path = ReactCommon/RCTContextContainerHandling.h; sourceTree = \"<group>\"; };\n\t\tF8E385BE54CB846981F47BD4BBF298BC /* React-NativeModulesApple.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-NativeModulesApple.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tF8E43EE33594D104C5EF3813E34DEAFB /* AttributedString.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = AttributedString.cpp; path = react/renderer/attributedstring/AttributedString.cpp; sourceTree = \"<group>\"; };\n\t\tF8ECC27DA5BDBC6D1C55FD6C21B19E9B /* StaticConst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = StaticConst.h; path = folly/lang/StaticConst.h; sourceTree = \"<group>\"; };\n\t\tF91CC1CB5BBFE630F1A219C0EDA145B9 /* json.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = json.cpp; path = folly/json.cpp; sourceTree = \"<group>\"; };\n\t\tF923F037E88C68DA2463BCD75AA9ED60 /* SocketRocket.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SocketRocket.debug.xcconfig; sourceTree = \"<group>\"; };\n\t\tF9281ACFABCEF5289629EF6589504A67 /* CallOnce.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CallOnce.h; path = folly/synchronization/CallOnce.h; sourceTree = \"<group>\"; };\n\t\tF9317E9FDB1763149AA85D21D664A706 /* RCTUtilsUIOverride.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTUtilsUIOverride.h; sourceTree = \"<group>\"; };\n\t\tF958876A082BF810B342435CE3FB5AF6 /* RCTTypeSafety */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = RCTTypeSafety; path = libRCTTypeSafety.a; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tF969DDD826E4A83C1AAE180C9E9DB314 /* RCTModuleRegistry.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTModuleRegistry.m; sourceTree = \"<group>\"; };\n\t\tF9741807E424A3C28F079A8146D8AF4D /* RCTPropsAnimatedNode.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTPropsAnimatedNode.mm; sourceTree = \"<group>\"; };\n\t\tF97A942E5EB0FD88E4C166A5F5716585 /* React-RCTFabric.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = \"React-RCTFabric.podspec\"; sourceTree = \"<group>\"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\tF98C396019C17AFAC2E6514744534845 /* RCTPlatformColorUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTPlatformColorUtils.h; sourceTree = \"<group>\"; };\n\t\tF9E3E83E4B4A307A114208C3D1F55BC8 /* RCTUIManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTUIManager.h; sourceTree = \"<group>\"; };\n\t\tF9FB962222C7D13D456DA7490A882D10 /* ExecutionContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ExecutionContext.h; sourceTree = \"<group>\"; };\n\t\tFA397527B29CC2470176B423C005BEE9 /* ru.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = ru.lproj; path = React/I18n/strings/ru.lproj; sourceTree = \"<group>\"; };\n\t\tFA4AEB20C629FD1B5F713C79D99E301D /* FBLazyIterator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBLazyIterator.h; path = FBLazyVector/FBLazyIterator.h; sourceTree = \"<group>\"; };\n\t\tFA6E512F724BFB0B3D270261962078F8 /* React-RCTLinking.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-RCTLinking.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tFAB1A2AAEAD536D71C08D8CE9C14F3D8 /* RemoteObjectConverters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RemoteObjectConverters.h; path = destroot/include/hermes/inspector/chrome/RemoteObjectConverters.h; sourceTree = \"<group>\"; };\n\t\tFADAE66E358428988B767C2AAC5E2119 /* Pid.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Pid.h; path = folly/system/Pid.h; sourceTree = \"<group>\"; };\n\t\tFADE4C50E4C03A98702AAB8CE87A3D81 /* NSTextStorage+FontScaling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = \"NSTextStorage+FontScaling.h\"; sourceTree = \"<group>\"; };\n\t\tFAF931EFC80EAFDA3EA6E9A6F62665B8 /* RCTFrameUpdate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTFrameUpdate.m; sourceTree = \"<group>\"; };\n\t\tFB0002CFA1F991284A466F64F3CDD670 /* Uri-inl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = \"Uri-inl.h\"; path = \"folly/Uri-inl.h\"; sourceTree = \"<group>\"; };\n\t\tFB10906EE52FB99A63183406F2DFD2AC /* ReactCommon-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = \"ReactCommon-dummy.m\"; sourceTree = \"<group>\"; };\n\t\tFB2A143E4389164E0F2CCDB7122BD9F1 /* RCTDynamicTypeRamp.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTDynamicTypeRamp.mm; sourceTree = \"<group>\"; };\n\t\tFB5D34754AD28372AC075C4836BC9BDD /* it.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = it.lproj; path = React/I18n/strings/it.lproj; sourceTree = \"<group>\"; };\n\t\tFB687C9F11521E5B9F74197C09608F8E /* WMDatabaseBridge.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = WMDatabaseBridge.m; sourceTree = \"<group>\"; };\n\t\tFBC253E87364123EF03ADC474B7364C8 /* RCTRedBoxSetEnabled.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTRedBoxSetEnabled.m; sourceTree = \"<group>\"; };\n\t\tFBC65E4ADA0C93CAF6F0857E1767393E /* RCTEventDispatcher.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTEventDispatcher.mm; sourceTree = \"<group>\"; };\n\t\tFBC79A9C5A60A939EF7BBEFBE8449906 /* RCTBlobCollector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTBlobCollector.h; sourceTree = \"<group>\"; };\n\t\tFBE36ADE7B7AF7E211B4A734D83A30BF /* MoveWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MoveWrapper.h; sourceTree = \"<group>\"; };\n\t\tFC28EEFD6B8B7AAEB56E2A041A6DDCB5 /* JSBundleType.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = JSBundleType.cpp; sourceTree = \"<group>\"; };\n\t\tFC391A89C7D8499E264ADBDD9F59F736 /* Rect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Rect.h; sourceTree = \"<group>\"; };\n\t\tFC3E576BEEE24C22BAB754F8BDA7D822 /* FileUtilDetail.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FileUtilDetail.h; path = folly/detail/FileUtilDetail.h; sourceTree = \"<group>\"; };\n\t\tFC43226FF6ADEAB1549A1CDD67BEC74A /* CancellationToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CancellationToken.h; path = folly/CancellationToken.h; sourceTree = \"<group>\"; };\n\t\tFC938492EE25EDBA884D42C17EE1E89B /* RCTPackagerConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTPackagerConnection.h; sourceTree = \"<group>\"; };\n\t\tFCAE6D5FA62309B748866975B6AA85DC /* RCTRootViewFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTRootViewFactory.h; sourceTree = \"<group>\"; };\n\t\tFCFD99083FD714E25C32912BE07EEE2F /* vlog_is_on.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = vlog_is_on.h; path = src/glog/vlog_is_on.h; sourceTree = \"<group>\"; };\n\t\tFD2AA627BA11571293760EA92516290E /* hermes.xcframework */ = {isa = PBXFileReference; includeInIndex = 1; name = hermes.xcframework; path = destroot/Library/Frameworks/universal/hermes.xcframework; sourceTree = \"<group>\"; };\n\t\tFD2B5192F4D25A120B9FBA56082E1498 /* TurboModuleBinding.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = TurboModuleBinding.cpp; path = react/nativemodule/core/ReactCommon/TurboModuleBinding.cpp; sourceTree = \"<group>\"; };\n\t\tFD851DC7951B65E103BB27B6706B8EE3 /* BaseViewEventEmitter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BaseViewEventEmitter.h; path = react/renderer/components/view/BaseViewEventEmitter.h; sourceTree = \"<group>\"; };\n\t\tFDAA60177E608D75C530E2C86C1BD33A /* RCTRootView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = RCTRootView.m; sourceTree = \"<group>\"; };\n\t\tFDD85087D17F29E409E05B785CAEF845 /* RCTBackedTextInputViewProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTBackedTextInputViewProtocol.h; sourceTree = \"<group>\"; };\n\t\tFDF1FDBD6E5C45FE24CB4F2C3B228AF2 /* Telemetry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Telemetry.h; sourceTree = \"<group>\"; };\n\t\tFE123FC7D80F16C162FBB579CF5DBD81 /* Parsing.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = Parsing.cpp; sourceTree = \"<group>\"; };\n\t\tFE4DF00236D3CFC9333AC4F2536AD07C /* RCTTextViewManager.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTTextViewManager.mm; sourceTree = \"<group>\"; };\n\t\tFE7B9294FF05AAFD1653E2104E10844A /* React-RCTAnimation */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = \"React-RCTAnimation\"; path = \"libReact-RCTAnimation.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tFE9C8096CC17775F6B3D7F51F755BF88 /* F14Defaults.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = F14Defaults.h; path = folly/container/detail/F14Defaults.h; sourceTree = \"<group>\"; };\n\t\tFEB18EBDB42AC349730BA29BCF965FC6 /* SurfaceHandler.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = SurfaceHandler.cpp; path = react/renderer/scheduler/SurfaceHandler.cpp; sourceTree = \"<group>\"; };\n\t\tFEB255691DB29610BDE1D3938C435B8C /* React-Core.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-Core.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tFEBC85A59D1771FEE07769D206EDEC9B /* WMDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = WMDatabase.h; sourceTree = \"<group>\"; };\n\t\tFF16234911D787047083140DEC397AC5 /* RCTJSStackFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTJSStackFrame.h; sourceTree = \"<group>\"; };\n\t\tFF7AD4797D7F14A650587773DE9EDC89 /* Instance.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = Instance.cpp; sourceTree = \"<group>\"; };\n\t\tFF822F0F4BB64652EAD4246D353613C0 /* RCTVirtualTextShadowView.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = RCTVirtualTextShadowView.mm; sourceTree = \"<group>\"; };\n\t\tFF88A9733D935D4DBE027D36D5B591C1 /* RCTScrollContentShadowView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTScrollContentShadowView.h; sourceTree = \"<group>\"; };\n\t\tFF88C9A8B1E0A79468C40F286C239533 /* FileUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FileUtil.h; path = folly/FileUtil.h; sourceTree = \"<group>\"; };\n\t\tFFA2A883F42A90CB3B4B86BA995A7239 /* FMDatabasePool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FMDatabasePool.h; sourceTree = \"<group>\"; };\n\t\tFFA331C6B5744B16007B95A0D3EA96D8 /* RCTComponentViewFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RCTComponentViewFactory.h; sourceTree = \"<group>\"; };\n\t\tFFD4B861CCFBFBB3B9059A2DCEDE8D24 /* RCTActionSheetManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RCTActionSheetManager.h; path = React/CoreModules/RCTActionSheetManager.h; sourceTree = \"<group>\"; };\n\t\tFFE3B6010494BF1759723F25C1271613 /* React-RCTVibration.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = \"React-RCTVibration.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tFFF4EAA32AB91B28A1ACBB7030CB8484 /* Bool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bool.h; path = react/bridging/Bool.h; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t0139C1ECDC2157867F618C9EA3EB1FFF /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t18D45363A5C31117A24DD45090EE585D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1E96689E45440CA500F1377CF69C3FBD /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t20F4275A9630980BAF5F77C0EE302D2D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t303A5D98CB7E8BAC37153C94A9723DB8 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t31C42BB3E2E25E43EB019EDC29907F97 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t31DEECC7D9F4687AA05692751E71642F /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t32445F0B48FFAD562A3D7EFA997FE471 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t35249E191E5E9A9BCF3C012B7231E4E5 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t38A83589C7A3FB59CFE0094947B15535 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t394B09545766677D0A263723DBEE5DD5 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t3E93992A6915E912ABBC7FD7BB09ACF2 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t401DCA93590F154762BC1D9585CB8A7D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t41E92B86A8DA922F93FB3895A411CD96 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t4484CB8C5EC3D4C457E3791F1EDA81A4 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t4E6BB43FE92C85896EF4652D5008EE41 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t53C4D790BC130A50096231A17E5B83B6 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t555A04A540081AC49C8E6E99B4A994A8 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t5D70EF7822C104273D2101F12A77DA2E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t61D9AB3CF28105161B660B3A2569110A /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6B85A179CAD33992F413D8BD3E7F2D36 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6F4E2E05C47567492210B48CF3716282 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t75122507248AC3D88667540F35C80F67 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t7B00CA1FF92C8EE49D682945D65F7919 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t82C4242EC83DE2399BE5CCCAD8D44002 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t87CD4246A6A77E44C9BDD640317549F9 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t89ED61ED54C1E87A03D923846D1CCD5D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t917B37A67EC657DE7A1DB7AC71C9BA46 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t953D5F4F2F49FBAA1C7494F06276AA72 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t976D53391EFB92F67FDDDF48FC18C587 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9BE70249785B143A20B5733C856CB911 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA9D4B85BB6017441753A3CED16046934 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tADA95567AC41717C4D2DD30CB60CDA9A /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tAE7FBB9DE413C21987453291581B80C1 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tB069C5D34B9F29495B74E527819ECEE8 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tB0F3C1490E731E02547F366CAC459882 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tB490F5C3DE68C34A228783FAAEBE1CCD /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tBD2E44394098D59D4216910EB6123099 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tBF9F98FB7155A6900208145875893CA8 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC045B01A5A6B7CCA78D61826BA82820C /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC4687459249DD90C9583CD8F4F17FD73 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC7E0A0DF29622DB6BD97632058301AC7 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tCA724DED2831B905A1998F902665A550 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD532CB49CB8E79A6C3551005CB82786E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD94BECEDC7E7186443633477224FEDF3 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE6721EB4E54C19B70C3D2E41970D775A /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE8527906ED69AB38F1A6149B0ED3AFB4 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tF135DDD9CC12F6A1A80D36F03447C5F9 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tF6D7800EEE85719978FE04577571C010 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tF99F6C110F1AB91CEFC1511B3107B904 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t035DBCF1705BBA1D99967CF1081992BA /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t45FA7F5F8B8980E56D777737778E2381 /* React-RCTImage-dummy.m */,\n\t\t\t\t13EEFF365502DE9E6776D22ADDDCE4A5 /* React-RCTImage-prefix.pch */,\n\t\t\t\tE553A373CAD882BEE4374E43EBAD7556 /* React-RCTImage.debug.xcconfig */,\n\t\t\t\tE951AE3ED64705A1E7CF71EDD854B178 /* React-RCTImage.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../native/iosTest/Pods/Target Support Files/React-RCTImage\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t04EF134638BEC021D2EE29A5DCDA421C /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t77BAB7AB8A4B785443BC2813FC1B32C6 /* React-logger-dummy.m */,\n\t\t\t\t64E2EBE04E636B603A934FE6A23B5CFA /* React-logger-prefix.pch */,\n\t\t\t\t0EB25BDE8A306950B650A09F1A8ED625 /* React-logger.debug.xcconfig */,\n\t\t\t\tE39F032BC206A3CC16C40890B632D25E /* React-logger.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../native/iosTest/Pods/Target Support Files/React-logger\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t05D208CCDDA721B65483F6B6D4343BF1 /* Singleline */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t28992A73B6E2E3C1194912C0730023B1 /* RCTSinglelineTextInputView.mm */,\n\t\t\t\t28F712315F7CD5B5F84A557475518AF3 /* RCTSinglelineTextInputViewManager.mm */,\n\t\t\t\t940919353E8C57E4A2A3101E8CD0FA67 /* RCTUITextField.mm */,\n\t\t\t);\n\t\t\tname = Singleline;\n\t\t\tpath = Singleline;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t07FB6EB17C1139D744295711E31ED459 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t41232C04153D6B0482F696CC52538B79 /* React-NativeModulesApple.modulemap */,\n\t\t\t\t9F5340BCCBE419D365ECF7F577F67C2B /* React-NativeModulesApple-dummy.m */,\n\t\t\t\t11570ADC72BE55D73F846D94EDF7C249 /* React-NativeModulesApple-prefix.pch */,\n\t\t\t\t7A59848A45BE0F5FCEF4561B500527CB /* React-NativeModulesApple-umbrella.h */,\n\t\t\t\tF8E385BE54CB846981F47BD4BBF298BC /* React-NativeModulesApple.debug.xcconfig */,\n\t\t\t\tE39930085671F1947A94AAE3B2EB3580 /* React-NativeModulesApple.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../../../../../native/iosTest/Pods/Target Support Files/React-NativeModulesApple\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t08063C19264EDBC412CBC2513BC4077D /* RCTLinkingHeaders */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF40435B6D082BD6480C723A692DFB94D /* RCTLinkingManager.h */,\n\t\t\t\t8E93927BD0D92FEB9D950507CCF5E2FF /* RCTLinkingPlugins.h */,\n\t\t\t);\n\t\t\tname = RCTLinkingHeaders;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t089C4657A87D27FA4637D12E4F163527 /* React-rncore */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0B323E3B0720EAB983DCFC52D4EC830A /* Pod */,\n\t\t\t\tB4A3BEC460C2E79702F6805C5AEBDE6A /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-rncore\";\n\t\t\tpath = \"../../../node_modules/react-native/ReactCommon\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t09B2533288AEB5522A0AC33E92C2A79E /* RawText */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEAF8192C1B7013E06F84C24D2B1110B0 /* RCTRawTextShadowView.h */,\n\t\t\t\t07A90696C4EB8690ED661E5470ECC1C5 /* RCTRawTextViewManager.h */,\n\t\t\t);\n\t\t\tname = RawText;\n\t\t\tpath = Libraries/Text/RawText;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t0A60382252AE41051D04DE8A6098AEF1 /* React-utils */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1B644FFAD498B469A3633A360744C403 /* ContextContainer.h */,\n\t\t\t\t132132CB707C71FA5E68A7BB06EE4804 /* CoreFeatures.cpp */,\n\t\t\t\tEDB17360845E700286BDE806E67E8AA0 /* CoreFeatures.h */,\n\t\t\t\t74F2B9390AF33F8E9969AE22B88C8280 /* FloatComparison.h */,\n\t\t\t\t6960AF2620CFE6726A4B805D48001166 /* fnv1a.h */,\n\t\t\t\t10CFD843724D42F53E4373E441FD4EBB /* hash_combine.h */,\n\t\t\t\t1340E22099179F463C3487BAB8420980 /* jsi.cpp */,\n\t\t\t\t2C4F509606F5C64CB085DA2D927CDC93 /* jsi.h */,\n\t\t\t\t7B300B21C62B9776F40F71E7688DA14C /* ManagedObjectWrapper.h */,\n\t\t\t\t73AB6FD4B3DF99EC222564D6743427C3 /* ManagedObjectWrapper.mm */,\n\t\t\t\t5BD6398C6C92DF26317E3DC8E027D927 /* PackTraits.h */,\n\t\t\t\tCE02C2175E3E663763ADD7A4613D0103 /* RunLoopObserver.cpp */,\n\t\t\t\t4C5E9B3E860020EB74A5A0DCB92E545F /* RunLoopObserver.h */,\n\t\t\t\t797702F6E9E25223D401BD7E13885F76 /* SharedFunction.h */,\n\t\t\t\t20DB7A7891E6EF51C69DA252EF43EE25 /* SimpleThreadSafeCache.h */,\n\t\t\t\tFDF1FDBD6E5C45FE24CB4F2C3B228AF2 /* Telemetry.h */,\n\t\t\t\t5A5CA98B839AFCD15AE40CBB92C32436 /* to_underlying.h */,\n\t\t\t\tC609D0506D4AF74A3EAD5ACBA228FE4B /* Pod */,\n\t\t\t\tC92330707FC79B77F1F9F67268D78E99 /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-utils\";\n\t\t\tpath = \"../../../node_modules/react-native/ReactCommon/react/utils\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t0A7E9FC5FB40769E54A8427CE19F6DA4 /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9934CD5B42C888E8A4F1D3552AEE6B13 /* React-Fabric.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t0B323E3B0720EAB983DCFC52D4EC830A /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE8C7733DDA1AF4D8C84201C849CE6990 /* React-rncore.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t0B9435B4A5935D54E7B928CADCAAAAC5 /* React-featureflags */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t49B8EB5E3B6498FDDA1A80E45FA97979 /* ReactNativeFeatureFlags.cpp */,\n\t\t\t\t75FB185880821A181DA77737EA85AF83 /* ReactNativeFeatureFlags.h */,\n\t\t\t\t39499A61681F432C3F011D0926E7DAA4 /* ReactNativeFeatureFlagsAccessor.cpp */,\n\t\t\t\t427B91D65DD3F677FDB0BBC6941F4424 /* ReactNativeFeatureFlagsAccessor.h */,\n\t\t\t\tDC24DA11D62A60707D4DA680FD726094 /* ReactNativeFeatureFlagsDefaults.h */,\n\t\t\t\tE7A75689694710ACECFF3C8C79D55E6D /* ReactNativeFeatureFlagsProvider.h */,\n\t\t\t\t4A72E17EC61A8CF846383874B37BEF14 /* Pod */,\n\t\t\t\t642E80121214548255F3E44A3D10908F /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-featureflags\";\n\t\t\tpath = \"../../../node_modules/react-native/ReactCommon/react/featureflags\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t0DA390F87BBAD21398DF554B46780A15 /* React-Fabric */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t64397211A15E56518F29A27220C51336 /* animations */,\n\t\t\t\t7D7FC175BD5F32AB7F726B6D215C834E /* attributedstring */,\n\t\t\t\t612A411D79E5AC1A20ABFAED89F0EAA7 /* componentregistry */,\n\t\t\t\tEB32039CA10C7E1FEE8133FB3FA9F43E /* componentregistrynative */,\n\t\t\t\t4D18290C9D502ECAFA6AEE43300F5595 /* components */,\n\t\t\t\t154CDABFE25DA7D844CF1882982E060D /* core */,\n\t\t\t\tACE973C74E126DABDE76A70A939FE31F /* imagemanager */,\n\t\t\t\t891A72B2B54F324453B6DF695B8101DD /* leakchecker */,\n\t\t\t\t0E28AE480692E792C2A4ACAD0065A24D /* mounting */,\n\t\t\t\t0A7E9FC5FB40769E54A8427CE19F6DA4 /* Pod */,\n\t\t\t\t71BD988D97F229A87FF011F774714D8D /* scheduler */,\n\t\t\t\tB15E0C00053600CFA57B847087372FA8 /* Support Files */,\n\t\t\t\t21A38486AEB483A1DDF3640DB3C9A269 /* telemetry */,\n\t\t\t\tBB754E89BE3831E5159A960856345A34 /* textlayoutmanager */,\n\t\t\t\t4C0D529CCAF0EF5D539488BECEBA799A /* uimanager */,\n\t\t\t);\n\t\t\tname = \"React-Fabric\";\n\t\t\tpath = \"../../../node_modules/react-native/ReactCommon\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t0E28AE480692E792C2A4ACAD0065A24D /* mounting */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t57094883E054C3166427AC3CFF403965 /* Differentiator.cpp */,\n\t\t\t\t881BC753A7C248050EC65DCFDF4A1F50 /* Differentiator.h */,\n\t\t\t\t308183F96466CA2C23FC665AD164BFD4 /* MountingCoordinator.cpp */,\n\t\t\t\t09CACB20A3D99F350BE5A1565F4ACA67 /* MountingCoordinator.h */,\n\t\t\t\t77C83209E6AE78202FC38E3CDF6E4666 /* MountingOverrideDelegate.h */,\n\t\t\t\tF5710B431788CFA607B0F39F45EC6E64 /* MountingTransaction.cpp */,\n\t\t\t\tA23EC0B053A41A76F8AE3B595FF6B87A /* MountingTransaction.h */,\n\t\t\t\t95D17842EC6B842F72D0A2E4DA506E78 /* ShadowTree.cpp */,\n\t\t\t\t5FFB2C7DB283EB3379974035A76B3B13 /* ShadowTree.h */,\n\t\t\t\t0BEE9CFB3C6827C1D888BAFC061BB79A /* ShadowTreeDelegate.h */,\n\t\t\t\t43F384C21F24B355DE771A761C765E4B /* ShadowTreeRegistry.cpp */,\n\t\t\t\t9621CF80D2D681568C8BCAB003EA22F2 /* ShadowTreeRegistry.h */,\n\t\t\t\t3D6DBF11CFCFF077F1E73E67C1B435B6 /* ShadowTreeRevision.cpp */,\n\t\t\t\tE78F20D79CCC9323B970100544DF75D4 /* ShadowTreeRevision.h */,\n\t\t\t\t9BE7B7E0E20673111D75C477804554AF /* ShadowView.cpp */,\n\t\t\t\tA7DC83484741B6CEE36700BCB855A982 /* ShadowView.h */,\n\t\t\t\tBB2E2D07807B6BB7451133707BC5FF03 /* ShadowViewMutation.cpp */,\n\t\t\t\t7AEAEA20EE165C0C9C90A2B2BDD3C21A /* ShadowViewMutation.h */,\n\t\t\t\t4B56A61B8E70277D187E3D37BFBF7897 /* stubs.cpp */,\n\t\t\t\tAEBD60021620778CF66B52B3BB90BDF5 /* stubs.h */,\n\t\t\t\t4BEF5A191F5C9D7D1C8386FB298882BE /* StubView.cpp */,\n\t\t\t\tA341E5DC44E63AA9B8DFF0E0E059A5F4 /* StubView.h */,\n\t\t\t\t507CCE949602395770BDF4CA5A58B07A /* StubViewTree.cpp */,\n\t\t\t\tEA8C03F6178FA2682E0DD2D5F53F222E /* StubViewTree.h */,\n\t\t\t\tA5823607D77DE3B854886CBA748F1433 /* TelemetryController.cpp */,\n\t\t\t\t194D194CCB89C075CEA29192C47A2A33 /* TelemetryController.h */,\n\t\t\t);\n\t\t\tname = mounting;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1004681C3BDF8E5CFC5D030CE39D0CA7 /* platform */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5328E121AABC026DD9242F9F14882F7E /* cxx */,\n\t\t\t);\n\t\t\tname = platform;\n\t\t\tpath = react/renderer/components/view/platform;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t10CB6C85BE8F5695B82D105949AE2B98 /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t780886372A0B2B7809DF714CB50EBA56 /* React-cxxreact.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t10FFE0FE0711EED444C4D76DA41F2C38 /* Nodes */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0A801C14BFA125ACB2E474AAFB4B2D03 /* RCTAdditionAnimatedNode.h */,\n\t\t\t\t29B488F05847F4968004034A803BA1EE /* RCTAnimatedNode.h */,\n\t\t\t\t991E213D38BB44AE5C3367DDE4A4D4D8 /* RCTColorAnimatedNode.h */,\n\t\t\t\t48B93F350B7CEAA9026208326081EA41 /* RCTDiffClampAnimatedNode.h */,\n\t\t\t\tAB89B71C07D924F2DA582CF6A4C3CFA4 /* RCTDivisionAnimatedNode.h */,\n\t\t\t\tF78A76F0BB8E6B3D92D46FB8C08FF72B /* RCTInterpolationAnimatedNode.h */,\n\t\t\t\t88F146A98AD14FE819BCA98EB3275AD3 /* RCTModuloAnimatedNode.h */,\n\t\t\t\tF28A2D4EC3F7FA5178A446213C416F6C /* RCTMultiplicationAnimatedNode.h */,\n\t\t\t\tF35ECB508AB87E99C735B9A8219E2790 /* RCTObjectAnimatedNode.h */,\n\t\t\t\t07248FECF4EA760047A9A71945D1E7E2 /* RCTPropsAnimatedNode.h */,\n\t\t\t\t57C409D3D492DAB7368ECE438E121DB5 /* RCTStyleAnimatedNode.h */,\n\t\t\t\tD837D755183ED658A920B4FD642A3F16 /* RCTSubtractionAnimatedNode.h */,\n\t\t\t\t18E04C8FC9E54D8A00245F3E4B386C0E /* RCTTrackingAnimatedNode.h */,\n\t\t\t\t9BD826EA734516D956DB671826DED506 /* RCTTransformAnimatedNode.h */,\n\t\t\t\tD968F1CAEE31B74111F5F45D24E694BA /* RCTValueAnimatedNode.h */,\n\t\t\t);\n\t\t\tname = Nodes;\n\t\t\tpath = Libraries/NativeAnimation/Nodes;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t125A31DA6044B0FE2A4D78722470D750 /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t946B80B815D8B4AF5B32C1A04E7E061B /* React-perflogger.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1428673623694BA3B3A65613421BAAF9 /* Pods-WatermelonTester */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t84E154DAD162F4A18EEEA3624CF6A532 /* Pods-WatermelonTester-acknowledgements.markdown */,\n\t\t\t\t697110B0CEDE98EAA089612835E9E5AF /* Pods-WatermelonTester-acknowledgements.plist */,\n\t\t\t\t413649D5C571D8A6170C6A4424CD088F /* Pods-WatermelonTester-dummy.m */,\n\t\t\t\t5A0B5D9D59E5E269C5427D81B4D4CF05 /* Pods-WatermelonTester-frameworks.sh */,\n\t\t\t\t5D1C0A821BD026A9A939C64687CBD024 /* Pods-WatermelonTester-resources.sh */,\n\t\t\t\tD5F81F5AAC387C14EE7017B61CB495EC /* Pods-WatermelonTester.debug.xcconfig */,\n\t\t\t\t73B3A96DAB49C42270A59966B121F1A7 /* Pods-WatermelonTester.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Pods-WatermelonTester\";\n\t\t\tpath = \"Target Support Files/Pods-WatermelonTester\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t14ED68B512C0D79F79479BB0C185ACCD /* scrollview */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t2B38F5BBD25E489CA1BCFF0B8B34AD39 /* conversions.h */,\n\t\t\t\t25A59FDE9D2F710EAEE9BF60F424C713 /* primitives.h */,\n\t\t\t\t287D6D149E8F946A10D3DCE0418FB1FC /* RCTComponentViewHelpers.h */,\n\t\t\t\t610A9C5BDF3BEADA074AB1F27B23F1F8 /* ScrollViewComponentDescriptor.h */,\n\t\t\t\t17E08D0C97050157936C9ACE4FAF61CA /* ScrollViewEventEmitter.cpp */,\n\t\t\t\tC0BA0D275A8C8269E34CE4A1AD5CCF35 /* ScrollViewEventEmitter.h */,\n\t\t\t\tF1758BCE0D6DB0A37CD1E35331999A52 /* ScrollViewProps.cpp */,\n\t\t\t\tD5D85F064A48142714688A62D0169A8F /* ScrollViewProps.h */,\n\t\t\t\t8E2FD3C024F95AA7EF9D1ECD43A5E807 /* ScrollViewShadowNode.cpp */,\n\t\t\t\t7A7A0F200C7B88BDC44875E323134B8D /* ScrollViewShadowNode.h */,\n\t\t\t\t11B65C1CE4591582924CEE6C134FDC1D /* ScrollViewState.cpp */,\n\t\t\t\t60E4F60D2C2C4C8B7116D0D69FD78717 /* ScrollViewState.h */,\n\t\t\t);\n\t\t\tname = scrollview;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t154CDABFE25DA7D844CF1882982E060D /* core */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t12C4D9C3A09316945470A899D769DF18 /* BatchedEventQueue.cpp */,\n\t\t\t\t7BBF469B26873251B537670801999C9B /* BatchedEventQueue.h */,\n\t\t\t\tCB0D3B1D12723CB6F6A4B5A53775B4DC /* ComponentDescriptor.cpp */,\n\t\t\t\t52DD466CEB37236E0239E023F92F17AF /* ComponentDescriptor.h */,\n\t\t\t\t05A8338A74887E54877E3B5E2360A93D /* ConcreteComponentDescriptor.h */,\n\t\t\t\tA7C7A0603C70B03A5BAB896F01F15E47 /* ConcreteShadowNode.h */,\n\t\t\t\t46F019BC62AF7DC88D7C7732C66B0216 /* ConcreteState.h */,\n\t\t\t\t5CA8FFB264289551FCCAE29495EBE650 /* conversions.h */,\n\t\t\t\t44C17CFBA5F0AAEEAA6587B65BBD9539 /* DynamicPropsUtilities.cpp */,\n\t\t\t\t777152D60FDE62FB7858028E0F494386 /* DynamicPropsUtilities.h */,\n\t\t\t\t8A50EA432D2B83B1014E46448CA68632 /* EventBeat.cpp */,\n\t\t\t\t4CE7D7393D013F61BE78DD0E2CDA786F /* EventBeat.h */,\n\t\t\t\t0E46F0129DD1A6A967F2580EB63011DB /* EventDispatcher.cpp */,\n\t\t\t\t520B63F372380D55B40793B5BB10A39F /* EventDispatcher.h */,\n\t\t\t\t07C2F40D8790521504B9C05E652B31DE /* EventEmitter.cpp */,\n\t\t\t\tA7BB8379D1CD88BE60A5A0D33D8572A2 /* EventEmitter.h */,\n\t\t\t\tA4DDB397BCB393ACDDF3EB861945B730 /* EventListener.cpp */,\n\t\t\t\tC4CDFBC1ECF32EC053DEB342DEE1B1C2 /* EventListener.h */,\n\t\t\t\tE743DC457E6CABC5B13E68A381C20913 /* EventLogger.cpp */,\n\t\t\t\t1ADB11086CA7355EACB08F3BD428C0A9 /* EventLogger.h */,\n\t\t\t\tF5D3D4E731B1EF9C93FC2A49ABDAD388 /* EventPayload.h */,\n\t\t\t\t2EDE07F5836F143CD7857CB2E5B5E136 /* EventPayloadType.h */,\n\t\t\t\tCF485BFE7872C54223E057A72A0AB6A3 /* EventPipe.h */,\n\t\t\t\tB1E12CAD2C6FB4F2DF64F7CCC6D15E3F /* EventPriority.h */,\n\t\t\t\tA3F08746919747A6F56A2864E48BDDD3 /* EventQueue.cpp */,\n\t\t\t\tA4AFB126642929BDB526E70B71748879 /* EventQueue.h */,\n\t\t\t\t4B22A0860FE6BF2F9CC4F24C6A16C02B /* EventQueueProcessor.cpp */,\n\t\t\t\t7A4636B3DC5A729E8F40B4860ACEC4B4 /* EventQueueProcessor.h */,\n\t\t\t\t84D732F0DC5E41F018DF129A1E36E683 /* EventTarget.cpp */,\n\t\t\t\t7ED3FB4188B6B018D64337B5E28DF81D /* EventTarget.h */,\n\t\t\t\t8516ED23F91BAC902B146A3BDA21B3AB /* graphicsConversions.h */,\n\t\t\t\t2A29138DBA1381888F4701360BF91338 /* InstanceHandle.cpp */,\n\t\t\t\t4DD6B4C58B299EAE1A3E500A3EDE0002 /* InstanceHandle.h */,\n\t\t\t\tC95BE4329B2B85F46818C25087E9147A /* LayoutableShadowNode.cpp */,\n\t\t\t\tD40F2678A9E0D12E6FEE80ED9004E5BE /* LayoutableShadowNode.h */,\n\t\t\t\t349041093547AE8E438BDD4E8A829CB7 /* LayoutConstraints.cpp */,\n\t\t\t\tAEA7713221A3B353A10E5D4A3E848D96 /* LayoutConstraints.h */,\n\t\t\t\tB84580A87121CAF61CB478AB93D9261B /* LayoutContext.h */,\n\t\t\t\t05E7D2C113326591CAF18117371EEF7E /* LayoutMetrics.cpp */,\n\t\t\t\tA35672FA86AA809C95DB1AD01D1F4E30 /* LayoutMetrics.h */,\n\t\t\t\t88B840D20BFE171BE3DD9DFE4EC33AC0 /* LayoutPrimitives.h */,\n\t\t\t\tBF2A098BFA676BEB807B64FA44567B00 /* Props.cpp */,\n\t\t\t\t327A412C03B8D29F20508FBD60D4EAD2 /* Props.h */,\n\t\t\t\t713D582F6B367593E27B9841A06592D1 /* propsConversions.h */,\n\t\t\t\tAD945009ED5CD2E57F93715472E7BAAC /* PropsMacros.h */,\n\t\t\t\t5E2250F8ED2A809808FB295A155DA713 /* PropsParserContext.h */,\n\t\t\t\t7841C02BBC8782E7B8D3EF2815A6026C /* RawEvent.cpp */,\n\t\t\t\t1B389CA633B6575A2FA37718B19A4756 /* RawEvent.h */,\n\t\t\t\t19D4CF0857B96FBEA270CC2CD46B424F /* RawProps.cpp */,\n\t\t\t\tCC381BCFEEAC649BB62889E972FAD4E3 /* RawProps.h */,\n\t\t\t\t0C867898C76A4282B23A18DB01393712 /* RawPropsKey.cpp */,\n\t\t\t\t8FA93F3F56F84CCD73CC13AB0A744B8A /* RawPropsKey.h */,\n\t\t\t\t8B8BA983DC0304E53A494B8BC8368D3C /* RawPropsKeyMap.cpp */,\n\t\t\t\t2DF730E6145C9D42DEB5C32702BE8C74 /* RawPropsKeyMap.h */,\n\t\t\t\t29069E0EE8AF62E25BA127E3020926FD /* RawPropsParser.cpp */,\n\t\t\t\tCCB913EB7EC2FFF2A1F039FCAFFF3042 /* RawPropsParser.h */,\n\t\t\t\tF56A35A5E128A460F52E75B7F79344AC /* RawPropsPrimitives.h */,\n\t\t\t\t51C1705E9B13860E1A5ED501BF5D9BD4 /* RawValue.cpp */,\n\t\t\t\t1AB59CE368BC9400B2ABCD47AFB8C08C /* RawValue.h */,\n\t\t\t\t9F8C4243A150FEDAB173B67E50BC9174 /* ReactEventPriority.h */,\n\t\t\t\tE9D85EEAF42C9AF3CC1666F33CF872DD /* ReactPrimitives.h */,\n\t\t\t\tBCAC25D53F76C3CA7747058E179BEC03 /* Sealable.cpp */,\n\t\t\t\tD828B4DBBD448E09A3D7C599F4CEFEF3 /* Sealable.h */,\n\t\t\t\tAE8331A8B19DE05088A3AF1C06D9599D /* ShadowNode.cpp */,\n\t\t\t\t1F2594C363D96114D88D6D3996A6AD08 /* ShadowNode.h */,\n\t\t\t\t2782757DC9A193842FF73CDFEC4F5F65 /* ShadowNodeFamily.cpp */,\n\t\t\t\t6E4274F08E4BBF0B6491769157BBB91F /* ShadowNodeFamily.h */,\n\t\t\t\t3053B3AC995ECECC071744E464935607 /* ShadowNodeFragment.cpp */,\n\t\t\t\t1598F75BEAFDD5C3F7AD8DCDD6D5D2C4 /* ShadowNodeFragment.h */,\n\t\t\t\t7AE90B08B12F40EABE9BDF5B888E8832 /* ShadowNodeTraits.cpp */,\n\t\t\t\t18EF461AA27476D0FDF425B3D2483EBA /* ShadowNodeTraits.h */,\n\t\t\t\t776D1F938E2ED7503BB26ACB324E4DF9 /* State.cpp */,\n\t\t\t\t6A923BB7F15C4A2B32DDE64B8D827632 /* State.h */,\n\t\t\t\t96AEA8A2506861840BC63D873CC2961A /* StateData.h */,\n\t\t\t\t2D889D31C2B9F054FBB9309C335FCD66 /* StatePipe.h */,\n\t\t\t\t56D34A45C0AD73CC42339EC6A2CA028E /* StateUpdate.cpp */,\n\t\t\t\t27DE3F3B20B7CEFB975091316FFFB6CC /* StateUpdate.h */,\n\t\t\t\tA50DCAB2950F79811B921C5568362684 /* UnbatchedEventQueue.cpp */,\n\t\t\t\t1B14B05F1E3FA960A779224B96DBB041 /* UnbatchedEventQueue.h */,\n\t\t\t\t9788F37552AF8A0A123A07FA7D080CFA /* ValueFactory.h */,\n\t\t\t\t2CA71A360B05CFB72B96ACD04FA7ADB6 /* ValueFactoryEventPayload.cpp */,\n\t\t\t\tF1AB976E1A25C3A525A7919E63A9BA92 /* ValueFactoryEventPayload.h */,\n\t\t\t);\n\t\t\tname = core;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t15801941DFE125F4459DBA217046DB1E /* chrome */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA11628FF9D522105C68BD01BB4D05697 /* ConnectionDemux.cpp */,\n\t\t\t\t281DE643AC3EC1BC9357383486F2FB11 /* ConnectionDemux.h */,\n\t\t\t\tC80CD944FB88B23807F5AAAF7CB21069 /* HermesRuntimeAgentDelegate.cpp */,\n\t\t\t\t5B81B76C387972027C9B1637E2E6A612 /* HermesRuntimeAgentDelegate.h */,\n\t\t\t\tBBA46B29F3F06B0AEC0E48F4C7C99C23 /* Registration.cpp */,\n\t\t\t\t7CA5F6EB56C2B8E096CBC6A7B9532E76 /* Registration.h */,\n\t\t\t);\n\t\t\tname = chrome;\n\t\t\tpath = chrome;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t16A4234682C8931240E16166FA4BA7C0 /* React-graphics */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8C66234F6FC8A3E3EADCA342B130FB54 /* Color.cpp */,\n\t\t\t\t7F1A707D6F8DE921DFA42211D2036148 /* Color.h */,\n\t\t\t\t3A48CF42426D1757E19F5E0283D958A0 /* ColorComponents.h */,\n\t\t\t\t33BB544E228494D0AF9CB4E5A11EF94D /* conversions.h */,\n\t\t\t\t296F41E25D51A2758C6CBFAB3A8B8FAD /* fromRawValueShared.h */,\n\t\t\t\t25EBF2FA7FFEDCE7086F43F67F482A2C /* Geometry.h */,\n\t\t\t\t75666A7E9DF4B81A7D9C5A782A0BCE03 /* Point.h */,\n\t\t\t\tFC391A89C7D8499E264ADBDD9F59F736 /* Rect.h */,\n\t\t\t\tF59674BB4A1D0F323148B07D7D682AC2 /* RectangleCorners.h */,\n\t\t\t\t60DAB499CFAAD9EB49E01C7C8B9A5F15 /* RectangleEdges.h */,\n\t\t\t\t22B331FFC962649EE96FA4C6FF47CC23 /* rounding.h */,\n\t\t\t\t9130DC48E60A16B3033E4C4648557B52 /* Size.h */,\n\t\t\t\tD67413975CF3DA436729109845A30A9F /* Transform.cpp */,\n\t\t\t\t071916D0DED7AE1D3E16FC6FEF5AEFAD /* Transform.h */,\n\t\t\t\t0FD37A9A693B3CEB099DDA9955E3C67F /* ValueUnit.h */,\n\t\t\t\tCFB81BB75D1D9BE93AA436949526503C /* Vector.h */,\n\t\t\t\t77635579615CF1D052BC9DF20B4D023A /* platform */,\n\t\t\t\t734385DF00F869A8A9DCB25F7D0FE59D /* Pod */,\n\t\t\t\tEF7F6D8BCCCAF26CB3A0B8AA094C293B /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-graphics\";\n\t\t\tpath = \"../../../node_modules/react-native/ReactCommon/react/renderer/graphics\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t17004CCFD3DD9375E623A963E13D18C2 /* Mounting */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t7219469EB101610CDE06F56EAFF2F90D /* RCTComponentViewClassDescriptor.h */,\n\t\t\t\t6ED440A6B8C1D4FBA39CD54ECE8D51F3 /* RCTComponentViewDescriptor.h */,\n\t\t\t\tFFA331C6B5744B16007B95A0D3EA96D8 /* RCTComponentViewFactory.h */,\n\t\t\t\t6EADDB0E9C832143081D058CA7259028 /* RCTComponentViewFactory.mm */,\n\t\t\t\t4DC0B393EEF985A3E4643B20F6754757 /* RCTComponentViewProtocol.h */,\n\t\t\t\t36164B0E9E5609F36A0106D648A0FA8E /* RCTComponentViewRegistry.h */,\n\t\t\t\t723B1846FB58ABF6C06939E1199945A2 /* RCTComponentViewRegistry.mm */,\n\t\t\t\t7B80D5D0E1943CE661F2F4C200BA7BE9 /* RCTMountingManager.h */,\n\t\t\t\t32A7462E31DA20BFC4BF96677609574A /* RCTMountingManager.mm */,\n\t\t\t\tC2130B95F426EC491603E0487645BCAC /* RCTMountingManagerDelegate.h */,\n\t\t\t\t2FA6B9156408ED84AEE6F56B8BB6FC8D /* RCTMountingTransactionObserverCoordinator.h */,\n\t\t\t\tF261A91F0724E8B1486A1BC201FD1425 /* RCTMountingTransactionObserverCoordinator.mm */,\n\t\t\t\tF1FA54C72A9856CD3D0A6B6E24B06E7E /* RCTMountingTransactionObserving.h */,\n\t\t\t\t6368583633FFD741EE844FFC0D7DEA92 /* UIView+ComponentViewProtocol.h */,\n\t\t\t\t6ECE543138E064055C9EBCDC09788205 /* UIView+ComponentViewProtocol.mm */,\n\t\t\t\t987A58B283B2E43F2079409981CFB845 /* ComponentViews */,\n\t\t\t);\n\t\t\tname = Mounting;\n\t\t\tpath = Fabric/Mounting;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t17687E905102CFB96BD9AEFECEF5AE1F /* ios */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6DBE07C15CE88F4964445119637334D7 /* react */,\n\t\t\t);\n\t\t\tname = ios;\n\t\t\tpath = ios;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t18DA155471EE231088B75DA42ACDA74D /* WatermelonDB */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t7FF0FE18123413DA783550212321BE91 /* DatabasePlatformIOS.mm */,\n\t\t\t\t240A841CE45A01661CD44D4EE8B91BC5 /* JSIInstaller.h */,\n\t\t\t\t126C5DD1D6213610884F84302374D19F /* JSIInstaller.mm */,\n\t\t\t\tDB9466A46A68BC525A64AAAB5F5C1F6C /* WatermelonDB.h */,\n\t\t\t\t2A6D3BA3FB491018316327CC752B4B51 /* FMDB */,\n\t\t\t\t4B0961F3A4B3DB15F23AB072C78ED8F0 /* objc */,\n\t\t\t);\n\t\t\tname = WatermelonDB;\n\t\t\tpath = WatermelonDB;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1A90064350D1AA1771D19FCF9770AC84 /* bridging */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t774B7D8E1CE74C04CEDEC68A34DAC344 /* Array.h */,\n\t\t\t\t1E9ACDD39D4A14DDC16406CDD0457ED3 /* AString.h */,\n\t\t\t\t3018115A5F8C04479A8AE64B102BE2C5 /* Base.h */,\n\t\t\t\tFFF4EAA32AB91B28A1ACBB7030CB8484 /* Bool.h */,\n\t\t\t\t7C12044FAE55F8C0F0F5BC236FA00BFC /* Bridging.h */,\n\t\t\t\tE0C3160ABF695152C97A85E56B140C4B /* CallbackWrapper.h */,\n\t\t\t\t570DABFC32CF97AB28B8269609BAD9F8 /* Class.h */,\n\t\t\t\t1E2EDFEA3A7670F7D6AB0267AFA7E2F1 /* Convert.h */,\n\t\t\t\tF4116A5CF0A3EC97879DE8D115EB9AC5 /* Dynamic.h */,\n\t\t\t\tF15F1FDA5B8172C6781AEDF956D65B0C /* Error.h */,\n\t\t\t\t9DB326307140B9D4967E5C75EE4D451D /* Function.h */,\n\t\t\t\t326FC938C2E12371A877E5FA46F37777 /* LongLivedObject.cpp */,\n\t\t\t\tB862E1391D01BF787FE43136140D8C85 /* LongLivedObject.h */,\n\t\t\t\t3B9822B49D137DD1BBFAE4C9206C7F97 /* Number.h */,\n\t\t\t\t342244AFF6DAC97CF99A001A770A5E4F /* Object.h */,\n\t\t\t\t883F3E36A905B70FC2C8B78E92AC740A /* Promise.h */,\n\t\t\t\tE488A78562494C4DFA18485430C98C6D /* Value.h */,\n\t\t\t);\n\t\t\tname = bridging;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1A91472BD47D8A01B2F79E1D3BF3F435 /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3948308FBBC9426B8AAFA7391786B0E8 /* React-Codegen.podspec.json */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1B23A6C0F680568EB52BA9BD9526F9D2 /* React-RCTImage */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8612AE35A990235C979983FD304D7330 /* RCTAnimatedImage.mm */,\n\t\t\t\t307CE5CEEA4E06A6A255CA72344E783B /* RCTBundleAssetImageLoader.mm */,\n\t\t\t\t492E9A2ED4F5B423E522887CB7BCF477 /* RCTDisplayWeakRefreshable.mm */,\n\t\t\t\t092DBE2F0CE18725FF1B0C8D08B1147C /* RCTGIFImageDecoder.mm */,\n\t\t\t\t8CFB7A8BE97081BCC80D943BAD260E5A /* RCTImageBlurUtils.mm */,\n\t\t\t\t57BBCC84BCDB23D6ADA72EA6128CE796 /* RCTImageCache.mm */,\n\t\t\t\t761CE3FB688FBACCB93A3B8CE521B969 /* RCTImageEditingManager.mm */,\n\t\t\t\t4BB78B415F6A4B0EED05C08EA7A7D03D /* RCTImageLoader.mm */,\n\t\t\t\t8A81DCEC265B36C702B32207D90DA5F9 /* RCTImagePlugins.mm */,\n\t\t\t\t2BAEF360C04D98022913BA78AC8A5A0F /* RCTImageShadowView.mm */,\n\t\t\t\t682FB404BC26FD7A5CE7722DC28CA1D9 /* RCTImageStoreManager.mm */,\n\t\t\t\t7F7639A56DEF6356718C6D5EC6AF3F7F /* RCTImageURLLoaderWithAttribution.mm */,\n\t\t\t\t51B5078EBA4D2CDB62D5B9977620515C /* RCTImageUtils.mm */,\n\t\t\t\t06A12441B1C3D7A2CB937C85CAF45CCE /* RCTImageView.mm */,\n\t\t\t\t26E19B9D750F023C6ABA23E46C660990 /* RCTImageViewManager.mm */,\n\t\t\t\tB2912664908CB6F78177A7A284D257A7 /* RCTLocalAssetImageLoader.mm */,\n\t\t\t\tD73FC5BE76F5CED5EE11722EB194C596 /* RCTResizeMode.mm */,\n\t\t\t\tBB8ABBAD57F26EF6E656FCE9B68DB2F2 /* RCTUIImageViewAnimated.mm */,\n\t\t\t\t6982589FDD1F93DB24C77311374EE474 /* Pod */,\n\t\t\t\t035DBCF1705BBA1D99967CF1081992BA /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-RCTImage\";\n\t\t\tpath = \"../../../node_modules/react-native/Libraries/Image\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1BCE377F5B918C589D8C41BFEE151E47 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0D01E2CE505FD137C83D5A00A839D8B9 /* React-jsitracing.debug.xcconfig */,\n\t\t\t\t7568E7B5AE849AB3EBC22558FB87A3A0 /* React-jsitracing.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../../native/iosTest/Pods/Target Support Files/React-jsitracing\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1C5BD8DCB4B8638E0C634F76212A69CB /* Multiline */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE0004F076A577E394A0CC4F9AEC7F57B /* RCTMultilineTextInputView.mm */,\n\t\t\t\tD9C558B0DD5120E2A4ED354C91A0A581 /* RCTMultilineTextInputViewManager.mm */,\n\t\t\t\tE3438873735D5FAD55DAADE60C49CACC /* RCTUITextView.mm */,\n\t\t\t);\n\t\t\tname = Multiline;\n\t\t\tpath = Multiline;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1CE3AF8F1B957A97D187C362FF34706E /* React-FabricImage */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA9C67AC080A782225408DA978D1DA4CA /* conversions.h */,\n\t\t\t\t846EE9DAE34FA678FA761E65DD2F08E5 /* ImageComponentDescriptor.h */,\n\t\t\t\t996448BB93D8203D8D6C59B2D0B33BDA /* ImageEventEmitter.cpp */,\n\t\t\t\t90D9EFC947AA0C68DCA4C6DD6EB901DE /* ImageEventEmitter.h */,\n\t\t\t\tB54D8461C2AF60CF1BF611F2D31ED2EB /* ImageProps.cpp */,\n\t\t\t\tC6326DF244B84C66EDAF7AB7E2A7C98C /* ImageProps.h */,\n\t\t\t\t4F1014498794A7BE263384E6C973334C /* ImageShadowNode.cpp */,\n\t\t\t\t84C69750863FB2783C4C3DA5FBF5A671 /* ImageShadowNode.h */,\n\t\t\t\t285EDB99AD277EB30467D34D174D268F /* ImageState.cpp */,\n\t\t\t\tA602AFB5786A8427B22008771FA2A005 /* ImageState.h */,\n\t\t\t\tB508D299A713547C4C4004662C7A360E /* Pod */,\n\t\t\t\tB129C0FB664B93F4F1F73414EFD96E55 /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-FabricImage\";\n\t\t\tpath = \"../../../node_modules/react-native/ReactCommon\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1DDCCBF023D859DCF237EE249B0F2BAD /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD6CB644C7E059627F4E16F567D961E18 /* React-logger.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1FB41E9CB3764DB5E3A256F2CCB3313C /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t089961A4AC420F0D1B51AF0717493120 /* React-RCTAnimation-dummy.m */,\n\t\t\t\tC53D999F11FC29298A3B8D1AA6A8120E /* React-RCTAnimation-prefix.pch */,\n\t\t\t\tC8980F597D1A97A167ACA46B54A4BC70 /* React-RCTAnimation.debug.xcconfig */,\n\t\t\t\t78D72FC8CF42B31C8EDAD6F8657F610F /* React-RCTAnimation.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../native/iosTest/Pods/Target Support Files/React-RCTAnimation\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1FDC21BFAA89EDFEA43D90A05DE15156 /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB10FA4019F5C607FA08931E27E127784 /* React-RCTVibration.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t205065C8C5001FF4D791D75300C3DDAB /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE0295F5F6E41D3C5358AC3BC796E1F70 /* React-RuntimeCore-dummy.m */,\n\t\t\t\t49549BCF8744CE247C53A44E2598E79D /* React-RuntimeCore-prefix.pch */,\n\t\t\t\t22F665521DA4A7B91AD3CDC51E8779D6 /* React-RuntimeCore.debug.xcconfig */,\n\t\t\t\t776825034C674A4EB458170D6BBB3139 /* React-RuntimeCore.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../../native/iosTest/Pods/Target Support Files/React-RuntimeCore\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t21A38486AEB483A1DDF3640DB3C9A269 /* telemetry */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6353D5B2828F0A532FAC374FF901DD8D /* SurfaceTelemetry.cpp */,\n\t\t\t\t4C260B39655A7EBBA430142A5FAC7288 /* SurfaceTelemetry.h */,\n\t\t\t\t6FBDF0EE578C484F397C21E43F49F7E7 /* TransactionTelemetry.cpp */,\n\t\t\t\t6FA659BE9F28613C4D7F98DAC5FD1C4B /* TransactionTelemetry.h */,\n\t\t\t);\n\t\t\tname = telemetry;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t2202615F216E42653F37977999D037B5 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA0A2F69D09350A6A5AFA9864BBB84FFE /* React-Codegen.modulemap */,\n\t\t\t\t739F5A9F956FCC84E8E36F6798EA859B /* React-Codegen-dummy.m */,\n\t\t\t\t0E07224933F2530B0ADD76E3867C3FA8 /* React-Codegen-prefix.pch */,\n\t\t\t\t6941C8C17A58C26823E12140D3831D05 /* React-Codegen-umbrella.h */,\n\t\t\t\t967DBD838FB53E8907C105802E22ECCA /* React-Codegen.debug.xcconfig */,\n\t\t\t\t441AA6664650EC12BAF8937E4A882741 /* React-Codegen.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../Pods/Target Support Files/React-Codegen\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t22298BAC557AC5B6503AABF5698863DB /* Yoga */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t7C5BE15D5F354DA98A5ADA415D1FDB03 /* YGConfig.cpp */,\n\t\t\t\t9FBD5986BF1B3B3D5B97CC5217DFE41D /* YGConfig.h */,\n\t\t\t\t5510FC0409FF02AA7A39E8542D74B323 /* YGEnums.cpp */,\n\t\t\t\tD70B1BA1E566B78E8FFA9FDB20C45D1D /* YGEnums.h */,\n\t\t\t\t6ABE82ECFCA457CEA1122532AFFC13E1 /* YGMacros.h */,\n\t\t\t\t98C9E5135E046EC50D915DC1941F6D87 /* YGNode.cpp */,\n\t\t\t\t7B7333F82E7D58CECA09AB6ABF206727 /* YGNode.h */,\n\t\t\t\t5B62D2EDAEE105EA46E50A51A6DCC4FB /* YGNodeLayout.cpp */,\n\t\t\t\t9841711B9F3A736014573E0B62D9C1F9 /* YGNodeLayout.h */,\n\t\t\t\t1C5225A85D60908066F79256FD961B24 /* YGNodeStyle.cpp */,\n\t\t\t\t91C4877BD9BE873DF4DF6B5DCC0CC740 /* YGNodeStyle.h */,\n\t\t\t\tAB17B662459CE9B65E9A84AF92104DEF /* YGPixelGrid.cpp */,\n\t\t\t\t14D9F600ECC14E962003AAB9F191233A /* YGPixelGrid.h */,\n\t\t\t\tE537D35052D701095C980ECF42D55AC4 /* YGValue.cpp */,\n\t\t\t\t30DD3B64FEFD7A1AB8A1EC8B9D52D87F /* YGValue.h */,\n\t\t\t\t4BA4FB0F0557FD723CB5B38C308FCE50 /* Yoga.h */,\n\t\t\t\tA0BBD39C71A2FDD8567B42D741ACC89C /* algorithm */,\n\t\t\t\tB4B40FE5744EE0430F1085186F5C39EE /* config */,\n\t\t\t\tC12F12E3B279B81398C6639DEECE0A6D /* debug */,\n\t\t\t\tF8229B1A04A686B9D6A8515E959D405C /* enums */,\n\t\t\t\tF8992DC800D868156F55D8C1A840B2EA /* event */,\n\t\t\t\tA07FF72E2E9957A32FBB94DD70C049AD /* node */,\n\t\t\t\t90097354ADCBD8E8098AF8B37786ADA1 /* numeric */,\n\t\t\t\t6FB5E78A1219A291FE853E265F906282 /* Pod */,\n\t\t\t\t3261564B236FD10151DB427DF0FE4F25 /* style */,\n\t\t\t\tF8E0BC164A267E96DD24FE4A280E7765 /* Support Files */,\n\t\t\t);\n\t\t\tname = Yoga;\n\t\t\tpath = \"../../../node_modules/react-native/ReactCommon/yoga\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t223AE9EE0D318B68CA58A6D5E7A833FC /* React-rendererdebug */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDE0D3D7FDED11B0BBBDD597E67E6E5CD /* DebugStringConvertible.cpp */,\n\t\t\t\t9B36F42640063CCA329D93AC8F874A56 /* DebugStringConvertible.h */,\n\t\t\t\t1B95AB0EF143A97263C1017EABE0E073 /* DebugStringConvertibleItem.cpp */,\n\t\t\t\t5E4D8475C8A1839D5568E707455D012D /* DebugStringConvertibleItem.h */,\n\t\t\t\t77F3BA61BC36947AE25324E0B86A12E5 /* debugStringConvertibleUtils.h */,\n\t\t\t\t94ED4B520996293EF041391736BBBA24 /* flags.h */,\n\t\t\t\tC7426F344668A4D9141914CE841C3534 /* SystraceSection.h */,\n\t\t\t\t343725706DBD41ACEB61E1FAA40EF492 /* Pod */,\n\t\t\t\tAAF010A03BDC3903E9F6EE416F6DB539 /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-rendererdebug\";\n\t\t\tpath = \"../../../node_modules/react-native/ReactCommon/react/renderer/debug\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t2303A255BD3099EB18229E7A20393511 /* Exported */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB2A78B7CA6B87E3C5B857F9EB9B7AF87 /* RCTDeprecation.h */,\n\t\t\t);\n\t\t\tname = Exported;\n\t\t\tpath = Exported;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t2351ACF698FB84D4D4492C2551003B4E /* renderer */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB11DA0315979959E0AB787938C67B80B /* graphics */,\n\t\t\t);\n\t\t\tname = renderer;\n\t\t\tpath = renderer;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t23C8C103E25BD58ADE6870DE657D9BA8 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t012EABDBEA471F999B6DA0663BE3C7BC /* React-Core.modulemap */,\n\t\t\t\t5D24035ED25B87D45E72A4CFB861C024 /* React-Core-dummy.m */,\n\t\t\t\tF03DB7552362CE2CC5261B0ECE866C50 /* React-Core-prefix.pch */,\n\t\t\t\t3AD9E5C254F43B4A3AC4E7A6452D879C /* React-Core-umbrella.h */,\n\t\t\t\tFEB255691DB29610BDE1D3938C435B8C /* React-Core.debug.xcconfig */,\n\t\t\t\tD1A2CC54073AD525A26E9DC8CA1044F5 /* React-Core.release.xcconfig */,\n\t\t\t\tC04C2CB4CB7F9503B14959FFE4F63EC3 /* ResourceBundle-RCTI18nStrings-React-Core-Info.plist */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../native/iosTest/Pods/Target Support Files/React-Core\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t23EF42F33260F492F0E1CA6A966BC672 /* Views */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5FB7F5153FEFAD2FCC98DA600D4A18B3 /* RCTActivityIndicatorView.h */,\n\t\t\t\t18DA86D744EE0EE17E265BBB90390A23 /* RCTActivityIndicatorView.m */,\n\t\t\t\t017AAA982C6D59AF8E6BE61915541DEC /* RCTActivityIndicatorViewManager.h */,\n\t\t\t\t98CDD541D0DC28ECF520BEE664E58AEC /* RCTActivityIndicatorViewManager.m */,\n\t\t\t\t42A97962C25A869DDED1914B699BD747 /* RCTAnimationType.h */,\n\t\t\t\t26055A5589650C9F928DD1BFF922B86B /* RCTAutoInsetsProtocol.h */,\n\t\t\t\tE0246A845D54C7B635C77FFDE88894B9 /* RCTBorderCurve.h */,\n\t\t\t\t7301D9F85906E2D5E3E899138ED1462A /* RCTBorderDrawing.h */,\n\t\t\t\t35D8CF26BB70259E361BDEA1E77D32E1 /* RCTBorderDrawing.m */,\n\t\t\t\t0D8FEE5EFC0D5C3452E4502887D2D780 /* RCTBorderStyle.h */,\n\t\t\t\tDCDAB8C1A8AF49504419868DFB5EE19B /* RCTComponent.h */,\n\t\t\t\tD7D198038E6A0A8EAA233D9E57B97AC6 /* RCTComponentData.h */,\n\t\t\t\t49C8ED14DB40A8E3E597CC83FDA19B4B /* RCTComponentData.m */,\n\t\t\t\t2B7BCA4D8FBC217D22B4EEB15EB03957 /* RCTConvert+CoreLocation.h */,\n\t\t\t\t40578E9386680C689D002917E383C065 /* RCTConvert+CoreLocation.m */,\n\t\t\t\t196B06D9D049A05D1552FD603A608719 /* RCTConvert+Transform.h */,\n\t\t\t\t96C1ECDE3D239B5524C2DD16740B8B8C /* RCTConvert+Transform.m */,\n\t\t\t\t492C01ACF6D4D924E6561FCD33DB914D /* RCTCursor.h */,\n\t\t\t\tAE3CEE292BC38DDDB735B092E8F32A0D /* RCTDebuggingOverlay.h */,\n\t\t\t\t3FF99AA51CC63F9D02051442963EEB0E /* RCTDebuggingOverlay.m */,\n\t\t\t\tE8855C5F693E52309BAEA8C716104F71 /* RCTDebuggingOverlayManager.h */,\n\t\t\t\t5FA7D9A20F443352B3F132A2348CEAF5 /* RCTDebuggingOverlayManager.m */,\n\t\t\t\tC4B995B84A38F911427A6A5E55661B60 /* RCTFont.h */,\n\t\t\t\tEDE4A26ED9B011F0E70494EBA45F89FE /* RCTFont.mm */,\n\t\t\t\t506E11C60093C5C364DE8F3F2F22AC41 /* RCTLayout.h */,\n\t\t\t\t0C4FC7D25DF3E8899A55391A2FBA5740 /* RCTLayout.m */,\n\t\t\t\tC55375F5233C369562ED2EB95C0B34D6 /* RCTModalHostView.h */,\n\t\t\t\tEC10C9531C237863B28A6E20B64DC15A /* RCTModalHostView.m */,\n\t\t\t\tC56554BC73CCF6D61610A28081393A2A /* RCTModalHostViewController.h */,\n\t\t\t\t373F105CB4DEE4BDB90F46875B73BFA8 /* RCTModalHostViewController.m */,\n\t\t\t\t6641C8CC47F08AA0D3136808CBCB811D /* RCTModalHostViewManager.h */,\n\t\t\t\t4738F10785BD68311DE222F91337CB33 /* RCTModalHostViewManager.m */,\n\t\t\t\t8203B91D615D3D818C75D20CC7EECACE /* RCTModalManager.h */,\n\t\t\t\tA9951E633F11568F42B8CA2DB0EAAE73 /* RCTModalManager.m */,\n\t\t\t\t90049B8377428D5B7434F2C8680C87CF /* RCTPointerEvents.h */,\n\t\t\t\t40070AAA8193578B4B19218FCBD1F506 /* RCTRootShadowView.h */,\n\t\t\t\t8817E84E8D2A30EF3D7C5A9EFE82A593 /* RCTRootShadowView.m */,\n\t\t\t\t3AD33F21CFF457D719E527B0A4413B4E /* RCTSegmentedControl.h */,\n\t\t\t\t3CC7171C241F88DC2439CD6C9B3B9BDA /* RCTSegmentedControl.m */,\n\t\t\t\tAEF17D14D0B0DF8A55346CEFDBEA3396 /* RCTSegmentedControlManager.h */,\n\t\t\t\tC9D9E5911728E23B08C57B041A401477 /* RCTSegmentedControlManager.m */,\n\t\t\t\t070773F376061291576F78B4FAA81792 /* RCTShadowView.h */,\n\t\t\t\tA0E2B3DDC742F701942096E520561398 /* RCTShadowView.m */,\n\t\t\t\tCF6A928C7A982274E5574B81E88B799B /* RCTShadowView+Internal.h */,\n\t\t\t\tA85C9B1C1144724CD503C69AEA9FCD8B /* RCTShadowView+Internal.m */,\n\t\t\t\t500E0FB005F00271DB2A0C68724900DA /* RCTShadowView+Layout.h */,\n\t\t\t\tAA78032AF49201693A01E81C17C66EA3 /* RCTShadowView+Layout.m */,\n\t\t\t\t4168B7BDC6AE9FC9B5C87C96C641EA8E /* RCTSwitch.h */,\n\t\t\t\tD9722AC2B3A09F57A4EF66060A291E1E /* RCTSwitch.m */,\n\t\t\t\t39F844696BFB60487E053DE52768656B /* RCTSwitchManager.h */,\n\t\t\t\tE53A2DCCFA3939F1CADE98C7ADABB2F1 /* RCTSwitchManager.m */,\n\t\t\t\tC3701203D3AD5D881037196F72FD8BB7 /* RCTTextDecorationLineType.h */,\n\t\t\t\t191255608BFC29BB27805F33B002132B /* RCTView.h */,\n\t\t\t\tA29983597DBADCA7A69A6EAE6BBED3C3 /* RCTView.m */,\n\t\t\t\t5B47FFA4BCF0EC2E8F7A7330A0B625F7 /* RCTViewManager.h */,\n\t\t\t\tA294F9716939BAB7421C72EE8DE2D3C2 /* RCTViewManager.m */,\n\t\t\t\t0EE4437365F516793455723C0F9555B1 /* RCTViewUtils.h */,\n\t\t\t\tED025FBB53B0B481493FAFFAED14F5E6 /* RCTViewUtils.m */,\n\t\t\t\tDAB01DFE83E0C8658D41522C80D2366D /* RCTWrapperViewController.h */,\n\t\t\t\t33C0BE36B9FBC218A7F9944F9E03ABC9 /* RCTWrapperViewController.m */,\n\t\t\t\t15D5A0BFD941071680CCF747591837C8 /* UIView+Private.h */,\n\t\t\t\t32680615BD888084B01D830F2196A3C7 /* UIView+React.h */,\n\t\t\t\tA5B22DA0749C539DAE387FAB7E1507FC /* UIView+React.m */,\n\t\t\t\t50AA27881D34215F513B67E035DBFD23 /* RefreshControl */,\n\t\t\t\tFD407F481179C9D21976E957BE8A96A5 /* SafeAreaView */,\n\t\t\t\t9FCD78A4E6ED7A67F3059F23B587845A /* ScrollView */,\n\t\t\t);\n\t\t\tname = Views;\n\t\t\tpath = React/Views;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t242C2C37DBF48E04AB5C45C85164E5C7 /* SafeAreaView */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9A2407C78B8F357AFB081AF5B1BC953A /* RCTSafeAreaViewComponentView.h */,\n\t\t\t\tA46EE0867CB9E92996C6DE17ED0EE3DB /* RCTSafeAreaViewComponentView.mm */,\n\t\t\t);\n\t\t\tname = SafeAreaView;\n\t\t\tpath = SafeAreaView;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t247B3D691DCFB870C0BD2599C09375C8 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5601EFF66A7656BA9E668AE17351D360 /* React.debug.xcconfig */,\n\t\t\t\t5883D7A51536D3FB292BBC1FEF7C6C1C /* React.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../native/iosTest/Pods/Target Support Files/React\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t248120CA5FD7E4114C4F0F62A60B7180 /* hermes-engine */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tBE20CA3BB20E13CB19270700923F126B /* Pre-built */,\n\t\t\t\t724B3DEDFA0F74B3AAB15146C6AE0F75 /* Support Files */,\n\t\t\t);\n\t\t\tname = \"hermes-engine\";\n\t\t\tpath = \"hermes-engine\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t248E0857531D8880B34BAC0B82346D3D /* renderer */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t25B9384DBCA69E81785D43A83CE546C9 /* components */,\n\t\t\t);\n\t\t\tname = renderer;\n\t\t\tpath = renderer;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t24F8C12C803A74AF9E18BC10B85299DF /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1363975620BCD9B8C433172AE2F17F0F /* React-hermes-dummy.m */,\n\t\t\t\t77B6947FB86A59093DFA118F372E24B2 /* React-hermes-prefix.pch */,\n\t\t\t\tA73C90F6C769770D58136250FCF48CCC /* React-hermes.debug.xcconfig */,\n\t\t\t\t846735472D63BEB4DB75ECD903ECD756 /* React-hermes.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../native/iosTest/Pods/Target Support Files/React-hermes\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t25B9384DBCA69E81785D43A83CE546C9 /* components */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t58BE57C789F8C8396E4F9C36CEA1E3B1 /* view */,\n\t\t\t);\n\t\t\tname = components;\n\t\t\tpath = components;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t26F1C44700390E55DAC55AF9754E220A /* React-Core */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t2633DC101FF0E08FE241777B60154AEF /* ar.lproj */,\n\t\t\t\t8CD6649A7EC8CDD2CF31FCF0EBBD4501 /* cs.lproj */,\n\t\t\t\t825AFF4407B94619036B3195D86313D2 /* da.lproj */,\n\t\t\t\tB97F33E9BF0E6E5FD86B0667D950EEC9 /* de.lproj */,\n\t\t\t\t0F403305468DF1F3BDD4EB48076E71DC /* el.lproj */,\n\t\t\t\t5931C556E2652C0F4090A1106D4FEAD0 /* en.lproj */,\n\t\t\t\t66808C29ABD639B3D916CDB9C1A33496 /* en-GB.lproj */,\n\t\t\t\t70D50FBA71B5522FC8324C5638AAABC4 /* es.lproj */,\n\t\t\t\t95FE5AE8E711BF2C04047FE31AFA930A /* es-ES.lproj */,\n\t\t\t\tA71AF6D224DB5B45B4A632DC900459A4 /* fi.lproj */,\n\t\t\t\t61074D38D23CB60AF7788D75C0DEFE73 /* fr.lproj */,\n\t\t\t\t46E1F838DD66034E7F76591680E8F0F6 /* he.lproj */,\n\t\t\t\t84C78B3BD305937A8FB7F156B1068561 /* hi.lproj */,\n\t\t\t\t91392F3C2B6C40DD319492604906C7B0 /* hr.lproj */,\n\t\t\t\t411B0CC2295DAA5FACED75F6D4BA67ED /* hu.lproj */,\n\t\t\t\tDE0FDA05FBBF20ED1DD8039C9EF483D2 /* id.lproj */,\n\t\t\t\tFB5D34754AD28372AC075C4836BC9BDD /* it.lproj */,\n\t\t\t\tED0D60F3F216448664954D0D5A35FECE /* ja.lproj */,\n\t\t\t\tAD18C7CE1E7A5577FEB2D0F7000A7E5F /* ko.lproj */,\n\t\t\t\tE606EFA2C4D098DAEBD8DFD0734E2535 /* ms.lproj */,\n\t\t\t\t558ED3C1B5F36FE5842EBF04C4FC985C /* nb.lproj */,\n\t\t\t\tA3A1C115325E8DCA58106218ADDBA397 /* nl.lproj */,\n\t\t\t\tE7807D90980DF5E58292BD819D067CCC /* pl.lproj */,\n\t\t\t\t80F9DAC31E738BCDB2481B8D0EFF7D4D /* pt.lproj */,\n\t\t\t\t65814B713B9CD521A09E7AF980ECF508 /* pt-PT.lproj */,\n\t\t\t\t75003887015004482CFDA84D733744C1 /* ro.lproj */,\n\t\t\t\tFA397527B29CC2470176B423C005BEE9 /* ru.lproj */,\n\t\t\t\t72F4E61BD474BE602AFFC71C43FD918B /* sk.lproj */,\n\t\t\t\t91CE745FCDC2F917FBFE8E7C44B21638 /* sv.lproj */,\n\t\t\t\tD23D4785660627F3CD0959228AD79333 /* th.lproj */,\n\t\t\t\tADB0726235787BE84DE49AC4624711EA /* tr.lproj */,\n\t\t\t\tAD09CCE53769CA1F7BC1031AEBE1E2CE /* uk.lproj */,\n\t\t\t\t5744FF8972259231F82207B5D2C1B114 /* vi.lproj */,\n\t\t\t\tA8FBD27727A3838365F69F39FCE1378C /* zh-Hans.lproj */,\n\t\t\t\t8B0995DAA2C152F8B2BBE8B2BD71EB56 /* zh-Hant.lproj */,\n\t\t\t\t6F72B3F616F35DD1A397AD34A9471C80 /* zh-Hant-HK.lproj */,\n\t\t\t\tF04C97A51C7A3AE18D87F7881C39DC76 /* zu.lproj */,\n\t\t\t\t6CAF12F826A453EF88B2F103280D6381 /* CoreModulesHeaders */,\n\t\t\t\t64518A8E0CF4473016570A6879346C64 /* Default */,\n\t\t\t\t4AE2119A369C0BB17CA29AD269CB3D64 /* DevSupport */,\n\t\t\t\t4DF42A7CD74B7436D63FF2AD52C1F94D /* Pod */,\n\t\t\t\tCDF374E5D2600436F59137E53DD04D31 /* RCTAnimationHeaders */,\n\t\t\t\tD80B2E04C127C418884E728E8A977978 /* RCTBlobHeaders */,\n\t\t\t\t79E785223D174035A153EE0695AF76AE /* RCTImageHeaders */,\n\t\t\t\t08063C19264EDBC412CBC2513BC4077D /* RCTLinkingHeaders */,\n\t\t\t\t59347770634A6137053C514350BED8BC /* RCTNetworkHeaders */,\n\t\t\t\t93D7502F904C05AAAA56B79ADBFD98ED /* RCTSettingsHeaders */,\n\t\t\t\tBBA1DA7B3C252A6F03099451D25F6163 /* RCTTextHeaders */,\n\t\t\t\t79C6C4E31B41E8EA50D9951530679E7E /* RCTVibrationHeaders */,\n\t\t\t\t6CA7A5B3A37A3BD4C4189F7FB0462212 /* RCTWebSocket */,\n\t\t\t\t23C8C103E25BD58ADE6870DE657D9BA8 /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-Core\";\n\t\t\tpath = \"../../../node_modules/react-native\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t278FF3C375817348A07F1B5488D1F7FF /* React-jsinspector */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8231A4F6131F749AEA92BF670465B6DD /* ExecutionContext.cpp */,\n\t\t\t\tF9FB962222C7D13D456DA7490A882D10 /* ExecutionContext.h */,\n\t\t\t\t90CE57248719DB1AD38AECFB8A66AF11 /* ExecutionContextManager.cpp */,\n\t\t\t\t5660D2686BFA4493932307298F162071 /* ExecutionContextManager.h */,\n\t\t\t\t9849504D06A58E365E3512F08D8AD6DF /* FallbackRuntimeAgentDelegate.cpp */,\n\t\t\t\t488ADD85E24689EBD7862B0D4E7CA547 /* FallbackRuntimeAgentDelegate.h */,\n\t\t\t\t4BB7FF49C6C69146DEE4B499147BB9B0 /* InspectorFlags.cpp */,\n\t\t\t\t704C76032CCE295710F90FEE18E4B95F /* InspectorFlags.h */,\n\t\t\t\t35645CAF1F9339B964422D6014D3FB62 /* InspectorInterfaces.cpp */,\n\t\t\t\tABA56E2973B5F2DA40756B56701FEC9D /* InspectorInterfaces.h */,\n\t\t\t\tF3070DCC47CC323B0236AAA591CC207A /* InspectorPackagerConnection.cpp */,\n\t\t\t\tE40225EFF83BFF372E2ACB0DEB6152DB /* InspectorPackagerConnection.h */,\n\t\t\t\tB02F47D538066B1D13C474E20A59039A /* InspectorPackagerConnectionImpl.h */,\n\t\t\t\t97537A67023F6E33A60145FD2CCD320F /* InspectorUtilities.cpp */,\n\t\t\t\t434BDC67E1145AE964DB9AA3C0D4F3AE /* InspectorUtilities.h */,\n\t\t\t\t102110A5E77C7808CB1EAFF9A4489E0B /* InstanceAgent.cpp */,\n\t\t\t\t766F8957B06DFCFCD48D2426262EFF74 /* InstanceAgent.h */,\n\t\t\t\tE6FD88D73CEF39AD0A723267614B20B6 /* InstanceTarget.cpp */,\n\t\t\t\t4BAC8D0807F88C47E4DFD9F7C7859B82 /* InstanceTarget.h */,\n\t\t\t\tAF18A646E6EA4CC7C73600700D4BDAF3 /* PageAgent.cpp */,\n\t\t\t\tADF560A03C559A77C9107C87619CB4E7 /* PageAgent.h */,\n\t\t\t\tDE6CB0254166C64BB61D724834E284BA /* PageTarget.cpp */,\n\t\t\t\tE7ADD63BE36BD61FB54992AEEC51FACC /* PageTarget.h */,\n\t\t\t\tFE123FC7D80F16C162FBB579CF5DBD81 /* Parsing.cpp */,\n\t\t\t\tDC79C41D3256C56029659B9591017FCF /* Parsing.h */,\n\t\t\t\t6CEDDCFAB391081A6C3EB050DB9303AF /* ReactCdp.h */,\n\t\t\t\t75527CABA73184F431A0FFA3918A6D5B /* RuntimeAgent.cpp */,\n\t\t\t\t45E05ACB5D6C411D85AD9B6A40C2DD2E /* RuntimeAgent.h */,\n\t\t\t\tF4D03D4133A485BCCB2117CF4DDE2ED6 /* RuntimeAgentDelegate.h */,\n\t\t\t\t40E5A309579F3C1A9D1F5C45ED9FFA0F /* RuntimeTarget.cpp */,\n\t\t\t\tDBD26F4D9278DAF3DEA356BE83D84C2B /* RuntimeTarget.h */,\n\t\t\t\t9B40A55CAE96B9EC2411B625D3F58ABD /* ScopedExecutor.h */,\n\t\t\t\tF4FDC94B0FAFD47D454687DEABE33319 /* SessionState.h */,\n\t\t\t\t2A474E2B602BF03DC7153DA54029EFCD /* UniqueMonostate.h */,\n\t\t\t\t963CB6F0F1E28EA98A2EED61461AC386 /* WeakList.h */,\n\t\t\t\t6D3D07411F82B089A181E94AD1F54DF7 /* WebSocketInterfaces.h */,\n\t\t\t\t4C8E26DD5A220182F8DADC9AA1EBBCC9 /* Pod */,\n\t\t\t\tED9447BEE8DFF868BCF24CC0D1B5B302 /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-jsinspector\";\n\t\t\tpath = \"../../../node_modules/react-native/ReactCommon/jsinspector-modern\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t27B37E6E4590A097086761DD10791464 /* React */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t88F775F3830FCCD985633F79D022F25B /* Pod */,\n\t\t\t\t247B3D691DCFB870C0BD2599C09375C8 /* Support Files */,\n\t\t\t);\n\t\t\tname = React;\n\t\t\tpath = \"../../../node_modules/react-native\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t2870CF1C2308D80731D8890A76D25817 /* Utils */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t96F9A50575BD572DC92EEFE7118DE559 /* PlatformRunLoopObserver.h */,\n\t\t\t\t6075D4D4439E8587250CA17C18029EFE /* PlatformRunLoopObserver.mm */,\n\t\t\t\tEEB4D9ABDCA5AC8FCD10C726DD32E01C /* RCTGenericDelegateSplitter.h */,\n\t\t\t\t48C37A67E9B9AEBECBFDBF2939F0F488 /* RCTGenericDelegateSplitter.mm */,\n\t\t\t\tAD69277D74C06C01F9C13CD77A13038E /* RCTIdentifierPool.h */,\n\t\t\t\t50E197DCEAC19B139D61338F626D0ECE /* RCTReactTaggedView.h */,\n\t\t\t\tC1C38809AFDAD38F285E4E8EF2CAC4E6 /* RCTReactTaggedView.mm */,\n\t\t\t);\n\t\t\tname = Utils;\n\t\t\tpath = Fabric/Utils;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t28763FCA9414FF721C7399FFAEF0EB3F /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t189A7A88790E4B177BFC5728470F1A12 /* React-RCTText.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t28B32097553A4D29F0613AE45FD6F381 /* VirtualText */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE0B0A85C6C1A686DD387938C318B3E03 /* RCTVirtualTextShadowView.h */,\n\t\t\t\t447C966873650F5BE0F53C20B5B181AD /* RCTVirtualTextView.h */,\n\t\t\t\tC37722D87F8B49DE9B83ACFE1C0A286A /* RCTVirtualTextViewManager.h */,\n\t\t\t);\n\t\t\tname = VirtualText;\n\t\t\tpath = Libraries/Text/VirtualText;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t2A6D3BA3FB491018316327CC752B4B51 /* FMDB */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tBEC512EF35E614CECC60A855831857E0 /* src */,\n\t\t\t);\n\t\t\tname = FMDB;\n\t\t\tpath = FMDB;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t2BAC0805E5BEF3B1325B53C8584C41FE /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t2AEA71EA50563CCA7CAD2D0EA99BC4C3 /* React-RuntimeHermes.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t2E393EBD7601FECABA80E94DF2D8935A /* DevSupport */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t25984569AD3852F629F09301282C7769 /* RCTDevLoadingViewProtocol.h */,\n\t\t\t\t166D6C41B0081CEA737676E813606B04 /* RCTDevLoadingViewSetEnabled.h */,\n\t\t\t\t4EEB093EC638788E1D7EDFEC04D19432 /* RCTDevLoadingViewSetEnabled.m */,\n\t\t\t\tCF9F9BDD710866E3AB298A535A581739 /* RCTInspectorDevServerHelper.h */,\n\t\t\t\t492BFB87D3FC79B8A5E5053209507E96 /* RCTInspectorDevServerHelper.mm */,\n\t\t\t\tD325DB74A674890FFA71EB148DA83A39 /* RCTPackagerClient.h */,\n\t\t\t\t5E9F375741E65415151EE9093DC1535E /* RCTPackagerClient.m */,\n\t\t\t\tFC938492EE25EDBA884D42C17EE1E89B /* RCTPackagerConnection.h */,\n\t\t\t\t03AD611B7986C5B131631A16A6DD5262 /* RCTPackagerConnection.mm */,\n\t\t\t);\n\t\t\tname = DevSupport;\n\t\t\tpath = React/DevSupport;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t2E832F8BE4BE501B7593972F10AC5390 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t17A0B50A888B86A9F608EBDAB0EA9B29 /* React-callinvoker.debug.xcconfig */,\n\t\t\t\tEC7EC957168B2840A6783186671E89DB /* React-callinvoker.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../native/iosTest/Pods/Target Support Files/React-callinvoker\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t2F777C58C39334C896E57A642E72C935 /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB70C6129736E666B55CAAA7398C8E6CF /* React-RCTAnimation.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t3129A0ADE4B97DD3998639F514893B94 /* root */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t19CE4DC4612BEAACFA7B4D6EA7464CC4 /* RootComponentDescriptor.h */,\n\t\t\t\tAD77E6961ACDBD3730EC6702236118AC /* RootProps.cpp */,\n\t\t\t\t13E6AE2DFCC178D3B20D130A2FA35FAC /* RootProps.h */,\n\t\t\t\t5607E93C1618AA4B1B9A7B366EA9EB0F /* RootShadowNode.cpp */,\n\t\t\t\t489E69C87D3FBB7418B3000B710B6899 /* RootShadowNode.h */,\n\t\t\t);\n\t\t\tname = root;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t3261564B236FD10151DB427DF0FE4F25 /* style */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE8CB40AE7BA0C7EB4EDD1532C9B8FAE8 /* SmallValueBuffer.h */,\n\t\t\t\t5545A49E67978F2CEF8C77F63D7368FF /* Style.h */,\n\t\t\t\tC1761C0EF012288CCBB296F26485316A /* StyleLength.h */,\n\t\t\t\tB9F029DADA46B18ADF047508F6813174 /* StyleValueHandle.h */,\n\t\t\t\t8F35EF9396775F51CA6146B0C7D16351 /* StyleValuePool.h */,\n\t\t\t);\n\t\t\tname = style;\n\t\t\tpath = yoga/style;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t330759EDD479CCC913161F05B0849526 /* RCTTypeSafety */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t819B22FC019823E75AE6A15AF791911F /* RCTConvertHelpers.h */,\n\t\t\t\t82552A36AF98B4CFE12CF35D745DFEBA /* RCTConvertHelpers.mm */,\n\t\t\t\t0741545417754F6F394479EDADE0B5F6 /* RCTTypedModuleConstants.h */,\n\t\t\t\t4E54C446AD8887C61105DE1F1011BC2F /* RCTTypedModuleConstants.mm */,\n\t\t\t\t37591062ABE85440F02AAD222779CE94 /* Pod */,\n\t\t\t\tFB232A0FE04B688B88B0BD685A108283 /* Support Files */,\n\t\t\t);\n\t\t\tname = RCTTypeSafety;\n\t\t\tpath = \"../../../node_modules/react-native/Libraries/TypeSafety\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t335F15F96FB0EFA61B990DBD29902F91 /* react */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t248E0857531D8880B34BAC0B82346D3D /* renderer */,\n\t\t\t);\n\t\t\tname = react;\n\t\t\tpath = react;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t340139964ADFE59B05FAC656AF821E52 /* fmdb */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDFA6EA2550443AA8D5C90B1C550AD342 /* FMDatabase.h */,\n\t\t\t\tC8E070E3387DCB006D125024D0D086B2 /* FMDatabase.m */,\n\t\t\t\t6F9A9F41C8712A5EA89926F9E34BB317 /* FMDatabaseAdditions.h */,\n\t\t\t\tA511E79FFB4293C0F4E1849EB6DAA5E9 /* FMDatabaseAdditions.m */,\n\t\t\t\tFFA2A883F42A90CB3B4B86BA995A7239 /* FMDatabasePool.h */,\n\t\t\t\t42E6807903C30860853913241D16DBE5 /* FMDatabasePool.m */,\n\t\t\t\t40B78C2265ACE3B8ACB7A504F9CFA4DE /* FMDatabaseQueue.h */,\n\t\t\t\tA45E1BB2ACE5150BEF6C4801CE86896C /* FMDatabaseQueue.m */,\n\t\t\t\tD2E4E35B35014E917353983248FC5B53 /* FMDB.h */,\n\t\t\t\t6189337A90AFF99D9CD0BDCCA472E2B3 /* FMResultSet.h */,\n\t\t\t\tB17C5DF58EBCAD0079663296EFB0D99F /* FMResultSet.m */,\n\t\t\t);\n\t\t\tname = fmdb;\n\t\t\tpath = fmdb;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t340E82E2438D743D828946C5B70EFC33 /* RawText */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t586843BE182EC40BA0F3E64B3128724F /* RCTRawTextShadowView.mm */,\n\t\t\t\t63646CDACE649B0945C14C4A4A8DB7A3 /* RCTRawTextViewManager.mm */,\n\t\t\t);\n\t\t\tname = RawText;\n\t\t\tpath = RawText;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t343725706DBD41ACEB61E1FAA40EF492 /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3C3877360CD1523AEBF6A0B3BECBB8D6 /* React-rendererdebug.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t37591062ABE85440F02AAD222779CE94 /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB10A2905CFE3A22DA9F68FED8B2A937E /* RCTTypeSafety.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t39C50CAF7E26A860DBFABBAA3126DF9F /* DebuggingOverlay */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6FA175D69859A3FE955C27E8F8107960 /* RCTDebuggingOverlayComponentView.h */,\n\t\t\t\tD24AD310EE0E5FC9562D150864F26033 /* RCTDebuggingOverlayComponentView.mm */,\n\t\t\t);\n\t\t\tname = DebuggingOverlay;\n\t\t\tpath = DebuggingOverlay;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t3A89BBF10BF4CF5D3C418A38D668F587 /* FBReactNativeSpec */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t67659C3BADBA7BF553069160A417E2A0 /* FBReactNativeSpec.h */,\n\t\t\t\t2D50029B232140A61A9034E9BCCA51BB /* FBReactNativeSpec-generated.mm */,\n\t\t\t);\n\t\t\tname = FBReactNativeSpec;\n\t\t\tpath = FBReactNativeSpec;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t3B358CA7D370359AADC1873E8C9F0BA1 /* React-RuntimeApple */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF275B31E7A8AAE45DABF741983B8C743 /* ObjCTimerRegistry.h */,\n\t\t\t\tB6B15808FE6325BFE9D87ECA96CA3A11 /* ObjCTimerRegistry.mm */,\n\t\t\t\tF8DEF690935571E2BA15F11F274EE883 /* RCTContextContainerHandling.h */,\n\t\t\t\t0FB451B2BE52BDDEC46C0D989282A4A7 /* RCTHermesInstance.h */,\n\t\t\t\t32854BF47BB04F74CF858BD8BDE66C35 /* RCTHermesInstance.mm */,\n\t\t\t\tED3AFC07867C7C0F7FA6437AB25AB2C0 /* RCTHost.h */,\n\t\t\t\t74F0A4078D35270995DBAA54BA83A8B7 /* RCTHost.mm */,\n\t\t\t\tBA9901F19F900300AC2E7122D5AC01A6 /* RCTHost+Internal.h */,\n\t\t\t\t16F3181ABDCFFB13D360DA6C3047FC89 /* RCTInstance.h */,\n\t\t\t\tEADE36F3457E268442D18E096152CF53 /* RCTInstance.mm */,\n\t\t\t\t99706928F57B54531F9949E340BFECB8 /* RCTJSThreadManager.h */,\n\t\t\t\tDB54433DB90DCA8B444031497CC05E80 /* RCTJSThreadManager.mm */,\n\t\t\t\t04160B32874923084312A1D40F4703C3 /* RCTLegacyUIManagerConstantsProvider.h */,\n\t\t\t\t0575009F97CFBDB1867FBAA80648479B /* RCTLegacyUIManagerConstantsProvider.mm */,\n\t\t\t\tBC22B5A34F36A3E0B23AF08AE83EE25D /* RCTPerformanceLoggerUtils.h */,\n\t\t\t\t9BC40B6E05AAAA8B1786166F41BD0EBF /* RCTPerformanceLoggerUtils.mm */,\n\t\t\t\tC51C39BEFC7949604ADA6AC55E5398EC /* Pod */,\n\t\t\t\tB25136050555256BFCFC476D4F2E42A5 /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-RuntimeApple\";\n\t\t\tpath = \"../../../node_modules/react-native/ReactCommon/react/runtime/platform/ios\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t3B6463C7A136A650C4C0140180398E03 /* Modal */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t34A2168F62C5C8BB1DEEA7D485022A12 /* RCTFabricModalHostViewController.h */,\n\t\t\t\tDB2D4AA87F51B33CB9A6EC8B96ED1D23 /* RCTFabricModalHostViewController.mm */,\n\t\t\t\t53C4B697D1793E966C34C78BD44F6D02 /* RCTModalHostViewComponentView.h */,\n\t\t\t\tE08FAB111E604490074792C7CFAC9084 /* RCTModalHostViewComponentView.mm */,\n\t\t\t);\n\t\t\tname = Modal;\n\t\t\tpath = Modal;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t3BCBFC56764D4C25F88064F72398AA93 /* React-hermes */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAA829DB19589EE114FF17962F6831B2A /* executor */,\n\t\t\t\tB4F2C154142416109FA78F907E5B3547 /* inspector-modern */,\n\t\t\t\tDC8EACDE4AF3CC4AF53714C50C9E43B9 /* Pod */,\n\t\t\t\t24F8C12C803A74AF9E18BC10B85299DF /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-hermes\";\n\t\t\tpath = \"../../../node_modules/react-native/ReactCommon/hermes\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t3C7349976EA80B1057745E6654F5AB2A /* React-runtimeexecutor */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA75D554108476D6BB8046C09E3577B9C /* RuntimeExecutor.h */,\n\t\t\t\tA4517A17CC86213678856402DD6CC7BC /* Pod */,\n\t\t\t\t684A99A16D90DD769294066B2A21E529 /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-runtimeexecutor\";\n\t\t\tpath = \"../../../node_modules/react-native/ReactCommon/runtimeexecutor\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t3C90C21DA311CB0108B3C31BBC36383B /* Root */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA0DF3FB6417DB1CED9E5F8CF270DC9F6 /* RCTRootComponentView.h */,\n\t\t\t\t906802F5C01093C45F849B1189752669 /* RCTRootComponentView.mm */,\n\t\t\t);\n\t\t\tname = Root;\n\t\t\tpath = Root;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t3CF4D8EF547899AF801588608FF767B4 /* WatermelonDB */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tABE19B1F318E966A4F2624B095AC06CA /* ios */,\n\t\t\t\tC5E0AD954B2C8CBF163BFEA23778781C /* Pod */,\n\t\t\t\tC5534E19718C643BAE8858AE6BB0FE84 /* shared */,\n\t\t\t\tFA71C039003B0E9153109D272FAAA931 /* Support Files */,\n\t\t\t);\n\t\t\tname = WatermelonDB;\n\t\t\tpath = ../../..;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t3DC2CFD8AB13FB472599D9AEE2CCDCBE /* glog */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tBCA4B995FCA633E532EC78345A862CC7 /* demangle.cc */,\n\t\t\t\tF08460D67FAF18E84D6207E257538D64 /* log_severity.h */,\n\t\t\t\tB07F73246764E395281393D1BFD73751 /* logging.cc */,\n\t\t\t\t02AB5D40CC6820F70D656AA73BEA1C64 /* logging.h */,\n\t\t\t\tEF33D80102A84702AA2E2212D875E506 /* raw_logging.cc */,\n\t\t\t\tB797800645D9DCAD28A63367CF4B5E31 /* raw_logging.h */,\n\t\t\t\t7706A182348778EF9482CF0A0A02DC41 /* signalhandler.cc */,\n\t\t\t\tB222607BD79B79EA46BBA68F606016E7 /* stl_logging.h */,\n\t\t\t\t7A230B7C6D6ECDDCB14F95021BE6FDEB /* symbolize.cc */,\n\t\t\t\tAA3A3C340B0E34E2DE91A75386812EC9 /* utilities.cc */,\n\t\t\t\tAF297E87957501039602459E49565C20 /* vlog_is_on.cc */,\n\t\t\t\tFCFD99083FD714E25C32912BE07EEE2F /* vlog_is_on.h */,\n\t\t\t\t66248CFBB63ACD60DC5ECBA522E1FCB0 /* Support Files */,\n\t\t\t);\n\t\t\tname = glog;\n\t\t\tpath = glog;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t3F5A3B98DAA657AE2E2B92F3DD5EF966 /* Singleline */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t609281012AE698DC460A40129D138A06 /* RCTSinglelineTextInputView.h */,\n\t\t\t\t70FD25025D88D2C467D14135D309D155 /* RCTSinglelineTextInputViewManager.h */,\n\t\t\t\tB8426E288C9F4E8EADBFDB047F2B7941 /* RCTUITextField.h */,\n\t\t\t);\n\t\t\tname = Singleline;\n\t\t\tpath = Singleline;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t405D2A29856880C542E96FFF01AB4D38 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t69377A3F74E51E3872AC1F550123E373 /* React-RCTActionSheet.debug.xcconfig */,\n\t\t\t\t33AFE6C6C66107B924778D5E609CBE54 /* React-RCTActionSheet.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../native/iosTest/Pods/Target Support Files/React-RCTActionSheet\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t411AD2DEE636250CEA28E7CD2D46AF64 /* Text */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDAFF833F6075C65A5629CFE2099DA2DE /* NSTextStorage+FontScaling.m */,\n\t\t\t\tFB2A143E4389164E0F2CCDB7122BD9F1 /* RCTDynamicTypeRamp.mm */,\n\t\t\t\t0A05EEA6DE2EF6E728D7085041633AFA /* RCTTextShadowView.mm */,\n\t\t\t\t394174FFAD60F61AE02F3A5C011D30BC /* RCTTextView.mm */,\n\t\t\t\tFE4DF00236D3CFC9333AC4F2536AD07C /* RCTTextViewManager.mm */,\n\t\t\t);\n\t\t\tname = Text;\n\t\t\tpath = Text;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t41853CCBEA5A920B81E37C320F0F8879 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tCBB1209D9BF3AC7A5E77178DCA9C126A /* React-perflogger-dummy.m */,\n\t\t\t\t5366D59A6C60853DE6216206318AD290 /* React-perflogger-prefix.pch */,\n\t\t\t\tA0C9633F0AEEFB533D94C4D5B1D9CFDE /* React-perflogger.debug.xcconfig */,\n\t\t\t\t325477957D7D1B6F9F9C72D859C2E8BE /* React-perflogger.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../native/iosTest/Pods/Target Support Files/React-perflogger\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4199B976A5C419A1F04918D0722A7C49 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t51FCC6E2D2922D4288A83D114839FF83 /* React-CoreModules-dummy.m */,\n\t\t\t\t615E52518F5B3DD85052695A2414331A /* React-CoreModules-prefix.pch */,\n\t\t\t\t2E12202A59E36B86AFC6D2CB7CC7B1A2 /* React-CoreModules.debug.xcconfig */,\n\t\t\t\t58C1E8B779C42177C4AE37F87FA08B90 /* React-CoreModules.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../native/iosTest/Pods/Target Support Files/React-CoreModules\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t428E61796EE85ED2EFE00325BFA5B4BD /* turbomodule */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1A90064350D1AA1771D19FCF9770AC84 /* bridging */,\n\t\t\t\t6E7AFD21AE89FB328A42BE75A736DBEE /* core */,\n\t\t\t);\n\t\t\tname = turbomodule;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t42D7DF2047B869A8F3D547A8C6816953 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0C6723FFC2422C5B1BE0FFFF1B17CC36 /* RCT-Folly.modulemap */,\n\t\t\t\t729855E0C41B82077DDA2290F0B0BCBD /* RCT-Folly-dummy.m */,\n\t\t\t\t97BEF627FC626AA3E7E8CA75193664A3 /* RCT-Folly-prefix.pch */,\n\t\t\t\t315FDA4F573874F2BD0A7F57C70AF3E1 /* RCT-Folly-umbrella.h */,\n\t\t\t\t2E89F76541853DEFE4E1B570E724F503 /* RCT-Folly.debug.xcconfig */,\n\t\t\t\tAB3065BC1723E238FF985D2A37F0A542 /* RCT-Folly.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../Target Support Files/RCT-Folly\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t44743D4355D456613604BEB051E106B2 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEBF0BD1DADF4AA41730BF0DC7AF614AC /* RCTDeprecation.modulemap */,\n\t\t\t\t3FB252110B7F6302C421C46ADF22A0BD /* RCTDeprecation-dummy.m */,\n\t\t\t\t74634074E7E5AADD54F61ACB94B63759 /* RCTDeprecation-prefix.pch */,\n\t\t\t\t1147DF7D7F05EA4A85F3A1FF854A3B85 /* RCTDeprecation-umbrella.h */,\n\t\t\t\tDECEAEDC186B345BDAAD789EDD05B9FD /* RCTDeprecation.debug.xcconfig */,\n\t\t\t\t07AE3DB6F5EB2B92FE81A1B8A4CE6BE8 /* RCTDeprecation.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../../../native/iosTest/Pods/Target Support Files/RCTDeprecation\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t46AB12B78F8981DAECDCA361493F2B5C /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6D899FAEC06F009C28975CC142A41EC9 /* React-RuntimeCore.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t46BCFE61D7356DAFCE7CBB3B5D38D192 /* React-NativeModulesApple */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDBF242B856D15CC59A314DC9A8B2701B /* RCTInteropTurboModule.h */,\n\t\t\t\tA4841C02742AC28A86287DBC07806A0E /* RCTInteropTurboModule.mm */,\n\t\t\t\t3A75958C7177C6CC36B895D30E732E64 /* RCTRuntimeExecutor.h */,\n\t\t\t\t8E11E2044A1B7194DE5069CCBE8DD5AF /* RCTRuntimeExecutor.mm */,\n\t\t\t\t631FE1EE541BDAE0AFB75102923ACDCC /* RCTTurboModule.h */,\n\t\t\t\t41D562BB5F84842F8DF9293C3DEB309C /* RCTTurboModule.mm */,\n\t\t\t\t41CA6E5A23C938EF530325403BEB5ABB /* RCTTurboModuleManager.h */,\n\t\t\t\t446FE57F2A972700F005CD2CC41F8710 /* RCTTurboModuleManager.mm */,\n\t\t\t\tA43ADC5C0EF00658ABBB46CD0A26DCD9 /* Pod */,\n\t\t\t\t07FB6EB17C1139D744295711E31ED459 /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-NativeModulesApple\";\n\t\t\tpath = \"../../../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t46E47A464150996BC8699D5B01DCF096 /* textinput */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0F5B11863A62393419B2A19ECDD56569 /* conversions.h */,\n\t\t\t\tA4EB08646CC21410C4622CEE62B7DC51 /* primitives.h */,\n\t\t\t\tD8FE00B7A123C71C5F84EA661B962CBE /* propsConversions.h */,\n\t\t\t\t63CBEBB4485380F9D7F6FBA437DF4E46 /* TextInputComponentDescriptor.h */,\n\t\t\t\t71B4D481359E1DC4C88FF4956C3F95BC /* TextInputEventEmitter.cpp */,\n\t\t\t\tB00F5D1C6554CAE9A8E6D6AE4ECFE335 /* TextInputEventEmitter.h */,\n\t\t\t\t7C461F175EB336FD8750A4B7A86919F1 /* TextInputProps.cpp */,\n\t\t\t\tA5419C82AB201A4405D35E3F97C867FB /* TextInputProps.h */,\n\t\t\t\tF468DC980FF349730A91EAB27AA80749 /* TextInputShadowNode.cpp */,\n\t\t\t\tE5E136EE3CB9AD65C230069245AFE89E /* TextInputShadowNode.h */,\n\t\t\t\tA6A3F0A2B90931BC1EC1C3E21381C797 /* TextInputState.cpp */,\n\t\t\t\t9DF1753017BD4FC4A6370681CBE48C79 /* TextInputState.h */,\n\t\t\t);\n\t\t\tname = textinput;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t48538C2EC79AB2B8D68E01A0404F681C /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t54B9E0DF52755792E0D7A095A1592309 /* React-RCTBlob.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4883BEA3F82503FF01DCDA5AE443E6DD /* simdjson */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA5E92316DAA53D54019FF1D5E3697030 /* simdjson.cpp */,\n\t\t\t\tA97083B6B19B7182A30872D4EBFEBE41 /* simdjson.h */,\n\t\t\t\tD72407561996DAEEB789275205FC335D /* Pod */,\n\t\t\t\t8DC739FB8D8429D8E041D0BC40645906 /* Support Files */,\n\t\t\t);\n\t\t\tname = simdjson;\n\t\t\tpath = \"../../../node_modules/@nozbe/simdjson\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t489760B7755233A63757DE6C008D9DF1 /* RCTRequired */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD9F8A226925F0E4037D08493438FE44D /* RCTRequired.h */,\n\t\t\t\tB4F53C80BB006D69F1048DEA8ECF9441 /* Pod */,\n\t\t\t\t7E346AB60CB1FC2D6B701E705FA393DF /* Support Files */,\n\t\t\t);\n\t\t\tname = RCTRequired;\n\t\t\tpath = \"../../../node_modules/react-native/Libraries/Required\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4938E202647DB9A33EF0A661516C90B1 /* view */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t92427655A24DF879C52D7AA18EBFF83E /* AccessibilityPrimitives.h */,\n\t\t\t\t28FF824B4005CDF78CA3A774CFD2549B /* AccessibilityProps.cpp */,\n\t\t\t\tEC88B7FD82BE95C8547982311739D454 /* AccessibilityProps.h */,\n\t\t\t\tD74ED33694328372E1EA1BA3F0EDD255 /* accessibilityPropsConversions.h */,\n\t\t\t\tBCA65CA4802405E6B52F20951F6A6E74 /* BaseTouch.cpp */,\n\t\t\t\t86DFAB05E161B696DFC1057DB247CBE3 /* BaseTouch.h */,\n\t\t\t\tA04DC956EC28B16DDE9F446048074A0D /* BaseViewEventEmitter.cpp */,\n\t\t\t\tFD851DC7951B65E103BB27B6706B8EE3 /* BaseViewEventEmitter.h */,\n\t\t\t\t31E12D3E887518AC0490584345788F27 /* BaseViewProps.cpp */,\n\t\t\t\t19006C0042936BC7BC14B717FB85308A /* BaseViewProps.h */,\n\t\t\t\t5C6AF51B4A4EA15B2F122DBA7BA5B2A0 /* ConcreteViewShadowNode.h */,\n\t\t\t\t1528B7D498ED533635A7109CF11814AC /* conversions.h */,\n\t\t\t\t4997893AEC6DB585E2DB2AC06E6557FD /* PointerEvent.cpp */,\n\t\t\t\t1FBF294CE17585A6CEAE66F34026AA0C /* PointerEvent.h */,\n\t\t\t\t3D7F16F5E30C11527357DD52C8CB2954 /* primitives.h */,\n\t\t\t\tF83C31C20E032D387D9A04D68DAC8265 /* propsConversions.h */,\n\t\t\t\tB711337B1DBE8FDF8CF854026E0D14C1 /* Touch.h */,\n\t\t\t\tEB8033D6D308790A5A46B3BC15DD1BED /* TouchEvent.cpp */,\n\t\t\t\t611398E0E68366F20ADC93BC5D04C7B0 /* TouchEvent.h */,\n\t\t\t\t98BB183E94BA72BD56983DB14089B952 /* TouchEventEmitter.cpp */,\n\t\t\t\t359747BC6AC4881D3081F8B6AA532321 /* TouchEventEmitter.h */,\n\t\t\t\tF03D40C105C0F07D9C18AE34F3B494A0 /* ViewComponentDescriptor.h */,\n\t\t\t\tE55A5082F7AD7430141AC089256155B4 /* ViewEventEmitter.h */,\n\t\t\t\tA21CEC9ACA2547F2173B743914CC6A16 /* ViewProps.h */,\n\t\t\t\t1DEAC3AED56C9C3D215091D714CEC25C /* ViewPropsInterpolation.h */,\n\t\t\t\t9146BC2894F3FC7F11EDB10CB1B6B9B3 /* ViewShadowNode.cpp */,\n\t\t\t\t318D26E55C7F26B32EFB91A5243FBAF8 /* ViewShadowNode.h */,\n\t\t\t\t652305363535478E0661CB82413687EB /* YogaLayoutableShadowNode.cpp */,\n\t\t\t\tDA3B2DE0E7759775141A6DD8F1ACA6DE /* YogaLayoutableShadowNode.h */,\n\t\t\t\t9C99F752EEC9741F33EED362076074BF /* YogaStylableProps.cpp */,\n\t\t\t\t27F831318E526AEB0F7F8A65C1891EC5 /* YogaStylableProps.h */,\n\t\t\t\t1004681C3BDF8E5CFC5D030CE39D0CA7 /* platform */,\n\t\t\t);\n\t\t\tname = view;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4A43E51CD514F13C00201889AD651875 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t003FB8B8AF1CBB8E2E7A70E7564183A5 /* React-cxxreact-dummy.m */,\n\t\t\t\t7E7B0E688C2DE7016DCA160FE81176F4 /* React-cxxreact-prefix.pch */,\n\t\t\t\t50CCFCC93BE3FD24C09BEB499BEACA7B /* React-cxxreact.debug.xcconfig */,\n\t\t\t\t292CA568BD4ABB3A490EAADD2CA64FB7 /* React-cxxreact.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../native/iosTest/Pods/Target Support Files/React-cxxreact\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4A46F00ADE41243FF50380AFC2AD40BC /* Drivers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t109F9C2934C9D047C914A988E8DFBBA6 /* RCTAnimationDriver.h */,\n\t\t\t\tA956484ABC9353D13F5C213DFF6F76A7 /* RCTDecayAnimation.h */,\n\t\t\t\tCF04A0BE220BED59F7AEB367A64FB457 /* RCTEventAnimation.h */,\n\t\t\t\t33FBAF4A2C505DEA7624E5FE6146C7CB /* RCTFrameAnimation.h */,\n\t\t\t\t9113D58420F951D0F8E7D507C99E9190 /* RCTSpringAnimation.h */,\n\t\t\t);\n\t\t\tname = Drivers;\n\t\t\tpath = Libraries/NativeAnimation/Drivers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4A72E17EC61A8CF846383874B37BEF14 /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t026CCB0609AA0FC063D3220DE6C274D7 /* React-featureflags.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4AE2119A369C0BB17CA29AD269CB3D64 /* DevSupport */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t2E393EBD7601FECABA80E94DF2D8935A /* DevSupport */,\n\t\t\t\t50938A0B44C0ACC4CD43F21867DDB78D /* Inspector */,\n\t\t\t);\n\t\t\tname = DevSupport;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4AFD33C580B9C27DFC196AD23BFED6E7 /* nativeviewconfig */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t906C0BC7CCCBAF7E35B934CFD17FC44F /* LegacyUIManagerConstantsProviderBinding.cpp */,\n\t\t\t\t090C56DE791731685F76F2010E681C1E /* LegacyUIManagerConstantsProviderBinding.h */,\n\t\t\t);\n\t\t\tname = nativeviewconfig;\n\t\t\tpath = nativeviewconfig;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4B0961F3A4B3DB15F23AB072C78ED8F0 /* objc */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tFEBC85A59D1771FEE07769D206EDEC9B /* WMDatabase.h */,\n\t\t\t\t598C51078F81B88ECED26E0192A48207 /* WMDatabase.m */,\n\t\t\t\tC5B6D34CEC3C6CE2295EEDA15E8B7DD0 /* WMDatabaseBridge.h */,\n\t\t\t\tFB687C9F11521E5B9F74197C09608F8E /* WMDatabaseBridge.m */,\n\t\t\t\t54CED87C8170B13841D92A0113192459 /* WMDatabaseDriver.h */,\n\t\t\t\t635016B0AE2DF86EDCC11EB4FBB41D5F /* WMDatabaseDriver.m */,\n\t\t\t);\n\t\t\tname = objc;\n\t\t\tpath = objc;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4C0D529CCAF0EF5D539488BECEBA799A /* uimanager */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t33A82E15C4F5EEC134A1C086B421B62D /* bindingUtils.cpp */,\n\t\t\t\t3AD266EFC19E97B68AB736B2DFAE934E /* bindingUtils.h */,\n\t\t\t\tF481D215714FD018CDA8C79540DDC6A8 /* LayoutAnimationStatusDelegate.h */,\n\t\t\t\tF0A85939544D109BFA4572C401B51D9E /* PointerEventsProcessor.cpp */,\n\t\t\t\tD11BE31D2BF618CFBCC52352A6567B70 /* PointerEventsProcessor.h */,\n\t\t\t\t5A623EC312D3BCD944313E099426740F /* PointerHoverTracker.cpp */,\n\t\t\t\t9E177524AAB858045AD52E1FFD4C991A /* PointerHoverTracker.h */,\n\t\t\t\t4403122C16D5B003C8984E009EAF54F1 /* primitives.h */,\n\t\t\t\t3E71733432C7AC618E5FB1B2C20C71F3 /* SurfaceRegistryBinding.cpp */,\n\t\t\t\t6E3D2F20B2620B37412790BDD9F15C17 /* SurfaceRegistryBinding.h */,\n\t\t\t\t271F7075A09B7F53F77295612BE17BE8 /* UIManager.cpp */,\n\t\t\t\tAF94AB49F3DFCBD87BA7862CC44A3D1D /* UIManager.h */,\n\t\t\t\t46F5E5B9B1380E064D67E9508C78BACF /* UIManagerAnimationDelegate.h */,\n\t\t\t\tEF7790CCA0F33012360CF9BA24706CF9 /* UIManagerBinding.cpp */,\n\t\t\t\t79BC7FAFCA2807334B0B7E151993C6FC /* UIManagerBinding.h */,\n\t\t\t\t52271E0F8ED452014891F20BD4947CFF /* UIManagerCommitHook.h */,\n\t\t\t\t7EA35A760668D0586965F521A3B21B4B /* UIManagerDelegate.h */,\n\t\t\t\t0EBD024CC0AC3DC8897152BE3FB46E12 /* UIManagerMountHook.h */,\n\t\t\t);\n\t\t\tname = uimanager;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4C8E26DD5A220182F8DADC9AA1EBBCC9 /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t48D442CA49CE18D23E61AE09E67355CC /* React-jsinspector.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4D0B065A8B7D7FCE069E4C6DD9750305 /* UnimplementedComponent */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDB5A191A4D4CA731E31AFC8EA19625A2 /* RCTUnimplementedNativeComponentView.h */,\n\t\t\t\t431DEF836033B057B6067879CB291040 /* RCTUnimplementedNativeComponentView.mm */,\n\t\t\t);\n\t\t\tname = UnimplementedComponent;\n\t\t\tpath = UnimplementedComponent;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4D18290C9D502ECAFA6AEE43300F5595 /* components */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE435C56675DDB8A410B49F7C7073460A /* inputaccessory */,\n\t\t\t\t5C62B1ABD53ABDAE5DE8AD8244C28230 /* legacyviewmanagerinterop */,\n\t\t\t\tF917AFEA46CC0EA11BC6D81EB226EEDE /* modal */,\n\t\t\t\t9AAC841AE519DF450215AC7162CD860D /* rncore */,\n\t\t\t\t3129A0ADE4B97DD3998639F514893B94 /* root */,\n\t\t\t\tA87C7F8D00F0CBE2558C9FABDCE778F0 /* safeareaview */,\n\t\t\t\t14ED68B512C0D79F79479BB0C185ACCD /* scrollview */,\n\t\t\t\t7FD492DBED5762ED1C9C9342B5CDF8B1 /* text */,\n\t\t\t\t46E47A464150996BC8699D5B01DCF096 /* textinput */,\n\t\t\t\tFB52750D97B167EC630A39D38431B791 /* unimplementedview */,\n\t\t\t\t4938E202647DB9A33EF0A661516C90B1 /* view */,\n\t\t\t);\n\t\t\tname = components;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4D73D71DE4243AB0D6C3E31F81E31B26 /* LegacyViewManagerInterop */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t47BE5F90D494B6D74BB9880F6EBD0D1D /* RCTLegacyViewManagerInteropComponentView.h */,\n\t\t\t\tAC1A3A6597F7D2D59AD0CE67E1A09CD2 /* RCTLegacyViewManagerInteropComponentView.mm */,\n\t\t\t\t3DDD563C6ADBEC41164125E51B67EE77 /* RCTLegacyViewManagerInteropCoordinatorAdapter.h */,\n\t\t\t\t51CBEFF89517A9EE045E0A3F9D3939B5 /* RCTLegacyViewManagerInteropCoordinatorAdapter.mm */,\n\t\t\t);\n\t\t\tname = LegacyViewManagerInterop;\n\t\t\tpath = LegacyViewManagerInterop;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4DF42A7CD74B7436D63FF2AD52C1F94D /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC4BD888172BAA8E70F8568E61F2FAEC1 /* React-Core.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t50078C544CD6EBBBC85C62A86036987D /* Image */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t475E63C49DABE072747B2ACDE9DE0BA5 /* RCTImageComponentView.h */,\n\t\t\t\t012CC3CCEDDC11E02851DBC088F9B7A2 /* RCTImageComponentView.mm */,\n\t\t\t);\n\t\t\tname = Image;\n\t\t\tpath = Image;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t50938A0B44C0ACC4CD43F21867DDB78D /* Inspector */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6EEEE05EBCE258D71886371521451AF3 /* RCTCxxInspectorPackagerConnection.h */,\n\t\t\t\t53698A773FE28A1702762D414C8FD31B /* RCTCxxInspectorPackagerConnection.mm */,\n\t\t\t\tA6D5BA68A42EABFFF8C42BAFF6B32E74 /* RCTCxxInspectorPackagerConnectionDelegate.h */,\n\t\t\t\tB69DAF065EE01F48CB5FBAC10F00EDE0 /* RCTCxxInspectorPackagerConnectionDelegate.mm */,\n\t\t\t\t6B17F4F65DD01BD81E40664BAFB61F37 /* RCTCxxInspectorWebSocketAdapter.h */,\n\t\t\t\t4BEF797D469DBDB850A55FFDD493B789 /* RCTCxxInspectorWebSocketAdapter.mm */,\n\t\t\t\t3D16D5EC0CC9F855658FDAD755B9B8F7 /* RCTInspector.h */,\n\t\t\t\t0349E57AC52849B1E2956F92F2F74D82 /* RCTInspector.mm */,\n\t\t\t\t3F5A0CA304F0EDE4723DD50DC013E5A9 /* RCTInspectorPackagerConnection.h */,\n\t\t\t\t3CAE7021D6D8066FCD1D39076F4A85C1 /* RCTInspectorPackagerConnection.m */,\n\t\t\t);\n\t\t\tname = Inspector;\n\t\t\tpath = React/Inspector;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t50AA27881D34215F513B67E035DBFD23 /* RefreshControl */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t88FE98CEA078C7FBF78F8FA3A02093CE /* RCTRefreshableProtocol.h */,\n\t\t\t\tCD16933416FD2EC375DDCB34E3995C89 /* RCTRefreshControl.h */,\n\t\t\t\t45C6CA880F0AD8CC31C1BF775228C3EF /* RCTRefreshControl.m */,\n\t\t\t\t0DE9029B11C02C40098A6D686789D830 /* RCTRefreshControlManager.h */,\n\t\t\t\tF14EDE5F666391049AE8B82BFE391E88 /* RCTRefreshControlManager.m */,\n\t\t\t);\n\t\t\tname = RefreshControl;\n\t\t\tpath = RefreshControl;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5158E56B11AEB46872C78D81B8155431 /* React-RCTSettings */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0696F27878C985C7F2D9DBBD0BA700E5 /* RCTSettingsManager.mm */,\n\t\t\t\tE0839F609F20832C1729CED5ADCA18C9 /* RCTSettingsPlugins.mm */,\n\t\t\t\tEA57B66692E93B0A9A9E960BC4CEA037 /* Pod */,\n\t\t\t\tA22A03BA16F7B58F55DB6463E7E394B5 /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-RCTSettings\";\n\t\t\tpath = \"../../../node_modules/react-native/Libraries/Settings\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t52E675060B115456C9D0AA1A71754FD7 /* React-perflogger */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE0264569A1DCA41D8267A2DEC02B3043 /* BridgeNativeModulePerfLogger.cpp */,\n\t\t\t\t76B9170886E7F923EC5E35A34EEF7A2E /* BridgeNativeModulePerfLogger.h */,\n\t\t\t\t6BE67D2E5B439024289DCAE23AB7DFE4 /* NativeModulePerfLogger.h */,\n\t\t\t\t125A31DA6044B0FE2A4D78722470D750 /* Pod */,\n\t\t\t\t41853CCBEA5A920B81E37C320F0F8879 /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-perflogger\";\n\t\t\tpath = \"../../../node_modules/react-native/ReactCommon/reactperflogger\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5328E121AABC026DD9242F9F14882F7E /* cxx */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t335F15F96FB0EFA61B990DBD29902F91 /* react */,\n\t\t\t);\n\t\t\tname = cxx;\n\t\t\tpath = cxx;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5544F7F93E3DBA9D61074A44C08FBD0D /* Drivers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t224F3D752D59D26136CB03C3D3C240F2 /* RCTDecayAnimation.mm */,\n\t\t\t\t404C04FF5A5FFA2678597943F9B2C076 /* RCTEventAnimation.mm */,\n\t\t\t\tCADAFD82F38E6E1F5955E921DD980A8C /* RCTFrameAnimation.mm */,\n\t\t\t\t513728BBF69F10E478D203C24AE89494 /* RCTSpringAnimation.mm */,\n\t\t\t);\n\t\t\tname = Drivers;\n\t\t\tpath = Drivers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t554A823B3048F7FBB354B61BE1133044 /* React-callinvoker */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD401F70F6554582A86F6BB451C06116B /* CallInvoker.h */,\n\t\t\t\t6456B7E29C4C1FE96FE03B584C20AFD9 /* SchedulerPriority.h */,\n\t\t\t\t6AB929BEE45DFCB38D7F2F05B4D304CB /* Pod */,\n\t\t\t\t2E832F8BE4BE501B7593972F10AC5390 /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-callinvoker\";\n\t\t\tpath = \"../../../node_modules/react-native/ReactCommon/callinvoker\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t56DE0F982CAB753A2F9DD43EF2A3DE6B /* React-jsi */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tCC3E8F86C7DCFECB3326885EC3BF91AF /* decorator.h */,\n\t\t\t\tB87758E567704381060EF12FB7B025AB /* instrumentation.h */,\n\t\t\t\t469194BAB9EE78B8BC1A3877E5EB169C /* jsi.h */,\n\t\t\t\t9D24D1273C6645B9F73FB2F6C0A44A1D /* jsi-inl.h */,\n\t\t\t\t8E06A966DFD16239C4A4825D8200F89D /* JSIDynamic.cpp */,\n\t\t\t\t6FC40232E2C55EB617E3DFB087BA95C0 /* JSIDynamic.h */,\n\t\t\t\t1B6371A9E6D76C16AD518CC288F335F4 /* jsilib.h */,\n\t\t\t\t16E3111070B2202E4E59A2EB4AAF55A9 /* threadsafe.h */,\n\t\t\t\t7958B8E6307DE7DCD2B8642BC29FE308 /* Pod */,\n\t\t\t\t9BAD9866097E10B1FDB703D4D0A97D5A /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-jsi\";\n\t\t\tpath = \"../../../node_modules/react-native/ReactCommon/jsi\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t58BE57C789F8C8396E4F9C36CEA1E3B1 /* view */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tCB960EC9C47A40C34C5B59FF58A14FCF /* HostPlatformTouch.h */,\n\t\t\t\t7C95BBE34A199CF72BBFBFC172AC6E71 /* HostPlatformViewEventEmitter.h */,\n\t\t\t\t0E432DBE0F06DDCE804C5D453ED121C3 /* HostPlatformViewProps.h */,\n\t\t\t\t2A64B900827AD880DCA0F0CDC3BDA727 /* HostPlatformViewTraitsInitializer.h */,\n\t\t\t);\n\t\t\tname = view;\n\t\t\tpath = view;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t58CA7196E8751E8894DE84A24929D757 /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tCC0F7AC9D01EB889E5370F93AB275754 /* React-jserrorhandler.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t59347770634A6137053C514350BED8BC /* RCTNetworkHeaders */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t544A0D0CF86148CB2EF0B78039179444 /* RCTDataRequestHandler.h */,\n\t\t\t\tBDC9CA0EA4B12AEE132FF43037AE8E00 /* RCTFileRequestHandler.h */,\n\t\t\t\t23DDF8148799041A2BF94450407CEBD2 /* RCTHTTPRequestHandler.h */,\n\t\t\t\t9F4B2863206A2795EDD2B67B16FAC91C /* RCTNetworking.h */,\n\t\t\t\t3B80393CC9C72D221195616E0DA5B67F /* RCTNetworkPlugins.h */,\n\t\t\t\t91DEEA05C7FC3B3FE85F51D16F0060A1 /* RCTNetworkTask.h */,\n\t\t\t);\n\t\t\tname = RCTNetworkHeaders;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5A4DFC42D5801C6801825A9C1CAD37A6 /* BaseText */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tCC013CC571FE4BC5DEEFD2D0D37B0093 /* RCTBaseTextShadowView.mm */,\n\t\t\t\tE13EF6E51F9F10FBD304A4FADDBB25A8 /* RCTBaseTextViewManager.mm */,\n\t\t\t);\n\t\t\tname = BaseText;\n\t\t\tpath = BaseText;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5A762D82420F4B4EB73CBB7A080CFF38 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t76A1CBFC82E23FC317730FE377F95CCB /* React-RuntimeHermes-dummy.m */,\n\t\t\t\t203F90BE1C271A4963AF8779D2AA90AE /* React-RuntimeHermes-prefix.pch */,\n\t\t\t\tA07A822153FEC0A3E902A56BD0450957 /* React-RuntimeHermes.debug.xcconfig */,\n\t\t\t\t4DE72A397551E705994E98D86904430A /* React-RuntimeHermes.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../../native/iosTest/Pods/Target Support Files/React-RuntimeHermes\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5BDBB35F633567D3A31E12423AD9197B /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0585010DB2257C8B62F3B1BE51449BDA /* SocketRocket-dummy.m */,\n\t\t\t\tBCE80CF8B841672C3A200AF86984A1ED /* SocketRocket-prefix.pch */,\n\t\t\t\tF923F037E88C68DA2463BCD75AA9ED60 /* SocketRocket.debug.xcconfig */,\n\t\t\t\tE8A93054841794EAD58EB675761B8905 /* SocketRocket.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../Target Support Files/SocketRocket\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5C62B1ABD53ABDAE5DE8AD8244C28230 /* legacyviewmanagerinterop */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1FD672FEBEC49B42EEBB59B54F5CD143 /* LegacyViewManagerInteropComponentDescriptor.h */,\n\t\t\t\tCAAD19E5409FDE0BA4AE1A1A0483BA00 /* LegacyViewManagerInteropComponentDescriptor.mm */,\n\t\t\t\tF7FB105B5F150706FC7A1068544C1C16 /* LegacyViewManagerInteropShadowNode.cpp */,\n\t\t\t\t2ED447FF7E9E303F98B593502FAA8151 /* LegacyViewManagerInteropShadowNode.h */,\n\t\t\t\t2B7A860D2229C54CBF112DD02B57C926 /* LegacyViewManagerInteropState.h */,\n\t\t\t\t05DBC9C72F0FBD718ED0DED3984CE795 /* LegacyViewManagerInteropState.mm */,\n\t\t\t\t938D7993FE352F22F90BB01751E733E9 /* LegacyViewManagerInteropViewEventEmitter.cpp */,\n\t\t\t\tDDEC6CF7899D39C510AF9B96223825C0 /* LegacyViewManagerInteropViewEventEmitter.h */,\n\t\t\t\t61A6746F63145AAB8BD430D845B4B7F6 /* LegacyViewManagerInteropViewProps.cpp */,\n\t\t\t\t0D7CB8AC94086CDE9ABBF0A55442AE9F /* LegacyViewManagerInteropViewProps.h */,\n\t\t\t\t32DC15B6A3F5954F7FA2FF42937538A5 /* RCTLegacyViewManagerInteropCoordinator.h */,\n\t\t\t\t77FD8EC2BDFA965A8B3238C611476897 /* RCTLegacyViewManagerInteropCoordinator.mm */,\n\t\t\t\tC638A35CBFBC692CA7A2C5870600E066 /* UnstableLegacyViewManagerAutomaticComponentDescriptor.cpp */,\n\t\t\t\t32E0BB05F9F652F49EAE1D3EE8E0714E /* UnstableLegacyViewManagerAutomaticComponentDescriptor.h */,\n\t\t\t\t18B4341AA7547FF0A90E6BC28D6C448F /* UnstableLegacyViewManagerAutomaticShadowNode.cpp */,\n\t\t\t\tEDB46ABA9CC235068ECA4A848DB17EE8 /* UnstableLegacyViewManagerAutomaticShadowNode.h */,\n\t\t\t\t3312F4682C3B648C87FBD7755CC0CE73 /* UnstableLegacyViewManagerInteropComponentDescriptor.h */,\n\t\t\t);\n\t\t\tname = legacyviewmanagerinterop;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5C6B0CD72E8A9F5C6D91CAD1C829C7D8 /* Development Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t90652DF1414B43CD8ACBE42D8DBC5012 /* FBLazyVector */,\n\t\t\t\t9E4AB614B7BB9122869BB5B29BA374DF /* RCTDeprecation */,\n\t\t\t\t489760B7755233A63757DE6C008D9DF1 /* RCTRequired */,\n\t\t\t\t330759EDD479CCC913161F05B0849526 /* RCTTypeSafety */,\n\t\t\t\t27B37E6E4590A097086761DD10791464 /* React */,\n\t\t\t\t554A823B3048F7FBB354B61BE1133044 /* React-callinvoker */,\n\t\t\t\t67978F3B8E4AE3641FDF6EE4F7550618 /* React-Codegen */,\n\t\t\t\t26F1C44700390E55DAC55AF9754E220A /* React-Core */,\n\t\t\t\tC9FCE5218763A0186A2053CC46F95127 /* React-CoreModules */,\n\t\t\t\tF15703C1AFFDB1BB579B720667358414 /* React-cxxreact */,\n\t\t\t\tF0E4C63621E9D8EECEF8366246B38675 /* React-debug */,\n\t\t\t\t0DA390F87BBAD21398DF554B46780A15 /* React-Fabric */,\n\t\t\t\t1CE3AF8F1B957A97D187C362FF34706E /* React-FabricImage */,\n\t\t\t\t0B9435B4A5935D54E7B928CADCAAAAC5 /* React-featureflags */,\n\t\t\t\t16A4234682C8931240E16166FA4BA7C0 /* React-graphics */,\n\t\t\t\t3BCBFC56764D4C25F88064F72398AA93 /* React-hermes */,\n\t\t\t\tEACCDFAE137CB6FCDBAA4DCD752C0EBD /* React-ImageManager */,\n\t\t\t\t7E05F7C425E3CCB8082C8310554F37F8 /* React-jserrorhandler */,\n\t\t\t\t56DE0F982CAB753A2F9DD43EF2A3DE6B /* React-jsi */,\n\t\t\t\tEB2153CF68A1D5871553D3223D7F5456 /* React-jsiexecutor */,\n\t\t\t\t278FF3C375817348A07F1B5488D1F7FF /* React-jsinspector */,\n\t\t\t\tBAC1F5670DD858B1236132F8639008E3 /* React-jsitracing */,\n\t\t\t\tEC087B89F1F6A6A61F86EA18064B2411 /* React-logger */,\n\t\t\t\tD0FE7326D90BDBB8817B58F84A343BD0 /* React-Mapbuffer */,\n\t\t\t\tA7C4FF2F75EF9D72AA55D62D1EEAE11B /* React-nativeconfig */,\n\t\t\t\t46BCFE61D7356DAFCE7CBB3B5D38D192 /* React-NativeModulesApple */,\n\t\t\t\t52E675060B115456C9D0AA1A71754FD7 /* React-perflogger */,\n\t\t\t\tE0A5B121D952F6317F2792EC9958D5E3 /* React-RCTActionSheet */,\n\t\t\t\t9D053F5F3BD82C77E402C42AC8FC9519 /* React-RCTAnimation */,\n\t\t\t\t71AB9505FE56A3AC3DF05BB98FA6F20A /* React-RCTAppDelegate */,\n\t\t\t\t69CE078C9E97757E19F00D341211784B /* React-RCTBlob */,\n\t\t\t\tF85781294F189F756291D8B95825B440 /* React-RCTFabric */,\n\t\t\t\t1B23A6C0F680568EB52BA9BD9526F9D2 /* React-RCTImage */,\n\t\t\t\t838544A1D1A3EC2F8C1F335A6B00984D /* React-RCTLinking */,\n\t\t\t\tC5B10AF863EC53C54719EC59F9CC650D /* React-RCTNetwork */,\n\t\t\t\t5158E56B11AEB46872C78D81B8155431 /* React-RCTSettings */,\n\t\t\t\tE70F21A12A20C6724851C6CD41B425A1 /* React-RCTText */,\n\t\t\t\tCF850A691E67115665F695CA710F2E18 /* React-RCTVibration */,\n\t\t\t\t223AE9EE0D318B68CA58A6D5E7A833FC /* React-rendererdebug */,\n\t\t\t\t089C4657A87D27FA4637D12E4F163527 /* React-rncore */,\n\t\t\t\t3B358CA7D370359AADC1873E8C9F0BA1 /* React-RuntimeApple */,\n\t\t\t\tD14FDBC87BCB72B38F032D1F010498A1 /* React-RuntimeCore */,\n\t\t\t\t3C7349976EA80B1057745E6654F5AB2A /* React-runtimeexecutor */,\n\t\t\t\tF54FF6B14BCA0B94B3F5524E725B995B /* React-RuntimeHermes */,\n\t\t\t\tE7362482BFF22AC30709A403B38CB2BE /* React-runtimescheduler */,\n\t\t\t\t0A60382252AE41051D04DE8A6098AEF1 /* React-utils */,\n\t\t\t\tA590DD0675D53682B1BC144B81586431 /* ReactCommon */,\n\t\t\t\t4883BEA3F82503FF01DCDA5AE443E6DD /* simdjson */,\n\t\t\t\t3CF4D8EF547899AF801588608FF767B4 /* WatermelonDB */,\n\t\t\t\t22298BAC557AC5B6503AABF5698863DB /* Yoga */,\n\t\t\t);\n\t\t\tname = \"Development Pods\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5D505B6D5764926B812EB062BBB9F48F /* SurfaceHostingView */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE22E7E12AEEE2122E9587F6CBE60EC1A /* RCTSurfaceHostingProxyRootView.h */,\n\t\t\t\tB5C07CBA21F57FACAAB67EAB0200D145 /* RCTSurfaceHostingProxyRootView.mm */,\n\t\t\t\t0CD4200922C77CCA406FFAC67124F437 /* RCTSurfaceHostingView.h */,\n\t\t\t\tDFB701655BF99400D13CDA6EFDCC1AC7 /* RCTSurfaceHostingView.mm */,\n\t\t\t\tCF40503F32A96F47168359F16F99FC55 /* RCTSurfaceSizeMeasureMode.h */,\n\t\t\t\t6D84B0A7F1A70E6E9ABEEEB14CB6C80C /* RCTSurfaceSizeMeasureMode.mm */,\n\t\t\t);\n\t\t\tname = SurfaceHostingView;\n\t\t\tpath = SurfaceHostingView;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5FE9DA05C0C0B80D78B3196B44520CCF /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5ED53EC43FC74FD8B1F3A1C21AF5D357 /* DoubleConversion.modulemap */,\n\t\t\t\tF852C98DD1BF5640292AF6AAF675EA58 /* DoubleConversion-dummy.m */,\n\t\t\t\t37CF653BFF872793202265BF76118EAA /* DoubleConversion-prefix.pch */,\n\t\t\t\tC32920036DAE3C20F1840181BC975BDA /* DoubleConversion-umbrella.h */,\n\t\t\t\t3EA47022B15AB1C45235DBA9B57DA776 /* DoubleConversion.debug.xcconfig */,\n\t\t\t\t1C9CA7D5550AD1D94A7AA763FBA17534 /* DoubleConversion.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../Target Support Files/DoubleConversion\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t608676613D8C48B8B9EA90C52743AB1E /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tBD916666DA53F0458FF557DC851A7FEA /* ReactCommon.modulemap */,\n\t\t\t\tFB10906EE52FB99A63183406F2DFD2AC /* ReactCommon-dummy.m */,\n\t\t\t\t0810AA4CE6F716164879BBA08BF3EDCC /* ReactCommon-prefix.pch */,\n\t\t\t\tE7531C53649FE630D622444E87454709 /* ReactCommon-umbrella.h */,\n\t\t\t\t106A05F0520EFBA0E22815812BDA18F5 /* ReactCommon.debug.xcconfig */,\n\t\t\t\tB49E927D98F0202C6C5CD21E1077E16E /* ReactCommon.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../native/iosTest/Pods/Target Support Files/ReactCommon\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t612A411D79E5AC1A20ABFAED89F0EAA7 /* componentregistry */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF5F74E1220FBDEDB27401F3F98612EC8 /* ComponentDescriptorFactory.h */,\n\t\t\t\t7761A07D372FD8689FEED3327D1DA8FD /* ComponentDescriptorProvider.h */,\n\t\t\t\t081F794580583CC4DFEB6D2CF2DF3D3D /* ComponentDescriptorProviderRegistry.cpp */,\n\t\t\t\t6BB02A1AFF68DB9D0E2B844F9E1E8A2F /* ComponentDescriptorProviderRegistry.h */,\n\t\t\t\t64B98B991654E98484D4253805E17035 /* ComponentDescriptorRegistry.cpp */,\n\t\t\t\t62321BBFBF2E8E88A946FF1C2655F069 /* ComponentDescriptorRegistry.h */,\n\t\t\t\tD4B7F151F4E0EB1DCE46AA538CDA20CE /* componentNameByReactViewName.cpp */,\n\t\t\t\tF0DF8AFAE1CBEF65355E92467584E4A5 /* componentNameByReactViewName.h */,\n\t\t\t);\n\t\t\tname = componentregistry;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t642E80121214548255F3E44A3D10908F /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t07319E2772F29181135D234449AFFC14 /* React-featureflags.modulemap */,\n\t\t\t\tE390D39B5438A34CB65883263516478C /* React-featureflags-dummy.m */,\n\t\t\t\tF17EBB71C3E56527394A1105831F5DF5 /* React-featureflags-prefix.pch */,\n\t\t\t\tE8BF57389A0D82185746D63D05645956 /* React-featureflags-umbrella.h */,\n\t\t\t\t0AB45FDFADEB5035DFD513D71DB737DC /* React-featureflags.debug.xcconfig */,\n\t\t\t\tE2F009051F05B8597141D79A5583D4FF /* React-featureflags.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../../native/iosTest/Pods/Target Support Files/React-featureflags\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t64397211A15E56518F29A27220C51336 /* animations */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t289BDFFAEE5965ED8E6B54755E485A66 /* conversions.h */,\n\t\t\t\t20D52A5CA3FEAAB624DD5FABD5F70EF4 /* LayoutAnimationCallbackWrapper.h */,\n\t\t\t\t90666F35881E0B6CF16A7F6D502820C6 /* LayoutAnimationDriver.cpp */,\n\t\t\t\t860A6C48F7BFB2F514BB891173FD0D7E /* LayoutAnimationDriver.h */,\n\t\t\t\tF60384F886271F9FE990A1E05F65D620 /* LayoutAnimationKeyFrameManager.cpp */,\n\t\t\t\tBA7531AA0EDD6697C7D87500F8EFA087 /* LayoutAnimationKeyFrameManager.h */,\n\t\t\t\tEA92D2D183344B3DA53FE9FC7B307DE6 /* primitives.h */,\n\t\t\t\t73058D524065BD36521A8D2FAA24552A /* utils.cpp */,\n\t\t\t\tA4D384B56D16CD122C5BFFBD16EFEF46 /* utils.h */,\n\t\t\t);\n\t\t\tname = animations;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t64518A8E0CF4473016570A6879346C64 /* Default */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t83D688BAE219AEF357904BE257AF956C /* Base */,\n\t\t\t\t6E2900619FB10AC33BB49D8B6889281F /* CxxBridge */,\n\t\t\t\t77A10B0843654F2C18695FF6C01CF2BC /* CxxLogUtils */,\n\t\t\t\tFA5D227825AB5923FACC474B9DB3F384 /* CxxModule */,\n\t\t\t\tC62706AD1BF7CA5DF853101FF69F904A /* CxxUtils */,\n\t\t\t\tE154B3C37FBBBA22F41876AC4AFD874F /* I18n */,\n\t\t\t\tB511BCC300594DF84D6CFDF2B8F5EC1B /* Modules */,\n\t\t\t\tC491125B0694A5263BA6D6B79B51B471 /* Profiler */,\n\t\t\t\tFC37D3F31B7D90CFC347522DC090973D /* UIUtils */,\n\t\t\t\t23EF42F33260F492F0E1CA6A966BC672 /* Views */,\n\t\t\t);\n\t\t\tname = Default;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t66248CFBB63ACD60DC5ECBA522E1FCB0 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t56B4C070CA7B93A1F321D02E003223BA /* glog.modulemap */,\n\t\t\t\tD886821B444D6CB88E03807915CB1608 /* glog-dummy.m */,\n\t\t\t\t79F230CA43B3923BA705770F29C504C6 /* glog-prefix.pch */,\n\t\t\t\t459822FB423F933D32F755CA3A5D55CC /* glog-umbrella.h */,\n\t\t\t\t0146BE1DD8D87E794B0CFD58725CC02C /* glog.debug.xcconfig */,\n\t\t\t\t6CD702447664E9814FDF64C2521FE0A8 /* glog.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../Target Support Files/glog\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t67978F3B8E4AE3641FDF6EE4F7550618 /* React-Codegen */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3F8788C15B11DF4D16CE2A85BE243AA0 /* FBReactNativeSpecJSI.h */,\n\t\t\t\t4AE459B4FB63DF08755386C3B4D759D8 /* FBReactNativeSpecJSI-generated.cpp */,\n\t\t\t\t033B1F5C19B781492F29A47DA4EFD3A4 /* RCTModulesConformingToProtocolsProvider.h */,\n\t\t\t\tB286D2E443FD0AC7BDE2FA335AE099A9 /* RCTModulesConformingToProtocolsProvider.mm */,\n\t\t\t\t3A89BBF10BF4CF5D3C418A38D668F587 /* FBReactNativeSpec */,\n\t\t\t\t1A91472BD47D8A01B2F79E1D3BF3F435 /* Pod */,\n\t\t\t\t2202615F216E42653F37977999D037B5 /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-Codegen\";\n\t\t\tpath = ../build/generated/ios;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6824F05EE4AE2E8974BD71AAFD1A6F32 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC08BAC1C65562A0491860C45DF8E309A /* React-ImageManager.modulemap */,\n\t\t\t\tBDED2FDDA75EFFC4F049DF04CA2B0B69 /* React-ImageManager-dummy.m */,\n\t\t\t\tBD845FCB6E8D03B954E98CC67262C224 /* React-ImageManager-prefix.pch */,\n\t\t\t\t75BD04A47CB6E45D70FC6CC41F55E9D0 /* React-ImageManager-umbrella.h */,\n\t\t\t\tBEC2935F7CAC9628D23D98B726129B8A /* React-ImageManager.debug.xcconfig */,\n\t\t\t\t047508626E4450B1D2FB80B3358F97F6 /* React-ImageManager.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../../../../../native/iosTest/Pods/Target Support Files/React-ImageManager\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t684A99A16D90DD769294066B2A21E529 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA7C3FA3DEC4092F63BB39E1F2566D4BC /* React-runtimeexecutor.debug.xcconfig */,\n\t\t\t\t99E222D0C7D14CFBD1BC586704C58A9D /* React-runtimeexecutor.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../native/iosTest/Pods/Target Support Files/React-runtimeexecutor\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6907CB3169BA7804C5F4E250B8FC6C8D /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9833AD993B14B7CEE86ECA66FA7A7B7A /* React-RCTAppDelegate.modulemap */,\n\t\t\t\tD958FC3ECB59DEF56F7A316CFF3FE5E5 /* React-RCTAppDelegate-dummy.m */,\n\t\t\t\tE38250C1621C85BBCC9EA54DCC289145 /* React-RCTAppDelegate-prefix.pch */,\n\t\t\t\t401A553AA0753FF3548A286F009A8820 /* React-RCTAppDelegate-umbrella.h */,\n\t\t\t\t902581D4E30B461C86B20B03CC2F5AA6 /* React-RCTAppDelegate.debug.xcconfig */,\n\t\t\t\t9F03A2E19DD75677633924F1B93787D1 /* React-RCTAppDelegate.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../native/iosTest/Pods/Target Support Files/React-RCTAppDelegate\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6982589FDD1F93DB24C77311374EE474 /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t50DAB08AF16996E1B2836D9927C3D32A /* React-RCTImage.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t69CE078C9E97757E19F00D341211784B /* React-RCTBlob */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tFBC79A9C5A60A939EF7BBEFBE8449906 /* RCTBlobCollector.h */,\n\t\t\t\tCC14D6144DA3CBC86D616E08D6D726E8 /* RCTBlobCollector.mm */,\n\t\t\t\t1371AFE6C3E17A03757544B99B0C563C /* RCTBlobManager.mm */,\n\t\t\t\t1EB0389666D3316FBF79F7AA176DAC97 /* RCTBlobPlugins.h */,\n\t\t\t\t925A2297E6EEF7197A415C4C41AE8027 /* RCTBlobPlugins.mm */,\n\t\t\t\tC059BACE08D3A4EC8B1895D76B07DFE6 /* RCTFileReaderModule.mm */,\n\t\t\t\t48538C2EC79AB2B8D68E01A0404F681C /* Pod */,\n\t\t\t\tF9CB7550FD5E52C38F904E2F2BA99527 /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-RCTBlob\";\n\t\t\tpath = \"../../../node_modules/react-native/Libraries/Blob\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6AB929BEE45DFCB38D7F2F05B4D304CB /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t69063AD95BA07DF28A18417CF3A1B53C /* React-callinvoker.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6BE57199DB090FF99258CF386E542C42 /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t2AF4509521B4076AA29D6287EFE1BE14 /* React-CoreModules.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6C85D2BBAE96BC15F85AA68CEEA5FD5A /* ActivityIndicator */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t21E277EB0A609214CBB931D344238A64 /* RCTActivityIndicatorViewComponentView.h */,\n\t\t\t\t7B1A1BCA9AF04E480CF3A0F15DC4277A /* RCTActivityIndicatorViewComponentView.mm */,\n\t\t\t);\n\t\t\tname = ActivityIndicator;\n\t\t\tpath = ActivityIndicator;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6CA7A5B3A37A3BD4C4189F7FB0462212 /* RCTWebSocket */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAEB455EDDB077C84F1FFD562DFFBA54E /* RCTReconnectingWebSocket.h */,\n\t\t\t\tA7E2525A0E66EF3136FD4342856314BC /* RCTReconnectingWebSocket.m */,\n\t\t\t);\n\t\t\tname = RCTWebSocket;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6CAF12F826A453EF88B2F103280D6381 /* CoreModulesHeaders */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF40DA4337071C6A25D759BAE9D00C90A /* CoreModulesPlugins.h */,\n\t\t\t\t98D0A9133BF9CECCDCD33D1F4C38B4C8 /* RCTAccessibilityManager.h */,\n\t\t\t\t8D7C4A3E62FB0FF7DF9D127631B944B1 /* RCTAccessibilityManager+Internal.h */,\n\t\t\t\tFFD4B861CCFBFBB3B9059A2DCEDE8D24 /* RCTActionSheetManager.h */,\n\t\t\t\t3B0D676D74E69A0350EF5A4FE2794335 /* RCTAlertController.h */,\n\t\t\t\t59FDF98892BF9744DCB3D5402C366923 /* RCTAlertManager.h */,\n\t\t\t\t13A658922FD40E29EEAB7D23E4D3A2BD /* RCTAppearance.h */,\n\t\t\t\tE3A3132932FB8BCA22D8C2EB34C0BA27 /* RCTAppState.h */,\n\t\t\t\t890F493171D8B37E354419CA6A05C95A /* RCTClipboard.h */,\n\t\t\t\tE253CA8AF57F182CDA110861DF421A77 /* RCTDeviceInfo.h */,\n\t\t\t\t93C1BA5C7F7A59628950008F9375BF82 /* RCTDevLoadingView.h */,\n\t\t\t\tEDBAAC4C0FEDEB6F19329DEE85E71512 /* RCTDevMenu.h */,\n\t\t\t\t7BE42F9FEE2CC91F9B2D0CD06DCFA3B4 /* RCTDevSettings.h */,\n\t\t\t\t4059CB54B248E9CAF8D2648832EF03C3 /* RCTEventDispatcher.h */,\n\t\t\t\tD078B11D9117F5852F1C821A0DD6E65E /* RCTExceptionsManager.h */,\n\t\t\t\t5732AA2AC0D6C97862F2E84E6A43D27D /* RCTFPSGraph.h */,\n\t\t\t\t5EA1F0E80816FE3C537ADE1BE9E97082 /* RCTI18nManager.h */,\n\t\t\t\t840FA9BF8D964570C73D3D561CF489CE /* RCTKeyboardObserver.h */,\n\t\t\t\tE570952D2C710A3EC6A39040970B220E /* RCTLogBox.h */,\n\t\t\t\t6A49FC170B2F422E9973F529DFC94316 /* RCTLogBoxView.h */,\n\t\t\t\tC60F31851CF169CE81AA452AA4663164 /* RCTPlatform.h */,\n\t\t\t\tAAB226E4AB2DF48BAF6AC83AC49AC1CD /* RCTRedBox.h */,\n\t\t\t\t08A72E0FF2CF1B17D479A7069A5C1123 /* RCTSourceCode.h */,\n\t\t\t\tA53C026A38554E36070D5FF7477DE9BD /* RCTStatusBarManager.h */,\n\t\t\t\tA7FEE6ECF7F217445EBD97C857669637 /* RCTTiming.h */,\n\t\t\t\t2EC34A00D8B5E0E79B1DFEF7D2D5651B /* RCTWebSocketExecutor.h */,\n\t\t\t\t15E1BE174AEA123290CA37B86EFDD5F2 /* RCTWebSocketModule.h */,\n\t\t\t);\n\t\t\tname = CoreModulesHeaders;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6DBE07C15CE88F4964445119637334D7 /* react */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD4EBE8B064BC082A240389166A5EC4F8 /* renderer */,\n\t\t\t);\n\t\t\tname = react;\n\t\t\tpath = react;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6DC4EAB150C72B78EF2BB14B3D927D2C /* ios */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t85FCE44197BB47E90228E37F0C177F77 /* react */,\n\t\t\t);\n\t\t\tname = ios;\n\t\t\tpath = ios;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6E2900619FB10AC33BB49D8B6889281F /* CxxBridge */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF278184653BF83F13E9A2484D2F4F8C1 /* NSDataBigString.h */,\n\t\t\t\t6D624E232F1781DF596D0A786D21944C /* NSDataBigString.mm */,\n\t\t\t\tDC46EBB3ED4F2E3ADA6C2752DF776F59 /* RCTCxxBridge.mm */,\n\t\t\t\tF07D525DF93C69AEC8946C90CEB695C1 /* RCTCxxBridgeDelegate.h */,\n\t\t\t\tAA29C6591A2E715C33B132EAC7AF7008 /* RCTJSIExecutorRuntimeInstaller.h */,\n\t\t\t\t79FC786FA7244B7B38C8D7E7D63FD675 /* RCTJSIExecutorRuntimeInstaller.mm */,\n\t\t\t\t2C795DB945B2C3AA8C9DB7C2065D7C38 /* RCTMessageThread.h */,\n\t\t\t\t78B7DDD1D6B4E8239B45FF43C990D36E /* RCTMessageThread.mm */,\n\t\t\t\t96C45D3F8919F8B19727DA09E333BFE6 /* RCTObjcExecutor.h */,\n\t\t\t\t7BB5D02B327460A7F87EA512F38B2123 /* RCTObjcExecutor.mm */,\n\t\t\t);\n\t\t\tname = CxxBridge;\n\t\t\tpath = React/CxxBridge;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6E7AFD21AE89FB328A42BE75A736DBEE /* core */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE99066C5DDF65197FF753C23E54313CC /* CallbackWrapper.h */,\n\t\t\t\t3BD8588452A16BCC311A2F90E96B104A /* CxxTurboModuleUtils.cpp */,\n\t\t\t\t13EBFD759F626BF0B8380604322D2E84 /* CxxTurboModuleUtils.h */,\n\t\t\t\t6ACCDC510D9A68B13F2A48E358E2BE26 /* LongLivedObject.h */,\n\t\t\t\t2993AE002A77BF7B39AAE55DB661DD31 /* TurboCxxModule.cpp */,\n\t\t\t\tE6AF50262FD901B97155797FE9CCADC0 /* TurboCxxModule.h */,\n\t\t\t\tAF9D4809815C39CA6793B26579FDDA54 /* TurboModule.cpp */,\n\t\t\t\t3D4E8D2C968BF398ABDE0E66D90AA405 /* TurboModule.h */,\n\t\t\t\tFD2B5192F4D25A120B9FBA56082E1498 /* TurboModuleBinding.cpp */,\n\t\t\t\tDAA88CD24C578A8D699BEE467905F247 /* TurboModuleBinding.h */,\n\t\t\t\t522819EFAF89C9070CB50445ACD48721 /* TurboModulePerfLogger.cpp */,\n\t\t\t\t8A858627701B92C8E35A54D44F1CDF1B /* TurboModulePerfLogger.h */,\n\t\t\t\tED0263B5DB4AF04BF5391CA51E3AE6F4 /* TurboModuleUtils.cpp */,\n\t\t\t\t75F4E00A45E47775648B3C5AE641D5F7 /* TurboModuleUtils.h */,\n\t\t\t);\n\t\t\tname = core;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6ED0E8A627772310985098275F934F04 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6FFB7B2992BB53405E6B771A5BA1E97D /* DoubleConversion */,\n\t\t\t\tF4BDA69E3BCB0166D49FB679ABADCA00 /* fmt */,\n\t\t\t\t3CA7A9404CCDD6BA22C97F8348CE3209 /* glog */,\n\t\t\t\tD6A3CF2FDC9D571D60BAB0281B6FA1BD /* Pods-WatermelonTester */,\n\t\t\t\t66E1BAC6CC436F67ACD51B9211A14858 /* Pods-WatermelonTester-WatermelonTesterTests */,\n\t\t\t\t1936453FF2A7E3A13063C4917C4D5598 /* RCT-Folly */,\n\t\t\t\t33EEBF1D210254B5452CE560F81C9D38 /* RCTDeprecation */,\n\t\t\t\tF958876A082BF810B342435CE3FB5AF6 /* RCTTypeSafety */,\n\t\t\t\tE7178FECB829C9576A3723658B07F087 /* React-Codegen */,\n\t\t\t\tBD71E2539823621820F84384064C253A /* React-Core */,\n\t\t\t\tE50E54D57E4CB3E0920119CF69AD9A2D /* React-Core-RCTI18nStrings */,\n\t\t\t\t6771D231F4C8C5976470A369C474B32E /* React-CoreModules */,\n\t\t\t\t37592FDAD45752511010F4B06AC57355 /* React-cxxreact */,\n\t\t\t\t6ED2C07E6AE77BBD9A6856E523EF6A06 /* React-debug */,\n\t\t\t\tDE73D8A5ECB254D9D3F8C36C8D201F89 /* React-Fabric */,\n\t\t\t\t61A80F68AE163B384B7D7A9E76B6046C /* React-FabricImage */,\n\t\t\t\t971F6C319DDD4BD078954A5EF77B5BA7 /* React-featureflags */,\n\t\t\t\t5AA54A19E2135E09B9C8C0767385FD3A /* React-graphics */,\n\t\t\t\tDAD8B71DF2DFCF15AAF98C06D37D5703 /* React-hermes */,\n\t\t\t\tCEA45A2349847B8CEAC9ABF565A04BD0 /* React-ImageManager */,\n\t\t\t\tC02EAF482D8B4DE45E3A58A25AE1FA91 /* React-jserrorhandler */,\n\t\t\t\tD9F334F2E90E3EE462FC4192AF5C03BD /* React-jsi */,\n\t\t\t\tF2E7C88DFCD460A4B46B913ADEB8A641 /* React-jsiexecutor */,\n\t\t\t\t2577F299FCB0A19824FE989BE77B8E8F /* React-jsinspector */,\n\t\t\t\tA5B49761F8D1EB12585DD45CAA2E489F /* React-logger */,\n\t\t\t\tC941106D9D54AE237C5110F5638389AC /* React-Mapbuffer */,\n\t\t\t\t60D5A56E763D6E7C4FBE797565062EEA /* React-nativeconfig */,\n\t\t\t\t1E649614D7644BF68C2F5D4CB3FBF8DC /* React-NativeModulesApple */,\n\t\t\t\t666E72807891C591E025A75410CD2A26 /* React-perflogger */,\n\t\t\t\tFE7B9294FF05AAFD1653E2104E10844A /* React-RCTAnimation */,\n\t\t\t\t39D0105B481E5FB78C661496BD63B8A5 /* React-RCTAppDelegate */,\n\t\t\t\tF71EBF73F354B475D465FF6DE9A66707 /* React-RCTBlob */,\n\t\t\t\tDA7ABB6DD8AEACED51D63B2C774E3A63 /* React-RCTFabric */,\n\t\t\t\tEEDBF403E8E0B3885E65C2741B536BC5 /* React-RCTImage */,\n\t\t\t\t802121F5B756ACBFDD6D08C36246DADD /* React-RCTLinking */,\n\t\t\t\tA68E5A9B69A3BA0FD52CAF7A354EC93B /* React-RCTNetwork */,\n\t\t\t\t269BE773C9482484B70949A40F4EA525 /* React-RCTSettings */,\n\t\t\t\tE6A16705C69FC7DE11C2469A4A0F8358 /* React-RCTText */,\n\t\t\t\tC1A919103EAC9813D236486C34FC0A21 /* React-RCTVibration */,\n\t\t\t\t1E04881EDF02715BD6AC2C6ED3FBB37E /* React-rendererdebug */,\n\t\t\t\t1381503C42FFF460E946860A32A6F981 /* React-RuntimeApple */,\n\t\t\t\tD22EED118A762A7D7BC88A4ADBB7026E /* React-RuntimeCore */,\n\t\t\t\t4F3E9C98444FA55E416B857143C48013 /* React-RuntimeHermes */,\n\t\t\t\tA67E85E5F06FDA406D3A1B378BDF0C5C /* React-runtimescheduler */,\n\t\t\t\tB7610E9FDE749C16C0B1CDAAF3B2DDC2 /* React-utils */,\n\t\t\t\tD5C775614AC76D44CECB6BE08B022F1F /* ReactCommon */,\n\t\t\t\tEB2EBC367DAD012021CB28C5D9106469 /* simdjson */,\n\t\t\t\t85A01882ED06DFEA2E0CE78BCDB204A7 /* SocketRocket */,\n\t\t\t\tB1BC0D650AD4A6CB2A62DB5D7C94556A /* WatermelonDB */,\n\t\t\t\t65D0A19C165FA1126B1360680FE6DB12 /* Yoga */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6FB5E78A1219A291FE853E265F906282 /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE6FCE774BCFCEC0A37C02233EE1A6DAF /* Yoga.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t71AB9505FE56A3AC3DF05BB98FA6F20A /* React-RCTAppDelegate */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0C2BC45457F7B7889204A04BE2584DDE /* RCTAppDelegate.h */,\n\t\t\t\tAAE64CF21F806223D54976C43C7CA94B /* RCTAppDelegate.mm */,\n\t\t\t\tBDC8FAF53DD63A22F83D735BBEC79C48 /* RCTAppDelegate+Protected.h */,\n\t\t\t\tA0E5972A9C9EBA5B3038586A11E0FCF5 /* RCTAppSetupUtils.h */,\n\t\t\t\t6FD6F1B6DC37EB6391F042FC9AC7E69F /* RCTAppSetupUtils.mm */,\n\t\t\t\tFCAE6D5FA62309B748866975B6AA85DC /* RCTRootViewFactory.h */,\n\t\t\t\tD3CD42FBDC4A9051EBFC9BBE6DB02349 /* RCTRootViewFactory.mm */,\n\t\t\t\tA00FA18D84D1E9984283141983CB75AC /* Pod */,\n\t\t\t\t6907CB3169BA7804C5F4E250B8FC6C8D /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-RCTAppDelegate\";\n\t\t\tpath = \"../../../node_modules/react-native/Libraries/AppDelegate\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t71BD988D97F229A87FF011F774714D8D /* scheduler */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEFB5E0D35E76A4F34C8D5195B2051AF6 /* AsynchronousEventBeat.cpp */,\n\t\t\t\t00C9C239F8FE3A38880888D537B1808F /* AsynchronousEventBeat.h */,\n\t\t\t\t4167445C410188AABBBB4C4E2721565F /* InspectorData.h */,\n\t\t\t\tC4F24837075E70019E647A6DFDD4EB4B /* Scheduler.cpp */,\n\t\t\t\tBD52E6EAC24FFDEAD05FA9425D5C5A03 /* Scheduler.h */,\n\t\t\t\tD97182C50F2513A513AF827227D35D9F /* SchedulerDelegate.h */,\n\t\t\t\tF2164B5DB3B104B55F7AEC0D7FC1AF24 /* SchedulerToolbox.h */,\n\t\t\t\tFEB18EBDB42AC349730BA29BCF965FC6 /* SurfaceHandler.cpp */,\n\t\t\t\t92308B330D7A43F94B4AD41D0FEB8214 /* SurfaceHandler.h */,\n\t\t\t\tD77858FA2EBA20F1263AC750FC03FE38 /* SurfaceManager.cpp */,\n\t\t\t\tD14147B88E3AAA44C3CB4E3E9B1D01EE /* SurfaceManager.h */,\n\t\t\t\t651A43C1D1C89E7F8CBDD08B496E2160 /* SynchronousEventBeat.cpp */,\n\t\t\t\tDC5E287FACF5FD6F1EC1566E83AC741C /* SynchronousEventBeat.h */,\n\t\t\t);\n\t\t\tname = scheduler;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t724B3DEDFA0F74B3AAB15146C6AE0F75 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t561C2BF4C1B754CC987BD95FC0FA1F37 /* hermes-engine-xcframeworks.sh */,\n\t\t\t\t8D07443F9F8CE58F73EE39187877455E /* hermes-engine.debug.xcconfig */,\n\t\t\t\t4148047344F184B4D856D414B9B4349D /* hermes-engine.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../Target Support Files/hermes-engine\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t734385DF00F869A8A9DCB25F7D0FE59D /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8CC0120933FC3F3C92122A211D47CC57 /* React-graphics.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t76C3C6B0EB4CDD3ED56DD4DE72642030 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9046E45D1CA4C4109F20975FE05769E0 /* FBLazyVector.debug.xcconfig */,\n\t\t\t\t52DFAF9CB84CA1E1BDC56A3F71A3C404 /* FBLazyVector.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../native/iosTest/Pods/Target Support Files/FBLazyVector\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t775DA0B9F25FAA620B6EE242111FCDA5 /* TextInput */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDC7BB8BEE774754AA2ABA4E7FE98E101 /* RCTTextInputComponentView.h */,\n\t\t\t\tD015441B32F30C25792A1C654C1FD49B /* RCTTextInputComponentView.mm */,\n\t\t\t\t71871CA5216D720E9BCA31F7ED7CC373 /* RCTTextInputNativeCommands.h */,\n\t\t\t\t0838EA9EBC4E14FB79309CD7604BB3EE /* RCTTextInputUtils.h */,\n\t\t\t\t39F4D12A0547EEA463DA17C682F69B34 /* RCTTextInputUtils.mm */,\n\t\t\t);\n\t\t\tname = TextInput;\n\t\t\tpath = TextInput;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t77635579615CF1D052BC9DF20B4D023A /* platform */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6DC4EAB150C72B78EF2BB14B3D927D2C /* ios */,\n\t\t\t);\n\t\t\tname = platform;\n\t\t\tpath = platform;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t77A10B0843654F2C18695FF6C01CF2BC /* CxxLogUtils */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t7CC64A671E937AD1149E00BF8AAC2F08 /* RCTDefaultCxxLogFunction.h */,\n\t\t\t\t1D4F51217F7A23436A551FB1BF267D5C /* RCTDefaultCxxLogFunction.mm */,\n\t\t\t);\n\t\t\tname = CxxLogUtils;\n\t\t\tpath = React/CxxLogUtils;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t783EF0CE31D3DCFC7A57A0C0ECD52B61 /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF999F8978D07FB924296B37D54A540C5 /* boost */,\n\t\t\t\t92E7D01CFA258C8C77BA8524A57741FE /* DoubleConversion */,\n\t\t\t\tC770325626FBC1F743FBD2F22EC31C72 /* fmt */,\n\t\t\t\t3DC2CFD8AB13FB472599D9AEE2CCDCBE /* glog */,\n\t\t\t\t248120CA5FD7E4114C4F0F62A60B7180 /* hermes-engine */,\n\t\t\t\tFE5C1FDF3515727A0670E951FDDE706D /* RCT-Folly */,\n\t\t\t\t8D28CED4153514175A936512DC2F286F /* SocketRocket */,\n\t\t\t);\n\t\t\tname = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t793AE592768F2FF4FE8BCFFBD5461C49 /* TextInput */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t415370226876D731C7B97EFB54012940 /* RCTBackedTextInputDelegate.h */,\n\t\t\t\t6316526F1CBE0396E9767EDFD35C9870 /* RCTBackedTextInputDelegateAdapter.h */,\n\t\t\t\tFDD85087D17F29E409E05B785CAEF845 /* RCTBackedTextInputViewProtocol.h */,\n\t\t\t\t33623931DB49F9BE0BB2BEAD565E5AC5 /* RCTBaseTextInputShadowView.h */,\n\t\t\t\t8A7155EA3AC352921BE68F7BD76C6F36 /* RCTBaseTextInputView.h */,\n\t\t\t\t21754846DD83D3794B287A3D6BB4DA9C /* RCTBaseTextInputViewManager.h */,\n\t\t\t\t84D47D15D9888ECC847619622D47F370 /* RCTInputAccessoryShadowView.h */,\n\t\t\t\t8B510656AC02DF313FD0F8F0C11489FC /* RCTInputAccessoryView.h */,\n\t\t\t\t48151421313275AE47A1F36C49F1AC43 /* RCTInputAccessoryViewContent.h */,\n\t\t\t\t11F7F6FA2445CB7E109866B0BE0CC3E6 /* RCTInputAccessoryViewManager.h */,\n\t\t\t\t0F4162FD06F15F97900434A78640AA96 /* RCTTextSelection.h */,\n\t\t\t\tDDB3043473A4FC0439CCC1690F6C6C38 /* Multiline */,\n\t\t\t\t3F5A3B98DAA657AE2E2B92F3DD5EF966 /* Singleline */,\n\t\t\t);\n\t\t\tname = TextInput;\n\t\t\tpath = Libraries/Text/TextInput;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t7958B8E6307DE7DCD2B8642BC29FE308 /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6CFB318332DD9F15BA0F4E2A1CB54F41 /* React-jsi.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t79C6C4E31B41E8EA50D9951530679E7E /* RCTVibrationHeaders */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t93E465757376E937D199FB1ED68BB46C /* RCTVibration.h */,\n\t\t\t\t0829B215BF56AF5014B3A1F4D600D8D5 /* RCTVibrationPlugins.h */,\n\t\t\t);\n\t\t\tname = RCTVibrationHeaders;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t79E785223D174035A153EE0695AF76AE /* RCTImageHeaders */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9EA2794840FA725A97054EE3C4C201C0 /* RCTAnimatedImage.h */,\n\t\t\t\t6968091853F8202BC5D47745810C4DC4 /* RCTBundleAssetImageLoader.h */,\n\t\t\t\tEADB1A8E010B5CA7F0E6C4071A9DDA92 /* RCTDisplayWeakRefreshable.h */,\n\t\t\t\tB86E6473CEA7651AF56AB4A0DE22037C /* RCTGIFImageDecoder.h */,\n\t\t\t\t019948FE306C2A476268E8F263EA2122 /* RCTImageBlurUtils.h */,\n\t\t\t\t3A6A2A0A084F0C30F0774529E7FC9E72 /* RCTImageCache.h */,\n\t\t\t\t163349EF8EF0ABE776CEB5D5A72C377A /* RCTImageDataDecoder.h */,\n\t\t\t\t4242FEAF60FC3ACE3D98A5A77B65D724 /* RCTImageEditingManager.h */,\n\t\t\t\tACA2D560DF5674F43C2F0CF72BCBF485 /* RCTImageLoader.h */,\n\t\t\t\t0467EB815B94E64E6883C328F1F0F5BA /* RCTImageLoaderLoggable.h */,\n\t\t\t\tC5B05D7AD22B1F14DC12650D34552F69 /* RCTImageLoaderProtocol.h */,\n\t\t\t\tB0F4AFE806278086D88DF7F801882C7B /* RCTImageLoaderWithAttributionProtocol.h */,\n\t\t\t\t62F2B8A9CA2FD124CEED393804E7351A /* RCTImagePlugins.h */,\n\t\t\t\t35B3256FA995F839DF8DCEEFCF7DD785 /* RCTImageShadowView.h */,\n\t\t\t\t7672883E0F8241100C66C2D877FCFDC7 /* RCTImageStoreManager.h */,\n\t\t\t\t4279CDB721ED8120EB0EF927416392FE /* RCTImageURLLoader.h */,\n\t\t\t\t4133EE63EDE34BEA9FC63C4BB4801169 /* RCTImageURLLoaderWithAttribution.h */,\n\t\t\t\tC0C96A892BD79DFF4E7AD6082E8D7F4F /* RCTImageUtils.h */,\n\t\t\t\t9DB28E8C209A78E622C0305EEB0B8A19 /* RCTImageView.h */,\n\t\t\t\t6678C1864A2A92768BBDC1C215172196 /* RCTImageViewManager.h */,\n\t\t\t\t14631AAC5EAA775CD7C68A1D2E2D51C0 /* RCTLocalAssetImageLoader.h */,\n\t\t\t\tD47708686F705FA831C439C1F56306F5 /* RCTResizeMode.h */,\n\t\t\t\t23F1171EF1ED7FAD36769DFA9AE002FD /* RCTUIImageViewAnimated.h */,\n\t\t\t);\n\t\t\tname = RCTImageHeaders;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t7BD5E4D43BF00F3F339A867FCAD643D8 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD8A9743F92811B06400AED3B4A0C3135 /* React-RCTNetwork-dummy.m */,\n\t\t\t\t108A53F43BD5185295474605F7659C5C /* React-RCTNetwork-prefix.pch */,\n\t\t\t\t55F26557222F60DEF94D6A5C8A9D24F9 /* React-RCTNetwork.debug.xcconfig */,\n\t\t\t\t7C910125B6ECED6233B803D062331A90 /* React-RCTNetwork.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../native/iosTest/Pods/Target Support Files/React-RCTNetwork\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t7C1A3D49344E732F8B3C50E94B38EBAC /* Surface */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE625C620A161CC1506E07E4C53FC7859 /* RCTFabricSurface.h */,\n\t\t\t\t56BBA94041D86275E476DAC1DD401197 /* RCTFabricSurface.mm */,\n\t\t\t);\n\t\t\tname = Surface;\n\t\t\tpath = Fabric/Surface;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t7D7FC175BD5F32AB7F726B6D215C834E /* attributedstring */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF8E43EE33594D104C5EF3813E34DEAFB /* AttributedString.cpp */,\n\t\t\t\tAE414480637A9BC7CFC2B70C16C12024 /* AttributedString.h */,\n\t\t\t\tDA46A7224AD028908740366CEBA9D908 /* AttributedStringBox.cpp */,\n\t\t\t\t2415A1FAF902321B20BE9690DAF25F46 /* AttributedStringBox.h */,\n\t\t\t\t4F2D0D22F314D7C2DE88B31A3FC2C571 /* conversions.h */,\n\t\t\t\t52332B91843419E05974FD7AA782856B /* ParagraphAttributes.cpp */,\n\t\t\t\t732337B1201688C67D6881C87C976B08 /* ParagraphAttributes.h */,\n\t\t\t\tD469751A218330A8AA5F4F551ED6F9A5 /* primitives.h */,\n\t\t\t\t296D3832DB6A00F26BCB4D9A491A88E6 /* TextAttributes.cpp */,\n\t\t\t\t2D3B7CA09D694AABDB4E6816701346CC /* TextAttributes.h */,\n\t\t\t);\n\t\t\tname = attributedstring;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t7D83EBCBEB0E38F249D38F10862CE71D /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0EEA744CEB6248472C8D4DCFAB2E718C /* React-Mapbuffer-dummy.m */,\n\t\t\t\tCFF243F787BCE91857A23806EAB84741 /* React-Mapbuffer-prefix.pch */,\n\t\t\t\tF0EA3D90914575269885513BFC07386C /* React-Mapbuffer.debug.xcconfig */,\n\t\t\t\t8A80985843E4723FCDE8D548AB93AC54 /* React-Mapbuffer.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../native/iosTest/Pods/Target Support Files/React-Mapbuffer\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t7E05F7C425E3CCB8082C8310554F37F8 /* React-jserrorhandler */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t7962560BAE3A465763EDEF2274FEB730 /* JsErrorHandler.cpp */,\n\t\t\t\t12A7093733E6C2A1819EAFD7B6275C0B /* JsErrorHandler.h */,\n\t\t\t\t58CA7196E8751E8894DE84A24929D757 /* Pod */,\n\t\t\t\tC84EDCEBD7C570455A4C055316344D44 /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-jserrorhandler\";\n\t\t\tpath = \"../../../node_modules/react-native/ReactCommon/jserrorhandler\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t7E346AB60CB1FC2D6B701E705FA393DF /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4C138289B336DA780427BF289634EA74 /* RCTRequired.debug.xcconfig */,\n\t\t\t\tC31DDCFAF4110E35C011007CE400A3D4 /* RCTRequired.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../native/iosTest/Pods/Target Support Files/RCTRequired\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t7FBA2D61D286C0E2919CE63143A0D2AC /* InputAccessory */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB357588581A44158631A618472611CF2 /* RCTInputAccessoryComponentView.h */,\n\t\t\t\t20FCC48835414C2B85BB6A73AECE0309 /* RCTInputAccessoryComponentView.mm */,\n\t\t\t\t0DE9453C0D97B2C7CCEC65A7D9965FF8 /* RCTInputAccessoryContentView.h */,\n\t\t\t\tE0E6784EF6FD3D1F4FC47BCD8E352359 /* RCTInputAccessoryContentView.mm */,\n\t\t\t);\n\t\t\tname = InputAccessory;\n\t\t\tpath = InputAccessory;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t7FD492DBED5762ED1C9C9342B5CDF8B1 /* text */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tBCB964356FC077875C6D5B2218AF31AE /* BaseTextProps.cpp */,\n\t\t\t\t86C40F819940022A549E70BECA41B61A /* BaseTextProps.h */,\n\t\t\t\t4D0CA4B3C631CF1CCBBF61F2587F57B7 /* BaseTextShadowNode.cpp */,\n\t\t\t\t0D6775356C3C08E3F8AEEA4E5D9A9A05 /* BaseTextShadowNode.h */,\n\t\t\t\t4F46D9F3383D17EBE93722534A1D68D4 /* conversions.h */,\n\t\t\t\t9E725BADB6EC401BE33F493BD4BE2793 /* ParagraphComponentDescriptor.h */,\n\t\t\t\tAC1448E3360F6A62DEB6D6BE3EACB26A /* ParagraphEventEmitter.cpp */,\n\t\t\t\t804154B57731765E15D5EEACEF594E8F /* ParagraphEventEmitter.h */,\n\t\t\t\t46EA19D378721E8E4D853840E6430E2C /* ParagraphLayoutManager.cpp */,\n\t\t\t\t92EE42BB2B8D888B92EDD257DA21325E /* ParagraphLayoutManager.h */,\n\t\t\t\t343040AFE22D6B494755190C0C2FC6FF /* ParagraphProps.cpp */,\n\t\t\t\t3C7A8CC093D61D93FAFE2A423F9CE0B7 /* ParagraphProps.h */,\n\t\t\t\t11F2C5264D76056FDC6FDCEE75FEEE82 /* ParagraphShadowNode.cpp */,\n\t\t\t\t0AA655BCC979429F0F18E3B0FA7422BD /* ParagraphShadowNode.h */,\n\t\t\t\tB1D124CF8B584CB0F39373CE1FD657A6 /* ParagraphState.cpp */,\n\t\t\t\tB8E9BBBEFDC785C048DDEF9EA28FFED5 /* ParagraphState.h */,\n\t\t\t\tC3828F219A5F2BBBA5BAAA63512AB034 /* RawTextComponentDescriptor.h */,\n\t\t\t\tE66752688584187D6864081ED411C01F /* RawTextProps.cpp */,\n\t\t\t\tE4FDDD56EA9FAE7E380A57693269B4F0 /* RawTextProps.h */,\n\t\t\t\t5C3154BBEBE29BF292E5169F75CBD889 /* RawTextShadowNode.cpp */,\n\t\t\t\tAE55EB0D8F0641B6A3B9BC048B6A5DF7 /* RawTextShadowNode.h */,\n\t\t\t\t6D7520FE4D76AC547890B7D6B4C69894 /* TextComponentDescriptor.h */,\n\t\t\t\tCF8779EB6F6185F6C461B3A8E5F7DD3D /* TextProps.cpp */,\n\t\t\t\t89D75BA444F9A4BBB02531A804E2707A /* TextProps.h */,\n\t\t\t\t7D0C7E3FC36DCB52EB03EDF13AE747FE /* TextShadowNode.cpp */,\n\t\t\t\t34DB7C7BB2A350937253113F587A18E4 /* TextShadowNode.h */,\n\t\t\t);\n\t\t\tname = text;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t801DF56A3B3444504F8B94B2E6A7BF4C /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAEC9AF86778FE1E50193C715FFD9DE49 /* React-debug.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t832F23A26CFB74B21AC27D84BFD847D5 /* VirtualText */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tFF822F0F4BB64652EAD4246D353613C0 /* RCTVirtualTextShadowView.mm */,\n\t\t\t\tC5868FE71D3976986B3E0F19F4316F71 /* RCTVirtualTextView.mm */,\n\t\t\t\tF7CB0C6D6849C6DA8C5BCBFA3B2651ED /* RCTVirtualTextViewManager.mm */,\n\t\t\t);\n\t\t\tname = VirtualText;\n\t\t\tpath = VirtualText;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t838544A1D1A3EC2F8C1F335A6B00984D /* React-RCTLinking */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t12BBC4125F0A832B58555EA01B639783 /* RCTLinkingManager.mm */,\n\t\t\t\t03DD688F3EE201B455FF2DD77C7D1A1E /* RCTLinkingPlugins.mm */,\n\t\t\t\tDBAFEAB2E7C7332DA31C98708F3A9637 /* Pod */,\n\t\t\t\t86DDD184A290FDA3E9AD90717E21D65B /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-RCTLinking\";\n\t\t\tpath = \"../../../node_modules/react-native/Libraries/LinkingIOS\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t83D688BAE219AEF357904BE257AF956C /* Base */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5627C2F1A2A3B2FFA118B0BD3069A5B9 /* RCTAssert.h */,\n\t\t\t\t32208C8C13E5E8750C70406B6FADABA1 /* RCTAssert.m */,\n\t\t\t\t9472948FA5D6097F7AAF46BA5247C4C0 /* RCTBridge.h */,\n\t\t\t\t8CDDE02E3DE33048B69564671CBA6D96 /* RCTBridge.mm */,\n\t\t\t\t0F9298A1BC8933244F1905CC7B380EA1 /* RCTBridge+Inspector.h */,\n\t\t\t\t83E8DBA50CF66D81EB39C5BF3384B3D3 /* RCTBridge+Private.h */,\n\t\t\t\t43E01084CFFDCD00B181AAEBF7F6EC46 /* RCTBridgeConstants.h */,\n\t\t\t\tE4216CD44D8D54D9837A48C53488FC2E /* RCTBridgeConstants.m */,\n\t\t\t\t2AF790ECD36E6DBEB706E9E072597102 /* RCTBridgeDelegate.h */,\n\t\t\t\tE598B862EA984799230DF69702BF2488 /* RCTBridgeMethod.h */,\n\t\t\t\t7E589066D508A38B86B7F0F4BC726DB0 /* RCTBridgeModule.h */,\n\t\t\t\t367ACA1132BAD5F80E6CE0171064F750 /* RCTBridgeModuleDecorator.h */,\n\t\t\t\t2DEEED6BBD30D6FA84E9F8A0F6D3BFB9 /* RCTBridgeModuleDecorator.m */,\n\t\t\t\tDAA6445F1F3582CD4A38F23C8E688A65 /* RCTBridgeProxy.h */,\n\t\t\t\tAEC06D85B7F38501A5719E0618BBDCB6 /* RCTBridgeProxy.mm */,\n\t\t\t\t4A1561C46AF8A258D7CDA8942E5C9828 /* RCTBridgeProxy+Cxx.h */,\n\t\t\t\tCC1AF02076781F56494CFE9B171135BF /* RCTBundleManager.h */,\n\t\t\t\t86F28687E953C2F68F76CE4BB56DE52A /* RCTBundleManager.m */,\n\t\t\t\tE3339D6705C5DCAD1A55DFC2EA80C646 /* RCTBundleURLProvider.h */,\n\t\t\t\t485B66F0206CCA9ACBE8269CA49B3639 /* RCTBundleURLProvider.mm */,\n\t\t\t\tF275D02F7C84889FF25195DE592C2875 /* RCTCallableJSModules.m */,\n\t\t\t\t830AFFE41A7F0C0AA095F4DB57B6BD4D /* RCTComponentEvent.h */,\n\t\t\t\t41E25EEE9BD95F7330BCB968457D0541 /* RCTComponentEvent.m */,\n\t\t\t\t6AAB3F0857A0C2C40FE99C2A4ED8BB69 /* RCTConstants.h */,\n\t\t\t\t8DF8D4CCED43409861DD2CA66CD7733F /* RCTConstants.m */,\n\t\t\t\tAA1553BA7C531B0C6FB8F13D06F2F39B /* RCTConvert.h */,\n\t\t\t\tB5CA3E3C33E4FE87189CA5272539AA13 /* RCTConvert.mm */,\n\t\t\t\tE727F73300B53155B530D74924AD2BA8 /* RCTCxxConvert.h */,\n\t\t\t\t182B0C702A35C8585E02CD20E58ABF79 /* RCTCxxConvert.m */,\n\t\t\t\t30162323761B1AB1D7A828CC5D1BE36F /* RCTDefines.h */,\n\t\t\t\t69B9588066B95155E4417D77327555CD /* RCTDisplayLink.h */,\n\t\t\t\tE590E42E80DFE90E35C644EC5BA97D77 /* RCTDisplayLink.m */,\n\t\t\t\tBAB8070C18EDCE8B518A4AD6B7ABA7D4 /* RCTErrorCustomizer.h */,\n\t\t\t\t735E5FCEACBC787C7FF33D2B0A5F3CAD /* RCTErrorInfo.h */,\n\t\t\t\t6A69BE346BCF36781D025E02DA26992E /* RCTErrorInfo.m */,\n\t\t\t\tD0FF6F026B2F3AD02FA2F0B47E571D6B /* RCTEventDispatcher.m */,\n\t\t\t\t5216E04A7C94A5B08BF8F3BD20CDAAD7 /* RCTEventDispatcherProtocol.h */,\n\t\t\t\t53B4E188053652EA7D2E30691509AA9F /* RCTFrameUpdate.h */,\n\t\t\t\tFAF931EFC80EAFDA3EA6E9A6F62665B8 /* RCTFrameUpdate.m */,\n\t\t\t\tDD12CDD757C637C9F44622EFFFFB58B1 /* RCTImageSource.h */,\n\t\t\t\t06AB36FC020F2569C74A4684B6B4CD49 /* RCTImageSource.m */,\n\t\t\t\tF65EDF84A53562B923789233A6319309 /* RCTInitializing.h */,\n\t\t\t\tBD57ADA2122AD9C7A9EA86F634218B28 /* RCTInvalidating.h */,\n\t\t\t\tBAD62DA0698330C52546D1DD499A6B27 /* RCTJavaScriptExecutor.h */,\n\t\t\t\tF488B5803551A7C6E8D0B3F34C4823D0 /* RCTJavaScriptLoader.h */,\n\t\t\t\t1CBBEDCDAA1BFA365580787F950200AD /* RCTJavaScriptLoader.mm */,\n\t\t\t\tFF16234911D787047083140DEC397AC5 /* RCTJSStackFrame.h */,\n\t\t\t\t7B71C59B43EE3845C93BBDBA007C75CA /* RCTJSStackFrame.m */,\n\t\t\t\t93E43D1F91E0AD0BD2B3B8127C452C9D /* RCTJSThread.h */,\n\t\t\t\t4C4CB2CD0399561C3717DBAB197899E7 /* RCTJSThread.m */,\n\t\t\t\t9EA652E4CB7DDC6698F42743A59CB48F /* RCTKeyCommands.h */,\n\t\t\t\t82667B9482B97C6E5629E4F6381B1965 /* RCTKeyCommands.m */,\n\t\t\t\t39650BDAA0AACD5B404A81046E1DC6C8 /* RCTLog.h */,\n\t\t\t\t4695EA457448E4B94A1CB1A54D7440C3 /* RCTLog.mm */,\n\t\t\t\tB3842DDC8C8C33A9D3DB8FB30835698E /* RCTManagedPointer.h */,\n\t\t\t\t032ED6B89EEB973216298316E5766563 /* RCTManagedPointer.mm */,\n\t\t\t\t89BF32B08D57FC97C721EFC866E0143F /* RCTMockDef.h */,\n\t\t\t\tB1F4D64B534E21B5E81E8A4107B004EE /* RCTModuleData.h */,\n\t\t\t\t13A1EDC09A69ED3292AAE26A206851F9 /* RCTModuleData.mm */,\n\t\t\t\t7AB9D50DBC3A7605124A8AC121341CFF /* RCTModuleMethod.h */,\n\t\t\t\tCB62AF8BE005DE4640777FBFF95866BF /* RCTModuleMethod.mm */,\n\t\t\t\tF969DDD826E4A83C1AAE180C9E9DB314 /* RCTModuleRegistry.m */,\n\t\t\t\tAFB08F045558C6DADC89C84CC798C71B /* RCTMultipartDataTask.h */,\n\t\t\t\t416D956A2968ACC6583A761D4976F6FF /* RCTMultipartDataTask.m */,\n\t\t\t\tAF67768C4A075A1A0B7A20EF50D517BD /* RCTMultipartStreamReader.h */,\n\t\t\t\t65125E07440A02A058E96A2DAE8C8438 /* RCTMultipartStreamReader.m */,\n\t\t\t\t5181AFE5FC05B015D0F98EAB49991236 /* RCTNullability.h */,\n\t\t\t\t002E6C786A97F7958FC7E860BB5B4D1D /* RCTParserUtils.h */,\n\t\t\t\tAD13EA361260D530BA7944F0CFC046E1 /* RCTParserUtils.m */,\n\t\t\t\t6196FA4E5DE772F34B620947921AB6EF /* RCTPerformanceLogger.h */,\n\t\t\t\t5FCFFA906B90C33953D846D226E2DF4B /* RCTPerformanceLogger.mm */,\n\t\t\t\t25CB321AD79DD7DE8F00445FA9998552 /* RCTPerformanceLoggerLabels.h */,\n\t\t\t\tDFA83A2FCE36D7B3F4FF4946AC4AA3C5 /* RCTPerformanceLoggerLabels.m */,\n\t\t\t\tD6AA075D0670043A067B8F82481DEBA1 /* RCTPLTag.h */,\n\t\t\t\t0EAB4DE45806E1FB41C909B6AE2B53C2 /* RCTRedBoxSetEnabled.h */,\n\t\t\t\tFBC253E87364123EF03ADC474B7364C8 /* RCTRedBoxSetEnabled.m */,\n\t\t\t\t7DF60B1D14EECCD8446FC1A15E8766B4 /* RCTReloadCommand.h */,\n\t\t\t\t87D33A3159E4827D6FAE051C897E7019 /* RCTReloadCommand.m */,\n\t\t\t\tBD8C1858F1B1566DD6C1B389057F984F /* RCTRootContentView.h */,\n\t\t\t\t0E9B6C8F56601C7A8963DC42032FDCD4 /* RCTRootContentView.m */,\n\t\t\t\tE54B7595EDCA1E1302CD4C135A4612AA /* RCTRootView.h */,\n\t\t\t\tFDAA60177E608D75C530E2C86C1BD33A /* RCTRootView.m */,\n\t\t\t\t5675EDF737917D753E24442B6327797A /* RCTRootViewDelegate.h */,\n\t\t\t\tD51CB71E6C720763C7DFC73A256D9796 /* RCTRootViewInternal.h */,\n\t\t\t\t74C292E04485F2E866A8C5507A5B0F9B /* RCTRuntimeExecutorModule.h */,\n\t\t\t\t9F7378714B1A2275988B900E389392EE /* RCTTouchEvent.h */,\n\t\t\t\tEC17C0D5E26D47755381DCEAE6861774 /* RCTTouchEvent.m */,\n\t\t\t\tA6D702ACCFE3931509F2790C6E153783 /* RCTTouchHandler.h */,\n\t\t\t\t52350E9ADA2301F7191C925F1DCDD5BE /* RCTTouchHandler.m */,\n\t\t\t\t875E97EA9D0677F39C4C3599772B2F46 /* RCTTurboModuleRegistry.h */,\n\t\t\t\t3FE4624E81D0E4F7D216C71603A6BB12 /* RCTURLRequestDelegate.h */,\n\t\t\t\t0E27D0C1422F9594DB63A196340A1C0E /* RCTURLRequestHandler.h */,\n\t\t\t\tDDE9E8B67A4B7CFB8776B906B7C48F53 /* RCTUtils.h */,\n\t\t\t\tEC80A594ED6C17D4D0B191D585BE4089 /* RCTUtils.m */,\n\t\t\t\tF9317E9FDB1763149AA85D21D664A706 /* RCTUtilsUIOverride.h */,\n\t\t\t\t1D239EA1163C5886418BBB97A80CD68C /* RCTUtilsUIOverride.m */,\n\t\t\t\t2C090425A0AC38F41F277453CBF5B235 /* RCTVersion.h */,\n\t\t\t\tA0F0DECC4F2AEFAABCD0C3A4F368C487 /* RCTVersion.m */,\n\t\t\t\tA322F1AA7B7D88649BEF8224A0A6AC08 /* RCTViewRegistry.m */,\n\t\t\t\tAA25987508F4BAE6AA27F3B382C0C89A /* Surface */,\n\t\t\t);\n\t\t\tname = Base;\n\t\t\tpath = React/Base;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t85FCE44197BB47E90228E37F0C177F77 /* react */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t2351ACF698FB84D4D4492C2551003B4E /* renderer */,\n\t\t\t);\n\t\t\tname = react;\n\t\t\tpath = react;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t86DDD184A290FDA3E9AD90717E21D65B /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0105FEC655FAF723FA2D179AFF610513 /* React-RCTLinking-dummy.m */,\n\t\t\t\t0AD8F1840702844270F2F2AB1CEEAE08 /* React-RCTLinking-prefix.pch */,\n\t\t\t\tFA6E512F724BFB0B3D270261962078F8 /* React-RCTLinking.debug.xcconfig */,\n\t\t\t\t8C190024D996EF72661EA3DECD88FD76 /* React-RCTLinking.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../native/iosTest/Pods/Target Support Files/React-RCTLinking\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t8881F374EF5A07A909ED7FC6E54D4926 /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t09E3B1D3DA53A6062C5B417F4010FF1D /* React-RCTActionSheet.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t88F775F3830FCCD985633F79D022F25B /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAFC58F8C987D57066ED35DEFA2DA396E /* React.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t891A72B2B54F324453B6DF695B8101DD /* leakchecker */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t550DDF0017EBD296665C75C459009C19 /* LeakChecker.cpp */,\n\t\t\t\t0F6E474235C8459CDC4689EE8FA90735 /* LeakChecker.h */,\n\t\t\t\t5676712895937C4B56B481AD3916DC06 /* WeakFamilyRegistry.cpp */,\n\t\t\t\tBACC1D6F0CF3D0892CC092113C7FD1BA /* WeakFamilyRegistry.h */,\n\t\t\t);\n\t\t\tname = leakchecker;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t89706D6285C3873597DB28EED7CB7824 /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF97A942E5EB0FD88E4C166A5F5716585 /* React-RCTFabric.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t8D28CED4153514175A936512DC2F286F /* SocketRocket */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDD33EAFFA1FBDE7A2DA696E03388F6CA /* NSRunLoop+SRWebSocket.h */,\n\t\t\t\t8176863C104CD771DDB717C9059C2ADE /* NSRunLoop+SRWebSocket.m */,\n\t\t\t\t15D526144725A1A4158A2B28A0B914E5 /* NSRunLoop+SRWebSocketPrivate.h */,\n\t\t\t\tAE45D4CB885CACA4B317542378B0D81F /* NSURLRequest+SRWebSocket.h */,\n\t\t\t\tF8AFFDB6E319041377C5799A85CD2848 /* NSURLRequest+SRWebSocket.m */,\n\t\t\t\tF65B8FCE4C82DE06C4DC544668252210 /* NSURLRequest+SRWebSocketPrivate.h */,\n\t\t\t\tC9FA2111792B3263822E75649BD66902 /* SocketRocket.h */,\n\t\t\t\t0B87A884215B67C149F379E4B4E20F8A /* SRConstants.h */,\n\t\t\t\t2845C7EA5A46AFE22DC6C82FA344FB15 /* SRConstants.m */,\n\t\t\t\tDD1FD8F5FBF34CB4BF85DC2E8496E125 /* SRDelegateController.h */,\n\t\t\t\t5F8810FFDF257E41E57C7103FDC6A5BB /* SRDelegateController.m */,\n\t\t\t\tAAF4DA1DA2D688AADC65A0DA9B5471DF /* SRError.h */,\n\t\t\t\t0DFF996F36C36E3B8BE3131F1026090F /* SRError.m */,\n\t\t\t\tBC384C199B1347B14BCE2CC3091CC47B /* SRHash.h */,\n\t\t\t\t7B292553D4F61C21C058393BBC5C292F /* SRHash.m */,\n\t\t\t\t90C01A0B4DB17D752D3BDD87C1B4D35E /* SRHTTPConnectMessage.h */,\n\t\t\t\t44D41289A83BA05369244074562FCAE8 /* SRHTTPConnectMessage.m */,\n\t\t\t\t969D216DADA9AF02B0339E42E569D42B /* SRIOConsumer.h */,\n\t\t\t\t7B514510C45046BE196402FD4E82FB33 /* SRIOConsumer.m */,\n\t\t\t\tAD29B45C17572843FBF6146FD5BF87E6 /* SRIOConsumerPool.h */,\n\t\t\t\t6D220B48D2758B94E0D0CB1968C018CF /* SRIOConsumerPool.m */,\n\t\t\t\t9C0FAA307377663772FDCD8EEA4D9752 /* SRLog.h */,\n\t\t\t\t3EA37501D46115DDABA4571FDD025BD2 /* SRLog.m */,\n\t\t\t\t3F93EBBC760E206C8883BE32A9915097 /* SRMutex.h */,\n\t\t\t\tBBAA6714B59FDAB63CB3D51FFFAB5E9F /* SRMutex.m */,\n\t\t\t\t7A4D45A1805126ED1CD25C84B4FFE9C2 /* SRPinningSecurityPolicy.h */,\n\t\t\t\t63DB097D064EEC088A4DDB9A0F3030F8 /* SRPinningSecurityPolicy.m */,\n\t\t\t\tC09D1BCC94FFE3C6143459C161E5ACEF /* SRProxyConnect.h */,\n\t\t\t\tCC91FDC94E55938A0F105FCC3D4FE542 /* SRProxyConnect.m */,\n\t\t\t\t1C2D3D50F94DAC3059E02150AEC13F5F /* SRRandom.h */,\n\t\t\t\tCD0C06BAC55CB15F45E71416B7D4DA0E /* SRRandom.m */,\n\t\t\t\t6117F9BDA4E91FB3D03F3728A914954A /* SRRunLoopThread.h */,\n\t\t\t\tDD9C6B9D5678AE4BC86F7AB978C63029 /* SRRunLoopThread.m */,\n\t\t\t\t6F3CE6C5B501D1E1D2852C705DEDDBC7 /* SRSecurityPolicy.h */,\n\t\t\t\t38D95650F41F3CE76BC04B5619B09B95 /* SRSecurityPolicy.m */,\n\t\t\t\tBBCFDB39D48C37A3AF9AA77A7A2AFE14 /* SRSIMDHelpers.h */,\n\t\t\t\tBAF67687A73C975DC1D89F35DD7A68A5 /* SRSIMDHelpers.m */,\n\t\t\t\t11168BD52EB1FA983258A217EBF918E9 /* SRURLUtilities.h */,\n\t\t\t\tBA4DC46A209C68A22450F45E72C9E535 /* SRURLUtilities.m */,\n\t\t\t\t73F9F5B50A8454106AEB1EAA5892325D /* SRWebSocket.h */,\n\t\t\t\t00A22970BA931D4D5E31AD98D11E9EAC /* SRWebSocket.m */,\n\t\t\t\t5BDBB35F633567D3A31E12423AD9197B /* Support Files */,\n\t\t\t);\n\t\t\tname = SocketRocket;\n\t\t\tpath = SocketRocket;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t8DC739FB8D8429D8E041D0BC40645906 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3109CDF60BA119DB536601600983564B /* simdjson.modulemap */,\n\t\t\t\tD2D1B033752AE5FACB195379C2792DA4 /* simdjson-dummy.m */,\n\t\t\t\t464776232CDC5618B023B03B587FF834 /* simdjson-prefix.pch */,\n\t\t\t\tA80A385542A9347C200F57687297EA39 /* simdjson-umbrella.h */,\n\t\t\t\t56909D6C087AAA9D6C77D684FEC0C328 /* simdjson.debug.xcconfig */,\n\t\t\t\t481D4593ECDD5D02E193B28FEF265A45 /* simdjson.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../native/iosTest/Pods/Target Support Files/simdjson\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t90097354ADCBD8E8098AF8B37786ADA1 /* numeric */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF3822D806026A4FCC42B9B6C3AD50045 /* Comparison.h */,\n\t\t\t\t7299BD666C1DD5C0DB7343D26EB7DFDA /* FloatOptional.h */,\n\t\t\t);\n\t\t\tname = numeric;\n\t\t\tpath = yoga/numeric;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t90652DF1414B43CD8ACBE42D8DBC5012 /* FBLazyVector */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tFA4AEB20C629FD1B5F713C79D99E301D /* FBLazyIterator.h */,\n\t\t\t\tACE440831164AF324B22178CA5BE40D0 /* FBLazyVector.h */,\n\t\t\t\t990F8BC877E6A94F476FC5A691AE4A54 /* Pod */,\n\t\t\t\t76C3C6B0EB4CDD3ED56DD4DE72642030 /* Support Files */,\n\t\t\t);\n\t\t\tname = FBLazyVector;\n\t\t\tpath = \"../../../node_modules/react-native/Libraries/FBLazyVector\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t92018AB7F0340B3EA90BB235642BF56E /* BaseText */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tCC9E0C53D02E49E161CC61AD2E78DD12 /* RCTBaseTextShadowView.h */,\n\t\t\t\t854FD3BEF6FF2E1CB963FD11F173D53D /* RCTBaseTextViewManager.h */,\n\t\t\t);\n\t\t\tname = BaseText;\n\t\t\tpath = Libraries/Text/BaseText;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t922AD62EA7116A32C0061BE4E0EACDAA /* Targets Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1428673623694BA3B3A65613421BAAF9 /* Pods-WatermelonTester */,\n\t\t\t\tA3F4B9A15ADC518C21865331DEFBC3F6 /* Pods-WatermelonTester-WatermelonTesterTests */,\n\t\t\t);\n\t\t\tname = \"Targets Support Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t92E616D44D7824072E698371D7620AB6 /* Text */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tFADE4C50E4C03A98702AAB8CE87A3D81 /* NSTextStorage+FontScaling.h */,\n\t\t\t\t8C5791AD6F4A42E6F15A4AE3E13672C9 /* RCTDynamicTypeRamp.h */,\n\t\t\t\t5AEA1EA0BA3625CC695A4E11E09FA24B /* RCTTextShadowView.h */,\n\t\t\t\t4CC04D4366699171D90B6E14F8947CBD /* RCTTextView.h */,\n\t\t\t\t289131589CCC21FDAAADD8DA0E1EA4A5 /* RCTTextViewManager.h */,\n\t\t\t);\n\t\t\tname = Text;\n\t\t\tpath = Libraries/Text/Text;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t92E7D01CFA258C8C77BA8524A57741FE /* DoubleConversion */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0BFB85B76F6C2F9809214837BFA1F944 /* bignum.cc */,\n\t\t\t\t555499AEC258DE52284D569572113A79 /* bignum.h */,\n\t\t\t\tB1492BA96B69489FCA50F4BBFD32CDD2 /* bignum-dtoa.cc */,\n\t\t\t\t2EAAC08BE2B9CE538A0D58679E781247 /* bignum-dtoa.h */,\n\t\t\t\tF336A6F8A52B443F471C3A212D86DC43 /* cached-powers.cc */,\n\t\t\t\t9A2D8939F820583ACA4B8154B63050D7 /* cached-powers.h */,\n\t\t\t\t522269B8DAFA9F8734D95340BC29600A /* diy-fp.cc */,\n\t\t\t\t33E070F404266F952E77980CFA788C4D /* diy-fp.h */,\n\t\t\t\t1E7B7C0191645527408193552D9E40CF /* double-conversion.cc */,\n\t\t\t\t4C4D4C35312AE9ACB8D59A46D0D6051A /* double-conversion.h */,\n\t\t\t\t6A3EDF523AE8279DAD3E84193359461D /* fast-dtoa.cc */,\n\t\t\t\t28D7BEABBC1EB38780017A5D14CC2E0F /* fast-dtoa.h */,\n\t\t\t\t555C8E2826D8F277B972F2B66D34F22B /* fixed-dtoa.cc */,\n\t\t\t\tBDA3C52C76B2C3F5E9BA936CB0B3B9C6 /* fixed-dtoa.h */,\n\t\t\t\t7777F6D0013ADB2C7FBD5FE217F042EE /* ieee.h */,\n\t\t\t\t43EB5BDEB4E6A695F071E994CDEDF34A /* strtod.cc */,\n\t\t\t\tA43C1B14F1018F4B603503BF2E6E2524 /* strtod.h */,\n\t\t\t\t37D820D975698FCA99C86CE71EF22A97 /* utils.h */,\n\t\t\t\t5FE9DA05C0C0B80D78B3196B44520CCF /* Support Files */,\n\t\t\t);\n\t\t\tname = DoubleConversion;\n\t\t\tpath = DoubleConversion;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t93D7502F904C05AAAA56B79ADBFD98ED /* RCTSettingsHeaders */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t159A07D2F149809ABC30E5FCBB89938F /* RCTSettingsManager.h */,\n\t\t\t\t4C8F91F7CAFA9A5744781FD95C2E01DA /* RCTSettingsPlugins.h */,\n\t\t\t);\n\t\t\tname = RCTSettingsHeaders;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t969F416C821F0E4314954435098833B6 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA31AB8CE7A0BE03B38908CD5083FD09A /* React-debug.modulemap */,\n\t\t\t\t751490A9CC81CC3D1FD6DE9D1A2309B0 /* React-debug-dummy.m */,\n\t\t\t\t15E1FB248EB6C077E99CE7C0E381D4FC /* React-debug-prefix.pch */,\n\t\t\t\t55399075C21EA2F4687C29DEBD4F00E7 /* React-debug-umbrella.h */,\n\t\t\t\t9033A744B6DD1EB398DCC4DEC2188393 /* React-debug.debug.xcconfig */,\n\t\t\t\tADD320EC4221CCC1B76BB433ED455CEC /* React-debug.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../../native/iosTest/Pods/Target Support Files/React-debug\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t987A58B283B2E43F2079409981CFB845 /* ComponentViews */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t05CEFC84AD6E69D2E073A1A739700477 /* RCTFabricComponentsPlugins.h */,\n\t\t\t\t69E632279F0013ADFF7F6ECDE2FAF2E7 /* RCTFabricComponentsPlugins.mm */,\n\t\t\t\t6C85D2BBAE96BC15F85AA68CEEA5FD5A /* ActivityIndicator */,\n\t\t\t\t39C50CAF7E26A860DBFABBAA3126DF9F /* DebuggingOverlay */,\n\t\t\t\t50078C544CD6EBBBC85C62A86036987D /* Image */,\n\t\t\t\t7FBA2D61D286C0E2919CE63143A0D2AC /* InputAccessory */,\n\t\t\t\t4D73D71DE4243AB0D6C3E31F81E31B26 /* LegacyViewManagerInterop */,\n\t\t\t\t3B6463C7A136A650C4C0140180398E03 /* Modal */,\n\t\t\t\t3C90C21DA311CB0108B3C31BBC36383B /* Root */,\n\t\t\t\t242C2C37DBF48E04AB5C45C85164E5C7 /* SafeAreaView */,\n\t\t\t\tE50F59EC71FBF8F64E1CAAD54D71774C /* ScrollView */,\n\t\t\t\tCB1C27507F8EEBB9AEC765B36425CCE2 /* Switch */,\n\t\t\t\tF7240E677890C70CE51D27DED2D05B60 /* Text */,\n\t\t\t\t775DA0B9F25FAA620B6EE242111FCDA5 /* TextInput */,\n\t\t\t\t4D0B065A8B7D7FCE069E4C6DD9750305 /* UnimplementedComponent */,\n\t\t\t\tF377A85A496896B3020FF70A98EE6A07 /* UnimplementedView */,\n\t\t\t\t9DD15119CAE91A5E981F7027685255D0 /* View */,\n\t\t\t);\n\t\t\tname = ComponentViews;\n\t\t\tpath = ComponentViews;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t990F8BC877E6A94F476FC5A691AE4A54 /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8F517BDFB455C4400751998134FC0B9E /* FBLazyVector.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9AAC841AE519DF450215AC7162CD860D /* rncore */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tAE1B2934FABC52774A42A595531E4F6A /* ComponentDescriptors.cpp */,\n\t\t\t\tAC18E26348C64BD7E409DF012EC8FD1E /* ComponentDescriptors.h */,\n\t\t\t\tB18233FA84BEC01AFCB96FC16BD3B983 /* EventEmitters.cpp */,\n\t\t\t\t5DA7D4069EAB7AD175067D9475F75335 /* EventEmitters.h */,\n\t\t\t\tC80C73D05140B68E7E4D8EC8138AABF5 /* Props.cpp */,\n\t\t\t\t7CE12A7D304717866DC9F308C7951109 /* Props.h */,\n\t\t\t\tF8025E613E68EA6B0C75074A74BB97E4 /* RCTComponentViewHelpers.h */,\n\t\t\t\t1C48A5DDAEDABFF1B422CC636928EFAD /* ShadowNodes.cpp */,\n\t\t\t\t21EF07FFD2345957804DF019878563CF /* ShadowNodes.h */,\n\t\t\t\tF3F5D9E03D596413A96FCC9292384B7D /* States.cpp */,\n\t\t\t\t80C9F8ECC69EABDD6B34127E2C1EBAB4 /* States.h */,\n\t\t\t);\n\t\t\tname = rncore;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9AE2770F61ACF53CF54F135CA8071A0E /* textlayoutmanager */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t53F62FE9FCA2DB3B3BA9F838F5513256 /* RCTAttributedTextUtils.h */,\n\t\t\t\tD584937399C1E7BBAE37C4B6480368F6 /* RCTAttributedTextUtils.mm */,\n\t\t\t\t19853EBFDCA4264503A59B9DBEDB47E4 /* RCTFontProperties.h */,\n\t\t\t\t68F513FA3A624FF445C0F9B1A615E3A2 /* RCTFontUtils.h */,\n\t\t\t\t0B38F938F0F9868A60309B113ECB3CAA /* RCTFontUtils.mm */,\n\t\t\t\t9D0FCEB123126F6E7439D8ABC6DB35A1 /* RCTTextLayoutManager.h */,\n\t\t\t\tBDF4907BCEC9C6B68A50F5CBD6A193CA /* RCTTextLayoutManager.mm */,\n\t\t\t\t9103371D49F49FB8704F83F623604846 /* RCTTextPrimitivesConversions.h */,\n\t\t\t\t04308B32F6B6A66B18A8BFB8D050CD14 /* TextLayoutManager.h */,\n\t\t\t\tAC18F953AA41F612F2CB8153565DB590 /* TextLayoutManager.mm */,\n\t\t\t);\n\t\t\tname = textlayoutmanager;\n\t\t\tpath = textlayoutmanager;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BAD9866097E10B1FDB703D4D0A97D5A /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6F004C69796236836B1136C0778862F1 /* React-jsi.modulemap */,\n\t\t\t\t359B6CEED91D1DF8B883DC40D5E04EEE /* React-jsi-dummy.m */,\n\t\t\t\t81460E74A5068268C47A7DAC94730797 /* React-jsi-prefix.pch */,\n\t\t\t\t125AE03965ABF8E4C157E9FE3A55D187 /* React-jsi-umbrella.h */,\n\t\t\t\t3B7CA49DCCF91C74062D35600488A355 /* React-jsi.debug.xcconfig */,\n\t\t\t\t12B4501A9455AFB01AA0089214B8A38D /* React-jsi.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../native/iosTest/Pods/Target Support Files/React-jsi\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9C9762AD0A803BE78CA3EF2499AE4C3A /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9A870B9A0F18A8C3F9075851CE67E22B /* React-RCTVibration-dummy.m */,\n\t\t\t\tD095CAA67ED3E639CF404B5BA46489E6 /* React-RCTVibration-prefix.pch */,\n\t\t\t\tFFE3B6010494BF1759723F25C1271613 /* React-RCTVibration.debug.xcconfig */,\n\t\t\t\t11FCAB3F234C2F7A1E00B43655EF0707 /* React-RCTVibration.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../native/iosTest/Pods/Target Support Files/React-RCTVibration\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9D053F5F3BD82C77E402C42AC8FC9519 /* React-RCTAnimation */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t222FC254D773A0163299A97B210F3B1A /* RCTAnimationPlugins.mm */,\n\t\t\t\t3FA9E0C5DE547662B3285AAE677F1CBF /* RCTAnimationUtils.mm */,\n\t\t\t\tF1455C7DE425F051F50E3E27295C794D /* RCTNativeAnimatedModule.mm */,\n\t\t\t\t9C9BD5B613E101C64C2992C9C6D47EAC /* RCTNativeAnimatedNodesManager.mm */,\n\t\t\t\t9652157178DCF97B039AEF273CD86695 /* RCTNativeAnimatedTurboModule.mm */,\n\t\t\t\t5544F7F93E3DBA9D61074A44C08FBD0D /* Drivers */,\n\t\t\t\tE695D43859938F2F0535DCEEC76C2EA9 /* Nodes */,\n\t\t\t\t2F777C58C39334C896E57A642E72C935 /* Pod */,\n\t\t\t\t1FB41E9CB3764DB5E3A256F2CCB3313C /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-RCTAnimation\";\n\t\t\tpath = \"../../../node_modules/react-native/Libraries/NativeAnimation\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9DD15119CAE91A5E981F7027685255D0 /* View */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB06BDA64A8C366F85CA16B5D0E328839 /* RCTViewComponentView.h */,\n\t\t\t\tA2237CD09A4316F9776CDCDA5907FAF5 /* RCTViewComponentView.mm */,\n\t\t\t);\n\t\t\tname = View;\n\t\t\tpath = View;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9E4AB614B7BB9122869BB5B29BA374DF /* RCTDeprecation */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4E105C5D9C4A539112084489DC235CAB /* RCTDeprecation.m */,\n\t\t\t\t2303A255BD3099EB18229E7A20393511 /* Exported */,\n\t\t\t\tEEDC3AEAD2C4BEF60F0534AA24B8C4A8 /* Pod */,\n\t\t\t\t44743D4355D456613604BEB051E106B2 /* Support Files */,\n\t\t\t);\n\t\t\tname = RCTDeprecation;\n\t\t\tpath = \"../../../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9FCD78A4E6ED7A67F3059F23B587845A /* ScrollView */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tCC8769294DD05CF0DEF8259E34DE9AAC /* RCTScrollableProtocol.h */,\n\t\t\t\tFF88A9733D935D4DBE027D36D5B591C1 /* RCTScrollContentShadowView.h */,\n\t\t\t\t42069F17D0B92E1DCE65D62807AAC0E8 /* RCTScrollContentShadowView.m */,\n\t\t\t\tCF44B022CA9C008F36C080D66685928C /* RCTScrollContentView.h */,\n\t\t\t\t40CFEC8038EA506FF0CAC998C27E80BF /* RCTScrollContentView.m */,\n\t\t\t\tAD4769F2911766BA548AFD0FFEDF8426 /* RCTScrollContentViewManager.h */,\n\t\t\t\tE0817B1CB0DBAA45D6A064FE340FD13C /* RCTScrollContentViewManager.m */,\n\t\t\t\t2C5887CFA052BA4652642CE173F3C2F4 /* RCTScrollEvent.h */,\n\t\t\t\t5424951447BE1FD64194B009E9504B50 /* RCTScrollEvent.m */,\n\t\t\t\tDD3ED969E30456E3100D106C5E71ED9E /* RCTScrollView.h */,\n\t\t\t\t314C4322103426F9256B2FBA495DB607 /* RCTScrollView.m */,\n\t\t\t\t68F7A0C0E60467EF299D038EF39D12DD /* RCTScrollViewManager.h */,\n\t\t\t\tAD0288743440505A088DDFA69CE73173 /* RCTScrollViewManager.m */,\n\t\t\t);\n\t\t\tname = ScrollView;\n\t\t\tpath = ScrollView;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA00FA18D84D1E9984283141983CB75AC /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF680F8EC8BBE5EFCCD2F2F64A35E6132 /* React-RCTAppDelegate.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA07FF72E2E9957A32FBB94DD70C049AD /* node */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t7F08F17DB62670269DC70CC1F4817168 /* CachedMeasurement.h */,\n\t\t\t\t48B75222BE84998C3999916E6084DAD4 /* LayoutResults.cpp */,\n\t\t\t\tECC51259933A05380339556B6ABE282E /* LayoutResults.h */,\n\t\t\t\t7B87E0987F27CB7E57A4A864D574EC7C /* Node.cpp */,\n\t\t\t\tABA37D7615C32B1F5B407A5EE086D7F7 /* Node.h */,\n\t\t\t);\n\t\t\tname = node;\n\t\t\tpath = yoga/node;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA0BBD39C71A2FDD8567B42D741ACC89C /* algorithm */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tBB96EF13B6D928DBB3A8D90C1ADF57D5 /* AbsoluteLayout.cpp */,\n\t\t\t\t3C0913180FEC5C605ACD33BB9E09CDAD /* AbsoluteLayout.h */,\n\t\t\t\t561201E4162AB6CB05D4F749A565AFCC /* Align.h */,\n\t\t\t\tBD47E6AE7775E09A0E4B2548E31BD9A8 /* Baseline.cpp */,\n\t\t\t\tEEAA1C4C0F827F9E5B0E9A8A96B8B9D7 /* Baseline.h */,\n\t\t\t\t86C8906A6C460D393729CA02A57186E7 /* BoundAxis.h */,\n\t\t\t\t374717629E05164C820F2052E54AAA91 /* Cache.cpp */,\n\t\t\t\tE7FC6C39FE3AE33F288AB26DDA6BD6C4 /* Cache.h */,\n\t\t\t\tB1C2DDC7533E6E8B4EB9893DC9F6FDB1 /* CalculateLayout.cpp */,\n\t\t\t\tE1BDFFD718B2082F582FF8627388E098 /* CalculateLayout.h */,\n\t\t\t\t4319E1967E8F6E050D8E035D7E5D4598 /* FlexDirection.h */,\n\t\t\t\t6D3BD65E387AF4A8FE10216CABF03885 /* FlexLine.cpp */,\n\t\t\t\t82C0C34C914DB0E6E56880987BB5F0AC /* FlexLine.h */,\n\t\t\t\t0D9123036D19728374029B1BD6567BA8 /* PixelGrid.cpp */,\n\t\t\t\tEF112ACF0D0F90B1AAF3D112F650FA09 /* PixelGrid.h */,\n\t\t\t\t1AA86F8B69827747B651178FB5B21A21 /* SizingMode.h */,\n\t\t\t\t9FB8DB4CA6FB75873D74FF57CA59968C /* TrailingPosition.h */,\n\t\t\t);\n\t\t\tname = algorithm;\n\t\t\tpath = yoga/algorithm;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA22A03BA16F7B58F55DB6463E7E394B5 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t2726901F064D66A4F014D07BB986BF67 /* React-RCTSettings-dummy.m */,\n\t\t\t\t76E0CAC8E63CBC0B9C2BA14BB8864475 /* React-RCTSettings-prefix.pch */,\n\t\t\t\tEAA2B5EA3356A9C6FCE82CC15F04FDC0 /* React-RCTSettings.debug.xcconfig */,\n\t\t\t\t543D873E1BAD025BDD864DB650682C5D /* React-RCTSettings.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../native/iosTest/Pods/Target Support Files/React-RCTSettings\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA3E926B6B99537D639A917D6E500FDC1 /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1338B219849CEDF7FE7D3407E9663E27 /* React-ImageManager.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA3F4B9A15ADC518C21865331DEFBC3F6 /* Pods-WatermelonTester-WatermelonTesterTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC3BDBA3AD30FF77F76488476893F6023 /* Pods-WatermelonTester-WatermelonTesterTests-acknowledgements.markdown */,\n\t\t\t\t479CC64ABABA112D0CD8C3AF4C19786C /* Pods-WatermelonTester-WatermelonTesterTests-acknowledgements.plist */,\n\t\t\t\t00F247CF24ECD2EFFF35AC12E91E6FE7 /* Pods-WatermelonTester-WatermelonTesterTests-dummy.m */,\n\t\t\t\t5648100E641B6682FAC595B66FFBC6B5 /* Pods-WatermelonTester-WatermelonTesterTests-frameworks.sh */,\n\t\t\t\t03ED5FB48027087AD3888234008E8F67 /* Pods-WatermelonTester-WatermelonTesterTests-resources.sh */,\n\t\t\t\tD40D2FA9CCC999A6A1985688544C9701 /* Pods-WatermelonTester-WatermelonTesterTests.debug.xcconfig */,\n\t\t\t\tE1140A4CC7FEA96D57FF547DA1D75EA0 /* Pods-WatermelonTester-WatermelonTesterTests.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Pods-WatermelonTester-WatermelonTesterTests\";\n\t\t\tpath = \"Target Support Files/Pods-WatermelonTester-WatermelonTesterTests\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA43ADC5C0EF00658ABBB46CD0A26DCD9 /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t31660B4E9DCE9F8ABCACB98B2176D664 /* React-NativeModulesApple.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA4517A17CC86213678856402DD6CC7BC /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t468E6DDCB31D801D029C02EF35D5C24C /* React-runtimeexecutor.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA590DD0675D53682B1BC144B81586431 /* ReactCommon */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tFC72F8ACA9AA53954F9EF3B8A5C6F5FE /* Pod */,\n\t\t\t\t608676613D8C48B8B9EA90C52743AB1E /* Support Files */,\n\t\t\t\t428E61796EE85ED2EFE00325BFA5B4BD /* turbomodule */,\n\t\t\t);\n\t\t\tname = ReactCommon;\n\t\t\tpath = \"../../../node_modules/react-native/ReactCommon\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA7C4FF2F75EF9D72AA55D62D1EEAE11B /* React-nativeconfig */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t7D709C81D0C07E31A08F46AA3AAB09FD /* ReactNativeConfig.cpp */,\n\t\t\t\t8F593DCCC2DAFF6D4243AAD2A5156F10 /* ReactNativeConfig.h */,\n\t\t\t\tACEE25DEFF1B8FD9509A07B14BD19672 /* Pod */,\n\t\t\t\tE9C7F1CEBC634C863FBF22F630470A84 /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-nativeconfig\";\n\t\t\tpath = \"../../../node_modules/react-native/ReactCommon\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tA87C7F8D00F0CBE2558C9FABDCE778F0 /* safeareaview */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0C897CCFDE4BF7130CDDA0286B966FDB /* SafeAreaViewComponentDescriptor.h */,\n\t\t\t\t8332BB1363344A31DAAB30F13244873B /* SafeAreaViewShadowNode.cpp */,\n\t\t\t\t8D1CC2D4F8A104E3B6F891431E7ECE1B /* SafeAreaViewShadowNode.h */,\n\t\t\t\tC25232818C41EA94B5E01D6E8903AC74 /* SafeAreaViewState.cpp */,\n\t\t\t\t6344807426DBEA83083B947671B91C7D /* SafeAreaViewState.h */,\n\t\t\t);\n\t\t\tname = safeareaview;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAA25987508F4BAE6AA27F3B382C0C89A /* Surface */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t762588AD3F68541107FA36AF37D053F9 /* RCTSurface.h */,\n\t\t\t\t9A909CE9BFF1F0B380221FDEE11D0211 /* RCTSurface.mm */,\n\t\t\t\t99E72FB672688243BE5F6E35ABA1E42F /* RCTSurfaceDelegate.h */,\n\t\t\t\tF1A6297972EED0526BCBF5B221AE18AC /* RCTSurfaceProtocol.h */,\n\t\t\t\t37560CB0B831B9181D0E9FE412A827E5 /* RCTSurfaceRootShadowView.h */,\n\t\t\t\t4343AD60D13A26A3F11E942DA9C12580 /* RCTSurfaceRootShadowView.m */,\n\t\t\t\t2F8E66FF737E243487DFC9781A2605FE /* RCTSurfaceRootShadowViewDelegate.h */,\n\t\t\t\t258F35FF5ABDDEBA091F066B015EE1D9 /* RCTSurfaceRootView.h */,\n\t\t\t\t95FAFB9E62426C075E9E5E41D65333EB /* RCTSurfaceRootView.mm */,\n\t\t\t\t7215C1FD70511C10EB945E8681577C16 /* RCTSurfaceStage.h */,\n\t\t\t\tBFE0C7F1527F398A2A69185EBFCF677F /* RCTSurfaceStage.m */,\n\t\t\t\t8BE3CC89AB9CCAD959EA3B472BA6F99A /* RCTSurfaceView.h */,\n\t\t\t\tCCF757AC8F0183D61E1DA8706776938C /* RCTSurfaceView.mm */,\n\t\t\t\t1BF78B5D7B2AFC98B3545C8C9DA66D16 /* RCTSurfaceView+Internal.h */,\n\t\t\t\t5D505B6D5764926B812EB062BBB9F48F /* SurfaceHostingView */,\n\t\t\t);\n\t\t\tname = Surface;\n\t\t\tpath = Surface;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAA829DB19589EE114FF17962F6831B2A /* executor */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t2A7AEC733FC3F4650B9340E574530161 /* HermesExecutorFactory.cpp */,\n\t\t\t\tF7CA9A9E0677E6E622E8C0C6BFC057B5 /* HermesExecutorFactory.h */,\n\t\t\t);\n\t\t\tname = executor;\n\t\t\tpath = executor;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tAAF010A03BDC3903E9F6EE416F6DB539 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEF09FB3371BC4A515D26FC037059DD61 /* React-rendererdebug.modulemap */,\n\t\t\t\t137A31E381AB4AA534731ED6AF105636 /* React-rendererdebug-dummy.m */,\n\t\t\t\t9628B2A1454DADB30631AE9787FC337F /* React-rendererdebug-prefix.pch */,\n\t\t\t\t654197BBD530E127C270633DB539A166 /* React-rendererdebug-umbrella.h */,\n\t\t\t\t6DF638889DD6D88E1694A065C0A27BC6 /* React-rendererdebug.debug.xcconfig */,\n\t\t\t\t65D4FD7CDCA49048491D835A28092DCC /* React-rendererdebug.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../../../native/iosTest/Pods/Target Support Files/React-rendererdebug\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tABE19B1F318E966A4F2624B095AC06CA /* ios */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t18DA155471EE231088B75DA42ACDA74D /* WatermelonDB */,\n\t\t\t);\n\t\t\tname = ios;\n\t\t\tpath = native/ios;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tACE973C74E126DABDE76A70A939FE31F /* imagemanager */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t51582CF5BC4E40FAA616B6363DF4B4A5 /* ImageManager.h */,\n\t\t\t\t36C08C7FF3DFACBC39FCE541DCF803B6 /* ImageRequest.cpp */,\n\t\t\t\t2D006447B5017B8009E226E6E0AACE40 /* ImageRequest.h */,\n\t\t\t\t06E34251980A9A80A1D27297F3B60B98 /* ImageResponse.cpp */,\n\t\t\t\tDA3239428E42490C3045975A1FC6A276 /* ImageResponse.h */,\n\t\t\t\t8229FB82BEAE5318CC636C3963FFF6F8 /* ImageResponseObserver.h */,\n\t\t\t\t4929D6CBAA4CA6E284FE157B1BD57DA0 /* ImageResponseObserverCoordinator.cpp */,\n\t\t\t\tF7D701E7AA313B498D488AA43D416F3F /* ImageResponseObserverCoordinator.h */,\n\t\t\t\t340097AC9A9BF4BAD1E542E436217620 /* ImageTelemetry.cpp */,\n\t\t\t\tC3A0E653F207D8208760F39D89431669 /* ImageTelemetry.h */,\n\t\t\t\t6F8D2287EF58ADD156913AF3C0FA5266 /* primitives.h */,\n\t\t\t);\n\t\t\tname = imagemanager;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tACEE25DEFF1B8FD9509A07B14BD19672 /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA213D84A5E7EB977D2213B29DCE12629 /* React-nativeconfig.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB11DA0315979959E0AB787938C67B80B /* graphics */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA67702A5BB9FE81CBF2BBE1340D12764 /* Float.h */,\n\t\t\t\tA7237AA79C8E933F1CAB9DE0BDD0B0A5 /* HostPlatformColor.h */,\n\t\t\t\t608A42FC636CC123077F86095300FDD8 /* HostPlatformColor.mm */,\n\t\t\t\t00D0EC9AE90BED5D79B9CAE98DAE902E /* PlatformColorParser.h */,\n\t\t\t\t0622E264BBCF6697F9CA2A6775362A8F /* PlatformColorParser.mm */,\n\t\t\t\tF98C396019C17AFAC2E6514744534845 /* RCTPlatformColorUtils.h */,\n\t\t\t\t9C46ED3EA004CAAFEB6FEF89B7AF2F0C /* RCTPlatformColorUtils.mm */,\n\t\t\t);\n\t\t\tname = graphics;\n\t\t\tpath = graphics;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB129C0FB664B93F4F1F73414EFD96E55 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t926F478934D57018C94BFB51AF5970C8 /* React-FabricImage-dummy.m */,\n\t\t\t\tB77DA9E6D8A90D0BDB388D5130CFD6A5 /* React-FabricImage-prefix.pch */,\n\t\t\t\t9EB5D5242D476B50F6A84EA6ECF95DAF /* React-FabricImage.debug.xcconfig */,\n\t\t\t\tE2B590F31CAE0577156C53171FEFEF07 /* React-FabricImage.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../native/iosTest/Pods/Target Support Files/React-FabricImage\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB15E0C00053600CFA57B847087372FA8 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t26A39561F9B37AA0AFE252734CC8891B /* React-Fabric.modulemap */,\n\t\t\t\t6FC0DBFC356D08CBF5C195717E58618A /* React-Fabric-dummy.m */,\n\t\t\t\tA616744A9B894FE3A9A3A1E53EA13CA3 /* React-Fabric-prefix.pch */,\n\t\t\t\t26902E3757E5D682AFC6C628AF7BD7DD /* React-Fabric-umbrella.h */,\n\t\t\t\t157BEE76ABB5FC023F974602BC587B8A /* React-Fabric.debug.xcconfig */,\n\t\t\t\tAD2710EC72C624EB87F820405512AA45 /* React-Fabric.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../native/iosTest/Pods/Target Support Files/React-Fabric\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB25136050555256BFCFC476D4F2E42A5 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDEABC445C02152DF5E8A3B39AF9F9162 /* React-RuntimeApple-dummy.m */,\n\t\t\t\t92F7C8691D5DED9946359E1BF469148A /* React-RuntimeApple-prefix.pch */,\n\t\t\t\tDAEB77A1371F2344F999D880C3A90E0B /* React-RuntimeApple.debug.xcconfig */,\n\t\t\t\t1E8D7F44C4927699FE5FFB25997A96F8 /* React-RuntimeApple.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../../../../native/iosTest/Pods/Target Support Files/React-RuntimeApple\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB322D4E234E4C7B133CEB5251E96FFA5 /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t2B044C64ECD89051E79887F2F8FE57D5 /* React-RCTNetwork.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB47DE51F7E87E94310FE2E0772666C1F /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEE85F8AC8EA65010815F0C5ED9826E3F /* React-RCTFabric.modulemap */,\n\t\t\t\t887027C7FF12FB7338869C776A7CEFBF /* React-RCTFabric-dummy.m */,\n\t\t\t\t26F81C8DE0CC3E7649EDDFE8DFDED895 /* React-RCTFabric-prefix.pch */,\n\t\t\t\t51F1662929364AF9AB1F5EFD515C39CA /* React-RCTFabric-umbrella.h */,\n\t\t\t\t4B2CA6BADDBABE04EA3FC848D2DFBA7C /* React-RCTFabric.debug.xcconfig */,\n\t\t\t\tB0846154EC35111B28426222762CF880 /* React-RCTFabric.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../native/iosTest/Pods/Target Support Files/React-RCTFabric\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB4A3BEC460C2E79702F6805C5AEBDE6A /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC609BD215F18E3B6ACB3641DBF1B200C /* React-rncore.debug.xcconfig */,\n\t\t\t\tDFDFCA220F4E0487D24966099C7AC6BD /* React-rncore.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../native/iosTest/Pods/Target Support Files/React-rncore\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB4B40FE5744EE0430F1085186F5C39EE /* config */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA2433055CA015DE51A8A13B2AAAE5155 /* Config.cpp */,\n\t\t\t\t94463E432EBBF80182004B420404987D /* Config.h */,\n\t\t\t);\n\t\t\tname = config;\n\t\t\tpath = yoga/config;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB4F2C154142416109FA78F907E5B3547 /* inspector-modern */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t15801941DFE125F4459DBA217046DB1E /* chrome */,\n\t\t\t);\n\t\t\tname = \"inspector-modern\";\n\t\t\tpath = \"inspector-modern\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB4F53C80BB006D69F1048DEA8ECF9441 /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tBBDAB2AA9EAB8FF0DA4637A65C5425B5 /* RCTRequired.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB508D299A713547C4C4004662C7A360E /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC8D1859AA4CE974FEC530D5684F25E81 /* React-FabricImage.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB511BCC300594DF84D6CFDF2B8F5EC1B /* Modules */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t52FA0467104A3E0506B07D0F4D83C94A /* RCTEventEmitter.h */,\n\t\t\t\tBC3E9A24F4A8A5F217C0B3D7CA9EBAEB /* RCTEventEmitter.m */,\n\t\t\t\t70EAB919380BCD43218C8BA42AA15E04 /* RCTI18nUtil.h */,\n\t\t\t\t412F97DED69E29E2A7146162142A9FF5 /* RCTI18nUtil.m */,\n\t\t\t\t9E1FB69666F2C09161B2E1A2535CC43A /* RCTLayoutAnimation.h */,\n\t\t\t\t3F5C6F9D16A1A659B8CB769DDEC445DE /* RCTLayoutAnimation.m */,\n\t\t\t\t41EC212BC4905E428935BED6DA109744 /* RCTLayoutAnimationGroup.h */,\n\t\t\t\t9A9617B1637CABEDDB4A95483334CB93 /* RCTLayoutAnimationGroup.m */,\n\t\t\t\t9D5CD2B433F8011D807EABA3442374E7 /* RCTRedBoxExtraDataViewController.h */,\n\t\t\t\tA24606F72343E19E228B3000540EC8FD /* RCTRedBoxExtraDataViewController.m */,\n\t\t\t\t034CBF9A353EFD13BB30389694CD06AF /* RCTSurfacePresenterStub.h */,\n\t\t\t\t051EC8684B270AADB5DFA351ABA355C2 /* RCTSurfacePresenterStub.m */,\n\t\t\t\tF9E3E83E4B4A307A114208C3D1F55BC8 /* RCTUIManager.h */,\n\t\t\t\t203BEC3028800526EBC07D8825427B33 /* RCTUIManager.m */,\n\t\t\t\t2DACD0189E12C716542A13351B01B317 /* RCTUIManagerObserverCoordinator.h */,\n\t\t\t\t1B9B081A11AD725344E711226D80CA4B /* RCTUIManagerObserverCoordinator.mm */,\n\t\t\t\tE52A7A09F41E9EADFAE686BE3A607CBD /* RCTUIManagerUtils.h */,\n\t\t\t\t1749F4295539F83F4BA4637FE2C39F34 /* RCTUIManagerUtils.m */,\n\t\t\t);\n\t\t\tname = Modules;\n\t\t\tpath = React/Modules;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB55C8F8258F2B3E9506350BCA4960CD1 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA063348780E28C80CDFC691EE7F2C78D /* React-RCTText-dummy.m */,\n\t\t\t\t7CF233AD4BB7085F76873B35632274C6 /* React-RCTText-prefix.pch */,\n\t\t\t\t4C664E2A68FE1D2FA0458ED4485088A9 /* React-RCTText.debug.xcconfig */,\n\t\t\t\tD9F52BE4E914A8BB9CDE60E8D6D9067A /* React-RCTText.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../native/iosTest/Pods/Target Support Files/React-RCTText\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB5929053EED1A42988DD52096135D1DF /* platform */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t17687E905102CFB96BD9AEFECEF5AE1F /* ios */,\n\t\t\t);\n\t\t\tname = platform;\n\t\t\tpath = react/renderer/textlayoutmanager/platform;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB94E9D8C2704D4246938A5CC85A14EBE /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0BFAD875BDFCB017A45CCF7A1AD8AE34 /* boost.debug.xcconfig */,\n\t\t\t\t7157DE4FF39A888005019A6919C6304D /* boost.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../Target Support Files/boost\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tBAC1F5670DD858B1236132F8639008E3 /* React-jsitracing */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEBFE74400A08332EC438126C9FF15469 /* Pod */,\n\t\t\t\t1BCE377F5B918C589D8C41BFEE151E47 /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-jsitracing\";\n\t\t\tpath = \"../../../node_modules/react-native/ReactCommon/hermes/executor\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tBB754E89BE3831E5159A960856345A34 /* textlayoutmanager */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tBD485A11989B9D9DA494C47A98A5F09D /* TextLayoutContext.h */,\n\t\t\t\t97A95308B6D47ED59BD75934355ADDF6 /* TextMeasureCache.cpp */,\n\t\t\t\tA8AFB5F8828D81AB1CE785F5BD4DC61F /* TextMeasureCache.h */,\n\t\t\t\tB5929053EED1A42988DD52096135D1DF /* platform */,\n\t\t\t);\n\t\t\tname = textlayoutmanager;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tBBA1DA7B3C252A6F03099451D25F6163 /* RCTTextHeaders */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4B62C6CE9D343C56E332C5816AC631E6 /* RCTConvert+Text.h */,\n\t\t\t\tB6501460FCAA027C674AB185B605DE1E /* RCTTextAttributes.h */,\n\t\t\t\t169BFFC72EEA61E28D560B57CD831CD0 /* RCTTextTransform.h */,\n\t\t\t\t92018AB7F0340B3EA90BB235642BF56E /* BaseText */,\n\t\t\t\t09B2533288AEB5522A0AC33E92C2A79E /* RawText */,\n\t\t\t\t92E616D44D7824072E698371D7620AB6 /* Text */,\n\t\t\t\t793AE592768F2FF4FE8BCFFBD5461C49 /* TextInput */,\n\t\t\t\t28B32097553A4D29F0613AE45FD6F381 /* VirtualText */,\n\t\t\t);\n\t\t\tname = RCTTextHeaders;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tBE20CA3BB20E13CB19270700923F126B /* Pre-built */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0BE37755D7657BED9301FBB569B8B3F9 /* AsyncDebuggerAPI.h */,\n\t\t\t\tCF0CC535988C4C141BA1AF044FA0790A /* Buffer.h */,\n\t\t\t\tF0868E477C8DA25C9CE631F4131B2C2F /* CallbackOStream.h */,\n\t\t\t\tF21C8B792A111FE6F3696917CC8DD458 /* CDPHandler.h */,\n\t\t\t\tF5DE3D6B8F9687E6EC775B55B6F528E4 /* CompileJS.h */,\n\t\t\t\t553967D7C1E460B2FF3E819215A2EC75 /* CrashManager.h */,\n\t\t\t\t4ECA42F97FBA48C55D95F16BEB240CE4 /* CtorConfig.h */,\n\t\t\t\t4A3E59A3CCA7D3024E30ACFBCE006065 /* DebuggerAPI.h */,\n\t\t\t\t32C612DD10C738AA24310145376A8756 /* DebuggerTypes.h */,\n\t\t\t\t3D85474333A22BB675B886226092484B /* GCConfig.h */,\n\t\t\t\t9A62D11BB82CB6A24A13CAE4D0F6632A /* GCTripwireContext.h */,\n\t\t\t\t9668F22AD81B720182D9C7F1133935F2 /* hermes.h */,\n\t\t\t\tBA8E2E00FBECFA8789E6D5D77E043D32 /* hermes_tracing.h */,\n\t\t\t\tC6CD5E1D0A40A3BD51F58A9904E1EF53 /* HermesExport.h */,\n\t\t\t\t8399C3FD21BCD992B7C6EF8E65D7C561 /* JSONValueInterfaces.h */,\n\t\t\t\t3329F3B4064042B4C1D4BDA08241A80B /* JSOutOfMemoryError.h */,\n\t\t\t\t68A69845486F5D6ABF2D33019902E0E4 /* MessageConverters.h */,\n\t\t\t\t3D158DF7B71452128F42AE32CD1FB9F8 /* MessageInterfaces.h */,\n\t\t\t\t5E08C1229511DE5F11A5D0235BB42789 /* MessageTypes.h */,\n\t\t\t\t5F7413AEE06FEB42B977D20F6A6C5D5E /* MessageTypesInlines.h */,\n\t\t\t\tFAB1A2AAEAD536D71C08D8CE9C14F3D8 /* RemoteObjectConverters.h */,\n\t\t\t\tCAACD991F2CF50067B4447D8419F5B05 /* RuntimeAdapter.h */,\n\t\t\t\t52FB16E6F0925BA9FE8A9E2D77086C08 /* RuntimeConfig.h */,\n\t\t\t\tE0A2C37B0C4B50C0E4B5366E9B824F12 /* RuntimeTaskRunner.h */,\n\t\t\t\t83D60FC0472C44AE0EB307C8EBC943AA /* SynthTrace.h */,\n\t\t\t\tF713F14C913C9157BF2CDF26BF5F279C /* SynthTraceParser.h */,\n\t\t\t\t193D60EE177645F7547D71A2810D872F /* ThreadSafetyAnalysis.h */,\n\t\t\t\t341947EF5C4F684C9D99E78AEFE835DC /* TimerStats.h */,\n\t\t\t\t3C3F05EDE07B5034C963F9F6CE67E5A9 /* TraceInterpreter.h */,\n\t\t\t\t558A2EBBB9500DC131AEC7C0A404E3B9 /* TracingRuntime.h */,\n\t\t\t\tD7F184A9DEEFB2AB2A561E78336A49B5 /* Frameworks */,\n\t\t\t);\n\t\t\tname = \"Pre-built\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tBEC512EF35E614CECC60A855831857E0 /* src */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t340139964ADFE59B05FAC656AF821E52 /* fmdb */,\n\t\t\t);\n\t\t\tname = src;\n\t\t\tpath = src;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC12F12E3B279B81398C6639DEECE0A6D /* debug */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC7956DABB206C95A799C60F678F09BB6 /* AssertFatal.cpp */,\n\t\t\t\t6EBA55B04BADD1F4ABB709051EF06C89 /* AssertFatal.h */,\n\t\t\t\t37F9065181BD972C82D47E7F46FFBBAA /* Log.cpp */,\n\t\t\t\t45D864901AF697040097CE5D0FCD717F /* Log.h */,\n\t\t\t);\n\t\t\tname = debug;\n\t\t\tpath = yoga/debug;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC491125B0694A5263BA6D6B79B51B471 /* Profiler */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE927497A3701D0E6AEB8ED2AF83B915B /* RCTMacros.h */,\n\t\t\t\t6C00DC34CBF0C27CE15A57901CFE39D1 /* RCTProfile.h */,\n\t\t\t\t4ABE2E714C1175CCFDB7C0F72CE4B611 /* RCTProfile.m */,\n\t\t\t\t942322E848A28FE125A1C9A84F16D548 /* RCTProfileTrampoline-arm.S */,\n\t\t\t\t4340CE46967CD10BEFC7859B55898A6D /* RCTProfileTrampoline-arm64.S */,\n\t\t\t\t45BE03CDBA0ACF037784CA42392A374F /* RCTProfileTrampoline-i386.S */,\n\t\t\t\tCCC91F4882F9AD8CBAA5347E76589517 /* RCTProfileTrampoline-x86_64.S */,\n\t\t\t);\n\t\t\tname = Profiler;\n\t\t\tpath = React/Profiler;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC51C39BEFC7949604ADA6AC55E5398EC /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t70E1E31923E3DCF47FC3FD8EA049C063 /* React-RuntimeApple.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC5534E19718C643BAE8858AE6BB0FE84 /* shared */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t79BAE705D4C5DDF1F3222FC86D3DC110 /* Database.cpp */,\n\t\t\t\t0991F79F05F020ABEA8DE3AFD72A7B08 /* Database.h */,\n\t\t\t\tB8C5097DA5EAA46AB4FF88AA6F8D6F5B /* Database-batch.cpp */,\n\t\t\t\tC339EF963613DD1C7090A3FB6A1FE530 /* Database-jsi.cpp */,\n\t\t\t\tC22873AF49E658011AF710A68003CFF7 /* Database-query.cpp */,\n\t\t\t\t79E82AE02BC6B9CCABF7C62D230F794F /* Database-sqlite.cpp */,\n\t\t\t\tC508463B95043E7E700C0414CB55E23A /* Database-turboSync.cpp */,\n\t\t\t\tDD3A4B3EC7E715CA1E677122514FEFE8 /* DatabaseBridge.cpp */,\n\t\t\t\t0A190A345B19C93427A45B7A6CC52FDF /* DatabasePlatform.h */,\n\t\t\t\tE0D2348E6FB9A55FE8BC6E93389B9432 /* JSIHelpers.h */,\n\t\t\t\tBBC2C48E868D4877BF151ED8DFB3604A /* Sqlite.cpp */,\n\t\t\t\t8E38DDBA8B3F295D182A2E60FC4F968B /* Sqlite.h */,\n\t\t\t);\n\t\t\tname = shared;\n\t\t\tpath = native/shared;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC5B10AF863EC53C54719EC59F9CC650D /* React-RCTNetwork */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t976E60D841E3AEC485885E2A36C843AC /* RCTDataRequestHandler.mm */,\n\t\t\t\t6424FC955FE5FD23D675EE7BA5D86749 /* RCTFileRequestHandler.mm */,\n\t\t\t\t445199601546E45056A827DFB23F4148 /* RCTHTTPRequestHandler.mm */,\n\t\t\t\t3C987DB1C26CAE3839EA088A41B167DF /* RCTNetworking.mm */,\n\t\t\t\t4811CBBB4C46F7C891F1F7E426628CBD /* RCTNetworkPlugins.mm */,\n\t\t\t\tC2CB66217B1E850D02CEDC8E10195C8A /* RCTNetworkTask.mm */,\n\t\t\t\tB322D4E234E4C7B133CEB5251E96FFA5 /* Pod */,\n\t\t\t\t7BD5E4D43BF00F3F339A867FCAD643D8 /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-RCTNetwork\";\n\t\t\tpath = \"../../../node_modules/react-native/Libraries/Network\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC5E0AD954B2C8CBF163BFEA23778781C /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t86FBADB1ADE032495E4DC6B80BC37BFB /* LICENSE */,\n\t\t\t\t963DAA4960B3974FFBB8DE571F07B048 /* README.md */,\n\t\t\t\tCA9B104BA2C9A1DDE13179A64BD014B9 /* WatermelonDB.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC609D0506D4AF74A3EAD5ACBA228FE4B /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t58025C2DBA6481310CDDD6E2AF2341E3 /* React-utils.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC62706AD1BF7CA5DF853101FF69F904A /* CxxUtils */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4B3894240F9F245719EDB8B1ADBE0FC7 /* RCTFollyConvert.h */,\n\t\t\t\tC2A33F80F6DC091C0F0D9E733BE5F440 /* RCTFollyConvert.mm */,\n\t\t\t);\n\t\t\tname = CxxUtils;\n\t\t\tpath = React/CxxUtils;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC6E76E34C429F02CBDC707F1A8342D80 /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t210ED618EB38145265ACDB75A78B11AB /* React-jsiexecutor.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC770325626FBC1F743FBD2F22EC31C72 /* fmt */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1731535F9FF01DC7DE5758D88594F0CD /* args.h */,\n\t\t\t\tC00CAED0C07FE50074D84727D68C0B0A /* chrono.h */,\n\t\t\t\tB32465A7B304C55D416657F5078DC373 /* color.h */,\n\t\t\t\t8F172D220F95765CFA361637BAAAA417 /* compile.h */,\n\t\t\t\t5E745C18EFA47BE9828C298066E9F6F5 /* core.h */,\n\t\t\t\t52FAACC98D9676B0C965D8484DF9C51E /* format.cc */,\n\t\t\t\t22BBDCDC9E5BB7D47CB6C63BAD034B4B /* format.h */,\n\t\t\t\t808C3DF73EDCFD47A21FDB81992E3ADB /* format-inl.h */,\n\t\t\t\tE8A80DDDD78CE9D5045965620EF601A1 /* os.h */,\n\t\t\t\t5D826D3061A245096B1C382B690FA981 /* ostream.h */,\n\t\t\t\t08986599EA9FB16EDB0C58CAC0A405F8 /* printf.h */,\n\t\t\t\t75A1EC0889B2FF4178C4B15A8C8EAE88 /* ranges.h */,\n\t\t\t\tB6A866CA3EE1ADEEDF264EFCEC0F0F57 /* std.h */,\n\t\t\t\tD181C872FF8059D494F78C6BAF4765FA /* xchar.h */,\n\t\t\t\tD12D82697A8CE4747CC012D92562A376 /* Support Files */,\n\t\t\t);\n\t\t\tname = fmt;\n\t\t\tpath = fmt;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC84EDCEBD7C570455A4C055316344D44 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF3EC6BC861DA61263020A86CB2DDC307 /* React-jserrorhandler-dummy.m */,\n\t\t\t\tD1AD68A2EB98FCB1663BE5F5916FA962 /* React-jserrorhandler-prefix.pch */,\n\t\t\t\t7125A220ACBD1ACDAEC0A33004BF401B /* React-jserrorhandler.debug.xcconfig */,\n\t\t\t\t9414F0292C4CA9913CEEC7F61F3E32B3 /* React-jserrorhandler.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../native/iosTest/Pods/Target Support Files/React-jserrorhandler\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC92330707FC79B77F1F9F67268D78E99 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEC10CD8ABAB17D209CCD5FD3E42F2367 /* React-utils.modulemap */,\n\t\t\t\t5AC69D8640FF5ADCACD89B82CB9E1110 /* React-utils-dummy.m */,\n\t\t\t\t1D3B27D8E985D0BA1FD18A34437498E8 /* React-utils-prefix.pch */,\n\t\t\t\tAE729B821BDA784B45AFF8A65039D05F /* React-utils-umbrella.h */,\n\t\t\t\t997842162A2D57DA5A2636E554A28F19 /* React-utils.debug.xcconfig */,\n\t\t\t\tDB93F82879D24A74491FCA910E31A733 /* React-utils.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../../native/iosTest/Pods/Target Support Files/React-utils\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC9FCE5218763A0186A2053CC46F95127 /* React-CoreModules */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t79F8EC97641C2D3B51B87DB668615513 /* CoreModulesPlugins.mm */,\n\t\t\t\tBB7DBF3AC428AEC78260C9DC4CA49106 /* RCTAccessibilityManager.mm */,\n\t\t\t\t27D5B6E7F5A0D017C0081BAF95A9E8AF /* RCTActionSheetManager.mm */,\n\t\t\t\tD5F538BF3285BAC9B7F01B8E674355D6 /* RCTAlertController.mm */,\n\t\t\t\tA0CFE0D44D175E1A391C2129A3C3EBEF /* RCTAlertManager.mm */,\n\t\t\t\t4DA4CDB70B04DEA86A7EA3B9F6B6C060 /* RCTAppearance.mm */,\n\t\t\t\tD3897A8D57FA7C5B759902F2D3CEA752 /* RCTAppState.mm */,\n\t\t\t\tD2540C4EDDFB7CCCB96D25E31E2F57B8 /* RCTClipboard.mm */,\n\t\t\t\t3B03D90250BBDC20A58910E9BAE12F13 /* RCTDeviceInfo.mm */,\n\t\t\t\tF277FEF63DB910E42C66936C8592693A /* RCTDevLoadingView.mm */,\n\t\t\t\t1A57B42E48BE086DEBC492BDE3BBD3C9 /* RCTDevMenu.mm */,\n\t\t\t\t7DB6E20FB18E511B8C98C3656B364612 /* RCTDevSettings.mm */,\n\t\t\t\tFBC65E4ADA0C93CAF6F0857E1767393E /* RCTEventDispatcher.mm */,\n\t\t\t\tB7DAE91AFA1AEC4FD04392E412D1D4CE /* RCTExceptionsManager.mm */,\n\t\t\t\t963A0C06992A9D8797E0E1BA9A14DB04 /* RCTFPSGraph.mm */,\n\t\t\t\t735061C18CFE3076A4C204A7CCE1D301 /* RCTI18nManager.mm */,\n\t\t\t\tED075D1904D8F2A132AD09A4B59B2BE9 /* RCTKeyboardObserver.mm */,\n\t\t\t\tAD4FFB5F1B30B5584201585D67221D38 /* RCTLogBox.mm */,\n\t\t\t\t498AA16C83135C6DAEFCEAE97628D0D5 /* RCTLogBoxView.mm */,\n\t\t\t\tA50AFF02E96B2A9FAD9F4CDF5D05C365 /* RCTPerfMonitor.mm */,\n\t\t\t\t581AB95CD00868534D40A89FC7298A36 /* RCTPlatform.mm */,\n\t\t\t\t93802254A23BD2E21FC5B6FC137CB7EE /* RCTRedBox.mm */,\n\t\t\t\t959BD66DF33D8DD073B3E7135B2954F7 /* RCTSourceCode.mm */,\n\t\t\t\t99F1158A135CC58252D861686496E8DE /* RCTStatusBarManager.mm */,\n\t\t\t\t0C8E237AA818FABF9B7C6CDB03FA448A /* RCTTiming.mm */,\n\t\t\t\tB3A27AAA848CC83E397DC39A9E46B682 /* RCTWebSocketExecutor.mm */,\n\t\t\t\t78BE41CF03440AB09080B75960AF8455 /* RCTWebSocketModule.mm */,\n\t\t\t\t6BE57199DB090FF99258CF386E542C42 /* Pod */,\n\t\t\t\t4199B976A5C419A1F04918D0722A7C49 /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-CoreModules\";\n\t\t\tpath = \"../../../node_modules/react-native/React/CoreModules\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tCB1C27507F8EEBB9AEC765B36425CCE2 /* Switch */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE3C150EC730101E36E8725C466227757 /* RCTSwitchComponentView.h */,\n\t\t\t\tB5F4950574A43023D083A3E3731760A1 /* RCTSwitchComponentView.mm */,\n\t\t\t);\n\t\t\tname = Switch;\n\t\t\tpath = Switch;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tCDF374E5D2600436F59137E53DD04D31 /* RCTAnimationHeaders */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t2AE808F4B51B3F24D61558A014CF22A5 /* RCTAnimationPlugins.h */,\n\t\t\t\t16ADA7CA003A807781299F67A1578DF4 /* RCTAnimationUtils.h */,\n\t\t\t\t16AFB3F99F57DB5AEF193C3CB1BC1A49 /* RCTNativeAnimatedModule.h */,\n\t\t\t\tC32C30AB7EF3BB474BC4B4DFD2FC61C0 /* RCTNativeAnimatedNodesManager.h */,\n\t\t\t\tD4758B7FCDEC2C0806CEE3D106040093 /* RCTNativeAnimatedTurboModule.h */,\n\t\t\t\t4A46F00ADE41243FF50380AFC2AD40BC /* Drivers */,\n\t\t\t\t10FFE0FE0711EED444C4D76DA41F2C38 /* Nodes */,\n\t\t\t);\n\t\t\tname = RCTAnimationHeaders;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tCF1408CF629C7361332E53B88F7BD30C = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9D940727FF8FB9C785EB98E56350EF41 /* Podfile */,\n\t\t\t\t5C6B0CD72E8A9F5C6D91CAD1C829C7D8 /* Development Pods */,\n\t\t\t\tD89477F20FB1DE18A04690586D7808C4 /* Frameworks */,\n\t\t\t\t783EF0CE31D3DCFC7A57A0C0ECD52B61 /* Pods */,\n\t\t\t\t6ED0E8A627772310985098275F934F04 /* Products */,\n\t\t\t\t922AD62EA7116A32C0061BE4E0EACDAA /* Targets Support Files */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tCF850A691E67115665F695CA710F2E18 /* React-RCTVibration */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4F21E8185A97B7403E0532DBCEAE20ED /* RCTVibration.mm */,\n\t\t\t\t8FA3CC41DE47D337EEEC4F2523A5A366 /* RCTVibrationPlugins.mm */,\n\t\t\t\t1FDC21BFAA89EDFEA43D90A05DE15156 /* Pod */,\n\t\t\t\t9C9762AD0A803BE78CA3EF2499AE4C3A /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-RCTVibration\";\n\t\t\tpath = \"../../../node_modules/react-native/Libraries/Vibration\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD03F2C1C0E708D1EE41BA8FC148D50E6 /* TextInput */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE1530C1A41641E337C100090EDB4CD24 /* RCTBackedTextInputDelegateAdapter.mm */,\n\t\t\t\t857ABB199F3E6193128196415203918E /* RCTBaseTextInputShadowView.mm */,\n\t\t\t\tEB9567C0DEFF8F845D6478F3CFDBD1AF /* RCTBaseTextInputView.mm */,\n\t\t\t\tF6BD4677A9809440AF9F9498F2E0115B /* RCTBaseTextInputViewManager.mm */,\n\t\t\t\tA846AD31825FC26747481C82D51B3091 /* RCTInputAccessoryShadowView.mm */,\n\t\t\t\t1DC27EF5E8E8BA5F9132B0790BA1C022 /* RCTInputAccessoryView.mm */,\n\t\t\t\t85234EF8449BC006516D4A6A62B9F438 /* RCTInputAccessoryViewContent.mm */,\n\t\t\t\tBCA23E868E68363495BB8DE9AA165F77 /* RCTInputAccessoryViewManager.mm */,\n\t\t\t\t75AFE3EB6154E61D88A4F383A81B33F0 /* RCTTextSelection.mm */,\n\t\t\t\t1C5BD8DCB4B8638E0C634F76212A69CB /* Multiline */,\n\t\t\t\t05D208CCDDA721B65483F6B6D4343BF1 /* Singleline */,\n\t\t\t);\n\t\t\tname = TextInput;\n\t\t\tpath = TextInput;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD0FE7326D90BDBB8817B58F84A343BD0 /* React-Mapbuffer */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t020982AF78C5E396F3E5F3B1DAB98A95 /* MapBuffer.cpp */,\n\t\t\t\tBAA3CCBDA9FDF8609E0495A48B080979 /* MapBuffer.h */,\n\t\t\t\t0BD79853D3326455B2119D890DC49815 /* MapBufferBuilder.cpp */,\n\t\t\t\t3954F92E91DCCCD316FC570C39037C55 /* MapBufferBuilder.h */,\n\t\t\t\tFD8D4E4ECFB0CC25130AE3BEED4A319A /* Pod */,\n\t\t\t\t7D83EBCBEB0E38F249D38F10862CE71D /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-Mapbuffer\";\n\t\t\tpath = \"../../../node_modules/react-native/ReactCommon\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD12D82697A8CE4747CC012D92562A376 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t267039C69B6ECCDE54B5EF1AD931D1C0 /* fmt-dummy.m */,\n\t\t\t\t46EDCFA392F4FA15E1D6087289E0B88B /* fmt-prefix.pch */,\n\t\t\t\tA275DD42FB75440C81B2F60BD6B23196 /* fmt.debug.xcconfig */,\n\t\t\t\t77CE993F9446B711B336A9AF061A5504 /* fmt.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../Target Support Files/fmt\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD14FDBC87BCB72B38F032D1F010498A1 /* React-RuntimeCore */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF310EF16EE5EAA4714DFD2F1713D1B73 /* BindingsInstaller.h */,\n\t\t\t\tA1EEF0D5633DA10F123E110EDC4C4947 /* BridgelessJSCallInvoker.cpp */,\n\t\t\t\tE9B0012D9AC4C6EE1721D712922AF216 /* BridgelessJSCallInvoker.h */,\n\t\t\t\t145565A2AB5DD84BEAFA27EAFA2F4141 /* BridgelessNativeMethodCallInvoker.cpp */,\n\t\t\t\t77660F5EBDC0FC5CF88F31395F69A2D6 /* BridgelessNativeMethodCallInvoker.h */,\n\t\t\t\t4FE6AAB9CCD62E8CE2B1E03FA145C8B8 /* BufferedRuntimeExecutor.cpp */,\n\t\t\t\t5D8D501AFD4360EBEB5A66144AEC1729 /* BufferedRuntimeExecutor.h */,\n\t\t\t\t6536CE777152C1FAFBE3DC240DF67324 /* JSRuntimeFactory.cpp */,\n\t\t\t\tD2E2734D8657ABDA8E52005D327C59A4 /* JSRuntimeFactory.h */,\n\t\t\t\t1C7F9675F0DDF7D607F4527AEEA7CE9A /* PlatformTimerRegistry.h */,\n\t\t\t\tD82A92B30EAD44574D7D78331C054CBF /* ReactInstance.cpp */,\n\t\t\t\tD50E86E9CDA03CB5CEA275C7EE896DD2 /* ReactInstance.h */,\n\t\t\t\tC178BA891B154BE1B7A5B0CF16AFD27D /* TimerManager.cpp */,\n\t\t\t\t0F8273DFC8BCEB15B1ACE7AA5FB60DFA /* TimerManager.h */,\n\t\t\t\t4AFD33C580B9C27DFC196AD23BFED6E7 /* nativeviewconfig */,\n\t\t\t\t46AB12B78F8981DAECDCA361493F2B5C /* Pod */,\n\t\t\t\t205065C8C5001FF4D791D75300C3DDAB /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-RuntimeCore\";\n\t\t\tpath = \"../../../node_modules/react-native/ReactCommon/react/runtime\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD4EBE8B064BC082A240389166A5EC4F8 /* renderer */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9AE2770F61ACF53CF54F135CA8071A0E /* textlayoutmanager */,\n\t\t\t);\n\t\t\tname = renderer;\n\t\t\tpath = renderer;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD72407561996DAEEB789275205FC335D /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t128F50FE92E188CCCF4F6F5CFB09C64F /* LICENSE */,\n\t\t\t\t62BB6D3A4CA3201C55AA818B8A0753A0 /* README.md */,\n\t\t\t\t673B55D5784B9139A1BB1AEE5F4945A2 /* simdjson.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD796999F7EB66C9E901D5459591C6456 /* Fabric */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDC2247332E34E9A5EEAC651BFE23CE54 /* AsymmetricThreadFence.h */,\n\t\t\t\t357C89461C2B2C6319BF4ADE3900971C /* AtomicNotification.h */,\n\t\t\t\t96489235CABA0BF8A10434FC133718C8 /* AtomicNotification-inl.h */,\n\t\t\t\tBC6B8699949BC42E05A2CD3F716AFC65 /* AtomicRef.h */,\n\t\t\t\t22BF4B17D357A3BD3840AF11EBE43257 /* AtomicStruct.h */,\n\t\t\t\tC9BBAB8DD3A07A56FC902CC374E80A3B /* AtomicUtil.h */,\n\t\t\t\tAFE2AC3DE4D98F6A8B6D36ADB8E51F46 /* AtomicUtil-inl.h */,\n\t\t\t\t1F4BF0D6B00930EFF4155DC9B790AFDD /* Baton.h */,\n\t\t\t\t47ECF5C97B3CE613ADC79EB219369BD2 /* CacheLocality.cpp */,\n\t\t\t\tB0A1643BF71DE16FFA228713DA55E535 /* CacheLocality.h */,\n\t\t\t\tF9281ACFABCEF5289629EF6589504A67 /* CallOnce.h */,\n\t\t\t\tDB05D38A61483D308412FA789EE36CBC /* DelayedInit.h */,\n\t\t\t\t1C93DB36FA986D128CB97DE275C7A0B4 /* DistributedMutex.h */,\n\t\t\t\t25B4E76DD481D3490220E28604E55673 /* DistributedMutex-inl.h */,\n\t\t\t\t55EADA43B34BE3D62BAE2D869390C842 /* Futex.cpp */,\n\t\t\t\t91E5E966C9BA06A775879A6EFFEF786D /* Hazptr.h */,\n\t\t\t\t672462DC44BB30457BE236484F3C6E87 /* Hazptr-fwd.h */,\n\t\t\t\t099CB5926F7A7C10C82306F50F31CAE7 /* HazptrDomain.h */,\n\t\t\t\tBB06B409B4DDC6FA88630157B314F883 /* HazptrHolder.h */,\n\t\t\t\t66C9CDB63BA2D2FD4FCD5F884193C864 /* HazptrObj.h */,\n\t\t\t\t3FFEDA5AF4FED3EB1CC515BC9BAB2760 /* HazptrObjLinked.h */,\n\t\t\t\t21CDEC81B1AACA4065BD3385AB630454 /* HazptrRec.h */,\n\t\t\t\tD802137E8093DB1F0B0848206D7FCB8E /* HazptrThreadPoolExecutor.h */,\n\t\t\t\tC7891A1695A92EF0EE3D79FC7792120E /* HazptrThrLocal.h */,\n\t\t\t\t256EFD340D35D7E450AACBE294E874A8 /* Latch.h */,\n\t\t\t\tC57BEDEC1840FD8209B8FAD43401C99D /* LifoSem.h */,\n\t\t\t\t4E606A9762AB8D4C06B74BC1924936FF /* Lock.h */,\n\t\t\t\t0E956492B6B4F762B69C00A6496D5AD0 /* Malloc.cpp */,\n\t\t\t\t7A7404AB8D8964BFE0531C56682163D1 /* MicroSpinLock.h */,\n\t\t\t\tF138DB447C457AE8D0B432C87AB6D5C2 /* NativeSemaphore.h */,\n\t\t\t\tA4DBF56470408F62F5CFC5811EC41C55 /* ParkingLot.cpp */,\n\t\t\t\t0D1AF6F139CF74E2FE8BDA319FFEE74E /* ParkingLot.h */,\n\t\t\t\t1BBB556BC44275845C988BDF27E10880 /* PicoSpinLock.h */,\n\t\t\t\tA945AE383969D5B4AC29974625C53F64 /* Rcu.h */,\n\t\t\t\t6551222A25B1F6FAF1575662C8BDA2AB /* RelaxedAtomic.h */,\n\t\t\t\t4F3F30A04837205FCBA040E0445525A6 /* RWSpinLock.h */,\n\t\t\t\tCA69419C699C779F51EC2294FE37593C /* SanitizeThread.h */,\n\t\t\t\tAD601E06293D3A3930BE7C2006B41F2B /* SaturatingSemaphore.h */,\n\t\t\t\t11C43FEC006F4FB4810E35B57EDCC84B /* SharedMutex.cpp */,\n\t\t\t\t2CCBE13D47A90960E21168709D81A256 /* SmallLocks.h */,\n\t\t\t\t1841AD95444E2505711CA1DEE133B7F8 /* ThrottledLifoSem.h */,\n\t\t\t\t1DD6F27078A03BF0ED7DCF3591290691 /* Utility.h */,\n\t\t\t\tD1C29624546038DCFAE9385CBC490A7F /* WaitOptions.h */,\n\t\t\t);\n\t\t\tname = Fabric;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD7F184A9DEEFB2AB2A561E78336A49B5 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tFD2AA627BA11571293760EA92516290E /* hermes.xcframework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD80B2E04C127C418884E728E8A977978 /* RCTBlobHeaders */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t181D4079537F9E8B578405C805CEE545 /* RCTBlobManager.h */,\n\t\t\t\t91946E0E55C67A006BFC6A09B6757F34 /* RCTFileReaderModule.h */,\n\t\t\t);\n\t\t\tname = RCTBlobHeaders;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD89477F20FB1DE18A04690586D7808C4 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tDBAFEAB2E7C7332DA31C98708F3A9637 /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t69486EEF399C8CC4D8DAE942C37D23FD /* React-RCTLinking.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tDC8EACDE4AF3CC4AF53714C50C9E43B9 /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tBB8765CFA285D06EB4EA1DE8DE702634 /* React-hermes.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tDDB3043473A4FC0439CCC1690F6C6C38 /* Multiline */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t15AD43283A6A2C9FC3B3AFE6DCF2E636 /* RCTMultilineTextInputView.h */,\n\t\t\t\t55B1D50AB670D1ED574D945561008297 /* RCTMultilineTextInputViewManager.h */,\n\t\t\t\tF6312EB0499C783D68B98C5D0AFAB4A7 /* RCTUITextView.h */,\n\t\t\t);\n\t\t\tname = Multiline;\n\t\t\tpath = Multiline;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE0A5B121D952F6317F2792EC9958D5E3 /* React-RCTActionSheet */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8881F374EF5A07A909ED7FC6E54D4926 /* Pod */,\n\t\t\t\t405D2A29856880C542E96FFF01AB4D38 /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-RCTActionSheet\";\n\t\t\tpath = \"../../../node_modules/react-native/Libraries/ActionSheetIOS\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE154B3C37FBBBA22F41876AC4AFD874F /* I18n */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8E76F01C60DFCE85A1C8CB416B3636D3 /* FBXXHashUtils.h */,\n\t\t\t\t650E79C6CD8DFAF97DD3E4B49C99A6BB /* RCTLocalizedString.h */,\n\t\t\t\t4181C0A4A1994121AF233A5C57DEC990 /* RCTLocalizedString.mm */,\n\t\t\t);\n\t\t\tname = I18n;\n\t\t\tpath = React/I18n;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE1B9AAA4CBCF3083A1AA8A1962070956 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t90E8031BF4BBAA174907FCBE801328F4 /* React-runtimescheduler-dummy.m */,\n\t\t\t\tD6E3C9F461BA9508AFA8E2471F36E21F /* React-runtimescheduler-prefix.pch */,\n\t\t\t\tEA980E88736BC513D1E4D3CF3B6A67E8 /* React-runtimescheduler.debug.xcconfig */,\n\t\t\t\t734BE1C2E4FE1B7AA7823A95F6F55FB4 /* React-runtimescheduler.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../../../native/iosTest/Pods/Target Support Files/React-runtimescheduler\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE435C56675DDB8A410B49F7C7073460A /* inputaccessory */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t12C530B1088E418C923CD9F26CBCAB6F /* InputAccessoryComponentDescriptor.h */,\n\t\t\t\t10CFAB7D8A0F2282F1390473E5C37F0A /* InputAccessoryShadowNode.cpp */,\n\t\t\t\t5176B30F1DFC1E15711AA1F63DEFEEE3 /* InputAccessoryShadowNode.h */,\n\t\t\t\tBF131B6BFD3FDF6FD3D006300FEC04E3 /* InputAccessoryState.h */,\n\t\t\t);\n\t\t\tname = inputaccessory;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE50F59EC71FBF8F64E1CAAD54D71774C /* ScrollView */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5466515A64A57AE3158EEA66741CDABC /* RCTCustomPullToRefreshViewProtocol.h */,\n\t\t\t\t3E169D2216CF9E719B147E7377742BBD /* RCTEnhancedScrollView.h */,\n\t\t\t\tA349B258597025E561C3C8C773B51674 /* RCTEnhancedScrollView.mm */,\n\t\t\t\t51B45045020F47D86FEF4BD034627881 /* RCTPullToRefreshViewComponentView.h */,\n\t\t\t\tE82D575C7FB3C2A029BADE7276472510 /* RCTPullToRefreshViewComponentView.mm */,\n\t\t\t\t671925498D3BA63FE33CF36268979415 /* RCTScrollViewComponentView.h */,\n\t\t\t\t63BFBBE25C646A1C221EEA23F4224C1D /* RCTScrollViewComponentView.mm */,\n\t\t\t);\n\t\t\tname = ScrollView;\n\t\t\tpath = ScrollView;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE695D43859938F2F0535DCEEC76C2EA9 /* Nodes */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDAEBDA32E972C2DD6BC87FC03C2F7B79 /* RCTAdditionAnimatedNode.mm */,\n\t\t\t\tC7CB9D39DA448A9F742A4B023B065E17 /* RCTAnimatedNode.mm */,\n\t\t\t\t5825A770C846E9DE0D37D57F8AE02E36 /* RCTColorAnimatedNode.mm */,\n\t\t\t\t0314883711F418F964E23FC8DC255846 /* RCTDiffClampAnimatedNode.mm */,\n\t\t\t\t18590B13A8701CBEA8A9383645C889B3 /* RCTDivisionAnimatedNode.mm */,\n\t\t\t\t9EED1EEAD5AA1DD78D49501ECED7AB7D /* RCTInterpolationAnimatedNode.mm */,\n\t\t\t\t375DFEFC5E87FCB287285426D6DAA812 /* RCTModuloAnimatedNode.mm */,\n\t\t\t\tAF0447D9E9E638217D6EABE45C7E0632 /* RCTMultiplicationAnimatedNode.mm */,\n\t\t\t\t717D5148DA07668AC04A61F52407FF5A /* RCTObjectAnimatedNode.mm */,\n\t\t\t\tF9741807E424A3C28F079A8146D8AF4D /* RCTPropsAnimatedNode.mm */,\n\t\t\t\tA613E889F5C29F0DAC3CCA3F322423D6 /* RCTStyleAnimatedNode.mm */,\n\t\t\t\tA07442CD10380BE0C2F7C19CA5D62FB6 /* RCTSubtractionAnimatedNode.mm */,\n\t\t\t\tDE4D8C3CE090B2BA0138B08B60165BFD /* RCTTrackingAnimatedNode.mm */,\n\t\t\t\t5742CED06F824159A9F9C6FCDF8F66EB /* RCTTransformAnimatedNode.mm */,\n\t\t\t\t62B08039C2AE783CAF032BCB76890355 /* RCTValueAnimatedNode.mm */,\n\t\t\t);\n\t\t\tname = Nodes;\n\t\t\tpath = Nodes;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE6EB6DD72A8650E83440A9AD73A354CA /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3EA8CBF160B60CE7141E34124CD98495 /* React-runtimescheduler.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE70F21A12A20C6724851C6CD41B425A1 /* React-RCTText */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0096A03750976681A81FDECEB7A7D8BE /* RCTConvert+Text.mm */,\n\t\t\t\t8980AF1403E1F2A16DA44CAC4004F1E9 /* RCTTextAttributes.mm */,\n\t\t\t\t5A4DFC42D5801C6801825A9C1CAD37A6 /* BaseText */,\n\t\t\t\t28763FCA9414FF721C7399FFAEF0EB3F /* Pod */,\n\t\t\t\t340E82E2438D743D828946C5B70EFC33 /* RawText */,\n\t\t\t\tB55C8F8258F2B3E9506350BCA4960CD1 /* Support Files */,\n\t\t\t\t411AD2DEE636250CEA28E7CD2D46AF64 /* Text */,\n\t\t\t\tD03F2C1C0E708D1EE41BA8FC148D50E6 /* TextInput */,\n\t\t\t\t832F23A26CFB74B21AC27D84BFD847D5 /* VirtualText */,\n\t\t\t);\n\t\t\tname = \"React-RCTText\";\n\t\t\tpath = \"../../../node_modules/react-native/Libraries/Text\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE7362482BFF22AC30709A403B38CB2BE /* React-runtimescheduler */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD4586CC35438203A980E60618B09852C /* primitives.h */,\n\t\t\t\tB9CF763D328B9FF7CD87693E3153F680 /* RuntimeScheduler.cpp */,\n\t\t\t\t5E78187A78E9550C8C47E82A7E0800C4 /* RuntimeScheduler.h */,\n\t\t\t\tD2E26EF832C651D9123567DC1E118CA8 /* RuntimeScheduler_Legacy.cpp */,\n\t\t\t\tBF9077AF110CAC64D90AC1EDA3F0B610 /* RuntimeScheduler_Legacy.h */,\n\t\t\t\t1D12F92E6DE4195516C44922291730FB /* RuntimeScheduler_Modern.cpp */,\n\t\t\t\t45D9999C07AC6FD97A5897196483760E /* RuntimeScheduler_Modern.h */,\n\t\t\t\t3F3E458396D3574B4ADE0076519B87B9 /* RuntimeSchedulerBinding.cpp */,\n\t\t\t\t949C0E997EA3B7239902690DA5D564D5 /* RuntimeSchedulerBinding.h */,\n\t\t\t\tAEF49BE28E7D87B31F7411604BFADC49 /* RuntimeSchedulerCallInvoker.cpp */,\n\t\t\t\t6D66D180322220310B33E06C2A6650D3 /* RuntimeSchedulerCallInvoker.h */,\n\t\t\t\tD7139195D968D34865DEE54652AEED4C /* RuntimeSchedulerClock.h */,\n\t\t\t\tBB8A5342B551F92B8A2537BCC6ED51F5 /* SchedulerPriorityUtils.h */,\n\t\t\t\t750B7BB6414518C2A827B8877B15A353 /* Task.cpp */,\n\t\t\t\t96FCCADF61AA384004BF02F11E1A50B9 /* Task.h */,\n\t\t\t\tE6EB6DD72A8650E83440A9AD73A354CA /* Pod */,\n\t\t\t\tE1B9AAA4CBCF3083A1AA8A1962070956 /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-runtimescheduler\";\n\t\t\tpath = \"../../../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE9848832428BBAC0DCE23FA8BD7350ED /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t42F83B7067F1043FA268569B56994602 /* React-jsiexecutor-dummy.m */,\n\t\t\t\tC6ADA6DF7563BCB106FC1DEC13D21F53 /* React-jsiexecutor-prefix.pch */,\n\t\t\t\t1544C565704FC17B15EBCF4F926F4C60 /* React-jsiexecutor.debug.xcconfig */,\n\t\t\t\t4D27045A96C63465EC6F9A1AED2DED9D /* React-jsiexecutor.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../native/iosTest/Pods/Target Support Files/React-jsiexecutor\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tE9C7F1CEBC634C863FBF22F630470A84 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t88DDF4F26D766FFE558EA52E582A0879 /* React-nativeconfig-dummy.m */,\n\t\t\t\tA8CB248587D48F0A957641CB162717A4 /* React-nativeconfig-prefix.pch */,\n\t\t\t\t1AD8831E19FF419852060A20EFC9943A /* React-nativeconfig.debug.xcconfig */,\n\t\t\t\t6F03806CF8FEA9AE1097FB463956AAD4 /* React-nativeconfig.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../native/iosTest/Pods/Target Support Files/React-nativeconfig\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEA57B66692E93B0A9A9E960BC4CEA037 /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tE5961E4180C070D8C68E4EDF389C0A2C /* React-RCTSettings.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEACCDFAE137CB6FCDBAA4DCD752C0EBD /* React-ImageManager */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA44876BED8E87761881D41D005CCA0E7 /* ImageManager.mm */,\n\t\t\t\t645F364C7D0579436F0E777A3156F8C5 /* RCTImageManager.h */,\n\t\t\t\tEBC95FE616AEF3E48E3F113E5BB076C4 /* RCTImageManager.mm */,\n\t\t\t\t4BC7B5A86B19E285F310EB16BDE027DE /* RCTImageManagerProtocol.h */,\n\t\t\t\t4C0E7A0629DD1A33991E0281C1D7EA6F /* RCTImagePrimitivesConversions.h */,\n\t\t\t\t52E49CCBB965394C8B3C6525BA37644D /* RCTSyncImageManager.h */,\n\t\t\t\t34310C6EE4D078D016C21151602FCF90 /* RCTSyncImageManager.mm */,\n\t\t\t\tA3E926B6B99537D639A917D6E500FDC1 /* Pod */,\n\t\t\t\t6824F05EE4AE2E8974BD71AAFD1A6F32 /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-ImageManager\";\n\t\t\tpath = \"../../../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEB2153CF68A1D5871553D3223D7F5456 /* React-jsiexecutor */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t80C0E79E7C53BAA868A44B3B53AEDC66 /* JSIExecutor.cpp */,\n\t\t\t\t2AFDFA1B816E14B8A48D630F83DC6574 /* JSIExecutor.h */,\n\t\t\t\tF89962533E4FDDA2F999DA26DF69D135 /* JSINativeModules.cpp */,\n\t\t\t\t6DB0EF48E6F6F59EEEBA2E0AB6C7E410 /* JSINativeModules.h */,\n\t\t\t\tC6E76E34C429F02CBDC707F1A8342D80 /* Pod */,\n\t\t\t\tE9848832428BBAC0DCE23FA8BD7350ED /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-jsiexecutor\";\n\t\t\tpath = \"../../../node_modules/react-native/ReactCommon/jsiexecutor\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEB32039CA10C7E1FEE8133FB3FA9F43E /* componentregistrynative */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDD04C8CE4CFE3A8CBF7FEFC33B333653 /* NativeComponentRegistryBinding.cpp */,\n\t\t\t\tD6270B25D28322D56823F16246CD7C57 /* NativeComponentRegistryBinding.h */,\n\t\t\t);\n\t\t\tname = componentregistrynative;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEBFE74400A08332EC438126C9FF15469 /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t411C75B9AC2022189E60C99722CAFE94 /* React-jsitracing.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEC087B89F1F6A6A61F86EA18064B2411 /* React-logger */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0BD7AC8D29513BC50E69DFF8F4FD5522 /* react_native_log.cpp */,\n\t\t\t\t944561AB0FA2778925F3B3BD1ACD8B3C /* react_native_log.h */,\n\t\t\t\t1DDCCBF023D859DCF237EE249B0F2BAD /* Pod */,\n\t\t\t\t04EF134638BEC021D2EE29A5DCDA421C /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-logger\";\n\t\t\tpath = \"../../../node_modules/react-native/ReactCommon/logger\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tED9447BEE8DFF868BCF24CC0D1B5B302 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t56124900DA31ECD2F222CD4A72DBF2BC /* React-jsinspector.modulemap */,\n\t\t\t\t7E0FE53778FF8DB18F69972C1000366F /* React-jsinspector-dummy.m */,\n\t\t\t\t45A5B3AB48BF8E29430504561E8566AA /* React-jsinspector-prefix.pch */,\n\t\t\t\t2F2BC9F716D9565E236295A6DE40D75C /* React-jsinspector-umbrella.h */,\n\t\t\t\t7B51B43D6B45FB260FFA0B15BFED390E /* React-jsinspector.debug.xcconfig */,\n\t\t\t\t30800F41E56952F66104FBA05648D6FB /* React-jsinspector.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../native/iosTest/Pods/Target Support Files/React-jsinspector\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEEDC3AEAD2C4BEF60F0534AA24B8C4A8 /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9A6F7F2DCBC2D9334AE0C6DE812A653E /* RCTDeprecation.podspec */,\n\t\t\t\t7291DE7A0A52B6E6CFC50DAF5E4DE540 /* README.md */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEF7F6D8BCCCAF26CB3A0B8AA094C293B /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t316C9C14CDBDF9673A95F2B8F066A5FF /* React-graphics.modulemap */,\n\t\t\t\tBBFA4AD81E9D3D79B1B796B93AE70766 /* React-graphics-dummy.m */,\n\t\t\t\t20A766A5111A8B644D96FABB67848743 /* React-graphics-prefix.pch */,\n\t\t\t\t34875B2D75347ECF94E81DEA4C80D47A /* React-graphics-umbrella.h */,\n\t\t\t\tB17B5D76BCAC42472B55462BAE850852 /* React-graphics.debug.xcconfig */,\n\t\t\t\tB8BDA25E90049F9C70AA8B349A93426F /* React-graphics.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../../../native/iosTest/Pods/Target Support Files/React-graphics\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF0E4C63621E9D8EECEF8366246B38675 /* React-debug */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF37B91C0C1BDCB74BF74E5D62F1A84B8 /* flags.h */,\n\t\t\t\tDEFDBFF0494ECD44CD200BB0D4A18A33 /* react_native_assert.cpp */,\n\t\t\t\t9D634D9C7371357029E41D29AD89E979 /* react_native_assert.h */,\n\t\t\t\t641D2E46DE82FDC74711D6550B34BB4B /* react_native_expect.h */,\n\t\t\t\t801DF56A3B3444504F8B94B2E6A7BF4C /* Pod */,\n\t\t\t\t969F416C821F0E4314954435098833B6 /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-debug\";\n\t\t\tpath = \"../../../node_modules/react-native/ReactCommon/react/debug\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF15703C1AFFDB1BB579B720667358414 /* React-cxxreact */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t361BB64B7C65C06474C5DFD08FD49799 /* CxxModule.h */,\n\t\t\t\tB9E96DFFC840B1E714C6D186A6B41717 /* CxxNativeModule.cpp */,\n\t\t\t\t7338ABD9F7418479DEDE3C5284F4FF6D /* CxxNativeModule.h */,\n\t\t\t\t06E5E1100A0E21FAB430C3718568BD64 /* ErrorUtils.h */,\n\t\t\t\tFF7AD4797D7F14A650587773DE9EDC89 /* Instance.cpp */,\n\t\t\t\tD9D0F263D9FACBEBBE1FBF1918CE0445 /* Instance.h */,\n\t\t\t\tA74ED5352ACAC24B76D223C19F8C62F3 /* JsArgumentHelpers.h */,\n\t\t\t\t2880387D5A0780F29656704977F6A10D /* JsArgumentHelpers-inl.h */,\n\t\t\t\tD666A8452A306A927BD1BED745FC5CB5 /* JSBigString.cpp */,\n\t\t\t\tAE85DC12DF3E30AE258ACC3C9861E350 /* JSBigString.h */,\n\t\t\t\tFC28EEFD6B8B7AAEB56E2A041A6DDCB5 /* JSBundleType.cpp */,\n\t\t\t\t0DF430B965D7F43DCCD92803B07AD0F7 /* JSBundleType.h */,\n\t\t\t\tC51C4243A2C445225C52EAD81BE81D66 /* JSExecutor.cpp */,\n\t\t\t\tC3D78A44188C6EFED4F1A257A66CB85A /* JSExecutor.h */,\n\t\t\t\t25A6D3EB52D98D8E0A7564596C8CE94A /* JSIndexedRAMBundle.cpp */,\n\t\t\t\t005EE10ECBC2C2E6ED007588CF1B3163 /* JSIndexedRAMBundle.h */,\n\t\t\t\tD37C2939F3CFD83C906796976DC6425E /* JSModulesUnbundle.h */,\n\t\t\t\t3615AC64FDF6640D810E405776FA9A03 /* MessageQueueThread.h */,\n\t\t\t\tB01C2C65E7B02816E8148154C56575AF /* MethodCall.cpp */,\n\t\t\t\t3863C406F7D65140B03ADDF3E62B9914 /* MethodCall.h */,\n\t\t\t\t80D64042B21EA7CEEB535422CBABD3F1 /* ModuleRegistry.cpp */,\n\t\t\t\tC9E855C72DB65E8045F7D611DB8E0AC7 /* ModuleRegistry.h */,\n\t\t\t\tFBE36ADE7B7AF7E211B4A734D83A30BF /* MoveWrapper.h */,\n\t\t\t\tE9E1F270CEDFF108574DFFDBE7F91985 /* NativeModule.h */,\n\t\t\t\t723CB5670ECFFB16F7B8F339EE9DB637 /* NativeToJsBridge.cpp */,\n\t\t\t\t865BCA647C0A650C5EADD1CCF31CFA14 /* NativeToJsBridge.h */,\n\t\t\t\t7B6F9E5C10CE8D8B1931589BD93D12D7 /* RAMBundleRegistry.cpp */,\n\t\t\t\t3A7C0933E0C4119F5E32E5A260746A2F /* RAMBundleRegistry.h */,\n\t\t\t\tBE03DA74B3DF71926399B020ADB5C3CC /* ReactMarker.cpp */,\n\t\t\t\tD3779D2E5E9D11A2A28A3B557D2841F9 /* ReactMarker.h */,\n\t\t\t\t1DA258A2CCF7FAA7A20EA853EAEA18AE /* ReactNativeVersion.h */,\n\t\t\t\t2552D17D22931F4E3F05CF400B52A72D /* RecoverableError.h */,\n\t\t\t\t816B94D26D0966A297B8BFCB1F24039B /* SharedProxyCxxModule.h */,\n\t\t\t\t643840DD64D54B52A2193F98673994AE /* SystraceSection.h */,\n\t\t\t\t10CB6C85BE8F5695B82D105949AE2B98 /* Pod */,\n\t\t\t\t4A43E51CD514F13C00201889AD651875 /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-cxxreact\";\n\t\t\tpath = \"../../../node_modules/react-native/ReactCommon/cxxreact\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF377A85A496896B3020FF70A98EE6A07 /* UnimplementedView */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t629C51A688E90B65323CE6CC51796EE5 /* RCTUnimplementedViewComponentView.h */,\n\t\t\t\t509A9FBAE4B5971C315FA3AB4924204D /* RCTUnimplementedViewComponentView.mm */,\n\t\t\t);\n\t\t\tname = UnimplementedView;\n\t\t\tpath = UnimplementedView;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF54FF6B14BCA0B94B3F5524E725B995B /* React-RuntimeHermes */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB640A9964EA3E8305895667CD6375FAB /* HermesInstance.cpp */,\n\t\t\t\t019F5B5B17C82713C4D6098E01A6E634 /* HermesInstance.h */,\n\t\t\t\t2BAC0805E5BEF3B1325B53C8584C41FE /* Pod */,\n\t\t\t\t5A762D82420F4B4EB73CBB7A080CFF38 /* Support Files */,\n\t\t\t);\n\t\t\tname = \"React-RuntimeHermes\";\n\t\t\tpath = \"../../../node_modules/react-native/ReactCommon/react/runtime\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF7240E677890C70CE51D27DED2D05B60 /* Text */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB0AF45BF7087251B0C904F885ED8178D /* RCTAccessibilityElement.h */,\n\t\t\t\tB868435FC1BB39A3949840802519A500 /* RCTAccessibilityElement.mm */,\n\t\t\t\t68EE2EFB5FD67165CD0BE5CB10F52DDD /* RCTParagraphComponentAccessibilityProvider.h */,\n\t\t\t\t8CB48239EFF087F22AC48A83F592D64F /* RCTParagraphComponentAccessibilityProvider.mm */,\n\t\t\t\t704A79E5BDF7B5ECE6197D355854F3A9 /* RCTParagraphComponentView.h */,\n\t\t\t\t350583A27DECF7088A05CC2259BE2E98 /* RCTParagraphComponentView.mm */,\n\t\t\t);\n\t\t\tname = Text;\n\t\t\tpath = Text;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF8229B1A04A686B9D6A8515E959D405C /* enums */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t7C322EC9FEFA80208EF7FC20F8E76803 /* Align.h */,\n\t\t\t\t3F64B0C65747B5007B92D204D69F6EFC /* Dimension.h */,\n\t\t\t\tA27676D6AF709B183CC889284CE2B3D1 /* Direction.h */,\n\t\t\t\t9D7DA62E7DF50F0A454C529AA78EA7E5 /* Display.h */,\n\t\t\t\t9A5F0251C69A9CCF2DB3222CE170671E /* Edge.h */,\n\t\t\t\t0ACDA1105A253290970D63F1EB10F574 /* Errata.h */,\n\t\t\t\t2462C72B87ED90695E43B971F24B8FCF /* ExperimentalFeature.h */,\n\t\t\t\tD042C4DD00523E4DF1235E10F891754B /* FlexDirection.h */,\n\t\t\t\t0EAE4B2A9C96F883E85714C869494F81 /* Gutter.h */,\n\t\t\t\tCA736D745963DE632943D6EE6AE51217 /* Justify.h */,\n\t\t\t\t795A0388C8652FBA4A957C30BE9222F8 /* LogLevel.h */,\n\t\t\t\tA5FD51AD36118D278A13D28B6A1C0F24 /* MeasureMode.h */,\n\t\t\t\t4C4D1C251906CB5D9F8086B2747C1522 /* NodeType.h */,\n\t\t\t\tEC5F5A9DB399E74A3B0F0CDEE200B40E /* Overflow.h */,\n\t\t\t\tD2F955F57435151EED343EB06358A2A7 /* PhysicalEdge.h */,\n\t\t\t\tDA12408D51CF845CE9C49609B11D2C6D /* PositionType.h */,\n\t\t\t\tEA4EE4C6FAFA0A824AFDB30A96D0C144 /* Unit.h */,\n\t\t\t\tBCA6A0AD322E97D31E8AB398E6F754C1 /* Wrap.h */,\n\t\t\t\t229E898FFA1C9E93F86539379E9096C3 /* YogaEnums.h */,\n\t\t\t);\n\t\t\tname = enums;\n\t\t\tpath = yoga/enums;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF85781294F189F756291D8B95825B440 /* React-RCTFabric */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF5A6371CE2CB24DC0532ACC93642CC48 /* RCTConversions.h */,\n\t\t\t\t12F4585D8579A5039D742D7E3913D0B6 /* RCTImageResponseDelegate.h */,\n\t\t\t\t3A50B808D51766F1C0B42436A7163DDD /* RCTImageResponseObserverProxy.h */,\n\t\t\t\t7ACDCCE812E169B5C2EE32A4A130D907 /* RCTImageResponseObserverProxy.mm */,\n\t\t\t\t8D7883FA7052AFA06DF3F841FBBB33EF /* RCTLocalizationProvider.h */,\n\t\t\t\tC488747CC15D138B30ADB8E498B04FF4 /* RCTLocalizationProvider.mm */,\n\t\t\t\tC1A69366D6E38FE28ED9651968AA7CF6 /* RCTPrimitives.h */,\n\t\t\t\t4013A3D961F88A9A042C082ECAEB35E8 /* RCTScheduler.h */,\n\t\t\t\t619ABD655227A08759F91622DF2A1E18 /* RCTScheduler.mm */,\n\t\t\t\tE0402A818FA8A0C89E390D0D4EC00165 /* RCTSurfacePointerHandler.h */,\n\t\t\t\t44356704310DCCAB77D9F8693D62FE0B /* RCTSurfacePointerHandler.mm */,\n\t\t\t\t4B2DFF23AC104B04562F5A613D62A6E2 /* RCTSurfacePresenter.h */,\n\t\t\t\t456E948706116C0DD64555FF6BF85B08 /* RCTSurfacePresenter.mm */,\n\t\t\t\tD0D6E9C9334A02233898F7AD14D17E2C /* RCTSurfacePresenterBridgeAdapter.h */,\n\t\t\t\tDD2869F37A6F486F8994AEF1E2A9E0D4 /* RCTSurfacePresenterBridgeAdapter.mm */,\n\t\t\t\t62DB4477408C47E85F683E8ED165D3AB /* RCTSurfaceRegistry.h */,\n\t\t\t\t32D1CC8F0E612A18C597E5BDCD724B17 /* RCTSurfaceRegistry.mm */,\n\t\t\t\tF4A1A873A0B3D3C8636143BB6282A12D /* RCTSurfaceTouchHandler.h */,\n\t\t\t\t1D68855FFC5514B5F5A3FD7EF50735D4 /* RCTSurfaceTouchHandler.mm */,\n\t\t\t\tCEC15E29682C912628AE02FBF18DB8D6 /* RCTThirdPartyFabricComponentsProvider.h */,\n\t\t\t\tE9AD225EDBC81406F600822BE5CB48E9 /* RCTThirdPartyFabricComponentsProvider.mm */,\n\t\t\t\t2362BA983B00A2A04C7C991889E743A5 /* RCTTouchableComponentViewProtocol.h */,\n\t\t\t\t17004CCFD3DD9375E623A963E13D18C2 /* Mounting */,\n\t\t\t\t89706D6285C3873597DB28EED7CB7824 /* Pod */,\n\t\t\t\tB47DE51F7E87E94310FE2E0772666C1F /* Support Files */,\n\t\t\t\t7C1A3D49344E732F8B3C50E94B38EBAC /* Surface */,\n\t\t\t\t2870CF1C2308D80731D8890A76D25817 /* Utils */,\n\t\t\t);\n\t\t\tname = \"React-RCTFabric\";\n\t\t\tpath = \"../../../node_modules/react-native/React\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF8992DC800D868156F55D8C1A840B2EA /* event */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6CEE94FB9A70376F30A45C598232AD61 /* event.cpp */,\n\t\t\t\t3C6D5DD14D9959F1BCDA9EEF40E8671E /* event.h */,\n\t\t\t);\n\t\t\tname = event;\n\t\t\tpath = yoga/event;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF8E0BC164A267E96DD24FE4A280E7765 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC7C5E5529D9183D4DA7499E3C615C519 /* Yoga.modulemap */,\n\t\t\t\t73301DA76E70E83388C9A33BCF56CEE5 /* Yoga-dummy.m */,\n\t\t\t\tCA2B21403EE25DB9893B6E8891C8E2DD /* Yoga-prefix.pch */,\n\t\t\t\t4EE65A27409B6614EB4E7E08374FDCA8 /* Yoga-umbrella.h */,\n\t\t\t\t49C7723A5D97C7404CB0972A1F44276F /* Yoga.debug.xcconfig */,\n\t\t\t\tDB803AD9555BB8D6B00BBA6644681627 /* Yoga.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../native/iosTest/Pods/Target Support Files/Yoga\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF917AFEA46CC0EA11BC6D81EB226EEDE /* modal */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t337FF88F1B3B7E14D22211EF9A8C01DC /* ModalHostViewComponentDescriptor.h */,\n\t\t\t\tED8BCB98B8CAFA45445802548B32ED28 /* ModalHostViewShadowNode.cpp */,\n\t\t\t\tA5FAB647D0F4DBFEAA683CD3AFF2F587 /* ModalHostViewShadowNode.h */,\n\t\t\t\tDABCCB9297D8973E3EB46EEFEDDEDCB4 /* ModalHostViewState.cpp */,\n\t\t\t\t26799F85A2F48699DF73E4A5B1EE067A /* ModalHostViewState.h */,\n\t\t\t);\n\t\t\tname = modal;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF999F8978D07FB924296B37D54A540C5 /* boost */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB94E9D8C2704D4246938A5CC85A14EBE /* Support Files */,\n\t\t\t);\n\t\t\tname = boost;\n\t\t\tpath = boost;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF9CB7550FD5E52C38F904E2F2BA99527 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB041282BB6E0CD0755E03B990F035982 /* React-RCTBlob-dummy.m */,\n\t\t\t\tC089C57BC7269AC9D829D12FB382C87C /* React-RCTBlob-prefix.pch */,\n\t\t\t\t8FC5170482B4001507331897446093A4 /* React-RCTBlob.debug.xcconfig */,\n\t\t\t\t2E2A892270F483593BF828FD99446809 /* React-RCTBlob.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../native/iosTest/Pods/Target Support Files/React-RCTBlob\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tFA5D227825AB5923FACC474B9DB3F384 /* CxxModule */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t824AF1EEC669FDA2DBC78CB48CBC86B4 /* DispatchMessageQueueThread.h */,\n\t\t\t\t080F0694AFBEBB45493A735532A9B8F8 /* RCTCxxMethod.h */,\n\t\t\t\t37689F6A0CBD1039206E7D3A8E8E6C68 /* RCTCxxMethod.mm */,\n\t\t\t\tC6D26752B3DE0424E4FA28589D9108BA /* RCTCxxModule.h */,\n\t\t\t\t3E8E0103E022F0A7BE670C99DDEC11FE /* RCTCxxModule.mm */,\n\t\t\t\tD3F40B6C62C59C16116BE5B43DD2B6E4 /* RCTCxxUtils.h */,\n\t\t\t\tB96DBA623627412849117547371D9FEC /* RCTCxxUtils.mm */,\n\t\t\t\t4489977C9B5B35F7F5A112139189B7E0 /* RCTNativeModule.h */,\n\t\t\t\tAAD779B1757E51874AD3E315AE0911BF /* RCTNativeModule.mm */,\n\t\t\t);\n\t\t\tname = CxxModule;\n\t\t\tpath = React/CxxModule;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tFA71C039003B0E9153109D272FAAA931 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t51396501E3E25FB7DCB5E276B819C556 /* WatermelonDB-dummy.m */,\n\t\t\t\tA807F600D199623AAC1E47F99AD43C8F /* WatermelonDB-prefix.pch */,\n\t\t\t\t0FE5FBB2B14D4BC374CECD01A71C50C3 /* WatermelonDB.debug.xcconfig */,\n\t\t\t\t6387BDDE6369AEDABBA8E222A92D7DDE /* WatermelonDB.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"native/iosTest/Pods/Target Support Files/WatermelonDB\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tFB232A0FE04B688B88B0BD685A108283 /* Support Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t7F7D564B2A15203C1BFCF6B38C70A0CF /* RCTTypeSafety.modulemap */,\n\t\t\t\t606BAB14D960C896D177B10A3540386B /* RCTTypeSafety-dummy.m */,\n\t\t\t\tEA282133F1BB10E022D47B6CACE22054 /* RCTTypeSafety-prefix.pch */,\n\t\t\t\t7780098F7787B2514F2C008CC3E13B73 /* RCTTypeSafety-umbrella.h */,\n\t\t\t\tEDE4EBF1DFE11D301F8A60F2D5B99F29 /* RCTTypeSafety.debug.xcconfig */,\n\t\t\t\tE5CB5398F86031A46AD389FAA73E2323 /* RCTTypeSafety.release.xcconfig */,\n\t\t\t);\n\t\t\tname = \"Support Files\";\n\t\t\tpath = \"../../../../native/iosTest/Pods/Target Support Files/RCTTypeSafety\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tFB52750D97B167EC630A39D38431B791 /* unimplementedview */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDA13FC9D0FEA58079E338182B1BAE1B2 /* UnimplementedViewComponentDescriptor.cpp */,\n\t\t\t\tE80581A669DE626F703216374FF4C3A1 /* UnimplementedViewComponentDescriptor.h */,\n\t\t\t\tE9C75E943A657F3153FF32A050DA7592 /* UnimplementedViewProps.cpp */,\n\t\t\t\t459B7A62CD1A78C3B1D3BA7499CB76CD /* UnimplementedViewProps.h */,\n\t\t\t\tAF7E566A1E46C435965177310C115248 /* UnimplementedViewShadowNode.cpp */,\n\t\t\t\t22A6AF9D5AAC8F547507F26CAC3BE8EA /* UnimplementedViewShadowNode.h */,\n\t\t\t);\n\t\t\tname = unimplementedview;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tFC37D3F31B7D90CFC347522DC090973D /* UIUtils */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t568619787B3509509A5FFEA27285F968 /* RCTUIUtils.h */,\n\t\t\t\tB597F21D264FDF22B451D67257AA9EF7 /* RCTUIUtils.m */,\n\t\t\t);\n\t\t\tname = UIUtils;\n\t\t\tpath = React/UIUtils;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tFC72F8ACA9AA53954F9EF3B8A5C6F5FE /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t482077692C71BA225ECEBBE9626B7C22 /* ReactCommon.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tFD407F481179C9D21976E957BE8A96A5 /* SafeAreaView */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8B75886BB83AA90D3B2DEFB75224490C /* RCTSafeAreaShadowView.h */,\n\t\t\t\t6C8572256406ADB7551DFDDCDC585255 /* RCTSafeAreaShadowView.m */,\n\t\t\t\tAEE7D821FE2F99E06D93025BCCDE581E /* RCTSafeAreaView.h */,\n\t\t\t\tD63DB3EEA2658569FE4F58A50743B58C /* RCTSafeAreaView.m */,\n\t\t\t\tE38561935D0A79B947D909F1708ADA95 /* RCTSafeAreaViewLocalData.h */,\n\t\t\t\t7B65B6162E9749D1E3F3D1232D886392 /* RCTSafeAreaViewLocalData.m */,\n\t\t\t\t285863D5864C49AC3FDF1567E1986DDB /* RCTSafeAreaViewManager.h */,\n\t\t\t\tBB971ED75CA1674F0FAAC4500BBC50A4 /* RCTSafeAreaViewManager.m */,\n\t\t\t);\n\t\t\tname = SafeAreaView;\n\t\t\tpath = SafeAreaView;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tFD8D4E4ECFB0CC25130AE3BEED4A319A /* Pod */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5CD701537B4A3BB9EB36F3D0373E62EC /* React-Mapbuffer.podspec */,\n\t\t\t);\n\t\t\tname = Pod;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tFE5C1FDF3515727A0670E951FDDE706D /* RCT-Folly */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t908D006CABFC90D4BADBF7B0C2544818 /* Access.h */,\n\t\t\t\t6629455746E57DAB397BA5E289A81B37 /* Access.h */,\n\t\t\t\t997B7B2A3CC26B9D704D7CB940D7E4C6 /* Align.h */,\n\t\t\t\t5AE62E3EA1E11A2011DFB36206854AB4 /* Aligned.h */,\n\t\t\t\tC91E89106F76162BEA0A7DF8511D586A /* ApplyTuple.h */,\n\t\t\t\t10F169E67E9F6AF9D77C49B765487E70 /* Arena.h */,\n\t\t\t\t466A8EAE41785C3EA08D830470EABB6B /* Arena-inl.h */,\n\t\t\t\t792014C5B5CC53C6A4E7C3EAFA69D6ED /* Array.h */,\n\t\t\t\tC5691B7E1407E2A5D9208B3CCFBC6BDF /* Asm.h */,\n\t\t\t\t0C81656E6394B680E495643EDC27FC6E /* Assume.h */,\n\t\t\t\t5D024556120FC57697C2ECE69C53D36B /* AsyncTrace.h */,\n\t\t\t\tAFAEF578C155F412D05E26AF9E63C602 /* AtFork.cpp */,\n\t\t\t\t84861068E0BD421B437C1FB5C00F434D /* AtFork.h */,\n\t\t\t\t6D2C764374D96A2A95EB7DEDB1AD4B23 /* Atomic.h */,\n\t\t\t\t0C73DEF93EB855958CC048BCB076258B /* AtomicHashArray.h */,\n\t\t\t\t3C581B89704C6C579DD637F11045901A /* AtomicHashArray-inl.h */,\n\t\t\t\t8B7D86572DB2B5C7CF324979D3984A2B /* AtomicHashMap.h */,\n\t\t\t\t861717776176D0307718AB2E8E102C67 /* AtomicHashMap-inl.h */,\n\t\t\t\tBBE2B529666092F7DEC3C687F33200F0 /* AtomicHashUtils.h */,\n\t\t\t\tA7CDF9E97D044762C37CF380DC086899 /* AtomicIntrusiveLinkedList.h */,\n\t\t\t\t0E4412A2483337D140CD540D4751F2FB /* AtomicLinkedList.h */,\n\t\t\t\t473969280531057CD249A18AC62DD076 /* AtomicUnorderedMap.h */,\n\t\t\t\t13DDAD72F9C7DC4D814F4D340784ECEB /* AtomicUnorderedMapUtils.h */,\n\t\t\t\t5BD78C8466D2DAC22B989C5EFC592BAD /* Badge.h */,\n\t\t\t\t7AB42AC0EB19257BDB4CB23DD77110E6 /* base64.h */,\n\t\t\t\tECF657DA48FE202E91262C142A30C2EA /* Benchmark.h */,\n\t\t\t\t79935ABC77CDB209D63CDB2A5C8B0F40 /* BenchmarkUtil.h */,\n\t\t\t\t7A3BCF7F218979C84533F1F242327D9F /* BitIterator.h */,\n\t\t\t\t20FF0CE1BB1AB7D514D968DD961923FA /* BitIteratorDetail.h */,\n\t\t\t\tE743BFAD7A14315554014A32748265E1 /* Bits.h */,\n\t\t\t\t7B0A8E8F61759E910B9953C7FF640925 /* Bits.h */,\n\t\t\t\tF59815A7A4241A59BAFADEAB6160D7C8 /* Builtin.h */,\n\t\t\t\t54C3134B4FA97F946996018EB76D6F2B /* Builtins.h */,\n\t\t\t\t63F5F0571EA83996B53E596BF37008E4 /* Byte.h */,\n\t\t\t\tFC43226FF6ADEAB1549A1CDD67BEC74A /* CancellationToken.h */,\n\t\t\t\t91B53126F00778E3792F8BDC9EF291DA /* CancellationToken-inl.h */,\n\t\t\t\tB159432A0D462B5E94046B7320846BC4 /* CArray.h */,\n\t\t\t\t6DB23B7557FA39253FE65A599E922ED6 /* Cast.h */,\n\t\t\t\tB83DFBC0279E4DF8CFA602D622946926 /* CheckedMath.h */,\n\t\t\t\tAB1459102548D6C97BDF32F7673BD1DC /* Checksum.h */,\n\t\t\t\t5DC5AD5C90390C13DD621B5A02EEE993 /* Chrono.h */,\n\t\t\t\tE416B0C3A1EC58515DEC41DF3D02E01B /* ClockGettimeWrappers.h */,\n\t\t\t\tEFCF80831E029EAC9ECFEDFA8C0B0BE9 /* ConcurrentBitSet.h */,\n\t\t\t\t7FFF51245D8A86EAC0CA600E287ED6AD /* ConcurrentLazy.h */,\n\t\t\t\tCB027A92361F7CF889CAB836E490C149 /* ConcurrentSkipList.h */,\n\t\t\t\t6DCF6A50893A882EA7E8F44D10AD971D /* ConcurrentSkipList-inl.h */,\n\t\t\t\t5C02361943CFC4D43BDE38DB0C69F197 /* Config.h */,\n\t\t\t\t4CAB10F1ADF33F5BF62A774463140259 /* Constexpr.h */,\n\t\t\t\t6F2BCB43F2D90CA90AFD57677AF6013E /* ConstexprMath.h */,\n\t\t\t\tDD754522EEA5CC221FED5671228D41ED /* ConstructorCallbackList.h */,\n\t\t\t\tBC611E2FF7C83C727ED3ABB22AE435FC /* Conv.cpp */,\n\t\t\t\t2837BF8ABDA1EC92282A5DF6381E0A27 /* Conv.h */,\n\t\t\t\t1DC4F893B0788A2E9A80A4BD69265922 /* CPortability.h */,\n\t\t\t\t2A6A08279C8FADD3D8FF81B1C2112A8F /* CppAttributes.h */,\n\t\t\t\t58B548A2C55831264828B2298FF825B1 /* CpuId.h */,\n\t\t\t\t8AFE8F048924F7A8798499375AA68271 /* CString.cpp */,\n\t\t\t\tDF05023F7AE354185DE71C9D43F11B9D /* CString.h */,\n\t\t\t\tCA86A71648C8045BF8A96B225E26E40D /* CustomizationPoint.h */,\n\t\t\t\t23C5959A240F9A33D470E539FE162B9D /* DefaultKeepAliveExecutor.h */,\n\t\t\t\t9E6068776F49102288177FE25869B4F8 /* Demangle.cpp */,\n\t\t\t\t95F4490C7C830CE7EDFD1E7F79557E18 /* Demangle.h */,\n\t\t\t\tA3B4504723D37DDB3A1BBB28AE41070F /* Dirent.h */,\n\t\t\t\t584180DC3B2C183B2687C5F1857403FF /* DiscriminatedPtr.h */,\n\t\t\t\tAE8C9FA47D47B64CE6F506ABE68FCF06 /* DiscriminatedPtrDetail.h */,\n\t\t\t\t788308AAA58E926CC60655199F7DA6BC /* dynamic.cpp */,\n\t\t\t\t732688D92C1058B4D3B68B3EF5CB178C /* dynamic.h */,\n\t\t\t\t687B26F2B573590EF9ACE0B564A2A4D8 /* dynamic-inl.h */,\n\t\t\t\t582D8ADF4BEE51D724800E05D34ACDCA /* DynamicConverter.h */,\n\t\t\t\t6A2008DB4CB2932C0392674068ED82A6 /* EnableSharedFromThis.h */,\n\t\t\t\t9052E26FF92020AFAA064B27532BDD02 /* Enumerate.h */,\n\t\t\t\t6CA38E07EBA75420D2E3C5C4B52A3B22 /* Event.h */,\n\t\t\t\t119AE002F412B1467B684F7738048356 /* EvictingCacheMap.h */,\n\t\t\t\tCE4F352241E750994254CACB3900290C /* Exception.cpp */,\n\t\t\t\tC981FCFDF37E877B75038B1246411D6A /* Exception.h */,\n\t\t\t\t3BFC3D5FFBC3735586FEBA16EF9D8157 /* Exception.h */,\n\t\t\t\t890A2DE43F7CEC807F5D45DD7FD1CE74 /* ExceptionString.h */,\n\t\t\t\t977FB42CD545522302B7AEA55376D2F7 /* ExceptionWrapper.h */,\n\t\t\t\tD2E639F57C80F20E749E4AAA4336E32B /* ExceptionWrapper-inl.h */,\n\t\t\t\t5433FC0C0EE55FB7FA9D9BCA99A39650 /* Executor.h */,\n\t\t\t\tD869113E22557F357D518366520103CC /* Expected.h */,\n\t\t\t\t686FA922FDC06D95A33307B2DFE9C50E /* Extern.h */,\n\t\t\t\tFE9C8096CC17775F6B3D7F51F755BF88 /* F14Defaults.h */,\n\t\t\t\t173353D36092C2DD008D22FDEA5C21AC /* F14IntrinsicsAvailability.h */,\n\t\t\t\tD96F738CE283D062C54E36FE7D38A7AF /* F14Map.h */,\n\t\t\t\t4873FC718C30FB33CE887064BF8E5DE8 /* F14Map-fwd.h */,\n\t\t\t\tC230DA31F009BBBB74798CD3CE527F8E /* F14MapFallback.h */,\n\t\t\t\t5671AD120864F71635B5C5BD07138E67 /* F14Mask.h */,\n\t\t\t\t130677CC93E00689A413DE1C5D45754D /* F14Policy.h */,\n\t\t\t\t27DB05F6CB39113BE10AD3A747787E40 /* F14Set.h */,\n\t\t\t\t0EE92B6EF155BE970721A6B2647F4AF4 /* F14Set-fwd.h */,\n\t\t\t\tD673246C2C1796D3D74599E1964A310D /* F14SetFallback.h */,\n\t\t\t\t7B5B3F15E7911D3E6C9DE70A968B0F80 /* F14Table.cpp */,\n\t\t\t\t59164B030AA6BE9DC3304EDD7E90FEEE /* F14Table.h */,\n\t\t\t\t531B578A8FF205619BD8E526C7C60930 /* FarmHash.h */,\n\t\t\t\t313F1FACBDF2947C76A286C8AFC6551D /* FBString.h */,\n\t\t\t\t3D66CDE2F1E5ADE815D245C01F720E05 /* FBVector.h */,\n\t\t\t\tA09332652A2DA7B2F95FDC212274928B /* Fcntl.h */,\n\t\t\t\tCBC8B43C8992F34DF7CD32D7923EDE53 /* File.h */,\n\t\t\t\t5FD76DB8A83861EF7CD0449CFC4DE097 /* Filesystem.h */,\n\t\t\t\tEEC8AE4B19CE176574DF457505E2B9CF /* FileUtil.cpp */,\n\t\t\t\tFF88C9A8B1E0A79468C40F286C239533 /* FileUtil.h */,\n\t\t\t\tDD4757A98E1495E6C3DBC232D9872AE2 /* FileUtilDetail.cpp */,\n\t\t\t\tFC3E576BEEE24C22BAB754F8BDA7D822 /* FileUtilDetail.h */,\n\t\t\t\tF1446E5B5E1E6532A8129EC19A5BC514 /* FileUtilVectorDetail.h */,\n\t\t\t\t163CDA479246FA5F4CF5C7949B3FC9F7 /* Fingerprint.h */,\n\t\t\t\t55BB048CB3ED0500BC5E984EC4283580 /* FingerprintPolynomial.h */,\n\t\t\t\t5FAC834F5ADBD6F3EEF6BE67C8BE5F06 /* FixedString.h */,\n\t\t\t\t0D107AF1088C433FC9328FB083C1609A /* FmtCompile.h */,\n\t\t\t\t7350D90D235F0E829948F766094A036B /* FollyMemcpy.h */,\n\t\t\t\t29A9D298DB1C62EA7C25E8F85CFF52F8 /* FollyMemset.h */,\n\t\t\t\t1AB864487EEC16CB2CBD3A5CA275FCA1 /* Foreach.h */,\n\t\t\t\tA6072D5AD4221696B9DE9D90F1EB0439 /* Foreach-inl.h */,\n\t\t\t\t869D440DACC02CD2540C4CE6A499116F /* Format.cpp */,\n\t\t\t\tAD16D5AA10E8416443D8D1FF1460C44B /* Format.h */,\n\t\t\t\t48D1454DD898A877C683DE012FCE946E /* Format-inl.h */,\n\t\t\t\t5F8E380C0D44C30A7EB64835C56687EA /* FormatArg.h */,\n\t\t\t\t375B4BBE3235F1250E48C6F479A52A01 /* FormatTraits.h */,\n\t\t\t\t56AAE7ABD3415795FAEEE07A449DD7AE /* Function.h */,\n\t\t\t\tA2E8652189AEFEC58162855B790CFA15 /* Futex.h */,\n\t\t\t\t0101C2B932AED7971A900220D55C0B86 /* Futex-inl.h */,\n\t\t\t\t58591CA75671A3724AEF97FE040632D7 /* GFlags.h */,\n\t\t\t\t1CEDA3FBCCC6D4495CE2BD141F7EA3B2 /* GLog.h */,\n\t\t\t\tD83B4FAAFD8B9F4100D6F3F2AAF2598F /* GMock.h */,\n\t\t\t\tB46136D54F40F23675446372805B6B0D /* GroupVarint.h */,\n\t\t\t\t962AA8023E519A1F58D71BC1F73C95D0 /* GroupVarintDetail.h */,\n\t\t\t\t9848E5EDA897DF122EF07B42AF3EEB86 /* GTest.h */,\n\t\t\t\t8980B7C2D6023D0EC77EF277C17227D1 /* HardwareConcurrency.h */,\n\t\t\t\tF6649A5E0CB0CD5E9B98CB49FE510D25 /* Hash.h */,\n\t\t\t\tEFDD8B247497E208D149C9C12E8045C7 /* Hash.h */,\n\t\t\t\tDB76EBADE7E968B611B89EC60AA71910 /* heap_vector_types.h */,\n\t\t\t\tD8C79C91A7FCAF5C973C5E74CCAC73C5 /* HeterogeneousAccess.h */,\n\t\t\t\tB32CE247FEEC1814744A3421CB654796 /* HeterogeneousAccess-fwd.h */,\n\t\t\t\t9DBAD76DF0AA6D7A788B0D3674035677 /* Hint.h */,\n\t\t\t\tBF031C91FD312DC63FF16FE7D183B230 /* Hint-inl.h */,\n\t\t\t\t8325F6D78EEBC85AE983E28DE38AD770 /* Indestructible.h */,\n\t\t\t\t48A56339A525A7972D16108E1C573FA7 /* IndexedMemPool.h */,\n\t\t\t\tB9FF361F61B7A378542F02A30393DF63 /* IntrusiveHeap.h */,\n\t\t\t\t866D0225560051A219BEE4D4664348F9 /* IntrusiveList.h */,\n\t\t\t\t7433BC11862172106E2F5C35B6657339 /* Invoke.h */,\n\t\t\t\t5F85C8CC15CDC85E857260E4CDDF9817 /* IOVec.h */,\n\t\t\t\tCFBAA91154D63D788000A507C872D157 /* IPAddress.h */,\n\t\t\t\t832DCF641540319B774328DFB00B9620 /* IPAddress.h */,\n\t\t\t\t789B5746A1B28065E10E29579DC6FE8F /* IPAddressException.h */,\n\t\t\t\t37DFC8EAF78BE0F070D18753D61D9C59 /* IPAddressSource.h */,\n\t\t\t\t938DC03F8EB05E7BDD33175BF907D170 /* IPAddressV4.h */,\n\t\t\t\t662EDB351806ACAF98C186A204C9A85E /* IPAddressV6.h */,\n\t\t\t\tE29A2CBF054A73452FE72177DE2FDF83 /* Iterator.h */,\n\t\t\t\t9CA3417ED0B8CDE1906D3202E80B148D /* Iterators.h */,\n\t\t\t\tF91CC1CB5BBFE630F1A219C0EDA145B9 /* json.cpp */,\n\t\t\t\tC047105E3027DC4381475187A7547D3D /* json.h */,\n\t\t\t\t917B25EF0D073A826D0E80F0B81BFB26 /* json_patch.h */,\n\t\t\t\tE02117FB47D5E097A2FE278E42ED7D2A /* json_pointer.cpp */,\n\t\t\t\t5435E25ABF1C803D1D8B6ADE22E2664D /* json_pointer.h */,\n\t\t\t\tF524D0F42CA29ACE3E6C3098C858C502 /* Keep.h */,\n\t\t\t\tCF9E8353281D1C3DE0C65A3F7643C68B /* Launder.h */,\n\t\t\t\tF07A956888DB0839EE8710AF70182297 /* Lazy.h */,\n\t\t\t\tEF23890C4D36D03EA1DD037AFEFF15C6 /* Libgen.h */,\n\t\t\t\t4C46B7B386338A3CF2226940A341403E /* Libunwind.h */,\n\t\t\t\tCBED11019ED3BE2CD4C26A2FD21B24C1 /* Likely.h */,\n\t\t\t\t6A732660A46D8B89E811D42131A47E43 /* MacAddress.h */,\n\t\t\t\t701DA5EF2C35D3F8011D186617366218 /* MallctlHelper.h */,\n\t\t\t\tB9CC2B87AA979A0CE226E57B8BE306A7 /* Malloc.h */,\n\t\t\t\tBD52A822E13E3FBE427F01FAFF774941 /* Malloc.h */,\n\t\t\t\t7E424FA9074DD171A4AE55BE52EFAFAB /* MallocImpl.cpp */,\n\t\t\t\tF7DCF7DBDA1DB363572544D437D1EB4A /* MallocImpl.h */,\n\t\t\t\t0D6609F1FFDAA711D16BE1CBBFCEF19C /* MapUtil.h */,\n\t\t\t\t72188071CCFD3B99269572936DAC43DD /* Math.h */,\n\t\t\t\tE5745DFD5BE516C91A82DD1988970E10 /* Math.h */,\n\t\t\t\t1260781BA130D5E430412D17AA9CF321 /* MaybeManagedPtr.h */,\n\t\t\t\t77A1CFA157156B29C57AF9F7AACA682D /* Memory.h */,\n\t\t\t\t39A5BABF355F1FCE0AB1D652C33D7B9C /* Memory.h */,\n\t\t\t\t2F8E6E55AFFCF9BD68B2B5B508CCEC75 /* MemoryIdler.h */,\n\t\t\t\t03C08820B4F8B692940FAF14B621C83F /* MemoryMapping.h */,\n\t\t\t\tF89AC6E92A39CCDDE8DAD6BE98D3C4D1 /* MemoryResource.h */,\n\t\t\t\t3859A11BD5B175A2E7059AE9B7A747F3 /* Merge.h */,\n\t\t\t\tB02E6E730A273BCBAAB434BD6D2576E3 /* MicroLock.h */,\n\t\t\t\t2EA911281D978CB40351D59D5598FC9B /* MicroSpinLock.h */,\n\t\t\t\tE9C1D370414FE653DCC9FAE636F19160 /* MoveWrapper.h */,\n\t\t\t\tC87FD57CD4AD96B0BBB45FC4FEFA1AE7 /* MPMCPipeline.h */,\n\t\t\t\t40B6CCC5214ADD7CDAC59A0304AB0B44 /* MPMCPipelineDetail.h */,\n\t\t\t\t28134A7E3E4CF5A0D60FE5E683407AAC /* MPMCQueue.h */,\n\t\t\t\t8F671A2A4E4BD8E767A5A396E4793F09 /* NetOps.cpp */,\n\t\t\t\t1D0F55A1CBF2A5D8A9F6B0B49A152959 /* NetOps.h */,\n\t\t\t\t07BDDD0C6666F54BB37E72A8F733FB50 /* NetOpsDispatcher.h */,\n\t\t\t\tBE5A44A54B39A676EB8ECEF3D4CF8E3D /* NetworkSocket.h */,\n\t\t\t\tA6E21B3D9A76F241B93CEF7D2AA19709 /* New.h */,\n\t\t\t\t7FFA741A8EC26DD612783B14F5682ED2 /* not_null.h */,\n\t\t\t\tA854CDECEC563F33590796054B7822E0 /* not_null-inl.h */,\n\t\t\t\tE0529EAB67BFDD4AEA0A80301D04CE2C /* ObserverContainer.h */,\n\t\t\t\t8E748C5FBED7C0C756FC4C4A6B5C2E8C /* OpenSSL.h */,\n\t\t\t\tC02156579770C940D02208439EF989EE /* Optional.h */,\n\t\t\t\tC4EC4C02AFACADF949E7010ACACF4B85 /* Ordering.h */,\n\t\t\t\t6F9A7D467E30F1383A11DE8EA731A421 /* Overload.h */,\n\t\t\t\t7E8209264577462872BC1AE7772C476E /* PackedSyncPtr.h */,\n\t\t\t\tD89495ADCC3AEE3B5696CC8A442CC151 /* Padded.h */,\n\t\t\t\t99E851596D4A5EE743DC493671DB9DA3 /* Partial.h */,\n\t\t\t\t0E8EF1F55FE2016CDA7B786F01C8882E /* PerfScoped.h */,\n\t\t\t\tFADAE66E358428988B767C2AAC5E2119 /* Pid.h */,\n\t\t\t\t2779D7D33AA6E41DCE7991AF63682C57 /* Poly.h */,\n\t\t\t\tB6F37D13CE5A1DE0E74413865B70883A /* Poly-inl.h */,\n\t\t\t\t982AAB27F58C71E3FA007537ED46BB9D /* PolyDetail.h */,\n\t\t\t\t207D72871056994F29476846F29AF947 /* PolyException.h */,\n\t\t\t\tDF4F0BE954C36F42882AC304D011030F /* Portability.h */,\n\t\t\t\t4DD488FCCA9EEDD9B68B8F99D105C44A /* Preprocessor.h */,\n\t\t\t\tCCCCA85307C7F5CAA6F8F137DC8860BE /* Pretty.h */,\n\t\t\t\tEF3D0DF483D191D626F907294861A317 /* ProducerConsumerQueue.h */,\n\t\t\t\tC844508F5FF5CB3FE66B8F8DF7302612 /* PropagateConst.h */,\n\t\t\t\t068DB205A59C74E3480D49B43B734439 /* protocol.h */,\n\t\t\t\t586BE0D668A4FAAEE338C3991530ACC0 /* PThread.h */,\n\t\t\t\t94D87B59FEAC0DBA4F9A7E928431AAAE /* Random.h */,\n\t\t\t\t3762263B39103B7107F61608F0B0E2D8 /* Random-inl.h */,\n\t\t\t\t036EB421B5324C4C8F2FEE1BF08B8194 /* Range.h */,\n\t\t\t\t3B4291E3436CE7DD23B4E403E8E8B12D /* RangeCommon.h */,\n\t\t\t\t937EF872F9B051F189B72F49D8D54CAD /* RangeSse42.h */,\n\t\t\t\t31842C0B4263119B5232CF1827757893 /* ReentrantAllocator.h */,\n\t\t\t\tB41CA2872B3100D34E5916BD9747FFA2 /* Replaceable.h */,\n\t\t\t\tBEFECA4F48E22E7225529497330DEB8B /* RValueReferenceWrapper.h */,\n\t\t\t\t02E1E7FDCE905C0071E5B85EDEE735B7 /* RWSpinLock.h */,\n\t\t\t\tB2DA18CEB3A1B39D6DEFDA830C70B7AE /* SafeAssert.cpp */,\n\t\t\t\t718D4D78E0BAE0CC2A7AE58A6FBEA36A /* SafeAssert.h */,\n\t\t\t\t4E97DA6EC4EC14E2148BD7844BD1F3A3 /* SanitizeAddress.h */,\n\t\t\t\tC128E32800DBBBE7BD73B0DB2EA50A53 /* SanitizeLeak.h */,\n\t\t\t\t9862B8B78362BC8D98438DB2C5675196 /* SanitizeThread.cpp */,\n\t\t\t\t326E52CD3C6A37497F8D253F7BACCFB5 /* Sched.h */,\n\t\t\t\tA6BB42C32564D7C067A75160B7457050 /* ScopeGuard.cpp */,\n\t\t\t\t1C6F2A8DD916FFABBB7924E8D417B7EC /* ScopeGuard.h */,\n\t\t\t\tAC04A5C67B4CC06104E1FAC9CDF58712 /* SharedMutex.h */,\n\t\t\t\t5C54A77AACDC4EFCA476CD638F5287E1 /* Shell.h */,\n\t\t\t\t769BAEE9C92AEEA6A5C4C98AE6FFBD88 /* SimdAnyOf.h */,\n\t\t\t\t63B3B00A3AAC44C23D4F7E237FE0D5C5 /* SimdCharPlatform.h */,\n\t\t\t\t12BF91C85904FD8BA917DDBF03ECCC1D /* SimdForEach.h */,\n\t\t\t\tAB6B32F88010B897C8CBEDA90F51EF81 /* SimpleSimdStringUtils.h */,\n\t\t\t\t696D9C59C6F80DB952F1142DBCBBF620 /* SimpleSimdStringUtilsImpl.h */,\n\t\t\t\t86CD21C661338CF76FD714E4819D0BEF /* Singleton.h */,\n\t\t\t\t7B799169876F75C6B694791908FAA1EB /* Singleton.h */,\n\t\t\t\t2C17F91E7D084760672DD64B292DF5B5 /* Singleton-inl.h */,\n\t\t\t\t581A1FBA46FBC346F25CDD31C00AE6B9 /* SingletonThreadLocal.h */,\n\t\t\t\t985183EC5FB028AC6A6FCC26CC91696A /* SlowFingerprint.h */,\n\t\t\t\tDF63E196F2D472D716CD1CFF8D29C2EF /* small_vector.h */,\n\t\t\t\t8AAE8CC35982681A17144AA7022C354D /* SocketAddress.h */,\n\t\t\t\tC042000B32A98F9B8FE68F105D95B8D4 /* SocketFastOpen.h */,\n\t\t\t\tE6362057149C3EE30EE5985649A70E12 /* SocketFileDescriptorMap.h */,\n\t\t\t\tE96C6053E99BB795AC55280C6C0B918F /* Sockets.h */,\n\t\t\t\tF804F0627373E6C63D34AAD65291FD24 /* sorted_vector_types.h */,\n\t\t\t\t0834C175FB5FEC893A25F29A77A057B6 /* SourceLocation.h */,\n\t\t\t\t97C17BDCBCF48F7FE1E2CE59E0B17252 /* SparseByteSet.h */,\n\t\t\t\t3605A12CF33B3DFBE0B5DD2DE36994C3 /* SpinLock.h */,\n\t\t\t\tC106E727DA66F2360E99B166ED1F9FBC /* SplitStringSimd.cpp */,\n\t\t\t\t9A7E0B4304900884F1F7552E271BAE80 /* SplitStringSimd.h */,\n\t\t\t\tADC21E6203A42D717BE49E8E588CB0D5 /* SplitStringSimdImpl.h */,\n\t\t\t\t182071DF4FF23AD36C90547CC9C960E3 /* SpookyHashV1.h */,\n\t\t\t\t856575C5A576BBE72D1C55601F788145 /* SpookyHashV2.cpp */,\n\t\t\t\t8FDD74A51002058B82FB55AE5D657564 /* SpookyHashV2.h */,\n\t\t\t\tD33BF9E42E6E5CEF3647C99A049FDCA1 /* Sse.h */,\n\t\t\t\tF8ECC27DA5BDBC6D1C55FD6C21B19E9B /* StaticConst.h */,\n\t\t\t\tBC8A1AA2067618E92E2DC37877060EA1 /* StaticSingletonManager.h */,\n\t\t\t\t16BD9C5268EF8F747D73A1B1E9C395CD /* Stdio.h */,\n\t\t\t\tB4731BEAE5B9F1A65FB492F06B455F7F /* Stdlib.h */,\n\t\t\t\t035C4CAE603317412DE18DE1D8300A94 /* stop_watch.h */,\n\t\t\t\t41CF2183FB0C77CBF6E075298A85E705 /* String.cpp */,\n\t\t\t\tB6577792B784C0F015CBBC9C2A12DDEC /* String.h */,\n\t\t\t\tDDED685F4B3E6B9AD98CDA1F1594C02B /* String.h */,\n\t\t\t\t31FAF051F6D95F34219F912CE1C6F2F4 /* String-inl.h */,\n\t\t\t\tD1802F9C2D3A26DFED67D9A4805852E1 /* Subprocess.h */,\n\t\t\t\t7D4B16C5729900BD0CF675EE898C8327 /* Synchronized.h */,\n\t\t\t\t67610BE7173AD3B20491234782354847 /* SynchronizedPtr.h */,\n\t\t\t\t60B6FDAEA7F1F74C6155EF59EFCCA58E /* SysFile.h */,\n\t\t\t\tC3A48141C5DA78A08DB8A2E1D30AB6D9 /* Syslog.h */,\n\t\t\t\tDF804855D1456E2DC29B632585EFE659 /* SysMembarrier.h */,\n\t\t\t\t506A5EB970B15ADBF0D61002534BC9B1 /* SysMman.h */,\n\t\t\t\t50A063D0B84A8706BF9D36E052AFDCA4 /* SysResource.h */,\n\t\t\t\t8627871C188DC96A2A53FD17E0445367 /* SysStat.h */,\n\t\t\t\tBB2D4F3D9EA6B428CD822160742EC53F /* SysSyscall.h */,\n\t\t\t\tD7F312C3D9605D22499AC7486B1AB866 /* SysTime.h */,\n\t\t\t\t6B9509822D0A4EC87A2AA3BC68342DF3 /* SysTypes.h */,\n\t\t\t\t32AC266D9F2BEB6CAC0650EC2695A1C7 /* SysUio.cpp */,\n\t\t\t\t79CC003D3F5205C371DC8BCBE46FD022 /* SysUio.h */,\n\t\t\t\t3A32F2995E9FBCA38F66600B356DD02C /* TcpInfo.h */,\n\t\t\t\t7EAB5C076EC5BA3D8E0D48CBF9F38DC1 /* TcpInfoDispatcher.h */,\n\t\t\t\t5776F9A564A106E1D34D8C2B6FB41C78 /* TcpInfoTypes.h */,\n\t\t\t\t1AFB9A68F41FAA405A3AAE37295C10B3 /* ThreadCachedArena.h */,\n\t\t\t\t1A2E8DDEAB65BA26685A7F1CE66A6C2B /* ThreadCachedInt.h */,\n\t\t\t\t82BDE129A63F08D401D705753189D8B0 /* ThreadId.cpp */,\n\t\t\t\tF69D2C7C3E6181971A1F8D04108BC7D4 /* ThreadId.h */,\n\t\t\t\t4478194C75B2D184014614829944D5CC /* ThreadLocal.h */,\n\t\t\t\t232D444DA9A20C7509F589FFF2D7E4CF /* ThreadLocalDetail.h */,\n\t\t\t\t36EDA6F605E6CEF5F9A72D38C0AA3DED /* ThreadName.h */,\n\t\t\t\tED92914EB3DF6C80AB5B7CF1AF9F3EE4 /* Thunk.h */,\n\t\t\t\t0BB0E5875A31D5E8CDCEA86F5A67276E /* Time.h */,\n\t\t\t\t0C0FFE3B52F5FC5B9E85936F71606010 /* TimeoutQueue.h */,\n\t\t\t\t354A705EB660FEBF388788D956A9E58A /* ToAscii.cpp */,\n\t\t\t\tD7914657C80BFE4F7E8E537249F07FD6 /* ToAscii.h */,\n\t\t\t\t47AD1D90749E8B75D93FDBB70F9F6ABA /* TokenBucket.h */,\n\t\t\t\t2CE3815AC95E2E19EFA825C26B6DD16A /* traits.h */,\n\t\t\t\tBE2252C1E227B6B138921BA745C6ABC7 /* Traits.h */,\n\t\t\t\t05CAC01452155CC5956412107FDEDDAD /* Try.h */,\n\t\t\t\t77B99168E6021298797F07B5B41C5A77 /* Try-inl.h */,\n\t\t\t\t890E8592B2798AA968BD07CDFB3EDD9A /* TurnSequencer.h */,\n\t\t\t\t51BFECF146A1165D167989F92AE6C0CC /* TypeInfo.h */,\n\t\t\t\tD5266C5C2A1441F787E4EAA90B9166DA /* TypeList.h */,\n\t\t\t\t1FC9D5FE940DF4FC829E173DF00483AB /* UncaughtExceptions.h */,\n\t\t\t\t54977C60EFA8732D452D9D03923B5270 /* Unicode.cpp */,\n\t\t\t\t83B1804846FC5FA7ACBFC82E7F5B9746 /* Unicode.h */,\n\t\t\t\t9DD30C23A0277639DFBEA7BDEC6DFEE3 /* UninitializedMemoryHacks.h */,\n\t\t\t\tEB71E81BC5E30853849F01DE038FCE31 /* UniqueInstance.cpp */,\n\t\t\t\tF51332CA416FB0997A5A9763AC54075F /* UniqueInstance.h */,\n\t\t\t\t3D2546E47F2D90167BFD3A489746A6E9 /* Unistd.h */,\n\t\t\t\t4815C38AF6C2FD23A9E98263CAFC071E /* Unit.h */,\n\t\t\t\t0C8868803CE5E240AD3BBEBB15555C0F /* UnrollUtils.h */,\n\t\t\t\t32B62C1AD7CDAE58FE4EF82AB2C29AAA /* Uri.h */,\n\t\t\t\tFB0002CFA1F991284A466F64F3CDD670 /* Uri-inl.h */,\n\t\t\t\t74C2C2A0E994E59EC1C51CEF553541EF /* UTF8String.h */,\n\t\t\t\tDFD95BCA231BF7294B54BBBE1F7A43A2 /* Util.h */,\n\t\t\t\t2002DD4A0F6B3EB4DD29785216A66D9B /* Utility.h */,\n\t\t\t\t493BF367283D552EA0719F4472FB1C1E /* Varint.h */,\n\t\t\t\t0CBCEC21A3A50591C487CAFD8DCF2CED /* View.h */,\n\t\t\t\t066367DE103F744E9A009FA7A06E7F87 /* VirtualExecutor.h */,\n\t\t\t\t1CB19BE6FA86208CB5F4A61FAACE298E /* WeightedEvictingCacheMap.h */,\n\t\t\t\tB8EE883969234B8D43CEA19B78B08828 /* Windows.h */,\n\t\t\t\tD796999F7EB66C9E901D5459591C6456 /* Fabric */,\n\t\t\t\t42D7DF2047B869A8F3D547A8C6816953 /* Support Files */,\n\t\t\t);\n\t\t\tname = \"RCT-Folly\";\n\t\t\tpath = \"RCT-Folly\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXHeadersBuildPhase section */\n\t\t03D0AD5F592D8F72B9347278AC7528B2 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t0E23530ACDC77621C49C1C0B334F772C /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t131B4DFB7582473308782B58746A7B52 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1924379562E82C45C24131B0617BFAA9 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1F2D4CFFFC42880B1F612DCF5363A6DA /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA3EE983F94C4B475C21E8F62825FB9A0 /* BindingsInstaller.h in Headers */,\n\t\t\t\t96CC92BF70F2531207DA2C1317DE05BD /* BridgelessJSCallInvoker.h in Headers */,\n\t\t\t\tCB360F4117FB09CBC5BE701D8FC23832 /* BridgelessNativeMethodCallInvoker.h in Headers */,\n\t\t\t\t35547761AFCB44BCA094A33F2AA23946 /* BufferedRuntimeExecutor.h in Headers */,\n\t\t\t\t083594D0ABE1486128C1FACE9EBBB8E1 /* JSRuntimeFactory.h in Headers */,\n\t\t\t\t1432E3A16B74C9650C19792CD18E8B4E /* LegacyUIManagerConstantsProviderBinding.h in Headers */,\n\t\t\t\t18F1DA5B651DC6FF50C4B7D1A14C844C /* PlatformTimerRegistry.h in Headers */,\n\t\t\t\t412F8240ACB84265E0864A13B5C9F222 /* ReactInstance.h in Headers */,\n\t\t\t\tC53B4E78EE7B685B08EADB598B3D73C0 /* TimerManager.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1FC7C83C323D5915F4692711E389563D /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t2C77EFD57E0B1FEFDD34BA38A21E75B1 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t244E92C5AC2F270708212D76276B1CC6 /* FBReactNativeSpec.h in Headers */,\n\t\t\t\tD277B419655B9919F8FF7DA23CDAA69A /* FBReactNativeSpecJSI.h in Headers */,\n\t\t\t\tF9E214AD4CE39C95F7CB3A7DF2521A86 /* RCTModulesConformingToProtocolsProvider.h in Headers */,\n\t\t\t\tDC5A073E59515BBFB3FBAA977043E3AF /* React-Codegen-umbrella.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t2ED4D754BD2CEF3183E1F52B93D27909 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6CA3161E6FA8BEBED33FD2FE8E1B3DAF /* ReactNativeConfig.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t2F3933079C76AD41609F9AFC5782B638 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tABA6E5E90611005CDA352D8179B5C97F /* RCTBlobCollector.h in Headers */,\n\t\t\t\t1CC5C347C1A6FBFC24DD8F7BB59F94FE /* RCTBlobManager.h in Headers */,\n\t\t\t\t2F97D1B13BB188BE85AE78B1463C1511 /* RCTBlobPlugins.h in Headers */,\n\t\t\t\t22F5D84C2EC3F910630272B7FC049205 /* RCTFileReaderModule.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t2F74E959B7B6CD3497F4E33BD9C61FE3 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t062CCABB12806D7CB657BEB43436A947 /* DebugStringConvertible.h in Headers */,\n\t\t\t\t570946E17F460217CD71C4222A0380E9 /* DebugStringConvertibleItem.h in Headers */,\n\t\t\t\tFE246A8CBD588F3885A9F3746184B7A7 /* debugStringConvertibleUtils.h in Headers */,\n\t\t\t\tD68E9C9482F92F4500306D7CA38AFE5A /* flags.h in Headers */,\n\t\t\t\t7EE0F6B05C54DAF73A25F1901169A318 /* React-rendererdebug-umbrella.h in Headers */,\n\t\t\t\t6DDB890790361CB27DE50CD880831B9A /* SystraceSection.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t3923F79A6C43DC54B393E6A014C97F3D /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA93939302F504E8A673D78DE89013DAA /* NSTextStorage+FontScaling.h in Headers */,\n\t\t\t\tAD4645BBE5F1978FE1062D8DF27003AF /* RCTBackedTextInputDelegate.h in Headers */,\n\t\t\t\tE9E9BC877650CF84F4905AEA78C32B8A /* RCTBackedTextInputDelegateAdapter.h in Headers */,\n\t\t\t\tA21AB41F6F340F2D09106811A1702842 /* RCTBackedTextInputViewProtocol.h in Headers */,\n\t\t\t\tE200A4AE1E40E3119E83786F9B9EE687 /* RCTBaseTextInputShadowView.h in Headers */,\n\t\t\t\t97215F497B2ED4601FCA816AC3DA2375 /* RCTBaseTextInputView.h in Headers */,\n\t\t\t\t0786745B0F7A7521328CC9923B8BF5E9 /* RCTBaseTextInputViewManager.h in Headers */,\n\t\t\t\t8B8AC90BDB270B8F075B58F2BC966E3E /* RCTBaseTextShadowView.h in Headers */,\n\t\t\t\tF248056FE6F3501E0F531C786FD64037 /* RCTBaseTextViewManager.h in Headers */,\n\t\t\t\t177DC996D972A1F1AA6BC586B8A468A7 /* RCTConvert+Text.h in Headers */,\n\t\t\t\tFC73229D9DC21849A4BF5E101EF69154 /* RCTDynamicTypeRamp.h in Headers */,\n\t\t\t\t5B9EC322BD0660BBB5BB7EEA03DF27B5 /* RCTInputAccessoryShadowView.h in Headers */,\n\t\t\t\tE9BD0DCBBEC08FEA24C2D8CEBC731832 /* RCTInputAccessoryView.h in Headers */,\n\t\t\t\t506691E4775474A330411B90500F4307 /* RCTInputAccessoryViewContent.h in Headers */,\n\t\t\t\tE10A1CA856FB54018BD7A8F30AE09540 /* RCTInputAccessoryViewManager.h in Headers */,\n\t\t\t\tD2D6709D8BE4016F130D13598CECF0D4 /* RCTMultilineTextInputView.h in Headers */,\n\t\t\t\t9766FC44D73330BFAAB4E4350CCCC6A5 /* RCTMultilineTextInputViewManager.h in Headers */,\n\t\t\t\tCCE0086EBD30F01C080E3B021727B3FA /* RCTRawTextShadowView.h in Headers */,\n\t\t\t\tFD1412F7EA27E8EC3820F7587AE22248 /* RCTRawTextViewManager.h in Headers */,\n\t\t\t\t644F1B7EDB5ECC21CCBAE8800E7E31B5 /* RCTSinglelineTextInputView.h in Headers */,\n\t\t\t\t1742C4E8AB7ED1A6739FA6689AA3DE2A /* RCTSinglelineTextInputViewManager.h in Headers */,\n\t\t\t\t05CEAA68D97F9486B6361528835C7FFC /* RCTTextAttributes.h in Headers */,\n\t\t\t\t5A96B83B90FDF9B1DFF02B7907CDC6AD /* RCTTextSelection.h in Headers */,\n\t\t\t\tE4DBCAA513C14C66C493FA72587F87BC /* RCTTextShadowView.h in Headers */,\n\t\t\t\tFD2289F6888F0B2154D3A3018727535B /* RCTTextTransform.h in Headers */,\n\t\t\t\tC28578E54BCAC6BAD431CC47C0D837DB /* RCTTextView.h in Headers */,\n\t\t\t\t2A348AB502AECDE1C672786CC3B55C27 /* RCTTextViewManager.h in Headers */,\n\t\t\t\t370E2940965694FD29FF3ADFCDE7A953 /* RCTUITextField.h in Headers */,\n\t\t\t\t47B3B0B341756FE46A9E04CFE10D470A /* RCTUITextView.h in Headers */,\n\t\t\t\t30CA335AA5FDC7D5427E29AE12CB3DA4 /* RCTVirtualTextShadowView.h in Headers */,\n\t\t\t\t454C26722FF0D6D11DA74C5228AA2085 /* RCTVirtualTextView.h in Headers */,\n\t\t\t\tA82FB98C2DC7B85649063C88C00725A8 /* RCTVirtualTextViewManager.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t3C7BE99ED45BF15CCA844CFAE09EF656 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t86B3C2F4E98DEF836BAA645068EC7341 /* simdjson.h in Headers */,\n\t\t\t\t72FD3B8D4EAC12F432DE6B6350A8A52F /* simdjson-umbrella.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t3DA53BE61AD2344C583DC7DE56DDE779 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tEC997A618F6AB5D3076F860176E66314 /* Array.h in Headers */,\n\t\t\t\t39B7CCC00536E89229DD45DE7FD25D7D /* AString.h in Headers */,\n\t\t\t\tF8F6918DEA2269A706DB0786EA73D733 /* Base.h in Headers */,\n\t\t\t\t477ED6A28D3CD8F41F2E96F5D3C98904 /* Bool.h in Headers */,\n\t\t\t\t7D2198ADD1AD7461713B493938D36639 /* Bridging.h in Headers */,\n\t\t\t\tD118BCB36B5A104E9E977BADC0B7C9A0 /* CallbackWrapper.h in Headers */,\n\t\t\t\t914C439C1D26D04E388C679710CB249B /* CallbackWrapper.h in Headers */,\n\t\t\t\t5D59046CAC4D66AFB8FF14E482B6F799 /* Class.h in Headers */,\n\t\t\t\tDE92F90C06BC1B8BF2FC386891260157 /* Convert.h in Headers */,\n\t\t\t\tF130698EEF950DE0175BC6B9190FF988 /* CxxTurboModuleUtils.h in Headers */,\n\t\t\t\t4D3D91877333B2A899B1D1318D8CAB28 /* Dynamic.h in Headers */,\n\t\t\t\t1F147DA94B4631A7C3DFA6A200385A7F /* Error.h in Headers */,\n\t\t\t\tC6EDCB116DA4E5DF0B2208B9D1F6AEF3 /* Function.h in Headers */,\n\t\t\t\tC722DB4057046A629115CE023B7A47D6 /* LongLivedObject.h in Headers */,\n\t\t\t\t562A3C7202DCE0DB151CF213B983CEFE /* LongLivedObject.h in Headers */,\n\t\t\t\t4F4D04EE2C06684AA7268737AAE9B6C3 /* Number.h in Headers */,\n\t\t\t\tFCFBAB68412C83F9EC2FB13D4130D695 /* Object.h in Headers */,\n\t\t\t\t8ED21B7AC493FE347E9E83369F9352CC /* Promise.h in Headers */,\n\t\t\t\tB482C575F5108FE43A5093BD905ED34C /* ReactCommon-umbrella.h in Headers */,\n\t\t\t\t3B61E4B1CE2CA8087C242D41191C5DD7 /* TurboCxxModule.h in Headers */,\n\t\t\t\tB6ACD468C9A12D4E2D4177AE940172B9 /* TurboModule.h in Headers */,\n\t\t\t\t152D661D4E78EFAF951BEEEC25294B04 /* TurboModuleBinding.h in Headers */,\n\t\t\t\tD9243AC9718468197B02FE4EAA191680 /* TurboModulePerfLogger.h in Headers */,\n\t\t\t\t2C6B6C20776A6BA94A3FE6306DBB60C0 /* TurboModuleUtils.h in Headers */,\n\t\t\t\t34D9E5CBB49C6023825590C930261A0B /* Value.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t3F5D17CD9252A653C5971202E0D8D3D2 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t43CB88E0FAB282141C8E630E7B32B9BB /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t301CA9266A52873F320B63EF2A8DFB4B /* bignum.h in Headers */,\n\t\t\t\t6A0F9437521FAB0502857D5DAB6314F4 /* bignum-dtoa.h in Headers */,\n\t\t\t\t327DA72CDC89A3215CE65582DE8EC3CE /* cached-powers.h in Headers */,\n\t\t\t\t56279FD90DFD7BF436B971346A2A0B06 /* diy-fp.h in Headers */,\n\t\t\t\t43514E4A7CF3EE6B921317D17245C4E6 /* double-conversion.h in Headers */,\n\t\t\t\t14188338839347D37D80C598C0E5748C /* DoubleConversion-umbrella.h in Headers */,\n\t\t\t\tC39630188B797485BDB7AE5D8FC4B7CC /* fast-dtoa.h in Headers */,\n\t\t\t\t858CE2E693CE69AF1CDE8933197E0572 /* fixed-dtoa.h in Headers */,\n\t\t\t\t7C3A014118CD31C6C26566E08F64BC3F /* ieee.h in Headers */,\n\t\t\t\tD92EE1301D88213094E73A53FB12CC7A /* strtod.h in Headers */,\n\t\t\t\t998B42D1DD666A96EF1B6DE78167C70B /* utils.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t480E3EC17192D033B3243595772EED8D /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD3A424FD85699ECAA4514C62046BCD9C /* ConnectionDemux.h in Headers */,\n\t\t\t\t0A525F353D76ACCAEB8A08546550D6AE /* HermesExecutorFactory.h in Headers */,\n\t\t\t\tB08FDA2BE608A087E4B93A5394734E2C /* HermesRuntimeAgentDelegate.h in Headers */,\n\t\t\t\tE18F8DA28CD01BA27291E774755C9EC6 /* Registration.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t4CE40E530312BF393D28CBE0E51411F9 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC6747C938C8A8C6E92C0590D74661B76 /* React-featureflags-umbrella.h in Headers */,\n\t\t\t\tB7E1E22D704AE6B45D5CE7493F1DD3F6 /* ReactNativeFeatureFlags.h in Headers */,\n\t\t\t\t375048B5D0D59A4D57806E18C491B74A /* ReactNativeFeatureFlagsAccessor.h in Headers */,\n\t\t\t\t013853D86CB10EC25449DC7BF10568E1 /* ReactNativeFeatureFlagsDefaults.h in Headers */,\n\t\t\t\tDDB67DC583A9C49F0D3A01592065F391 /* ReactNativeFeatureFlagsProvider.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t50700FF38864A8F11B138C9B1C3F7EC7 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t88847364C16DA3DF2BC6288012F34BB2 /* CoreModulesPlugins.h in Headers */,\n\t\t\t\tB9FD8BF287FCE73CDD7100E5A2CA7E24 /* DispatchMessageQueueThread.h in Headers */,\n\t\t\t\t7EE93CAC8D76887681E9984AC37A9FBF /* FBXXHashUtils.h in Headers */,\n\t\t\t\t93ECDFFA540B3E946DAF9907951CCEFB /* NSDataBigString.h in Headers */,\n\t\t\t\t7DDC9C325BEBF570103734FD7DBC2EFC /* NSTextStorage+FontScaling.h in Headers */,\n\t\t\t\t62ECA5DA07D5580733EDE413CFCAA475 /* RCTAccessibilityManager.h in Headers */,\n\t\t\t\t132E187EFE1E47ADD957A700284D6D9F /* RCTAccessibilityManager+Internal.h in Headers */,\n\t\t\t\tC5683D8CE70A467CD760436F464EBF07 /* RCTActionSheetManager.h in Headers */,\n\t\t\t\tDF036DC6537C4E015C97F52AFCFD32FC /* RCTActivityIndicatorView.h in Headers */,\n\t\t\t\t1B8A83B4760FD4C5BA61A514D66A63CD /* RCTActivityIndicatorViewManager.h in Headers */,\n\t\t\t\tA51151FF17D9D07646B188DFD75A0AE1 /* RCTAdditionAnimatedNode.h in Headers */,\n\t\t\t\tEFF65D240F771DB091184AAF4242F8ED /* RCTAlertController.h in Headers */,\n\t\t\t\t2E0021D5DBD9D49FE9F15EF491CCC73E /* RCTAlertManager.h in Headers */,\n\t\t\t\t6AA211002A317FB9EB7047EC3E0B6CAE /* RCTAnimatedImage.h in Headers */,\n\t\t\t\t457301E7532DE95F70DB8794A5EE9BCE /* RCTAnimatedNode.h in Headers */,\n\t\t\t\t14A2A5FBA6070AC7E7320E8DA534901D /* RCTAnimationDriver.h in Headers */,\n\t\t\t\t418D8178CC19322DA87BCD5B98D11D5F /* RCTAnimationPlugins.h in Headers */,\n\t\t\t\t7E9D2C1821BA925A94462F2556B7C282 /* RCTAnimationType.h in Headers */,\n\t\t\t\t461CBD4EA7E870FBB406BE1A44D15A6E /* RCTAnimationUtils.h in Headers */,\n\t\t\t\t996659F42631C1F1EF1EB37666EBEC84 /* RCTAppearance.h in Headers */,\n\t\t\t\t134F41DF984A58A9AF39A8C4B87BA130 /* RCTAppState.h in Headers */,\n\t\t\t\t97B2A42B5817C59F462248A075991C5E /* RCTAssert.h in Headers */,\n\t\t\t\t4A81228C0507B6999A9DD504323C1BA1 /* RCTAutoInsetsProtocol.h in Headers */,\n\t\t\t\tF1E2974DDB47A364980F1BE4690F2775 /* RCTBackedTextInputDelegate.h in Headers */,\n\t\t\t\t176B697FC865093156BE99FD2E26E832 /* RCTBackedTextInputDelegateAdapter.h in Headers */,\n\t\t\t\t3538563AD434CBFA6C3567D5B59E20C3 /* RCTBackedTextInputViewProtocol.h in Headers */,\n\t\t\t\t646368EC7C6F2C08EDD65268D7B7A79B /* RCTBaseTextInputShadowView.h in Headers */,\n\t\t\t\tAB88C2DEBE20FD6CE62478DBA925FE6E /* RCTBaseTextInputView.h in Headers */,\n\t\t\t\t1CFA73658F87C10453EE47487DCC0B4E /* RCTBaseTextInputViewManager.h in Headers */,\n\t\t\t\t6AAA9F629DBACA51982194772C98C826 /* RCTBaseTextShadowView.h in Headers */,\n\t\t\t\t0A9DCA309A20F282A70CE9A354445E8A /* RCTBaseTextViewManager.h in Headers */,\n\t\t\t\t3F0DA3FE9305A3181F7BA27FADB4F9C3 /* RCTBlobManager.h in Headers */,\n\t\t\t\t9111482AEA47A273F54C6A45660C17F8 /* RCTBorderCurve.h in Headers */,\n\t\t\t\t70ACDD1F376B8B5A7FB1A8F2A0B908A6 /* RCTBorderDrawing.h in Headers */,\n\t\t\t\t4FD8523C00E419DA64417797EDC77A42 /* RCTBorderStyle.h in Headers */,\n\t\t\t\tD9C64AA891BD63910BE6D918867618E2 /* RCTBridge.h in Headers */,\n\t\t\t\t6FD855099FE9DD6831F7AA14A8D6F777 /* RCTBridge+Inspector.h in Headers */,\n\t\t\t\t5D2030AC19338EA569B5CA75254256FC /* RCTBridge+Private.h in Headers */,\n\t\t\t\t05A580DBF295D2371F431C910CC5919C /* RCTBridgeConstants.h in Headers */,\n\t\t\t\t2FA26988350A7C7DDD412B7D17AFAA4F /* RCTBridgeDelegate.h in Headers */,\n\t\t\t\t04F8707A7E7C72B27B4A1BBE81C9030C /* RCTBridgeMethod.h in Headers */,\n\t\t\t\t1DAE56A42C6E37928F1FFEB77BF3DC83 /* RCTBridgeModule.h in Headers */,\n\t\t\t\t3D9F615303E80F664EF87C36F4258098 /* RCTBridgeModuleDecorator.h in Headers */,\n\t\t\t\tA0CFCD0F7E1ACC5734A328D7956729AA /* RCTBridgeProxy.h in Headers */,\n\t\t\t\tCC4CE15B64E3D6123467FE8E3BB099BF /* RCTBridgeProxy+Cxx.h in Headers */,\n\t\t\t\tA58560BE133410AEDF2DB9DB58DC3CEC /* RCTBundleAssetImageLoader.h in Headers */,\n\t\t\t\t6D0967A5AFE1B86D8D5B8C084797FA58 /* RCTBundleManager.h in Headers */,\n\t\t\t\tFE12A07411DA6DBDF3D79CB4FB59C8AD /* RCTBundleURLProvider.h in Headers */,\n\t\t\t\t74A3831F302B0755566D22D3C30C2B74 /* RCTClipboard.h in Headers */,\n\t\t\t\tDDEB4462BF2B783F42E8EB99035624D7 /* RCTColorAnimatedNode.h in Headers */,\n\t\t\t\tB95B3FEA85BF956F4A5CA3D0C820BC43 /* RCTComponent.h in Headers */,\n\t\t\t\t1F42FAE5D5775D8F7630EE666E17DB4B /* RCTComponentData.h in Headers */,\n\t\t\t\t88C9FAD022478A7E8EF82D42816571C6 /* RCTComponentEvent.h in Headers */,\n\t\t\t\t5F8B639C0CAC522C3057CF9E649534CB /* RCTConstants.h in Headers */,\n\t\t\t\t38D845C721547D5C42965B3EAF1E6E66 /* RCTConvert.h in Headers */,\n\t\t\t\tE54B039781E19ECACF0DD70219DBD68A /* RCTConvert+CoreLocation.h in Headers */,\n\t\t\t\t72294B58C56420DC0B78EABE73A60EC7 /* RCTConvert+Text.h in Headers */,\n\t\t\t\t334D66567F979838AB9768E9FAD7DAB5 /* RCTConvert+Transform.h in Headers */,\n\t\t\t\tA3CE4C1EAD893E3451AB41D1E13069C2 /* RCTCursor.h in Headers */,\n\t\t\t\t9BCE5725306ABEC6584FCB1239B9CA22 /* RCTCxxBridgeDelegate.h in Headers */,\n\t\t\t\t041CF2CB65A7E9545B3EC1BB2BCFD469 /* RCTCxxConvert.h in Headers */,\n\t\t\t\tCC03051DBCACE8B77F865DD060DAFA03 /* RCTCxxInspectorPackagerConnection.h in Headers */,\n\t\t\t\tF071C60F210B522606D5581D12975A4B /* RCTCxxInspectorPackagerConnectionDelegate.h in Headers */,\n\t\t\t\t4241ADF61CF1F176813006CE278344D8 /* RCTCxxInspectorWebSocketAdapter.h in Headers */,\n\t\t\t\tA6A14B5D2532DF9B9CC2BA83095FC9A9 /* RCTCxxMethod.h in Headers */,\n\t\t\t\t8569FF4D1B56E1A399877F11FC5E97B7 /* RCTCxxModule.h in Headers */,\n\t\t\t\t05AC9AEA1013D02AF586E82722432DB4 /* RCTCxxUtils.h in Headers */,\n\t\t\t\t6EC429788275A10A19015F2048C9AE9F /* RCTDataRequestHandler.h in Headers */,\n\t\t\t\t5FCF219B74C2FD233CA9AD48E6970912 /* RCTDebuggingOverlay.h in Headers */,\n\t\t\t\t47AD3056CBE40003DCC7F044CE31549B /* RCTDebuggingOverlayManager.h in Headers */,\n\t\t\t\t38D31452260553290B4B6BA24A990899 /* RCTDecayAnimation.h in Headers */,\n\t\t\t\tD8C3D24EF338C7C89FD89FB0366AD660 /* RCTDefaultCxxLogFunction.h in Headers */,\n\t\t\t\t908DF962421BEACE0D0EEAC2BEB84A30 /* RCTDefines.h in Headers */,\n\t\t\t\tA764E2968F6CD32CEE6C509E2845BDC7 /* RCTDeviceInfo.h in Headers */,\n\t\t\t\t221CEE4476D0FB923A3FE36D579351FA /* RCTDevLoadingView.h in Headers */,\n\t\t\t\tC59BF33E43C2399EA30FEAB9463C27AC /* RCTDevLoadingViewProtocol.h in Headers */,\n\t\t\t\t2521660EE10E01F259AC87F51E7A65C1 /* RCTDevLoadingViewSetEnabled.h in Headers */,\n\t\t\t\t8494CFAC6607B7239C90ED77D2427B29 /* RCTDevMenu.h in Headers */,\n\t\t\t\tC93A122778F03045ED2729B67D3D3E9F /* RCTDevSettings.h in Headers */,\n\t\t\t\tD39ABFBBDFD1585768162153F9F8DA53 /* RCTDiffClampAnimatedNode.h in Headers */,\n\t\t\t\t903DB9FA0A5B63EEC2030D326152B6FA /* RCTDisplayLink.h in Headers */,\n\t\t\t\t3214D80F9DED151E3F561609B66C7646 /* RCTDisplayWeakRefreshable.h in Headers */,\n\t\t\t\t829CE543BE934D8599926B5A0E2FE109 /* RCTDivisionAnimatedNode.h in Headers */,\n\t\t\t\t0F50D5BEC1F259C0536E804EDFA6AC86 /* RCTDynamicTypeRamp.h in Headers */,\n\t\t\t\tC0AE938053DA32A5D3A7BBFE90F6B81A /* RCTErrorCustomizer.h in Headers */,\n\t\t\t\t9B29E7A144668C69B88E17DF3445B0C8 /* RCTErrorInfo.h in Headers */,\n\t\t\t\tAF2E44664A31AFFE67DE6C1AB58A1709 /* RCTEventAnimation.h in Headers */,\n\t\t\t\t71EC53ECE20B5A8A07D43AB6854CDBFA /* RCTEventDispatcher.h in Headers */,\n\t\t\t\t9C2375A58F12149DA1970C56AC0D8633 /* RCTEventDispatcherProtocol.h in Headers */,\n\t\t\t\tDCFBA2EB42ADCB16CD0529E175BC6AA4 /* RCTEventEmitter.h in Headers */,\n\t\t\t\t82A759B463C6E280D1C961F6F71BAB15 /* RCTExceptionsManager.h in Headers */,\n\t\t\t\t558B2A6974A6F8200C9802FF6F845F60 /* RCTFileReaderModule.h in Headers */,\n\t\t\t\tC684EF50FF0928A3EB0D633FAD9CFF31 /* RCTFileRequestHandler.h in Headers */,\n\t\t\t\t9411CDA895F502CF9BAFEC71B6EB2D75 /* RCTFollyConvert.h in Headers */,\n\t\t\t\tB55B0004A9EC9C4A80588C16C8570BE3 /* RCTFont.h in Headers */,\n\t\t\t\t5B05BCA19F4B7C0CAEE8D7E914493F1C /* RCTFPSGraph.h in Headers */,\n\t\t\t\t2EC9DAE8AF8C81A439BBA1420CAA95F3 /* RCTFrameAnimation.h in Headers */,\n\t\t\t\t424148B9D17806EB7F48FBB0D2FAD14A /* RCTFrameUpdate.h in Headers */,\n\t\t\t\t20E7F16F71DC306F4B434967352405D8 /* RCTGIFImageDecoder.h in Headers */,\n\t\t\t\tEACBE1A3AD0FFB544227FAA98CB212AA /* RCTHTTPRequestHandler.h in Headers */,\n\t\t\t\t783036467F0C5912B8D4A00B02899B3E /* RCTI18nManager.h in Headers */,\n\t\t\t\t363C5BFDFA69F60D5FB8F4739D6D5315 /* RCTI18nUtil.h in Headers */,\n\t\t\t\t9DF893D515B79F5D02C027EF78786C88 /* RCTImageBlurUtils.h in Headers */,\n\t\t\t\t2B2385A1AF00F0FDC4EA1268BA76A6AA /* RCTImageCache.h in Headers */,\n\t\t\t\t458B7CF17D4089008BC4D91F61BF11AD /* RCTImageDataDecoder.h in Headers */,\n\t\t\t\tFF9D0574D3726083613F591EB3EB608E /* RCTImageEditingManager.h in Headers */,\n\t\t\t\t802DC9139C32DC3C41FBEF4AA8CF4952 /* RCTImageLoader.h in Headers */,\n\t\t\t\tE9A31945402EA221C68AC46BD4839F8F /* RCTImageLoaderLoggable.h in Headers */,\n\t\t\t\t748AE618B291F6E05DC17EDB4E4728A6 /* RCTImageLoaderProtocol.h in Headers */,\n\t\t\t\tF239D21943CA530CFE4BFA2B5453635C /* RCTImageLoaderWithAttributionProtocol.h in Headers */,\n\t\t\t\t10C999C6FFE831B0F4E754627171AC0F /* RCTImagePlugins.h in Headers */,\n\t\t\t\t5D2222F04E5E303696BB63978D35DA5A /* RCTImageShadowView.h in Headers */,\n\t\t\t\t07718CEC8AD51EEE4CC2299F0637398E /* RCTImageSource.h in Headers */,\n\t\t\t\t8D594C2325978C5D20EE6C5C2824342E /* RCTImageStoreManager.h in Headers */,\n\t\t\t\t7FFD7CC9EC841E4667F9683D6DB2A099 /* RCTImageURLLoader.h in Headers */,\n\t\t\t\t998341B6CC0A0AD55671B6F0F1535978 /* RCTImageURLLoaderWithAttribution.h in Headers */,\n\t\t\t\tCC1068FC78F21AC9E9DC34700188D70A /* RCTImageUtils.h in Headers */,\n\t\t\t\tA526E4E88DA34AF0F88D9F32C1A60C19 /* RCTImageView.h in Headers */,\n\t\t\t\t96234A6DD5EC92E93D8ECEDD53210730 /* RCTImageViewManager.h in Headers */,\n\t\t\t\tF863DC654B26CC6295C8F8D909B5C229 /* RCTInitializing.h in Headers */,\n\t\t\t\t648CF10E3E4B6BC8F2867E714C8D3315 /* RCTInputAccessoryShadowView.h in Headers */,\n\t\t\t\t1BAC799EDE2AC6356058F9873FD0E453 /* RCTInputAccessoryView.h in Headers */,\n\t\t\t\tFC4BA81798FA9C1FB1C0064280A6D8FA /* RCTInputAccessoryViewContent.h in Headers */,\n\t\t\t\tE9D2FF0ECEDFA4C76E42992CE55EAFDF /* RCTInputAccessoryViewManager.h in Headers */,\n\t\t\t\tFB51B40685C9A6010A007BE6CA582655 /* RCTInspector.h in Headers */,\n\t\t\t\t67E1C84F832F8DE7A9AACD8F3E679C16 /* RCTInspectorDevServerHelper.h in Headers */,\n\t\t\t\t3B57A8B697DB83FCA053D4A7A4D17317 /* RCTInspectorPackagerConnection.h in Headers */,\n\t\t\t\tD93DE7406180B3F14BFB6494C9C55978 /* RCTInterpolationAnimatedNode.h in Headers */,\n\t\t\t\tEEDE418A860EF1BD9051813C5FAF85F5 /* RCTInvalidating.h in Headers */,\n\t\t\t\t7FC71456BF079C9BFC3E541399E9AD09 /* RCTJavaScriptExecutor.h in Headers */,\n\t\t\t\tAC0456506411E770DAE78BB6A370A69D /* RCTJavaScriptLoader.h in Headers */,\n\t\t\t\t05425C40C186C4D905D650FDE09FBB6F /* RCTJSIExecutorRuntimeInstaller.h in Headers */,\n\t\t\t\tBFCCDE2C5A4302237A973BB40482C84A /* RCTJSStackFrame.h in Headers */,\n\t\t\t\tCEA7FB8A9AF33E5A6299B7AC9F1F3018 /* RCTJSThread.h in Headers */,\n\t\t\t\t7F269E29524C0061896B3C3770C62B83 /* RCTKeyboardObserver.h in Headers */,\n\t\t\t\tAEA87805AEDC2CFC5CA3BC87F67DE795 /* RCTKeyCommands.h in Headers */,\n\t\t\t\t27B66BEF2C02E1BF8A8DEFFF921C11B7 /* RCTLayout.h in Headers */,\n\t\t\t\t81DAEA474DC6FF87563B93C13FEB6658 /* RCTLayoutAnimation.h in Headers */,\n\t\t\t\t4092C517F13E60D6D9C673E3530CDC84 /* RCTLayoutAnimationGroup.h in Headers */,\n\t\t\t\tADABCA286A349FD925529339BD32B6D0 /* RCTLinkingManager.h in Headers */,\n\t\t\t\t5B413C5370B3C8A5A6CE70D0FDC10BDD /* RCTLinkingPlugins.h in Headers */,\n\t\t\t\t3034E6F4E05DA159043F7E5065071557 /* RCTLocalAssetImageLoader.h in Headers */,\n\t\t\t\t75903DCA8665A09EAEEED35654CA466D /* RCTLocalizedString.h in Headers */,\n\t\t\t\tBCF538F2334EA778995D5BC9776E8110 /* RCTLog.h in Headers */,\n\t\t\t\t84D3648467DDC6B2AD609FFDC7234AD2 /* RCTLogBox.h in Headers */,\n\t\t\t\t03584C8062B53F05A7A5BA8A4C002AE0 /* RCTLogBoxView.h in Headers */,\n\t\t\t\t4C476F90D14D11D54E3B5C1CDCECB6EC /* RCTMacros.h in Headers */,\n\t\t\t\t880558ACD71010548F8BC00CB06E3F67 /* RCTManagedPointer.h in Headers */,\n\t\t\t\t079D341C7E45BB820BB7CD75514E3282 /* RCTMessageThread.h in Headers */,\n\t\t\t\t57E323C310C3D972940C78AA088CA477 /* RCTMockDef.h in Headers */,\n\t\t\t\t7438BEC925296FD9297DD9E7EDA478F0 /* RCTModalHostView.h in Headers */,\n\t\t\t\tCC9050FCD05014AE5E216B89B1760808 /* RCTModalHostViewController.h in Headers */,\n\t\t\t\tD003AF5F1E96BB49180B4461CFD27434 /* RCTModalHostViewManager.h in Headers */,\n\t\t\t\tA0BA02788E52121E2D2839A9778AF779 /* RCTModalManager.h in Headers */,\n\t\t\t\t34773F2E8217FAD06A591CA37AA00855 /* RCTModuleData.h in Headers */,\n\t\t\t\tBB31575F6CB94C521F193DD6091B43C1 /* RCTModuleMethod.h in Headers */,\n\t\t\t\t9E7BF4EF40C60244E247C1623968BDDF /* RCTModuloAnimatedNode.h in Headers */,\n\t\t\t\t26C1DCC87DD011BAEDB37B82B115865B /* RCTMultilineTextInputView.h in Headers */,\n\t\t\t\t2CD12789B7555CCDC42A8F96829434FD /* RCTMultilineTextInputViewManager.h in Headers */,\n\t\t\t\tF9E8743FF34708E334614F893FBF83B1 /* RCTMultipartDataTask.h in Headers */,\n\t\t\t\t64BE95CF8E1CB240B9219A5ED28B0588 /* RCTMultipartStreamReader.h in Headers */,\n\t\t\t\t28BAA972822F670D348FDBFC73AC77A5 /* RCTMultiplicationAnimatedNode.h in Headers */,\n\t\t\t\t5986E5044FACB904AD3636FF14E01EA8 /* RCTNativeAnimatedModule.h in Headers */,\n\t\t\t\t7D741114888D6A8F92CA30DA7938FF9F /* RCTNativeAnimatedNodesManager.h in Headers */,\n\t\t\t\t8455F11FC6E87759E2FCDDB9086B9527 /* RCTNativeAnimatedTurboModule.h in Headers */,\n\t\t\t\tFC40472096744F71321EB900227DBDCF /* RCTNativeModule.h in Headers */,\n\t\t\t\t0BE9D5B31B8178E25D7701679E024C08 /* RCTNetworking.h in Headers */,\n\t\t\t\t3C7BB8C75F929D8FA314EB26ECE53CDA /* RCTNetworkPlugins.h in Headers */,\n\t\t\t\t1AF45C2BB51683947FDF5F457C5EB8C4 /* RCTNetworkTask.h in Headers */,\n\t\t\t\t324C443EB256ACB55C212834659DA668 /* RCTNullability.h in Headers */,\n\t\t\t\tA72514BC4A3B50129690364CE05BB754 /* RCTObjcExecutor.h in Headers */,\n\t\t\t\t7EF0E9E009F1F4EC5CFC8B6A2D6B1217 /* RCTObjectAnimatedNode.h in Headers */,\n\t\t\t\t012BB6EAAEB87A76C792B66D04A36B78 /* RCTPackagerClient.h in Headers */,\n\t\t\t\t8DDC6079A4374C5B0D4B59CAABF373C0 /* RCTPackagerConnection.h in Headers */,\n\t\t\t\tB1B19038EAA3237411A3B68C9A696A59 /* RCTParserUtils.h in Headers */,\n\t\t\t\t34D59BC36C90C49E573199421B622923 /* RCTPerformanceLogger.h in Headers */,\n\t\t\t\t51D4FB82F519866F1B77D4DF5EB83ED6 /* RCTPerformanceLoggerLabels.h in Headers */,\n\t\t\t\t28420DE9D152356E2FAB7532421804A5 /* RCTPlatform.h in Headers */,\n\t\t\t\t2A63D2E0528E66779F46F18FC17AA6E5 /* RCTPLTag.h in Headers */,\n\t\t\t\t617C1D1B08BAA6078A2F22FCE63F7826 /* RCTPointerEvents.h in Headers */,\n\t\t\t\t8AADCF981A3C5BFC9A728A4807F1FD57 /* RCTProfile.h in Headers */,\n\t\t\t\t18D0C52BFC98BED39B1BA61AEEEE42BA /* RCTPropsAnimatedNode.h in Headers */,\n\t\t\t\t414311FDDDBD44A12AB564123ABFDE7B /* RCTRawTextShadowView.h in Headers */,\n\t\t\t\tF0D80CAC8195D04EC5ACCB34AFA9E62C /* RCTRawTextViewManager.h in Headers */,\n\t\t\t\t886A63B1ED1A16230902FA3A13D84CB7 /* RCTReconnectingWebSocket.h in Headers */,\n\t\t\t\t4FD4897BB7E463BD4B8545A8DDEB8278 /* RCTRedBox.h in Headers */,\n\t\t\t\t17A413B902A05FF7C8FFA29FF67C8484 /* RCTRedBoxExtraDataViewController.h in Headers */,\n\t\t\t\t47BCF82C2C44E89BAC2425744C56BD8A /* RCTRedBoxSetEnabled.h in Headers */,\n\t\t\t\t07D42E889C8BBFAEBA0D6209B9929086 /* RCTRefreshableProtocol.h in Headers */,\n\t\t\t\tFBC28207A3782629D8ECB7F7D22E1FA6 /* RCTRefreshControl.h in Headers */,\n\t\t\t\t0B842AC5587E3794C6EA8047E54FDB41 /* RCTRefreshControlManager.h in Headers */,\n\t\t\t\t01A541E5BC9CBB99C2EE623A47D5DC67 /* RCTReloadCommand.h in Headers */,\n\t\t\t\t24B93B8D464A1B7783F9BCFDD33A31D4 /* RCTResizeMode.h in Headers */,\n\t\t\t\tFB9F5AADA3A6FAA282D800FC90BD863C /* RCTRootContentView.h in Headers */,\n\t\t\t\tE306E120D9274E1261E24B71BDEC3F9D /* RCTRootShadowView.h in Headers */,\n\t\t\t\tED0E6B99D524187706AC30E2B53F55D4 /* RCTRootView.h in Headers */,\n\t\t\t\t7F192056513AC45D918FE1AD9A537992 /* RCTRootViewDelegate.h in Headers */,\n\t\t\t\tB594B10156EF39FBB4350BFA868A2CC3 /* RCTRootViewInternal.h in Headers */,\n\t\t\t\t6511219B93A0F6722B55F007369CA247 /* RCTRuntimeExecutorModule.h in Headers */,\n\t\t\t\t8B3A0DE1411F63948C1B7328AC4DC664 /* RCTSafeAreaShadowView.h in Headers */,\n\t\t\t\t54CA7A9EEECD01C4F6D22243BB6A0AD9 /* RCTSafeAreaView.h in Headers */,\n\t\t\t\tAF405027DF88096366B45A503349F101 /* RCTSafeAreaViewLocalData.h in Headers */,\n\t\t\t\tECAEA2A0100A0AE72A3E437FD005881E /* RCTSafeAreaViewManager.h in Headers */,\n\t\t\t\tD9ED192F400D44DC02D98A20B123F16C /* RCTScrollableProtocol.h in Headers */,\n\t\t\t\t86E83BA3D9D13B74E9375EF5DABEBBFE /* RCTScrollContentShadowView.h in Headers */,\n\t\t\t\tC5C73190B9AE8ECC8D69A6B28FEE407F /* RCTScrollContentView.h in Headers */,\n\t\t\t\t3BD1B9E6E3E5634C671FCEB14161A751 /* RCTScrollContentViewManager.h in Headers */,\n\t\t\t\t0740889CD8076D764DE2ECBE838DE059 /* RCTScrollEvent.h in Headers */,\n\t\t\t\tB853DD690352D47747E1C0F628B2F965 /* RCTScrollView.h in Headers */,\n\t\t\t\tC94ACD989BE1642BD08003091B0B9A6A /* RCTScrollViewManager.h in Headers */,\n\t\t\t\t5B52BA28DECEF4797254071E699E01A3 /* RCTSegmentedControl.h in Headers */,\n\t\t\t\tB33ADB9AA3945A5FBE3DA6B5CBD94CCF /* RCTSegmentedControlManager.h in Headers */,\n\t\t\t\t94B9DAD9D6E6079306AAA42C6D3B711B /* RCTSettingsManager.h in Headers */,\n\t\t\t\tA2E51C7BD2FFC062C48C10167934CCAC /* RCTSettingsPlugins.h in Headers */,\n\t\t\t\tEE907C353DD8D1953A2994C57CBFE26C /* RCTShadowView.h in Headers */,\n\t\t\t\t1BC18889A0F8309C58DCAE6525184FC0 /* RCTShadowView+Internal.h in Headers */,\n\t\t\t\t03E022AAD071ABD52393EA63BED66760 /* RCTShadowView+Layout.h in Headers */,\n\t\t\t\t99CC5B420D64ACDD783109436516FD04 /* RCTSinglelineTextInputView.h in Headers */,\n\t\t\t\tBF99D3180B889F62B09F91350E7C662B /* RCTSinglelineTextInputViewManager.h in Headers */,\n\t\t\t\t46F7ED9516919044D6FD2A226838DF0A /* RCTSourceCode.h in Headers */,\n\t\t\t\t750459F7A6D7BC32515039B696B032DD /* RCTSpringAnimation.h in Headers */,\n\t\t\t\tC3FC726B41D7E5C3AE7913D10FCA7710 /* RCTStatusBarManager.h in Headers */,\n\t\t\t\t756FE581ACE3EDF9F30A05EE811C000A /* RCTStyleAnimatedNode.h in Headers */,\n\t\t\t\tC6CDF82E4F1DB6694DC892F9E734C059 /* RCTSubtractionAnimatedNode.h in Headers */,\n\t\t\t\tBC62BEBADDC0DF99B2626677E09F4224 /* RCTSurface.h in Headers */,\n\t\t\t\tD7A16D49963032254D9E148DAE6AEFC7 /* RCTSurfaceDelegate.h in Headers */,\n\t\t\t\t50506943625219009602B94281736940 /* RCTSurfaceHostingProxyRootView.h in Headers */,\n\t\t\t\t5361BA153A940D1856498F41B988E292 /* RCTSurfaceHostingView.h in Headers */,\n\t\t\t\t8F323E2F2DA6F55192388F26F0C24927 /* RCTSurfacePresenterStub.h in Headers */,\n\t\t\t\tABDAE92094104A99B62D530A783B8446 /* RCTSurfaceProtocol.h in Headers */,\n\t\t\t\t826104B9BF8174D5B23A6D51AC4A16AF /* RCTSurfaceRootShadowView.h in Headers */,\n\t\t\t\tB95535EB465D0577E50655E252780F7C /* RCTSurfaceRootShadowViewDelegate.h in Headers */,\n\t\t\t\t42F55F8D487C777A6A8C180E4DAB0BEE /* RCTSurfaceRootView.h in Headers */,\n\t\t\t\tB9059E18CB874DB0187746AD8FC588DD /* RCTSurfaceSizeMeasureMode.h in Headers */,\n\t\t\t\tA1972E1E435534713DA2AFD946DD0856 /* RCTSurfaceStage.h in Headers */,\n\t\t\t\tE03DA0EF491E76A7B522F8AA29B6F505 /* RCTSurfaceView.h in Headers */,\n\t\t\t\t6B92459CC6D8AE87C82FD9DA5D8B34B1 /* RCTSurfaceView+Internal.h in Headers */,\n\t\t\t\tBE89C52B16C25B11A806A9C95D163AC9 /* RCTSwitch.h in Headers */,\n\t\t\t\t66F7D45C7DE22886B4121EADD127426E /* RCTSwitchManager.h in Headers */,\n\t\t\t\tEA64CBFA402C1BC6683F8FD457F438B4 /* RCTTextAttributes.h in Headers */,\n\t\t\t\tB9CD8F8C81F90DDB41B08F0B005D2FD2 /* RCTTextDecorationLineType.h in Headers */,\n\t\t\t\t28FA21EE52C9E18188C59298BB5C9B23 /* RCTTextSelection.h in Headers */,\n\t\t\t\t6598CFB917768FDAB38F05A0AC546F14 /* RCTTextShadowView.h in Headers */,\n\t\t\t\tED92DB0641F90C061852E17704C6A69B /* RCTTextTransform.h in Headers */,\n\t\t\t\tAC022ED4B280CBF9CC05FD81E941DF74 /* RCTTextView.h in Headers */,\n\t\t\t\t726C35D99D2C6DAD679EDA901EEB9989 /* RCTTextViewManager.h in Headers */,\n\t\t\t\t6B52CF6C070C5E98C528FB32F1D34624 /* RCTTiming.h in Headers */,\n\t\t\t\t3915F70AA612897DAA0B10B81683CAC5 /* RCTTouchEvent.h in Headers */,\n\t\t\t\t25E65F9C1D8F402D822044446C5F4D76 /* RCTTouchHandler.h in Headers */,\n\t\t\t\t8933D7B181697994023E7AAEB3DD9909 /* RCTTrackingAnimatedNode.h in Headers */,\n\t\t\t\t12731EBF39779BB1E177B701949AD2C2 /* RCTTransformAnimatedNode.h in Headers */,\n\t\t\t\t5F4C99E3B76689373D2ED7C28927F12D /* RCTTurboModuleRegistry.h in Headers */,\n\t\t\t\t1DD61B98236970129C72DC5F12F60FFC /* RCTUIImageViewAnimated.h in Headers */,\n\t\t\t\t10C16DE5DAD1B3D65FCED627DA9BA6F2 /* RCTUIManager.h in Headers */,\n\t\t\t\t6CB1E8F84A18475FBACB6C3B62D0AFE5 /* RCTUIManagerObserverCoordinator.h in Headers */,\n\t\t\t\t324FCC0FF10B590AF07F730C94CD911D /* RCTUIManagerUtils.h in Headers */,\n\t\t\t\tB1822AAA5CD811D59978BE7D8B57A8B1 /* RCTUITextField.h in Headers */,\n\t\t\t\tF7CCD35E242791EAD335DBA830CAF627 /* RCTUITextView.h in Headers */,\n\t\t\t\t1366F04C5590C425BB77826538FFC333 /* RCTUIUtils.h in Headers */,\n\t\t\t\t755282CFA23DBA4E963AE5F9CC11C0FA /* RCTURLRequestDelegate.h in Headers */,\n\t\t\t\t86FE8980695E53A76E1F1E83E07F2AC3 /* RCTURLRequestHandler.h in Headers */,\n\t\t\t\tF133C4AD67CB54836E98512AEA7655A8 /* RCTUtils.h in Headers */,\n\t\t\t\tBF50613A6236144CFC64B76482D8604A /* RCTUtilsUIOverride.h in Headers */,\n\t\t\t\tCE6B34445994B4A63A62A2E845DC3979 /* RCTValueAnimatedNode.h in Headers */,\n\t\t\t\tCBAE1BAD49EE72A5219F0810B2E2285A /* RCTVersion.h in Headers */,\n\t\t\t\t5141D72D38376A7357634EA7BED7B529 /* RCTVibration.h in Headers */,\n\t\t\t\tCC6A3584C37F8AAF1DB1E24E2879A29F /* RCTVibrationPlugins.h in Headers */,\n\t\t\t\tEEC7964460506D85D5B80B2CDEF357FD /* RCTView.h in Headers */,\n\t\t\t\t244DF977A158213CCB43D4FB6CB90E3C /* RCTViewManager.h in Headers */,\n\t\t\t\t78606A7D8FE0761B720DD4F0531BB36A /* RCTViewUtils.h in Headers */,\n\t\t\t\tFD6C993EEC7B56C5CD8F3E8DDDE62EA4 /* RCTVirtualTextShadowView.h in Headers */,\n\t\t\t\tD48E92175A87C0C0244115F10ACB1E08 /* RCTVirtualTextView.h in Headers */,\n\t\t\t\tAE4FCD234B012BE65C7CA496861FDEAE /* RCTVirtualTextViewManager.h in Headers */,\n\t\t\t\tE80A175FF7F506B78BD9376B8D68EB2F /* RCTWebSocketExecutor.h in Headers */,\n\t\t\t\t682AD90FD13AF03CF8AC476D4EC22BA3 /* RCTWebSocketModule.h in Headers */,\n\t\t\t\t81D57A8CE92E84FEA69A148D1BA897A5 /* RCTWrapperViewController.h in Headers */,\n\t\t\t\t8E729B5904B3B5667E973370219CDEF4 /* React-Core-umbrella.h in Headers */,\n\t\t\t\t33E2BFCBA5338082F01D9EB37BAA4D29 /* UIView+Private.h in Headers */,\n\t\t\t\t8E6752CB584D97C2A86519B83B482227 /* UIView+React.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t51368F0B4BB078EBDF20C37CE3191BDE /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t0911E5CE6C9678C2C47A2A1749FF64D4 /* primitives.h in Headers */,\n\t\t\t\tC9673DD1A700BA1297C0EEF20E6F1F51 /* RuntimeScheduler.h in Headers */,\n\t\t\t\tEDFC9B54A30EA3B68823A2511866FD00 /* RuntimeScheduler_Legacy.h in Headers */,\n\t\t\t\t7B283574381E52437094359C04A8B040 /* RuntimeScheduler_Modern.h in Headers */,\n\t\t\t\tAA9C529959EA98EB49C28EE11BD7137B /* RuntimeSchedulerBinding.h in Headers */,\n\t\t\t\t8EE950B8A3384D574B426B5A85C62D4D /* RuntimeSchedulerCallInvoker.h in Headers */,\n\t\t\t\tFD39522D224A22B7B91E3BFB6D598CB4 /* RuntimeSchedulerClock.h in Headers */,\n\t\t\t\t6629AA88CD8BD22CF2067C68C96E0BEE /* SchedulerPriorityUtils.h in Headers */,\n\t\t\t\t5B09CFB50E640F8977C0E91123BBF38E /* Task.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t539C88BE469CDEE166CB70B00092D982 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t890821868B6146972E028C6CDCFAFB46 /* RCTAdditionAnimatedNode.h in Headers */,\n\t\t\t\tDF58E8CF0A1D74B0B1D6582660B33A6B /* RCTAnimatedNode.h in Headers */,\n\t\t\t\t3AB2BCC50FC4E939FC03FA2CA6D93E7C /* RCTAnimationDriver.h in Headers */,\n\t\t\t\tFFFD58B8888202E20B594C6DEDBCBA07 /* RCTAnimationPlugins.h in Headers */,\n\t\t\t\t3BD8694DF761B2FDC7BECD2BF44B222E /* RCTAnimationUtils.h in Headers */,\n\t\t\t\t2000672F833DFA37DD8CB7BEAFCCF66F /* RCTColorAnimatedNode.h in Headers */,\n\t\t\t\t0FD8067209C57B8F29919B037BC1ADCE /* RCTDecayAnimation.h in Headers */,\n\t\t\t\t993B010DAB0C47A19FF3C8CB5F18F3BB /* RCTDiffClampAnimatedNode.h in Headers */,\n\t\t\t\tBFBCF7EE822DE23E5F13DB60A08EE12A /* RCTDivisionAnimatedNode.h in Headers */,\n\t\t\t\t93917AFA25B6646D3B4C8B89C923372C /* RCTEventAnimation.h in Headers */,\n\t\t\t\tABBD121FC3379E6C4E0DB69D6C223F28 /* RCTFrameAnimation.h in Headers */,\n\t\t\t\tFEC88C9D9E42428AEBEA8C790889E70D /* RCTInterpolationAnimatedNode.h in Headers */,\n\t\t\t\t71128E53B471C85A99F88750408B7752 /* RCTModuloAnimatedNode.h in Headers */,\n\t\t\t\t2E561E90748578416A9EE5CB139792AF /* RCTMultiplicationAnimatedNode.h in Headers */,\n\t\t\t\tB42F97FAE85B0CA99A1BB0B32E53A135 /* RCTNativeAnimatedModule.h in Headers */,\n\t\t\t\tC38C0624ADE70CC7A4721C78981D8051 /* RCTNativeAnimatedNodesManager.h in Headers */,\n\t\t\t\tE3A121600E7E1AF0BAD4F458FB4F3BA8 /* RCTNativeAnimatedTurboModule.h in Headers */,\n\t\t\t\t0A66803576446C88DE73AFC6C2B9B253 /* RCTObjectAnimatedNode.h in Headers */,\n\t\t\t\t0D396D428896CA61E2301A747EE5708F /* RCTPropsAnimatedNode.h in Headers */,\n\t\t\t\tCCD0BF1B78D5A69D873D2841DBA1869C /* RCTSpringAnimation.h in Headers */,\n\t\t\t\t3BFD717911ACBB0C75C28B7BA77DAF93 /* RCTStyleAnimatedNode.h in Headers */,\n\t\t\t\t4BDBFE1061C5C8DB2356FEC255512FC5 /* RCTSubtractionAnimatedNode.h in Headers */,\n\t\t\t\t91261AA9EF204EAA4F865018549E8476 /* RCTTrackingAnimatedNode.h in Headers */,\n\t\t\t\tE51D79B40AF3291F91E6759876CA3EFB /* RCTTransformAnimatedNode.h in Headers */,\n\t\t\t\t90FE9EE300AD62DD80F8ACBEB966A72A /* RCTValueAnimatedNode.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t5C14370402AA4BB4AD7B1F6D8652BE55 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t5E4BA94A4BD1964E50FE99AF6BF0B983 /* CxxModule.h in Headers */,\n\t\t\t\t57E8B60FD6E5FA9BF534BDE834453809 /* CxxNativeModule.h in Headers */,\n\t\t\t\t5B6BF9900C79C4F7623A28977857CB1B /* ErrorUtils.h in Headers */,\n\t\t\t\tB1ED7A7AD7852A7431686CD7CA9D7587 /* Instance.h in Headers */,\n\t\t\t\tFC894BAE1C98F8C86943904E2C83A368 /* JsArgumentHelpers.h in Headers */,\n\t\t\t\t563F1EC6EC87919CEDA50FCB4D3C5B98 /* JsArgumentHelpers-inl.h in Headers */,\n\t\t\t\t0C341730FFBD4215E38D143F056AAD97 /* JSBigString.h in Headers */,\n\t\t\t\t9979B172D36F3FD1E5835B9D990C0603 /* JSBundleType.h in Headers */,\n\t\t\t\t2F92EFDA8334261165D9729751EBCBD2 /* JSExecutor.h in Headers */,\n\t\t\t\t2107303D3315D0F3426CECDA31262A67 /* JSIndexedRAMBundle.h in Headers */,\n\t\t\t\t0DE685BA8A37536FD089DCCA1AEADA20 /* JSModulesUnbundle.h in Headers */,\n\t\t\t\t49DE6AADE6DD8D3EF3EB0555A271672D /* MessageQueueThread.h in Headers */,\n\t\t\t\t6B8F4AA8DFDA7E810544992C621FB2AC /* MethodCall.h in Headers */,\n\t\t\t\tBD6827747579EA86DBDAAA32D9084BE3 /* ModuleRegistry.h in Headers */,\n\t\t\t\t682BA7F2BE81C4075B446A8A758EC098 /* MoveWrapper.h in Headers */,\n\t\t\t\t7A0ED52CE1695B89D2AC55E1350CE883 /* NativeModule.h in Headers */,\n\t\t\t\tA55C66E5656D2B2D10BA7A72BF99EC50 /* NativeToJsBridge.h in Headers */,\n\t\t\t\tE19474B280DFA77E434C1C2048E81937 /* RAMBundleRegistry.h in Headers */,\n\t\t\t\t90ED9323F40C70F953900BEDF86C83CF /* ReactMarker.h in Headers */,\n\t\t\t\tAEB70F3808CB6E0D00B663DA7FC98512 /* ReactNativeVersion.h in Headers */,\n\t\t\t\tF250802327640CC520B809636DE1F35E /* RecoverableError.h in Headers */,\n\t\t\t\t02316C6ABD89D9DCFC7B8AF62D777CD8 /* SharedProxyCxxModule.h in Headers */,\n\t\t\t\t88FF806A114A17DF66BCADF876DACC04 /* SystraceSection.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t5C4140C66CDBC309D6DCFA1BCE146F4A /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t3B553323908F46C01882B3EC75FD2192 /* Color.h in Headers */,\n\t\t\t\tB7D7841ABF9F0411A5E5307D1DA2C3F6 /* ColorComponents.h in Headers */,\n\t\t\t\t52450E118C5E9BED82AD4E105DE8E4FD /* conversions.h in Headers */,\n\t\t\t\tBE72B86093B43341E6E66A17E39FC367 /* Float.h in Headers */,\n\t\t\t\tD18A57DE0C2C135355388DF5C2EB6C7E /* fromRawValueShared.h in Headers */,\n\t\t\t\t3B35DD8BC49B13A3D0EAE82DFF5457B4 /* Geometry.h in Headers */,\n\t\t\t\tEC6ACE9F6F6F8AF98C952D03A7071FAA /* HostPlatformColor.h in Headers */,\n\t\t\t\t7006296EED73C5539402EABE1BC4F702 /* PlatformColorParser.h in Headers */,\n\t\t\t\t6B4C8962F186CAEBD9C1D8E294C4CBF1 /* Point.h in Headers */,\n\t\t\t\t124EE25B6A65DBC1926C13C9CC91C6E1 /* RCTPlatformColorUtils.h in Headers */,\n\t\t\t\t76D4A3EF85DBD86A0692A18E5A499246 /* React-graphics-umbrella.h in Headers */,\n\t\t\t\tBE9378E4048139E2434CD8416D014949 /* Rect.h in Headers */,\n\t\t\t\t4EF5C191311E7EF4E4D90D6254B58369 /* RectangleCorners.h in Headers */,\n\t\t\t\tA59FCD183BF94129D76323D85738AA5F /* RectangleEdges.h in Headers */,\n\t\t\t\tF599678CBCE5FA3A056E96545DB7916D /* rounding.h in Headers */,\n\t\t\t\tBC6F9DEE2138A6B67A96F83FBFEFD5A5 /* Size.h in Headers */,\n\t\t\t\t6E29FD7F204937BC53BC1010354EC995 /* Transform.h in Headers */,\n\t\t\t\t09DEA251437E9A7F259A7FADBDC16619 /* ValueUnit.h in Headers */,\n\t\t\t\tB9D6695B46C1A7889F7039E360A604F6 /* Vector.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t5EB5B5D0D6BFF8615D4D1DF5D0982F1F /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC54B8565B5FFD71C349912AF08E0CE61 /* ExecutionContext.h in Headers */,\n\t\t\t\t0C829322BFE8672132D133A9ADDC02E6 /* ExecutionContextManager.h in Headers */,\n\t\t\t\t3FC78F29079C2C32E0662B9734092AA1 /* FallbackRuntimeAgentDelegate.h in Headers */,\n\t\t\t\t9C380E9FAFBB1F19957EED6469446B92 /* InspectorFlags.h in Headers */,\n\t\t\t\t3EBE1E69C78277F3AAED44F5C90F5922 /* InspectorInterfaces.h in Headers */,\n\t\t\t\t9178CD20BCFCB0BC939BC7561FCB33FB /* InspectorPackagerConnection.h in Headers */,\n\t\t\t\tACDD1A69BD4842832E7BA0BB94F2DD32 /* InspectorPackagerConnectionImpl.h in Headers */,\n\t\t\t\tE3BF65D170B30D844332C8C4223E8E85 /* InspectorUtilities.h in Headers */,\n\t\t\t\tFACA8109B0EC6154E355B2B3F3CE7F17 /* InstanceAgent.h in Headers */,\n\t\t\t\tEE9C939880E3A056DAC25A4A496399E4 /* InstanceTarget.h in Headers */,\n\t\t\t\tCA84E75F9218D17F7CDAED715D619E5D /* PageAgent.h in Headers */,\n\t\t\t\t486006AF8D114F257E87351B3C8A5E03 /* PageTarget.h in Headers */,\n\t\t\t\t653AD0E981ED5210BF09AFE61A844339 /* Parsing.h in Headers */,\n\t\t\t\tA276C17FE51EEC55219F3A15FC9278A1 /* React-jsinspector-umbrella.h in Headers */,\n\t\t\t\t744CFE8EFE8318B6887C7D057FB590D2 /* ReactCdp.h in Headers */,\n\t\t\t\t4E995A62CBE562B414C48A4D96830F4E /* RuntimeAgent.h in Headers */,\n\t\t\t\t028D9502D34CF9EFCF733F318ECCD483 /* RuntimeAgentDelegate.h in Headers */,\n\t\t\t\tB7CE41DF964F198D03359FD16C29AD66 /* RuntimeTarget.h in Headers */,\n\t\t\t\t5D29D817CD0566EC101B3FB3C26BF9C7 /* ScopedExecutor.h in Headers */,\n\t\t\t\tE8FD4F2B225C52C7C56487D34692AEB8 /* SessionState.h in Headers */,\n\t\t\t\tC183B242623BA337D3C0F828AD6BA9AD /* UniqueMonostate.h in Headers */,\n\t\t\t\tBDB5B6E32C9C64AAC0AF0F3D37F137F9 /* WeakList.h in Headers */,\n\t\t\t\t53B4AE3B6F2DD428F69FCE1829438257 /* WebSocketInterfaces.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6819AB1E5F52E6E756C996BB746F2016 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB7B95F233F6AFFC68E4B9CD4F18E0EAF /* RCTAppDelegate.h in Headers */,\n\t\t\t\tA7D30D7B1B80839FB303F4681082D409 /* RCTAppDelegate+Protected.h in Headers */,\n\t\t\t\tC27DC9FF99360274DA538C421B4F71C1 /* RCTAppSetupUtils.h in Headers */,\n\t\t\t\t9EAD4F18278E7EB2645F6DEA5C454695 /* RCTRootViewFactory.h in Headers */,\n\t\t\t\t4C94BF7B2D691369F2AC39B151E3E3DE /* React-RCTAppDelegate-umbrella.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t74E7814F4B2665A4B71520D1FD570E65 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t3D77407A19494090FF57F73616D734D8 /* decorator.h in Headers */,\n\t\t\t\t10FD9B5E858AB7024274775682AFD14B /* instrumentation.h in Headers */,\n\t\t\t\tBF8E3A91D5B558AB51CEE906B5AD877E /* jsi.h in Headers */,\n\t\t\t\tC96B7502400A4B3C2BF51868F40533CA /* jsi-inl.h in Headers */,\n\t\t\t\t6AEB18995E0DCEE6CCE54BD53AF7B465 /* JSIDynamic.h in Headers */,\n\t\t\t\t711E2F00A29C1C7E12B55ED37DB50C58 /* jsilib.h in Headers */,\n\t\t\t\tA7C3F262E0817389B32853B800C6AB71 /* React-jsi-umbrella.h in Headers */,\n\t\t\t\t927C8D7BB3740323066FE2E8CD53F02D /* threadsafe.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t7556844A2603E807BA60BBFA9278F78D /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t79B39A2A7F90A076B7453661C54FDD9D /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t8656D5B4FA65E6F049F59F1441FCCF44 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t5290B35633031393762B3BE3DD7B6BB2 /* BridgeNativeModulePerfLogger.h in Headers */,\n\t\t\t\tC55E12D16DFC55B05F20AC48CC367A4D /* NativeModulePerfLogger.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t88C438498ECA995F20C03105412663D0 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t89423B1A952759E81DC0C4287F475231 /* RCTDeprecation.h in Headers */,\n\t\t\t\tBC7F8E1CBD8D713846A0BBFB5CACCFEF /* RCTDeprecation-umbrella.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t91B596376A967609FA5D360BDD3E4367 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t017DF990D65F9C2E66641A01B59D6B5A /* Access.h in Headers */,\n\t\t\t\tCF679B941190DB17482EAAB2423482B4 /* Access.h in Headers */,\n\t\t\t\t1F72F587B6C3002E9497082BD1AA562D /* Align.h in Headers */,\n\t\t\t\tBDEFFBF8EF6DDBC1114CD89E77DDD2B4 /* Aligned.h in Headers */,\n\t\t\t\tB38B9B77CEE53F8B3F021D142B3B4E89 /* ApplyTuple.h in Headers */,\n\t\t\t\t08C4E352A9F9F366FA356A9978482B37 /* Arena.h in Headers */,\n\t\t\t\tBB4F1FA68DADFBABA5CDF3C1D7045F38 /* Arena-inl.h in Headers */,\n\t\t\t\tB69C081CE535E0CE9BFBC9566B1259E8 /* Array.h in Headers */,\n\t\t\t\tE60661F419313219CAB90AAA4BC569CF /* Asm.h in Headers */,\n\t\t\t\t7F0FFA25BF039E3FEC89257156006BB2 /* Assume.h in Headers */,\n\t\t\t\t3F344B5BCE4AC351E0E383F5688F37B9 /* AsymmetricThreadFence.h in Headers */,\n\t\t\t\tD612BC5C887E6996DDC550FE55D73EEE /* AsyncTrace.h in Headers */,\n\t\t\t\tE22FDC89AEB18B28B58FE9516DCDEA07 /* AtFork.h in Headers */,\n\t\t\t\t7F25A20E6035D2002292AB1D88D1D35A /* Atomic.h in Headers */,\n\t\t\t\t3EC98ADE8058D966A66677C7720BEF1C /* AtomicHashArray.h in Headers */,\n\t\t\t\t9939A9054B27EC267D364A8B16FB9959 /* AtomicHashArray-inl.h in Headers */,\n\t\t\t\t3863DCA85A7094A440D5551001AA0CC6 /* AtomicHashMap.h in Headers */,\n\t\t\t\t5E6D160C875DB3935553DD37CF62507F /* AtomicHashMap-inl.h in Headers */,\n\t\t\t\tC8116CD6D7885B9BF76539C205568E78 /* AtomicHashUtils.h in Headers */,\n\t\t\t\t875A937197A2E17F4FFDCBEF110CD993 /* AtomicIntrusiveLinkedList.h in Headers */,\n\t\t\t\t707CA342CE6A6666CA1D5E537C243D40 /* AtomicLinkedList.h in Headers */,\n\t\t\t\t117CFBAF2F3D6DA74F906DB824DBA6A0 /* AtomicNotification.h in Headers */,\n\t\t\t\tA254132978ABCE50DAD9D233D0F89E0B /* AtomicNotification-inl.h in Headers */,\n\t\t\t\t31519DE72E79DF61D9D2A39A29C69147 /* AtomicRef.h in Headers */,\n\t\t\t\t374104F0C17176257605FDFEC67C537C /* AtomicStruct.h in Headers */,\n\t\t\t\t5AACF18D85E08DADE6C9208ED3F6A7D0 /* AtomicUnorderedMap.h in Headers */,\n\t\t\t\tDF410589C0140F902BB7B8E4C1C38CA0 /* AtomicUnorderedMapUtils.h in Headers */,\n\t\t\t\t0C1656F42CCF33F050C0CE2F7FC009E2 /* AtomicUtil.h in Headers */,\n\t\t\t\t7446CA132F347A062A8953D8892D48C0 /* AtomicUtil-inl.h in Headers */,\n\t\t\t\t201B4E5253766941A6453DBDAEBB5A7B /* Badge.h in Headers */,\n\t\t\t\tA95DE42763202885855D7D06BC84D1C7 /* base64.h in Headers */,\n\t\t\t\tFBAC357014D2034EA5D2C9B1B17E5E32 /* Baton.h in Headers */,\n\t\t\t\t6C0DB8EAEB1FCD9CDAA61E9B467F4CF9 /* Benchmark.h in Headers */,\n\t\t\t\tA2D2289CC073BE7056299A54E1245ED8 /* BenchmarkUtil.h in Headers */,\n\t\t\t\t7F39D856A35CF04F8D6416A5DF528342 /* BitIterator.h in Headers */,\n\t\t\t\t988804049A0E839CEE4F97680EA6F030 /* BitIteratorDetail.h in Headers */,\n\t\t\t\tAE53F4F8AE46955F8D5F913F84AE9ACE /* Bits.h in Headers */,\n\t\t\t\tC2619EDFD44B3B235FB459A25B4A72B7 /* Bits.h in Headers */,\n\t\t\t\t4DD93443D6B7F7732D024E85E90D06E9 /* Builtin.h in Headers */,\n\t\t\t\t9D92D08729B4FAAF303182FEBC7434D2 /* Builtins.h in Headers */,\n\t\t\t\t23EA4F6D2E5FC91C6D53D8806CEAB325 /* Byte.h in Headers */,\n\t\t\t\tAF31D319038A2C77960FC990CE634F65 /* CacheLocality.h in Headers */,\n\t\t\t\t759763993CBCA407771469574C2A48A5 /* CallOnce.h in Headers */,\n\t\t\t\tD06694D3AD50DB51D293984A9018A124 /* CancellationToken.h in Headers */,\n\t\t\t\tB0EB53E50359F579A7E205E8370A5906 /* CancellationToken-inl.h in Headers */,\n\t\t\t\t702965A08043A7A64AAB09E780D08663 /* CArray.h in Headers */,\n\t\t\t\tEC459A986FF283D828DC0709F40EA216 /* Cast.h in Headers */,\n\t\t\t\t11E23CE507B474D1E3C4F5B07071F93B /* CheckedMath.h in Headers */,\n\t\t\t\tBDE6C06ADC0B7FE944334E2321297371 /* Checksum.h in Headers */,\n\t\t\t\t07E90BA58803F737B48DA6554802CA36 /* Chrono.h in Headers */,\n\t\t\t\t6D26C8780D61C6AB8EBB3BD7540D9A0B /* ClockGettimeWrappers.h in Headers */,\n\t\t\t\t2AF8AFC12AED081CCB827E74F6E3CEC2 /* ConcurrentBitSet.h in Headers */,\n\t\t\t\t94596CFFB0AF1EAE8EABCCF8ABA45AB8 /* ConcurrentLazy.h in Headers */,\n\t\t\t\t1671FF1B0ECF02D1CEEA5C6BC8BD0545 /* ConcurrentSkipList.h in Headers */,\n\t\t\t\t30E5FD6C28B6DDE9382A00324EB0123E /* ConcurrentSkipList-inl.h in Headers */,\n\t\t\t\t21762E8D44EA510506E4F327D3288746 /* Config.h in Headers */,\n\t\t\t\tEE5FC9431E2D8B9E8E29AE277727E9FA /* Constexpr.h in Headers */,\n\t\t\t\t4ED180A39A38A5F8D12F8A4DD4E0B5F2 /* ConstexprMath.h in Headers */,\n\t\t\t\t3497C572885DBA4E24B62AC77F10BD16 /* ConstructorCallbackList.h in Headers */,\n\t\t\t\tE94921804AC15DB216F286A5109E560A /* Conv.h in Headers */,\n\t\t\t\tC032E5BB08569C501D19399A5F42C999 /* CPortability.h in Headers */,\n\t\t\t\t3CCDDC20E73F5316F844BD418D7FB570 /* CppAttributes.h in Headers */,\n\t\t\t\t309E25F08B621B5EBE7BF0494CC68190 /* CpuId.h in Headers */,\n\t\t\t\t9FDC7DCF86B38C6B6DC5A4653928D9DE /* CString.h in Headers */,\n\t\t\t\t4EF0F1BF78B522ABDB1A343A8EAC534D /* CustomizationPoint.h in Headers */,\n\t\t\t\t2795ACF267C2F8A23C4534D06B00D110 /* DefaultKeepAliveExecutor.h in Headers */,\n\t\t\t\t0C1DD5D979DF1A9CFCB7ED8034F0C6F0 /* DelayedInit.h in Headers */,\n\t\t\t\tDD34249033E690DE83215ADFB07FC012 /* Demangle.h in Headers */,\n\t\t\t\t58F393E4C17D34757898EC95342CE376 /* Dirent.h in Headers */,\n\t\t\t\tE8C5BA1F6806B8ADC9B77E0D87BE6426 /* DiscriminatedPtr.h in Headers */,\n\t\t\t\t744611E545D70C9024F524DCDE333162 /* DiscriminatedPtrDetail.h in Headers */,\n\t\t\t\tBCAF65D4FF616E0657166D728E13A11C /* DistributedMutex.h in Headers */,\n\t\t\t\t6803F6AF68CE85F55D315BE81FC01F8D /* DistributedMutex-inl.h in Headers */,\n\t\t\t\t0B0269B6A3EE1DBDAAE36B6D4D159963 /* dynamic.h in Headers */,\n\t\t\t\t5AAC1149A7EFCE52B0C9734F26DE5DFF /* dynamic-inl.h in Headers */,\n\t\t\t\tCF09FB6845E2AC4E839B337CAB546E51 /* DynamicConverter.h in Headers */,\n\t\t\t\tBB7454F5C1251EBA25AB7F058CB59A20 /* EnableSharedFromThis.h in Headers */,\n\t\t\t\tBC9D1F143856CC6872D6C3559711EDAF /* Enumerate.h in Headers */,\n\t\t\t\t5D15D3759AEB01EFD4AE2A00A7EE7E6C /* Event.h in Headers */,\n\t\t\t\tDE170A419A4F9680E64D24A8098D12E8 /* EvictingCacheMap.h in Headers */,\n\t\t\t\t67721682C2C9B376827FE29F914C2AF6 /* Exception.h in Headers */,\n\t\t\t\tAFB5AD9523C803DB448766320C6E2C73 /* Exception.h in Headers */,\n\t\t\t\t3A1DC7244ABEED96A40CF933FC2E60D6 /* ExceptionString.h in Headers */,\n\t\t\t\tB3032B5AE72FAEF31190CBBC5B0CE62D /* ExceptionWrapper.h in Headers */,\n\t\t\t\t0E62F29B3D5442BFEE2027D69162BDF7 /* ExceptionWrapper-inl.h in Headers */,\n\t\t\t\tE187EF2A89D79C4FB2ADBF3CC9206292 /* Executor.h in Headers */,\n\t\t\t\t1DAE7679F73905E15A400EAA0352004A /* Expected.h in Headers */,\n\t\t\t\t061B1D7E9A7E2A984C737EABBEADD5F6 /* Extern.h in Headers */,\n\t\t\t\t5947D88D6B066FB8DEC986C769F42F89 /* F14Defaults.h in Headers */,\n\t\t\t\tC2AF2A840E1928C9F60C0AA90B705BFA /* F14IntrinsicsAvailability.h in Headers */,\n\t\t\t\tCE297BDDD210CFFECB76D3DDE5F79D3F /* F14Map.h in Headers */,\n\t\t\t\tD09944151640950A50227FED4D33D066 /* F14Map-fwd.h in Headers */,\n\t\t\t\t7BF8D2646D1CAF6729DF00B7A59FE017 /* F14MapFallback.h in Headers */,\n\t\t\t\tA0FE61561DE7D4E63D766ED6280A7766 /* F14Mask.h in Headers */,\n\t\t\t\t6D208E676E5ED9C469B15EA9ECE737DD /* F14Policy.h in Headers */,\n\t\t\t\t198422DED4D172D61EEF24D51F0C90FC /* F14Set.h in Headers */,\n\t\t\t\t2127F903E8B55484942293A05FD9C18B /* F14Set-fwd.h in Headers */,\n\t\t\t\t03366D45E928B9EBD08D6BFDB5566C4D /* F14SetFallback.h in Headers */,\n\t\t\t\tDC004696A79087E85BD8B4ACCD0AEBCC /* F14Table.h in Headers */,\n\t\t\t\tA55A7FDB0ED4E2B992421280DE3DF1D2 /* FarmHash.h in Headers */,\n\t\t\t\t85CE887F8160FAC60A5613E583CD369A /* FBString.h in Headers */,\n\t\t\t\tE28AB3E3CA812DEDE441BBD946498138 /* FBVector.h in Headers */,\n\t\t\t\tB94D8534EACBCA2D52D42FE0F7EC7B6A /* Fcntl.h in Headers */,\n\t\t\t\t91A571775E906D836350ADADEC849A4A /* File.h in Headers */,\n\t\t\t\t3A0154B9D205F094345A2BA8B30AA58E /* Filesystem.h in Headers */,\n\t\t\t\tC0897BC0137C74A33DD2883F8E433ECE /* FileUtil.h in Headers */,\n\t\t\t\tD9D6B9A1B8A9324BA41626AE691533BA /* FileUtilDetail.h in Headers */,\n\t\t\t\t5B54AF84CA742AC586CD4B9A08153940 /* FileUtilVectorDetail.h in Headers */,\n\t\t\t\tD47AF34FA46EDE8475273445306B7937 /* Fingerprint.h in Headers */,\n\t\t\t\tD49827B0FAC4BD22AB3B08E10FC71051 /* FingerprintPolynomial.h in Headers */,\n\t\t\t\t0B2B305A2CAE42A22ABF7A71994E8C63 /* FixedString.h in Headers */,\n\t\t\t\t9CA0EAF6DDBF255B903EB6F6FC52E0D4 /* FmtCompile.h in Headers */,\n\t\t\t\tCE24A9E32AA34B04A30BB385163BE369 /* FollyMemcpy.h in Headers */,\n\t\t\t\tBACA247E7575A79D1D48E553058B2976 /* FollyMemset.h in Headers */,\n\t\t\t\t0ECBB2631A8B65825964451B921BF5DB /* Foreach.h in Headers */,\n\t\t\t\tFD2E98D9CB060B5341099B9ADB7B098D /* Foreach-inl.h in Headers */,\n\t\t\t\t63B539B0CE7DE154473F78239B0D3E75 /* Format.h in Headers */,\n\t\t\t\tC8809AF5166285F86569DF60E9E4588B /* Format-inl.h in Headers */,\n\t\t\t\tF92D7374EFCC337E0153EF9BF6E660A5 /* FormatArg.h in Headers */,\n\t\t\t\tE4DED56A63CBA885B68CE8ACB532234C /* FormatTraits.h in Headers */,\n\t\t\t\tD0515E6C90A79FC61FA6AA4547A22242 /* Function.h in Headers */,\n\t\t\t\t6C963BD5A4AF0CBEE113E34A5AD7D0A6 /* Futex.h in Headers */,\n\t\t\t\tC0C35A59710DB7C0E344E402A71E326A /* Futex-inl.h in Headers */,\n\t\t\t\t91FE7C0592A4570B5BDEF0B5BD337FEA /* GFlags.h in Headers */,\n\t\t\t\t31D4FC1E4131A0B940E87016B5558AE4 /* GLog.h in Headers */,\n\t\t\t\tDBD56004083F156CFDCC1D9EDCB75C1A /* GMock.h in Headers */,\n\t\t\t\t46FEBA35C6BCC1DA359FA4818280E7C1 /* GroupVarint.h in Headers */,\n\t\t\t\t4D50B5E65DC561AF8C8A0C625A261512 /* GroupVarintDetail.h in Headers */,\n\t\t\t\t5093844A96D536399D02C2EC5DE8B829 /* GTest.h in Headers */,\n\t\t\t\tC786F85A5EF2AC362596E13AA803CEBA /* HardwareConcurrency.h in Headers */,\n\t\t\t\t827D7956B2E401FEEAE0266A95CAD3F0 /* Hash.h in Headers */,\n\t\t\t\tA95970C4A74B1F4378A0406E2484D32C /* Hash.h in Headers */,\n\t\t\t\t4FEAE94C64B4E7C4982BD2CB545711B1 /* Hazptr.h in Headers */,\n\t\t\t\t5772DF2C067E6A85596FA510298BA4F8 /* Hazptr-fwd.h in Headers */,\n\t\t\t\t07600B8FEF009F0EF5D1EE0510FDEE45 /* HazptrDomain.h in Headers */,\n\t\t\t\t5F37D7E6B6EEB1FCA64D72A039B04E9F /* HazptrHolder.h in Headers */,\n\t\t\t\t58974F1CDB4BC9CAFBBEA3777F0DFEBD /* HazptrObj.h in Headers */,\n\t\t\t\t71A038ED712C2249A49737A7DF499932 /* HazptrObjLinked.h in Headers */,\n\t\t\t\tD5A493A2DC6BB01DCF68C20D070211F1 /* HazptrRec.h in Headers */,\n\t\t\t\t536BA5E6F1BDEBF1509C5E230951E959 /* HazptrThreadPoolExecutor.h in Headers */,\n\t\t\t\tD19E93538E81D1EA6110AB9D09F8CBB5 /* HazptrThrLocal.h in Headers */,\n\t\t\t\t645D3E41350D979EE998CAC5B0B50030 /* heap_vector_types.h in Headers */,\n\t\t\t\tF81C865E5B5533C436995EC5E52A4B02 /* HeterogeneousAccess.h in Headers */,\n\t\t\t\tBE78B704D8C638CDE420A05430C23402 /* HeterogeneousAccess-fwd.h in Headers */,\n\t\t\t\tB89B95DC19D784FF1D918EF174F7304C /* Hint.h in Headers */,\n\t\t\t\tBD19A05C58B1EC18B47AAF026E4DC966 /* Hint-inl.h in Headers */,\n\t\t\t\t882323307508D2F24D0977D0A77F86B5 /* Indestructible.h in Headers */,\n\t\t\t\t463357058D1F85D874C7B62913D0FB51 /* IndexedMemPool.h in Headers */,\n\t\t\t\tFF2681C5F344F1C15BB22CAB3D37600B /* IntrusiveHeap.h in Headers */,\n\t\t\t\t888D80843EE8FCA8A3111C91CA24A999 /* IntrusiveList.h in Headers */,\n\t\t\t\tA64C2E2436921D1072D8A53C3DF89C6F /* Invoke.h in Headers */,\n\t\t\t\tD8447913DFCF5B46D25A9E40632A51A0 /* IOVec.h in Headers */,\n\t\t\t\t2302E49723D8DDAEDAE358344C4523DB /* IPAddress.h in Headers */,\n\t\t\t\t07BFA4FB5FAF3E14B7D0E4C8711EF0B1 /* IPAddress.h in Headers */,\n\t\t\t\tB8DC5312262AA5FA9C450ABC35A99FC3 /* IPAddressException.h in Headers */,\n\t\t\t\t426DB0CBF495DD7166EBDC0A188B3F68 /* IPAddressSource.h in Headers */,\n\t\t\t\t3AAA14243A77113026B848ECEA53CF6B /* IPAddressV4.h in Headers */,\n\t\t\t\tBC8F3B887DB5312669D79FBBED471C90 /* IPAddressV6.h in Headers */,\n\t\t\t\t9C1A1AD1616249A784D388BDF0097A98 /* Iterator.h in Headers */,\n\t\t\t\tCD639A6F3B9AC7F773C16CF14E65FFE0 /* Iterators.h in Headers */,\n\t\t\t\tE66AD268C60422D082BEE54709653AA9 /* json.h in Headers */,\n\t\t\t\tCEECA36CB4ECD4DB8650B1C0AFD35463 /* json_patch.h in Headers */,\n\t\t\t\tE2EEB36768E7218D47E9C3CCDC290138 /* json_pointer.h in Headers */,\n\t\t\t\t7A929745AF8FF896CBFC97801A077941 /* Keep.h in Headers */,\n\t\t\t\tE31E02EC62FF9E9E089267079E217636 /* Latch.h in Headers */,\n\t\t\t\t648546E37669DA35243A1A9CB0DD7C59 /* Launder.h in Headers */,\n\t\t\t\tFA441FA915776C369C08804D23D7DA51 /* Lazy.h in Headers */,\n\t\t\t\tFE2957561C5BA3A18683A03C5EDC995C /* Libgen.h in Headers */,\n\t\t\t\tFECF2B95FB337E11258FC827F97C5516 /* Libunwind.h in Headers */,\n\t\t\t\t9593D619EFB09CA84DE565FF4D96EB48 /* LifoSem.h in Headers */,\n\t\t\t\tE4D2C49797D59B2052F4B053076FE96E /* Likely.h in Headers */,\n\t\t\t\tD874563FB7B3E2324F5D62A96A1D66FB /* Lock.h in Headers */,\n\t\t\t\t86FFDED80645961F5B0E1C77813A3E3C /* MacAddress.h in Headers */,\n\t\t\t\t4AD9029E8839583D77C01D0769BFE50D /* MallctlHelper.h in Headers */,\n\t\t\t\t151E1345EEB4F94B1CDF454826A8A392 /* Malloc.h in Headers */,\n\t\t\t\tBB715F4BA27FE3E850E271F2F75C37A6 /* Malloc.h in Headers */,\n\t\t\t\t821D1FFAF81B7DEA7FF2DCB766C1E069 /* MallocImpl.h in Headers */,\n\t\t\t\tFFED29E1CC4B6F3236B8A5D380AC3447 /* MapUtil.h in Headers */,\n\t\t\t\tE1549E411581F07CCF13356092963823 /* Math.h in Headers */,\n\t\t\t\t30B45DCAC90068BB83348CA5902B8A53 /* Math.h in Headers */,\n\t\t\t\t8A092C05BF760852783B87DB4FDB2AFD /* MaybeManagedPtr.h in Headers */,\n\t\t\t\tD21E8439B7C2A9FA86AB82CBAD4FECD9 /* Memory.h in Headers */,\n\t\t\t\t94E79DD64E0788BB7AD3BD1210CB6EB0 /* Memory.h in Headers */,\n\t\t\t\tCBAFAA32CD193D8766E0AA81E5043296 /* MemoryIdler.h in Headers */,\n\t\t\t\t46661E9599B2C3FFCC3382FB3A5FFE2D /* MemoryMapping.h in Headers */,\n\t\t\t\tEC366E71583207A1FF0C46AE4BB7C276 /* MemoryResource.h in Headers */,\n\t\t\t\tDF670DA3ED5334665E6359FE60D70590 /* Merge.h in Headers */,\n\t\t\t\tE3A1C4B353CA38F45A94333BF57BC185 /* MicroLock.h in Headers */,\n\t\t\t\t055DA973F87A7B3ECAE8DC3E4579BE45 /* MicroSpinLock.h in Headers */,\n\t\t\t\tFA517A5F883F194823AC6289673A6563 /* MicroSpinLock.h in Headers */,\n\t\t\t\tB337848370ED5CE208F7515930D400E1 /* MoveWrapper.h in Headers */,\n\t\t\t\t61EDAC784E6BE6CC11E90819789A6DAE /* MPMCPipeline.h in Headers */,\n\t\t\t\tDB423C91AD697AC50ED1D8717786DB82 /* MPMCPipelineDetail.h in Headers */,\n\t\t\t\t50AA780906EDCC9F6292E6EC33FE9AF0 /* MPMCQueue.h in Headers */,\n\t\t\t\t223B827459F291942AAB05E2A456B6AE /* NativeSemaphore.h in Headers */,\n\t\t\t\t4B28898B17974A51B867C8CCFC44489A /* NetOps.h in Headers */,\n\t\t\t\t32F2AB6A8644D4D1214F84733E66E464 /* NetOpsDispatcher.h in Headers */,\n\t\t\t\tF62F7C9B6B3D4C75CA27889AF8F5D099 /* NetworkSocket.h in Headers */,\n\t\t\t\t3D3FF2249FEED66F576893A1E61C19FC /* New.h in Headers */,\n\t\t\t\t2C1991F1D309596566A8060D4AA46B58 /* not_null.h in Headers */,\n\t\t\t\t0231AD4A2A7FBFE5C9D2F17185F85FFC /* not_null-inl.h in Headers */,\n\t\t\t\t0B59F1574F8DE2DC67F22706B855B56B /* ObserverContainer.h in Headers */,\n\t\t\t\t1FAE05CEA6EEBE5C78C774D3210A258B /* OpenSSL.h in Headers */,\n\t\t\t\t9C187D694BC2F39668C0730FF0BECF50 /* Optional.h in Headers */,\n\t\t\t\tFA97A04B1279EB33668144798ED22447 /* Ordering.h in Headers */,\n\t\t\t\tA6F760D3AECEDF09C3CCA0D126B07C7E /* Overload.h in Headers */,\n\t\t\t\t7E005F703B871E6F1DCBE37739EB9BA9 /* PackedSyncPtr.h in Headers */,\n\t\t\t\t54CC533A473A58B04C39D4F6E221B40F /* Padded.h in Headers */,\n\t\t\t\tE8246C3EF8CEB14A7575546B4C5CECD7 /* ParkingLot.h in Headers */,\n\t\t\t\t31E564ED4FF70E455D56A3FE8E642B7E /* Partial.h in Headers */,\n\t\t\t\t6626D2DBEF601EBA88A883827E0295B7 /* PerfScoped.h in Headers */,\n\t\t\t\tE1398CF744BD639B09992EA62651FA74 /* PicoSpinLock.h in Headers */,\n\t\t\t\t1C834508104A30A18F88CF2096F4D027 /* Pid.h in Headers */,\n\t\t\t\t6B4D310DF575EB380CFD8E9008409324 /* Poly.h in Headers */,\n\t\t\t\tDC0175AB5F97BE5219331D7156CE1659 /* Poly-inl.h in Headers */,\n\t\t\t\t7D0D84A0154B18374120BC47B1D87B83 /* PolyDetail.h in Headers */,\n\t\t\t\t4EBF8CAAE3B17B65F2D10529F0D236FF /* PolyException.h in Headers */,\n\t\t\t\tB88A2040ECB1F70E8F25F03E8F33187E /* Portability.h in Headers */,\n\t\t\t\t2FF0092F74C6CF1ABAD0EEE5E9B7DCE2 /* Preprocessor.h in Headers */,\n\t\t\t\tA1394038D409340FD789C018BBC1889B /* Pretty.h in Headers */,\n\t\t\t\t7F61C911147722C681DB4FAA34CA76A1 /* ProducerConsumerQueue.h in Headers */,\n\t\t\t\t8E8EBCCDD1F8861EE6CA56DDED1D958F /* PropagateConst.h in Headers */,\n\t\t\t\t22C211E6B7DAF646E04306522824BBE2 /* protocol.h in Headers */,\n\t\t\t\t02A0A139AA95C6D1D6EF74AC71B17B90 /* PThread.h in Headers */,\n\t\t\t\t9068BB732F9B931880C0F8BFE1133112 /* Random.h in Headers */,\n\t\t\t\t9D4EC18EDF8D39C00319EDCBF1F79BFE /* Random-inl.h in Headers */,\n\t\t\t\tB2DC64D7C3CD066F1671B9F4D25DAB6D /* Range.h in Headers */,\n\t\t\t\t2F88D219CCD7E3E739539945E990B622 /* RangeCommon.h in Headers */,\n\t\t\t\t1F8AEF1CE8B533F95A189E4023D12779 /* RangeSse42.h in Headers */,\n\t\t\t\t6238DD8BEB29E55D03B1E651157E7B2A /* RCT-Folly-umbrella.h in Headers */,\n\t\t\t\t64CFD3AB2AD6AFAF98EBAA5EDA7912CD /* Rcu.h in Headers */,\n\t\t\t\tCAA34B58E886CD7FFEA08D44224E647C /* ReentrantAllocator.h in Headers */,\n\t\t\t\tE11ADB7262AFE9B01BE2A4D975123EAA /* RelaxedAtomic.h in Headers */,\n\t\t\t\t4EE2A2F1C282DD56E3EACAD3D5B911F6 /* Replaceable.h in Headers */,\n\t\t\t\t066F723FEEAC257D987EC4692F9132EB /* RValueReferenceWrapper.h in Headers */,\n\t\t\t\tE9BE847CB39266616A343D766185AE45 /* RWSpinLock.h in Headers */,\n\t\t\t\t8FADB205FCA25F99038ED124EC0587A4 /* RWSpinLock.h in Headers */,\n\t\t\t\t2325A82054865E3115D014BB158CE549 /* SafeAssert.h in Headers */,\n\t\t\t\t34057EED3E16A361B64AECEADE8125C1 /* SanitizeAddress.h in Headers */,\n\t\t\t\tA6A384ACF91A0F0532A09484483AE49C /* SanitizeLeak.h in Headers */,\n\t\t\t\tD011BB8962CE2E4274EB53AA1B967D44 /* SanitizeThread.h in Headers */,\n\t\t\t\t3DE0145BCB2860FB847CCB3BC9C25300 /* SaturatingSemaphore.h in Headers */,\n\t\t\t\t60190426D00C02887698BE0BE510103C /* Sched.h in Headers */,\n\t\t\t\t71ED29F2A5198E2ECDC85E8A33913487 /* ScopeGuard.h in Headers */,\n\t\t\t\tB8C5AC5B7DA9B2A06BA64F5A4293A1EE /* SharedMutex.h in Headers */,\n\t\t\t\tEF146B59AE948C6C6364E8EA84B78330 /* Shell.h in Headers */,\n\t\t\t\t30423632D5CB339BCC2AD8432337F83C /* SimdAnyOf.h in Headers */,\n\t\t\t\tCED9A3245D7A70EDF4C68CBD7962505D /* SimdCharPlatform.h in Headers */,\n\t\t\t\tD3EBECC8D67FF3FC5EAA9C674B0E118A /* SimdForEach.h in Headers */,\n\t\t\t\tFBF16827FFCE880C6C9310D61C773760 /* SimpleSimdStringUtils.h in Headers */,\n\t\t\t\tC324ED09ACD63780DE0215EED2E91E81 /* SimpleSimdStringUtilsImpl.h in Headers */,\n\t\t\t\t2A3DF91AE6FF101059F589E7310AC371 /* Singleton.h in Headers */,\n\t\t\t\t8C7240FF4EDFF6B9A2A5E7802D6A8976 /* Singleton.h in Headers */,\n\t\t\t\t3C1F4BAA6EB4E34AB9A21DBCF42B54C9 /* Singleton-inl.h in Headers */,\n\t\t\t\t5798BDA11D8CD9E1ABFE915438104A52 /* SingletonThreadLocal.h in Headers */,\n\t\t\t\tF7C692B78A07D122735D336A834ED83B /* SlowFingerprint.h in Headers */,\n\t\t\t\t930BA86D8E612AC22708E752E4A61383 /* small_vector.h in Headers */,\n\t\t\t\t1720823FC59E390B74A878DE97477C35 /* SmallLocks.h in Headers */,\n\t\t\t\tC38870EFB4A053C9D2A3C9C2988AD348 /* SocketAddress.h in Headers */,\n\t\t\t\t0D98617995EAA61C68C93966586EC450 /* SocketFastOpen.h in Headers */,\n\t\t\t\tFF76D3A832ADFED4BFA28BED56073394 /* SocketFileDescriptorMap.h in Headers */,\n\t\t\t\tB247DC209221D5988107ED3546ED7B5D /* Sockets.h in Headers */,\n\t\t\t\t83DEC1E75A0961D67CFAD87A5B6139D7 /* sorted_vector_types.h in Headers */,\n\t\t\t\tD4176277B387E1C890B5D11845DEB224 /* SourceLocation.h in Headers */,\n\t\t\t\tB3B5414D5E629029A44A3318840D674B /* SparseByteSet.h in Headers */,\n\t\t\t\tE7AB4FF7D66E7FFC299A8E48497DE691 /* SpinLock.h in Headers */,\n\t\t\t\t4C9DAD28404CD20D00F4F363C2B46ADC /* SplitStringSimd.h in Headers */,\n\t\t\t\t3EBDC6385095946F937BD8273B5F255D /* SplitStringSimdImpl.h in Headers */,\n\t\t\t\tA27584A1C4F237F91F194CC4258F5294 /* SpookyHashV1.h in Headers */,\n\t\t\t\tB466FFB8D8540FE239690E867F3DE68A /* SpookyHashV2.h in Headers */,\n\t\t\t\tF08150A3F6B8849BBBF47FFFE171DD70 /* Sse.h in Headers */,\n\t\t\t\t2D6D394C37329EFADEA4DD715151AE40 /* StaticConst.h in Headers */,\n\t\t\t\t1590F8C4A09BF6B5279331EA10DCD463 /* StaticSingletonManager.h in Headers */,\n\t\t\t\t39830AA65645472F2A472D2F9A8E506C /* Stdio.h in Headers */,\n\t\t\t\t6F9E2B385846EC9BB5EFF49C7BCF8AD5 /* Stdlib.h in Headers */,\n\t\t\t\tC872CAE403B0D04BB730CC1DE6247C69 /* stop_watch.h in Headers */,\n\t\t\t\tABD6B1BFDA57AF34F462F5D6BFA170C5 /* String.h in Headers */,\n\t\t\t\t04D5FD40FF43BF9CD112D2B1E115FA0A /* String.h in Headers */,\n\t\t\t\tDA23FF23D0B832AD6C6CC5A1C07D5A6A /* String-inl.h in Headers */,\n\t\t\t\t936A9AB6C986409BCEFF9F365015DD61 /* Subprocess.h in Headers */,\n\t\t\t\t896B5C9C328433F866F22E2C7414673D /* Synchronized.h in Headers */,\n\t\t\t\t3B19E916E5FEAD382441C2ABD10B7D9B /* SynchronizedPtr.h in Headers */,\n\t\t\t\tDAC9300F3F4F2080C390F9E5913E3586 /* SysFile.h in Headers */,\n\t\t\t\t1C27E39EC5320E65D9EEF37CF24927BC /* Syslog.h in Headers */,\n\t\t\t\tF45F8C649B66BE9FEBADCE67FEF12833 /* SysMembarrier.h in Headers */,\n\t\t\t\tBF7F76D1757734E5AA71B29C9225ED2C /* SysMman.h in Headers */,\n\t\t\t\t253A354FA00DA7358AB288F68EC5437C /* SysResource.h in Headers */,\n\t\t\t\tAFA07FBAE0CAEE001E4CD63FE6F716FA /* SysStat.h in Headers */,\n\t\t\t\t90429B015B1A484B8D95A975975DC51A /* SysSyscall.h in Headers */,\n\t\t\t\tAF3E68485FEF1859CC6B9FF8DA2B65B7 /* SysTime.h in Headers */,\n\t\t\t\tBD2AFB55C0FB4463B222D2413DD85C73 /* SysTypes.h in Headers */,\n\t\t\t\t90F713B356228BE688BACF56AF55ACF2 /* SysUio.h in Headers */,\n\t\t\t\t6931B8611963D0778CA2593797258243 /* TcpInfo.h in Headers */,\n\t\t\t\t8A8DA15355CE0296C45E81D47DE94307 /* TcpInfoDispatcher.h in Headers */,\n\t\t\t\t6B5291757C966F9ADE1BCEA1803F2FC9 /* TcpInfoTypes.h in Headers */,\n\t\t\t\t586EC27EA2327C50B996F9ECE3F189EE /* ThreadCachedArena.h in Headers */,\n\t\t\t\t237C8EB38A4DCFA780AD9A086456731B /* ThreadCachedInt.h in Headers */,\n\t\t\t\tFAA0D40E6EB5DA76CA69A3F12F7705E2 /* ThreadId.h in Headers */,\n\t\t\t\tD0940A21900A9EE7EAEA223B36E1FB73 /* ThreadLocal.h in Headers */,\n\t\t\t\t5CEB688BB02A5D825F1C26B4E8A7DD04 /* ThreadLocalDetail.h in Headers */,\n\t\t\t\t28DB4C2B675C293F97E5441914BE3302 /* ThreadName.h in Headers */,\n\t\t\t\tA0C26C8A77986A3E4CF105BC5A8DB603 /* ThrottledLifoSem.h in Headers */,\n\t\t\t\t2CF8933910674BAB9196E42A6AF7938B /* Thunk.h in Headers */,\n\t\t\t\t9A24531C4E6DA4D2A91036A2F8C0BF4A /* Time.h in Headers */,\n\t\t\t\t80CF2710C53AA456D9BACA32C9F94242 /* TimeoutQueue.h in Headers */,\n\t\t\t\t61ED3B991EE724C64D6FB1334A0314D3 /* ToAscii.h in Headers */,\n\t\t\t\t412A5B7AE081C52FB806EE8584903C7A /* TokenBucket.h in Headers */,\n\t\t\t\tBF998BBFB68ECD47CD96ED1B92D5A9A4 /* traits.h in Headers */,\n\t\t\t\t638A4F595CD09694A8BFA8C0F00F745C /* Traits.h in Headers */,\n\t\t\t\tDDB0B0190141D436ABDA58404D1499A8 /* Try.h in Headers */,\n\t\t\t\t0D9B0AA50FE453B74124CA01912B4B7C /* Try-inl.h in Headers */,\n\t\t\t\t5F232EC5AAC8B35EBB5427FB1C7EB303 /* TurnSequencer.h in Headers */,\n\t\t\t\t4D5FEE7A0F5B1E878C3F4042BB635FD1 /* TypeInfo.h in Headers */,\n\t\t\t\t1A11A9EE8F446EA3A8B0E39CA71A4BDB /* TypeList.h in Headers */,\n\t\t\t\tEFC8646A57CDAB8216B48B40855D4C6F /* UncaughtExceptions.h in Headers */,\n\t\t\t\tCC1A997B5C11BC4868D250FBBF8B0C1E /* Unicode.h in Headers */,\n\t\t\t\t16B0FFD3A9EB7A8C3CA7E201D4471911 /* UninitializedMemoryHacks.h in Headers */,\n\t\t\t\tB6A677D259948AA6850E60654D2CA6CB /* UniqueInstance.h in Headers */,\n\t\t\t\tB37C611FC0371BA16C13DF36D8DCB479 /* Unistd.h in Headers */,\n\t\t\t\t0D380672BD934ED65A236B8874DCD341 /* Unit.h in Headers */,\n\t\t\t\t13372D98CE8D776E176F54A38E8E6C22 /* UnrollUtils.h in Headers */,\n\t\t\t\t75A3370597938CD39071A1E5AE25CAE3 /* Uri.h in Headers */,\n\t\t\t\t132ABB496BA53BC8084D9FE272A010D3 /* Uri-inl.h in Headers */,\n\t\t\t\t341E869680CA9F16E5C3EBA6C65F3509 /* UTF8String.h in Headers */,\n\t\t\t\t32927DAF25802D1608CD1D24D72A329C /* Util.h in Headers */,\n\t\t\t\tB484D7DD1C2D947F0F986688389D0E3C /* Utility.h in Headers */,\n\t\t\t\t038A3F0242D33B98EB3291B978423B1F /* Utility.h in Headers */,\n\t\t\t\tA2373B0F99A1174A8D32C95900769A04 /* Varint.h in Headers */,\n\t\t\t\t43CE6254997AD06649D76B1421C8250C /* View.h in Headers */,\n\t\t\t\tB440D0AFCA4156431037F2FB84B63972 /* VirtualExecutor.h in Headers */,\n\t\t\t\t0B3B9EC6140BA1847988F15E0947B26E /* WaitOptions.h in Headers */,\n\t\t\t\t302E01399CB39F9CFCA096F494FD609D /* WeightedEvictingCacheMap.h in Headers */,\n\t\t\t\tC1EB13FC1F8A6376FE9200436FEF08B6 /* Windows.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t96C8B3406F27BA8F9D23D265A963E433 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tDE6D3EF512445AED97626F2FD2C6E144 /* RCTInteropTurboModule.h in Headers */,\n\t\t\t\t231F95C755E8E42DA517D4818ACCAFB8 /* RCTRuntimeExecutor.h in Headers */,\n\t\t\t\tE5CA44114FBA3754AF18B7499FF88E10 /* RCTTurboModule.h in Headers */,\n\t\t\t\t98FAF118BA6AC3B0B0BF4D1DA3521E51 /* RCTTurboModuleManager.h in Headers */,\n\t\t\t\t9BCC683CA550E64EE67D93F93BFFBD60 /* React-NativeModulesApple-umbrella.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tA93B38F3B38D3C58EF7B4AB482E7F0E0 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t3F41C3029A1001872EA78923FEC6B96B /* AbsoluteLayout.h in Headers */,\n\t\t\t\tCB354C58134A502F6190E3C3C1BE2672 /* Align.h in Headers */,\n\t\t\t\tCB354C58134A502F6190E3C3C1BE2672 /* Align.h in Headers */,\n\t\t\t\tB950ACC5E104B59E5EED2084C222FE73 /* AssertFatal.h in Headers */,\n\t\t\t\tCFCE4649CD6C9EDC4A1E1798B4D609E3 /* Baseline.h in Headers */,\n\t\t\t\tBE3E5B126114B81C72E7C74D3ECFBE63 /* BoundAxis.h in Headers */,\n\t\t\t\tF674F6349A05690574BC66CFB35B60D6 /* Cache.h in Headers */,\n\t\t\t\tD9C6BE55D798E8A52E85D425CD9294FB /* CachedMeasurement.h in Headers */,\n\t\t\t\t0E80F9F0507C7BEE0E643E3ACA26DF38 /* CalculateLayout.h in Headers */,\n\t\t\t\t0E616E8FB2D3D470F8965D0D1A975DDC /* Comparison.h in Headers */,\n\t\t\t\tB6F880D22BC0E73B97487B747513ABEA /* Config.h in Headers */,\n\t\t\t\tEC9F0699E5A4CF55F21FAFE6057B6640 /* Dimension.h in Headers */,\n\t\t\t\t16C786D254AC4BB415F78C7E14E32E91 /* Direction.h in Headers */,\n\t\t\t\t0325D441EB7088C55285D0ED7E97A25F /* Display.h in Headers */,\n\t\t\t\t8DD704A7DFB3E7DB7CA5CF748EC11878 /* Edge.h in Headers */,\n\t\t\t\t6C014D417DB501CB7E7EC168EEAAD449 /* Errata.h in Headers */,\n\t\t\t\tA938E595D257EC2A792136FF03B1B030 /* event.h in Headers */,\n\t\t\t\t4FE0D611C9C858B39AEEA98E2FEC1677 /* ExperimentalFeature.h in Headers */,\n\t\t\t\t8D6641689CE7A4839A8B823EA727C1AA /* FlexDirection.h in Headers */,\n\t\t\t\t8D6641689CE7A4839A8B823EA727C1AA /* FlexDirection.h in Headers */,\n\t\t\t\t2A222BEC97B97591ACBD51C9F00E4921 /* FlexLine.h in Headers */,\n\t\t\t\t251D3DAD4CE4ACA70D08EBB9CBF9BB39 /* FloatOptional.h in Headers */,\n\t\t\t\tA691FFBD5381A9F24D87CE66F8F5F81A /* Gutter.h in Headers */,\n\t\t\t\t5338EF2CBC1AB903457F1E2A9430FEAA /* Justify.h in Headers */,\n\t\t\t\t857BDC3DE3F7896BD773F402341D9C8B /* LayoutResults.h in Headers */,\n\t\t\t\t40A9D1F054503F770F54FB569C86A77F /* Log.h in Headers */,\n\t\t\t\tC85DCBF8B4568557FFDC434149051C1D /* LogLevel.h in Headers */,\n\t\t\t\t9E6C43BA1F53691CB152B48B736A70B2 /* MeasureMode.h in Headers */,\n\t\t\t\t56FF2146A276A58EBC98A2C187E55DF6 /* Node.h in Headers */,\n\t\t\t\tC9218E0506DC81BD1B8759BFFC4C0D17 /* NodeType.h in Headers */,\n\t\t\t\t0F16C97260095D02DE5415B6AC67D505 /* Overflow.h in Headers */,\n\t\t\t\t10D706F48F81D0DA3FBD346730A27F9C /* PhysicalEdge.h in Headers */,\n\t\t\t\tD4A9A5DE800574D5EA3FBAF7A3FCE239 /* PixelGrid.h in Headers */,\n\t\t\t\t15D2AA86AE351CD34C4884281F78EAC1 /* PositionType.h in Headers */,\n\t\t\t\t3FE61AC2BB3C11616328F6F3C70CC9F7 /* SizingMode.h in Headers */,\n\t\t\t\t63C8445391E600554A6C3520D8511A50 /* SmallValueBuffer.h in Headers */,\n\t\t\t\t90C0ED4C25BBE5201770D4FF695A81A6 /* Style.h in Headers */,\n\t\t\t\t1D8DF82EA7134E0A0C27D629500846B9 /* StyleLength.h in Headers */,\n\t\t\t\tC53735A70163AB0A8E31BD1F52A5225B /* StyleValueHandle.h in Headers */,\n\t\t\t\t980093FFA08606F31FCD65609A47C09E /* StyleValuePool.h in Headers */,\n\t\t\t\tC82241B63061787791128A1EC9E9F5B7 /* TrailingPosition.h in Headers */,\n\t\t\t\t12DFBB4643EF49D0656128B8F983CD6F /* Unit.h in Headers */,\n\t\t\t\t261839D1DF68DC4E17AFD60D0E7BEE61 /* Wrap.h in Headers */,\n\t\t\t\t34DAAFB7B06B65259B6FECDA06AA3387 /* YGConfig.h in Headers */,\n\t\t\t\tCEEF5F179C75EB5D8C84E49E94F90BBF /* YGEnums.h in Headers */,\n\t\t\t\t3593206D0F19D00262870E27E9D13872 /* YGMacros.h in Headers */,\n\t\t\t\tC9778BE281C609F2FD4ED0209BB020AD /* YGNode.h in Headers */,\n\t\t\t\t616FF362B4F982F5D81312544F221FA7 /* YGNodeLayout.h in Headers */,\n\t\t\t\tC08677D33FB9E6187D04980860872F5B /* YGNodeStyle.h in Headers */,\n\t\t\t\t588CEDBD51EA57B98878F8E614A4E4C9 /* YGPixelGrid.h in Headers */,\n\t\t\t\t2522833611E2F1484E7EDF975387F2B2 /* YGValue.h in Headers */,\n\t\t\t\t247DEF303BC51C27870693F921CE4A24 /* Yoga.h in Headers */,\n\t\t\t\tB56044159ED68D13ED80B3251BF4C71D /* Yoga-umbrella.h in Headers */,\n\t\t\t\t9129BAF1A295E5BA2BFA9D27E0DD8B30 /* YogaEnums.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tAE897E21E39386108563A4EB4E02B6D3 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t8F8C308FB213101092DF89E03DF5D3F2 /* ObjCTimerRegistry.h in Headers */,\n\t\t\t\t804AB8115EEB65519BFF4EC3478F17E3 /* RCTContextContainerHandling.h in Headers */,\n\t\t\t\t4E26F7421AFC7CCBA8B969FA05F45C3F /* RCTHermesInstance.h in Headers */,\n\t\t\t\t1F5DD61D863EF9D3FB7CF714C39251F7 /* RCTHost.h in Headers */,\n\t\t\t\t027B3B0E43853967D8B623D4E5A9A287 /* RCTHost+Internal.h in Headers */,\n\t\t\t\t14D3C20765AA5165E7881E50B9491268 /* RCTInstance.h in Headers */,\n\t\t\t\t6DE90170CECE293E1A4F1224606A79BF /* RCTJSThreadManager.h in Headers */,\n\t\t\t\t3903DC2E45FF49565FBA6612830040C9 /* RCTLegacyUIManagerConstantsProvider.h in Headers */,\n\t\t\t\t1DF1BB081174334B20F0576E3917DDFD /* RCTPerformanceLoggerUtils.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tAFF97CE34F12C061B4326B69AF5F636D /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t099A28E24D0D1D10AE86EA1B272EB1FF /* RCTImageManager.h in Headers */,\n\t\t\t\t9597882525C617A0252792A1542DEB7E /* RCTImageManagerProtocol.h in Headers */,\n\t\t\t\tE9D7B312A5C84965CD84BD92FB62B13C /* RCTImagePrimitivesConversions.h in Headers */,\n\t\t\t\tAB5EF33E0FF9C59C98CC579067194B5F /* RCTSyncImageManager.h in Headers */,\n\t\t\t\t75893F82D0DC6BC54B04FDA1C9DDBA40 /* React-ImageManager-umbrella.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tB848B2694FF142FE99FE00869735ED10 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE651055717D4190079F013D6D6062009 /* JSIExecutor.h in Headers */,\n\t\t\t\t75EE1CD4734EEA84AB3CEBBFBA8B5141 /* JSINativeModules.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tBBFB6E9C09170030BCB76EF550C29B38 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t11116B560FB8DB7A5F736E5E8C11301B /* conversions.h in Headers */,\n\t\t\t\t7A94A234E15864DA153E2486D544D8F9 /* ImageComponentDescriptor.h in Headers */,\n\t\t\t\tA64F035654CB2B7DCBC8F8724356C82E /* ImageEventEmitter.h in Headers */,\n\t\t\t\tC8036C771D671E36BEDD71CB224AE037 /* ImageProps.h in Headers */,\n\t\t\t\t01FF22D8A0746B87FA43295D52EDFF01 /* ImageShadowNode.h in Headers */,\n\t\t\t\tF0EA77CE762E75EE68A7E59C4BC05275 /* ImageState.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC20B0C535E0FD7D4FF32A7DA7B1CA845 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t409697D416E1EC0B0559AA517ECADA7E /* JsErrorHandler.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC7F762FCDD3EC1F3B985B12D843C839D /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t431B8E3910D7948C5ABD4D2EE021E854 /* args.h in Headers */,\n\t\t\t\tE6C45A4D06FD310A02A987816341A5F8 /* chrono.h in Headers */,\n\t\t\t\t1E3B09D27ABE649167CCDD7BDED72012 /* color.h in Headers */,\n\t\t\t\t8DBD42E153C1E210DD2D91CBE300795A /* compile.h in Headers */,\n\t\t\t\tBA4ECD7D27EEB764E12B599F80C19150 /* core.h in Headers */,\n\t\t\t\t83A0F6143A5339BAEBBCA6EA7A4F5BAF /* format.h in Headers */,\n\t\t\t\tE01BFDB73F70CBCB2CFC52444346AF77 /* format-inl.h in Headers */,\n\t\t\t\t2333ED79527F4E5206C50DCF55A95D34 /* os.h in Headers */,\n\t\t\t\tBDA63FE5A587CF5C5ED9DD8BCE0B4244 /* ostream.h in Headers */,\n\t\t\t\t33B73F67E086D3670224498285D702A2 /* printf.h in Headers */,\n\t\t\t\tFD3EB3EB8AB44B1B40F04D32CCAD4388 /* ranges.h in Headers */,\n\t\t\t\t0C5A0742C3AE61AB9C451CA241A06AA3 /* std.h in Headers */,\n\t\t\t\tCC0CADD2F0F0E0729FE5F9C9605CBCC1 /* xchar.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC9783B15FC64642EE4CF745EC87A7654 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tDA7BD6553D0FB0F62E5C8DCFF0AACDE2 /* AccessibilityPrimitives.h in Headers */,\n\t\t\t\tAB68948AE78A34C68EFB0AB1BC2C387B /* AccessibilityProps.h in Headers */,\n\t\t\t\t58150B290E77D2844EC1945D79898DBB /* accessibilityPropsConversions.h in Headers */,\n\t\t\t\tF2CF697CCA0405E54F78738FCE93A2F9 /* AsynchronousEventBeat.h in Headers */,\n\t\t\t\tD244559AE36BD566F5DFFDBAFCFFE2BF /* AttributedString.h in Headers */,\n\t\t\t\tD5CCF9F221CFF9B657B72954E2ECD096 /* AttributedStringBox.h in Headers */,\n\t\t\t\t64FF46086B966FC625E4C4032EA159D8 /* BaseTextProps.h in Headers */,\n\t\t\t\t11CDCB576F0B65DE17497B576F58EAE2 /* BaseTextShadowNode.h in Headers */,\n\t\t\t\tB6DD615DFD63F8AA04F5EA15845F24B5 /* BaseTouch.h in Headers */,\n\t\t\t\t069EC9D1FB2F67664CF6B2CEC35D10FF /* BaseViewEventEmitter.h in Headers */,\n\t\t\t\t4B22A24065B251775C2B4FF3C3B511CC /* BaseViewProps.h in Headers */,\n\t\t\t\tF4D5FD12FAB7BDC8710108C11EE0B292 /* BatchedEventQueue.h in Headers */,\n\t\t\t\t88C7EA300B0E07376EA1EB2A781FE1C2 /* bindingUtils.h in Headers */,\n\t\t\t\t6401C5A434CA5B6B493B00EA5DB65EE4 /* ComponentDescriptor.h in Headers */,\n\t\t\t\t863865180BA34A40972C40C6A7C8E021 /* ComponentDescriptorFactory.h in Headers */,\n\t\t\t\t40B51C9BE008F034A16C81420F0DA4A0 /* ComponentDescriptorProvider.h in Headers */,\n\t\t\t\t60C96C95ADCBADD5869F99A9F1AF8374 /* ComponentDescriptorProviderRegistry.h in Headers */,\n\t\t\t\t62F897E5BAC772F7CDDB7952F87C28F3 /* ComponentDescriptorRegistry.h in Headers */,\n\t\t\t\t0797F9543456306CA94A496239F85C3E /* ComponentDescriptors.h in Headers */,\n\t\t\t\t19B38D8BECB8D7FA1BC251ACA2144990 /* componentNameByReactViewName.h in Headers */,\n\t\t\t\t22444A20481B3591CDC93BC0F4036A1D /* ConcreteComponentDescriptor.h in Headers */,\n\t\t\t\tA23B1493A362B7B10AC587B3F3D79B5F /* ConcreteShadowNode.h in Headers */,\n\t\t\t\tCDA9AA0D1528A162879E3E394100DE76 /* ConcreteState.h in Headers */,\n\t\t\t\t83113F39C5BD9864CAF8F3E91D01BD34 /* ConcreteViewShadowNode.h in Headers */,\n\t\t\t\tB648D871BBC7EBA6B48D239A116FF6B6 /* conversions.h in Headers */,\n\t\t\t\t5734D611E435214C1564D3BDCD7C5758 /* conversions.h in Headers */,\n\t\t\t\tBAE41AC37444F16DC1364FC327A7C38B /* conversions.h in Headers */,\n\t\t\t\tD298D5529CA5B29208077A481AE2BF38 /* conversions.h in Headers */,\n\t\t\t\t3E66BF7B000ECEC9F677306A1EC11448 /* conversions.h in Headers */,\n\t\t\t\tBBF174BA4A0B11366F598742295D97FC /* conversions.h in Headers */,\n\t\t\t\t8B8982906FFDDCD41E210EA5727548EF /* conversions.h in Headers */,\n\t\t\t\tED9BAECED6D57D15B8680D8A9F1FC645 /* Differentiator.h in Headers */,\n\t\t\t\t2383735C57B2D47D561308E59910C80E /* DynamicPropsUtilities.h in Headers */,\n\t\t\t\t008E750C6767F6A81D7DF312DEEB5EA3 /* EventBeat.h in Headers */,\n\t\t\t\tAA6CA9CE331D388BD5FE8AA5DA240A90 /* EventDispatcher.h in Headers */,\n\t\t\t\tD8AAC2DE2E3EA0008B8B5555BF2E3524 /* EventEmitter.h in Headers */,\n\t\t\t\tE1AD7A00786590B1156FD21A44BB9D94 /* EventEmitters.h in Headers */,\n\t\t\t\t3A38547BEC61A65216B7FC203DE719DC /* EventListener.h in Headers */,\n\t\t\t\t2BEBCE047AD0091EBD66305D11F06EFA /* EventLogger.h in Headers */,\n\t\t\t\tF25917F0AB2EE892D61580D25F0F5090 /* EventPayload.h in Headers */,\n\t\t\t\t3E5A9EC165D1D6979F3BD6F253B408B6 /* EventPayloadType.h in Headers */,\n\t\t\t\t74C3F6DB467F1523FEA9543EA61B4B46 /* EventPipe.h in Headers */,\n\t\t\t\t0BC972460491F39270DE005A9D40A372 /* EventPriority.h in Headers */,\n\t\t\t\t1DB4BA71D203BAEC328D16B17FBD954D /* EventQueue.h in Headers */,\n\t\t\t\t5D153DBD866010FF03F00D7EB90D9361 /* EventQueueProcessor.h in Headers */,\n\t\t\t\t661031CD49CDEF2BCD5BE6EC9530D7C3 /* EventTarget.h in Headers */,\n\t\t\t\t95218D9E435AD62306483383FCAD7BC6 /* graphicsConversions.h in Headers */,\n\t\t\t\tCF92DE7237153EF5E90B30A3682BF1C8 /* HostPlatformTouch.h in Headers */,\n\t\t\t\t3FC9FEE72E60365C856B578EF2B5F616 /* HostPlatformViewEventEmitter.h in Headers */,\n\t\t\t\t31B704DBFBD9861E5B16E4F568E5463C /* HostPlatformViewProps.h in Headers */,\n\t\t\t\tBE55E4FD3612515277281F56F4DCBBE3 /* HostPlatformViewTraitsInitializer.h in Headers */,\n\t\t\t\t2A190325244F59D848E634FE42885204 /* ImageManager.h in Headers */,\n\t\t\t\tDE66748432F9109389013EC8F90A07FE /* ImageRequest.h in Headers */,\n\t\t\t\t38B2E0C490CBF63CB0C7398BF2B7A9A6 /* ImageResponse.h in Headers */,\n\t\t\t\t9435ABFC3D2347D3C2FA4178AD8363B1 /* ImageResponseObserver.h in Headers */,\n\t\t\t\t51B6F7E94F3EE06D36CB1D658A88AC5C /* ImageResponseObserverCoordinator.h in Headers */,\n\t\t\t\tCF16D91D0F7C3653BAFCDC818A70F695 /* ImageTelemetry.h in Headers */,\n\t\t\t\tE62F21693DF34EBFBE00D49D4DF19B1C /* InputAccessoryComponentDescriptor.h in Headers */,\n\t\t\t\t8A61C81F74DF0B4608AAD105548E9921 /* InputAccessoryShadowNode.h in Headers */,\n\t\t\t\t39B02D53EEBFD6F7CEF41BBA45C497AA /* InputAccessoryState.h in Headers */,\n\t\t\t\tB329882D9D9CC156F9C8F664B466BA4A /* InspectorData.h in Headers */,\n\t\t\t\tF24F01675337F85C3D9AF5949695F0AC /* InstanceHandle.h in Headers */,\n\t\t\t\tCF5119F6D4E8A0C521F7D0158B43D1E1 /* LayoutableShadowNode.h in Headers */,\n\t\t\t\t93728BE1C4A407884F562ADACEAC71F2 /* LayoutAnimationCallbackWrapper.h in Headers */,\n\t\t\t\tA04D9EB219FF8B977B41D229BE877CE8 /* LayoutAnimationDriver.h in Headers */,\n\t\t\t\t51922B9088FE0CD8C342E96B18E38630 /* LayoutAnimationKeyFrameManager.h in Headers */,\n\t\t\t\t2C7A4437740961E1B2EE201D045F8382 /* LayoutAnimationStatusDelegate.h in Headers */,\n\t\t\t\t6CFD8AA29F2E9C848CA60CC969FCAB67 /* LayoutConstraints.h in Headers */,\n\t\t\t\t40D2A11491175D755AC117B88BEA9CE2 /* LayoutContext.h in Headers */,\n\t\t\t\tCF64AFCC6883E96BF7808D1467D18514 /* LayoutMetrics.h in Headers */,\n\t\t\t\t12B3909CB415E47E8826B5999B035007 /* LayoutPrimitives.h in Headers */,\n\t\t\t\tDFF18CB9F6E9C5DBC1794BC83CEE2B40 /* LeakChecker.h in Headers */,\n\t\t\t\t81A2F9C881DD636F42CEC4CD4A9A60C1 /* LegacyViewManagerInteropComponentDescriptor.h in Headers */,\n\t\t\t\tCFCF9B04CFF0ED4C5A05E5BB8CB7949D /* LegacyViewManagerInteropShadowNode.h in Headers */,\n\t\t\t\t8527C5EC667D2988E0FF5B260187ED15 /* LegacyViewManagerInteropState.h in Headers */,\n\t\t\t\tE8143FF13D3DFB1BFDFD7F666A80CBBB /* LegacyViewManagerInteropViewEventEmitter.h in Headers */,\n\t\t\t\tFEF9BDB3467FE72D2EE093812C803692 /* LegacyViewManagerInteropViewProps.h in Headers */,\n\t\t\t\tA77D12B428F49DBEC035E05EEAF4289C /* ModalHostViewComponentDescriptor.h in Headers */,\n\t\t\t\tA3CD7C4D744038936727F5BBE64375AC /* ModalHostViewShadowNode.h in Headers */,\n\t\t\t\tF5005D6D96BF20979717A1CF0017BC64 /* ModalHostViewState.h in Headers */,\n\t\t\t\t7FC52BE19A4972D6E0EFE5E8C062E78D /* MountingCoordinator.h in Headers */,\n\t\t\t\t526A2D421E98B760D469D7DFF25AC8E4 /* MountingOverrideDelegate.h in Headers */,\n\t\t\t\tFA7F0D692EE1B5D551494F3059D5F30E /* MountingTransaction.h in Headers */,\n\t\t\t\tBD99C2863EFA1867E4CC53CF50951B2F /* NativeComponentRegistryBinding.h in Headers */,\n\t\t\t\t4D3C636E570049880C8AAC77CFDD2948 /* ParagraphAttributes.h in Headers */,\n\t\t\t\t0E7C77866A73091BD1A36B2228ABD0FB /* ParagraphComponentDescriptor.h in Headers */,\n\t\t\t\t4B5056B4B0F54339419F82CB235D9B50 /* ParagraphEventEmitter.h in Headers */,\n\t\t\t\tC7871DFEB70AFC8C34E686E281A6A237 /* ParagraphLayoutManager.h in Headers */,\n\t\t\t\tC11C62BF75D485758FE41A15F556D6A6 /* ParagraphProps.h in Headers */,\n\t\t\t\t10CFBCB29BE411B25B987B73CFF4B18D /* ParagraphShadowNode.h in Headers */,\n\t\t\t\t2C292D5C62AC937B09A50BC0EC271A81 /* ParagraphState.h in Headers */,\n\t\t\t\t3FB693C6A8F96970DB7439677E46487F /* PointerEvent.h in Headers */,\n\t\t\t\t611EACB7C5FFA63323E0F5D4D49E0106 /* PointerEventsProcessor.h in Headers */,\n\t\t\t\t229229DAE6C3E28130FBD708A67CBC5F /* PointerHoverTracker.h in Headers */,\n\t\t\t\tC28EBE70902BCE47AB96EDB66AE8C397 /* primitives.h in Headers */,\n\t\t\t\tEC2759F6A364F02C68F0BD622AFA6DC5 /* primitives.h in Headers */,\n\t\t\t\tE2B0F3FEA364E0821B7A190C31E16462 /* primitives.h in Headers */,\n\t\t\t\tCDB8B07A16C926213D3894D3C27A65E4 /* primitives.h in Headers */,\n\t\t\t\tDC63013E20DCE2ADE76BE9407831C26C /* primitives.h in Headers */,\n\t\t\t\t348A9EF3D088309F5869ABAC68FAF798 /* primitives.h in Headers */,\n\t\t\t\t5B99C5727641114A90831747A6FEBD1F /* primitives.h in Headers */,\n\t\t\t\t596F0520CF8E60E8AD98030F6E71F346 /* Props.h in Headers */,\n\t\t\t\t970B747DD08085BB38AA2CBE4015C91B /* Props.h in Headers */,\n\t\t\t\t1F2F410A3DBB6D4DDF4AB78B2D20E7E1 /* propsConversions.h in Headers */,\n\t\t\t\t92048C77172BB4D1D55779CEE7BA8F5C /* propsConversions.h in Headers */,\n\t\t\t\tF2743CD8B2B3A444BB0D76A7C0FC860C /* propsConversions.h in Headers */,\n\t\t\t\tA5A30B2AF3B84C88541ABF6329E44CF7 /* PropsMacros.h in Headers */,\n\t\t\t\t403D51CE5F2689BA36F4629C3C5059B1 /* PropsParserContext.h in Headers */,\n\t\t\t\tEA50617F174E74906FE903B0D0FA3DFD /* RawEvent.h in Headers */,\n\t\t\t\tBEB43DD0A82C63C5DA77BDEBF27EAB11 /* RawProps.h in Headers */,\n\t\t\t\tF2708B41187A44B25530C27BCB5DAE44 /* RawPropsKey.h in Headers */,\n\t\t\t\t9A9022C47549BD26B9F45A7BFFB8A6BF /* RawPropsKeyMap.h in Headers */,\n\t\t\t\t452DCBF029A6FB3A779606D57EFD699F /* RawPropsParser.h in Headers */,\n\t\t\t\t1AF039E7B9A51980BFD84F7F156D0F30 /* RawPropsPrimitives.h in Headers */,\n\t\t\t\tAD579D452B17FA300A0513A780D080DC /* RawTextComponentDescriptor.h in Headers */,\n\t\t\t\t98EA24E215B825D7E404CD8B1B3A6C3C /* RawTextProps.h in Headers */,\n\t\t\t\t43DC243F1208440A4C70A92FAAFBAFB5 /* RawTextShadowNode.h in Headers */,\n\t\t\t\t846A2D046969DDCC9B62226BB8E71C78 /* RawValue.h in Headers */,\n\t\t\t\t3FD08618BB317EDD1F8E5F2C2CFB3AB4 /* RCTAttributedTextUtils.h in Headers */,\n\t\t\t\t2C4DEC5C31C3B5E06A279A46A34A39F5 /* RCTComponentViewHelpers.h in Headers */,\n\t\t\t\t132EA906D184846F30461FF9D8FFC75D /* RCTComponentViewHelpers.h in Headers */,\n\t\t\t\t314196735F72AAC0DE94ED28828A924B /* RCTFontProperties.h in Headers */,\n\t\t\t\t46FA87EE5D65CF288E704019C05581E6 /* RCTFontUtils.h in Headers */,\n\t\t\t\tE895EC817D4A74A7BB7F47CBAEEF4D70 /* RCTLegacyViewManagerInteropCoordinator.h in Headers */,\n\t\t\t\tB15D6D1F87DDE02BFCC6766FFCD7218F /* RCTTextLayoutManager.h in Headers */,\n\t\t\t\t01E2ED6001D6C49CE159000B657445E8 /* RCTTextPrimitivesConversions.h in Headers */,\n\t\t\t\t65F3033C93DD7B1EF83673E19BB9EBD8 /* React-Fabric-umbrella.h in Headers */,\n\t\t\t\tA5376CA99127C041CA004A648022C1C5 /* ReactEventPriority.h in Headers */,\n\t\t\t\t2BC999AB42C3CA0A9E306051F16E41CD /* ReactPrimitives.h in Headers */,\n\t\t\t\tF4CA5518B31E3A44A9E41DC637347B7D /* RootComponentDescriptor.h in Headers */,\n\t\t\t\t77812A80E72FC40B7CFA752C8D75D2CE /* RootProps.h in Headers */,\n\t\t\t\tEBFA2EC449CC7806AD2DFD54A9840763 /* RootShadowNode.h in Headers */,\n\t\t\t\t22F46521658395591D46E6679AAA6E65 /* SafeAreaViewComponentDescriptor.h in Headers */,\n\t\t\t\t43BBB6BB48AD003AAB4B6F1A58B97B52 /* SafeAreaViewShadowNode.h in Headers */,\n\t\t\t\tE19D4347CEDC9DE18C2B12A42F2ED1EA /* SafeAreaViewState.h in Headers */,\n\t\t\t\tE5073F2F6330149725DFF68FF2754A20 /* Scheduler.h in Headers */,\n\t\t\t\t5589627C9AD1572C6B6C6F5993F440F3 /* SchedulerDelegate.h in Headers */,\n\t\t\t\t342D7CD1B93BDB714F8E4B9DFF918CA2 /* SchedulerToolbox.h in Headers */,\n\t\t\t\t5C8E17910713620E360E4C279B7CCE2F /* ScrollViewComponentDescriptor.h in Headers */,\n\t\t\t\t9E62546DD0C89254100F01FB1C6313E9 /* ScrollViewEventEmitter.h in Headers */,\n\t\t\t\t9AD21A8C1FB12C6F69D2E07588A0B966 /* ScrollViewProps.h in Headers */,\n\t\t\t\t5192D6CBCA9DEBBB6D2D1CB8BB8042BC /* ScrollViewShadowNode.h in Headers */,\n\t\t\t\t36B786CEB46A9C3E458EE781044361D2 /* ScrollViewState.h in Headers */,\n\t\t\t\t8558A61F1FC9DCE311F651F6839AD63A /* Sealable.h in Headers */,\n\t\t\t\t0AB017AA30AADCABC979757F7F94A860 /* ShadowNode.h in Headers */,\n\t\t\t\t8D71047A3D5C9E1F408B1BD91EE59484 /* ShadowNodeFamily.h in Headers */,\n\t\t\t\tDEE25205878E37681E37F7C8F3B2929F /* ShadowNodeFragment.h in Headers */,\n\t\t\t\t9D2D3C5051C69BC67410C4758F73B91B /* ShadowNodes.h in Headers */,\n\t\t\t\t71CC2CB38EF9DAAD4F64835EB538E676 /* ShadowNodeTraits.h in Headers */,\n\t\t\t\t5AEB23424B59FE64465815AA360C3FA7 /* ShadowTree.h in Headers */,\n\t\t\t\t7477B4ABF6296B23A00F0D50C65B6E7A /* ShadowTreeDelegate.h in Headers */,\n\t\t\t\t1CE20D629F4DE5EA945C098144CC56E5 /* ShadowTreeRegistry.h in Headers */,\n\t\t\t\tD2EED5D51C2C3C5AA6414C428BB9C234 /* ShadowTreeRevision.h in Headers */,\n\t\t\t\t54DE8886E75B8747E97732B29877D05A /* ShadowView.h in Headers */,\n\t\t\t\t1304FE75578CCF44D9049CCEFCDB04D9 /* ShadowViewMutation.h in Headers */,\n\t\t\t\t9697A6B4D46C8A478177B8A7BBC5087A /* State.h in Headers */,\n\t\t\t\tCEBDF609628A96683A1298905EB10E39 /* StateData.h in Headers */,\n\t\t\t\tAEC4C05B01303751276918D1FA20961D /* StatePipe.h in Headers */,\n\t\t\t\tAF530C0F30401EA5E02563DB0FD3431B /* States.h in Headers */,\n\t\t\t\t7A26687146CAE994D2AE94307FE436D7 /* StateUpdate.h in Headers */,\n\t\t\t\tC791DDB6F088C6A6850CA660286643E4 /* stubs.h in Headers */,\n\t\t\t\tD87EFE084AEE4FEB4474C02F2E3AC1DF /* StubView.h in Headers */,\n\t\t\t\t6BF410C3D76E672A08E4EB084CFD21BB /* StubViewTree.h in Headers */,\n\t\t\t\tB9680AACE3CB0C78BD9987E51E119F54 /* SurfaceHandler.h in Headers */,\n\t\t\t\t3773063F34B6E58F660EAC09788CCB4D /* SurfaceManager.h in Headers */,\n\t\t\t\tB3D5EF797853D7097172DEF9E94C0146 /* SurfaceRegistryBinding.h in Headers */,\n\t\t\t\tAD7A74E9D7AA2FEB89FCB880F9D08C56 /* SurfaceTelemetry.h in Headers */,\n\t\t\t\t0A74076497F9A29CE8DDDD53D828748B /* SynchronousEventBeat.h in Headers */,\n\t\t\t\tB5F96EFACDBA7885CA0B125F4D0030E5 /* TelemetryController.h in Headers */,\n\t\t\t\t838D25B894748FE27FAC7FE3F39AA0FF /* TextAttributes.h in Headers */,\n\t\t\t\t31D8AC65D15BA8248DF32ACB02B0F785 /* TextComponentDescriptor.h in Headers */,\n\t\t\t\tFDA9294EC4CF28A1AE0E07DD15E8A938 /* TextInputComponentDescriptor.h in Headers */,\n\t\t\t\tF124B4C3977784DC8F6C302D4772EF51 /* TextInputEventEmitter.h in Headers */,\n\t\t\t\tFE80AB3F468FEBAF4F9FD0883C9C3FBA /* TextInputProps.h in Headers */,\n\t\t\t\tA45DC96FB186B370BEE808C18E1862F0 /* TextInputShadowNode.h in Headers */,\n\t\t\t\t4BCCDB6CEDB655B51D4EAA168B46A458 /* TextInputState.h in Headers */,\n\t\t\t\t09FF08768BDBFF4D478026381BB522BB /* TextLayoutContext.h in Headers */,\n\t\t\t\tBB894D03D378CDA7DED9870ADC869E5F /* TextLayoutManager.h in Headers */,\n\t\t\t\t775374264170BAD2F2656335D8A3DED8 /* TextMeasureCache.h in Headers */,\n\t\t\t\tF0ADB8F0BFF669D9F7C16579DA584E6E /* TextProps.h in Headers */,\n\t\t\t\t1C2B9AB0D768A8AAE37CD8D81A4577FE /* TextShadowNode.h in Headers */,\n\t\t\t\t0D43A9F582531A23BE6A6D1DC895F52E /* Touch.h in Headers */,\n\t\t\t\t82D8D0292794FEB4B58E14E709CB8E78 /* TouchEvent.h in Headers */,\n\t\t\t\t0366A2F9BCF416C8C084A6CFE4257720 /* TouchEventEmitter.h in Headers */,\n\t\t\t\t83029D9A22030F3A36506286BC43B43C /* TransactionTelemetry.h in Headers */,\n\t\t\t\tFA3876E333033226CDF04768A947C7EC /* UIManager.h in Headers */,\n\t\t\t\tDD10FCD5C9B98144C6806F70FC9B7C6A /* UIManagerAnimationDelegate.h in Headers */,\n\t\t\t\tF6510C9AC9E136A7463F72A71254AD5E /* UIManagerBinding.h in Headers */,\n\t\t\t\t268887F37656A49D32EE08CF5590DACC /* UIManagerCommitHook.h in Headers */,\n\t\t\t\tB5B21BBAC4214172C7C33720A5960FCC /* UIManagerDelegate.h in Headers */,\n\t\t\t\t3BA84270769E9763D410373AA68B4DEE /* UIManagerMountHook.h in Headers */,\n\t\t\t\t4C441C36AC4132DB0BA4367F9AAF3781 /* UnbatchedEventQueue.h in Headers */,\n\t\t\t\t841FF36838662B6C2789AEED5D6016C8 /* UnimplementedViewComponentDescriptor.h in Headers */,\n\t\t\t\t2967A53F795C03EF89E6805B44D8D826 /* UnimplementedViewProps.h in Headers */,\n\t\t\t\tCB3C2589382123E2648E2EE15DCD7717 /* UnimplementedViewShadowNode.h in Headers */,\n\t\t\t\t7B23CFE3C52926A8B340594C18E30C48 /* UnstableLegacyViewManagerAutomaticComponentDescriptor.h in Headers */,\n\t\t\t\tFBDD186A5D7B5E12FB15B56B23F595A5 /* UnstableLegacyViewManagerAutomaticShadowNode.h in Headers */,\n\t\t\t\tAB95787F449828E3C56FC5A5B502F056 /* UnstableLegacyViewManagerInteropComponentDescriptor.h in Headers */,\n\t\t\t\tFB26DBB9C1BDDF94A43349306AFBFEC5 /* utils.h in Headers */,\n\t\t\t\t1EDC798E6DFC0A6D410C23283F368BB2 /* ValueFactory.h in Headers */,\n\t\t\t\tA9DBFF6662EFD601FDEC3789C5796033 /* ValueFactoryEventPayload.h in Headers */,\n\t\t\t\t8D3CBE78A64B90795160670F9FABFF09 /* ViewComponentDescriptor.h in Headers */,\n\t\t\t\t29B62250F780EFA539F4D51E6F2C95F7 /* ViewEventEmitter.h in Headers */,\n\t\t\t\t5873B575B8FE7E9DE3AE028E0C2665E2 /* ViewProps.h in Headers */,\n\t\t\t\tD2AA4B00D9EB36E405C793FA585D476A /* ViewPropsInterpolation.h in Headers */,\n\t\t\t\t2F4A50C76937BDC8C6EF040478E22619 /* ViewShadowNode.h in Headers */,\n\t\t\t\tB244559D2113F144FDF39CD9D1E1A47C /* WeakFamilyRegistry.h in Headers */,\n\t\t\t\tDB1C77BB649348CF505F9311A4D9BB98 /* YogaLayoutableShadowNode.h in Headers */,\n\t\t\t\t5C24DA799B8DE8BE45C1EB910F6465A1 /* YogaStylableProps.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD288DB9B0456E0CC4075C19E15EC2EF3 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t42AA225751C052683DFAFDE8325C2990 /* glog-umbrella.h in Headers */,\n\t\t\t\t7E683945AA4DE479DE6E7C64E77B9192 /* log_severity.h in Headers */,\n\t\t\t\tD08C6F38B916C0B5EC43E9CFA026685D /* logging.h in Headers */,\n\t\t\t\t2CB63483AD5282D53115DA088A6D936A /* raw_logging.h in Headers */,\n\t\t\t\tA29A68DEAEAEA7CE6917E095DC77395F /* stl_logging.h in Headers */,\n\t\t\t\t2C9BA5A633348EFCD5CA2A7608673BFC /* vlog_is_on.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD91A4D4A9E4103F160841820694DECF2 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB9E1C9D4A16FFAF1560A278D0104CB8B /* HermesInstance.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD9850AC624D95996A3B3A552E9F54AD7 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tCEA8A8F5218290D21CA3D0F9FBE73D05 /* ContextContainer.h in Headers */,\n\t\t\t\tB511DC7B0492C9D9D0A58F080612F4D7 /* CoreFeatures.h in Headers */,\n\t\t\t\t7C2C313941BEC63BAA8CC3668B949411 /* FloatComparison.h in Headers */,\n\t\t\t\t61A92A507431FC4F546B5C86D863FA73 /* fnv1a.h in Headers */,\n\t\t\t\t4D40B9DC8342119ECA0695AE455E248A /* hash_combine.h in Headers */,\n\t\t\t\t7B6DA18AF21228DB00C403D3863B7BA1 /* jsi.h in Headers */,\n\t\t\t\t3CEB56248F6859AC3BDED52E5ABB81FD /* ManagedObjectWrapper.h in Headers */,\n\t\t\t\tB7A0E11FB2F78019300E8AA5E82299B3 /* PackTraits.h in Headers */,\n\t\t\t\tDC28F68C0796FB7F8337CAFA89BA23CF /* React-utils-umbrella.h in Headers */,\n\t\t\t\t296D94DA561C3E641394E251DB57CE49 /* RunLoopObserver.h in Headers */,\n\t\t\t\t3E5BDBC0CC3A15341956E99C1006F430 /* SharedFunction.h in Headers */,\n\t\t\t\t1615048D674C53EC2FE5B6B09AB39742 /* SimpleThreadSafeCache.h in Headers */,\n\t\t\t\t8CB5FB6855789B1CF6C224E66DBC0DD1 /* Telemetry.h in Headers */,\n\t\t\t\tEF4DDB2FEB551BD01E6F56CEB268451E /* to_underlying.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD9FABD97FD6F9E8ED9E7567704D37BBA /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t725E303EAE71CABAF946B1516618C4C2 /* MapBuffer.h in Headers */,\n\t\t\t\t5B1BDBB882CBF302AE93AF1F4B4A5449 /* MapBufferBuilder.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tDAE502B98C15919EDA8AE839E45EF463 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t3E19A59E0EC2217267D80A46845BD6AE /* RCTConvertHelpers.h in Headers */,\n\t\t\t\t103B71140476A7F2EF9149C840F969BC /* RCTTypedModuleConstants.h in Headers */,\n\t\t\t\t5BF35C7D201412137E9D7BB5C052F714 /* RCTTypeSafety-umbrella.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tDC06E85B125BB6F20AEA30AA6C6A8494 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t45DD2B4B19A1543D0AA2E492728F9112 /* Database.h in Headers */,\n\t\t\t\t4CAE60F3D1B8ADE26E3B2CA80D13BEE6 /* DatabasePlatform.h in Headers */,\n\t\t\t\t6DA8C2B7DF486142D81AE0FA210DB2DA /* FMDatabase.h in Headers */,\n\t\t\t\tBB9B6DC3BA3E623DC5E09A9D554CA3D6 /* FMDatabaseAdditions.h in Headers */,\n\t\t\t\tF9A183D9BEA7E6725F4DD901F0583A00 /* FMDatabasePool.h in Headers */,\n\t\t\t\t8778EC34B4FB5DDD57124C18CC26AEEC /* FMDatabaseQueue.h in Headers */,\n\t\t\t\t5C8C3D423B3C1790471F00F9BBC248DF /* FMDB.h in Headers */,\n\t\t\t\tD7A16B0C6D721716F7C5A70A6433C529 /* FMResultSet.h in Headers */,\n\t\t\t\t71EFB67CDD3BFD1B8FD94E74C72C2164 /* JSIHelpers.h in Headers */,\n\t\t\t\t8D3920B60E2117BEE3BD89D4270299B3 /* JSIInstaller.h in Headers */,\n\t\t\t\t0D0305563835BA45E3AB92FDC061900A /* Sqlite.h in Headers */,\n\t\t\t\t9B87B7263006E8E400822B725E60FFBE /* WatermelonDB.h in Headers */,\n\t\t\t\tA64FF4152676B429D3E3359E14BFD5B2 /* WMDatabase.h in Headers */,\n\t\t\t\tCCA37D065218C0C45FDDF8CC70E835B7 /* WMDatabaseBridge.h in Headers */,\n\t\t\t\t0364A19CF9719BA18B744C8BFBF53540 /* WMDatabaseDriver.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE8457FFFBEC926DA7BE46B2892CB0FDB /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t3A10A4EAE244B467148FBBF299D6E668 /* flags.h in Headers */,\n\t\t\t\t9376001A5415EA17C8FE5D79C03B3E05 /* React-debug-umbrella.h in Headers */,\n\t\t\t\t9517335C8F1CE70427B5E0AF6F87FD29 /* react_native_assert.h in Headers */,\n\t\t\t\t83CAAC66FC6430951815CBCA69937212 /* react_native_expect.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tF2D8DBE624B824B97685554501230222 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t2923AE58E9BBFBF24388EB12E31A6DB3 /* NSRunLoop+SRWebSocket.h in Headers */,\n\t\t\t\t4995E35BC80E4A934B323776BFE95BF3 /* NSRunLoop+SRWebSocketPrivate.h in Headers */,\n\t\t\t\t5BCC3880E6ECD139C026CD443E4DF521 /* NSURLRequest+SRWebSocket.h in Headers */,\n\t\t\t\t9DEB120143CCAE9182A2D84A8E9E6FBC /* NSURLRequest+SRWebSocketPrivate.h in Headers */,\n\t\t\t\t32122892A762CA325502454526E788E3 /* SocketRocket.h in Headers */,\n\t\t\t\tAD7532D08452F1A565E555D61945FB51 /* SRConstants.h in Headers */,\n\t\t\t\tC9F6E53C80C424F26ABFB545F428ADC8 /* SRDelegateController.h in Headers */,\n\t\t\t\t74FD09866C2EEDF289F2151656259CD2 /* SRError.h in Headers */,\n\t\t\t\tFE3962EC610FE961F8B6C1D916E9C04A /* SRHash.h in Headers */,\n\t\t\t\tCDE3F42EA3A73ED13A9096434E7A1599 /* SRHTTPConnectMessage.h in Headers */,\n\t\t\t\t49409B9EED2B261372CC7135F2429D67 /* SRIOConsumer.h in Headers */,\n\t\t\t\t12059A7AC3C0621F11193E23732E1819 /* SRIOConsumerPool.h in Headers */,\n\t\t\t\t2001CC4F61119A2ACAC4E1B9519A91F5 /* SRLog.h in Headers */,\n\t\t\t\t550C21D890D7BCD2AF68A2CAF0E32F9D /* SRMutex.h in Headers */,\n\t\t\t\t1478022575B1D58411C818595E989892 /* SRPinningSecurityPolicy.h in Headers */,\n\t\t\t\t9F3A392095C5D5039ACB1A0B07BF9CA6 /* SRProxyConnect.h in Headers */,\n\t\t\t\t88882DE62CCC5DDB83D711846353FA43 /* SRRandom.h in Headers */,\n\t\t\t\t57D605E0D28B9702F02AA9E07913BC5B /* SRRunLoopThread.h in Headers */,\n\t\t\t\tF25611B54DD87B0B21C8E273CC2BDA9A /* SRSecurityPolicy.h in Headers */,\n\t\t\t\t6D7AA2A2008AA3CFD3185810516DD2AD /* SRSIMDHelpers.h in Headers */,\n\t\t\t\t103C9C846673585F643489F5844C7873 /* SRURLUtilities.h in Headers */,\n\t\t\t\t2613399F7C428BA43CA183A859DA8F36 /* SRWebSocket.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tF624199FC463FBC3A10911920126B6BB /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t3CB47200EDBCEECB186D83CC145EEDED /* PlatformRunLoopObserver.h in Headers */,\n\t\t\t\tF901B09A64206BD8481364EF79C7D52B /* RCTAccessibilityElement.h in Headers */,\n\t\t\t\t8A819DCA8AD6D57C2222DBE0B7FE7190 /* RCTActivityIndicatorViewComponentView.h in Headers */,\n\t\t\t\t898869098F6FB696AA71D98E461232CA /* RCTComponentViewClassDescriptor.h in Headers */,\n\t\t\t\t0E9F6325DB8475265B002F1E7FD69D5B /* RCTComponentViewDescriptor.h in Headers */,\n\t\t\t\tC016F3769390ED58641BA2886319108C /* RCTComponentViewFactory.h in Headers */,\n\t\t\t\tAE0DB91FEF11CE1FD97DE6B1A300E697 /* RCTComponentViewProtocol.h in Headers */,\n\t\t\t\t89CCC3121E6749EC7C4D707AD992C550 /* RCTComponentViewRegistry.h in Headers */,\n\t\t\t\t8B9FA606ADA138041A461B1A45CC47BC /* RCTConversions.h in Headers */,\n\t\t\t\tDB330BA756D9108372BB5C51B9BA73D7 /* RCTCustomPullToRefreshViewProtocol.h in Headers */,\n\t\t\t\t9AE0B339D38F4BDCFD54AF8B4B74B9AD /* RCTDebuggingOverlayComponentView.h in Headers */,\n\t\t\t\tC77CB2DD8FD053075C9A2178F2617423 /* RCTEnhancedScrollView.h in Headers */,\n\t\t\t\tDDED52C98E3DB3DE7B916FFA6E38389E /* RCTFabricComponentsPlugins.h in Headers */,\n\t\t\t\tF0D13FA0AEDD0027AD18A56E95626A3A /* RCTFabricModalHostViewController.h in Headers */,\n\t\t\t\t56724EB37D2444DF72CF868DD13477FA /* RCTFabricSurface.h in Headers */,\n\t\t\t\tB792854DB1139F6C4839DDC23FFE87CD /* RCTGenericDelegateSplitter.h in Headers */,\n\t\t\t\t8C6CD8EF00A7B2AA432B528185A21005 /* RCTIdentifierPool.h in Headers */,\n\t\t\t\tEE442608008693F4732B90E3E929F104 /* RCTImageComponentView.h in Headers */,\n\t\t\t\t37F4DCC3A8CA1D1A4D418657FF19733F /* RCTImageResponseDelegate.h in Headers */,\n\t\t\t\t75853200EC17CEE70359BDA55A296152 /* RCTImageResponseObserverProxy.h in Headers */,\n\t\t\t\t2B053AF14B09FFD6105A38AD87C405FD /* RCTInputAccessoryComponentView.h in Headers */,\n\t\t\t\tB1FB31DE01AF8497EA404D2EA2B380EB /* RCTInputAccessoryContentView.h in Headers */,\n\t\t\t\t81313E2CDDE7FC92041DDF94657C35BE /* RCTLegacyViewManagerInteropComponentView.h in Headers */,\n\t\t\t\t4AF659E6D81AA3230AF3CC577A664469 /* RCTLegacyViewManagerInteropCoordinatorAdapter.h in Headers */,\n\t\t\t\tBC6A9D036DE803C84DFC46F74C1B54DC /* RCTLocalizationProvider.h in Headers */,\n\t\t\t\t951D58A9E7D698B929AF899C28E57034 /* RCTModalHostViewComponentView.h in Headers */,\n\t\t\t\t86AE12D8AB4DFCEF8C5413A542FA699F /* RCTMountingManager.h in Headers */,\n\t\t\t\t8D2E0D17D455244D4DADB8163EE9C146 /* RCTMountingManagerDelegate.h in Headers */,\n\t\t\t\t9D2C4B6C64188ADED9A1A5F54328072A /* RCTMountingTransactionObserverCoordinator.h in Headers */,\n\t\t\t\tEABC36AD3C5E7A062DD1E648173390BD /* RCTMountingTransactionObserving.h in Headers */,\n\t\t\t\t9E5B5F823216896E6318DB55C9616AC9 /* RCTParagraphComponentAccessibilityProvider.h in Headers */,\n\t\t\t\t66F138CEF6DE7733C00C0EDAF107F4E3 /* RCTParagraphComponentView.h in Headers */,\n\t\t\t\tE5E55BF988954948EFE319F6580A5DD2 /* RCTPrimitives.h in Headers */,\n\t\t\t\tBECF0A8247DDD53567BC16E3F7F7FBA5 /* RCTPullToRefreshViewComponentView.h in Headers */,\n\t\t\t\tAF63E872921CA837B9532CC5211FD6BC /* RCTReactTaggedView.h in Headers */,\n\t\t\t\t25D9A0F89FE35DB331D48EAEC035EC4D /* RCTRootComponentView.h in Headers */,\n\t\t\t\t6B9B49A3703636ADC90A520068F48C55 /* RCTSafeAreaViewComponentView.h in Headers */,\n\t\t\t\t5424ED4EE723B69262C7BA8F229423CC /* RCTScheduler.h in Headers */,\n\t\t\t\tEB3E3453EFB9D515C27B942DBC8CA533 /* RCTScrollViewComponentView.h in Headers */,\n\t\t\t\t9A4EE65B2E9B67E48FEA687692C36F66 /* RCTSurfacePointerHandler.h in Headers */,\n\t\t\t\t67D6B0FEE7276ADF5A34F358361A06C3 /* RCTSurfacePresenter.h in Headers */,\n\t\t\t\t6D9019B41C60A4DACDF6D306788014AB /* RCTSurfacePresenterBridgeAdapter.h in Headers */,\n\t\t\t\t6D868A2B81C43D395DCDC4C4B6FC60F6 /* RCTSurfaceRegistry.h in Headers */,\n\t\t\t\t3D9A59728E70022027792DBB95213CE3 /* RCTSurfaceTouchHandler.h in Headers */,\n\t\t\t\t94CD80C023E882B4DA9D02927CDA9327 /* RCTSwitchComponentView.h in Headers */,\n\t\t\t\t2A43229C2CBF5932A43C13CAE64EB114 /* RCTTextInputComponentView.h in Headers */,\n\t\t\t\tB10E4CBE3CC25EEDBB00CDBDA2464C7D /* RCTTextInputNativeCommands.h in Headers */,\n\t\t\t\tF2B68B0957E8649F575BCACD150607B8 /* RCTTextInputUtils.h in Headers */,\n\t\t\t\tF1F4420804BCE4EC9ECF3A3B61CB6FB4 /* RCTThirdPartyFabricComponentsProvider.h in Headers */,\n\t\t\t\t725DE6774E7CF785ADEBA7816ED0930A /* RCTTouchableComponentViewProtocol.h in Headers */,\n\t\t\t\t6354C2A56E1FE6BB514E79F6E1B34BF0 /* RCTUnimplementedNativeComponentView.h in Headers */,\n\t\t\t\t757CFD9FBF0BB53294AB26076C6C3405 /* RCTUnimplementedViewComponentView.h in Headers */,\n\t\t\t\t4655F7C1059E59B736603130DB2FA22A /* RCTViewComponentView.h in Headers */,\n\t\t\t\tBE32F467ADEA0C6CC8C6AB51E53C8360 /* React-RCTFabric-umbrella.h in Headers */,\n\t\t\t\tA9E1748FA1E9E944CF1BCE7376E7B033 /* UIView+ComponentViewProtocol.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tF837FE48D95BC32E08823880617709FA /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tBF95BCE7DEEBE179C23F8F6D13EB1A5C /* react_native_log.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXHeadersBuildPhase section */\n\n/* Begin PBXNativeTarget section */\n\t\t02B79DFED924FA19CA90EC69614733E1 /* fmt */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 8155B5CA84599E484C0CD5B5A50F38AA /* Build configuration list for PBXNativeTarget \"fmt\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tC7F762FCDD3EC1F3B985B12D843C839D /* Headers */,\n\t\t\t\t1668C4E93B3B7D623F5F0B12FFC8EDF1 /* Sources */,\n\t\t\t\tB0F3C1490E731E02547F366CAC459882 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = fmt;\n\t\t\tproductName = fmt;\n\t\t\tproductReference = F4BDA69E3BCB0166D49FB679ABADCA00 /* fmt */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t083B602EA19B4AD50EC53C0602F29A7D /* React-logger */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 5BBEBFE986F7B4F914468460EB8F1959 /* Build configuration list for PBXNativeTarget \"React-logger\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tF837FE48D95BC32E08823880617709FA /* Headers */,\n\t\t\t\t6821FD5A12B69581B081B1EB963284D6 /* Sources */,\n\t\t\t\t6B85A179CAD33992F413D8BD3E7F2D36 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tBCC574E946A3A8BCCE454E8E24779B25 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-logger\";\n\t\t\tproductName = \"React-logger\";\n\t\t\tproductReference = A5B49761F8D1EB12585DD45CAA2E489F /* React-logger */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t091003D98BDA80B01B9E35CADE3947F0 /* React-Mapbuffer */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = B1B375EB7281E82379407E0756F4CA72 /* Build configuration list for PBXNativeTarget \"React-Mapbuffer\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD9FABD97FD6F9E8ED9E7567704D37BBA /* Headers */,\n\t\t\t\tBC9D5D34749A7A7BA7B3E8BAA001423B /* Sources */,\n\t\t\t\tCA724DED2831B905A1998F902665A550 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t3D131EABE7877449C034C8F7D0F2D6EB /* PBXTargetDependency */,\n\t\t\t\t22518BD6B6A2937961E29F0F995F94E4 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-Mapbuffer\";\n\t\t\tproductName = \"React-Mapbuffer\";\n\t\t\tproductReference = C941106D9D54AE237C5110F5638389AC /* React-Mapbuffer */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t0C050E11C4409D3BFAE9CC219C4D6195 /* React-debug */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = B0BA1E3B69666258803F3BA8BC7753D5 /* Build configuration list for PBXNativeTarget \"React-debug\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tE8457FFFBEC926DA7BE46B2892CB0FDB /* Headers */,\n\t\t\t\tC1CCF5380F13156FD54A244ED552853A /* Sources */,\n\t\t\t\tBD2E44394098D59D4216910EB6123099 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = \"React-debug\";\n\t\t\tproductName = \"React-debug\";\n\t\t\tproductReference = 6ED2C07E6AE77BBD9A6856E523EF6A06 /* React-debug */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t0EF07AE1AD53436E8D2B9B0086EA0163 /* React-RuntimeHermes */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 0F57A9E1BCAF11956772C8D87FE73D2D /* Build configuration list for PBXNativeTarget \"React-RuntimeHermes\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD91A4D4A9E4103F160841820694DECF2 /* Headers */,\n\t\t\t\tD4CC0275F39BE4206E4ACF900B008845 /* Sources */,\n\t\t\t\tC4687459249DD90C9583CD8F4F17FD73 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t5F7DDEC9656978E6328E567B901397AC /* PBXTargetDependency */,\n\t\t\t\t9D8860389569C0B4CF9D53F307783D25 /* PBXTargetDependency */,\n\t\t\t\tA3A103DDF211E33A422885D060EF6862 /* PBXTargetDependency */,\n\t\t\t\t0B8F0AF300F008781318143A4023937B /* PBXTargetDependency */,\n\t\t\t\tC8AE99661D1A65D85D469BADA683E979 /* PBXTargetDependency */,\n\t\t\t\t6172D3DC6321CA3620D197A12D6E59C8 /* PBXTargetDependency */,\n\t\t\t\t3354A28B35EC1069BD30EB745FBB5320 /* PBXTargetDependency */,\n\t\t\t\tDFAE25DECCD0A8C005755C2E97CB95EF /* PBXTargetDependency */,\n\t\t\t\t652E79909AAB41E62A57EBC80CBF427C /* PBXTargetDependency */,\n\t\t\t\t32367C20F30921438885115E85DFA696 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-RuntimeHermes\";\n\t\t\tproductName = \"React-RuntimeHermes\";\n\t\t\tproductReference = 4F3E9C98444FA55E416B857143C48013 /* React-RuntimeHermes */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t1948D0B63D2CF6A48E18B0B292BC6091 /* SocketRocket */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D7B61D8E284A82A5FFDD5722F2E8CB19 /* Build configuration list for PBXNativeTarget \"SocketRocket\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tF2D8DBE624B824B97685554501230222 /* Headers */,\n\t\t\t\tECB360B46269645988A5FEF752B07CE1 /* Sources */,\n\t\t\t\t555A04A540081AC49C8E6E99B4A994A8 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = SocketRocket;\n\t\t\tproductName = SocketRocket;\n\t\t\tproductReference = 85A01882ED06DFEA2E0CE78BCDB204A7 /* SocketRocket */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t20F066A71CEA5EECC7463413442F2B77 /* React-hermes */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = B1628683B730946B45D719929318C407 /* Build configuration list for PBXNativeTarget \"React-hermes\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t480E3EC17192D033B3243595772EED8D /* Headers */,\n\t\t\t\t1B85B6C778B063059A7996C2729D726F /* Sources */,\n\t\t\t\t1E96689E45440CA500F1377CF69C3FBD /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t8348CE40A97A1B487D1B2FE4C6A432CB /* PBXTargetDependency */,\n\t\t\t\tE55D350A9268572D7FC8C05E97502888 /* PBXTargetDependency */,\n\t\t\t\tF34157E1DF7D5E455A66302A9C9AD088 /* PBXTargetDependency */,\n\t\t\t\tEF845B0031E0D8C62943D74C2C5B1956 /* PBXTargetDependency */,\n\t\t\t\t4F38BF96117F66D66D12A5026165B46F /* PBXTargetDependency */,\n\t\t\t\t160B671DE8C758C317C529472EAE84AC /* PBXTargetDependency */,\n\t\t\t\tD24CEC53FD6AF9954BB5EC0ABFD10825 /* PBXTargetDependency */,\n\t\t\t\tDEA448341ABAAE0D25466C34F1F235A4 /* PBXTargetDependency */,\n\t\t\t\tB866B352B4413F93E9054502E08ED0E0 /* PBXTargetDependency */,\n\t\t\t\t54F3A8EBD288322A88F66576AB7B01AC /* PBXTargetDependency */,\n\t\t\t\t1D4397136D2ACA4FB733CA69E77D4E29 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-hermes\";\n\t\t\tproductName = \"React-hermes\";\n\t\t\tproductReference = DAD8B71DF2DFCF15AAF98C06D37D5703 /* React-hermes */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t27F648AD269E94404D6A7547C4F9C683 /* React-jserrorhandler */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 6707DE3D6F26E17231DE98DB9A3E3AB3 /* Build configuration list for PBXNativeTarget \"React-jserrorhandler\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tC20B0C535E0FD7D4FF32A7DA7B1CA845 /* Headers */,\n\t\t\t\t75A362DACB9AD78859822092A79651B7 /* Sources */,\n\t\t\t\t35249E191E5E9A9BCF3C012B7231E4E5 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tD6F113C392C802440FC28E2899F6D75C /* PBXTargetDependency */,\n\t\t\t\t488998D26401741FC05F84B117E5020A /* PBXTargetDependency */,\n\t\t\t\t77AC1CFEEEAAD46FEE7BEA988A588B67 /* PBXTargetDependency */,\n\t\t\t\tBCF4A5F46D114B97594F5A602DC84C06 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-jserrorhandler\";\n\t\t\tproductName = \"React-jserrorhandler\";\n\t\t\tproductReference = C02EAF482D8B4DE45E3A58A25AE1FA91 /* React-jserrorhandler */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t28CE447E6F9C5F0EECC0CDD607D06A24 /* React-featureflags */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = F2768486D471591D3A8A58B2E7F81CD4 /* Build configuration list for PBXNativeTarget \"React-featureflags\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t4CE40E530312BF393D28CBE0E51411F9 /* Headers */,\n\t\t\t\tD9A2B97E596F0A5364FC6BDF8ACC69ED /* Sources */,\n\t\t\t\t4E6BB43FE92C85896EF4652D5008EE41 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = \"React-featureflags\";\n\t\t\tproductName = \"React-featureflags\";\n\t\t\tproductReference = 971F6C319DDD4BD078954A5EF77B5BA7 /* React-featureflags */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t2AB2EF542954AB1C999E03BFEF8DE806 /* DoubleConversion */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 7CDBC45D37D1B150104FBBEAFF6D7DFA /* Build configuration list for PBXNativeTarget \"DoubleConversion\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t43CB88E0FAB282141C8E630E7B32B9BB /* Headers */,\n\t\t\t\tE808ECED1A5E1EE47280499780E79451 /* Sources */,\n\t\t\t\t5D70EF7822C104273D2101F12A77DA2E /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = DoubleConversion;\n\t\t\tproductName = DoubleConversion;\n\t\t\tproductReference = 6FFB7B2992BB53405E6B771A5BA1E97D /* DoubleConversion */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t2B25F90D819B9ADF2AF2D8733A890333 /* Yoga */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = BC2E6F2E3470A4F5826B9F71F74F6A1E /* Build configuration list for PBXNativeTarget \"Yoga\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tA93B38F3B38D3C58EF7B4AB482E7F0E0 /* Headers */,\n\t\t\t\tC36899A216C6A2B189B53F2609162A18 /* Sources */,\n\t\t\t\tC045B01A5A6B7CCA78D61826BA82820C /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Yoga;\n\t\t\tproductName = Yoga;\n\t\t\tproductReference = 65D0A19C165FA1126B1360680FE6DB12 /* Yoga */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t30621D5A9764AC0BD9D02E87B2EA6665 /* React-utils */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 7AB9946DDD1C3D6A76F4EC20B825E6B1 /* Build configuration list for PBXNativeTarget \"React-utils\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD9850AC624D95996A3B3A552E9F54AD7 /* Headers */,\n\t\t\t\t798DF908E612E5F8F05490A8ADB42D63 /* Sources */,\n\t\t\t\tF6D7800EEE85719978FE04577571C010 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tBC3FB7331CDD43D5175E4D47ACA6FE66 /* PBXTargetDependency */,\n\t\t\t\t1D22B6A7210D95C77692184F9DD4DA5F /* PBXTargetDependency */,\n\t\t\t\t984847B7473A8412AEFAF77B4664F75D /* PBXTargetDependency */,\n\t\t\t\t2B046BA53642654BB49AB5D1268435C0 /* PBXTargetDependency */,\n\t\t\t\t9563F68F9BD1749F7443FD66E9590B85 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-utils\";\n\t\t\tproductName = \"React-utils\";\n\t\t\tproductReference = B7610E9FDE749C16C0B1CDAAF3B2DDC2 /* React-utils */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t45B79B0C60C74716DCD2AD7BE782A719 /* simdjson */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = C0CFAFD893AA5A3CF3EF3D5182D8DFCA /* Build configuration list for PBXNativeTarget \"simdjson\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t3C7BE99ED45BF15CCA844CFAE09EF656 /* Headers */,\n\t\t\t\t1DF1B328A32BB8F8D107024AD45C182B /* Sources */,\n\t\t\t\t303A5D98CB7E8BAC37153C94A9723DB8 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = simdjson;\n\t\t\tproductName = simdjson;\n\t\t\tproductReference = EB2EBC367DAD012021CB28C5D9106469 /* simdjson */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t463F41A7E8B252F8AC5024DA1F4AF6DA /* React-cxxreact */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 3CDF0161DB20A500B3F98141C7B4D171 /* Build configuration list for PBXNativeTarget \"React-cxxreact\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t5C14370402AA4BB4AD7B1F6D8652BE55 /* Headers */,\n\t\t\t\t0FDD676C9CF447C0E5C23ADF6F292A6E /* Sources */,\n\t\t\t\t3E93992A6915E912ABBC7FD7BB09ACF2 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tC63AA7D158F689A3665F23350A713960 /* PBXTargetDependency */,\n\t\t\t\t0F774A9A211B184E15151EBE1F7117FE /* PBXTargetDependency */,\n\t\t\t\t67567B461F3E40467B26D7974B4C1D44 /* PBXTargetDependency */,\n\t\t\t\t05373A03C28AF0BD3A139E9C7F172F96 /* PBXTargetDependency */,\n\t\t\t\t1160DC25251A334CDE35D5BE053E7EDF /* PBXTargetDependency */,\n\t\t\t\t50997191BF777B9C48032E92FE8934A8 /* PBXTargetDependency */,\n\t\t\t\t5D8A34693C0672D2B6D6FA272CD55EF9 /* PBXTargetDependency */,\n\t\t\t\t7C2893CAEC14643F651E1C7019EB7EC4 /* PBXTargetDependency */,\n\t\t\t\tB24640D5A8CF4509EC3101762B86BCAE /* PBXTargetDependency */,\n\t\t\t\t7F374E36B80AE76293129D41A96FF3DC /* PBXTargetDependency */,\n\t\t\t\tC369B22F0FAE377E5576A8BFE839BAFA /* PBXTargetDependency */,\n\t\t\t\tCF9FB788BE979D8114BF13DAF8BDE56D /* PBXTargetDependency */,\n\t\t\t\t9A7B30DF2DCFFDB397FF212296E4935B /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-cxxreact\";\n\t\t\tproductName = \"React-cxxreact\";\n\t\t\tproductReference = 37592FDAD45752511010F4B06AC57355 /* React-cxxreact */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t4BDD270EACFE5730793AEF0B9BCCBA31 /* React-graphics */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 0C275FBF85ADB0F9F7275AA03EEFF4D8 /* Build configuration list for PBXNativeTarget \"React-graphics\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t5C4140C66CDBC309D6DCFA1BCE146F4A /* Headers */,\n\t\t\t\tFBEB4901EDEA337A12D49832C0F1509A /* Sources */,\n\t\t\t\t89ED61ED54C1E87A03D923846D1CCD5D /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t2D8F535A379CBF645319C5E8F95903DC /* PBXTargetDependency */,\n\t\t\t\t907F691A1D77DB86BE3D65612BA344AC /* PBXTargetDependency */,\n\t\t\t\t57F48BAADB5805B0D266BDFC2A1C3EC9 /* PBXTargetDependency */,\n\t\t\t\t6FDBD4C9938B03D8150BED0135AFF2D4 /* PBXTargetDependency */,\n\t\t\t\t8296923833DED2E03B8C666BE6DE6690 /* PBXTargetDependency */,\n\t\t\t\tEF5884976FE3748E18B03AC28DED4AAC /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-graphics\";\n\t\t\tproductName = \"React-graphics\";\n\t\t\tproductReference = 5AA54A19E2135E09B9C8C0767385FD3A /* React-graphics */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t4F265533AAB7C8985856EC78A33164BB /* React-RCTImage */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 2007902842A2D91320A831EDA401D9D3 /* Build configuration list for PBXNativeTarget \"React-RCTImage\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t7556844A2603E807BA60BBFA9278F78D /* Headers */,\n\t\t\t\t7EBAFB8D3A23BDFF1BDD2DFFB0078930 /* Sources */,\n\t\t\t\t0139C1ECDC2157867F618C9EA3EB1FFF /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tC4841FEDE8D48DC4604247F57A37823A /* PBXTargetDependency */,\n\t\t\t\tC9D96005FA6A6CFC6678D7B193F636E2 /* PBXTargetDependency */,\n\t\t\t\t2D59FE22D01EA3E540A40567B70E611A /* PBXTargetDependency */,\n\t\t\t\tC094AAB7D234AC0D42232B6DD5D13EDC /* PBXTargetDependency */,\n\t\t\t\tE87D08CAA09D3388E7127BB834C4D010 /* PBXTargetDependency */,\n\t\t\t\t3C6C78859E469F36181BEA310DB11287 /* PBXTargetDependency */,\n\t\t\t\t51B1B37A4D04FC366AF9E06183F60026 /* PBXTargetDependency */,\n\t\t\t\t4BE784B32D7FE7E66C0BCBC48A555002 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-RCTImage\";\n\t\t\tproductName = \"React-RCTImage\";\n\t\t\tproductReference = EEDBF403E8E0B3885E65C2741B536BC5 /* React-RCTImage */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t50DBAF155FAFB994E067BA8820221EDF /* React-Fabric */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 8B2FBF8FCEC45B37713547AEBD5D99B6 /* Build configuration list for PBXNativeTarget \"React-Fabric\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tC9783B15FC64642EE4CF745EC87A7654 /* Headers */,\n\t\t\t\tEA5775F352F02CC6B079C87333EA9092 /* [CP-User] [RN]Check rncore */,\n\t\t\t\tC28D2750CFD2016BEE211A824D3BDCE3 /* Sources */,\n\t\t\t\t6F4E2E05C47567492210B48CF3716282 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tD1D39D73E05A402E21CB473870E4A4BA /* PBXTargetDependency */,\n\t\t\t\tB0F8796B619A0B7C593B255CE5B08E22 /* PBXTargetDependency */,\n\t\t\t\t4C0CF02334D579F2CA85518BAFE3AC94 /* PBXTargetDependency */,\n\t\t\t\tCA2CD4FD0049B212F2F4F143613B1746 /* PBXTargetDependency */,\n\t\t\t\t95A27BB9F1F8CA547737F477253E25D4 /* PBXTargetDependency */,\n\t\t\t\t619692B57C7C99263813F45DEF183A6B /* PBXTargetDependency */,\n\t\t\t\t30CAAA5C763B44A39B67EEA988014D07 /* PBXTargetDependency */,\n\t\t\t\t89535D4EB0336731DEC23A6271479D59 /* PBXTargetDependency */,\n\t\t\t\t41CB180CC61559DBA84C8CCD85761E40 /* PBXTargetDependency */,\n\t\t\t\t5F84ABE6461E8D10A99F1614662D5F02 /* PBXTargetDependency */,\n\t\t\t\t6EA37D38B5F608C9ED8BCC3D0CE73976 /* PBXTargetDependency */,\n\t\t\t\tD3FE2FB1AC5AF0B7210C03C7CACCEE4F /* PBXTargetDependency */,\n\t\t\t\tD2F9E46EE53762B96D30861C5B6374B7 /* PBXTargetDependency */,\n\t\t\t\tDA81774A8A6DB56723A413D0EE8927C6 /* PBXTargetDependency */,\n\t\t\t\tC3F49F70B58B4AE3958816AF5F0A65ED /* PBXTargetDependency */,\n\t\t\t\tD0C0B60DD3D34657FCB73A9DE8B10D4E /* PBXTargetDependency */,\n\t\t\t\tA8E8A02278FC1510C1E4AE330186E3DB /* PBXTargetDependency */,\n\t\t\t\t8431932AA052F87EEC81F9B95C62FF2B /* PBXTargetDependency */,\n\t\t\t\t3A081C98EE57698FFCC1C41C77D545AD /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-Fabric\";\n\t\t\tproductName = \"React-Fabric\";\n\t\t\tproductReference = DE73D8A5ECB254D9D3F8C36C8D201F89 /* React-Fabric */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t5211B5AB7B81060AA8E78614DD75D3AB /* RCTDeprecation */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 4ADC4A4F4CD285503097D676C2835DAD /* Build configuration list for PBXNativeTarget \"RCTDeprecation\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t88C438498ECA995F20C03105412663D0 /* Headers */,\n\t\t\t\t92A0F6DC3B64F90B399C60EE8FDEB83F /* Sources */,\n\t\t\t\t31DEECC7D9F4687AA05692751E71642F /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = RCTDeprecation;\n\t\t\tproductName = RCTDeprecation;\n\t\t\tproductReference = 33EEBF1D210254B5452CE560F81C9D38 /* RCTDeprecation */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t52C3F83DB80E5D527EDA54FA1DE5470A /* React-runtimescheduler */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1CAE6B2FF32C286031FF774A500E5F6B /* Build configuration list for PBXNativeTarget \"React-runtimescheduler\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t51368F0B4BB078EBDF20C37CE3191BDE /* Headers */,\n\t\t\t\tAA67040A808097DA613BC1AF4AECB0B9 /* Sources */,\n\t\t\t\t9BE70249785B143A20B5733C856CB911 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t5DD3494C5EA179CF1469D60EFA4AA48D /* PBXTargetDependency */,\n\t\t\t\t8E44E87D6B5FFB6F70D006C75B7A3B1B /* PBXTargetDependency */,\n\t\t\t\t078D793D92DDA63E03BBEE73F963EED7 /* PBXTargetDependency */,\n\t\t\t\t96F7AC019278453752BB26B62233BA22 /* PBXTargetDependency */,\n\t\t\t\t9412045B42FDBCDBB036F663A3BEC279 /* PBXTargetDependency */,\n\t\t\t\tCD98C2F774F5A8508B3A70C6BAEB1A96 /* PBXTargetDependency */,\n\t\t\t\tA0662C7E8E6F4BB1BED6AB5116B068AC /* PBXTargetDependency */,\n\t\t\t\t138FBE9E6A7F8DED026A2B9010A3D5F6 /* PBXTargetDependency */,\n\t\t\t\tCA721AC43DBB07B546D7BE24F41219C2 /* PBXTargetDependency */,\n\t\t\t\t2F4D36D22D11472378BF1A9A86688579 /* PBXTargetDependency */,\n\t\t\t\t401A92725890DB2796696C489E8A959E /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-runtimescheduler\";\n\t\t\tproductName = \"React-runtimescheduler\";\n\t\t\tproductReference = A67E85E5F06FDA406D3A1B378BDF0C5C /* React-runtimescheduler */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t53D121F9F9BB0F8AC1C94A12C5A8572F /* React-RCTVibration */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 3F9D73DBB45031EEA90F9BEAF35DBEC0 /* Build configuration list for PBXNativeTarget \"React-RCTVibration\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t03D0AD5F592D8F72B9347278AC7528B2 /* Headers */,\n\t\t\t\t53A2027EA4F55C6D53E6616B3FE1C32B /* Sources */,\n\t\t\t\t394B09545766677D0A263723DBEE5DD5 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t15CF3848FA8FF276A0AC4494AE7A2C94 /* PBXTargetDependency */,\n\t\t\t\tF6E7477DEC8DA6FFF14280294749452A /* PBXTargetDependency */,\n\t\t\t\t5DE920B65B5626FBC490D822219BEB10 /* PBXTargetDependency */,\n\t\t\t\tC54A063F17CC52B5972FA1780A6C942F /* PBXTargetDependency */,\n\t\t\t\t1097020EF71A5B0AE4AA8A3C3B539274 /* PBXTargetDependency */,\n\t\t\t\t08E1EB80F89F0EB0DD4B2ADE9C460526 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-RCTVibration\";\n\t\t\tproductName = \"React-RCTVibration\";\n\t\t\tproductReference = C1A919103EAC9813D236486C34FC0A21 /* React-RCTVibration */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t5807741745EB757C97C09F2D56726BE0 /* React-NativeModulesApple */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = F26D4DF8D52FF944DEF674FAE1118945 /* Build configuration list for PBXNativeTarget \"React-NativeModulesApple\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t96C8B3406F27BA8F9D23D265A963E433 /* Headers */,\n\t\t\t\t7B4904D3DA72A83F379DDBAE171BB0A2 /* Sources */,\n\t\t\t\t87CD4246A6A77E44C9BDD640317549F9 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t5309742FA68972C8703057C531FE7B4A /* PBXTargetDependency */,\n\t\t\t\t59D93FECBEB5A2E7B843380E4A600A47 /* PBXTargetDependency */,\n\t\t\t\t947BAD951BF31358EBBD7AB219F896DF /* PBXTargetDependency */,\n\t\t\t\t63F23627D46E214A9E83F026A3E2413D /* PBXTargetDependency */,\n\t\t\t\t66D92D4240C674B35F54C2C9AFAA0322 /* PBXTargetDependency */,\n\t\t\t\t5504789E8261A05336A711333185F028 /* PBXTargetDependency */,\n\t\t\t\t71C719D10FD6DB200EAA6EEFA1367270 /* PBXTargetDependency */,\n\t\t\t\t850EF509C0F4973D25998A85CCC1F517 /* PBXTargetDependency */,\n\t\t\t\t7EEE2CE1939388A6CDEE91AEB8A399EA /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-NativeModulesApple\";\n\t\t\tproductName = \"React-NativeModulesApple\";\n\t\t\tproductReference = 1E649614D7644BF68C2F5D4CB3FBF8DC /* React-NativeModulesApple */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t651511D7DA7F07F9FC9AA40A2E86270D /* React-RCTNetwork */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 62FCE44A9C2279F047899EE9CBDB05E9 /* Build configuration list for PBXNativeTarget \"React-RCTNetwork\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t0E23530ACDC77621C49C1C0B334F772C /* Headers */,\n\t\t\t\tAB35217B6C3003BC3E64ABF40AB236FE /* Sources */,\n\t\t\t\t38A83589C7A3FB59CFE0094947B15535 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tF2C2F506161C15F85CE462E289D34B51 /* PBXTargetDependency */,\n\t\t\t\t47552B4F8C7CC9D578C507F9C8B55E48 /* PBXTargetDependency */,\n\t\t\t\t13D7733D4877955DA3776E3CC8436E48 /* PBXTargetDependency */,\n\t\t\t\t828F20A914D5962587F89C8D501B682C /* PBXTargetDependency */,\n\t\t\t\t5EE0CB2912FC54E4E1B00ECA8BD72D8D /* PBXTargetDependency */,\n\t\t\t\t0292965509627A85A8FD7E309BC9D1E6 /* PBXTargetDependency */,\n\t\t\t\t48958125BE6C489FEA79D9B9E058AF28 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-RCTNetwork\";\n\t\t\tproductName = \"React-RCTNetwork\";\n\t\t\tproductReference = A68E5A9B69A3BA0FD52CAF7A354EC93B /* React-RCTNetwork */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t66B8F5758E6F90E16807A85C003CE61F /* React-Codegen */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 9A8C7076F126DE9D2C93C68E1F84C184 /* Build configuration list for PBXNativeTarget \"React-Codegen\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t2C77EFD57E0B1FEFDD34BA38A21E75B1 /* Headers */,\n\t\t\t\t0E7DA29FC4DD1B4A582F0DBB4907FDD3 /* [CP-User] Generate Specs */,\n\t\t\t\t827ABC8E4C67904313262F0F24F4BE76 /* Sources */,\n\t\t\t\tA9D4B85BB6017441753A3CED16046934 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tF7A0AFA84119944170C3962FDAED17D3 /* PBXTargetDependency */,\n\t\t\t\t961BDE36B0A650A306E262C44158CA8B /* PBXTargetDependency */,\n\t\t\t\tED51FC4ED914B90C6FB3A3A184B18632 /* PBXTargetDependency */,\n\t\t\t\t0CF51DBE402DD4D1816769A2AAC680B6 /* PBXTargetDependency */,\n\t\t\t\tB1E71F384FB952801A11CB94394AC12E /* PBXTargetDependency */,\n\t\t\t\tC07CFD51EE8A8059EBB505CA0AD77069 /* PBXTargetDependency */,\n\t\t\t\t67722DF845F87BA9C58F762C97B926E0 /* PBXTargetDependency */,\n\t\t\t\t08937C84140770B35EFCC5226B442C3C /* PBXTargetDependency */,\n\t\t\t\t5CFF40B71FC04352AA6F82FCB1AEE57C /* PBXTargetDependency */,\n\t\t\t\tBEFB8C790410CF0DF996DF64145C5572 /* PBXTargetDependency */,\n\t\t\t\tCC7579BBF210D2BB6A286C8DBED8DA3B /* PBXTargetDependency */,\n\t\t\t\t6041B93D30C0906C17F7827C89208FC1 /* PBXTargetDependency */,\n\t\t\t\t4C4BF44502CFA2BC155CACCEA52AFC93 /* PBXTargetDependency */,\n\t\t\t\t54BC7A2031B6EE04B465B38B2C61FA8A /* PBXTargetDependency */,\n\t\t\t\tA18F34A9AE12CA159FA4BE10BD0F08E6 /* PBXTargetDependency */,\n\t\t\t\tC0C4944B418CFB040B76FAE356CC1492 /* PBXTargetDependency */,\n\t\t\t\t6675CE1FE41E6AC87A3117E2ABBBA762 /* PBXTargetDependency */,\n\t\t\t\t6F3CAC1CE460FCD72E851FCC828AE32B /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-Codegen\";\n\t\t\tproductName = \"React-Codegen\";\n\t\t\tproductReference = E7178FECB829C9576A3723658B07F087 /* React-Codegen */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t680299219D3A48D42A648AF6706275A9 /* React-RCTSettings */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D04C425F4F78AE26547DDB4435695187 /* Build configuration list for PBXNativeTarget \"React-RCTSettings\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t3F5D17CD9252A653C5971202E0D8D3D2 /* Headers */,\n\t\t\t\t1AD76BC80FB1362DE916B4C4FDA832E9 /* Sources */,\n\t\t\t\tE8527906ED69AB38F1A6149B0ED3AFB4 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tD3A74B4CE67ACE3CD7D76E524C2644BA /* PBXTargetDependency */,\n\t\t\t\tC155477CCA345D73F3A4071492EC6132 /* PBXTargetDependency */,\n\t\t\t\t7A2587BC6C3980FFDD632559115DBC78 /* PBXTargetDependency */,\n\t\t\t\t84BEF175F835CEC76C3BA4509B326ECD /* PBXTargetDependency */,\n\t\t\t\t38EF688FA4CFB04103A9F12D916F1799 /* PBXTargetDependency */,\n\t\t\t\t53C17DD35EA04BC31221F5013D0D6470 /* PBXTargetDependency */,\n\t\t\t\tC76947685E95B2A22AF59BB340222EC6 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-RCTSettings\";\n\t\t\tproductName = \"React-RCTSettings\";\n\t\t\tproductReference = 269BE773C9482484B70949A40F4EA525 /* React-RCTSettings */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t6FE9147F8AAA4DE676C190F680F47AE2 /* React-RCTLinking */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 662954243572A7CB6DEE48482351D64F /* Build configuration list for PBXNativeTarget \"React-RCTLinking\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t1FC7C83C323D5915F4692711E389563D /* Headers */,\n\t\t\t\t5D0426A5A488845772E6948965C9D686 /* Sources */,\n\t\t\t\tF135DDD9CC12F6A1A80D36F03447C5F9 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t17140E0E193C64A3A7403F68D30A8468 /* PBXTargetDependency */,\n\t\t\t\t90640B83A8182E361131EC5865B94EF6 /* PBXTargetDependency */,\n\t\t\t\tBC679D6E3BA49D363ED5366763750F81 /* PBXTargetDependency */,\n\t\t\t\t9FD34078FD450123876A7A3CF8C74DDD /* PBXTargetDependency */,\n\t\t\t\t6F636285373965A3111B0B6ACD3B8002 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-RCTLinking\";\n\t\t\tproductName = \"React-RCTLinking\";\n\t\t\tproductReference = 802121F5B756ACBFDD6D08C36246DADD /* React-RCTLinking */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t779DAB46A58E8051C7D2E5A8782C79D1 /* Pods-WatermelonTester-WatermelonTesterTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = BF798DE132A0163B4BE4BECA4240D2A1 /* Build configuration list for PBXNativeTarget \"Pods-WatermelonTester-WatermelonTesterTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t1924379562E82C45C24131B0617BFAA9 /* Headers */,\n\t\t\t\tD920D245547BEED30EC5DBD60571CFCE /* Sources */,\n\t\t\t\t41E92B86A8DA922F93FB3895A411CD96 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t033916D526C1A889561E0F74D3D0ACCC /* PBXTargetDependency */,\n\t\t\t\tC53EA7BC9EAF97E7CE9CA81A0BF12E67 /* PBXTargetDependency */,\n\t\t\t\tC690A825B8ED25093B883CF5B4830D9E /* PBXTargetDependency */,\n\t\t\t\t05A4535BB70AF398463F378248BBD162 /* PBXTargetDependency */,\n\t\t\t\t0717C5A3C0BEAB0160A75C5D66B42470 /* PBXTargetDependency */,\n\t\t\t\t5F496EEFD1138C88F9B6C9F28BF8E7FE /* PBXTargetDependency */,\n\t\t\t\tC344777498D9BCEF407C9A6D74F03AF7 /* PBXTargetDependency */,\n\t\t\t\t814262D7504A62E918BE9E839A613667 /* PBXTargetDependency */,\n\t\t\t\tA62ADA2BF30BF8351A4A154BA1DFD26D /* PBXTargetDependency */,\n\t\t\t\tF0540A7333ABA06B5224BADDE669D817 /* PBXTargetDependency */,\n\t\t\t\tB0D77E614B2A29B1C9D7D28FC2E4F4F4 /* PBXTargetDependency */,\n\t\t\t\t61C5E1E9E0D8B3351152D9AE7DF787DA /* PBXTargetDependency */,\n\t\t\t\tF9A8004C6196E9C33150C72E5FC1683E /* PBXTargetDependency */,\n\t\t\t\tED633AA62BFF42E31A4FAA9CF28BB16F /* PBXTargetDependency */,\n\t\t\t\tD865588C4D23024C831B0C28A68F836D /* PBXTargetDependency */,\n\t\t\t\t45BFBFF43902D28610828EC9FD5889E1 /* PBXTargetDependency */,\n\t\t\t\tE3F0DCA13D829C18DBC21AF71610055F /* PBXTargetDependency */,\n\t\t\t\tFE902201A16A01BD21B612A64BED9AAD /* PBXTargetDependency */,\n\t\t\t\t01EB13A513D3A65364DA674E0BA7F7E5 /* PBXTargetDependency */,\n\t\t\t\tB94AD44411D338A32AFD335004E0B6ED /* PBXTargetDependency */,\n\t\t\t\tE2B5EC8381B3A50F28D40F975A2672B6 /* PBXTargetDependency */,\n\t\t\t\t333901E607E06D29D91573D5FD1AA335 /* PBXTargetDependency */,\n\t\t\t\t760F46FA489FA3BC1A12FE767B1C3724 /* PBXTargetDependency */,\n\t\t\t\tF87F876F414C87A2BF69648DAE44FFF0 /* PBXTargetDependency */,\n\t\t\t\tEEC595C51EF9EDBB40E0F5B472E38245 /* PBXTargetDependency */,\n\t\t\t\tCD1B88DCEAFFF3408F714BF195A0BA9A /* PBXTargetDependency */,\n\t\t\t\t0128B3961C62E0B77D199FEB5E91876A /* PBXTargetDependency */,\n\t\t\t\tC8BE6A7B0D695D555403A8C1FD672877 /* PBXTargetDependency */,\n\t\t\t\tBF6DD00FFD442BC49B4DB25016E20500 /* PBXTargetDependency */,\n\t\t\t\t07705C923CD5F83B049E084E95B356FA /* PBXTargetDependency */,\n\t\t\t\t25F8BC2FB5A20C0155607D43C0D83122 /* PBXTargetDependency */,\n\t\t\t\t39AD6EAB484ABBC2E55676C6C3FEB744 /* PBXTargetDependency */,\n\t\t\t\t8DC5372506CC8E27F51143581C74C5F7 /* PBXTargetDependency */,\n\t\t\t\t977353FAAD596E850D4C7182EB9509D4 /* PBXTargetDependency */,\n\t\t\t\t9F3B65DF4A9E574371431515F6480017 /* PBXTargetDependency */,\n\t\t\t\tAA6B0483A872C31D19C5C582CC33A30D /* PBXTargetDependency */,\n\t\t\t\tA63481D34C5560C5F3A9199783D01B6E /* PBXTargetDependency */,\n\t\t\t\t7B05CED1A38707CAF44C3092D8F27EA4 /* PBXTargetDependency */,\n\t\t\t\t9F95560B9E4E38DE203B4EDF2F2E238C /* PBXTargetDependency */,\n\t\t\t\t4185D63487F1E5B3B6A77917AAE8756E /* PBXTargetDependency */,\n\t\t\t\t8BB4CAD4E9AA9A76F4EFFF8A03EE5330 /* PBXTargetDependency */,\n\t\t\t\tE7B3814796F81B42574B7892A825D853 /* PBXTargetDependency */,\n\t\t\t\t501186D706BB3A221149583702512FBA /* PBXTargetDependency */,\n\t\t\t\t2A4DD09DDD919726D99AAD16E6EF18D1 /* PBXTargetDependency */,\n\t\t\t\tC17439E0E9B4A3F8B50C259EF28EA9E3 /* PBXTargetDependency */,\n\t\t\t\tD186B474CBACECCC487284A6C1D73E8F /* PBXTargetDependency */,\n\t\t\t\t99F6DDAF65F28CC726441A0C018AE3A7 /* PBXTargetDependency */,\n\t\t\t\tC38F78AD23A62153D938B6A8D17DB064 /* PBXTargetDependency */,\n\t\t\t\t9E1BF3FF53787FC2039BF2B7A62F9DDC /* PBXTargetDependency */,\n\t\t\t\tF50C79BA5E25D2CE982062B263ADCA17 /* PBXTargetDependency */,\n\t\t\t\tFBDAE38412AAE074731A400CBF19F946 /* PBXTargetDependency */,\n\t\t\t\t70ECBD516E2B91C386ED477D0B1C4458 /* PBXTargetDependency */,\n\t\t\t\t09932F9978240BC9960426479302DD99 /* PBXTargetDependency */,\n\t\t\t\tFE8D0EFE7556F1EBD21261B17D82DFF2 /* PBXTargetDependency */,\n\t\t\t\t04387AA90E58CC1C09497D9FA32A54B4 /* PBXTargetDependency */,\n\t\t\t\t8214D19E29BC4F9B43CFD87CC22B7018 /* PBXTargetDependency */,\n\t\t\t\t74FF1306928480CBFD0257A65C2AE3D2 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Pods-WatermelonTester-WatermelonTesterTests\";\n\t\t\tproductName = \"Pods-WatermelonTester-WatermelonTesterTests\";\n\t\t\tproductReference = 66E1BAC6CC436F67ACD51B9211A14858 /* Pods-WatermelonTester-WatermelonTesterTests */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t7ACAA9BE580DD31A5CB9D97C45D9492D /* React-Core */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = B5BF53901A44961D2F0245A680C5600D /* Build configuration list for PBXNativeTarget \"React-Core\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t50700FF38864A8F11B138C9B1C3F7EC7 /* Headers */,\n\t\t\t\t39260D04C5355C99327140553873B867 /* Sources */,\n\t\t\t\tBF9F98FB7155A6900208145875893CA8 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t2AAA0F7AC1D291B485F05244E5B94F64 /* PBXTargetDependency */,\n\t\t\t\t695CAFEE86C5934C15813E5AEB95FCF7 /* PBXTargetDependency */,\n\t\t\t\t1BE6407519073C758F404A73A903FDD8 /* PBXTargetDependency */,\n\t\t\t\tF86D55633179768891C4FADBBC92E034 /* PBXTargetDependency */,\n\t\t\t\t0FBC712AF9FD73F622F4DBEC577E97D0 /* PBXTargetDependency */,\n\t\t\t\t71DBBBE762D28A5D1FB20FDEBA133275 /* PBXTargetDependency */,\n\t\t\t\t23C94FE2112CC614AEBB66ED42CF2EAE /* PBXTargetDependency */,\n\t\t\t\tF45BCAC1136338F32A9CB80C9B478209 /* PBXTargetDependency */,\n\t\t\t\t1BC9C4D05EE6C825BB7F90181F600687 /* PBXTargetDependency */,\n\t\t\t\t2E23CFAC3E38CA3188706882E4B0FFF9 /* PBXTargetDependency */,\n\t\t\t\t826B6D82D168B27838C2571D3143BDCB /* PBXTargetDependency */,\n\t\t\t\tC03E65D69ABF1DDDBD73AE4A96581425 /* PBXTargetDependency */,\n\t\t\t\t76E2AF94513C31EEBA1A2731A05958D1 /* PBXTargetDependency */,\n\t\t\t\tA482D354857B96FF6608C1ECB1410DE1 /* PBXTargetDependency */,\n\t\t\t\tEA0D661BF9E1291A368BD6C59D9375AF /* PBXTargetDependency */,\n\t\t\t\tDDEB2059B6B32BE5EF7B55C7C7112CD4 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-Core\";\n\t\t\tproductName = \"React-Core\";\n\t\t\tproductReference = BD71E2539823621820F84384064C253A /* React-Core */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t8DED5282246ABFC24F4460D3066C84A0 /* React-RCTFabric */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 4BB3D33652ACC437885A3F69A7BD4E2B /* Build configuration list for PBXNativeTarget \"React-RCTFabric\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tF624199FC463FBC3A10911920126B6BB /* Headers */,\n\t\t\t\tCE36F0369ED0C62B7A92EE0A3470F4D6 /* Sources */,\n\t\t\t\tB490F5C3DE68C34A228783FAAEBE1CCD /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t8AC7F91A27E478D094028729D120C453 /* PBXTargetDependency */,\n\t\t\t\t3E8240D54174DE4FE703DFE46FBF7F2F /* PBXTargetDependency */,\n\t\t\t\tD596FE4363A5F7DED779B98D3DECE515 /* PBXTargetDependency */,\n\t\t\t\tD123B77D7258E6315AD79BB6D955680C /* PBXTargetDependency */,\n\t\t\t\tDE547671DADE1EAA3518584FB142D4D3 /* PBXTargetDependency */,\n\t\t\t\t340BC01CDDA1120E0BC121DF2D9F3A2D /* PBXTargetDependency */,\n\t\t\t\tFBC0958CCFB9E09A2F566E87296DFE17 /* PBXTargetDependency */,\n\t\t\t\t42F6DC0A0F33B9822CD82AAA742BBC70 /* PBXTargetDependency */,\n\t\t\t\t83A97A5415A40C13D0473AA7625FA12B /* PBXTargetDependency */,\n\t\t\t\t7A698D86B723B94C66DF2921B25EBA09 /* PBXTargetDependency */,\n\t\t\t\tAD028C4C9C138F32FF283BF9E651428A /* PBXTargetDependency */,\n\t\t\t\t14722F8716DB7B6FDF9830625EEAE9C5 /* PBXTargetDependency */,\n\t\t\t\tAD648138192ED2E45C736EEA5CF92E94 /* PBXTargetDependency */,\n\t\t\t\tBF0242746B38CA409974007B6FEDDC7F /* PBXTargetDependency */,\n\t\t\t\t676DA9CA12606B49253CA5A3F2CB29AE /* PBXTargetDependency */,\n\t\t\t\t4D6BA43CCAB6C667B53236511B23AF9F /* PBXTargetDependency */,\n\t\t\t\t0113A1D7CEA7572A46417194D8E8C43D /* PBXTargetDependency */,\n\t\t\t\tEE1683DA42ED1D4C631FC47BE8AD9535 /* PBXTargetDependency */,\n\t\t\t\t590C38C4546860234AE6995AA745B436 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-RCTFabric\";\n\t\t\tproductName = \"React-RCTFabric\";\n\t\t\tproductReference = DA7ABB6DD8AEACED51D63B2C774E3A63 /* React-RCTFabric */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t91D38B18A4E42B1622B83F450706C2F5 /* React-RuntimeApple */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 3B20501A4B72AB953CEA417EABF8576B /* Build configuration list for PBXNativeTarget \"React-RuntimeApple\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tAE897E21E39386108563A4EB4E02B6D3 /* Headers */,\n\t\t\t\t85B1519F88251F0A76A1EE2F46A80D49 /* Sources */,\n\t\t\t\tAE7FBB9DE413C21987453291581B80C1 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t53121BB43C7003FC1889807B7999F194 /* PBXTargetDependency */,\n\t\t\t\t33DD56EC46F00CDD32152A7D78484C0C /* PBXTargetDependency */,\n\t\t\t\t18A0596FF4266A184879BD59B9836B17 /* PBXTargetDependency */,\n\t\t\t\t96372FB99D877DCA073114668A01F79C /* PBXTargetDependency */,\n\t\t\t\t383F9F7477C31187D8228B90944A5666 /* PBXTargetDependency */,\n\t\t\t\t7E8596700BDB3E75F2D21854499777F3 /* PBXTargetDependency */,\n\t\t\t\t37FC712C26E18E2E350322217EC740BA /* PBXTargetDependency */,\n\t\t\t\t271AA5BE14F7B51FA70504F013807BC0 /* PBXTargetDependency */,\n\t\t\t\t6750B951032FD22A0EEA0AEEF98376DC /* PBXTargetDependency */,\n\t\t\t\t0B0B81E7C13C29E62916D264A25EA64B /* PBXTargetDependency */,\n\t\t\t\t226A033C606AB4E273CA075C678DED98 /* PBXTargetDependency */,\n\t\t\t\tB08256724219B4019F944355CBD4DEE1 /* PBXTargetDependency */,\n\t\t\t\t3DD3F4D8C8B9C7D406834B13A52483D5 /* PBXTargetDependency */,\n\t\t\t\tC6D13BFD6A1F57DBA9138A914EC33F22 /* PBXTargetDependency */,\n\t\t\t\tD013530604A03ED59DD33E5DA7A36E1D /* PBXTargetDependency */,\n\t\t\t\tB84433E64D21A3285F1532F01F6A24CA /* PBXTargetDependency */,\n\t\t\t\tD5B29CCC47333E6A4DECCCEA63418522 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-RuntimeApple\";\n\t\t\tproductName = \"React-RuntimeApple\";\n\t\t\tproductReference = 1381503C42FFF460E946860A32A6F981 /* React-RuntimeApple */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t938CCE22F6C4094B3FB6CF1478579E4B /* React-RCTAnimation */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = CDFD8CE3A5B07C8AC39C77C03139B84E /* Build configuration list for PBXNativeTarget \"React-RCTAnimation\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t539C88BE469CDEE166CB70B00092D982 /* Headers */,\n\t\t\t\t50C8A679BB5D7BD9D7EEED98F207406C /* Sources */,\n\t\t\t\t20F4275A9630980BAF5F77C0EE302D2D /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tB2FC425DE6D70B89E4B66C419D80D21B /* PBXTargetDependency */,\n\t\t\t\t9AC0F8F93F3A0DB72B7D88512F803C35 /* PBXTargetDependency */,\n\t\t\t\t349AD49C975F6EAC6C878B5A24A9C501 /* PBXTargetDependency */,\n\t\t\t\t2826FAE8B40BCAEB7402A2C59048B45C /* PBXTargetDependency */,\n\t\t\t\tD5EFD2E9F124E1BAB6AC216A804BAF12 /* PBXTargetDependency */,\n\t\t\t\t55D793D7DCDBBB8918DA3FE5C48B431B /* PBXTargetDependency */,\n\t\t\t\t6FD8F1C07C0EBA1942A87072CF2A4D5A /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-RCTAnimation\";\n\t\t\tproductName = \"React-RCTAnimation\";\n\t\t\tproductReference = FE7B9294FF05AAFD1653E2104E10844A /* React-RCTAnimation */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t95D98F901D07557EF7CA38D3F03832C5 /* React-RCTBlob */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D50F4D7598C6D582311D01575A97FE3C /* Build configuration list for PBXNativeTarget \"React-RCTBlob\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t2F3933079C76AD41609F9AFC5782B638 /* Headers */,\n\t\t\t\t3F49D730D34771920107D4D2669AFC9D /* Sources */,\n\t\t\t\t61D9AB3CF28105161B660B3A2569110A /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t56F45F0408600AD7AA272F3DE409925F /* PBXTargetDependency */,\n\t\t\t\t84032E197D1AE2F04791DC93FD90C104 /* PBXTargetDependency */,\n\t\t\t\t44BD7BB9580F592E3BA5A59E0FBDE34B /* PBXTargetDependency */,\n\t\t\t\t8CE477AD6CC82F0D980B15A3D4A459E7 /* PBXTargetDependency */,\n\t\t\t\t43EAB09B1F9E3433FFF4CAE3FA39D4D2 /* PBXTargetDependency */,\n\t\t\t\tB8F477BE7309D6FAEAD56FADEAB4CEE2 /* PBXTargetDependency */,\n\t\t\t\tF1B334885D6D8C27483276B36A4D8CD6 /* PBXTargetDependency */,\n\t\t\t\t0E1A0EB88D2733A057A54100BC106B59 /* PBXTargetDependency */,\n\t\t\t\t24EFCC54EF18A579A7C27EB7D2ED4DB1 /* PBXTargetDependency */,\n\t\t\t\t7390C8A414C80248853FC1936D46AE65 /* PBXTargetDependency */,\n\t\t\t\tF1CF5620523DB34FC9603AFE5E3FCE46 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-RCTBlob\";\n\t\t\tproductName = \"React-RCTBlob\";\n\t\t\tproductReference = F71EBF73F354B475D465FF6DE9A66707 /* React-RCTBlob */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t9F96BF8B7FC28F5CF47242D7A73B11DA /* React-rendererdebug */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 6421C0EF07096454C13037FB6D1B25FB /* Build configuration list for PBXNativeTarget \"React-rendererdebug\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t2F74E959B7B6CD3497F4E33BD9C61FE3 /* Headers */,\n\t\t\t\t51792160622EDC05F03A3BD289C7A67D /* Sources */,\n\t\t\t\tB069C5D34B9F29495B74E527819ECEE8 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tBCB6931B0CA96D254A87574AEC2F1A72 /* PBXTargetDependency */,\n\t\t\t\t31B3264B573AC004E3E10202FFABE064 /* PBXTargetDependency */,\n\t\t\t\t991ED2A86E606300A3C9E5A82B68AC3D /* PBXTargetDependency */,\n\t\t\t\tC624C37763CA3EB12B45D2F00EB3F35E /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-rendererdebug\";\n\t\t\tproductName = \"React-rendererdebug\";\n\t\t\tproductReference = 1E04881EDF02715BD6AC2C6ED3FBB37E /* React-rendererdebug */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\tA5E93F38E96B3A37575BEC88AD69AE85 /* React-FabricImage */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 075CFEE2CD881582988C1D1118EEC225 /* Build configuration list for PBXNativeTarget \"React-FabricImage\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tBBFB6E9C09170030BCB76EF550C29B38 /* Headers */,\n\t\t\t\t52C37581A97E44EE0B8C295E6DD38CCE /* Sources */,\n\t\t\t\t31C42BB3E2E25E43EB019EDC29907F97 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tC0494FFB47801B2ED9C5783F9F2E9478 /* PBXTargetDependency */,\n\t\t\t\t3093214829851D85A041F11935DDD07C /* PBXTargetDependency */,\n\t\t\t\t471DCFFCBD4A108ED25D065877FD3FD3 /* PBXTargetDependency */,\n\t\t\t\t5396E9247D3B4600C0CEF1BE56E512C5 /* PBXTargetDependency */,\n\t\t\t\t06E63CD166A9DB8EAE8D17835AAAE714 /* PBXTargetDependency */,\n\t\t\t\tB2077D6B91054427593B7239A83DFA23 /* PBXTargetDependency */,\n\t\t\t\tE3C0BF921958C89B2B9262B8B7517F4B /* PBXTargetDependency */,\n\t\t\t\t8BA87EBAE07B939A129DE936919B2437 /* PBXTargetDependency */,\n\t\t\t\tC2AA482EF6D398F117C43A167AACC89F /* PBXTargetDependency */,\n\t\t\t\tD3E014E2312527475A53EFF6DEC95B1E /* PBXTargetDependency */,\n\t\t\t\t07309250446D5F55252BEAAE50750CF8 /* PBXTargetDependency */,\n\t\t\t\t35BFC111E69EF700B863CE9674B50A7A /* PBXTargetDependency */,\n\t\t\t\t89FAF2292B0B577B32C07291FF41EC3D /* PBXTargetDependency */,\n\t\t\t\t80EA3BB2571AE7264036A211FA77E312 /* PBXTargetDependency */,\n\t\t\t\t555AA89408382973C4AB5F51FA9CCA06 /* PBXTargetDependency */,\n\t\t\t\t88ECB54C2DC159A81364054DF452E759 /* PBXTargetDependency */,\n\t\t\t\t3F317B466311BFCE9B6D80B3F187515B /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-FabricImage\";\n\t\t\tproductName = \"React-FabricImage\";\n\t\t\tproductReference = 61A80F68AE163B384B7D7A9E76B6046C /* React-FabricImage */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\tB5E1D7706FCB7EC5FF39F8CDA49A5653 /* React-ImageManager */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 9DE30F4D4057127ECD1C4181A033108A /* Build configuration list for PBXNativeTarget \"React-ImageManager\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tAFF97CE34F12C061B4326B69AF5F636D /* Headers */,\n\t\t\t\tD7947EFE7F3FB4DC3C5D40A004FDCB6B /* Sources */,\n\t\t\t\tE6721EB4E54C19B70C3D2E41970D775A /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tDA0E7DC74C748518BFF8C294148EDAE8 /* PBXTargetDependency */,\n\t\t\t\t0A169625F636FE1C73F0208237690740 /* PBXTargetDependency */,\n\t\t\t\tEEE2BC18221D4FB58F26D95BA6FC69BA /* PBXTargetDependency */,\n\t\t\t\tD6064FA2E952381FD5566D4FE51ADCBE /* PBXTargetDependency */,\n\t\t\t\t00631E47E14621AE9402D0DF95F1ADA8 /* PBXTargetDependency */,\n\t\t\t\t2BB0BC14C7F66BE53EBE2D9821461C40 /* PBXTargetDependency */,\n\t\t\t\tA3BDD4A09B967B012B64ACA6D70CA378 /* PBXTargetDependency */,\n\t\t\t\t6F36D48DE22DB419560FFB24734570C7 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-ImageManager\";\n\t\t\tproductName = \"React-ImageManager\";\n\t\t\tproductReference = CEA45A2349847B8CEAC9ABF565A04BD0 /* React-ImageManager */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\tB69D68A280EC3E60655BD2C715ACB004 /* React-nativeconfig */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1C5DC16C5742A9680E69626CDBC9F65B /* Build configuration list for PBXNativeTarget \"React-nativeconfig\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t2ED4D754BD2CEF3183E1F52B93D27909 /* Headers */,\n\t\t\t\t02C020C26212A7A0116EEB8E197289A5 /* Sources */,\n\t\t\t\tF99F6C110F1AB91CEFC1511B3107B904 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = \"React-nativeconfig\";\n\t\t\tproductName = \"React-nativeconfig\";\n\t\t\tproductReference = 60D5A56E763D6E7C4FBE797565062EEA /* React-nativeconfig */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\tB6D5DD49633DFF0657B8C3F08EB3ABA9 /* ReactCommon */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 25D58DD7F531AAF078902F24BDB05BA5 /* Build configuration list for PBXNativeTarget \"ReactCommon\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t3DA53BE61AD2344C583DC7DE56DDE779 /* Headers */,\n\t\t\t\t6AEEE0DDA3DE93CC96C0825C9089FA44 /* Sources */,\n\t\t\t\t75122507248AC3D88667540F35C80F67 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t439BCAEF52C398210A874C1101A07BFA /* PBXTargetDependency */,\n\t\t\t\tDC14CDA2247EDD85F3EA1DDEF118E059 /* PBXTargetDependency */,\n\t\t\t\t76295D2365EE55165E1FD23E9D3A64C4 /* PBXTargetDependency */,\n\t\t\t\t23F0D83A18F9832E29B22D2DC676614A /* PBXTargetDependency */,\n\t\t\t\tFA042F3DFD66A81A0915835F4787ABAF /* PBXTargetDependency */,\n\t\t\t\t133D9E2D3816395D8F6B4051D4CE1EDC /* PBXTargetDependency */,\n\t\t\t\tF14DCBE464449F61D897CA3C769D6C93 /* PBXTargetDependency */,\n\t\t\t\tF85656E4964D16005F093C8BD55E4612 /* PBXTargetDependency */,\n\t\t\t\tF7269812A409325D81BBDB1626D42A5B /* PBXTargetDependency */,\n\t\t\t\tAE16BCB7B1F274AFC64E6CE1A73649DE /* PBXTargetDependency */,\n\t\t\t\t26A8AE3C7636B091780A815018FD8E52 /* PBXTargetDependency */,\n\t\t\t\tAE118212FA0D279BEBC9F02C20320565 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = ReactCommon;\n\t\t\tproductName = ReactCommon;\n\t\t\tproductReference = D5C775614AC76D44CECB6BE08B022F1F /* ReactCommon */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\tC022870923962EA3953D70B907A7F8A7 /* Pods-WatermelonTester */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = F6160CF29B028D7ECAD77007C47BE1C6 /* Build configuration list for PBXNativeTarget \"Pods-WatermelonTester\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t79B39A2A7F90A076B7453661C54FDD9D /* Headers */,\n\t\t\t\t1DD6D57E16507C6E7C6C0A35BC747A10 /* Sources */,\n\t\t\t\tADA95567AC41717C4D2DD30CB60CDA9A /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t97E7B6DE91BBF0ECDCAA43F61EF2CB2C /* PBXTargetDependency */,\n\t\t\t\t8750AD47ADC9B6FEDFC2A066D7BFFB17 /* PBXTargetDependency */,\n\t\t\t\t2C475FFF8B871DA92E808279F3D8E579 /* PBXTargetDependency */,\n\t\t\t\t2FCD30A1ABDFC43101DF702EF4EF07EC /* PBXTargetDependency */,\n\t\t\t\tB11620F0C0256DCD58AC236A8FB0BF9D /* PBXTargetDependency */,\n\t\t\t\tA254B74C24804FC2C8CB1B1A308C537C /* PBXTargetDependency */,\n\t\t\t\t4EE942AF84B6CB7CB8C71847672BB4F5 /* PBXTargetDependency */,\n\t\t\t\t14D203B01203E84A63E3011F1E3ABD41 /* PBXTargetDependency */,\n\t\t\t\t029FDFA394268EAD139F31F647DCC156 /* PBXTargetDependency */,\n\t\t\t\t8B08CEFAEA22CE15FF8ECBCB9B952604 /* PBXTargetDependency */,\n\t\t\t\tE5406C298236EDB8B77BE6D95F60EE6E /* PBXTargetDependency */,\n\t\t\t\t384CF580B6E142D4571D926B01454BF1 /* PBXTargetDependency */,\n\t\t\t\t52304F61679D1A20460ACD6B34295835 /* PBXTargetDependency */,\n\t\t\t\t33B57E9C7AC16F53D4F7C80E017CB984 /* PBXTargetDependency */,\n\t\t\t\t4201AC4E052E73C08CCD7D03D75ACCE5 /* PBXTargetDependency */,\n\t\t\t\t771EA905ACE8B9DF1691920849E25189 /* PBXTargetDependency */,\n\t\t\t\t482FC3D57FC8A7260A82042834555148 /* PBXTargetDependency */,\n\t\t\t\t9946E1AB867FFEFC550310A00E3C6D73 /* PBXTargetDependency */,\n\t\t\t\t42BB13633AE352DBC875CB2D02AA38A5 /* PBXTargetDependency */,\n\t\t\t\tC31A7FFCBECEE6969698A1F56E291707 /* PBXTargetDependency */,\n\t\t\t\tE39BA450DBC90AD38839CAC587ADA2E3 /* PBXTargetDependency */,\n\t\t\t\t9E50028CCFFBB53BD3CED93BCAA23462 /* PBXTargetDependency */,\n\t\t\t\tD50E0503B0649D4A32DEA23BFA42C61D /* PBXTargetDependency */,\n\t\t\t\tA6D31FE8EB6B2659595EE4D3E5B8CC0B /* PBXTargetDependency */,\n\t\t\t\t58965B069471A7CBBFC82ED0B15092E1 /* PBXTargetDependency */,\n\t\t\t\t99FAEE95F441DDC413069EB0FD2E0D6F /* PBXTargetDependency */,\n\t\t\t\tC12817B77A384929CC56F08535650439 /* PBXTargetDependency */,\n\t\t\t\t15511602B9CF0D9CAB1BFF716AC1577D /* PBXTargetDependency */,\n\t\t\t\t5A4319DC9F2607FF12627690E3F4C0A3 /* PBXTargetDependency */,\n\t\t\t\t7BB0EA4C6E68B67ED40E24ED427944CD /* PBXTargetDependency */,\n\t\t\t\t28678A28E3DF6FA2E1637A8D54923035 /* PBXTargetDependency */,\n\t\t\t\t28535D15D430AB27D78BED2C4E30A08E /* PBXTargetDependency */,\n\t\t\t\t19223623503FAA1FAF8E103C15438676 /* PBXTargetDependency */,\n\t\t\t\t5EA65B1FF742F6A080DAEDDDEA1C523E /* PBXTargetDependency */,\n\t\t\t\tBD276791FAA5FE2E186C8D9ABD614362 /* PBXTargetDependency */,\n\t\t\t\t9F7AA6257356748F3AC3589C372117C4 /* PBXTargetDependency */,\n\t\t\t\t4211045A5B6E798B2BF4A5B05D84257B /* PBXTargetDependency */,\n\t\t\t\t23E56A592552C6624E530ACD1C05CB3E /* PBXTargetDependency */,\n\t\t\t\tB3A68A22B6988E30A3FE9B295B5ECD18 /* PBXTargetDependency */,\n\t\t\t\t6B98ABBC42E97F407C486F83CFAF2DF4 /* PBXTargetDependency */,\n\t\t\t\t5416C4DCD990599B5C226AE2132B7ACA /* PBXTargetDependency */,\n\t\t\t\t9CA446479094667088F29B3DC4E12F7A /* PBXTargetDependency */,\n\t\t\t\t4D05AEF140EAF8B33F16E6D1A0607765 /* PBXTargetDependency */,\n\t\t\t\tBEB5941835F05376583ABAFE9FFCD30C /* PBXTargetDependency */,\n\t\t\t\t354F5ED9F8C15CF66B54AEA1152BE46E /* PBXTargetDependency */,\n\t\t\t\tE17833655FED386BC89BA3174ECD7B76 /* PBXTargetDependency */,\n\t\t\t\t67F8AA74EE543DC681366BE8419569F9 /* PBXTargetDependency */,\n\t\t\t\t6F68A67088985622F27AF591F2D44640 /* PBXTargetDependency */,\n\t\t\t\tE0CC9856A49E4B0C1F8060683656BF84 /* PBXTargetDependency */,\n\t\t\t\tC932986C08154C27C8B08FB09112E220 /* PBXTargetDependency */,\n\t\t\t\tECF7B124979853303D57F72C1816C3DE /* PBXTargetDependency */,\n\t\t\t\t7E4F5D0BEBE237442188BFED62916897 /* PBXTargetDependency */,\n\t\t\t\tC068FE076C49A4A30B2A1EDDE1FA06B7 /* PBXTargetDependency */,\n\t\t\t\t174B2196BBC1B8032462868D2D2D378A /* PBXTargetDependency */,\n\t\t\t\t3E675CEB9B0D066B74CC29783F888167 /* PBXTargetDependency */,\n\t\t\t\tCD005D8BB7E9E45730DD2FA1B03216F6 /* PBXTargetDependency */,\n\t\t\t\t467A1BDC735428282D5519F99F127894 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Pods-WatermelonTester\";\n\t\t\tproductName = \"Pods-WatermelonTester\";\n\t\t\tproductReference = D6A3CF2FDC9D571D60BAB0281B6FA1BD /* Pods-WatermelonTester */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\tC2B1B75CCC326124F29FE703CC59BFB7 /* React-RCTAppDelegate */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = BF3133F2BD1849B71229502EAFA6C771 /* Build configuration list for PBXNativeTarget \"React-RCTAppDelegate\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t6819AB1E5F52E6E756C996BB746F2016 /* Headers */,\n\t\t\t\t111FA950DF7AFACB090DFB45EE9171E2 /* Sources */,\n\t\t\t\t53C4D790BC130A50096231A17E5B83B6 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t0947843414EAF9A018C3EFF21E80AEE1 /* PBXTargetDependency */,\n\t\t\t\t2504A251E75872D0B920F87A736CA6E3 /* PBXTargetDependency */,\n\t\t\t\t9DC6B2339493349D425BEB578C7330E3 /* PBXTargetDependency */,\n\t\t\t\tCEFF80344602F76C95E6272C9240036C /* PBXTargetDependency */,\n\t\t\t\tE3B183453B2C859BF77E884025BB337B /* PBXTargetDependency */,\n\t\t\t\t6DDADE4A090D2486F1867CDFFFEC2BAE /* PBXTargetDependency */,\n\t\t\t\tE5E22178DC5D3A1B2EDEFFE3240FE5F5 /* PBXTargetDependency */,\n\t\t\t\t792C94CE5907970B3561385D49A084CB /* PBXTargetDependency */,\n\t\t\t\t02CCFE27A24A08DAADC1299A08147AF0 /* PBXTargetDependency */,\n\t\t\t\tB212680BD31F13D2F6279DBAD3A1E825 /* PBXTargetDependency */,\n\t\t\t\t1B6C878FFCE771AC50BC4961B0F87EE5 /* PBXTargetDependency */,\n\t\t\t\t3875578AD50898EE9D9B27FBEAAEA823 /* PBXTargetDependency */,\n\t\t\t\tE9C48BEA57BC9B4B9A176BA0823CEF2F /* PBXTargetDependency */,\n\t\t\t\t9A68278B027713D1161E945A25B9731E /* PBXTargetDependency */,\n\t\t\t\t3126B7E273693B27EB2B7FD50AA5BC17 /* PBXTargetDependency */,\n\t\t\t\tD1DB74BE38ADE6F876059D7CF8B09249 /* PBXTargetDependency */,\n\t\t\t\tB339E8D2195D5B0E12F1886B392070B9 /* PBXTargetDependency */,\n\t\t\t\tB84F02AF765914933817049A11982A2D /* PBXTargetDependency */,\n\t\t\t\t336B884A1B8C1FCCD9B9586A45B09D69 /* PBXTargetDependency */,\n\t\t\t\tE9AADA080FCC408EA94BBC9B3500DDAC /* PBXTargetDependency */,\n\t\t\t\t577FF61698C6B776BD1DDCEF805F0E08 /* PBXTargetDependency */,\n\t\t\t\tF4A8A11533BA5371EB5105103BFD9E90 /* PBXTargetDependency */,\n\t\t\t\tAFF83814306FEE2AB836E168DACED238 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-RCTAppDelegate\";\n\t\t\tproductName = \"React-RCTAppDelegate\";\n\t\t\tproductReference = 39D0105B481E5FB78C661496BD63B8A5 /* React-RCTAppDelegate */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\tC7F600C052808C7C987C26EC74B3A290 /* React-RuntimeCore */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 64F885119F50A3C56A0D08EA0B025C49 /* Build configuration list for PBXNativeTarget \"React-RuntimeCore\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t1F2D4CFFFC42880B1F612DCF5363A6DA /* Headers */,\n\t\t\t\t99D0414F490F294A46CABFA9F84F2C57 /* Sources */,\n\t\t\t\t917B37A67EC657DE7A1DB7AC71C9BA46 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tFE5A1DF1E4AAEB8FF1AAE875962EBFF4 /* PBXTargetDependency */,\n\t\t\t\tFD09F1B752681CA8CCC4A39FB3D55188 /* PBXTargetDependency */,\n\t\t\t\t1D43516102A3113894F7C492185A8246 /* PBXTargetDependency */,\n\t\t\t\t85C1E90FA3B4C4E24168826381CB9302 /* PBXTargetDependency */,\n\t\t\t\t397953EECD8A705AE1E95CA4A3B17F2F /* PBXTargetDependency */,\n\t\t\t\t12DA8B08C376D6BDB2C5EA653BDD2EC0 /* PBXTargetDependency */,\n\t\t\t\t8938CD6C0EA0ADBE192399759E9D2533 /* PBXTargetDependency */,\n\t\t\t\t78727E5B4250A9E09FD2B16BE2F71350 /* PBXTargetDependency */,\n\t\t\t\t900EE9B525D81318F7468BA33F615A63 /* PBXTargetDependency */,\n\t\t\t\t177E6FD6E10FEA6715CEF6E76277104F /* PBXTargetDependency */,\n\t\t\t\tA7BF697A5BE5F29B8EFC9A4547AE419C /* PBXTargetDependency */,\n\t\t\t\t828F9C83DE2F06F7C916628EA05F91B1 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-RuntimeCore\";\n\t\t\tproductName = \"React-RuntimeCore\";\n\t\t\tproductReference = D22EED118A762A7D7BC88A4ADBB7026E /* React-RuntimeCore */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\tD0DD0961119C95E188122B13F3BF4380 /* React-Core-RCTI18nStrings */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 35BDABAF8BA6C6EA1964325CDB079A1D /* Build configuration list for PBXNativeTarget \"React-Core-RCTI18nStrings\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t6E7F91AEE5AB822D742DD436C6F7CF22 /* Sources */,\n\t\t\t\t4484CB8C5EC3D4C457E3791F1EDA81A4 /* Frameworks */,\n\t\t\t\tC1767B4F3277AC5435966C323C95AB9C /* 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 = \"React-Core-RCTI18nStrings\";\n\t\t\tproductName = RCTI18nStrings;\n\t\t\tproductReference = E50E54D57E4CB3E0920119CF69AD9A2D /* React-Core-RCTI18nStrings */;\n\t\t\tproductType = \"com.apple.product-type.bundle\";\n\t\t};\n\t\tD0EFEFB685D97280256C559792236873 /* glog */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 7060A6016509840F2216B4B586CDB808 /* Build configuration list for PBXNativeTarget \"glog\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD288DB9B0456E0CC4075C19E15EC2EF3 /* Headers */,\n\t\t\t\t8504E2D60624339B89BEA2A6F41621A2 /* Sources */,\n\t\t\t\t18D45363A5C31117A24DD45090EE585D /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = glog;\n\t\t\tproductName = glog;\n\t\t\tproductReference = 3CA7A9404CCDD6BA22C97F8348CE3209 /* glog */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\tD20469A9A1E5CFB26045EAEBE3F88E5E /* RCTTypeSafety */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = E78E1B9C796F493267390DA3E9932266 /* Build configuration list for PBXNativeTarget \"RCTTypeSafety\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tDAE502B98C15919EDA8AE839E45EF463 /* Headers */,\n\t\t\t\t46252E81ED1C361CFC4C994E6EE633FF /* Sources */,\n\t\t\t\t7B00CA1FF92C8EE49D682945D65F7919 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tEF402A140375BB13E5C26D861193A401 /* PBXTargetDependency */,\n\t\t\t\t290A5A9C4C2B466906134251C445AE62 /* PBXTargetDependency */,\n\t\t\t\tBEB67114B4EC87924688EEBB8C438FD2 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = RCTTypeSafety;\n\t\t\tproductName = RCTTypeSafety;\n\t\t\tproductReference = F958876A082BF810B342435CE3FB5AF6 /* RCTTypeSafety */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\tDA0709CAAD589C6E7963495210438021 /* React-jsiexecutor */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D343A1B642437DBEA4FA80B9A4094074 /* Build configuration list for PBXNativeTarget \"React-jsiexecutor\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tB848B2694FF142FE99FE00869735ED10 /* Headers */,\n\t\t\t\t5CAEEB9F76D13B5B53752432675816A2 /* Sources */,\n\t\t\t\t976D53391EFB92F67FDDDF48FC18C587 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tE0F2CB12CF095E00B9403D3AE141BC5C /* PBXTargetDependency */,\n\t\t\t\tA73A9A2AC3DD393BE94B96FC0811F52F /* PBXTargetDependency */,\n\t\t\t\t7F11632F8C4B59DD3BB4051C89DBAE53 /* PBXTargetDependency */,\n\t\t\t\t236E756288374E4AE29AC51EBEE02A84 /* PBXTargetDependency */,\n\t\t\t\t67BBDDCEA70BEA58B3E3C83B3C47033D /* PBXTargetDependency */,\n\t\t\t\t64A12C5236A6B897B3DBB8EBDE905E7B /* PBXTargetDependency */,\n\t\t\t\t4920A5B0535890B1E7D1BF643FDDC3FE /* PBXTargetDependency */,\n\t\t\t\tB5E4CB125000A02D7C47D5BC8B2235E2 /* PBXTargetDependency */,\n\t\t\t\t10A2F45C3B581D6E8F38A104C850F7D7 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-jsiexecutor\";\n\t\t\tproductName = \"React-jsiexecutor\";\n\t\t\tproductReference = F2E7C88DFCD460A4B46B913ADEB8A641 /* React-jsiexecutor */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\tDBD2D83E10F8B7D3F4E0E34E6A9FCFA6 /* React-RCTText */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 772C322C9EE72B896EB7A93983C1ABFF /* Build configuration list for PBXNativeTarget \"React-RCTText\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t3923F79A6C43DC54B393E6A014C97F3D /* Headers */,\n\t\t\t\t5CAAFADB20B88A58D6830F22D247F99A /* Sources */,\n\t\t\t\tD532CB49CB8E79A6C3551005CB82786E /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t238930CCE2A68E41AED023158D9FD867 /* PBXTargetDependency */,\n\t\t\t\t0FE5A051E0A746490490C86E7859144D /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-RCTText\";\n\t\t\tproductName = \"React-RCTText\";\n\t\t\tproductReference = E6A16705C69FC7DE11C2469A4A0F8358 /* React-RCTText */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\tE16E206437995280D349D4B67695C894 /* React-CoreModules */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 2023F194410EB76C507DE4868A948CDE /* Build configuration list for PBXNativeTarget \"React-CoreModules\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t131B4DFB7582473308782B58746A7B52 /* Headers */,\n\t\t\t\t9DF643F20AEF406F2B1272098FD69149 /* Sources */,\n\t\t\t\t401DCA93590F154762BC1D9585CB8A7D /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t48939DA609333D216671B3454FF64B92 /* PBXTargetDependency */,\n\t\t\t\t8A01144C4811FC96968CD28E8FC601CF /* PBXTargetDependency */,\n\t\t\t\t37F81AC9EC861E71FEBA2A4389C6CF3D /* PBXTargetDependency */,\n\t\t\t\t3D04E6CC3760CE3501A287C5002BA99A /* PBXTargetDependency */,\n\t\t\t\tFFA7F1EF8FAC3A0952EEFDE38DE91E5A /* PBXTargetDependency */,\n\t\t\t\t350AB0B4FB6E2D72BF570CC9B3DED953 /* PBXTargetDependency */,\n\t\t\t\t83D931AC8A3A8844EA71D031AEFEC9F6 /* PBXTargetDependency */,\n\t\t\t\t13D61D46C1B23D15B361E0C6A887C141 /* PBXTargetDependency */,\n\t\t\t\t80D81BC05DF9946301984E4F3DC959D8 /* PBXTargetDependency */,\n\t\t\t\tC4DD06F137AEDD5B0BB9846AAB2BD11E /* PBXTargetDependency */,\n\t\t\t\t871D865CD2E0FD7ECE21C10E35270274 /* PBXTargetDependency */,\n\t\t\t\tD0C97A79D6B5E0234424B706959B344C /* PBXTargetDependency */,\n\t\t\t\t070075A664C526AA369CFF1C8F480565 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-CoreModules\";\n\t\t\tproductName = \"React-CoreModules\";\n\t\t\tproductReference = 6771D231F4C8C5976470A369C474B32E /* React-CoreModules */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\tEC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 9F2C5C7A82B8C5C2581EDD99BF908E3B /* Build configuration list for PBXNativeTarget \"RCT-Folly\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t91B596376A967609FA5D360BDD3E4367 /* Headers */,\n\t\t\t\tB85C4FF0078BD4F65D0B97C954FCA723 /* Sources */,\n\t\t\t\t82C4242EC83DE2399BE5CCCAD8D44002 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t509DFA417A9F6FC28C5DF54680ED83BD /* PBXTargetDependency */,\n\t\t\t\t8589C20D4651BCDCFF98418A1C87A7EF /* PBXTargetDependency */,\n\t\t\t\tD64FBFB3001F5CD6E0240571ADCE2DD8 /* PBXTargetDependency */,\n\t\t\t\t9CB7426A4D28082958291C03049EB5C0 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"RCT-Folly\";\n\t\t\tproductName = \"RCT-Folly\";\n\t\t\tproductReference = 1936453FF2A7E3A13063C4917C4D5598 /* RCT-Folly */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\tEF554722D0D580AC702A6DAB8FDBB2B5 /* WatermelonDB */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 064B0AD934FAEAE90C5B19183E95B267 /* Build configuration list for PBXNativeTarget \"WatermelonDB\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tDC06E85B125BB6F20AEA30AA6C6A8494 /* Headers */,\n\t\t\t\t83D9E4EBA58D2EF02EA7856C60C2620C /* Sources */,\n\t\t\t\t953D5F4F2F49FBAA1C7494F06276AA72 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t3A25922BCB02D7620B0B4992ACEB0B93 /* PBXTargetDependency */,\n\t\t\t\tDE4836880D0968B12D6E0A473EF2A047 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = WatermelonDB;\n\t\t\tproductName = WatermelonDB;\n\t\t\tproductReference = B1BC0D650AD4A6CB2A62DB5D7C94556A /* WatermelonDB */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\tF1E2583679398CB5F4D2B3272E9B198F /* React-perflogger */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = FB6AD053F80544ABF6568EAFF5394DB4 /* Build configuration list for PBXNativeTarget \"React-perflogger\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t8656D5B4FA65E6F049F59F1441FCCF44 /* Headers */,\n\t\t\t\t2F726D5C593EA13536D41362B9300877 /* Sources */,\n\t\t\t\tC7E0A0DF29622DB6BD97632058301AC7 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = \"React-perflogger\";\n\t\t\tproductName = \"React-perflogger\";\n\t\t\tproductReference = 666E72807891C591E025A75410CD2A26 /* React-perflogger */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\tF7D033C4C128EECAA020990641FA985F /* React-jsinspector */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1C8845324AC124F676276B99D738106A /* Build configuration list for PBXNativeTarget \"React-jsinspector\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t5EB5B5D0D6BFF8615D4D1DF5D0982F1F /* Headers */,\n\t\t\t\tBB8C3A27E7A75C4EA178CD713C13DB06 /* Sources */,\n\t\t\t\tD94BECEDC7E7186443633477224FEDF3 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t5B9BFD44259542BF0998056E0C123C8E /* PBXTargetDependency */,\n\t\t\t\t89236A9ED15BD42914C7EE0DB075FF13 /* PBXTargetDependency */,\n\t\t\t\t74785FAB64DB2E3C10C989A45A14C219 /* PBXTargetDependency */,\n\t\t\t\t7FDDF5770FADD8DEA8C31B0DCE95FFFC /* PBXTargetDependency */,\n\t\t\t\t12A0E63E2D9A8A38283E1A96C9BD9771 /* PBXTargetDependency */,\n\t\t\t\t492F47EC7FDE085C758C479D46DF1F63 /* PBXTargetDependency */,\n\t\t\t\tDA18253AF45CCA4B3F48F3534E2E39B8 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-jsinspector\";\n\t\t\tproductName = \"React-jsinspector\";\n\t\t\tproductReference = 2577F299FCB0A19824FE989BE77B8E8F /* React-jsinspector */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\tFA877ADC442CB19CF61793D234C8B131 /* React-jsi */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 4FB4FCC7287CF5184D152FD0437A63C6 /* Build configuration list for PBXNativeTarget \"React-jsi\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t74E7814F4B2665A4B71520D1FD570E65 /* Headers */,\n\t\t\t\t319B6DC7B521A04A3FAE5610EE495267 /* Sources */,\n\t\t\t\t32445F0B48FFAD562A3D7EFA997FE471 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t4AA6C6F6763192CF4FD121DC066B3416 /* PBXTargetDependency */,\n\t\t\t\t0BEDBF63C3E4E541C8B0B6D741C05866 /* PBXTargetDependency */,\n\t\t\t\t0D6352E2424F6FC499B3B35657C6AD1B /* PBXTargetDependency */,\n\t\t\t\t03760D1433D73CEC24F9E58CB14B1F18 /* PBXTargetDependency */,\n\t\t\t\t9C411B2CC3C4A28BA72E9017965B8DB1 /* PBXTargetDependency */,\n\t\t\t\t6760651ADC5EFA51B68D248ADF79D997 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"React-jsi\";\n\t\t\tproductName = \"React-jsi\";\n\t\t\tproductReference = D9F334F2E90E3EE462FC4192AF5C03BD /* React-jsi */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tBFDFE7DC352907FC980B868725387E98 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 1500;\n\t\t\t\tLastUpgradeCheck = 1500;\n\t\t\t};\n\t\t\tbuildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject \"Pods\" */;\n\t\t\tcompatibilityVersion = \"Xcode 10.0\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\tBase,\n\t\t\t\tar,\n\t\t\t\tcs,\n\t\t\t\tda,\n\t\t\t\tde,\n\t\t\t\tel,\n\t\t\t\ten,\n\t\t\t\t\"en-GB\",\n\t\t\t\tes,\n\t\t\t\t\"es-ES\",\n\t\t\t\tfi,\n\t\t\t\tfr,\n\t\t\t\the,\n\t\t\t\thi,\n\t\t\t\thr,\n\t\t\t\thu,\n\t\t\t\tid,\n\t\t\t\tit,\n\t\t\t\tja,\n\t\t\t\tko,\n\t\t\t\tms,\n\t\t\t\tnb,\n\t\t\t\tnl,\n\t\t\t\tpl,\n\t\t\t\tpt,\n\t\t\t\t\"pt-PT\",\n\t\t\t\tro,\n\t\t\t\tru,\n\t\t\t\tsk,\n\t\t\t\tsv,\n\t\t\t\tth,\n\t\t\t\ttr,\n\t\t\t\tuk,\n\t\t\t\tvi,\n\t\t\t\t\"zh-Hans\",\n\t\t\t\t\"zh-Hant\",\n\t\t\t\t\"zh-Hant-HK\",\n\t\t\t\tzu,\n\t\t\t);\n\t\t\tmainGroup = CF1408CF629C7361332E53B88F7BD30C;\n\t\t\tminimizedProjectReferenceProxies = 0;\n\t\t\tproductRefGroup = 6ED0E8A627772310985098275F934F04 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tEFEA55B1B776B6EB4B16F363BFE64D1A /* boost */,\n\t\t\t\t2AB2EF542954AB1C999E03BFEF8DE806 /* DoubleConversion */,\n\t\t\t\t8CC4EAA817AA86310D1900F1DAB3580F /* FBLazyVector */,\n\t\t\t\t02B79DFED924FA19CA90EC69614733E1 /* fmt */,\n\t\t\t\tD0EFEFB685D97280256C559792236873 /* glog */,\n\t\t\t\t985FEA01F314F3C00F0C1E1181E6C4A5 /* hermes-engine */,\n\t\t\t\tC022870923962EA3953D70B907A7F8A7 /* Pods-WatermelonTester */,\n\t\t\t\t779DAB46A58E8051C7D2E5A8782C79D1 /* Pods-WatermelonTester-WatermelonTesterTests */,\n\t\t\t\tEC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */,\n\t\t\t\t5211B5AB7B81060AA8E78614DD75D3AB /* RCTDeprecation */,\n\t\t\t\tE7E7CE52C8C68B17224FF8C262D80ABF /* RCTRequired */,\n\t\t\t\tD20469A9A1E5CFB26045EAEBE3F88E5E /* RCTTypeSafety */,\n\t\t\t\t1BEE828C124E6416179B904A9F66D794 /* React */,\n\t\t\t\t2681CB7EF647E61F4F9A43029C235607 /* React-callinvoker */,\n\t\t\t\t66B8F5758E6F90E16807A85C003CE61F /* React-Codegen */,\n\t\t\t\t7ACAA9BE580DD31A5CB9D97C45D9492D /* React-Core */,\n\t\t\t\tD0DD0961119C95E188122B13F3BF4380 /* React-Core-RCTI18nStrings */,\n\t\t\t\tE16E206437995280D349D4B67695C894 /* React-CoreModules */,\n\t\t\t\t463F41A7E8B252F8AC5024DA1F4AF6DA /* React-cxxreact */,\n\t\t\t\t0C050E11C4409D3BFAE9CC219C4D6195 /* React-debug */,\n\t\t\t\t50DBAF155FAFB994E067BA8820221EDF /* React-Fabric */,\n\t\t\t\tA5E93F38E96B3A37575BEC88AD69AE85 /* React-FabricImage */,\n\t\t\t\t28CE447E6F9C5F0EECC0CDD607D06A24 /* React-featureflags */,\n\t\t\t\t4BDD270EACFE5730793AEF0B9BCCBA31 /* React-graphics */,\n\t\t\t\t20F066A71CEA5EECC7463413442F2B77 /* React-hermes */,\n\t\t\t\tB5E1D7706FCB7EC5FF39F8CDA49A5653 /* React-ImageManager */,\n\t\t\t\t27F648AD269E94404D6A7547C4F9C683 /* React-jserrorhandler */,\n\t\t\t\tFA877ADC442CB19CF61793D234C8B131 /* React-jsi */,\n\t\t\t\tDA0709CAAD589C6E7963495210438021 /* React-jsiexecutor */,\n\t\t\t\tF7D033C4C128EECAA020990641FA985F /* React-jsinspector */,\n\t\t\t\t718331030FAA6D88E74D4B2240BB4AC8 /* React-jsitracing */,\n\t\t\t\t083B602EA19B4AD50EC53C0602F29A7D /* React-logger */,\n\t\t\t\t091003D98BDA80B01B9E35CADE3947F0 /* React-Mapbuffer */,\n\t\t\t\tB69D68A280EC3E60655BD2C715ACB004 /* React-nativeconfig */,\n\t\t\t\t5807741745EB757C97C09F2D56726BE0 /* React-NativeModulesApple */,\n\t\t\t\tF1E2583679398CB5F4D2B3272E9B198F /* React-perflogger */,\n\t\t\t\t11989A5E568B3B69655EE0C13DCDA3F9 /* React-RCTActionSheet */,\n\t\t\t\t938CCE22F6C4094B3FB6CF1478579E4B /* React-RCTAnimation */,\n\t\t\t\tC2B1B75CCC326124F29FE703CC59BFB7 /* React-RCTAppDelegate */,\n\t\t\t\t95D98F901D07557EF7CA38D3F03832C5 /* React-RCTBlob */,\n\t\t\t\t8DED5282246ABFC24F4460D3066C84A0 /* React-RCTFabric */,\n\t\t\t\t4F265533AAB7C8985856EC78A33164BB /* React-RCTImage */,\n\t\t\t\t6FE9147F8AAA4DE676C190F680F47AE2 /* React-RCTLinking */,\n\t\t\t\t651511D7DA7F07F9FC9AA40A2E86270D /* React-RCTNetwork */,\n\t\t\t\t680299219D3A48D42A648AF6706275A9 /* React-RCTSettings */,\n\t\t\t\tDBD2D83E10F8B7D3F4E0E34E6A9FCFA6 /* React-RCTText */,\n\t\t\t\t53D121F9F9BB0F8AC1C94A12C5A8572F /* React-RCTVibration */,\n\t\t\t\t9F96BF8B7FC28F5CF47242D7A73B11DA /* React-rendererdebug */,\n\t\t\t\tB41E34C6B259B9994C513BE178912491 /* React-rncore */,\n\t\t\t\t91D38B18A4E42B1622B83F450706C2F5 /* React-RuntimeApple */,\n\t\t\t\tC7F600C052808C7C987C26EC74B3A290 /* React-RuntimeCore */,\n\t\t\t\t54EB12219122432FA744088BC5A680D2 /* React-runtimeexecutor */,\n\t\t\t\t0EF07AE1AD53436E8D2B9B0086EA0163 /* React-RuntimeHermes */,\n\t\t\t\t52C3F83DB80E5D527EDA54FA1DE5470A /* React-runtimescheduler */,\n\t\t\t\t30621D5A9764AC0BD9D02E87B2EA6665 /* React-utils */,\n\t\t\t\tB6D5DD49633DFF0657B8C3F08EB3ABA9 /* ReactCommon */,\n\t\t\t\t45B79B0C60C74716DCD2AD7BE782A719 /* simdjson */,\n\t\t\t\t1948D0B63D2CF6A48E18B0B292BC6091 /* SocketRocket */,\n\t\t\t\tEF554722D0D580AC702A6DAB8FDBB2B5 /* WatermelonDB */,\n\t\t\t\t2B25F90D819B9ADF2AF2D8733A890333 /* Yoga */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\tC1767B4F3277AC5435966C323C95AB9C /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tBB1ED891A520B5065A5DED3E37ACA7F0 /* ar.lproj in Resources */,\n\t\t\t\t0642403BB181EA7478210C0089DEF508 /* cs.lproj in Resources */,\n\t\t\t\t9A3A4D10C9D413158BC724A194B154E9 /* da.lproj in Resources */,\n\t\t\t\t1D65FAC0B4EB638F3549891915706680 /* de.lproj in Resources */,\n\t\t\t\tD0521A5D06CA09FFB9EB9EDB701566C0 /* el.lproj in Resources */,\n\t\t\t\t362390F52589F7931C2C6851393C3AF9 /* en.lproj in Resources */,\n\t\t\t\tAE0B4659152C1B6CE26DA56940540CCE /* en-GB.lproj in Resources */,\n\t\t\t\tFE877895E55021546425F770C014D9F8 /* es.lproj in Resources */,\n\t\t\t\tA93FB3B91CE02A0B704D2A989C363E9C /* es-ES.lproj in Resources */,\n\t\t\t\tA61B1E1D334158CF2ED3116CC21C3F33 /* fi.lproj in Resources */,\n\t\t\t\tDBAB9A747E25B02895BCC957ADD16902 /* fr.lproj in Resources */,\n\t\t\t\tD21B7BB8606BF188823CB4024222D8C7 /* he.lproj in Resources */,\n\t\t\t\t7604DFAE9BCFB8918643A00E43A0E326 /* hi.lproj in Resources */,\n\t\t\t\t8CB06AE99C65D0CB47B460E9715D2447 /* hr.lproj in Resources */,\n\t\t\t\t4C3D5B6DE1DFE5EC71F9EDAB80BBA2CA /* hu.lproj in Resources */,\n\t\t\t\tD473DD75F33B177EDD13C68DE02D058B /* id.lproj in Resources */,\n\t\t\t\t7DFF6AA49AB89B1D15BDD142FB5C30E9 /* it.lproj in Resources */,\n\t\t\t\tD59713A7BC16D46A1359CFB93E730D3C /* ja.lproj in Resources */,\n\t\t\t\tF9E6052152BB44E91B62957A180638AB /* ko.lproj in Resources */,\n\t\t\t\t4D7E5F546791BFFE2D74F66BE63512DE /* ms.lproj in Resources */,\n\t\t\t\tB21738D0170767FAB849DD08A62EBA80 /* nb.lproj in Resources */,\n\t\t\t\tF6A7E8738C0E504937CBF3B8B193D026 /* nl.lproj in Resources */,\n\t\t\t\t87818F7E72E1C8E3028F461ABBCE56E3 /* pl.lproj in Resources */,\n\t\t\t\t491734DC36D5DA5B7188251B61658CA3 /* pt.lproj in Resources */,\n\t\t\t\tF0BAC6D2EB66EF5AF8CB77C031595704 /* pt-PT.lproj in Resources */,\n\t\t\t\t61C9E79CA790A9EFE30E8C8D0E2B8ACE /* ro.lproj in Resources */,\n\t\t\t\tE1DB2693E8C7C7187DA8BA2D5C7B2F11 /* ru.lproj in Resources */,\n\t\t\t\t9C213142A14C7405ADC9288D76B1290C /* sk.lproj in Resources */,\n\t\t\t\t1B502CFAD551B4D4392A0BADFBBEF25B /* sv.lproj in Resources */,\n\t\t\t\t9D28E53E71CE7B1B576FC946E8E18383 /* th.lproj in Resources */,\n\t\t\t\t6035F2E5BEC7F02E3206FBCBACE06A55 /* tr.lproj in Resources */,\n\t\t\t\t7DAB642F45A486822F115BE0920FB465 /* uk.lproj in Resources */,\n\t\t\t\t0333BBF0A9EA7C3B7E05BD48E0D67A82 /* vi.lproj in Resources */,\n\t\t\t\tC96741C72BE65B64A4AEAB8481F58285 /* zh-Hans.lproj in Resources */,\n\t\t\t\t950BAD90B56D30A54EBF43AF215D0C8D /* zh-Hant.lproj in Resources */,\n\t\t\t\t2C9A212BEA5B7429E6A978943ED1DAAF /* zh-Hant-HK.lproj in Resources */,\n\t\t\t\t8D8BBF7A84CBAE7584B4D446F86A2086 /* zu.lproj in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t0E7DA29FC4DD1B4A582F0DBB4907FDD3 /* [CP-User] Generate Specs */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP-User] Generate Specs\";\n\t\t\toutputPaths = (\n\t\t\t\t\"${DERIVED_FILE_DIR}/react-codegen.log\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"pushd \\\"$PODS_ROOT/../\\\" > /dev/null\\nRCT_SCRIPT_POD_INSTALLATION_ROOT=$(pwd)\\npopd >/dev/null\\n\\nexport RCT_SCRIPT_RN_DIR=$RCT_SCRIPT_POD_INSTALLATION_ROOT/../../node_modules/react-native\\nexport RCT_SCRIPT_APP_PATH=$RCT_SCRIPT_POD_INSTALLATION_ROOT/../..\\nexport RCT_SCRIPT_OUTPUT_DIR=$RCT_SCRIPT_POD_INSTALLATION_ROOT\\nexport RCT_SCRIPT_TYPE=withCodegenDiscovery\\n\\nSCRIPT_PHASES_SCRIPT=\\\"$RCT_SCRIPT_RN_DIR/scripts/react_native_pods_utils/script_phases.sh\\\"\\nWITH_ENVIRONMENT=\\\"$RCT_SCRIPT_RN_DIR/scripts/xcode/with-environment.sh\\\"\\n/bin/sh -c \\\"$WITH_ENVIRONMENT $SCRIPT_PHASES_SCRIPT\\\"\\n\";\n\t\t};\n\t\t8F6E4EC43155610A21F16E054B4EAFF3 /* [CP] Copy XCFrameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/hermes-engine/hermes-engine-xcframeworks-input-files.xcfilelist\",\n\t\t\t);\n\t\t\tname = \"[CP] Copy XCFrameworks\";\n\t\t\toutputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/hermes-engine/hermes-engine-xcframeworks-output-files.xcfilelist\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/hermes-engine/hermes-engine-xcframeworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tB89680891A24601AFD2489230D18F55C /* [CP-User] [Hermes] Replace Hermes for the right configuration, if needed */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tname = \"[CP-User] [Hermes] Replace Hermes for the right configuration, if needed\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"        . \\\"$REACT_NATIVE_PATH/scripts/xcode/with-environment.sh\\\"\\n\\n        CONFIG=\\\"Release\\\"\\n        if echo $GCC_PREPROCESSOR_DEFINITIONS | grep -q \\\"DEBUG=1\\\"; then\\n          CONFIG=\\\"Debug\\\"\\n        fi\\n\\n        \\\"$NODE_BINARY\\\" \\\"$REACT_NATIVE_PATH/sdks/hermes-engine/utils/replace_hermes_version.js\\\" -c \\\"$CONFIG\\\" -r \\\"0.74.6\\\" -p \\\"$PODS_ROOT\\\"\\n\";\n\t\t};\n\t\tEA5775F352F02CC6B079C87333EA9092 /* [CP-User] [RN]Check rncore */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tname = \"[CP-User] [RN]Check rncore\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"echo \\\"Checking whether Codegen has run...\\\"\\nrncorePath=\\\"$REACT_NATIVE_PATH/ReactCommon/react/renderer/components/rncore\\\"\\n\\nif [[ ! -d \\\"$rncorePath\\\" ]]; then\\n  echo 'error: Codegen did not run properly in your project. Please reinstall cocoapods with `bundle exec pod install`.'\\n  exit 1\\nfi\\n\";\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t02C020C26212A7A0116EEB8E197289A5 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t39CDAA971F3E8A4A08BD53F982886AAD /* React-nativeconfig-dummy.m in Sources */,\n\t\t\t\t956D860AD7C9DC24AA722E80D15E4D6B /* ReactNativeConfig.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t0FDD676C9CF447C0E5C23ADF6F292A6E /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t4D4222A8B9F471CE399280E884966659 /* CxxNativeModule.cpp in Sources */,\n\t\t\t\t3EBA21C27903E9515E2B509B4671A407 /* Instance.cpp in Sources */,\n\t\t\t\t59284F057F926EC5DA3ECD28FDEAAD96 /* JSBigString.cpp in Sources */,\n\t\t\t\t09946EAA53E8CE2FFF8939A7012AABD1 /* JSBundleType.cpp in Sources */,\n\t\t\t\t0427F0349638DCD376F42A586CB060E0 /* JSExecutor.cpp in Sources */,\n\t\t\t\t869C6BC97E0783E17A7A32A4CB9C444D /* JSIndexedRAMBundle.cpp in Sources */,\n\t\t\t\t67745EF2FCD4C0DAFE55F235B9511877 /* MethodCall.cpp in Sources */,\n\t\t\t\t01474AE21855DC963FC28E1C31BEB84A /* ModuleRegistry.cpp in Sources */,\n\t\t\t\tADFE734C91C7A833AE41533BDB4B479C /* NativeToJsBridge.cpp in Sources */,\n\t\t\t\t470C6E55CF2E2DCD6E21DADFFA475E9B /* RAMBundleRegistry.cpp in Sources */,\n\t\t\t\tEAA499218101102AB5F773BF2B50EF87 /* React-cxxreact-dummy.m in Sources */,\n\t\t\t\tA2F8AC56D5A31FAA851EA309CAB094CF /* ReactMarker.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t111FA950DF7AFACB090DFB45EE9171E2 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t27928D50D910F1E6A27AF06B64529EF2 /* RCTAppDelegate.mm in Sources */,\n\t\t\t\t7B3EFF70B6BC846F386E9B04B567C87E /* RCTAppSetupUtils.mm in Sources */,\n\t\t\t\t0C173B954EAFE33EB0E10A7430B53888 /* RCTRootViewFactory.mm in Sources */,\n\t\t\t\t2ADAF88BF204658BFDA47A99DB5763B2 /* React-RCTAppDelegate-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1668C4E93B3B7D623F5F0B12FFC8EDF1 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA987774A31FA59F2A5D311C15EEF222D /* fmt-dummy.m in Sources */,\n\t\t\t\tE339752BDF80501597F6B9FA4BDF020B /* format.cc in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1AD76BC80FB1362DE916B4C4FDA832E9 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t63D7C1B01C0D564F59C944A6CD64462E /* RCTSettingsManager.mm in Sources */,\n\t\t\t\tA32D15308F27ECE2391DA0E67E184553 /* RCTSettingsPlugins.mm in Sources */,\n\t\t\t\t012219210290351B09E3228F57549796 /* React-RCTSettings-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1B85B6C778B063059A7996C2729D726F /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tE8F692582B234462685FB7967E14E8F9 /* ConnectionDemux.cpp in Sources */,\n\t\t\t\t48BBB73DC78C42C1BD39CC241869299B /* HermesExecutorFactory.cpp in Sources */,\n\t\t\t\tD0AABA0B25ED1795CF662870AD7F0EC9 /* HermesRuntimeAgentDelegate.cpp in Sources */,\n\t\t\t\tD115801DD61F22629F88BCF5BCBA5E36 /* React-hermes-dummy.m in Sources */,\n\t\t\t\t6C1392E4CE9C70E81D25ABF34EE9631D /* Registration.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1DD6D57E16507C6E7C6C0A35BC747A10 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t614A74B5BD426630D339F25D429EA463 /* Pods-WatermelonTester-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t1DF1B328A32BB8F8D107024AD45C182B /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t5C74608D4E02F4D4AF0009F7622CECFC /* simdjson.cpp in Sources */,\n\t\t\t\tE0E7AA9F8861860CFB84E20C9489E5DB /* simdjson-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t2F726D5C593EA13536D41362B9300877 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t4BAC222710598CFEF8986092D6631F49 /* BridgeNativeModulePerfLogger.cpp in Sources */,\n\t\t\t\t7232F323AB9767475B711CD115277385 /* React-perflogger-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t319B6DC7B521A04A3FAE5610EE495267 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t4C28C822685226ADDBE66EBDFDD58EB8 /* JSIDynamic.cpp in Sources */,\n\t\t\t\t875518F410236D322133384F93B4EE9B /* React-jsi-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t39260D04C5355C99327140553873B867 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9EA31CC73780B94F35D97F87C4FB001C /* NSDataBigString.mm in Sources */,\n\t\t\t\tA99DAE5BCBF57C5FF1C418A9CE856DAA /* RCTActivityIndicatorView.m in Sources */,\n\t\t\t\t084B7DAB689734EEBB98408DD6E7F12B /* RCTActivityIndicatorViewManager.m in Sources */,\n\t\t\t\t49991F7761C3338772084CD9A784B437 /* RCTAssert.m in Sources */,\n\t\t\t\t6EA7026AD8D1F370E0A660F1A4FF7A07 /* RCTBorderDrawing.m in Sources */,\n\t\t\t\tBB290E6063D0D517A3C83B1DDA4BF000 /* RCTBridge.mm in Sources */,\n\t\t\t\t64F832664A431E454316E1AC03746C0D /* RCTBridgeConstants.m in Sources */,\n\t\t\t\tDC6986A6AC95089763A68D148457F484 /* RCTBridgeModuleDecorator.m in Sources */,\n\t\t\t\tD029A199B240E746CD4A89367F3888FE /* RCTBridgeProxy.mm in Sources */,\n\t\t\t\t690D37470240502DB939F1A3D7206454 /* RCTBundleManager.m in Sources */,\n\t\t\t\t72BC0086E48E7F1B9CD8230A0B5D461E /* RCTBundleURLProvider.mm in Sources */,\n\t\t\t\tED158AE6B16238DA0174AC1F4CC24510 /* RCTCallableJSModules.m in Sources */,\n\t\t\t\t11DF589DF2952480FDAADA363B846A8C /* RCTComponentData.m in Sources */,\n\t\t\t\t82422290D96A134494D0B160434C8A8F /* RCTComponentEvent.m in Sources */,\n\t\t\t\tB3D6AA3293A885840D24CA060CC25456 /* RCTConstants.m in Sources */,\n\t\t\t\tBA2CD9347081FBACC0B91878B7B5E2B6 /* RCTConvert.mm in Sources */,\n\t\t\t\t83CB29BA147169FE17245CC493A65214 /* RCTConvert+CoreLocation.m in Sources */,\n\t\t\t\t47828A13815F5A9030308D806C348B57 /* RCTConvert+Transform.m in Sources */,\n\t\t\t\tEA2E47AC9688F7DBDE75EC611BC68334 /* RCTCxxBridge.mm in Sources */,\n\t\t\t\tAEE9B28ADA2F2437AA2DF260FEA3B558 /* RCTCxxConvert.m in Sources */,\n\t\t\t\t6CFEA0E6658C47D9BF410F09BEEF98CE /* RCTCxxInspectorPackagerConnection.mm in Sources */,\n\t\t\t\t981417644439C651547814EC3FEA4928 /* RCTCxxInspectorPackagerConnectionDelegate.mm in Sources */,\n\t\t\t\t77E6BC3FDEABA7B418C12B3E6F73A961 /* RCTCxxInspectorWebSocketAdapter.mm in Sources */,\n\t\t\t\tEE9B9C393116AD263A9A4FAF44923FCC /* RCTCxxMethod.mm in Sources */,\n\t\t\t\tF369A2BE769607CE5EBCEEAF694E2DCC /* RCTCxxModule.mm in Sources */,\n\t\t\t\t0E25FDA99228EB53935D4EFF113CEA15 /* RCTCxxUtils.mm in Sources */,\n\t\t\t\t42DF6A9D9D4AD244EA20DFAE81933530 /* RCTDebuggingOverlay.m in Sources */,\n\t\t\t\tAD0E3792C51B0E55F49C3558785D6863 /* RCTDebuggingOverlayManager.m in Sources */,\n\t\t\t\tD8D7FDEC5BB612E2631EE13379B9CF71 /* RCTDefaultCxxLogFunction.mm in Sources */,\n\t\t\t\t372A6DE5D3A0C8A394F94769C9DDD521 /* RCTDevLoadingViewSetEnabled.m in Sources */,\n\t\t\t\t17E53719BE7C9DAA239E3684B393CA6B /* RCTDisplayLink.m in Sources */,\n\t\t\t\t6D47DA4D57A4DCB9E5DE1A5C727BE1FF /* RCTErrorInfo.m in Sources */,\n\t\t\t\t623EB998C85B863F99092DF08C02A46D /* RCTEventDispatcher.m in Sources */,\n\t\t\t\tE6BFEF471AFCFF63E7C2D7BA1F89621E /* RCTEventEmitter.m in Sources */,\n\t\t\t\t70EE94B444ED9B2CA09A5C36DC60E4D0 /* RCTFollyConvert.mm in Sources */,\n\t\t\t\t70EDDB0D146F95B1139062781D9309BD /* RCTFont.mm in Sources */,\n\t\t\t\tD62F1180412478ECE031FBB09BB2415F /* RCTFrameUpdate.m in Sources */,\n\t\t\t\t3EF492603A770B0DB5F8A5386D3128F3 /* RCTI18nUtil.m in Sources */,\n\t\t\t\tB7D7A68F6F82595F6811546D3F5FBE1F /* RCTImageSource.m in Sources */,\n\t\t\t\tC9D61E8CE5FBF6840501CFF665CEE31A /* RCTInspector.mm in Sources */,\n\t\t\t\t0CCB0E1584227DBA1626298A85B5330C /* RCTInspectorDevServerHelper.mm in Sources */,\n\t\t\t\t2A4E5E0880C9929B370D1941E5AE5F26 /* RCTInspectorPackagerConnection.m in Sources */,\n\t\t\t\t8020DC79BC18FE1733F382110AA7F9BC /* RCTJavaScriptLoader.mm in Sources */,\n\t\t\t\t758A73A007DBDEE27DAC1076057CB202 /* RCTJSIExecutorRuntimeInstaller.mm in Sources */,\n\t\t\t\tD924621A02EA0FCD7E776A06D2AA64C9 /* RCTJSStackFrame.m in Sources */,\n\t\t\t\tF102B4B1F081DCBE8CC11C5CCA367B77 /* RCTJSThread.m in Sources */,\n\t\t\t\t86A39CCE3B6E3D293E0CE2C67781A81A /* RCTKeyCommands.m in Sources */,\n\t\t\t\tF8C937BE0952BA6404982198BF2D4323 /* RCTLayout.m in Sources */,\n\t\t\t\tFDDF426085594202FFB84A5A244FF421 /* RCTLayoutAnimation.m in Sources */,\n\t\t\t\t45C8EF8702AA503775656087A507733F /* RCTLayoutAnimationGroup.m in Sources */,\n\t\t\t\tFDACFB7A65FFD5270F807735B27D1DBA /* RCTLocalizedString.mm in Sources */,\n\t\t\t\t36F7E7BA67E5C0369DFC89F1ABB6F394 /* RCTLog.mm in Sources */,\n\t\t\t\tF0380AC81B8D35CAB3F13DB5217E64AD /* RCTManagedPointer.mm in Sources */,\n\t\t\t\t0DB74DB42DFB69580318D842D74E803C /* RCTMessageThread.mm in Sources */,\n\t\t\t\t27539AB858023E5C2410655150B37627 /* RCTModalHostView.m in Sources */,\n\t\t\t\t804D9AADCDC8D1F1632F230EEFA6FBC0 /* RCTModalHostViewController.m in Sources */,\n\t\t\t\tE3D5DDDC6A93D60C763C6DADA4FD722B /* RCTModalHostViewManager.m in Sources */,\n\t\t\t\t8BF6DF9CF222FB4CA16C9FDF00D1A4BB /* RCTModalManager.m in Sources */,\n\t\t\t\tA38A237FA362893EFF6CA7A3CE4E9F4E /* RCTModuleData.mm in Sources */,\n\t\t\t\t8EE03FCDF67F4EE3290B517CFA87A7E8 /* RCTModuleMethod.mm in Sources */,\n\t\t\t\tAA62F32250BD7CC4CEFB9F7804B905E7 /* RCTModuleRegistry.m in Sources */,\n\t\t\t\tEC92E4BFA408ADBD17CCB1BB91FAD18D /* RCTMultipartDataTask.m in Sources */,\n\t\t\t\tF8097A05D32126DC5E6019E1759235FF /* RCTMultipartStreamReader.m in Sources */,\n\t\t\t\tF65B7A2D7B9A82CCB314BB9D9A79B142 /* RCTNativeModule.mm in Sources */,\n\t\t\t\t61EEB363499D46E2DE3F8E3CC138995E /* RCTObjcExecutor.mm in Sources */,\n\t\t\t\t3845DB49D557E86260B40B8530E9CBD6 /* RCTPackagerClient.m in Sources */,\n\t\t\t\t70D9A7BB79BC5B0A87CC0B371A49D87B /* RCTPackagerConnection.mm in Sources */,\n\t\t\t\t589F7F415548D3401ACB27D2FFD63E29 /* RCTParserUtils.m in Sources */,\n\t\t\t\t5FD22DEF7D57A12E857927FC67567E05 /* RCTPerformanceLogger.mm in Sources */,\n\t\t\t\t97DECF6E711E8B315123A6811DF80EC4 /* RCTPerformanceLoggerLabels.m in Sources */,\n\t\t\t\tDCDB89602CC48D42D8A5F52640A92C54 /* RCTProfile.m in Sources */,\n\t\t\t\tFA31953D65A12B9338B2363FCC9CC4C9 /* RCTProfileTrampoline-arm.S in Sources */,\n\t\t\t\t963D64DBA5EFD7B49E439C0B7207E7AF /* RCTProfileTrampoline-arm64.S in Sources */,\n\t\t\t\tED1E9F472F169CCBA252A035D6B4AAB5 /* RCTProfileTrampoline-i386.S in Sources */,\n\t\t\t\t410A73DC736F237F5938D8093AA213C6 /* RCTProfileTrampoline-x86_64.S in Sources */,\n\t\t\t\tB566B0A2794716116031E71BC440EA2A /* RCTReconnectingWebSocket.m in Sources */,\n\t\t\t\tA19075D535E90DCF7736BF70C4512C46 /* RCTRedBoxExtraDataViewController.m in Sources */,\n\t\t\t\t1D460FFC60AA03A2D4A41BB9313212B7 /* RCTRedBoxSetEnabled.m in Sources */,\n\t\t\t\tC0ACAA415557A9541189F735338188F6 /* RCTRefreshControl.m in Sources */,\n\t\t\t\tC14128969BE1C6AB075A68A94478FEA9 /* RCTRefreshControlManager.m in Sources */,\n\t\t\t\t540362B438D8F765E484CAD9A99213E1 /* RCTReloadCommand.m in Sources */,\n\t\t\t\t1DF173C0F1800A149A77357F3C58CFDB /* RCTRootContentView.m in Sources */,\n\t\t\t\tF3EE1091BDCEE12DBFD1B540E651C997 /* RCTRootShadowView.m in Sources */,\n\t\t\t\tD319199F318F9F518DF028E18D8052F2 /* RCTRootView.m in Sources */,\n\t\t\t\t66F2E613C99822AF10887F865AF5A7D5 /* RCTSafeAreaShadowView.m in Sources */,\n\t\t\t\t0FB25A9F0783B7F60859244B80A341AE /* RCTSafeAreaView.m in Sources */,\n\t\t\t\tDE4BD4F32114191405334654FC2E18AF /* RCTSafeAreaViewLocalData.m in Sources */,\n\t\t\t\t2B1BCED5F526FBDAFE483AA8FD111456 /* RCTSafeAreaViewManager.m in Sources */,\n\t\t\t\t1E19E82F288E0354AF7A0C508DE61035 /* RCTScrollContentShadowView.m in Sources */,\n\t\t\t\t0CAEB04840483A8A5A72F4355958AD73 /* RCTScrollContentView.m in Sources */,\n\t\t\t\t3BCC36BD3528A06FA613D3F0182969A9 /* RCTScrollContentViewManager.m in Sources */,\n\t\t\t\t012747985355A39C6D1E6079BBE61B87 /* RCTScrollEvent.m in Sources */,\n\t\t\t\tA84C6C6ECCA510D53447DE2A92670783 /* RCTScrollView.m in Sources */,\n\t\t\t\tB3A3E3277EB3013588EAD596B1F050CC /* RCTScrollViewManager.m in Sources */,\n\t\t\t\t6C5725243C44011456F42C6A14F7A0A8 /* RCTSegmentedControl.m in Sources */,\n\t\t\t\t00A5EA92B12316AE199E2854F7DB8F9F /* RCTSegmentedControlManager.m in Sources */,\n\t\t\t\tEB47B8FFFB73B9925CF7F1B1E30AC084 /* RCTShadowView.m in Sources */,\n\t\t\t\t744A6AFA4DD1A2C8C42B91DDE1A6F835 /* RCTShadowView+Internal.m in Sources */,\n\t\t\t\tB87B2669F479637ABFED52ED65EF2313 /* RCTShadowView+Layout.m in Sources */,\n\t\t\t\t2A1E984533FFF0761823C77A5EF8C986 /* RCTSurface.mm in Sources */,\n\t\t\t\t34E028B5C229E7B80E09BF21AA7F30F5 /* RCTSurfaceHostingProxyRootView.mm in Sources */,\n\t\t\t\tA867C1C27059E5551EBA984D27CDF4FF /* RCTSurfaceHostingView.mm in Sources */,\n\t\t\t\tB85768B4335CC10A4A576DAC90A71D93 /* RCTSurfacePresenterStub.m in Sources */,\n\t\t\t\t9B4920B859EB68134633DC1B38607162 /* RCTSurfaceRootShadowView.m in Sources */,\n\t\t\t\t20F4C041F77DE88B56616FB311D808D4 /* RCTSurfaceRootView.mm in Sources */,\n\t\t\t\tB09BA4F1254FE042646506FF2C79AE14 /* RCTSurfaceSizeMeasureMode.mm in Sources */,\n\t\t\t\tA28FA7E22D3A80A9EA98A5EA1DE6FF7C /* RCTSurfaceStage.m in Sources */,\n\t\t\t\tDC9E608807384B1F9324A5A88FF2AF45 /* RCTSurfaceView.mm in Sources */,\n\t\t\t\t0370A8D6E25EA067E86213AF97FA908F /* RCTSwitch.m in Sources */,\n\t\t\t\tD6F3E2B8FE24B7FB165754CD936DDEC4 /* RCTSwitchManager.m in Sources */,\n\t\t\t\tDF52659D4B342F45BCDFC299BB9F3176 /* RCTTouchEvent.m in Sources */,\n\t\t\t\t0E5654A31BD89F81B5627D63B794AAD3 /* RCTTouchHandler.m in Sources */,\n\t\t\t\tE1B6548D2CF64C426F0BF369865FBD90 /* RCTUIManager.m in Sources */,\n\t\t\t\t9B7A6544F9E9805452DAC23861BEC337 /* RCTUIManagerObserverCoordinator.mm in Sources */,\n\t\t\t\t11D8A53B5669E71051AED58511A1202D /* RCTUIManagerUtils.m in Sources */,\n\t\t\t\tB778958B3420C110829CAB8F36FD7C2C /* RCTUIUtils.m in Sources */,\n\t\t\t\t551F583D79044D0E633AEC170C210B83 /* RCTUtils.m in Sources */,\n\t\t\t\t9242F0F9E52CCA157276B60C7717847C /* RCTUtilsUIOverride.m in Sources */,\n\t\t\t\t2AFADA9C8F0B22CDC7A0E2963AEC6AA8 /* RCTVersion.m in Sources */,\n\t\t\t\t9D724EF3BBE139FA8C05D4528A894F0E /* RCTView.m in Sources */,\n\t\t\t\tE964DAEBFF053EC3DE9B68C14E78DEA7 /* RCTViewManager.m in Sources */,\n\t\t\t\t24DD942C54FA5B87253413913DD836E1 /* RCTViewRegistry.m in Sources */,\n\t\t\t\t508F6D748C3E70A9EEB8197CF7A2F71C /* RCTViewUtils.m in Sources */,\n\t\t\t\t4DD05C5A058E1A60C86F8009B6D91B0E /* RCTWrapperViewController.m in Sources */,\n\t\t\t\t8029584710A456EC5C67D4A4BB9A680B /* React-Core-dummy.m in Sources */,\n\t\t\t\tFA80E10B2923469227CEB02B29ABD5E1 /* UIView+React.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t3F49D730D34771920107D4D2669AFC9D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA0414AFF72685EFA608465FD6F3C0855 /* RCTBlobCollector.mm in Sources */,\n\t\t\t\tC9DF4C4D56788006D3E45A2D743D5670 /* RCTBlobManager.mm in Sources */,\n\t\t\t\t00C54E7CD50896090EF4E7278BA81656 /* RCTBlobPlugins.mm in Sources */,\n\t\t\t\t7695111DF6B3428C79B8FA67D5C29F49 /* RCTFileReaderModule.mm in Sources */,\n\t\t\t\t166EFABABADB56EE0ADEED83DF8BD9FF /* React-RCTBlob-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t46252E81ED1C361CFC4C994E6EE633FF /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t0A84A0D6B6C2378A9F17CC60E5629981 /* RCTConvertHelpers.mm in Sources */,\n\t\t\t\t8F981C056361D8BEB7739CC67BC494B4 /* RCTTypedModuleConstants.mm in Sources */,\n\t\t\t\t6C992FA96B61EF3505BD53ACA873BFA8 /* RCTTypeSafety-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t50C8A679BB5D7BD9D7EEED98F207406C /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t15A01C98D01F5E8CF5667E215EC11869 /* RCTAdditionAnimatedNode.mm in Sources */,\n\t\t\t\tACE0A69608D1407DA250057C17E7281A /* RCTAnimatedNode.mm in Sources */,\n\t\t\t\tA5E697E3D36B4DEB0134CD065243FDDF /* RCTAnimationPlugins.mm in Sources */,\n\t\t\t\tCC6E3938A4EF0A6DB2B0D56ED41F4976 /* RCTAnimationUtils.mm in Sources */,\n\t\t\t\tE5E6E25B9472F6F0AF1255623F14E6A3 /* RCTColorAnimatedNode.mm in Sources */,\n\t\t\t\t8295C73E52CD5C12A616EE97FE02478B /* RCTDecayAnimation.mm in Sources */,\n\t\t\t\tAB2A762779BA1CEB0922D08C0677AD46 /* RCTDiffClampAnimatedNode.mm in Sources */,\n\t\t\t\t2AD655BCAFC873B439DC03D772B7A36A /* RCTDivisionAnimatedNode.mm in Sources */,\n\t\t\t\tA3C138B2295C7FA333A37D6504296970 /* RCTEventAnimation.mm in Sources */,\n\t\t\t\t3438AB92F2ACE84B8CB6A8CFAF423105 /* RCTFrameAnimation.mm in Sources */,\n\t\t\t\t425A1E0E35945FDF6A30686F549465E1 /* RCTInterpolationAnimatedNode.mm in Sources */,\n\t\t\t\tA82CCE9C3F6E085AF4F6CC7A71DFC0A6 /* RCTModuloAnimatedNode.mm in Sources */,\n\t\t\t\t70F5A59001862BD0B1E8871F16584977 /* RCTMultiplicationAnimatedNode.mm in Sources */,\n\t\t\t\tD6914F306266D61018820AF2CBABBA72 /* RCTNativeAnimatedModule.mm in Sources */,\n\t\t\t\t8387B15D94ACE3AB8A57F8580B22D08E /* RCTNativeAnimatedNodesManager.mm in Sources */,\n\t\t\t\tB27A11C4410553392C96AA713C78C35F /* RCTNativeAnimatedTurboModule.mm in Sources */,\n\t\t\t\t164466B28EEB0ABA1B7B4750EA02412A /* RCTObjectAnimatedNode.mm in Sources */,\n\t\t\t\t6C9BA8A8F1B09000220A1C6018049397 /* RCTPropsAnimatedNode.mm in Sources */,\n\t\t\t\tED0D26A030DA133A07D84696D9FD9623 /* RCTSpringAnimation.mm in Sources */,\n\t\t\t\t418AFE7E951FD4B006662D619F4BC0D9 /* RCTStyleAnimatedNode.mm in Sources */,\n\t\t\t\t407C77D329B19C296DD48705A6D7B7EE /* RCTSubtractionAnimatedNode.mm in Sources */,\n\t\t\t\tB40152986DF0C62D2E28E405141D7CBE /* RCTTrackingAnimatedNode.mm in Sources */,\n\t\t\t\t322902B35752EC592D5B4ED2C00D9393 /* RCTTransformAnimatedNode.mm in Sources */,\n\t\t\t\tEBFBA6DE22BAD2C406C2392366EC51BB /* RCTValueAnimatedNode.mm in Sources */,\n\t\t\t\t0E58F200670891AE6FB10861BC1EEE46 /* React-RCTAnimation-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t51792160622EDC05F03A3BD289C7A67D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB965CFA26A338B7BF3BDE4F541A7ADE9 /* DebugStringConvertible.cpp in Sources */,\n\t\t\t\t40F28A3F4BF66C4EF68B3035DDACDBAA /* DebugStringConvertibleItem.cpp in Sources */,\n\t\t\t\tA2E1B929FDB6C978EE68D7A8DAE051EC /* React-rendererdebug-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t52C37581A97E44EE0B8C295E6DD38CCE /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t5982D84D71BBA6ABEEA3A813AC63C837 /* ImageEventEmitter.cpp in Sources */,\n\t\t\t\t774D516A59D21EC80472A65BB40B55D0 /* ImageProps.cpp in Sources */,\n\t\t\t\t5F0D2CCE2513E3AD3AEFD8B5897BD3C2 /* ImageShadowNode.cpp in Sources */,\n\t\t\t\tE59E696DBBF7EBAE641CF83E785ACDA3 /* ImageState.cpp in Sources */,\n\t\t\t\tCC5BCB4CA3A1336C2B736EC0C18BDF49 /* React-FabricImage-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t53A2027EA4F55C6D53E6616B3FE1C32B /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tCCE7ED5BBA97D0A5598471FC277F8AB6 /* RCTVibration.mm in Sources */,\n\t\t\t\t34AE0A783C5465DB2FA5C2B7D50EECB3 /* RCTVibrationPlugins.mm in Sources */,\n\t\t\t\tE344034251B2B0C79981FBE2659E2ADC /* React-RCTVibration-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t5CAAFADB20B88A58D6830F22D247F99A /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t3A0218754CAC86A5243E1A54F5D96717 /* NSTextStorage+FontScaling.m in Sources */,\n\t\t\t\tC92E995FC44274E6EB6B58EB6B6E5A71 /* RCTBackedTextInputDelegateAdapter.mm in Sources */,\n\t\t\t\tB88D6486C89EAA9B8FA7B9BBAA935016 /* RCTBaseTextInputShadowView.mm in Sources */,\n\t\t\t\tA26AD378981A03977F8B5859FC2E3520 /* RCTBaseTextInputView.mm in Sources */,\n\t\t\t\t4F65A3489B98C0252B66084467E96729 /* RCTBaseTextInputViewManager.mm in Sources */,\n\t\t\t\t5D51E24D431131B975A541BE5699EFB4 /* RCTBaseTextShadowView.mm in Sources */,\n\t\t\t\tE47925115CBFC067E6C815ADAE6A56DB /* RCTBaseTextViewManager.mm in Sources */,\n\t\t\t\t79F498AD66CF7B1E027685FA9B830981 /* RCTConvert+Text.mm in Sources */,\n\t\t\t\t47A21E1BEF0354D40449C04B19F8573E /* RCTDynamicTypeRamp.mm in Sources */,\n\t\t\t\t9D5BB979650E52C9D6EDC21113C22E8C /* RCTInputAccessoryShadowView.mm in Sources */,\n\t\t\t\tE838D80FCB87FDDD82E7D2764D8C2E8A /* RCTInputAccessoryView.mm in Sources */,\n\t\t\t\tC85AF2DA0E711B6D8061354E44155F49 /* RCTInputAccessoryViewContent.mm in Sources */,\n\t\t\t\tE0B886B9E9EDFC2C6DC982BD03453490 /* RCTInputAccessoryViewManager.mm in Sources */,\n\t\t\t\t33752EEE3593427DDBA5D62BED59A543 /* RCTMultilineTextInputView.mm in Sources */,\n\t\t\t\tC1B26D9A55F1A2C8CDE164527BF69595 /* RCTMultilineTextInputViewManager.mm in Sources */,\n\t\t\t\t301CDABF3FD039547D92DBDB38996953 /* RCTRawTextShadowView.mm in Sources */,\n\t\t\t\t4BC3A1BE0555EFFE479D514DE9D87F02 /* RCTRawTextViewManager.mm in Sources */,\n\t\t\t\t076814077F393DA76C02B2B98955F27B /* RCTSinglelineTextInputView.mm in Sources */,\n\t\t\t\t45000A8D184E659305EBC4F052FE22DA /* RCTSinglelineTextInputViewManager.mm in Sources */,\n\t\t\t\tC2DF30B6DE01B7D903B28E6013811564 /* RCTTextAttributes.mm in Sources */,\n\t\t\t\t587F3DEE36D4A28B892F91335A246DC0 /* RCTTextSelection.mm in Sources */,\n\t\t\t\t9BE6267DB05B71DBB27C01E25769CBDA /* RCTTextShadowView.mm in Sources */,\n\t\t\t\tD403CB498CF79EC0939F733B153D0057 /* RCTTextView.mm in Sources */,\n\t\t\t\t219B3B01BD518584F2A89A722BCFD0DD /* RCTTextViewManager.mm in Sources */,\n\t\t\t\t6F63BCBD2B1E7B4CF5D5A7578A70108C /* RCTUITextField.mm in Sources */,\n\t\t\t\t2625B35CEAEFA1B0EA467965A3330311 /* RCTUITextView.mm in Sources */,\n\t\t\t\t54881BD4940AE80A54AFA4A41A9ACE01 /* RCTVirtualTextShadowView.mm in Sources */,\n\t\t\t\t9DA7609D0CA7E74EC3DD6F2ECE3B75D6 /* RCTVirtualTextView.mm in Sources */,\n\t\t\t\t81E86C9D8F20FB2F3B4462F3CCD54294 /* RCTVirtualTextViewManager.mm in Sources */,\n\t\t\t\tED40B12F85AFF22FE31122D1ED1D2FC6 /* React-RCTText-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t5CAEEB9F76D13B5B53752432675816A2 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t177DA7AB540346CDB555B61232F0C1EF /* JSIExecutor.cpp in Sources */,\n\t\t\t\tF736A3086A24F89EC27986F4F5DFE62D /* JSINativeModules.cpp in Sources */,\n\t\t\t\t78F3EEC46C002EDAB30A6258F8ECB70E /* React-jsiexecutor-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t5D0426A5A488845772E6948965C9D686 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t4448631AF617AC7BFAE71481DEAE4867 /* RCTLinkingManager.mm in Sources */,\n\t\t\t\t20F2FB8C633B8AAF924B03661CAFFC73 /* RCTLinkingPlugins.mm in Sources */,\n\t\t\t\t9F77598A23E6FC5C8F7267848FA42DD7 /* React-RCTLinking-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6821FD5A12B69581B081B1EB963284D6 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t8FCD1C8218809FF67978B99120C99DC9 /* React-logger-dummy.m in Sources */,\n\t\t\t\tA2EFB06C6482D772F8442F4C783752E5 /* react_native_log.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6AEEE0DDA3DE93CC96C0825C9089FA44 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6404467E34C533EC2006A9DB49333661 /* CxxTurboModuleUtils.cpp in Sources */,\n\t\t\t\t72BF4275B8B3660B1CBC3F8945E499AD /* LongLivedObject.cpp in Sources */,\n\t\t\t\t43120C286CDDA8285535926A403AA30B /* ReactCommon-dummy.m in Sources */,\n\t\t\t\t7A2DCCD2975741E4941FF2958EF8D600 /* TurboCxxModule.cpp in Sources */,\n\t\t\t\tDAEBA537EB67618319D0FC4583FF7A6B /* TurboModule.cpp in Sources */,\n\t\t\t\t9271349E8FDF5329205E712797561D1D /* TurboModuleBinding.cpp in Sources */,\n\t\t\t\t4E75BA9FAFC8ACCCE5587D6145228C93 /* TurboModulePerfLogger.cpp in Sources */,\n\t\t\t\t89B15B8D049992388A6BCF216AF8BE15 /* TurboModuleUtils.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6E7F91AEE5AB822D742DD436C6F7CF22 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t75A362DACB9AD78859822092A79651B7 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tF39A7B4D3EA94DBC9F0D8A5266ED5CEA /* JsErrorHandler.cpp in Sources */,\n\t\t\t\tDA7F88713B1145113DA6A418AA6A57B1 /* React-jserrorhandler-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t798DF908E612E5F8F05490A8ADB42D63 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t8B6D7EFAE33ACDC84C5716F89DB43685 /* CoreFeatures.cpp in Sources */,\n\t\t\t\tFF3BCD88224B32B38359A33CA2787889 /* jsi.cpp in Sources */,\n\t\t\t\t01D487B3BCD02252EA46AD31A3AE88F2 /* ManagedObjectWrapper.mm in Sources */,\n\t\t\t\t800168271BC4625A8BAE356763E5F578 /* React-utils-dummy.m in Sources */,\n\t\t\t\t13635F0130E1586FD24F72C56AD22D62 /* RunLoopObserver.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t7B4904D3DA72A83F379DDBAE171BB0A2 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t21173C1FF076EA74CC2875A8451CD04B /* RCTInteropTurboModule.mm in Sources */,\n\t\t\t\tAC74571D81AF9246D9A46B8B069B9BB5 /* RCTRuntimeExecutor.mm in Sources */,\n\t\t\t\t737485B0EC651803714A2412F1A1EFD5 /* RCTTurboModule.mm in Sources */,\n\t\t\t\tBD01F6099618E01DA2E418D865E8560C /* RCTTurboModuleManager.mm in Sources */,\n\t\t\t\t2458B50A7D8382C89BABA674C834A9EB /* React-NativeModulesApple-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t7EBAFB8D3A23BDFF1BDD2DFFB0078930 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t24688A1F5DA03AD255685CF282C0B45E /* RCTAnimatedImage.mm in Sources */,\n\t\t\t\tC2812E54502D0AE67E89826DF1F68331 /* RCTBundleAssetImageLoader.mm in Sources */,\n\t\t\t\t70BCDC41D1A0240B3FFE10DEC03C5569 /* RCTDisplayWeakRefreshable.mm in Sources */,\n\t\t\t\tAA91C034F80AC8439B59BE80A30E96CB /* RCTGIFImageDecoder.mm in Sources */,\n\t\t\t\tBD69072959AE8E10FB9E6B91DE1FE1FB /* RCTImageBlurUtils.mm in Sources */,\n\t\t\t\t4094BC9DAC269411141A9BF211A0C1C1 /* RCTImageCache.mm in Sources */,\n\t\t\t\t5F40E7EA0BF1196D0390F3DD1495FDE8 /* RCTImageEditingManager.mm in Sources */,\n\t\t\t\t7148B8D601E67D9B8727775F7233F7FA /* RCTImageLoader.mm in Sources */,\n\t\t\t\t65C80D5494BD3228D2AD6AAF37AD6EDA /* RCTImagePlugins.mm in Sources */,\n\t\t\t\t38EBCAC6CBD066B63E56309C335B8733 /* RCTImageShadowView.mm in Sources */,\n\t\t\t\t1B2038C09720EE3EF41A25166979A55C /* RCTImageStoreManager.mm in Sources */,\n\t\t\t\t4DEEB3F59D5A65A8C1DA3BAA6B1BD2EC /* RCTImageURLLoaderWithAttribution.mm in Sources */,\n\t\t\t\tC9763A53EB913A90DDFD3B05F894F445 /* RCTImageUtils.mm in Sources */,\n\t\t\t\t5223C8643C9453C6B98DFE69DCC9196B /* RCTImageView.mm in Sources */,\n\t\t\t\tC518D5794D6157C417922E2E4B2B82A6 /* RCTImageViewManager.mm in Sources */,\n\t\t\t\t09AAD2EF48DD20C48D9ED5976230E59F /* RCTLocalAssetImageLoader.mm in Sources */,\n\t\t\t\t97F384488C52BE0D4A9D53D345D00BC8 /* RCTResizeMode.mm in Sources */,\n\t\t\t\t120634F36CBAC662040FA4FADC964386 /* RCTUIImageViewAnimated.mm in Sources */,\n\t\t\t\t907AF22D8F8271E5F977F25DFA0F73A6 /* React-RCTImage-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t827ABC8E4C67904313262F0F24F4BE76 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1E274E727DB799B01B0C75D68C9C1D4E /* FBReactNativeSpec-generated.mm in Sources */,\n\t\t\t\t82B151FA407A5ED82238DE63FD119835 /* FBReactNativeSpecJSI-generated.cpp in Sources */,\n\t\t\t\t9A35D386A3459053D8A2240EF17E13F4 /* RCTModulesConformingToProtocolsProvider.mm in Sources */,\n\t\t\t\tC8600F63A7EF1DE7EE7E9303EC941496 /* React-Codegen-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t83D9E4EBA58D2EF02EA7856C60C2620C /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA9A0682AC82CE2B25A2E0EEC1330EE68 /* Database.cpp in Sources */,\n\t\t\t\t6110F4F96597CB3D4486AF424FDBC834 /* Database-batch.cpp in Sources */,\n\t\t\t\tDF91D11B9CE5FCD990B5344711241E38 /* Database-jsi.cpp in Sources */,\n\t\t\t\t33E4E54947FB17B702F1DCAFD7B9F03D /* Database-query.cpp in Sources */,\n\t\t\t\tB8E0926005F78632DECE3D0E7A6B853F /* Database-sqlite.cpp in Sources */,\n\t\t\t\tC0AA8E5DC19580CD56E6741BA43B2836 /* Database-turboSync.cpp in Sources */,\n\t\t\t\t5FE16776440A3CFC53E25FC6F8F3D8B7 /* DatabaseBridge.cpp in Sources */,\n\t\t\t\t60A3E51312E73BB59DFED0E1D0286A79 /* DatabasePlatformIOS.mm in Sources */,\n\t\t\t\t6C387AF206A5A29A99340C38D35138DA /* FMDatabase.m in Sources */,\n\t\t\t\t54F90A747FD892839E06E26F8B1DA351 /* FMDatabaseAdditions.m in Sources */,\n\t\t\t\t2185C70869CA8F16DEF5598671117271 /* FMDatabasePool.m in Sources */,\n\t\t\t\tFBD75089B4755555A82486ACFDC1F103 /* FMDatabaseQueue.m in Sources */,\n\t\t\t\tA841E4574588119BFAC4C1ABBE42E3EC /* FMResultSet.m in Sources */,\n\t\t\t\t98645489B7C5F09DCAA5CDE2C2D33D32 /* JSIInstaller.mm in Sources */,\n\t\t\t\tE31A87C273F43A0F04ED6AE8C2C562ED /* Sqlite.cpp in Sources */,\n\t\t\t\t7BE465B58FA44A71A52E4F29C3CCD68D /* WatermelonDB-dummy.m in Sources */,\n\t\t\t\t59917156FF1333C1DBE02BE01BC71BA5 /* WMDatabase.m in Sources */,\n\t\t\t\tC838669A2A7E0BED3B5A3636674F8736 /* WMDatabaseBridge.m in Sources */,\n\t\t\t\t39048CB54388C7559E2F723650C145CA /* WMDatabaseDriver.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t8504E2D60624339B89BEA2A6F41621A2 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tF76E0AB3B56CF65826F916918C8E3B05 /* demangle.cc in Sources */,\n\t\t\t\tA6B176A4E944BC9B06A1C03CD10681A0 /* glog-dummy.m in Sources */,\n\t\t\t\t89D89CF3D8BF72B6526EA0FF4E8FC1F8 /* logging.cc in Sources */,\n\t\t\t\tE66C0C4875358F85C28B08F431A9A93B /* raw_logging.cc in Sources */,\n\t\t\t\tB945ECC66F0C651040D88DB13B191014 /* signalhandler.cc in Sources */,\n\t\t\t\t5774E5CBA2D497BC21DCD6A7426FD492 /* symbolize.cc in Sources */,\n\t\t\t\t35C6AD1DDC48BCD69B6A44257803179F /* utilities.cc in Sources */,\n\t\t\t\tBA3ADF4A8E40C8AB0FBC1B0A393B3891 /* vlog_is_on.cc in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t85B1519F88251F0A76A1EE2F46A80D49 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t4B7FB9FFC77C456D1D957E910DBCE93D /* ObjCTimerRegistry.mm in Sources */,\n\t\t\t\tDF6D6AE3A41D68BBB6934A6215CF0543 /* RCTHermesInstance.mm in Sources */,\n\t\t\t\t54203B03046FBB5E67F2A914914F1F44 /* RCTHost.mm in Sources */,\n\t\t\t\t66954121FFFD6C5C2B418E27FC43B4F7 /* RCTInstance.mm in Sources */,\n\t\t\t\t690FA340A00937B92D570D6C37F9F0D2 /* RCTJSThreadManager.mm in Sources */,\n\t\t\t\t90BBE9AC94E874862E831FE5AE51A577 /* RCTLegacyUIManagerConstantsProvider.mm in Sources */,\n\t\t\t\t4935A609FC34FA352D3C5B22EE93C6D9 /* RCTPerformanceLoggerUtils.mm in Sources */,\n\t\t\t\tD851A600C947B91F7DB5B09DD6367D2B /* React-RuntimeApple-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t92A0F6DC3B64F90B399C60EE8FDEB83F /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tA56D6EAD62CADD0537EB486ADFDCFA82 /* RCTDeprecation.m in Sources */,\n\t\t\t\t15FEAC3E79CD8CAA28028308AEFFB10E /* RCTDeprecation-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t99D0414F490F294A46CABFA9F84F2C57 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t728B39A23F003D9E9FB6D384C4B8EDBB /* BridgelessJSCallInvoker.cpp in Sources */,\n\t\t\t\t71AF7D9527D112BC4D62C7A8A3A7AF60 /* BridgelessNativeMethodCallInvoker.cpp in Sources */,\n\t\t\t\tB58A2402967EDAD0B86779DF77DEA32F /* BufferedRuntimeExecutor.cpp in Sources */,\n\t\t\t\tD0EFDBC75FA87E68439E6A39448AC532 /* JSRuntimeFactory.cpp in Sources */,\n\t\t\t\tE743F863A0F857A5DA6A7F1E5D813BCC /* LegacyUIManagerConstantsProviderBinding.cpp in Sources */,\n\t\t\t\tC7C573418A056B8AB963F9493EA16B0E /* React-RuntimeCore-dummy.m in Sources */,\n\t\t\t\t317D8B85EE8D4F5553A959EF2A083728 /* ReactInstance.cpp in Sources */,\n\t\t\t\tDE3E9A5EC28083C37C4F79EB720E4C84 /* TimerManager.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9DF643F20AEF406F2B1272098FD69149 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t45E5CEDEBDBDB3272D62BF52105789CD /* CoreModulesPlugins.mm in Sources */,\n\t\t\t\tE0616E92063B1D7177AD59E30BF80474 /* RCTAccessibilityManager.mm in Sources */,\n\t\t\t\tC20E436D91DA5203A47F3D6F3E562C6D /* RCTActionSheetManager.mm in Sources */,\n\t\t\t\t0D74FE5F1E9448343E13242159F63F6C /* RCTAlertController.mm in Sources */,\n\t\t\t\t6D36A6FFC2488415258EFA1832790E55 /* RCTAlertManager.mm in Sources */,\n\t\t\t\tEE7A0A4956CB8103954A69F4355C44A9 /* RCTAppearance.mm in Sources */,\n\t\t\t\t28CA6DD3D240C72630DDA20DEA46F245 /* RCTAppState.mm in Sources */,\n\t\t\t\t7345128E1576262D321085D0675568A8 /* RCTClipboard.mm in Sources */,\n\t\t\t\t11B0E7FB7ECA7915B7A9BE59DEAE0A2C /* RCTDeviceInfo.mm in Sources */,\n\t\t\t\tDE170A39631C63A89F2286B7AFBF7E16 /* RCTDevLoadingView.mm in Sources */,\n\t\t\t\t5DDFBA8FE4985DDF178BEB5B73F79F01 /* RCTDevMenu.mm in Sources */,\n\t\t\t\t0EEB24CECB61AF303B67DD51759484C6 /* RCTDevSettings.mm in Sources */,\n\t\t\t\tA1F8338949D8668927E275528CCCC3B4 /* RCTEventDispatcher.mm in Sources */,\n\t\t\t\t069B050AFB16542D9675E9245FF16FC5 /* RCTExceptionsManager.mm in Sources */,\n\t\t\t\t050FE1A6E2E7D773A48B1F4BED2FC450 /* RCTFPSGraph.mm in Sources */,\n\t\t\t\t74B6269F717A43150AE71628996EC8FA /* RCTI18nManager.mm in Sources */,\n\t\t\t\t20BB7CDCC08AFE49FE5BDA569D34CA7F /* RCTKeyboardObserver.mm in Sources */,\n\t\t\t\t1954536D05D0919B8EBF384663613170 /* RCTLogBox.mm in Sources */,\n\t\t\t\t8BE990F2C07DD454945949C7EF8FBBE1 /* RCTLogBoxView.mm in Sources */,\n\t\t\t\t882AF9DE6433B759F7BD1EDACDCF0024 /* RCTPerfMonitor.mm in Sources */,\n\t\t\t\t245A6AC43C8E566986398F8A0295848A /* RCTPlatform.mm in Sources */,\n\t\t\t\t4FF26431AB9C13B861E5BF2CAEA82330 /* RCTRedBox.mm in Sources */,\n\t\t\t\tCC21D14AE3380035230F2E4D94C48724 /* RCTSourceCode.mm in Sources */,\n\t\t\t\t19965E9C8B6A83E60822324223B9E1A0 /* RCTStatusBarManager.mm in Sources */,\n\t\t\t\tA7CD6D2F66EA3F1BF1E4E1A3D82CDA24 /* RCTTiming.mm in Sources */,\n\t\t\t\t0E3B2C94F912663229BBBB5B4D6303A7 /* RCTWebSocketExecutor.mm in Sources */,\n\t\t\t\tEBA1024BBBA34339B28107E04BE06DDD /* RCTWebSocketModule.mm in Sources */,\n\t\t\t\t20AA75C455914560C441E1A6A7AB2FBE /* React-CoreModules-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tAA67040A808097DA613BC1AF4AECB0B9 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tF140F9B4A685AE28A89CA9D9752DA6F4 /* React-runtimescheduler-dummy.m in Sources */,\n\t\t\t\t7F87FA23242BAAC6C75BF03E0C3F1BEA /* RuntimeScheduler.cpp in Sources */,\n\t\t\t\t106F3109E3A54C7F0C67DABAFAD2B5A0 /* RuntimeScheduler_Legacy.cpp in Sources */,\n\t\t\t\tB3ABAB986361D498B16189ACBD3E9EA5 /* RuntimeScheduler_Modern.cpp in Sources */,\n\t\t\t\t48089FEC790CC6100CF69630720FDFAC /* RuntimeSchedulerBinding.cpp in Sources */,\n\t\t\t\tFAB9F94A3091F4A570F19CB366F46516 /* RuntimeSchedulerCallInvoker.cpp in Sources */,\n\t\t\t\tFBD79427FC052DF19357B1FE491B6D93 /* Task.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tAB35217B6C3003BC3E64ABF40AB236FE /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6918BE63EE0EE0EDEE58BBB12179E846 /* RCTDataRequestHandler.mm in Sources */,\n\t\t\t\t19CA3B1362DA1810EFB9E88C070B0610 /* RCTFileRequestHandler.mm in Sources */,\n\t\t\t\tC5875E99005BE017DE24E9F217EA362F /* RCTHTTPRequestHandler.mm in Sources */,\n\t\t\t\t09D436AE529D72CDC3C5268A5EFA9903 /* RCTNetworking.mm in Sources */,\n\t\t\t\t7C5E0AA1A0D766AEFDB5C3F5FF6942F9 /* RCTNetworkPlugins.mm in Sources */,\n\t\t\t\t8A79A8939884686638CEF48F3434E6AE /* RCTNetworkTask.mm in Sources */,\n\t\t\t\t68AADA5DEBA7F22FBDA95B379E595DB4 /* React-RCTNetwork-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tB85C4FF0078BD4F65D0B97C954FCA723 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t126FD381EC013EB7F76745BF6B3959FF /* AtFork.cpp in Sources */,\n\t\t\t\tF689FBD38D86423A5C0CA8860800DB03 /* CacheLocality.cpp in Sources */,\n\t\t\t\t27BEF09F1B06C91F5C15ABC5294F5A05 /* Conv.cpp in Sources */,\n\t\t\t\t0FEE31C3F9AD01261144C17B9456649D /* CString.cpp in Sources */,\n\t\t\t\t6DE9B9D9006DC5CA4ECA2D53AACB958C /* Demangle.cpp in Sources */,\n\t\t\t\t7C0832F738F3B45D9B194C3729757621 /* dynamic.cpp in Sources */,\n\t\t\t\t31210B5DC141C8A8CD84829A977225C2 /* Exception.cpp in Sources */,\n\t\t\t\tA01DF6EC80AEF728DCC406662A246C8C /* F14Table.cpp in Sources */,\n\t\t\t\tA4A4022B861D7CB000B2E7AD4ADAF9CA /* FileUtil.cpp in Sources */,\n\t\t\t\tAB4EFCE36686D94BCDFA88932177E82D /* FileUtilDetail.cpp in Sources */,\n\t\t\t\t8446DCAC58446356C7F6D58717A0B41C /* Format.cpp in Sources */,\n\t\t\t\t3EE52474DA38D7BC3D6AD0E51F15EBE0 /* Futex.cpp in Sources */,\n\t\t\t\t12F715ECB2D5A07ABA04F56405B1F80E /* json.cpp in Sources */,\n\t\t\t\tC536D1DF09153CABFB88C9BDA95EAA1E /* json_pointer.cpp in Sources */,\n\t\t\t\tED39B921713470029BD17D4E33380B52 /* Malloc.cpp in Sources */,\n\t\t\t\t77D525A44C69C742FB01F240990E6057 /* MallocImpl.cpp in Sources */,\n\t\t\t\t272FBEB7CB6CF2763CAC1A880569A587 /* NetOps.cpp in Sources */,\n\t\t\t\t23FE66BD7B87FE4B286A4773B14F1309 /* ParkingLot.cpp in Sources */,\n\t\t\t\t86C2CD9FB54FB1F2AA9CF4F3D84578E4 /* RCT-Folly-dummy.m in Sources */,\n\t\t\t\t11AB7A2E0F4DA784CFD4F91F3B078693 /* SafeAssert.cpp in Sources */,\n\t\t\t\t49D3466638B3E08EDC8AD67760E4DFF7 /* SanitizeThread.cpp in Sources */,\n\t\t\t\tF97D444DBAEAF3A5C876EEFA7FBA1A44 /* ScopeGuard.cpp in Sources */,\n\t\t\t\t20C78373363E4FE8FD4F47D5BA774E31 /* SharedMutex.cpp in Sources */,\n\t\t\t\tF54F56CC1E8D4C92243DDFCC50ADF87B /* SplitStringSimd.cpp in Sources */,\n\t\t\t\t33B60CFA904F8D641ECC43A55E9EAEAD /* SpookyHashV2.cpp in Sources */,\n\t\t\t\tEB8D31492F4B85D40BA5EA1861C0742B /* String.cpp in Sources */,\n\t\t\t\tA8B268A6AD50300155466F4EBFE5220B /* SysUio.cpp in Sources */,\n\t\t\t\t73AA961A1CF8EC1B0DDF4D53963928FB /* ThreadId.cpp in Sources */,\n\t\t\t\t1161007E9F6AE05B1C1F1911C7E44E76 /* ToAscii.cpp in Sources */,\n\t\t\t\t595CFBAE163B26652CF24E4EC2D1CF08 /* Unicode.cpp in Sources */,\n\t\t\t\t7C4B2259B1758C2D9AE4D51C5762E6F1 /* UniqueInstance.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tBB8C3A27E7A75C4EA178CD713C13DB06 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tF8E1AB2A19BB2FCCD643BFF425B2DA3A /* ExecutionContext.cpp in Sources */,\n\t\t\t\t173E5B38A957B127E5311171245424B2 /* ExecutionContextManager.cpp in Sources */,\n\t\t\t\tBEE20927650F0E34B770955423009032 /* FallbackRuntimeAgentDelegate.cpp in Sources */,\n\t\t\t\t63F74B9371E02FCFFD3A99BB3244D79D /* InspectorFlags.cpp in Sources */,\n\t\t\t\t1315D3EE3476373DEAB746B56511B323 /* InspectorInterfaces.cpp in Sources */,\n\t\t\t\t0260211AC75157F22C8A580DB42FCBD2 /* InspectorPackagerConnection.cpp in Sources */,\n\t\t\t\t799DB343D6D2A06C4860A8F11EC37FD1 /* InspectorUtilities.cpp in Sources */,\n\t\t\t\t48E2241DFAEE52BEE4D2F3D2C44C5ABD /* InstanceAgent.cpp in Sources */,\n\t\t\t\tFBD08445396B14C26414793EBE1D352D /* InstanceTarget.cpp in Sources */,\n\t\t\t\t611F097A4869D5565DF7C9B9354D8D0B /* PageAgent.cpp in Sources */,\n\t\t\t\t865103DABCB9C2CA4DA86FE8311B4AFC /* PageTarget.cpp in Sources */,\n\t\t\t\tC828B700D5250C25780C5E58917B34B4 /* Parsing.cpp in Sources */,\n\t\t\t\tD39F47151D6CAFF00BA7EA53C31DEFA8 /* React-jsinspector-dummy.m in Sources */,\n\t\t\t\t32CB16366592B859A428ECFEFEEA5072 /* RuntimeAgent.cpp in Sources */,\n\t\t\t\t62444E4A9DF335C2943D6864448533D4 /* RuntimeTarget.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tBC9D5D34749A7A7BA7B3E8BAA001423B /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1AA0576DF9AF85EFA7E299D94B5C3B82 /* MapBuffer.cpp in Sources */,\n\t\t\t\t04DA5067488F0CEF42FA792DB385DE48 /* MapBufferBuilder.cpp in Sources */,\n\t\t\t\t5BCDE01BA0D17F0DAD52430823D76AE3 /* React-Mapbuffer-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC1CCF5380F13156FD54A244ED552853A /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t13691F404B16F303025DBD6AB3558377 /* React-debug-dummy.m in Sources */,\n\t\t\t\t1870A74C16D312C74C2956A5EDBFFA89 /* react_native_assert.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC28D2750CFD2016BEE211A824D3BDCE3 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t696574E499A1754A5256C14C2130648B /* AccessibilityProps.cpp in Sources */,\n\t\t\t\t5E57BD5B12A2E5D8A4784FF8838DE6F7 /* AsynchronousEventBeat.cpp in Sources */,\n\t\t\t\t3C062861BE19C56482F00235234E3774 /* AttributedString.cpp in Sources */,\n\t\t\t\t560154C7130C73C57C3296EBCA35D2AE /* AttributedStringBox.cpp in Sources */,\n\t\t\t\tB79CBEB0DF0D5B2BB1CA370C45ED444B /* BaseTextProps.cpp in Sources */,\n\t\t\t\t0FBE1DE34BDFE9B0C85542DEB581D4B6 /* BaseTextShadowNode.cpp in Sources */,\n\t\t\t\tE6018F88579345128C47ABB20076E368 /* BaseTouch.cpp in Sources */,\n\t\t\t\tA62607B1613E845DC2045E01320BCFBE /* BaseViewEventEmitter.cpp in Sources */,\n\t\t\t\t59979756F484B99D5385635F11BD5882 /* BaseViewProps.cpp in Sources */,\n\t\t\t\t2E9BC3BAD893393322285BF3C0382710 /* BatchedEventQueue.cpp in Sources */,\n\t\t\t\tC3A9C328C82327A71B8E84B9D9953642 /* bindingUtils.cpp in Sources */,\n\t\t\t\t2629FBFD880EC26BC47A0CBDE2C88230 /* ComponentDescriptor.cpp in Sources */,\n\t\t\t\tC6928A6A1531FA166407A1A84E0D76D8 /* ComponentDescriptorProviderRegistry.cpp in Sources */,\n\t\t\t\t5C19BB5F6F8D75D7F453899B49714925 /* ComponentDescriptorRegistry.cpp in Sources */,\n\t\t\t\t8E1B5E2097D0875A90955BF49D724F19 /* ComponentDescriptors.cpp in Sources */,\n\t\t\t\t4BD0C3A0B27003C1E207962093B4CA8C /* componentNameByReactViewName.cpp in Sources */,\n\t\t\t\t4BD9752E8ECC57A539310794E73FE821 /* Differentiator.cpp in Sources */,\n\t\t\t\tF03496F8445E3AACE9451043A837CADE /* DynamicPropsUtilities.cpp in Sources */,\n\t\t\t\t77DF418FF614BFB9681632ED6F31C37C /* EventBeat.cpp in Sources */,\n\t\t\t\t402C44DF036C52575614FBD787E15482 /* EventDispatcher.cpp in Sources */,\n\t\t\t\tB8E580ED62C6E906A4E12DF1A29A578A /* EventEmitter.cpp in Sources */,\n\t\t\t\tDDEB7BAACD5EDCC03E4CC411477A9161 /* EventEmitters.cpp in Sources */,\n\t\t\t\tADB44688E69516386D389D1DFD996878 /* EventListener.cpp in Sources */,\n\t\t\t\t63E0D62908E04B6775049890FBFAB50C /* EventLogger.cpp in Sources */,\n\t\t\t\t7DEA6D0B866F977377D21AFFAD5E2745 /* EventQueue.cpp in Sources */,\n\t\t\t\t7556CD97341C849DE32E85BAC75540C7 /* EventQueueProcessor.cpp in Sources */,\n\t\t\t\t62DE40C34FB60729BBE1B86AC6E785F3 /* EventTarget.cpp in Sources */,\n\t\t\t\t86D02F0FB4C9CBB82EC56980E53B40A3 /* ImageRequest.cpp in Sources */,\n\t\t\t\tD1BBFFF4257883AE32ED7139FD296BE6 /* ImageResponse.cpp in Sources */,\n\t\t\t\tF52BD1C855995DB98A32185DB7BE9145 /* ImageResponseObserverCoordinator.cpp in Sources */,\n\t\t\t\t908691D6E6A6240D9BC651336C71B697 /* ImageTelemetry.cpp in Sources */,\n\t\t\t\t3C38C4F44AE4F93F0E9A51E07978DA24 /* InputAccessoryShadowNode.cpp in Sources */,\n\t\t\t\tFE9A7BCB54E09D6B3715DF452B959454 /* InstanceHandle.cpp in Sources */,\n\t\t\t\tCA842D589D81256002BBC46FAEDD0DC2 /* LayoutableShadowNode.cpp in Sources */,\n\t\t\t\t72A0C6D8AACB0161DD9A9B7B9BD3AB0C /* LayoutAnimationDriver.cpp in Sources */,\n\t\t\t\t6335D95DB076B946861FDF0B6504F01F /* LayoutAnimationKeyFrameManager.cpp in Sources */,\n\t\t\t\tA67253AF093EFDC09F0995BC70346F69 /* LayoutConstraints.cpp in Sources */,\n\t\t\t\t24707196E335E65B5121B91C0FD70449 /* LayoutMetrics.cpp in Sources */,\n\t\t\t\tEB135E9D630C14745D6176C4C75F6E68 /* LeakChecker.cpp in Sources */,\n\t\t\t\tDA8147A7DA1E5F9AB6671763701F2FEF /* LegacyViewManagerInteropComponentDescriptor.mm in Sources */,\n\t\t\t\t8CB4AD3BD8F8733099DBD330A38BF9BD /* LegacyViewManagerInteropShadowNode.cpp in Sources */,\n\t\t\t\t3882ECE408421957CEFD2A0225E9E697 /* LegacyViewManagerInteropState.mm in Sources */,\n\t\t\t\tFF54B55BA08CEBF4015B4B981EEB17F2 /* LegacyViewManagerInteropViewEventEmitter.cpp in Sources */,\n\t\t\t\t76AE3689066A97D1B232A3FAB86C2A54 /* LegacyViewManagerInteropViewProps.cpp in Sources */,\n\t\t\t\t81C6BB24D1610AAA396418710B52389B /* ModalHostViewShadowNode.cpp in Sources */,\n\t\t\t\tC429AED5A28ED5CED26E118A328A138C /* ModalHostViewState.cpp in Sources */,\n\t\t\t\tB32A5364142E8C32D36579A8084F970C /* MountingCoordinator.cpp in Sources */,\n\t\t\t\t4D9164B681F2EA242314F90B395F768B /* MountingTransaction.cpp in Sources */,\n\t\t\t\t7A85844B8ABB2A92B190EC2C45988C25 /* NativeComponentRegistryBinding.cpp in Sources */,\n\t\t\t\t88730960BF591557697D68FC435C89D8 /* ParagraphAttributes.cpp in Sources */,\n\t\t\t\t2EF5DEA6EC39762BEF76A15B2340FABD /* ParagraphEventEmitter.cpp in Sources */,\n\t\t\t\tD0F6F87BD68C9516D0D0142646B8C905 /* ParagraphLayoutManager.cpp in Sources */,\n\t\t\t\t429C7D697593A320F8A70F5357D97BB7 /* ParagraphProps.cpp in Sources */,\n\t\t\t\tBFDD5C42EECE46A1E9056A6A35207FA5 /* ParagraphShadowNode.cpp in Sources */,\n\t\t\t\t535E4E67E1D010242C7EF421F212EEC3 /* ParagraphState.cpp in Sources */,\n\t\t\t\tE298A4C07A8B16A83998C5FFCCD88905 /* PointerEvent.cpp in Sources */,\n\t\t\t\t546A1106CD03E7BD183BB275B5577D63 /* PointerEventsProcessor.cpp in Sources */,\n\t\t\t\tEA48224CDE82427964F18FAEB2358A26 /* PointerHoverTracker.cpp in Sources */,\n\t\t\t\tD384DF0C480D44CCBCA312A430085AE7 /* Props.cpp in Sources */,\n\t\t\t\t006EBCAFA23C3844F04C940A4F313410 /* Props.cpp in Sources */,\n\t\t\t\t0A1065F756F05AE906969E13DD4A1346 /* RawEvent.cpp in Sources */,\n\t\t\t\t1D24AD6815FB29F4B8A6C10D6E9101F8 /* RawProps.cpp in Sources */,\n\t\t\t\t4383BE16C5EE46F875BF5D8A39EDBC44 /* RawPropsKey.cpp in Sources */,\n\t\t\t\tFF172C3FABCC4E7394876885F64E36D4 /* RawPropsKeyMap.cpp in Sources */,\n\t\t\t\t80F7C5E7A9B1BD9CA80E7AC9692EE98A /* RawPropsParser.cpp in Sources */,\n\t\t\t\tC8FA2EB937D2445F1741FAA0ACBA9FD7 /* RawTextProps.cpp in Sources */,\n\t\t\t\tD31B9E80DB2BF39407F507F3B5723506 /* RawTextShadowNode.cpp in Sources */,\n\t\t\t\t45D9ECFD2F6AE5C476BF788B807F3F71 /* RawValue.cpp in Sources */,\n\t\t\t\t86E509A8309D2C829F649CA6E17F8856 /* RCTAttributedTextUtils.mm in Sources */,\n\t\t\t\tDFE0FDDAB89D558D7E5C4FE84CE8A831 /* RCTFontUtils.mm in Sources */,\n\t\t\t\t536E2F0CD05BB0CA231C990AC198EC81 /* RCTLegacyViewManagerInteropCoordinator.mm in Sources */,\n\t\t\t\t79BC0736343C7F0BB40CF262A7093547 /* RCTTextLayoutManager.mm in Sources */,\n\t\t\t\tE15E8C2E4FA6E09EBE76FB1CFD27499C /* React-Fabric-dummy.m in Sources */,\n\t\t\t\tBC6FBBC737C9E7B5B1DFA21DF4EB9A0B /* RootProps.cpp in Sources */,\n\t\t\t\tCB16BF4D09FCFAD2BA7261CBE4357028 /* RootShadowNode.cpp in Sources */,\n\t\t\t\tD1FA44DE7190AAFE62E2857974D5BE69 /* SafeAreaViewShadowNode.cpp in Sources */,\n\t\t\t\tD8B93E14456B42603AE3567F8E2A37E0 /* SafeAreaViewState.cpp in Sources */,\n\t\t\t\tE936778E2B61A9184F53E9FC6CF0D106 /* Scheduler.cpp in Sources */,\n\t\t\t\t32BE4A83D48CA291030133CE99AEF6E2 /* ScrollViewEventEmitter.cpp in Sources */,\n\t\t\t\t948EF6B8544D6C95F6864DB1E234052A /* ScrollViewProps.cpp in Sources */,\n\t\t\t\t492D93F6A4D1DB5878AEB8AAC86F52F8 /* ScrollViewShadowNode.cpp in Sources */,\n\t\t\t\tEF4FE23B38609E50DF2186EAA3475E5A /* ScrollViewState.cpp in Sources */,\n\t\t\t\tBFCA21C2893743BB4DA5287E067E2CE8 /* Sealable.cpp in Sources */,\n\t\t\t\tAE5CCCBE05510A4562480531D6A64515 /* ShadowNode.cpp in Sources */,\n\t\t\t\tDD368E98EC732E72C2F1A4E3DAD73864 /* ShadowNodeFamily.cpp in Sources */,\n\t\t\t\t6427E7DD7ABD9B4675A8B29906B1CF26 /* ShadowNodeFragment.cpp in Sources */,\n\t\t\t\t3105C7328DF6EBCA7C0B524D18848E9D /* ShadowNodes.cpp in Sources */,\n\t\t\t\t08DB5A93E58A2B2DB9557F5578E835D2 /* ShadowNodeTraits.cpp in Sources */,\n\t\t\t\t057F908327F36BAAE35535CCD3AF5CD1 /* ShadowTree.cpp in Sources */,\n\t\t\t\tA4B4874755DEF120B2A86C12140EE4D5 /* ShadowTreeRegistry.cpp in Sources */,\n\t\t\t\tCCE444B1936ACA47326F4959A4A1172B /* ShadowTreeRevision.cpp in Sources */,\n\t\t\t\tEDE01A5FA2DF59BC41E22117D6B82708 /* ShadowView.cpp in Sources */,\n\t\t\t\t8BAF82EA2FC8B67DBAE9B4A39E32ED85 /* ShadowViewMutation.cpp in Sources */,\n\t\t\t\t0F9E6E4C19935E040E25D1CF43DF474E /* State.cpp in Sources */,\n\t\t\t\t074543D7B648948577CE19FF74825D59 /* States.cpp in Sources */,\n\t\t\t\t169D881DA6F98A74ADBAB85239E51495 /* StateUpdate.cpp in Sources */,\n\t\t\t\t43E016CA6E6F77F9C2291E94022B6221 /* stubs.cpp in Sources */,\n\t\t\t\tD307D309F89DA135DDA8A239255D00ED /* StubView.cpp in Sources */,\n\t\t\t\t39B0694CF79D9D40DA4409C513304D3C /* StubViewTree.cpp in Sources */,\n\t\t\t\t7848F7B01636FD30500F733C3953D042 /* SurfaceHandler.cpp in Sources */,\n\t\t\t\tB1E3D66107E149510D1AF628543FED56 /* SurfaceManager.cpp in Sources */,\n\t\t\t\tF242AC86651355EE9C81409CB11CF29E /* SurfaceRegistryBinding.cpp in Sources */,\n\t\t\t\t71B25172A6FBB06AE6F0AC803A1BB03F /* SurfaceTelemetry.cpp in Sources */,\n\t\t\t\t2FA70C774952798EBD8ECDFAAE8D0EF1 /* SynchronousEventBeat.cpp in Sources */,\n\t\t\t\tB8C3FEE7D7B3755A0BF1C463308725ED /* TelemetryController.cpp in Sources */,\n\t\t\t\t0AE3B42013A6EC4A1BDE21E82E39800F /* TextAttributes.cpp in Sources */,\n\t\t\t\t482FA3433C45953974AC26E96444DCD6 /* TextInputEventEmitter.cpp in Sources */,\n\t\t\t\tE36699C263918D6CD3CC8D53D29B1CC0 /* TextInputProps.cpp in Sources */,\n\t\t\t\t89061AAC16A9D8755BC29388594191C0 /* TextInputShadowNode.cpp in Sources */,\n\t\t\t\tCCE6526143D52DD765D5B173B8EFB74D /* TextInputState.cpp in Sources */,\n\t\t\t\t834FA1181483059D08BB31BF631CB418 /* TextLayoutManager.mm in Sources */,\n\t\t\t\t4ABFE864F920B579C3AADCD9165F0346 /* TextMeasureCache.cpp in Sources */,\n\t\t\t\t8DB2904D172809FA82F53D6DACB6770C /* TextProps.cpp in Sources */,\n\t\t\t\t1A4E0BB39256B618590C38FE0F367BE7 /* TextShadowNode.cpp in Sources */,\n\t\t\t\t6BC9C5D894D55A6667A506FC47D1F83A /* TouchEvent.cpp in Sources */,\n\t\t\t\tF3175308C1003660267E09A833D010FB /* TouchEventEmitter.cpp in Sources */,\n\t\t\t\tC9CB9FE580283AD17838DF762300199B /* TransactionTelemetry.cpp in Sources */,\n\t\t\t\t4986BE8FF75971161CE4825DE3E4F07B /* UIManager.cpp in Sources */,\n\t\t\t\tB93CE3FE617101FFA26C79EF78C145C4 /* UIManagerBinding.cpp in Sources */,\n\t\t\t\tEFDA386A564A1209D1F07193AE52EE6A /* UnbatchedEventQueue.cpp in Sources */,\n\t\t\t\t98FF24FCA7950C2F975BB4096B9B26E7 /* UnimplementedViewComponentDescriptor.cpp in Sources */,\n\t\t\t\t0C0B183FCA29DC956E1A1B894DE839D8 /* UnimplementedViewProps.cpp in Sources */,\n\t\t\t\t0BE3BABD266439B755BB51D2E6522C93 /* UnimplementedViewShadowNode.cpp in Sources */,\n\t\t\t\tABC708190BDCBD59B0B4A86CE919BA1D /* UnstableLegacyViewManagerAutomaticComponentDescriptor.cpp in Sources */,\n\t\t\t\tB20853E1492882F9DFBA5AEE732230CC /* UnstableLegacyViewManagerAutomaticShadowNode.cpp in Sources */,\n\t\t\t\t5FE63D5DEED1E0D7E9211C479F3DBBC8 /* utils.cpp in Sources */,\n\t\t\t\t92F9C861E9C7D42BF5CBED7EBFC77D72 /* ValueFactoryEventPayload.cpp in Sources */,\n\t\t\t\t6BA23844D9DCDD1AEF37DB5060151CAF /* ViewShadowNode.cpp in Sources */,\n\t\t\t\t32D32237A0CEB8E068046F1CF42E4E8B /* WeakFamilyRegistry.cpp in Sources */,\n\t\t\t\tF54989E7C3ECBAA533AB0403B431A6DD /* YogaLayoutableShadowNode.cpp in Sources */,\n\t\t\t\t2EA1CF569CEB1BE9F7565DA20EAA2F3E /* YogaStylableProps.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC36899A216C6A2B189B53F2609162A18 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tDE955502F25186EF5AD32CC67482739B /* AbsoluteLayout.cpp in Sources */,\n\t\t\t\t7C563026B579F20E0D207D038BBB1E5E /* AssertFatal.cpp in Sources */,\n\t\t\t\tFEEC6DC9DB1C67C87F3FAAA274B199CC /* Baseline.cpp in Sources */,\n\t\t\t\tDC04153187DA66719B11FFBCED9AEA12 /* Cache.cpp in Sources */,\n\t\t\t\t9F22899D6776281D1CD11358A63C7D31 /* CalculateLayout.cpp in Sources */,\n\t\t\t\tCA684AA0DA0CFE870A28282C20B5585D /* Config.cpp in Sources */,\n\t\t\t\t0A375EA2429F646CCA545A8C0D177863 /* event.cpp in Sources */,\n\t\t\t\tDECBCF943B2007810250A795467B4DB6 /* FlexLine.cpp in Sources */,\n\t\t\t\tB2912AFCB904C759106782657EFDC5C9 /* LayoutResults.cpp in Sources */,\n\t\t\t\t907EB0B80C8BE1DA8C300AA92CB364A0 /* Log.cpp in Sources */,\n\t\t\t\t54B2697DDF8B682EDCF00390B7027AD0 /* Node.cpp in Sources */,\n\t\t\t\tBD9F5BFFA46041D4E554AC866B630F26 /* PixelGrid.cpp in Sources */,\n\t\t\t\tB05F1E0A450430FCFB47781C9C7B7E7C /* YGConfig.cpp in Sources */,\n\t\t\t\t32B14C8CE62B0F19D8FA1206C467111D /* YGEnums.cpp in Sources */,\n\t\t\t\tE820B7A84455768483923BE4CB7E895C /* YGNode.cpp in Sources */,\n\t\t\t\tA2DABF69571289A07D4949D5B6B732B1 /* YGNodeLayout.cpp in Sources */,\n\t\t\t\t0663905B64268796E97AEE20D0DF5F57 /* YGNodeStyle.cpp in Sources */,\n\t\t\t\t5DB693C55C2912ACE4C601D9D4397DB9 /* YGPixelGrid.cpp in Sources */,\n\t\t\t\t357660135E7900222582CBEE62180032 /* YGValue.cpp in Sources */,\n\t\t\t\tB6ED23A64D2504CDB6B64CF944092AED /* Yoga-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tCE36F0369ED0C62B7A92EE0A3470F4D6 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC4730E88D130D0B7B7B6AD61C046C45D /* PlatformRunLoopObserver.mm in Sources */,\n\t\t\t\t6271EFFBCD61B9CE0F00F1B52F46BCB5 /* RCTAccessibilityElement.mm in Sources */,\n\t\t\t\tE6EB7B76986AE0D3873CA9441B399E76 /* RCTActivityIndicatorViewComponentView.mm in Sources */,\n\t\t\t\t45F785E501BFD13E844D382A1F001EB9 /* RCTComponentViewFactory.mm in Sources */,\n\t\t\t\tE6B3C3E594F4BF128654E22C4B19807C /* RCTComponentViewRegistry.mm in Sources */,\n\t\t\t\t4BF3BD19BA78CB09A0B90727F60C8EBC /* RCTDebuggingOverlayComponentView.mm in Sources */,\n\t\t\t\t374767F9EA7457BFA37FF3114B4950F9 /* RCTEnhancedScrollView.mm in Sources */,\n\t\t\t\t026D5B5D71D8CFF7B02A6F9E1EEA6B5D /* RCTFabricComponentsPlugins.mm in Sources */,\n\t\t\t\t620070F4FB15245C68AB13C535847EE7 /* RCTFabricModalHostViewController.mm in Sources */,\n\t\t\t\t7DF2C6E7CD4B2614333080F4D18991F9 /* RCTFabricSurface.mm in Sources */,\n\t\t\t\tAF8A57DD74A29F065EC08C1171432681 /* RCTGenericDelegateSplitter.mm in Sources */,\n\t\t\t\t919E20B121E45FB70B18B13A38BD4371 /* RCTImageComponentView.mm in Sources */,\n\t\t\t\t1D3F9F242ECCE36DDFD697B08B9C28E2 /* RCTImageResponseObserverProxy.mm in Sources */,\n\t\t\t\t552D684A410FEFD68CFC05695C8A7025 /* RCTInputAccessoryComponentView.mm in Sources */,\n\t\t\t\t20EAE28B44F5C9DE96EC1A6F88B62226 /* RCTInputAccessoryContentView.mm in Sources */,\n\t\t\t\t755285DD5B651A2374659E51434CAD11 /* RCTLegacyViewManagerInteropComponentView.mm in Sources */,\n\t\t\t\tF7E4395AE1128CA640E2737A237DA346 /* RCTLegacyViewManagerInteropCoordinatorAdapter.mm in Sources */,\n\t\t\t\t12F481159DC1895DF2BC2595AF7AF275 /* RCTLocalizationProvider.mm in Sources */,\n\t\t\t\tA7F1FBD3434006B07373E5777C0EC0EB /* RCTModalHostViewComponentView.mm in Sources */,\n\t\t\t\tDAA86EAE8591A539EC9709B9AC8E4881 /* RCTMountingManager.mm in Sources */,\n\t\t\t\t58733DF826D51EAEC7CA3324769E06AA /* RCTMountingTransactionObserverCoordinator.mm in Sources */,\n\t\t\t\t82ECAFB8B430AB7AEE8A186E85BB87F2 /* RCTParagraphComponentAccessibilityProvider.mm in Sources */,\n\t\t\t\t198A3B5F43844F6B78F0A7BC96A9EDE7 /* RCTParagraphComponentView.mm in Sources */,\n\t\t\t\t9B71EE8ECFF2BAFFC391738C754A5A7B /* RCTPullToRefreshViewComponentView.mm in Sources */,\n\t\t\t\tE30137F6C7AA4B42A4E8B0069F36DD63 /* RCTReactTaggedView.mm in Sources */,\n\t\t\t\t3E7B0F82566D1D91383B364B52BFCBEF /* RCTRootComponentView.mm in Sources */,\n\t\t\t\t1EC4F1FA41C153E536CF6B69DAB893B2 /* RCTSafeAreaViewComponentView.mm in Sources */,\n\t\t\t\tE38C5A95C3B86DE8DF5D85ECE0855055 /* RCTScheduler.mm in Sources */,\n\t\t\t\t4AC55AF43A4C075565677B3718D2FB32 /* RCTScrollViewComponentView.mm in Sources */,\n\t\t\t\tCF9190469C904527AF29EE59E32447EC /* RCTSurfacePointerHandler.mm in Sources */,\n\t\t\t\tF05DECC41DE2DA7BAE020C3C695C3179 /* RCTSurfacePresenter.mm in Sources */,\n\t\t\t\t16769F3466BB96E91499BDFF33A8DFB0 /* RCTSurfacePresenterBridgeAdapter.mm in Sources */,\n\t\t\t\t8B3013D13CA5D7852BCEC3F9A0A0D22E /* RCTSurfaceRegistry.mm in Sources */,\n\t\t\t\tAB87442CD013BE84D9211A77BE390F9D /* RCTSurfaceTouchHandler.mm in Sources */,\n\t\t\t\t3B0BCF5D40456442075E087910B65BE1 /* RCTSwitchComponentView.mm in Sources */,\n\t\t\t\t8E85CB53CC69D87235AB1A5051D02DA5 /* RCTTextInputComponentView.mm in Sources */,\n\t\t\t\tBBB7CD52BA8A4BD1CA13E8607E69D734 /* RCTTextInputUtils.mm in Sources */,\n\t\t\t\t701973358846CBEDD827355528F51546 /* RCTThirdPartyFabricComponentsProvider.mm in Sources */,\n\t\t\t\tD1C4AA3D4A4063C85BF05DF7F95FDAB5 /* RCTUnimplementedNativeComponentView.mm in Sources */,\n\t\t\t\tD7C36B197E1986F1A8811387DD9A2200 /* RCTUnimplementedViewComponentView.mm in Sources */,\n\t\t\t\t146AB77B241BF6C67DBDD63E5634067A /* RCTViewComponentView.mm in Sources */,\n\t\t\t\t6869C0A56BFE37D366E0622A737744A8 /* React-RCTFabric-dummy.m in Sources */,\n\t\t\t\t32BEF79AE336EE5C0463C825D845D74E /* UIView+ComponentViewProtocol.mm in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD4CC0275F39BE4206E4ACF900B008845 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9307396B4ADA5CC798FF0884900FC572 /* HermesInstance.cpp in Sources */,\n\t\t\t\t6068983DDD1A40F8FF987CE6E0497CA0 /* React-RuntimeHermes-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD7947EFE7F3FB4DC3C5D40A004FDCB6B /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t26D3F78DBA25B5DB3A22E10497AFF723 /* ImageManager.mm in Sources */,\n\t\t\t\t083E2C962EA0D5E14FEA17B782E3AF09 /* RCTImageManager.mm in Sources */,\n\t\t\t\tF9FBD5F032C5E741A03EB97EB74867A9 /* RCTSyncImageManager.mm in Sources */,\n\t\t\t\t21923AF5A501E8D2C01033B9DCACBBAE /* React-ImageManager-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD920D245547BEED30EC5DBD60571CFCE /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tDA550251907D606E20F2DED4C4EE56AC /* Pods-WatermelonTester-WatermelonTesterTests-dummy.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tD9A2B97E596F0A5364FC6BDF8ACC69ED /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t932C4B72A39D5E4B28B11735AEC65689 /* React-featureflags-dummy.m in Sources */,\n\t\t\t\t49164C701172F6D49BDA9C836C294A82 /* ReactNativeFeatureFlags.cpp in Sources */,\n\t\t\t\tB62B1C3E71BEAC7656E3F16525E73238 /* ReactNativeFeatureFlagsAccessor.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tE808ECED1A5E1EE47280499780E79451 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6E04193FE94D6D98EA1599FE3589B5C5 /* bignum.cc in Sources */,\n\t\t\t\tE99B6103EBDB6840C784DAD2CED495E7 /* bignum-dtoa.cc in Sources */,\n\t\t\t\t0F406AD78F915630431DD8A720AEC4D7 /* cached-powers.cc in Sources */,\n\t\t\t\t454DEEF08195B90C4524D609D9FC08E7 /* diy-fp.cc in Sources */,\n\t\t\t\tE71D9D6FB89A2C9AE52FE7C5A3C475C5 /* double-conversion.cc in Sources */,\n\t\t\t\t97787CD6E0C072679EE338808F2F63AF /* DoubleConversion-dummy.m in Sources */,\n\t\t\t\t89838E50A5FAC6006B7986F7130E99C7 /* fast-dtoa.cc in Sources */,\n\t\t\t\t4475E12EB41862981DF3C41487CCB246 /* fixed-dtoa.cc in Sources */,\n\t\t\t\tC1A8B83142B9F3C7DC02D5E53BA45AF8 /* strtod.cc in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tECB360B46269645988A5FEF752B07CE1 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t36CBEE8C52A61FE395F052C9B267A290 /* NSRunLoop+SRWebSocket.m in Sources */,\n\t\t\t\tC214AD1E1FFAAD2EBCA4A756CCA4A07D /* NSURLRequest+SRWebSocket.m in Sources */,\n\t\t\t\t81DA215A55827E4BA0DF542A3DB8E001 /* SocketRocket-dummy.m in Sources */,\n\t\t\t\t8964DA67716421A13752C604BC9590A2 /* SRConstants.m in Sources */,\n\t\t\t\t09D9EE11D46CB94FAFBB54DFAED6C44E /* SRDelegateController.m in Sources */,\n\t\t\t\tC95402DE1ECEBACD3DDE1B93F5D50453 /* SRError.m in Sources */,\n\t\t\t\tEA929F09DE084CC45B3450DC9D78B195 /* SRHash.m in Sources */,\n\t\t\t\t8757125933F9FB281B0CA8D92413FD2A /* SRHTTPConnectMessage.m in Sources */,\n\t\t\t\t7E4AC7154C2CE9CDF1093FA4152CB996 /* SRIOConsumer.m in Sources */,\n\t\t\t\t5557EE5C694F55EA80C743211988494B /* SRIOConsumerPool.m in Sources */,\n\t\t\t\tB3D418B8ABCCAC66082A0DD9C03B9628 /* SRLog.m in Sources */,\n\t\t\t\tBA893830D9B18AEF81EDECAEECF9F495 /* SRMutex.m in Sources */,\n\t\t\t\t224015C78F407E1AF6FB0BFA6A88B60A /* SRPinningSecurityPolicy.m in Sources */,\n\t\t\t\t74C33EA812E975499F57B54E5A3793CB /* SRProxyConnect.m in Sources */,\n\t\t\t\t2E73C529F9D90E24C3A1865022C1349F /* SRRandom.m in Sources */,\n\t\t\t\t82A49A43173CFB3AAB84B2A4DBFAB89D /* SRRunLoopThread.m in Sources */,\n\t\t\t\tA42C6A17F4D0042FBC3D655E31C73C15 /* SRSecurityPolicy.m in Sources */,\n\t\t\t\t3DE173A4880B25D444AEB95AA2B085C0 /* SRSIMDHelpers.m in Sources */,\n\t\t\t\t191AF4701921B0FFF6BBFE9DEA53594C /* SRURLUtilities.m in Sources */,\n\t\t\t\tD7C2C28BD650E3478980431139788E33 /* SRWebSocket.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tFBEB4901EDEA337A12D49832C0F1509A /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tFFB0AD6EF400000E5DB3695E6D232D13 /* Color.cpp in Sources */,\n\t\t\t\t2F026ED16EAEA90F157701D8481A9FAB /* HostPlatformColor.mm in Sources */,\n\t\t\t\tE5BA12AB6988A4F766D4BE419C785092 /* PlatformColorParser.mm in Sources */,\n\t\t\t\tEC8695E06B4FF360C0D7764B5419727F /* RCTPlatformColorUtils.mm in Sources */,\n\t\t\t\t73027B4FD5ADD813B85FBC3D74837FE0 /* React-graphics-dummy.m in Sources */,\n\t\t\t\tEE0C008A89AB0B833235FE60CBDFD831 /* Transform.cpp in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t00631E47E14621AE9402D0DF95F1ADA8 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-graphics\";\n\t\t\ttarget = 4BDD270EACFE5730793AEF0B9BCCBA31 /* React-graphics */;\n\t\t\ttargetProxy = B833B6E10AB7E3C290E1FEF08CB30A4D /* PBXContainerItemProxy */;\n\t\t};\n\t\t0113A1D7CEA7572A46417194D8E8C43D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = Yoga;\n\t\t\ttarget = 2B25F90D819B9ADF2AF2D8733A890333 /* Yoga */;\n\t\t\ttargetProxy = 42FB8544361ABBF9AD8C4C00BE603100 /* PBXContainerItemProxy */;\n\t\t};\n\t\t0128B3961C62E0B77D199FEB5E91876A /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RuntimeApple\";\n\t\t\ttarget = 91D38B18A4E42B1622B83F450706C2F5 /* React-RuntimeApple */;\n\t\t\ttargetProxy = 489C8E3E3F5C65782BA9904E88317584 /* PBXContainerItemProxy */;\n\t\t};\n\t\t01EB13A513D3A65364DA674E0BA7F7E5 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTBlob\";\n\t\t\ttarget = 95D98F901D07557EF7CA38D3F03832C5 /* React-RCTBlob */;\n\t\t\ttargetProxy = EE1123BB0790B159E0219DC27196EAAD /* PBXContainerItemProxy */;\n\t\t};\n\t\t0292965509627A85A8FD7E309BC9D1E6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsi\";\n\t\t\ttarget = FA877ADC442CB19CF61793D234C8B131 /* React-jsi */;\n\t\t\ttargetProxy = 402D782A605F7C3F6A1DF1E51ADD1ACB /* PBXContainerItemProxy */;\n\t\t};\n\t\t029FDFA394268EAD139F31F647DCC156 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Core\";\n\t\t\ttarget = 7ACAA9BE580DD31A5CB9D97C45D9492D /* React-Core */;\n\t\t\ttargetProxy = 77392EDC06BFD0919392085F508634CC /* PBXContainerItemProxy */;\n\t\t};\n\t\t02CCFE27A24A08DAADC1299A08147AF0 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTFabric\";\n\t\t\ttarget = 8DED5282246ABFC24F4460D3066C84A0 /* React-RCTFabric */;\n\t\t\ttargetProxy = EC85AE697848BE48B6F09210FF86EC9D /* PBXContainerItemProxy */;\n\t\t};\n\t\t033916D526C1A889561E0F74D3D0ACCC /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = DoubleConversion;\n\t\t\ttarget = 2AB2EF542954AB1C999E03BFEF8DE806 /* DoubleConversion */;\n\t\t\ttargetProxy = 9B17177FFD8673933D9AE3E550401161 /* PBXContainerItemProxy */;\n\t\t};\n\t\t03760D1433D73CEC24F9E58CB14B1F18 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = fmt;\n\t\t\ttarget = 02B79DFED924FA19CA90EC69614733E1 /* fmt */;\n\t\t\ttargetProxy = 2CABC33625B79BE358899318EC118B55 /* PBXContainerItemProxy */;\n\t\t};\n\t\t04387AA90E58CC1C09497D9FA32A54B4 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = glog;\n\t\t\ttarget = D0EFEFB685D97280256C559792236873 /* glog */;\n\t\t\ttargetProxy = 31F652266E48E74C758B9C69EF3CD90F /* PBXContainerItemProxy */;\n\t\t};\n\t\t05373A03C28AF0BD3A139E9C7F172F96 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-debug\";\n\t\t\ttarget = 0C050E11C4409D3BFAE9CC219C4D6195 /* React-debug */;\n\t\t\ttargetProxy = 97012073F5E77B63FDFB697A4A57C498 /* PBXContainerItemProxy */;\n\t\t};\n\t\t05A4535BB70AF398463F378248BBD162 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = RCTDeprecation;\n\t\t\ttarget = 5211B5AB7B81060AA8E78614DD75D3AB /* RCTDeprecation */;\n\t\t\ttargetProxy = 7396E7BB1E1E864764B1A04E411A22AD /* PBXContainerItemProxy */;\n\t\t};\n\t\t06E63CD166A9DB8EAE8D17835AAAE714 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Fabric\";\n\t\t\ttarget = 50DBAF155FAFB994E067BA8820221EDF /* React-Fabric */;\n\t\t\ttargetProxy = C1DD7823D300707FC9C52212F93B32DA /* PBXContainerItemProxy */;\n\t\t};\n\t\t070075A664C526AA369CFF1C8F480565 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = fmt;\n\t\t\ttarget = 02B79DFED924FA19CA90EC69614733E1 /* fmt */;\n\t\t\ttargetProxy = 33DBC0FBD8A36E91BF0D798BC0FD460F /* PBXContainerItemProxy */;\n\t\t};\n\t\t0717C5A3C0BEAB0160A75C5D66B42470 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = RCTRequired;\n\t\t\ttarget = E7E7CE52C8C68B17224FF8C262D80ABF /* RCTRequired */;\n\t\t\ttargetProxy = AE45C8D28B14130F12EC5C170DA2B7AA /* PBXContainerItemProxy */;\n\t\t};\n\t\t07309250446D5F55252BEAAE50750CF8 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-rendererdebug\";\n\t\t\ttarget = 9F96BF8B7FC28F5CF47242D7A73B11DA /* React-rendererdebug */;\n\t\t\ttargetProxy = D93CC2B32B540A9EB1BD1841FD97DF47 /* PBXContainerItemProxy */;\n\t\t};\n\t\t07705C923CD5F83B049E084E95B356FA /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-callinvoker\";\n\t\t\ttarget = 2681CB7EF647E61F4F9A43029C235607 /* React-callinvoker */;\n\t\t\ttargetProxy = 135C6D27FB0B505651E80CFC705195AB /* PBXContainerItemProxy */;\n\t\t};\n\t\t078D793D92DDA63E03BBEE73F963EED7 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-cxxreact\";\n\t\t\ttarget = 463F41A7E8B252F8AC5024DA1F4AF6DA /* React-cxxreact */;\n\t\t\ttargetProxy = 0DF13E7D33E4641BF3808510F4CD10FD /* PBXContainerItemProxy */;\n\t\t};\n\t\t08937C84140770B35EFCC5226B442C3C /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-NativeModulesApple\";\n\t\t\ttarget = 5807741745EB757C97C09F2D56726BE0 /* React-NativeModulesApple */;\n\t\t\ttargetProxy = EACA86167645B5C3ADBDA0097D75461F /* PBXContainerItemProxy */;\n\t\t};\n\t\t08E1EB80F89F0EB0DD4B2ADE9C460526 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = ReactCommon;\n\t\t\ttarget = B6D5DD49633DFF0657B8C3F08EB3ABA9 /* ReactCommon */;\n\t\t\ttargetProxy = 2FEFCC000DB45DE8C15B1E1827963871 /* PBXContainerItemProxy */;\n\t\t};\n\t\t0947843414EAF9A018C3EFF21E80AEE1 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"RCT-Folly\";\n\t\t\ttarget = EC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */;\n\t\t\ttargetProxy = 338D244FA8653B3233AA255D4D1925CC /* PBXContainerItemProxy */;\n\t\t};\n\t\t09932F9978240BC9960426479302DD99 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = boost;\n\t\t\ttarget = EFEA55B1B776B6EB4B16F363BFE64D1A /* boost */;\n\t\t\ttargetProxy = 944A26AFF7616415AC12303FFE76129E /* PBXContainerItemProxy */;\n\t\t};\n\t\t0A169625F636FE1C73F0208237690740 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Core\";\n\t\t\ttarget = 7ACAA9BE580DD31A5CB9D97C45D9492D /* React-Core */;\n\t\t\ttargetProxy = 3096A1AE919BEDEEAA93EBC59209A823 /* PBXContainerItemProxy */;\n\t\t};\n\t\t0B0B81E7C13C29E62916D264A25EA64B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-cxxreact\";\n\t\t\ttarget = 463F41A7E8B252F8AC5024DA1F4AF6DA /* React-cxxreact */;\n\t\t\ttargetProxy = 6AB1F4BFD6B96C93DA1B7CD8F20A79C1 /* PBXContainerItemProxy */;\n\t\t};\n\t\t0B8F0AF300F008781318143A4023937B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-hermes\";\n\t\t\ttarget = 20F066A71CEA5EECC7463413442F2B77 /* React-hermes */;\n\t\t\ttargetProxy = 528B726925AA1576C46D6FAB03891176 /* PBXContainerItemProxy */;\n\t\t};\n\t\t0BEDBF63C3E4E541C8B0B6D741C05866 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"RCT-Folly\";\n\t\t\ttarget = EC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */;\n\t\t\ttargetProxy = AD65D943B25FB162F127D788B3B7414F /* PBXContainerItemProxy */;\n\t\t};\n\t\t0C2CAC5C2695689B85F032B736C68BB2 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsi\";\n\t\t\ttarget = FA877ADC442CB19CF61793D234C8B131 /* React-jsi */;\n\t\t\ttargetProxy = 6978B0EF9BF761495B5E4F97D979BEB2 /* PBXContainerItemProxy */;\n\t\t};\n\t\t0C5451BA2A75717532FFAD7F482792BE /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTAnimation\";\n\t\t\ttarget = 938CCE22F6C4094B3FB6CF1478579E4B /* React-RCTAnimation */;\n\t\t\ttargetProxy = 437ECCE96742319D859D14A7A0DCC529 /* PBXContainerItemProxy */;\n\t\t};\n\t\t0CF51DBE402DD4D1816769A2AAC680B6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = RCTTypeSafety;\n\t\t\ttarget = D20469A9A1E5CFB26045EAEBE3F88E5E /* RCTTypeSafety */;\n\t\t\ttargetProxy = E77D75EB8A5E3950C1D5870DC0615F3C /* PBXContainerItemProxy */;\n\t\t};\n\t\t0D6352E2424F6FC499B3B35657C6AD1B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = boost;\n\t\t\ttarget = EFEA55B1B776B6EB4B16F363BFE64D1A /* boost */;\n\t\t\ttargetProxy = C2A4DC273F4357B0C430FAA2E640C336 /* PBXContainerItemProxy */;\n\t\t};\n\t\t0E1A0EB88D2733A057A54100BC106B59 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsinspector\";\n\t\t\ttarget = F7D033C4C128EECAA020990641FA985F /* React-jsinspector */;\n\t\t\ttargetProxy = A5B19FE633CD3598242AF5724C8D0208 /* PBXContainerItemProxy */;\n\t\t};\n\t\t0F774A9A211B184E15151EBE1F7117FE /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"RCT-Folly\";\n\t\t\ttarget = EC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */;\n\t\t\ttargetProxy = FA61B1CBE12C5E6B493717A35DCAC02E /* PBXContainerItemProxy */;\n\t\t};\n\t\t0FBC712AF9FD73F622F4DBEC577E97D0 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-featureflags\";\n\t\t\ttarget = 28CE447E6F9C5F0EECC0CDD607D06A24 /* React-featureflags */;\n\t\t\ttargetProxy = A6BA9A6BD8EA1A3C362C27947713ED7A /* PBXContainerItemProxy */;\n\t\t};\n\t\t0FE5A051E0A746490490C86E7859144D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = Yoga;\n\t\t\ttarget = 2B25F90D819B9ADF2AF2D8733A890333 /* Yoga */;\n\t\t\ttargetProxy = 55742B771D95D2D70CE4E7DF35415F5B /* PBXContainerItemProxy */;\n\t\t};\n\t\t1097020EF71A5B0AE4AA8A3C3B539274 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsi\";\n\t\t\ttarget = FA877ADC442CB19CF61793D234C8B131 /* React-jsi */;\n\t\t\ttargetProxy = CE32EDC6F22FAF26BF32FF9864DBF404 /* PBXContainerItemProxy */;\n\t\t};\n\t\t10A2F45C3B581D6E8F38A104C850F7D7 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"hermes-engine\";\n\t\t\ttarget = 985FEA01F314F3C00F0C1E1181E6C4A5 /* hermes-engine */;\n\t\t\ttargetProxy = CFA19FA3F85DE79CCD37BCCD68515599 /* PBXContainerItemProxy */;\n\t\t};\n\t\t1160DC25251A334CDE35D5BE053E7EDF /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsi\";\n\t\t\ttarget = FA877ADC442CB19CF61793D234C8B131 /* React-jsi */;\n\t\t\ttargetProxy = 9B1FF7A4C16CAF1E413DCF4BF011434F /* PBXContainerItemProxy */;\n\t\t};\n\t\t12A0E63E2D9A8A38283E1A96C9BD9771 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-runtimeexecutor\";\n\t\t\ttarget = 54EB12219122432FA744088BC5A680D2 /* React-runtimeexecutor */;\n\t\t\ttargetProxy = 9B4885D4819D4BD1CF3E930B405AAB10 /* PBXContainerItemProxy */;\n\t\t};\n\t\t12DA8B08C376D6BDB2C5EA653BDD2EC0 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsiexecutor\";\n\t\t\ttarget = DA0709CAAD589C6E7963495210438021 /* React-jsiexecutor */;\n\t\t\ttargetProxy = B55F062B69D12DE3FB7C6C27877E9D6C /* PBXContainerItemProxy */;\n\t\t};\n\t\t133D9E2D3816395D8F6B4051D4CE1EDC /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsi\";\n\t\t\ttarget = FA877ADC442CB19CF61793D234C8B131 /* React-jsi */;\n\t\t\ttargetProxy = 531F38502E184028FEC2387DBD9F5A3C /* PBXContainerItemProxy */;\n\t\t};\n\t\t138FBE9E6A7F8DED026A2B9010A3D5F6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-runtimeexecutor\";\n\t\t\ttarget = 54EB12219122432FA744088BC5A680D2 /* React-runtimeexecutor */;\n\t\t\ttargetProxy = 447510A29A4CA824A55F4762DE64486E /* PBXContainerItemProxy */;\n\t\t};\n\t\t13D61D46C1B23D15B361E0C6A887C141 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTImage\";\n\t\t\ttarget = 4F265533AAB7C8985856EC78A33164BB /* React-RCTImage */;\n\t\t\ttargetProxy = 5F9ECC8664AEFB7D24B15E1ABEBDCD7F /* PBXContainerItemProxy */;\n\t\t};\n\t\t13D7733D4877955DA3776E3CC8436E48 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Codegen\";\n\t\t\ttarget = 66B8F5758E6F90E16807A85C003CE61F /* React-Codegen */;\n\t\t\ttargetProxy = 7089361FEE21B329190B5FB28FA6C854 /* PBXContainerItemProxy */;\n\t\t};\n\t\t14722F8716DB7B6FDF9830625EEAE9C5 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsinspector\";\n\t\t\ttarget = F7D033C4C128EECAA020990641FA985F /* React-jsinspector */;\n\t\t\ttargetProxy = 3D499367E58E5470425EDA61A0B51FBE /* PBXContainerItemProxy */;\n\t\t};\n\t\t14D203B01203E84A63E3011F1E3ABD41 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Codegen\";\n\t\t\ttarget = 66B8F5758E6F90E16807A85C003CE61F /* React-Codegen */;\n\t\t\ttargetProxy = 788F525F7864E34BCFE6BA0BC508EAA7 /* PBXContainerItemProxy */;\n\t\t};\n\t\t15511602B9CF0D9CAB1BFF716AC1577D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RuntimeCore\";\n\t\t\ttarget = C7F600C052808C7C987C26EC74B3A290 /* React-RuntimeCore */;\n\t\t\ttargetProxy = 8F4D9EF766DC665762826021BF5B3634 /* PBXContainerItemProxy */;\n\t\t};\n\t\t15CF3848FA8FF276A0AC4494AE7A2C94 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"RCT-Folly\";\n\t\t\ttarget = EC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */;\n\t\t\ttargetProxy = D90130736CF11060AA5F3044DC0B78F5 /* PBXContainerItemProxy */;\n\t\t};\n\t\t160B671DE8C758C317C529472EAE84AC /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsinspector\";\n\t\t\ttarget = F7D033C4C128EECAA020990641FA985F /* React-jsinspector */;\n\t\t\ttargetProxy = C539F15154AF65EF5205178A0B981D18 /* PBXContainerItemProxy */;\n\t\t};\n\t\t17140E0E193C64A3A7403F68D30A8468 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Codegen\";\n\t\t\ttarget = 66B8F5758E6F90E16807A85C003CE61F /* React-Codegen */;\n\t\t\ttargetProxy = 9EA4F6BD0A3AE917E71F8807C80DB748 /* PBXContainerItemProxy */;\n\t\t};\n\t\t174B2196BBC1B8032462868D2D2D378A /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = fmt;\n\t\t\ttarget = 02B79DFED924FA19CA90EC69614733E1 /* fmt */;\n\t\t\ttargetProxy = 7AF4C2BA2D63C5F0125DB0C240A10756 /* PBXContainerItemProxy */;\n\t\t};\n\t\t177E6FD6E10FEA6715CEF6E76277104F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-utils\";\n\t\t\ttarget = 30621D5A9764AC0BD9D02E87B2EA6665 /* React-utils */;\n\t\t\ttargetProxy = 4B134C8FBCBB969A1215D405FA8F1A10 /* PBXContainerItemProxy */;\n\t\t};\n\t\t18A0596FF4266A184879BD59B9836B17 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-CoreModules\";\n\t\t\ttarget = E16E206437995280D349D4B67695C894 /* React-CoreModules */;\n\t\t\ttargetProxy = A1EE308B2938947861CD549712D6075F /* PBXContainerItemProxy */;\n\t\t};\n\t\t19223623503FAA1FAF8E103C15438676 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-featureflags\";\n\t\t\ttarget = 28CE447E6F9C5F0EECC0CDD607D06A24 /* React-featureflags */;\n\t\t\ttargetProxy = 08DDB51BD53715626AC1CFA447E04B23 /* PBXContainerItemProxy */;\n\t\t};\n\t\t1B6C878FFCE771AC50BC4961B0F87EE5 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTNetwork\";\n\t\t\ttarget = 651511D7DA7F07F9FC9AA40A2E86270D /* React-RCTNetwork */;\n\t\t\ttargetProxy = FEFEC4A876DE93DA3E16A9AB06227889 /* PBXContainerItemProxy */;\n\t\t};\n\t\t1BC9C4D05EE6C825BB7F90181F600687 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsinspector\";\n\t\t\ttarget = F7D033C4C128EECAA020990641FA985F /* React-jsinspector */;\n\t\t\ttargetProxy = DBFC4C49A506639725CD60B7FBF76663 /* PBXContainerItemProxy */;\n\t\t};\n\t\t1BE6407519073C758F404A73A903FDD8 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Core-RCTI18nStrings\";\n\t\t\ttarget = D0DD0961119C95E188122B13F3BF4380 /* React-Core-RCTI18nStrings */;\n\t\t\ttargetProxy = F0E873B663A5E11DCE0F94915EB97DBA /* PBXContainerItemProxy */;\n\t\t};\n\t\t1D22B6A7210D95C77692184F9DD4DA5F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-debug\";\n\t\t\ttarget = 0C050E11C4409D3BFAE9CC219C4D6195 /* React-debug */;\n\t\t\ttargetProxy = 696C092D7D2F0C8C73C9FD35C3516D5F /* PBXContainerItemProxy */;\n\t\t};\n\t\t1D43516102A3113894F7C492185A8246 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-featureflags\";\n\t\t\ttarget = 28CE447E6F9C5F0EECC0CDD607D06A24 /* React-featureflags */;\n\t\t\ttargetProxy = FED80D2E46769763C5739E2DA56C4340 /* PBXContainerItemProxy */;\n\t\t};\n\t\t1D4397136D2ACA4FB733CA69E77D4E29 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"hermes-engine\";\n\t\t\ttarget = 985FEA01F314F3C00F0C1E1181E6C4A5 /* hermes-engine */;\n\t\t\ttargetProxy = C23661E7B14F7FAC97B8196253811D53 /* PBXContainerItemProxy */;\n\t\t};\n\t\t22518BD6B6A2937961E29F0F995F94E4 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = glog;\n\t\t\ttarget = D0EFEFB685D97280256C559792236873 /* glog */;\n\t\t\ttargetProxy = 2D8279F103F61BD0E0316515B2A4FE66 /* PBXContainerItemProxy */;\n\t\t};\n\t\t226A033C606AB4E273CA075C678DED98 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jserrorhandler\";\n\t\t\ttarget = 27F648AD269E94404D6A7547C4F9C683 /* React-jserrorhandler */;\n\t\t\ttargetProxy = 9E867B5A451015DC03204207736A9926 /* PBXContainerItemProxy */;\n\t\t};\n\t\t236E756288374E4AE29AC51EBEE02A84 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsi\";\n\t\t\ttarget = FA877ADC442CB19CF61793D234C8B131 /* React-jsi */;\n\t\t\ttargetProxy = 4F625582906102063209333EE277CEDC /* PBXContainerItemProxy */;\n\t\t};\n\t\t238930CCE2A68E41AED023158D9FD867 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Core\";\n\t\t\ttarget = 7ACAA9BE580DD31A5CB9D97C45D9492D /* React-Core */;\n\t\t\ttargetProxy = 139B8D68D2E558E28083C605874A0BD6 /* PBXContainerItemProxy */;\n\t\t};\n\t\t23C94FE2112CC614AEBB66ED42CF2EAE /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsi\";\n\t\t\ttarget = FA877ADC442CB19CF61793D234C8B131 /* React-jsi */;\n\t\t\ttargetProxy = 2D200046FECD427C246D4E124454B60A /* PBXContainerItemProxy */;\n\t\t};\n\t\t23E56A592552C6624E530ACD1C05CB3E /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsiexecutor\";\n\t\t\ttarget = DA0709CAAD589C6E7963495210438021 /* React-jsiexecutor */;\n\t\t\ttargetProxy = 988C8AFF6DCF1A105E13A420302F1153 /* PBXContainerItemProxy */;\n\t\t};\n\t\t23F0D83A18F9832E29B22D2DC676614A /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-cxxreact\";\n\t\t\ttarget = 463F41A7E8B252F8AC5024DA1F4AF6DA /* React-cxxreact */;\n\t\t\ttargetProxy = 1FBDF52E2B645612778A2C4BCAF5EEC0 /* PBXContainerItemProxy */;\n\t\t};\n\t\t24EFCC54EF18A579A7C27EB7D2ED4DB1 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = ReactCommon;\n\t\t\ttarget = B6D5DD49633DFF0657B8C3F08EB3ABA9 /* ReactCommon */;\n\t\t\ttargetProxy = 1AC57A05EB292291B8BBEB18785A89FD /* PBXContainerItemProxy */;\n\t\t};\n\t\t2504A251E75872D0B920F87A736CA6E3 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = RCTRequired;\n\t\t\ttarget = E7E7CE52C8C68B17224FF8C262D80ABF /* RCTRequired */;\n\t\t\ttargetProxy = 61A7088DDA0CCE984A0F70AEFF5F251B /* PBXContainerItemProxy */;\n\t\t};\n\t\t25F8BC2FB5A20C0155607D43C0D83122 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-cxxreact\";\n\t\t\ttarget = 463F41A7E8B252F8AC5024DA1F4AF6DA /* React-cxxreact */;\n\t\t\ttargetProxy = E805BB9AA384D87FA227760D8A9A9768 /* PBXContainerItemProxy */;\n\t\t};\n\t\t26A8AE3C7636B091780A815018FD8E52 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = glog;\n\t\t\ttarget = D0EFEFB685D97280256C559792236873 /* glog */;\n\t\t\ttargetProxy = 3FA3F4824D892562720F7C1FE88A3FA3 /* PBXContainerItemProxy */;\n\t\t};\n\t\t271AA5BE14F7B51FA70504F013807BC0 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RuntimeHermes\";\n\t\t\ttarget = 0EF07AE1AD53436E8D2B9B0086EA0163 /* React-RuntimeHermes */;\n\t\t\ttargetProxy = 28996E64427C63ECE41813C12F1D9F45 /* PBXContainerItemProxy */;\n\t\t};\n\t\t2826FAE8B40BCAEB7402A2C59048B45C /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Core\";\n\t\t\ttarget = 7ACAA9BE580DD31A5CB9D97C45D9492D /* React-Core */;\n\t\t\ttargetProxy = 3B60C2EC4FC7EADBFC082C9611FE195C /* PBXContainerItemProxy */;\n\t\t};\n\t\t28535D15D430AB27D78BED2C4E30A08E /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-debug\";\n\t\t\ttarget = 0C050E11C4409D3BFAE9CC219C4D6195 /* React-debug */;\n\t\t\ttargetProxy = 7A705528BECC75FF15B9B5472224FFF2 /* PBXContainerItemProxy */;\n\t\t};\n\t\t28678A28E3DF6FA2E1637A8D54923035 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-cxxreact\";\n\t\t\ttarget = 463F41A7E8B252F8AC5024DA1F4AF6DA /* React-cxxreact */;\n\t\t\ttargetProxy = 0661428190F98F0AEA09E706F72C0E14 /* PBXContainerItemProxy */;\n\t\t};\n\t\t290A5A9C4C2B466906134251C445AE62 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = RCTRequired;\n\t\t\ttarget = E7E7CE52C8C68B17224FF8C262D80ABF /* RCTRequired */;\n\t\t\ttargetProxy = 118C58C79101D96E6FC10ED86A908701 /* PBXContainerItemProxy */;\n\t\t};\n\t\t2A4DD09DDD919726D99AAD16E6EF18D1 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-rendererdebug\";\n\t\t\ttarget = 9F96BF8B7FC28F5CF47242D7A73B11DA /* React-rendererdebug */;\n\t\t\ttargetProxy = DABD0E6D1231888CF69153902DD90A4D /* PBXContainerItemProxy */;\n\t\t};\n\t\t2AAA0F7AC1D291B485F05244E5B94F64 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"RCT-Folly\";\n\t\t\ttarget = EC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */;\n\t\t\ttargetProxy = 2C70C777E30B0F495E6558B96A5DEC57 /* PBXContainerItemProxy */;\n\t\t};\n\t\t2B046BA53642654BB49AB5D1268435C0 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = glog;\n\t\t\ttarget = D0EFEFB685D97280256C559792236873 /* glog */;\n\t\t\ttargetProxy = F63BA3F544EFE63F8DF41943535FD194 /* PBXContainerItemProxy */;\n\t\t};\n\t\t2BB0BC14C7F66BE53EBE2D9821461C40 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-rendererdebug\";\n\t\t\ttarget = 9F96BF8B7FC28F5CF47242D7A73B11DA /* React-rendererdebug */;\n\t\t\ttargetProxy = 79F6D476FC0E744BD4FCC435BDAD2B7D /* PBXContainerItemProxy */;\n\t\t};\n\t\t2C475FFF8B871DA92E808279F3D8E579 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"RCT-Folly\";\n\t\t\ttarget = EC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */;\n\t\t\ttargetProxy = 3B755BC14CE1029B5A4285D2C338D848 /* PBXContainerItemProxy */;\n\t\t};\n\t\t2D59FE22D01EA3E540A40567B70E611A /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Codegen\";\n\t\t\ttarget = 66B8F5758E6F90E16807A85C003CE61F /* React-Codegen */;\n\t\t\ttargetProxy = 73E1F467A179064813358CA300786586 /* PBXContainerItemProxy */;\n\t\t};\n\t\t2D8F535A379CBF645319C5E8F95903DC /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = DoubleConversion;\n\t\t\ttarget = 2AB2EF542954AB1C999E03BFEF8DE806 /* DoubleConversion */;\n\t\t\ttargetProxy = 1E121B19C6FC0D95DB4FD3A9D9DFF81B /* PBXContainerItemProxy */;\n\t\t};\n\t\t2E23CFAC3E38CA3188706882E4B0FFF9 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-perflogger\";\n\t\t\ttarget = F1E2583679398CB5F4D2B3272E9B198F /* React-perflogger */;\n\t\t\ttargetProxy = 883C9E9E5FF6809D00655B5826DB4507 /* PBXContainerItemProxy */;\n\t\t};\n\t\t2F4D36D22D11472378BF1A9A86688579 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = glog;\n\t\t\ttarget = D0EFEFB685D97280256C559792236873 /* glog */;\n\t\t\ttargetProxy = E02813002DF6996D9EA968D5DABFD914 /* PBXContainerItemProxy */;\n\t\t};\n\t\t2FCD30A1ABDFC43101DF702EF4EF07EC /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = RCTDeprecation;\n\t\t\ttarget = 5211B5AB7B81060AA8E78614DD75D3AB /* RCTDeprecation */;\n\t\t\ttargetProxy = 28B7BD8A9C0D88C589EF663047A7D58E /* PBXContainerItemProxy */;\n\t\t};\n\t\t3093214829851D85A041F11935DDD07C /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"RCT-Folly\";\n\t\t\ttarget = EC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */;\n\t\t\ttargetProxy = 39783E66536947564F9D020A74569042 /* PBXContainerItemProxy */;\n\t\t};\n\t\t30CAAA5C763B44A39B67EEA988014D07 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-debug\";\n\t\t\ttarget = 0C050E11C4409D3BFAE9CC219C4D6195 /* React-debug */;\n\t\t\ttargetProxy = 0C7EAE61CE963E0C8DB1A375BF29D31F /* PBXContainerItemProxy */;\n\t\t};\n\t\t3126B7E273693B27EB2B7FD50AA5BC17 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-debug\";\n\t\t\ttarget = 0C050E11C4409D3BFAE9CC219C4D6195 /* React-debug */;\n\t\t\ttargetProxy = A1F1CFBE1F81137945063038F1DAA104 /* PBXContainerItemProxy */;\n\t\t};\n\t\t31B3264B573AC004E3E10202FFABE064 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"RCT-Folly\";\n\t\t\ttarget = EC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */;\n\t\t\ttargetProxy = 26D71B5A7F452CFB83A0E25D8921B661 /* PBXContainerItemProxy */;\n\t\t};\n\t\t32367C20F30921438885115E85DFA696 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"hermes-engine\";\n\t\t\ttarget = 985FEA01F314F3C00F0C1E1181E6C4A5 /* hermes-engine */;\n\t\t\ttargetProxy = 0C03E6CB4D11169816C5B19652383FE6 /* PBXContainerItemProxy */;\n\t\t};\n\t\t333901E607E06D29D91573D5FD1AA335 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTLinking\";\n\t\t\ttarget = 6FE9147F8AAA4DE676C190F680F47AE2 /* React-RCTLinking */;\n\t\t\ttargetProxy = BF7B3AA185D91BA8D010D8A33C7CB137 /* PBXContainerItemProxy */;\n\t\t};\n\t\t3354A28B35EC1069BD30EB745FBB5320 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsitracing\";\n\t\t\ttarget = 718331030FAA6D88E74D4B2240BB4AC8 /* React-jsitracing */;\n\t\t\ttargetProxy = 4EB019076F5C4DBB606BC5E48F450D01 /* PBXContainerItemProxy */;\n\t\t};\n\t\t336B884A1B8C1FCCD9B9586A45B09D69 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-nativeconfig\";\n\t\t\ttarget = B69D68A280EC3E60655BD2C715ACB004 /* React-nativeconfig */;\n\t\t\ttargetProxy = EEA71226533D5815064A1C73FDC18AD0 /* PBXContainerItemProxy */;\n\t\t};\n\t\t33B57E9C7AC16F53D4F7C80E017CB984 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Mapbuffer\";\n\t\t\ttarget = 091003D98BDA80B01B9E35CADE3947F0 /* React-Mapbuffer */;\n\t\t\ttargetProxy = 0FE34725473963448614574DB7872734 /* PBXContainerItemProxy */;\n\t\t};\n\t\t33DD56EC46F00CDD32152A7D78484C0C /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Core\";\n\t\t\ttarget = 7ACAA9BE580DD31A5CB9D97C45D9492D /* React-Core */;\n\t\t\ttargetProxy = 42E337250953477C0425F2B20469DB03 /* PBXContainerItemProxy */;\n\t\t};\n\t\t340BC01CDDA1120E0BC121DF2D9F3A2D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTImage\";\n\t\t\ttarget = 4F265533AAB7C8985856EC78A33164BB /* React-RCTImage */;\n\t\t\ttargetProxy = 4F93A5639AC8DE235E8468EB71917E7A /* PBXContainerItemProxy */;\n\t\t};\n\t\t349AD49C975F6EAC6C878B5A24A9C501 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Codegen\";\n\t\t\ttarget = 66B8F5758E6F90E16807A85C003CE61F /* React-Codegen */;\n\t\t\ttargetProxy = 7931E9AD775D7BC33B55B25BE876C6CE /* PBXContainerItemProxy */;\n\t\t};\n\t\t350AB0B4FB6E2D72BF570CC9B3DED953 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-NativeModulesApple\";\n\t\t\ttarget = 5807741745EB757C97C09F2D56726BE0 /* React-NativeModulesApple */;\n\t\t\ttargetProxy = 9B7B281009C520D53B98B8EAFC1D496D /* PBXContainerItemProxy */;\n\t\t};\n\t\t354F5ED9F8C15CF66B54AEA1152BE46E /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-rncore\";\n\t\t\ttarget = B41E34C6B259B9994C513BE178912491 /* React-rncore */;\n\t\t\ttargetProxy = 1F710C3EC863E54A48B767BB86D76737 /* PBXContainerItemProxy */;\n\t\t};\n\t\t35BFC111E69EF700B863CE9674B50A7A /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-utils\";\n\t\t\ttarget = 30621D5A9764AC0BD9D02E87B2EA6665 /* React-utils */;\n\t\t\ttargetProxy = 2A2CA8F5135943250F0EF215F952D316 /* PBXContainerItemProxy */;\n\t\t};\n\t\t37F81AC9EC861E71FEBA2A4389C6CF3D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = RCTTypeSafety;\n\t\t\ttarget = D20469A9A1E5CFB26045EAEBE3F88E5E /* RCTTypeSafety */;\n\t\t\ttargetProxy = 46618F284AA8BA31B4AFA45A8E9F507B /* PBXContainerItemProxy */;\n\t\t};\n\t\t37FC712C26E18E2E350322217EC740BA /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RuntimeCore\";\n\t\t\ttarget = C7F600C052808C7C987C26EC74B3A290 /* React-RuntimeCore */;\n\t\t\ttargetProxy = 14CA7990CDEB12D4182EC6BF39D5E9D3 /* PBXContainerItemProxy */;\n\t\t};\n\t\t383F9F7477C31187D8228B90944A5666 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-NativeModulesApple\";\n\t\t\ttarget = 5807741745EB757C97C09F2D56726BE0 /* React-NativeModulesApple */;\n\t\t\ttargetProxy = 392CD5DB7A14441675CAE5C1C2F2476E /* PBXContainerItemProxy */;\n\t\t};\n\t\t384CF580B6E142D4571D926B01454BF1 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-FabricImage\";\n\t\t\ttarget = A5E93F38E96B3A37575BEC88AD69AE85 /* React-FabricImage */;\n\t\t\ttargetProxy = EFEA2A4D8B63216CE096FFA9CD177CB8 /* PBXContainerItemProxy */;\n\t\t};\n\t\t3875578AD50898EE9D9B27FBEAAEA823 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RuntimeApple\";\n\t\t\ttarget = 91D38B18A4E42B1622B83F450706C2F5 /* React-RuntimeApple */;\n\t\t\ttargetProxy = EDA92014437974EDFA693F292BA3683B /* PBXContainerItemProxy */;\n\t\t};\n\t\t38EF688FA4CFB04103A9F12D916F1799 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-NativeModulesApple\";\n\t\t\ttarget = 5807741745EB757C97C09F2D56726BE0 /* React-NativeModulesApple */;\n\t\t\ttargetProxy = 22A5E21755926CF3126E545874B29A8B /* PBXContainerItemProxy */;\n\t\t};\n\t\t397953EECD8A705AE1E95CA4A3B17F2F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsi\";\n\t\t\ttarget = FA877ADC442CB19CF61793D234C8B131 /* React-jsi */;\n\t\t\ttargetProxy = 6D203869C95F377D019F57240B097418 /* PBXContainerItemProxy */;\n\t\t};\n\t\t39AD6EAB484ABBC2E55676C6C3FEB744 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-debug\";\n\t\t\ttarget = 0C050E11C4409D3BFAE9CC219C4D6195 /* React-debug */;\n\t\t\ttargetProxy = 0A67297851E496410FDCA56C2F856355 /* PBXContainerItemProxy */;\n\t\t};\n\t\t3A081C98EE57698FFCC1C41C77D545AD /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"hermes-engine\";\n\t\t\ttarget = 985FEA01F314F3C00F0C1E1181E6C4A5 /* hermes-engine */;\n\t\t\ttargetProxy = 2DD25C6A74A6A39833B87AE38122594D /* PBXContainerItemProxy */;\n\t\t};\n\t\t3A25922BCB02D7620B0B4992ACEB0B93 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = React;\n\t\t\ttarget = 1BEE828C124E6416179B904A9F66D794 /* React */;\n\t\t\ttargetProxy = 7E51A5346FA1F405D4A2D9A3CD02A15B /* PBXContainerItemProxy */;\n\t\t};\n\t\t3AD4BE5BC377F82502EDC24E98A0CD21 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTBlob\";\n\t\t\ttarget = 95D98F901D07557EF7CA38D3F03832C5 /* React-RCTBlob */;\n\t\t\ttargetProxy = 959FC78A558AA1E2398AF55E20BC5287 /* PBXContainerItemProxy */;\n\t\t};\n\t\t3AD979AD7992ED35CB478669CECBFA0C /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTImage\";\n\t\t\ttarget = 4F265533AAB7C8985856EC78A33164BB /* React-RCTImage */;\n\t\t\ttargetProxy = 6192A6F195A09747939210F1954336E5 /* PBXContainerItemProxy */;\n\t\t};\n\t\t3C6C78859E469F36181BEA310DB11287 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTNetwork\";\n\t\t\ttarget = 651511D7DA7F07F9FC9AA40A2E86270D /* React-RCTNetwork */;\n\t\t\ttargetProxy = 883DE70A71CAD81F2E1643C8AE798850 /* PBXContainerItemProxy */;\n\t\t};\n\t\t3D04E6CC3760CE3501A287C5002BA99A /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Codegen\";\n\t\t\ttarget = 66B8F5758E6F90E16807A85C003CE61F /* React-Codegen */;\n\t\t\ttargetProxy = BB57699D36CDF102FB4067D36F1B26F9 /* PBXContainerItemProxy */;\n\t\t};\n\t\t3D131EABE7877449C034C8F7D0F2D6EB /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-debug\";\n\t\t\ttarget = 0C050E11C4409D3BFAE9CC219C4D6195 /* React-debug */;\n\t\t\ttargetProxy = 50664CD9ED7985A1E90103A79BE4B4CC /* PBXContainerItemProxy */;\n\t\t};\n\t\t3DD3F4D8C8B9C7D406834B13A52483D5 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsiexecutor\";\n\t\t\ttarget = DA0709CAAD589C6E7963495210438021 /* React-jsiexecutor */;\n\t\t\ttargetProxy = 7891D6AA1F6DB7DF67CCDC6B30B255ED /* PBXContainerItemProxy */;\n\t\t};\n\t\t3E675CEB9B0D066B74CC29783F888167 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = glog;\n\t\t\ttarget = D0EFEFB685D97280256C559792236873 /* glog */;\n\t\t\ttargetProxy = D13160E9F6A39A4293D2FE5667F854E0 /* PBXContainerItemProxy */;\n\t\t};\n\t\t3E8240D54174DE4FE703DFE46FBF7F2F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Core\";\n\t\t\ttarget = 7ACAA9BE580DD31A5CB9D97C45D9492D /* React-Core */;\n\t\t\ttargetProxy = FF35B4A5726139AAB006E9EE7C4A644B /* PBXContainerItemProxy */;\n\t\t};\n\t\t3F317B466311BFCE9B6D80B3F187515B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"hermes-engine\";\n\t\t\ttarget = 985FEA01F314F3C00F0C1E1181E6C4A5 /* hermes-engine */;\n\t\t\ttargetProxy = 6CB5A0DC349F027AC1A42CECDA2717AD /* PBXContainerItemProxy */;\n\t\t};\n\t\t401A92725890DB2796696C489E8A959E /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"hermes-engine\";\n\t\t\ttarget = 985FEA01F314F3C00F0C1E1181E6C4A5 /* hermes-engine */;\n\t\t\ttargetProxy = 72F15D17342DFAFB7E374C97225B301A /* PBXContainerItemProxy */;\n\t\t};\n\t\t4185D63487F1E5B3B6A77917AAE8756E /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsitracing\";\n\t\t\ttarget = 718331030FAA6D88E74D4B2240BB4AC8 /* React-jsitracing */;\n\t\t\ttargetProxy = 25F35441911D6EBBD57C36461F4A2942 /* PBXContainerItemProxy */;\n\t\t};\n\t\t41CB180CC61559DBA84C8CCD85761E40 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsi\";\n\t\t\ttarget = FA877ADC442CB19CF61793D234C8B131 /* React-jsi */;\n\t\t\ttargetProxy = C0C3D74CFBF3E116388373D57BE4F7BA /* PBXContainerItemProxy */;\n\t\t};\n\t\t4201AC4E052E73C08CCD7D03D75ACCE5 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-NativeModulesApple\";\n\t\t\ttarget = 5807741745EB757C97C09F2D56726BE0 /* React-NativeModulesApple */;\n\t\t\ttargetProxy = 41514EC3994603CBBAC966997FF940DE /* PBXContainerItemProxy */;\n\t\t};\n\t\t4211045A5B6E798B2BF4A5B05D84257B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsi\";\n\t\t\ttarget = FA877ADC442CB19CF61793D234C8B131 /* React-jsi */;\n\t\t\ttargetProxy = 6CA22A265B4F5BEDA7386E7D1A288083 /* PBXContainerItemProxy */;\n\t\t};\n\t\t42BB13633AE352DBC875CB2D02AA38A5 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTBlob\";\n\t\t\ttarget = 95D98F901D07557EF7CA38D3F03832C5 /* React-RCTBlob */;\n\t\t\ttargetProxy = 27BE5FAC5CF6C00EE6638453367C29EA /* PBXContainerItemProxy */;\n\t\t};\n\t\t42F6DC0A0F33B9822CD82AAA742BBC70 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-debug\";\n\t\t\ttarget = 0C050E11C4409D3BFAE9CC219C4D6195 /* React-debug */;\n\t\t\ttargetProxy = A1B6243BC985420127EDB25166DBB848 /* PBXContainerItemProxy */;\n\t\t};\n\t\t439BCAEF52C398210A874C1101A07BFA /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = DoubleConversion;\n\t\t\ttarget = 2AB2EF542954AB1C999E03BFEF8DE806 /* DoubleConversion */;\n\t\t\ttargetProxy = FE8F2CB304E07FDAD18F6B92924C58C0 /* PBXContainerItemProxy */;\n\t\t};\n\t\t43EAB09B1F9E3433FFF4CAE3FA39D4D2 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-NativeModulesApple\";\n\t\t\ttarget = 5807741745EB757C97C09F2D56726BE0 /* React-NativeModulesApple */;\n\t\t\ttargetProxy = E562BBB8918D279CDB88A2BF9C9269F9 /* PBXContainerItemProxy */;\n\t\t};\n\t\t44BD7BB9580F592E3BA5A59E0FBDE34B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Codegen\";\n\t\t\ttarget = 66B8F5758E6F90E16807A85C003CE61F /* React-Codegen */;\n\t\t\ttargetProxy = F716144FE8AF405D0ED3829E084D2D2D /* PBXContainerItemProxy */;\n\t\t};\n\t\t45BFBFF43902D28610828EC9FD5889E1 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTActionSheet\";\n\t\t\ttarget = 11989A5E568B3B69655EE0C13DCDA3F9 /* React-RCTActionSheet */;\n\t\t\ttargetProxy = 4CE094B8C5B23C55458F418C324291C1 /* PBXContainerItemProxy */;\n\t\t};\n\t\t467A1BDC735428282D5519F99F127894 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = simdjson;\n\t\t\ttarget = 45B79B0C60C74716DCD2AD7BE782A719 /* simdjson */;\n\t\t\ttargetProxy = 264D33E2CA9CA59026ACCC8C30F173A1 /* PBXContainerItemProxy */;\n\t\t};\n\t\t471DCFFCBD4A108ED25D065877FD3FD3 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = RCTRequired;\n\t\t\ttarget = E7E7CE52C8C68B17224FF8C262D80ABF /* RCTRequired */;\n\t\t\ttargetProxy = 3D8C75E02193D4335F7C8480891CA121 /* PBXContainerItemProxy */;\n\t\t};\n\t\t47552B4F8C7CC9D578C507F9C8B55E48 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = RCTTypeSafety;\n\t\t\ttarget = D20469A9A1E5CFB26045EAEBE3F88E5E /* RCTTypeSafety */;\n\t\t\ttargetProxy = B4AB08DEA37CE87C1E80287F854825E6 /* PBXContainerItemProxy */;\n\t\t};\n\t\t482FC3D57FC8A7260A82042834555148 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTAnimation\";\n\t\t\ttarget = 938CCE22F6C4094B3FB6CF1478579E4B /* React-RCTAnimation */;\n\t\t\ttargetProxy = 46F60D279BF0CC26216ED024A0D81294 /* PBXContainerItemProxy */;\n\t\t};\n\t\t488998D26401741FC05F84B117E5020A /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Mapbuffer\";\n\t\t\ttarget = 091003D98BDA80B01B9E35CADE3947F0 /* React-Mapbuffer */;\n\t\t\ttargetProxy = 9CBBC8352CBACE024F392C5D07EFB01A /* PBXContainerItemProxy */;\n\t\t};\n\t\t48939DA609333D216671B3454FF64B92 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = DoubleConversion;\n\t\t\ttarget = 2AB2EF542954AB1C999E03BFEF8DE806 /* DoubleConversion */;\n\t\t\ttargetProxy = 18DAF4BB014890F9475879A59FA277D5 /* PBXContainerItemProxy */;\n\t\t};\n\t\t48958125BE6C489FEA79D9B9E058AF28 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = ReactCommon;\n\t\t\ttarget = B6D5DD49633DFF0657B8C3F08EB3ABA9 /* ReactCommon */;\n\t\t\ttargetProxy = B4449874149D49635F8A5CCEFA2B7B71 /* PBXContainerItemProxy */;\n\t\t};\n\t\t4920A5B0535890B1E7D1BF643FDDC3FE /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = fmt;\n\t\t\ttarget = 02B79DFED924FA19CA90EC69614733E1 /* fmt */;\n\t\t\ttargetProxy = DF22E5AEB4E3571295EA7B3334BC0393 /* PBXContainerItemProxy */;\n\t\t};\n\t\t492F47EC7FDE085C758C479D46DF1F63 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = glog;\n\t\t\ttarget = D0EFEFB685D97280256C559792236873 /* glog */;\n\t\t\ttargetProxy = FB5D5685F38BF27A4A50D156889136B0 /* PBXContainerItemProxy */;\n\t\t};\n\t\t4AA6C6F6763192CF4FD121DC066B3416 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = DoubleConversion;\n\t\t\ttarget = 2AB2EF542954AB1C999E03BFEF8DE806 /* DoubleConversion */;\n\t\t\ttargetProxy = 708E537269B7F5B976508E358B90ACD8 /* PBXContainerItemProxy */;\n\t\t};\n\t\t4BE784B32D7FE7E66C0BCBC48A555002 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = ReactCommon;\n\t\t\ttarget = B6D5DD49633DFF0657B8C3F08EB3ABA9 /* ReactCommon */;\n\t\t\ttargetProxy = CAF6538D653E2F4593BDD6FB47ABD0D2 /* PBXContainerItemProxy */;\n\t\t};\n\t\t4C0CF02334D579F2CA85518BAFE3AC94 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = RCTRequired;\n\t\t\ttarget = E7E7CE52C8C68B17224FF8C262D80ABF /* RCTRequired */;\n\t\t\ttargetProxy = E30707A046BC4EB23766FDCF95E28060 /* PBXContainerItemProxy */;\n\t\t};\n\t\t4C4BF44502CFA2BC155CACCEA52AFC93 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsiexecutor\";\n\t\t\ttarget = DA0709CAAD589C6E7963495210438021 /* React-jsiexecutor */;\n\t\t\ttargetProxy = 1B6912BA8E189A53A0F2DFB318AD1DB8 /* PBXContainerItemProxy */;\n\t\t};\n\t\t4D05AEF140EAF8B33F16E6D1A0607765 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-perflogger\";\n\t\t\ttarget = F1E2583679398CB5F4D2B3272E9B198F /* React-perflogger */;\n\t\t\ttargetProxy = FE1420DC552A75EB281D3E84CA466A96 /* PBXContainerItemProxy */;\n\t\t};\n\t\t4D6BA43CCAB6C667B53236511B23AF9F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-utils\";\n\t\t\ttarget = 30621D5A9764AC0BD9D02E87B2EA6665 /* React-utils */;\n\t\t\ttargetProxy = 099FD4302E1571C43E7CC5DABCE768E9 /* PBXContainerItemProxy */;\n\t\t};\n\t\t4EE942AF84B6CB7CB8C71847672BB4F5 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = React;\n\t\t\ttarget = 1BEE828C124E6416179B904A9F66D794 /* React */;\n\t\t\ttargetProxy = 04672A342746A9D23A216E3D51356039 /* PBXContainerItemProxy */;\n\t\t};\n\t\t4F38BF96117F66D66D12A5026165B46F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsiexecutor\";\n\t\t\ttarget = DA0709CAAD589C6E7963495210438021 /* React-jsiexecutor */;\n\t\t\ttargetProxy = 9DD0DFC1F39DAB437E177EB09A8FD48D /* PBXContainerItemProxy */;\n\t\t};\n\t\t501186D706BB3A221149583702512FBA /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-perflogger\";\n\t\t\ttarget = F1E2583679398CB5F4D2B3272E9B198F /* React-perflogger */;\n\t\t\ttargetProxy = 768701873B0599D6AC08259EE1D5EC9B /* PBXContainerItemProxy */;\n\t\t};\n\t\t50997191BF777B9C48032E92FE8934A8 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsinspector\";\n\t\t\ttarget = F7D033C4C128EECAA020990641FA985F /* React-jsinspector */;\n\t\t\ttargetProxy = 44520E623CF92B2AE884CEB68AC7F3C5 /* PBXContainerItemProxy */;\n\t\t};\n\t\t509DFA417A9F6FC28C5DF54680ED83BD /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = DoubleConversion;\n\t\t\ttarget = 2AB2EF542954AB1C999E03BFEF8DE806 /* DoubleConversion */;\n\t\t\ttargetProxy = A6398B134777D879B1B01FAAF9E7312A /* PBXContainerItemProxy */;\n\t\t};\n\t\t51B1B37A4D04FC366AF9E06183F60026 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsi\";\n\t\t\ttarget = FA877ADC442CB19CF61793D234C8B131 /* React-jsi */;\n\t\t\ttargetProxy = C79A04F3B768DBE6A492AE991E3C6729 /* PBXContainerItemProxy */;\n\t\t};\n\t\t52304F61679D1A20460ACD6B34295835 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-ImageManager\";\n\t\t\ttarget = B5E1D7706FCB7EC5FF39F8CDA49A5653 /* React-ImageManager */;\n\t\t\ttargetProxy = B91FF145DD7C0FE0686A53DB45FF39BA /* PBXContainerItemProxy */;\n\t\t};\n\t\t5309742FA68972C8703057C531FE7B4A /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Core\";\n\t\t\ttarget = 7ACAA9BE580DD31A5CB9D97C45D9492D /* React-Core */;\n\t\t\ttargetProxy = 27227816A0AC9C79094F475A7E539F7D /* PBXContainerItemProxy */;\n\t\t};\n\t\t53121BB43C7003FC1889807B7999F194 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"RCT-Folly\";\n\t\t\ttarget = EC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */;\n\t\t\ttargetProxy = 1135D39403406304B5E3DE1CC9D85673 /* PBXContainerItemProxy */;\n\t\t};\n\t\t5396E9247D3B4600C0CEF1BE56E512C5 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = RCTTypeSafety;\n\t\t\ttarget = D20469A9A1E5CFB26045EAEBE3F88E5E /* RCTTypeSafety */;\n\t\t\ttargetProxy = 5E1C8506319413FB7230B196CCEC1DD5 /* PBXContainerItemProxy */;\n\t\t};\n\t\t53C17DD35EA04BC31221F5013D0D6470 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsi\";\n\t\t\ttarget = FA877ADC442CB19CF61793D234C8B131 /* React-jsi */;\n\t\t\ttargetProxy = F56BDF2AF7A7909B3FD7EA17263A86AE /* PBXContainerItemProxy */;\n\t\t};\n\t\t5416C4DCD990599B5C226AE2132B7ACA /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-logger\";\n\t\t\ttarget = 083B602EA19B4AD50EC53C0602F29A7D /* React-logger */;\n\t\t\ttargetProxy = BCB974246F67E3F682F23D3000A7BC16 /* PBXContainerItemProxy */;\n\t\t};\n\t\t54BC7A2031B6EE04B465B38B2C61FA8A /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-rendererdebug\";\n\t\t\ttarget = 9F96BF8B7FC28F5CF47242D7A73B11DA /* React-rendererdebug */;\n\t\t\ttargetProxy = C295D62C015F11982CF4D6A807934AF9 /* PBXContainerItemProxy */;\n\t\t};\n\t\t54F3A8EBD288322A88F66576AB7B01AC /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = glog;\n\t\t\ttarget = D0EFEFB685D97280256C559792236873 /* glog */;\n\t\t\ttargetProxy = 8E103A8D0B29AC65D37AF2C9C3397C3F /* PBXContainerItemProxy */;\n\t\t};\n\t\t5504789E8261A05336A711333185F028 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-runtimeexecutor\";\n\t\t\ttarget = 54EB12219122432FA744088BC5A680D2 /* React-runtimeexecutor */;\n\t\t\ttargetProxy = 8AFA4A6B9474BF388393B2BBB377418A /* PBXContainerItemProxy */;\n\t\t};\n\t\t555AA89408382973C4AB5F51FA9CCA06 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = fmt;\n\t\t\ttarget = 02B79DFED924FA19CA90EC69614733E1 /* fmt */;\n\t\t\ttargetProxy = 869A59EE24894AED06764354C10A5F69 /* PBXContainerItemProxy */;\n\t\t};\n\t\t55D793D7DCDBBB8918DA3FE5C48B431B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsi\";\n\t\t\ttarget = FA877ADC442CB19CF61793D234C8B131 /* React-jsi */;\n\t\t\ttargetProxy = 514032619C079D0613FD26B75A133435 /* PBXContainerItemProxy */;\n\t\t};\n\t\t56F45F0408600AD7AA272F3DE409925F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = DoubleConversion;\n\t\t\ttarget = 2AB2EF542954AB1C999E03BFEF8DE806 /* DoubleConversion */;\n\t\t\ttargetProxy = 0289B273CF2E170BB6BE507F5FFA82D0 /* PBXContainerItemProxy */;\n\t\t};\n\t\t577FF61698C6B776BD1DDCEF805F0E08 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-runtimescheduler\";\n\t\t\ttarget = 52C3F83DB80E5D527EDA54FA1DE5470A /* React-runtimescheduler */;\n\t\t\ttargetProxy = 032B7BB6E4D024DB5071E49DEDDDAC9C /* PBXContainerItemProxy */;\n\t\t};\n\t\t57F48BAADB5805B0D266BDFC2A1C3EC9 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Core\";\n\t\t\ttarget = 7ACAA9BE580DD31A5CB9D97C45D9492D /* React-Core */;\n\t\t\ttargetProxy = 7199A02DB198016F4957677CAFD37169 /* PBXContainerItemProxy */;\n\t\t};\n\t\t58965B069471A7CBBFC82ED0B15092E1 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTText\";\n\t\t\ttarget = DBD2D83E10F8B7D3F4E0E34E6A9FCFA6 /* React-RCTText */;\n\t\t\ttargetProxy = 87DFC9D147D55C9822337F8738882886 /* PBXContainerItemProxy */;\n\t\t};\n\t\t590C38C4546860234AE6995AA745B436 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"hermes-engine\";\n\t\t\ttarget = 985FEA01F314F3C00F0C1E1181E6C4A5 /* hermes-engine */;\n\t\t\ttargetProxy = 667B3C248D30D99BF4AB387DA12EF8B7 /* PBXContainerItemProxy */;\n\t\t};\n\t\t59D93FECBEB5A2E7B843380E4A600A47 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-callinvoker\";\n\t\t\ttarget = 2681CB7EF647E61F4F9A43029C235607 /* React-callinvoker */;\n\t\t\ttargetProxy = 5858410DB9604D764DDB1D8DBF572A73 /* PBXContainerItemProxy */;\n\t\t};\n\t\t5A4319DC9F2607FF12627690E3F4C0A3 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RuntimeHermes\";\n\t\t\ttarget = 0EF07AE1AD53436E8D2B9B0086EA0163 /* React-RuntimeHermes */;\n\t\t\ttargetProxy = 7FA15A1437F7473F4EBF6CD2EA187A28 /* PBXContainerItemProxy */;\n\t\t};\n\t\t5B9BFD44259542BF0998056E0C123C8E /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = DoubleConversion;\n\t\t\ttarget = 2AB2EF542954AB1C999E03BFEF8DE806 /* DoubleConversion */;\n\t\t\ttargetProxy = C4DAD2BFEDB2B46B30A4918334C3C155 /* PBXContainerItemProxy */;\n\t\t};\n\t\t5CFF40B71FC04352AA6F82FCB1AEE57C /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-debug\";\n\t\t\ttarget = 0C050E11C4409D3BFAE9CC219C4D6195 /* React-debug */;\n\t\t\ttargetProxy = F82661C856CFC4537BC562D480B0745F /* PBXContainerItemProxy */;\n\t\t};\n\t\t5D8A34693C0672D2B6D6FA272CD55EF9 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-logger\";\n\t\t\ttarget = 083B602EA19B4AD50EC53C0602F29A7D /* React-logger */;\n\t\t\ttargetProxy = F50B829B9F8783D3CD5445F9A714C6AB /* PBXContainerItemProxy */;\n\t\t};\n\t\t5DD3494C5EA179CF1469D60EFA4AA48D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"RCT-Folly\";\n\t\t\ttarget = EC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */;\n\t\t\ttargetProxy = 06708061FBD54D734CD69C96FF4BC80B /* PBXContainerItemProxy */;\n\t\t};\n\t\t5DE920B65B5626FBC490D822219BEB10 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Core\";\n\t\t\ttarget = 7ACAA9BE580DD31A5CB9D97C45D9492D /* React-Core */;\n\t\t\ttargetProxy = E32D9D5625622F59A4E891AB2F0BBE8F /* PBXContainerItemProxy */;\n\t\t};\n\t\t5EA65B1FF742F6A080DAEDDDEA1C523E /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-graphics\";\n\t\t\ttarget = 4BDD270EACFE5730793AEF0B9BCCBA31 /* React-graphics */;\n\t\t\ttargetProxy = C5168006894FB43521F0A0CBECEBD219 /* PBXContainerItemProxy */;\n\t\t};\n\t\t5EE0CB2912FC54E4E1B00ECA8BD72D8D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-NativeModulesApple\";\n\t\t\ttarget = 5807741745EB757C97C09F2D56726BE0 /* React-NativeModulesApple */;\n\t\t\ttargetProxy = 98690A3B0D01A5936AEB8B172475F68E /* PBXContainerItemProxy */;\n\t\t};\n\t\t5F496EEFD1138C88F9B6C9F28BF8E7FE /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = RCTTypeSafety;\n\t\t\ttarget = D20469A9A1E5CFB26045EAEBE3F88E5E /* RCTTypeSafety */;\n\t\t\ttargetProxy = 610DAF4DFC508DEF059AAF2D6327FB30 /* PBXContainerItemProxy */;\n\t\t};\n\t\t5F7DDEC9656978E6328E567B901397AC /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"RCT-Folly\";\n\t\t\ttarget = EC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */;\n\t\t\ttargetProxy = 9A147EEF518A7ED1EA0464E07F6906DF /* PBXContainerItemProxy */;\n\t\t};\n\t\t5F84ABE6461E8D10A99F1614662D5F02 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsiexecutor\";\n\t\t\ttarget = DA0709CAAD589C6E7963495210438021 /* React-jsiexecutor */;\n\t\t\ttargetProxy = 2602E2C102AE096CF1AB67655B312CC2 /* PBXContainerItemProxy */;\n\t\t};\n\t\t6041B93D30C0906C17F7827C89208FC1 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsi\";\n\t\t\ttarget = FA877ADC442CB19CF61793D234C8B131 /* React-jsi */;\n\t\t\ttargetProxy = 523986A4CBA0A9B854F1B1F504672E41 /* PBXContainerItemProxy */;\n\t\t};\n\t\t6172D3DC6321CA3620D197A12D6E59C8 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsinspector\";\n\t\t\ttarget = F7D033C4C128EECAA020990641FA985F /* React-jsinspector */;\n\t\t\ttargetProxy = A92361FFAA6D27AFF02987D72B991DE4 /* PBXContainerItemProxy */;\n\t\t};\n\t\t619692B57C7C99263813F45DEF183A6B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-cxxreact\";\n\t\t\ttarget = 463F41A7E8B252F8AC5024DA1F4AF6DA /* React-cxxreact */;\n\t\t\ttargetProxy = C933D0F25D6C20C3379299E2CB42F4FC /* PBXContainerItemProxy */;\n\t\t};\n\t\t61C5E1E9E0D8B3351152D9AE7DF787DA /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-FabricImage\";\n\t\t\ttarget = A5E93F38E96B3A37575BEC88AD69AE85 /* React-FabricImage */;\n\t\t\ttargetProxy = FE15B6EE25FDCF10BE7095256D053D75 /* PBXContainerItemProxy */;\n\t\t};\n\t\t63F23627D46E214A9E83F026A3E2413D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsi\";\n\t\t\ttarget = FA877ADC442CB19CF61793D234C8B131 /* React-jsi */;\n\t\t\ttargetProxy = A842D588D7B9637FFFA8197AD63B597C /* PBXContainerItemProxy */;\n\t\t};\n\t\t64A12C5236A6B897B3DBB8EBDE905E7B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-perflogger\";\n\t\t\ttarget = F1E2583679398CB5F4D2B3272E9B198F /* React-perflogger */;\n\t\t\ttargetProxy = 0B1EB341796A0626399359C3ED0B7588 /* PBXContainerItemProxy */;\n\t\t};\n\t\t652E79909AAB41E62A57EBC80CBF427C /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-utils\";\n\t\t\ttarget = 30621D5A9764AC0BD9D02E87B2EA6665 /* React-utils */;\n\t\t\ttargetProxy = C47BEEA64665700E66E269BE0C90CEF9 /* PBXContainerItemProxy */;\n\t\t};\n\t\t6675CE1FE41E6AC87A3117E2ABBBA762 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = glog;\n\t\t\ttarget = D0EFEFB685D97280256C559792236873 /* glog */;\n\t\t\ttargetProxy = 35C37DC0ECDD2A729AC821C38BB059FB /* PBXContainerItemProxy */;\n\t\t};\n\t\t66D92D4240C674B35F54C2C9AFAA0322 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsinspector\";\n\t\t\ttarget = F7D033C4C128EECAA020990641FA985F /* React-jsinspector */;\n\t\t\ttargetProxy = 9115D774EC904629CCFA0383996AEA60 /* PBXContainerItemProxy */;\n\t\t};\n\t\t6750B951032FD22A0EEA0AEEF98376DC /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-callinvoker\";\n\t\t\ttarget = 2681CB7EF647E61F4F9A43029C235607 /* React-callinvoker */;\n\t\t\ttargetProxy = B1E7A179678B5CAAFE7D32BEB902FE50 /* PBXContainerItemProxy */;\n\t\t};\n\t\t67567B461F3E40467B26D7974B4C1D44 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-callinvoker\";\n\t\t\ttarget = 2681CB7EF647E61F4F9A43029C235607 /* React-callinvoker */;\n\t\t\ttargetProxy = 0557F03CE366CCC0279E44D78CF0BEF8 /* PBXContainerItemProxy */;\n\t\t};\n\t\t6760651ADC5EFA51B68D248ADF79D997 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"hermes-engine\";\n\t\t\ttarget = 985FEA01F314F3C00F0C1E1181E6C4A5 /* hermes-engine */;\n\t\t\ttargetProxy = D16A2BB3F9D5A639C2B53437E64AF9DF /* PBXContainerItemProxy */;\n\t\t};\n\t\t676DA9CA12606B49253CA5A3F2CB29AE /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-runtimescheduler\";\n\t\t\ttarget = 52C3F83DB80E5D527EDA54FA1DE5470A /* React-runtimescheduler */;\n\t\t\ttargetProxy = 417228EA0C0EED361BDA2C73B4EAEDD7 /* PBXContainerItemProxy */;\n\t\t};\n\t\t67722DF845F87BA9C58F762C97B926E0 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-FabricImage\";\n\t\t\ttarget = A5E93F38E96B3A37575BEC88AD69AE85 /* React-FabricImage */;\n\t\t\ttargetProxy = E9109ED22CA9A2A178B56EA9072F0E53 /* PBXContainerItemProxy */;\n\t\t};\n\t\t67BBDDCEA70BEA58B3E3C83B3C47033D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsinspector\";\n\t\t\ttarget = F7D033C4C128EECAA020990641FA985F /* React-jsinspector */;\n\t\t\ttargetProxy = D42DE5667CC9F955711A2DF1BE3A0849 /* PBXContainerItemProxy */;\n\t\t};\n\t\t67F8AA74EE543DC681366BE8419569F9 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-runtimescheduler\";\n\t\t\ttarget = 52C3F83DB80E5D527EDA54FA1DE5470A /* React-runtimescheduler */;\n\t\t\ttargetProxy = CD5EB770BFF7AE41F049E4F510CDA6C9 /* PBXContainerItemProxy */;\n\t\t};\n\t\t695CAFEE86C5934C15813E5AEB95FCF7 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = RCTDeprecation;\n\t\t\ttarget = 5211B5AB7B81060AA8E78614DD75D3AB /* RCTDeprecation */;\n\t\t\ttargetProxy = A57A1E5DA1CF9F45264F198239F502CD /* PBXContainerItemProxy */;\n\t\t};\n\t\t6B98ABBC42E97F407C486F83CFAF2DF4 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsitracing\";\n\t\t\ttarget = 718331030FAA6D88E74D4B2240BB4AC8 /* React-jsitracing */;\n\t\t\ttargetProxy = 814E75E2466186389C470A40FABEFBD9 /* PBXContainerItemProxy */;\n\t\t};\n\t\t6DDADE4A090D2486F1867CDFFFEC2BAE /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-CoreModules\";\n\t\t\ttarget = E16E206437995280D349D4B67695C894 /* React-CoreModules */;\n\t\t\ttargetProxy = AD88ADDC23C72D9E68F949E2F6392A9C /* PBXContainerItemProxy */;\n\t\t};\n\t\t6EA37D38B5F608C9ED8BCC3D0CE73976 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-logger\";\n\t\t\ttarget = 083B602EA19B4AD50EC53C0602F29A7D /* React-logger */;\n\t\t\ttargetProxy = FCFB21480542CCDF3413834C2D79C0C1 /* PBXContainerItemProxy */;\n\t\t};\n\t\t6F36D48DE22DB419560FFB24734570C7 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = glog;\n\t\t\ttarget = D0EFEFB685D97280256C559792236873 /* glog */;\n\t\t\ttargetProxy = C9E7B9CABFA8CCAEC5A1E5899E48575E /* PBXContainerItemProxy */;\n\t\t};\n\t\t6F3CAC1CE460FCD72E851FCC828AE32B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"hermes-engine\";\n\t\t\ttarget = 985FEA01F314F3C00F0C1E1181E6C4A5 /* hermes-engine */;\n\t\t\ttargetProxy = B08201482F085FFB7749B3B3BFA4755C /* PBXContainerItemProxy */;\n\t\t};\n\t\t6F636285373965A3111B0B6ACD3B8002 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = ReactCommon;\n\t\t\ttarget = B6D5DD49633DFF0657B8C3F08EB3ABA9 /* ReactCommon */;\n\t\t\ttargetProxy = 90A4F01A4656FD0ECCE693D3DCFE4357 /* PBXContainerItemProxy */;\n\t\t};\n\t\t6F68A67088985622F27AF591F2D44640 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-utils\";\n\t\t\ttarget = 30621D5A9764AC0BD9D02E87B2EA6665 /* React-utils */;\n\t\t\ttargetProxy = 1A4CA94B561EE5E2CA5F1A7FEA2624BA /* PBXContainerItemProxy */;\n\t\t};\n\t\t6FD8F1C07C0EBA1942A87072CF2A4D5A /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = ReactCommon;\n\t\t\ttarget = B6D5DD49633DFF0657B8C3F08EB3ABA9 /* ReactCommon */;\n\t\t\ttargetProxy = 7324B3C23CC2660EE8AB34F268610F69 /* PBXContainerItemProxy */;\n\t\t};\n\t\t6FDBD4C9938B03D8150BED0135AFF2D4 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-utils\";\n\t\t\ttarget = 30621D5A9764AC0BD9D02E87B2EA6665 /* React-utils */;\n\t\t\ttargetProxy = 6FA0C82671E5EDF5C2E8608E281E5574 /* PBXContainerItemProxy */;\n\t\t};\n\t\t70ECBD516E2B91C386ED477D0B1C4458 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = Yoga;\n\t\t\ttarget = 2B25F90D819B9ADF2AF2D8733A890333 /* Yoga */;\n\t\t\ttargetProxy = 8A01A6A20F4A040DA3724AB2B41C4904 /* PBXContainerItemProxy */;\n\t\t};\n\t\t71C719D10FD6DB200EAA6EEFA1367270 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = ReactCommon;\n\t\t\ttarget = B6D5DD49633DFF0657B8C3F08EB3ABA9 /* ReactCommon */;\n\t\t\ttargetProxy = 773DAF3A7CD1AD560A4E58D7260D2A72 /* PBXContainerItemProxy */;\n\t\t};\n\t\t71DBBBE762D28A5D1FB20FDEBA133275 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-hermes\";\n\t\t\ttarget = 20F066A71CEA5EECC7463413442F2B77 /* React-hermes */;\n\t\t\ttargetProxy = 13788842E11AC14A80C18C631F34DD4B /* PBXContainerItemProxy */;\n\t\t};\n\t\t7390C8A414C80248853FC1936D46AE65 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = fmt;\n\t\t\ttarget = 02B79DFED924FA19CA90EC69614733E1 /* fmt */;\n\t\t\ttargetProxy = 9DB104CB96E00AE543CF960D565F4C47 /* PBXContainerItemProxy */;\n\t\t};\n\t\t74785FAB64DB2E3C10C989A45A14C219 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-featureflags\";\n\t\t\ttarget = 28CE447E6F9C5F0EECC0CDD607D06A24 /* React-featureflags */;\n\t\t\ttargetProxy = 30052770A781E8047C3AB8E1C984E45A /* PBXContainerItemProxy */;\n\t\t};\n\t\t74FF1306928480CBFD0257A65C2AE3D2 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = simdjson;\n\t\t\ttarget = 45B79B0C60C74716DCD2AD7BE782A719 /* simdjson */;\n\t\t\ttargetProxy = 45058A3929052B17227F15D8771739C3 /* PBXContainerItemProxy */;\n\t\t};\n\t\t760F46FA489FA3BC1A12FE767B1C3724 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTNetwork\";\n\t\t\ttarget = 651511D7DA7F07F9FC9AA40A2E86270D /* React-RCTNetwork */;\n\t\t\ttargetProxy = 364D2CA644CE7284EB0D9AA88411CBF4 /* PBXContainerItemProxy */;\n\t\t};\n\t\t76295D2365EE55165E1FD23E9D3A64C4 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-callinvoker\";\n\t\t\ttarget = 2681CB7EF647E61F4F9A43029C235607 /* React-callinvoker */;\n\t\t\ttargetProxy = E4E5A824873AA8676EF52F2A30A1CFF4 /* PBXContainerItemProxy */;\n\t\t};\n\t\t76E2AF94513C31EEBA1A2731A05958D1 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = SocketRocket;\n\t\t\ttarget = 1948D0B63D2CF6A48E18B0B292BC6091 /* SocketRocket */;\n\t\t\ttargetProxy = 287546B862BA34A1C2963EFC525D4BB6 /* PBXContainerItemProxy */;\n\t\t};\n\t\t771EA905ACE8B9DF1691920849E25189 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTActionSheet\";\n\t\t\ttarget = 11989A5E568B3B69655EE0C13DCDA3F9 /* React-RCTActionSheet */;\n\t\t\ttargetProxy = 8E227252A1A04992FDE9D414D398EA61 /* PBXContainerItemProxy */;\n\t\t};\n\t\t77AC1CFEEEAAD46FEE7BEA988A588B67 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-debug\";\n\t\t\ttarget = 0C050E11C4409D3BFAE9CC219C4D6195 /* React-debug */;\n\t\t\ttargetProxy = 96A265B0FD2164A7B4764841E73AB8AC /* PBXContainerItemProxy */;\n\t\t};\n\t\t7845C42B56BD999D4789DAC5D452DC83 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTLinking\";\n\t\t\ttarget = 6FE9147F8AAA4DE676C190F680F47AE2 /* React-RCTLinking */;\n\t\t\ttargetProxy = 998BEC830E92ED33C97E6586736FB998 /* PBXContainerItemProxy */;\n\t\t};\n\t\t78727E5B4250A9E09FD2B16BE2F71350 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-runtimeexecutor\";\n\t\t\ttarget = 54EB12219122432FA744088BC5A680D2 /* React-runtimeexecutor */;\n\t\t\ttargetProxy = 5A8596426591472EAFCA3DA6207F0A23 /* PBXContainerItemProxy */;\n\t\t};\n\t\t792C94CE5907970B3561385D49A084CB /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-NativeModulesApple\";\n\t\t\ttarget = 5807741745EB757C97C09F2D56726BE0 /* React-NativeModulesApple */;\n\t\t\ttargetProxy = 8642894287941BD14F9F24B434B84BFB /* PBXContainerItemProxy */;\n\t\t};\n\t\t795142F7B9CEBC2409056405CF1A0236 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Core\";\n\t\t\ttarget = 7ACAA9BE580DD31A5CB9D97C45D9492D /* React-Core */;\n\t\t\ttargetProxy = D8DE127140187183B98BE7DF5DAB9829 /* PBXContainerItemProxy */;\n\t\t};\n\t\t7A2587BC6C3980FFDD632559115DBC78 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Codegen\";\n\t\t\ttarget = 66B8F5758E6F90E16807A85C003CE61F /* React-Codegen */;\n\t\t\ttargetProxy = A01FB08457ECBD7EE89F447BFC03E9C5 /* PBXContainerItemProxy */;\n\t\t};\n\t\t7A698D86B723B94C66DF2921B25EBA09 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-graphics\";\n\t\t\ttarget = 4BDD270EACFE5730793AEF0B9BCCBA31 /* React-graphics */;\n\t\t\ttargetProxy = 3F8E945B2CF235F1E5DF37577F4BD617 /* PBXContainerItemProxy */;\n\t\t};\n\t\t7B05CED1A38707CAF44C3092D8F27EA4 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsiexecutor\";\n\t\t\ttarget = DA0709CAAD589C6E7963495210438021 /* React-jsiexecutor */;\n\t\t\ttargetProxy = DB4AC6BAFB227C3B7803DC6E4A2F3FFB /* PBXContainerItemProxy */;\n\t\t};\n\t\t7BB0EA4C6E68B67ED40E24ED427944CD /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-callinvoker\";\n\t\t\ttarget = 2681CB7EF647E61F4F9A43029C235607 /* React-callinvoker */;\n\t\t\ttargetProxy = 15FC817CF5576B0F64C53F4746531CBE /* PBXContainerItemProxy */;\n\t\t};\n\t\t7C2893CAEC14643F651E1C7019EB7EC4 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-perflogger\";\n\t\t\ttarget = F1E2583679398CB5F4D2B3272E9B198F /* React-perflogger */;\n\t\t\ttargetProxy = 9BD7E734058A20C28CFAD01F1663879C /* PBXContainerItemProxy */;\n\t\t};\n\t\t7E4F5D0BEBE237442188BFED62916897 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = Yoga;\n\t\t\ttarget = 2B25F90D819B9ADF2AF2D8733A890333 /* Yoga */;\n\t\t\ttargetProxy = 413B66FC8CA959FDE6EE3BD8E75010EF /* PBXContainerItemProxy */;\n\t\t};\n\t\t7E8596700BDB3E75F2D21854499777F3 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTFabric\";\n\t\t\ttarget = 8DED5282246ABFC24F4460D3066C84A0 /* React-RCTFabric */;\n\t\t\ttargetProxy = C6175853BCA38145859D6574962C8592 /* PBXContainerItemProxy */;\n\t\t};\n\t\t7EEE2CE1939388A6CDEE91AEB8A399EA /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"hermes-engine\";\n\t\t\ttarget = 985FEA01F314F3C00F0C1E1181E6C4A5 /* hermes-engine */;\n\t\t\ttargetProxy = CDB9A6A5720EBE3436BD3F35A6AD8D51 /* PBXContainerItemProxy */;\n\t\t};\n\t\t7F11632F8C4B59DD3BB4051C89DBAE53 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-cxxreact\";\n\t\t\ttarget = 463F41A7E8B252F8AC5024DA1F4AF6DA /* React-cxxreact */;\n\t\t\ttargetProxy = CBE3C92A7423E48BDE15756DF5F7D413 /* PBXContainerItemProxy */;\n\t\t};\n\t\t7F374E36B80AE76293129D41A96FF3DC /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = boost;\n\t\t\ttarget = EFEA55B1B776B6EB4B16F363BFE64D1A /* boost */;\n\t\t\ttargetProxy = EC57A96C51CBD5A348B2228A7A2873D2 /* PBXContainerItemProxy */;\n\t\t};\n\t\t7FDDF5770FADD8DEA8C31B0DCE95FFFC /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsi\";\n\t\t\ttarget = FA877ADC442CB19CF61793D234C8B131 /* React-jsi */;\n\t\t\ttargetProxy = 4BF37A59C4356B532FE3C0348A090A3F /* PBXContainerItemProxy */;\n\t\t};\n\t\t80D81BC05DF9946301984E4F3DC959D8 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsi\";\n\t\t\ttarget = FA877ADC442CB19CF61793D234C8B131 /* React-jsi */;\n\t\t\ttargetProxy = 0EF26FFCE4BA23EC50BD19A5D1FEBBEA /* PBXContainerItemProxy */;\n\t\t};\n\t\t80EA3BB2571AE7264036A211FA77E312 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = Yoga;\n\t\t\ttarget = 2B25F90D819B9ADF2AF2D8733A890333 /* Yoga */;\n\t\t\ttargetProxy = 3121C4A5AF5E102C5C18BC41E9B82EF6 /* PBXContainerItemProxy */;\n\t\t};\n\t\t814262D7504A62E918BE9E839A613667 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Codegen\";\n\t\t\ttarget = 66B8F5758E6F90E16807A85C003CE61F /* React-Codegen */;\n\t\t\ttargetProxy = 51D23F496B041E29ECBBBB9469B006F7 /* PBXContainerItemProxy */;\n\t\t};\n\t\t8214D19E29BC4F9B43CFD87CC22B7018 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"hermes-engine\";\n\t\t\ttarget = 985FEA01F314F3C00F0C1E1181E6C4A5 /* hermes-engine */;\n\t\t\ttargetProxy = A677F1A562B3A7E3375C13B645B0298A /* PBXContainerItemProxy */;\n\t\t};\n\t\t826B6D82D168B27838C2571D3143BDCB /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-runtimescheduler\";\n\t\t\ttarget = 52C3F83DB80E5D527EDA54FA1DE5470A /* React-runtimescheduler */;\n\t\t\ttargetProxy = BD62BAA4B5FFFEAA64CF2EE7B03345C5 /* PBXContainerItemProxy */;\n\t\t};\n\t\t828F20A914D5962587F89C8D501B682C /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Core\";\n\t\t\ttarget = 7ACAA9BE580DD31A5CB9D97C45D9492D /* React-Core */;\n\t\t\ttargetProxy = AF0A642DD817CD7C29D4688D8B28274A /* PBXContainerItemProxy */;\n\t\t};\n\t\t828F9C83DE2F06F7C916628EA05F91B1 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"hermes-engine\";\n\t\t\ttarget = 985FEA01F314F3C00F0C1E1181E6C4A5 /* hermes-engine */;\n\t\t\ttargetProxy = 2289B5373AAC50ECC91CFE1B2F2350BB /* PBXContainerItemProxy */;\n\t\t};\n\t\t8296923833DED2E03B8C666BE6DE6690 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = fmt;\n\t\t\ttarget = 02B79DFED924FA19CA90EC69614733E1 /* fmt */;\n\t\t\ttargetProxy = C442623A96CC4090A6637148EE99E00E /* PBXContainerItemProxy */;\n\t\t};\n\t\t8348CE40A97A1B487D1B2FE4C6A432CB /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = DoubleConversion;\n\t\t\ttarget = 2AB2EF542954AB1C999E03BFEF8DE806 /* DoubleConversion */;\n\t\t\ttargetProxy = 1C9ACB0F83A2D9C2A753C9B8B7CE9AAD /* PBXContainerItemProxy */;\n\t\t};\n\t\t83A97A5415A40C13D0473AA7625FA12B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-featureflags\";\n\t\t\ttarget = 28CE447E6F9C5F0EECC0CDD607D06A24 /* React-featureflags */;\n\t\t\ttargetProxy = 818B8E1B916E53B3B8B415FF901A52E1 /* PBXContainerItemProxy */;\n\t\t};\n\t\t83D931AC8A3A8844EA71D031AEFEC9F6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTBlob\";\n\t\t\ttarget = 95D98F901D07557EF7CA38D3F03832C5 /* React-RCTBlob */;\n\t\t\ttargetProxy = ADD9114A2BFC1CBDFC55DD169FA98452 /* PBXContainerItemProxy */;\n\t\t};\n\t\t84032E197D1AE2F04791DC93FD90C104 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"RCT-Folly\";\n\t\t\ttarget = EC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */;\n\t\t\ttargetProxy = D27EDB53457EAF10C145163B90FDE993 /* PBXContainerItemProxy */;\n\t\t};\n\t\t8431932AA052F87EEC81F9B95C62FF2B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = glog;\n\t\t\ttarget = D0EFEFB685D97280256C559792236873 /* glog */;\n\t\t\ttargetProxy = 1A500E4E5049684BC5D74DB12E6823B0 /* PBXContainerItemProxy */;\n\t\t};\n\t\t84BEF175F835CEC76C3BA4509B326ECD /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Core\";\n\t\t\ttarget = 7ACAA9BE580DD31A5CB9D97C45D9492D /* React-Core */;\n\t\t\ttargetProxy = 9CB9DF07CCF04684461C49FDB7B2E465 /* PBXContainerItemProxy */;\n\t\t};\n\t\t850EF509C0F4973D25998A85CCC1F517 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = glog;\n\t\t\ttarget = D0EFEFB685D97280256C559792236873 /* glog */;\n\t\t\ttargetProxy = 448906A26AA70E7B13E7A1279A5D8B2B /* PBXContainerItemProxy */;\n\t\t};\n\t\t8589C20D4651BCDCFF98418A1C87A7EF /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = boost;\n\t\t\ttarget = EFEA55B1B776B6EB4B16F363BFE64D1A /* boost */;\n\t\t\ttargetProxy = 7E2AE44A3348102D3E4ACF43FE59A494 /* PBXContainerItemProxy */;\n\t\t};\n\t\t85C1E90FA3B4C4E24168826381CB9302 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jserrorhandler\";\n\t\t\ttarget = 27F648AD269E94404D6A7547C4F9C683 /* React-jserrorhandler */;\n\t\t\ttargetProxy = 8AAB6C3E51B1E70B078CFD8A4025514F /* PBXContainerItemProxy */;\n\t\t};\n\t\t871D865CD2E0FD7ECE21C10E35270274 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = ReactCommon;\n\t\t\ttarget = B6D5DD49633DFF0657B8C3F08EB3ABA9 /* ReactCommon */;\n\t\t\ttargetProxy = 230B69802ADF4E4DE0EC880F086EDF62 /* PBXContainerItemProxy */;\n\t\t};\n\t\t8750AD47ADC9B6FEDFC2A066D7BFFB17 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = FBLazyVector;\n\t\t\ttarget = 8CC4EAA817AA86310D1900F1DAB3580F /* FBLazyVector */;\n\t\t\ttargetProxy = 86B5CD38F12BDE8F478A7604F2D1F3CF /* PBXContainerItemProxy */;\n\t\t};\n\t\t88ECB54C2DC159A81364054DF452E759 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = glog;\n\t\t\ttarget = D0EFEFB685D97280256C559792236873 /* glog */;\n\t\t\ttargetProxy = 07FEE5CA0F570179CD895CC0EBCEF25A /* PBXContainerItemProxy */;\n\t\t};\n\t\t89236A9ED15BD42914C7EE0DB075FF13 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"RCT-Folly\";\n\t\t\ttarget = EC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */;\n\t\t\ttargetProxy = 056D3BFB7D1D8A7D376FAFA2B66FB8C8 /* PBXContainerItemProxy */;\n\t\t};\n\t\t8938CD6C0EA0ADBE192399759E9D2533 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsinspector\";\n\t\t\ttarget = F7D033C4C128EECAA020990641FA985F /* React-jsinspector */;\n\t\t\ttargetProxy = B6DD8966E1DDD9372FDA125F3D9731FF /* PBXContainerItemProxy */;\n\t\t};\n\t\t89535D4EB0336731DEC23A6271479D59 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-graphics\";\n\t\t\ttarget = 4BDD270EACFE5730793AEF0B9BCCBA31 /* React-graphics */;\n\t\t\ttargetProxy = 9A59483D3DD8007F31406C2A1D52E8EB /* PBXContainerItemProxy */;\n\t\t};\n\t\t89FAF2292B0B577B32C07291FF41EC3D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = ReactCommon;\n\t\t\ttarget = B6D5DD49633DFF0657B8C3F08EB3ABA9 /* ReactCommon */;\n\t\t\ttargetProxy = D468F98852D61A99CD42F174A928E8DA /* PBXContainerItemProxy */;\n\t\t};\n\t\t8A01144C4811FC96968CD28E8FC601CF /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"RCT-Folly\";\n\t\t\ttarget = EC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */;\n\t\t\ttargetProxy = 77E927E30D46B85E76EB2A6BC7C528FC /* PBXContainerItemProxy */;\n\t\t};\n\t\t8AC7F91A27E478D094028729D120C453 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"RCT-Folly\";\n\t\t\ttarget = EC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */;\n\t\t\ttargetProxy = 1C2EB609658547D5066D047531E2E9CA /* PBXContainerItemProxy */;\n\t\t};\n\t\t8B08CEFAEA22CE15FF8ECBCB9B952604 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-CoreModules\";\n\t\t\ttarget = E16E206437995280D349D4B67695C894 /* React-CoreModules */;\n\t\t\ttargetProxy = A2EB194373B9393B3358E1E1FA0EBD05 /* PBXContainerItemProxy */;\n\t\t};\n\t\t8BA87EBAE07B939A129DE936919B2437 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsi\";\n\t\t\ttarget = FA877ADC442CB19CF61793D234C8B131 /* React-jsi */;\n\t\t\ttargetProxy = AE96CA5B7DA7C75729EC0BEF7C0FFE9D /* PBXContainerItemProxy */;\n\t\t};\n\t\t8BB4CAD4E9AA9A76F4EFFF8A03EE5330 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-logger\";\n\t\t\ttarget = 083B602EA19B4AD50EC53C0602F29A7D /* React-logger */;\n\t\t\ttargetProxy = C73838D3F0AFD4D6E76EA1E846E47074 /* PBXContainerItemProxy */;\n\t\t};\n\t\t8CE477AD6CC82F0D980B15A3D4A459E7 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Core\";\n\t\t\ttarget = 7ACAA9BE580DD31A5CB9D97C45D9492D /* React-Core */;\n\t\t\ttargetProxy = E643492F477E73D73B4DBB1DB06BC7D4 /* PBXContainerItemProxy */;\n\t\t};\n\t\t8DC5372506CC8E27F51143581C74C5F7 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-featureflags\";\n\t\t\ttarget = 28CE447E6F9C5F0EECC0CDD607D06A24 /* React-featureflags */;\n\t\t\ttargetProxy = 24F856B5ACF07FE391D964E89D193522 /* PBXContainerItemProxy */;\n\t\t};\n\t\t8E44E87D6B5FFB6F70D006C75B7A3B1B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-callinvoker\";\n\t\t\ttarget = 2681CB7EF647E61F4F9A43029C235607 /* React-callinvoker */;\n\t\t\ttargetProxy = 7C40A37CAC285B68DA5664FAD4BE3490 /* PBXContainerItemProxy */;\n\t\t};\n\t\t900EE9B525D81318F7468BA33F615A63 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-runtimescheduler\";\n\t\t\ttarget = 52C3F83DB80E5D527EDA54FA1DE5470A /* React-runtimescheduler */;\n\t\t\ttargetProxy = DC87078558AE74568DA001162E941EDB /* PBXContainerItemProxy */;\n\t\t};\n\t\t90640B83A8182E361131EC5865B94EF6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Core\";\n\t\t\ttarget = 7ACAA9BE580DD31A5CB9D97C45D9492D /* React-Core */;\n\t\t\ttargetProxy = 9A63F0A7EC65A8B4E2442C2C924DAD9C /* PBXContainerItemProxy */;\n\t\t};\n\t\t907F691A1D77DB86BE3D65612BA344AC /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"RCT-Folly\";\n\t\t\ttarget = EC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */;\n\t\t\ttargetProxy = B24AA1E618A3ECA98448662282BBE973 /* PBXContainerItemProxy */;\n\t\t};\n\t\t9412045B42FDBCDBB036F663A3BEC279 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-featureflags\";\n\t\t\ttarget = 28CE447E6F9C5F0EECC0CDD607D06A24 /* React-featureflags */;\n\t\t\ttargetProxy = 593B340C65DA8AEF21E6D8AC52660544 /* PBXContainerItemProxy */;\n\t\t};\n\t\t947BAD951BF31358EBBD7AB219F896DF /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-cxxreact\";\n\t\t\ttarget = 463F41A7E8B252F8AC5024DA1F4AF6DA /* React-cxxreact */;\n\t\t\ttargetProxy = D96E678A5C6F642E7B0A7E9DC29CF465 /* PBXContainerItemProxy */;\n\t\t};\n\t\t94FAD4F9BBCBE1444B11C91C436E40FC /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTText\";\n\t\t\ttarget = DBD2D83E10F8B7D3F4E0E34E6A9FCFA6 /* React-RCTText */;\n\t\t\ttargetProxy = 2F14569C24AAF9E98FAFC248465DC9E5 /* PBXContainerItemProxy */;\n\t\t};\n\t\t9563F68F9BD1749F7443FD66E9590B85 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"hermes-engine\";\n\t\t\ttarget = 985FEA01F314F3C00F0C1E1181E6C4A5 /* hermes-engine */;\n\t\t\ttargetProxy = E84A9F4D561E1111D32BA3A2B52CDAE0 /* PBXContainerItemProxy */;\n\t\t};\n\t\t9574B0698E37FC3108573EFE439B41A8 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTActionSheet\";\n\t\t\ttarget = 11989A5E568B3B69655EE0C13DCDA3F9 /* React-RCTActionSheet */;\n\t\t\ttargetProxy = B96395E64F84E570087610FC9A4A1AE7 /* PBXContainerItemProxy */;\n\t\t};\n\t\t95A27BB9F1F8CA547737F477253E25D4 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Core\";\n\t\t\ttarget = 7ACAA9BE580DD31A5CB9D97C45D9492D /* React-Core */;\n\t\t\ttargetProxy = 5330B576E39CDDCC6D01B0513A2C8F64 /* PBXContainerItemProxy */;\n\t\t};\n\t\t961BDE36B0A650A306E262C44158CA8B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"RCT-Folly\";\n\t\t\ttarget = EC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */;\n\t\t\ttargetProxy = 8B89516148A1AC15EE488B8C02430723 /* PBXContainerItemProxy */;\n\t\t};\n\t\t96372FB99D877DCA073114668A01F79C /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Mapbuffer\";\n\t\t\ttarget = 091003D98BDA80B01B9E35CADE3947F0 /* React-Mapbuffer */;\n\t\t\ttargetProxy = 12CBD29BC4AA7FCAC2191790822A8408 /* PBXContainerItemProxy */;\n\t\t};\n\t\t96F7AC019278453752BB26B62233BA22 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-debug\";\n\t\t\ttarget = 0C050E11C4409D3BFAE9CC219C4D6195 /* React-debug */;\n\t\t\ttargetProxy = E13F53BC3F75A136CF62B889D823DA98 /* PBXContainerItemProxy */;\n\t\t};\n\t\t977353FAAD596E850D4C7182EB9509D4 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-graphics\";\n\t\t\ttarget = 4BDD270EACFE5730793AEF0B9BCCBA31 /* React-graphics */;\n\t\t\ttargetProxy = 96889FED11AA7E66812D490878B97588 /* PBXContainerItemProxy */;\n\t\t};\n\t\t97E7B6DE91BBF0ECDCAA43F61EF2CB2C /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = DoubleConversion;\n\t\t\ttarget = 2AB2EF542954AB1C999E03BFEF8DE806 /* DoubleConversion */;\n\t\t\ttargetProxy = 8BE4793AB705B3DB8FC95B2A3022A7FA /* PBXContainerItemProxy */;\n\t\t};\n\t\t984847B7473A8412AEFAF77B4664F75D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsi\";\n\t\t\ttarget = FA877ADC442CB19CF61793D234C8B131 /* React-jsi */;\n\t\t\ttargetProxy = 34CA178C3014A040FF0B0E0EC2D01AC5 /* PBXContainerItemProxy */;\n\t\t};\n\t\t991ED2A86E606300A3C9E5A82B68AC3D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-debug\";\n\t\t\ttarget = 0C050E11C4409D3BFAE9CC219C4D6195 /* React-debug */;\n\t\t\ttargetProxy = 04F2717E51D21D9611B67F123B87B7E7 /* PBXContainerItemProxy */;\n\t\t};\n\t\t9946E1AB867FFEFC550310A00E3C6D73 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTAppDelegate\";\n\t\t\ttarget = C2B1B75CCC326124F29FE703CC59BFB7 /* React-RCTAppDelegate */;\n\t\t\ttargetProxy = B49957FEA3DBA79C960C4BF33FB89693 /* PBXContainerItemProxy */;\n\t\t};\n\t\t99F6DDAF65F28CC726441A0C018AE3A7 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-runtimescheduler\";\n\t\t\ttarget = 52C3F83DB80E5D527EDA54FA1DE5470A /* React-runtimescheduler */;\n\t\t\ttargetProxy = 0DF9EB235A025A0E7225BD3835E9A8CC /* PBXContainerItemProxy */;\n\t\t};\n\t\t99FAEE95F441DDC413069EB0FD2E0D6F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTVibration\";\n\t\t\ttarget = 53D121F9F9BB0F8AC1C94A12C5A8572F /* React-RCTVibration */;\n\t\t\ttargetProxy = C85A7AAACB052BE3D7FC7D52B64204D5 /* PBXContainerItemProxy */;\n\t\t};\n\t\t9A68278B027713D1161E945A25B9731E /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RuntimeHermes\";\n\t\t\ttarget = 0EF07AE1AD53436E8D2B9B0086EA0163 /* React-RuntimeHermes */;\n\t\t\ttargetProxy = CB02A6F103714BDDE795941B4C8F0F1C /* PBXContainerItemProxy */;\n\t\t};\n\t\t9A7B30DF2DCFFDB397FF212296E4935B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"hermes-engine\";\n\t\t\ttarget = 985FEA01F314F3C00F0C1E1181E6C4A5 /* hermes-engine */;\n\t\t\ttargetProxy = 03E24E6D4CF66A0B6865B7EA2B2BCDD4 /* PBXContainerItemProxy */;\n\t\t};\n\t\t9AC0F8F93F3A0DB72B7D88512F803C35 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = RCTTypeSafety;\n\t\t\ttarget = D20469A9A1E5CFB26045EAEBE3F88E5E /* RCTTypeSafety */;\n\t\t\ttargetProxy = 0BBE9531017E2DAF1FE8803E7ECD8206 /* PBXContainerItemProxy */;\n\t\t};\n\t\t9C411B2CC3C4A28BA72E9017965B8DB1 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = glog;\n\t\t\ttarget = D0EFEFB685D97280256C559792236873 /* glog */;\n\t\t\ttargetProxy = 50EB5FDA61EF17A3F3258D62A351B614 /* PBXContainerItemProxy */;\n\t\t};\n\t\t9CA446479094667088F29B3DC4E12F7A /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-nativeconfig\";\n\t\t\ttarget = B69D68A280EC3E60655BD2C715ACB004 /* React-nativeconfig */;\n\t\t\ttargetProxy = 0D062956D3247F5A6F2348C5E96A2381 /* PBXContainerItemProxy */;\n\t\t};\n\t\t9CB7426A4D28082958291C03049EB5C0 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = glog;\n\t\t\ttarget = D0EFEFB685D97280256C559792236873 /* glog */;\n\t\t\ttargetProxy = 2F88905B01E2F8DF3A2DA844E7BC7E4E /* PBXContainerItemProxy */;\n\t\t};\n\t\t9D5BDF20084DF3E8210FEE9F61DE5032 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTVibration\";\n\t\t\ttarget = 53D121F9F9BB0F8AC1C94A12C5A8572F /* React-RCTVibration */;\n\t\t\ttargetProxy = 29D99B6382EC442BC3E615262B0BCBED /* PBXContainerItemProxy */;\n\t\t};\n\t\t9D8860389569C0B4CF9D53F307783D25 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RuntimeCore\";\n\t\t\ttarget = C7F600C052808C7C987C26EC74B3A290 /* React-RuntimeCore */;\n\t\t\ttargetProxy = 36D6711AE32882ED3092979037CC3405 /* PBXContainerItemProxy */;\n\t\t};\n\t\t9DC6B2339493349D425BEB578C7330E3 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = RCTTypeSafety;\n\t\t\ttarget = D20469A9A1E5CFB26045EAEBE3F88E5E /* RCTTypeSafety */;\n\t\t\ttargetProxy = 761B75C34BB1B42FA942F96540E4BC15 /* PBXContainerItemProxy */;\n\t\t};\n\t\t9E1BF3FF53787FC2039BF2B7A62F9DDC /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = ReactCommon;\n\t\t\ttarget = B6D5DD49633DFF0657B8C3F08EB3ABA9 /* ReactCommon */;\n\t\t\ttargetProxy = B46597F4B2FF6D8BBB0FCAC80B136EDB /* PBXContainerItemProxy */;\n\t\t};\n\t\t9E50028CCFFBB53BD3CED93BCAA23462 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTLinking\";\n\t\t\ttarget = 6FE9147F8AAA4DE676C190F680F47AE2 /* React-RCTLinking */;\n\t\t\ttargetProxy = 8469D13E4B9BE29DE37C00B9952D6926 /* PBXContainerItemProxy */;\n\t\t};\n\t\t9F3B65DF4A9E574371431515F6480017 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-hermes\";\n\t\t\ttarget = 20F066A71CEA5EECC7463413442F2B77 /* React-hermes */;\n\t\t\ttargetProxy = 1F447B67D4490096D87F14FD5876C024 /* PBXContainerItemProxy */;\n\t\t};\n\t\t9F7AA6257356748F3AC3589C372117C4 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jserrorhandler\";\n\t\t\ttarget = 27F648AD269E94404D6A7547C4F9C683 /* React-jserrorhandler */;\n\t\t\ttargetProxy = 427FF6CB1456A5DB2E43054C10D407AF /* PBXContainerItemProxy */;\n\t\t};\n\t\t9F95560B9E4E38DE203B4EDF2F2E238C /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsinspector\";\n\t\t\ttarget = F7D033C4C128EECAA020990641FA985F /* React-jsinspector */;\n\t\t\ttargetProxy = 5A66969F2F26AF689BBE09506F583E5E /* PBXContainerItemProxy */;\n\t\t};\n\t\t9FD34078FD450123876A7A3CF8C74DDD /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsi\";\n\t\t\ttarget = FA877ADC442CB19CF61793D234C8B131 /* React-jsi */;\n\t\t\ttargetProxy = B5C49ED7C22908993DA03524268054A1 /* PBXContainerItemProxy */;\n\t\t};\n\t\tA0662C7E8E6F4BB1BED6AB5116B068AC /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-rendererdebug\";\n\t\t\ttarget = 9F96BF8B7FC28F5CF47242D7A73B11DA /* React-rendererdebug */;\n\t\t\ttargetProxy = 7F9ADB115EE8B656B0A4D9610F64585F /* PBXContainerItemProxy */;\n\t\t};\n\t\tA18F34A9AE12CA159FA4BE10BD0F08E6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-utils\";\n\t\t\ttarget = 30621D5A9764AC0BD9D02E87B2EA6665 /* React-utils */;\n\t\t\ttargetProxy = FFFED8AC52E33B03563EFCEEEFF2513C /* PBXContainerItemProxy */;\n\t\t};\n\t\tA254B74C24804FC2C8CB1B1A308C537C /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = RCTTypeSafety;\n\t\t\ttarget = D20469A9A1E5CFB26045EAEBE3F88E5E /* RCTTypeSafety */;\n\t\t\ttargetProxy = 2B40EAAE1015F3040D2BFC3B84B8C0A2 /* PBXContainerItemProxy */;\n\t\t};\n\t\tA3A103DDF211E33A422885D060EF6862 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-featureflags\";\n\t\t\ttarget = 28CE447E6F9C5F0EECC0CDD607D06A24 /* React-featureflags */;\n\t\t\ttargetProxy = 57B24B86E8BC2DC4B873AFA4728A28F2 /* PBXContainerItemProxy */;\n\t\t};\n\t\tA3BDD4A09B967B012B64ACA6D70CA378 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-utils\";\n\t\t\ttarget = 30621D5A9764AC0BD9D02E87B2EA6665 /* React-utils */;\n\t\t\ttargetProxy = AC0EFE9849C86BC9EEE3998C75BF7E59 /* PBXContainerItemProxy */;\n\t\t};\n\t\tA482D354857B96FF6608C1ECB1410DE1 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = Yoga;\n\t\t\ttarget = 2B25F90D819B9ADF2AF2D8733A890333 /* Yoga */;\n\t\t\ttargetProxy = 4BD82DCEA208F83CDCBFE4428A843743 /* PBXContainerItemProxy */;\n\t\t};\n\t\tA62ADA2BF30BF8351A4A154BA1DFD26D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Core\";\n\t\t\ttarget = 7ACAA9BE580DD31A5CB9D97C45D9492D /* React-Core */;\n\t\t\ttargetProxy = FEFEF086D7B146B96B992081E8C52CA3 /* PBXContainerItemProxy */;\n\t\t};\n\t\tA63481D34C5560C5F3A9199783D01B6E /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsi\";\n\t\t\ttarget = FA877ADC442CB19CF61793D234C8B131 /* React-jsi */;\n\t\t\ttargetProxy = 0934208EB4E70167C10A41B542FE527B /* PBXContainerItemProxy */;\n\t\t};\n\t\tA6D31FE8EB6B2659595EE4D3E5B8CC0B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTSettings\";\n\t\t\ttarget = 680299219D3A48D42A648AF6706275A9 /* React-RCTSettings */;\n\t\t\ttargetProxy = 21E5AFABF1F1B440FA387F63E1ECDAE1 /* PBXContainerItemProxy */;\n\t\t};\n\t\tA73A9A2AC3DD393BE94B96FC0811F52F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"RCT-Folly\";\n\t\t\ttarget = EC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */;\n\t\t\ttargetProxy = BC0528EBC67F7BABF5B54EF212893752 /* PBXContainerItemProxy */;\n\t\t};\n\t\tA7BF697A5BE5F29B8EFC9A4547AE419C /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = glog;\n\t\t\ttarget = D0EFEFB685D97280256C559792236873 /* glog */;\n\t\t\ttargetProxy = 15CBA2BD8EF64756C0767A60F7567316 /* PBXContainerItemProxy */;\n\t\t};\n\t\tA8E8A02278FC1510C1E4AE330186E3DB /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = fmt;\n\t\t\ttarget = 02B79DFED924FA19CA90EC69614733E1 /* fmt */;\n\t\t\ttargetProxy = C4C8A76B4B78C8FC91DE8EA0A599DDC7 /* PBXContainerItemProxy */;\n\t\t};\n\t\tAA6B0483A872C31D19C5C582CC33A30D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jserrorhandler\";\n\t\t\ttarget = 27F648AD269E94404D6A7547C4F9C683 /* React-jserrorhandler */;\n\t\t\ttargetProxy = 7AF7CA4C4F7DB433479DC151414ECC52 /* PBXContainerItemProxy */;\n\t\t};\n\t\tAD028C4C9C138F32FF283BF9E651428A /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsi\";\n\t\t\ttarget = FA877ADC442CB19CF61793D234C8B131 /* React-jsi */;\n\t\t\ttargetProxy = 05D52A397C8C50527687630B5436F9CC /* PBXContainerItemProxy */;\n\t\t};\n\t\tAD648138192ED2E45C736EEA5CF92E94 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-nativeconfig\";\n\t\t\ttarget = B69D68A280EC3E60655BD2C715ACB004 /* React-nativeconfig */;\n\t\t\ttargetProxy = 79DB034638266C6FDC5132A84FA94A15 /* PBXContainerItemProxy */;\n\t\t};\n\t\tAE118212FA0D279BEBC9F02C20320565 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"hermes-engine\";\n\t\t\ttarget = 985FEA01F314F3C00F0C1E1181E6C4A5 /* hermes-engine */;\n\t\t\ttargetProxy = F57A6DB070CE213FEBA51D9C1BC21F64 /* PBXContainerItemProxy */;\n\t\t};\n\t\tAE16BCB7B1F274AFC64E6CE1A73649DE /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = fmt;\n\t\t\ttarget = 02B79DFED924FA19CA90EC69614733E1 /* fmt */;\n\t\t\ttargetProxy = 77B61E545D3EE505689E5A88FB34006D /* PBXContainerItemProxy */;\n\t\t};\n\t\tAFF83814306FEE2AB836E168DACED238 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = ReactCommon;\n\t\t\ttarget = B6D5DD49633DFF0657B8C3F08EB3ABA9 /* ReactCommon */;\n\t\t\ttargetProxy = 96C05CE8F4A9CD43357BA06485F8994A /* PBXContainerItemProxy */;\n\t\t};\n\t\tB08256724219B4019F944355CBD4DEE1 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsi\";\n\t\t\ttarget = FA877ADC442CB19CF61793D234C8B131 /* React-jsi */;\n\t\t\ttargetProxy = F36DB966C710B5B333317F75182AED2F /* PBXContainerItemProxy */;\n\t\t};\n\t\tB0D77E614B2A29B1C9D7D28FC2E4F4F4 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Fabric\";\n\t\t\ttarget = 50DBAF155FAFB994E067BA8820221EDF /* React-Fabric */;\n\t\t\ttargetProxy = 336517C4087738649F1E1F4AB8F8519E /* PBXContainerItemProxy */;\n\t\t};\n\t\tB0F8796B619A0B7C593B255CE5B08E22 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"RCT-Folly\";\n\t\t\ttarget = EC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */;\n\t\t\ttargetProxy = 26E8C064D0C350303EC25814160E5507 /* PBXContainerItemProxy */;\n\t\t};\n\t\tB11620F0C0256DCD58AC236A8FB0BF9D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = RCTRequired;\n\t\t\ttarget = E7E7CE52C8C68B17224FF8C262D80ABF /* RCTRequired */;\n\t\t\ttargetProxy = 1A311E894E75265D572441282B7479A6 /* PBXContainerItemProxy */;\n\t\t};\n\t\tB1E71F384FB952801A11CB94394AC12E /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Core\";\n\t\t\ttarget = 7ACAA9BE580DD31A5CB9D97C45D9492D /* React-Core */;\n\t\t\ttargetProxy = DB0DED4E98D854FD7FE257842C962DEC /* PBXContainerItemProxy */;\n\t\t};\n\t\tB2077D6B91054427593B7239A83DFA23 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-ImageManager\";\n\t\t\ttarget = B5E1D7706FCB7EC5FF39F8CDA49A5653 /* React-ImageManager */;\n\t\t\ttargetProxy = 77BB51BE51B9062B6A3C86AB77078D7C /* PBXContainerItemProxy */;\n\t\t};\n\t\tB212680BD31F13D2F6279DBAD3A1E825 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTImage\";\n\t\t\ttarget = 4F265533AAB7C8985856EC78A33164BB /* React-RCTImage */;\n\t\t\ttargetProxy = 91973EF9B88BD3433821DE7E02BCCE66 /* PBXContainerItemProxy */;\n\t\t};\n\t\tB24640D5A8CF4509EC3101762B86BCAE /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-runtimeexecutor\";\n\t\t\ttarget = 54EB12219122432FA744088BC5A680D2 /* React-runtimeexecutor */;\n\t\t\ttargetProxy = AA28726CD41308E7D4C6D49AF678D9CD /* PBXContainerItemProxy */;\n\t\t};\n\t\tB2FC425DE6D70B89E4B66C419D80D21B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"RCT-Folly\";\n\t\t\ttarget = EC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */;\n\t\t\ttargetProxy = 1250E130FB93020268E26EB59677362A /* PBXContainerItemProxy */;\n\t\t};\n\t\tB339E8D2195D5B0E12F1886B392070B9 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-graphics\";\n\t\t\ttarget = 4BDD270EACFE5730793AEF0B9BCCBA31 /* React-graphics */;\n\t\t\ttargetProxy = FE3B276DC9F6BE63ACFEBDDE0FC16DEA /* PBXContainerItemProxy */;\n\t\t};\n\t\tB3A68A22B6988E30A3FE9B295B5ECD18 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsinspector\";\n\t\t\ttarget = F7D033C4C128EECAA020990641FA985F /* React-jsinspector */;\n\t\t\ttargetProxy = 2C77EA8CB35EF7DA9E933C9A98AC198E /* PBXContainerItemProxy */;\n\t\t};\n\t\tB5E4CB125000A02D7C47D5BC8B2235E2 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = glog;\n\t\t\ttarget = D0EFEFB685D97280256C559792236873 /* glog */;\n\t\t\ttargetProxy = 0743DC1CCDBCCF6C3ECD3224DB5EF4B7 /* PBXContainerItemProxy */;\n\t\t};\n\t\tB84433E64D21A3285F1532F01F6A24CA /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-utils\";\n\t\t\ttarget = 30621D5A9764AC0BD9D02E87B2EA6665 /* React-utils */;\n\t\t\ttargetProxy = 3BDB96421767BAAB9AE9DC3CE9603198 /* PBXContainerItemProxy */;\n\t\t};\n\t\tB84F02AF765914933817049A11982A2D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-hermes\";\n\t\t\ttarget = 20F066A71CEA5EECC7463413442F2B77 /* React-hermes */;\n\t\t\ttargetProxy = C4A085BD4076C29C8993F50E76C4AACA /* PBXContainerItemProxy */;\n\t\t};\n\t\tB866B352B4413F93E9054502E08ED0E0 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = fmt;\n\t\t\ttarget = 02B79DFED924FA19CA90EC69614733E1 /* fmt */;\n\t\t\ttargetProxy = A3265F4A2E09A773944413294B402BBA /* PBXContainerItemProxy */;\n\t\t};\n\t\tB8F477BE7309D6FAEAD56FADEAB4CEE2 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTNetwork\";\n\t\t\ttarget = 651511D7DA7F07F9FC9AA40A2E86270D /* React-RCTNetwork */;\n\t\t\ttargetProxy = CBA1639E79B6F6752FA0776C8012648E /* PBXContainerItemProxy */;\n\t\t};\n\t\tB94AD44411D338A32AFD335004E0B6ED /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTFabric\";\n\t\t\ttarget = 8DED5282246ABFC24F4460D3066C84A0 /* React-RCTFabric */;\n\t\t\ttargetProxy = E3DB328B666D52096C8CDE6E0757E653 /* PBXContainerItemProxy */;\n\t\t};\n\t\tBC3FB7331CDD43D5175E4D47ACA6FE66 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"RCT-Folly\";\n\t\t\ttarget = EC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */;\n\t\t\ttargetProxy = C92744C875EAA3E6A25003782211CED0 /* PBXContainerItemProxy */;\n\t\t};\n\t\tBC679D6E3BA49D363ED5366763750F81 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-NativeModulesApple\";\n\t\t\ttarget = 5807741745EB757C97C09F2D56726BE0 /* React-NativeModulesApple */;\n\t\t\ttargetProxy = 930D2D66F0FBD7D28F5478091197C541 /* PBXContainerItemProxy */;\n\t\t};\n\t\tBCB6931B0CA96D254A87574AEC2F1A72 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = DoubleConversion;\n\t\t\ttarget = 2AB2EF542954AB1C999E03BFEF8DE806 /* DoubleConversion */;\n\t\t\ttargetProxy = B8FAF58B12747184E841D23CA71CB990 /* PBXContainerItemProxy */;\n\t\t};\n\t\tBCC574E946A3A8BCCE454E8E24779B25 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = glog;\n\t\t\ttarget = D0EFEFB685D97280256C559792236873 /* glog */;\n\t\t\ttargetProxy = 4A785EB5F5F23DD60E8AF051ECB80951 /* PBXContainerItemProxy */;\n\t\t};\n\t\tBCF4A5F46D114B97594F5A602DC84C06 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsi\";\n\t\t\ttarget = FA877ADC442CB19CF61793D234C8B131 /* React-jsi */;\n\t\t\ttargetProxy = 283F65F4310F568BCD5E39DD9008F1A3 /* PBXContainerItemProxy */;\n\t\t};\n\t\tBD276791FAA5FE2E186C8D9ABD614362 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-hermes\";\n\t\t\ttarget = 20F066A71CEA5EECC7463413442F2B77 /* React-hermes */;\n\t\t\ttargetProxy = D45B03393137D2E267BC703865B2BC4D /* PBXContainerItemProxy */;\n\t\t};\n\t\tBEB5941835F05376583ABAFE9FFCD30C /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-rendererdebug\";\n\t\t\ttarget = 9F96BF8B7FC28F5CF47242D7A73B11DA /* React-rendererdebug */;\n\t\t\ttargetProxy = 496FB04383EBFF21B0C7DD179C13F5C7 /* PBXContainerItemProxy */;\n\t\t};\n\t\tBEB67114B4EC87924688EEBB8C438FD2 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Core\";\n\t\t\ttarget = 7ACAA9BE580DD31A5CB9D97C45D9492D /* React-Core */;\n\t\t\ttargetProxy = 0C825C2B1718A18CE8B22578116AD9D9 /* PBXContainerItemProxy */;\n\t\t};\n\t\tBEFB8C790410CF0DF996DF64145C5572 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-featureflags\";\n\t\t\ttarget = 28CE447E6F9C5F0EECC0CDD607D06A24 /* React-featureflags */;\n\t\t\ttargetProxy = A3F6FC01C2191DE3CE03D589BC558A96 /* PBXContainerItemProxy */;\n\t\t};\n\t\tBF0242746B38CA409974007B6FEDDC7F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-rendererdebug\";\n\t\t\ttarget = 9F96BF8B7FC28F5CF47242D7A73B11DA /* React-rendererdebug */;\n\t\t\ttargetProxy = B23E152C21979D346C6142DA964C43C5 /* PBXContainerItemProxy */;\n\t\t};\n\t\tBF6DD00FFD442BC49B4DB25016E20500 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RuntimeHermes\";\n\t\t\ttarget = 0EF07AE1AD53436E8D2B9B0086EA0163 /* React-RuntimeHermes */;\n\t\t\ttargetProxy = BF9E600B486A8F752CFBCEC2CC0B1A5A /* PBXContainerItemProxy */;\n\t\t};\n\t\tC03E65D69ABF1DDDBD73AE4A96581425 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-utils\";\n\t\t\ttarget = 30621D5A9764AC0BD9D02E87B2EA6665 /* React-utils */;\n\t\t\ttargetProxy = DA4C32AA37270D436CCA7DDE5E8265E4 /* PBXContainerItemProxy */;\n\t\t};\n\t\tC0494FFB47801B2ED9C5783F9F2E9478 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = DoubleConversion;\n\t\t\ttarget = 2AB2EF542954AB1C999E03BFEF8DE806 /* DoubleConversion */;\n\t\t\ttargetProxy = 8AF54EC1E32237AFABA09EB72FE50F7B /* PBXContainerItemProxy */;\n\t\t};\n\t\tC068FE076C49A4A30B2A1EDDE1FA06B7 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = boost;\n\t\t\ttarget = EFEA55B1B776B6EB4B16F363BFE64D1A /* boost */;\n\t\t\ttargetProxy = 3890C233A2B634142790E17AFC8D817D /* PBXContainerItemProxy */;\n\t\t};\n\t\tC07CFD51EE8A8059EBB505CA0AD77069 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Fabric\";\n\t\t\ttarget = 50DBAF155FAFB994E067BA8820221EDF /* React-Fabric */;\n\t\t\ttargetProxy = F3C88D21EC8227A4B6BD15269AD29503 /* PBXContainerItemProxy */;\n\t\t};\n\t\tC094AAB7D234AC0D42232B6DD5D13EDC /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Core\";\n\t\t\ttarget = 7ACAA9BE580DD31A5CB9D97C45D9492D /* React-Core */;\n\t\t\ttargetProxy = 9716285D0C3617CC9DDE2D786CDB6197 /* PBXContainerItemProxy */;\n\t\t};\n\t\tC0C4944B418CFB040B76FAE356CC1492 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = ReactCommon;\n\t\t\ttarget = B6D5DD49633DFF0657B8C3F08EB3ABA9 /* ReactCommon */;\n\t\t\ttargetProxy = FC6FA740B07F549C508BFDF59462093D /* PBXContainerItemProxy */;\n\t\t};\n\t\tC12817B77A384929CC56F08535650439 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RuntimeApple\";\n\t\t\ttarget = 91D38B18A4E42B1622B83F450706C2F5 /* React-RuntimeApple */;\n\t\t\ttargetProxy = B20E23EC66F22E90033D795BDB740B4E /* PBXContainerItemProxy */;\n\t\t};\n\t\tC155477CCA345D73F3A4071492EC6132 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = RCTTypeSafety;\n\t\t\ttarget = D20469A9A1E5CFB26045EAEBE3F88E5E /* RCTTypeSafety */;\n\t\t\ttargetProxy = B0FBC836348A84E5E4A688B8A910CE45 /* PBXContainerItemProxy */;\n\t\t};\n\t\tC17439E0E9B4A3F8B50C259EF28EA9E3 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-rncore\";\n\t\t\ttarget = B41E34C6B259B9994C513BE178912491 /* React-rncore */;\n\t\t\ttargetProxy = 3F15F1D48A07466A9F8B095CCA36826C /* PBXContainerItemProxy */;\n\t\t};\n\t\tC2AA482EF6D398F117C43A167AACC89F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsiexecutor\";\n\t\t\ttarget = DA0709CAAD589C6E7963495210438021 /* React-jsiexecutor */;\n\t\t\ttargetProxy = CF674C4E3255977E4A866B743B5F5753 /* PBXContainerItemProxy */;\n\t\t};\n\t\tC31A7FFCBECEE6969698A1F56E291707 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTFabric\";\n\t\t\ttarget = 8DED5282246ABFC24F4460D3066C84A0 /* React-RCTFabric */;\n\t\t\ttargetProxy = 0C2AF7FB43C100B3E1DB0861160AA83D /* PBXContainerItemProxy */;\n\t\t};\n\t\tC344777498D9BCEF407C9A6D74F03AF7 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = React;\n\t\t\ttarget = 1BEE828C124E6416179B904A9F66D794 /* React */;\n\t\t\ttargetProxy = 3249A44E515B7313CDC9965DDD33667F /* PBXContainerItemProxy */;\n\t\t};\n\t\tC369B22F0FAE377E5576A8BFE839BAFA /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = fmt;\n\t\t\ttarget = 02B79DFED924FA19CA90EC69614733E1 /* fmt */;\n\t\t\ttargetProxy = 23A81CB39D9D41819B69211A5E314A35 /* PBXContainerItemProxy */;\n\t\t};\n\t\tC38F78AD23A62153D938B6A8D17DB064 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-utils\";\n\t\t\ttarget = 30621D5A9764AC0BD9D02E87B2EA6665 /* React-utils */;\n\t\t\ttargetProxy = F5E042F5B280EE727999F2C1B0962307 /* PBXContainerItemProxy */;\n\t\t};\n\t\tC3F49F70B58B4AE3958816AF5F0A65ED /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = ReactCommon;\n\t\t\ttarget = B6D5DD49633DFF0657B8C3F08EB3ABA9 /* ReactCommon */;\n\t\t\ttargetProxy = 1A02A3242E08B500151ABD06A45B91A0 /* PBXContainerItemProxy */;\n\t\t};\n\t\tC4841FEDE8D48DC4604247F57A37823A /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"RCT-Folly\";\n\t\t\ttarget = EC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */;\n\t\t\ttargetProxy = 5A2F2307A099C28BD6575DF53A5FE136 /* PBXContainerItemProxy */;\n\t\t};\n\t\tC4DD06F137AEDD5B0BB9846AAB2BD11E /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsinspector\";\n\t\t\ttarget = F7D033C4C128EECAA020990641FA985F /* React-jsinspector */;\n\t\t\ttargetProxy = A4E91955EC6E6D3061E9510D936E61FF /* PBXContainerItemProxy */;\n\t\t};\n\t\tC53EA7BC9EAF97E7CE9CA81A0BF12E67 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = FBLazyVector;\n\t\t\ttarget = 8CC4EAA817AA86310D1900F1DAB3580F /* FBLazyVector */;\n\t\t\ttargetProxy = 971D502A30449EA83A63979D19F07B5F /* PBXContainerItemProxy */;\n\t\t};\n\t\tC54A063F17CC52B5972FA1780A6C942F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-NativeModulesApple\";\n\t\t\ttarget = 5807741745EB757C97C09F2D56726BE0 /* React-NativeModulesApple */;\n\t\t\ttargetProxy = F211E267308F7BC87A3AE4BDF64731B9 /* PBXContainerItemProxy */;\n\t\t};\n\t\tC624C37763CA3EB12B45D2F00EB3F35E /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = fmt;\n\t\t\ttarget = 02B79DFED924FA19CA90EC69614733E1 /* fmt */;\n\t\t\ttargetProxy = 645CCB35B56EBAFA23B7777FA9A688EF /* PBXContainerItemProxy */;\n\t\t};\n\t\tC63AA7D158F689A3665F23350A713960 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = DoubleConversion;\n\t\t\ttarget = 2AB2EF542954AB1C999E03BFEF8DE806 /* DoubleConversion */;\n\t\t\ttargetProxy = 72691AD3B737BB0E261D6450E7CC91BF /* PBXContainerItemProxy */;\n\t\t};\n\t\tC690A825B8ED25093B883CF5B4830D9E /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"RCT-Folly\";\n\t\t\ttarget = EC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */;\n\t\t\ttargetProxy = 46052FF3D71EC89028E59421AD272DCF /* PBXContainerItemProxy */;\n\t\t};\n\t\tC6D13BFD6A1F57DBA9138A914EC33F22 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsinspector\";\n\t\t\ttarget = F7D033C4C128EECAA020990641FA985F /* React-jsinspector */;\n\t\t\ttargetProxy = 4ADC4B7DC0EDA1567BEF58C181AD6FD5 /* PBXContainerItemProxy */;\n\t\t};\n\t\tC76947685E95B2A22AF59BB340222EC6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = ReactCommon;\n\t\t\ttarget = B6D5DD49633DFF0657B8C3F08EB3ABA9 /* ReactCommon */;\n\t\t\ttargetProxy = 9AEF32BD5E0F56B926EBB7614301D7E3 /* PBXContainerItemProxy */;\n\t\t};\n\t\tC8AE99661D1A65D85D469BADA683E979 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsi\";\n\t\t\ttarget = FA877ADC442CB19CF61793D234C8B131 /* React-jsi */;\n\t\t\ttargetProxy = FF6DE5A6963902391657FC083B9682A9 /* PBXContainerItemProxy */;\n\t\t};\n\t\tC8BE6A7B0D695D555403A8C1FD672877 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RuntimeCore\";\n\t\t\ttarget = C7F600C052808C7C987C26EC74B3A290 /* React-RuntimeCore */;\n\t\t\ttargetProxy = A16731871E95A4B80332D99A82AEAB81 /* PBXContainerItemProxy */;\n\t\t};\n\t\tC932986C08154C27C8B08FB09112E220 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = SocketRocket;\n\t\t\ttarget = 1948D0B63D2CF6A48E18B0B292BC6091 /* SocketRocket */;\n\t\t\ttargetProxy = 3AB1A2D14D238F5E0D710BD34D8999D2 /* PBXContainerItemProxy */;\n\t\t};\n\t\tC9D96005FA6A6CFC6678D7B193F636E2 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = RCTTypeSafety;\n\t\t\ttarget = D20469A9A1E5CFB26045EAEBE3F88E5E /* RCTTypeSafety */;\n\t\t\ttargetProxy = 45BBA5E24DF3E98A1E33D5F7099F04C8 /* PBXContainerItemProxy */;\n\t\t};\n\t\tCA2CD4FD0049B212F2F4F143613B1746 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = RCTTypeSafety;\n\t\t\ttarget = D20469A9A1E5CFB26045EAEBE3F88E5E /* RCTTypeSafety */;\n\t\t\ttargetProxy = 37BFECCBE92D5B1175C2BF3EEA9DB4A8 /* PBXContainerItemProxy */;\n\t\t};\n\t\tCA721AC43DBB07B546D7BE24F41219C2 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-utils\";\n\t\t\ttarget = 30621D5A9764AC0BD9D02E87B2EA6665 /* React-utils */;\n\t\t\ttargetProxy = 88F22E372111C3D44383E8AD8F2A1EB3 /* PBXContainerItemProxy */;\n\t\t};\n\t\tCC7579BBF210D2BB6A286C8DBED8DA3B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-graphics\";\n\t\t\ttarget = 4BDD270EACFE5730793AEF0B9BCCBA31 /* React-graphics */;\n\t\t\ttargetProxy = 2218ADE51E9ABC2171A5F0151EFD97C5 /* PBXContainerItemProxy */;\n\t\t};\n\t\tCCCDA559E86BE44E9BF7387A47AEAE68 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsi\";\n\t\t\ttarget = FA877ADC442CB19CF61793D234C8B131 /* React-jsi */;\n\t\t\ttargetProxy = 51059926E149D7D7A46AD514913F4BA7 /* PBXContainerItemProxy */;\n\t\t};\n\t\tCD005D8BB7E9E45730DD2FA1B03216F6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"hermes-engine\";\n\t\t\ttarget = 985FEA01F314F3C00F0C1E1181E6C4A5 /* hermes-engine */;\n\t\t\ttargetProxy = AA7D7226734A644480DC2905FB4F0756 /* PBXContainerItemProxy */;\n\t\t};\n\t\tCD1B88DCEAFFF3408F714BF195A0BA9A /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTVibration\";\n\t\t\ttarget = 53D121F9F9BB0F8AC1C94A12C5A8572F /* React-RCTVibration */;\n\t\t\ttargetProxy = 235EEBD6BE88E5969BC95CCFAE81FDDD /* PBXContainerItemProxy */;\n\t\t};\n\t\tCD98C2F774F5A8508B3A70C6BAEB1A96 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsi\";\n\t\t\ttarget = FA877ADC442CB19CF61793D234C8B131 /* React-jsi */;\n\t\t\ttargetProxy = 9731399883802412C950BE25D7336D43 /* PBXContainerItemProxy */;\n\t\t};\n\t\tCE6EA560516182C0A6BB28F3AC6094FB /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTSettings\";\n\t\t\ttarget = 680299219D3A48D42A648AF6706275A9 /* React-RCTSettings */;\n\t\t\ttargetProxy = 6F59DF752512991C7BB5D7117332E2B8 /* PBXContainerItemProxy */;\n\t\t};\n\t\tCEFF80344602F76C95E6272C9240036C /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Codegen\";\n\t\t\ttarget = 66B8F5758E6F90E16807A85C003CE61F /* React-Codegen */;\n\t\t\ttargetProxy = 8A0C1EFB40903E64193D071D4DEEF627 /* PBXContainerItemProxy */;\n\t\t};\n\t\tCF9FB788BE979D8114BF13DAF8BDE56D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = glog;\n\t\t\ttarget = D0EFEFB685D97280256C559792236873 /* glog */;\n\t\t\ttargetProxy = F5A41D11AE2DF6500E1139FE35DBF1C1 /* PBXContainerItemProxy */;\n\t\t};\n\t\tD013530604A03ED59DD33E5DA7A36E1D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-runtimeexecutor\";\n\t\t\ttarget = 54EB12219122432FA744088BC5A680D2 /* React-runtimeexecutor */;\n\t\t\ttargetProxy = 6EE56E372692932C8B3E2285CB2D30EA /* PBXContainerItemProxy */;\n\t\t};\n\t\tD0C0B60DD3D34657FCB73A9DE8B10D4E /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = Yoga;\n\t\t\ttarget = 2B25F90D819B9ADF2AF2D8733A890333 /* Yoga */;\n\t\t\ttargetProxy = 51590C4C9586B9EBD9EB9276CDA00E78 /* PBXContainerItemProxy */;\n\t\t};\n\t\tD0C97A79D6B5E0234424B706959B344C /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = SocketRocket;\n\t\t\ttarget = 1948D0B63D2CF6A48E18B0B292BC6091 /* SocketRocket */;\n\t\t\ttargetProxy = 8BAC0CA3123950377D2AA004B741EE09 /* PBXContainerItemProxy */;\n\t\t};\n\t\tD123B77D7258E6315AD79BB6D955680C /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-FabricImage\";\n\t\t\ttarget = A5E93F38E96B3A37575BEC88AD69AE85 /* React-FabricImage */;\n\t\t\ttargetProxy = E99784687BF13C6C13BFDF77C9349E3B /* PBXContainerItemProxy */;\n\t\t};\n\t\tD186B474CBACECCC487284A6C1D73E8F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-runtimeexecutor\";\n\t\t\ttarget = 54EB12219122432FA744088BC5A680D2 /* React-runtimeexecutor */;\n\t\t\ttargetProxy = 09E19762D2B4D46BC3E1439FDA65CFFB /* PBXContainerItemProxy */;\n\t\t};\n\t\tD1D39D73E05A402E21CB473870E4A4BA /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = DoubleConversion;\n\t\t\ttarget = 2AB2EF542954AB1C999E03BFEF8DE806 /* DoubleConversion */;\n\t\t\ttargetProxy = B050846017362E483E884DFA743A5521 /* PBXContainerItemProxy */;\n\t\t};\n\t\tD1DB74BE38ADE6F876059D7CF8B09249 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-featureflags\";\n\t\t\ttarget = 28CE447E6F9C5F0EECC0CDD607D06A24 /* React-featureflags */;\n\t\t\ttargetProxy = C4B664DF5B07F01FA8E61FD0BD39255D /* PBXContainerItemProxy */;\n\t\t};\n\t\tD24CEC53FD6AF9954BB5EC0ABFD10825 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-perflogger\";\n\t\t\ttarget = F1E2583679398CB5F4D2B3272E9B198F /* React-perflogger */;\n\t\t\ttargetProxy = 7B2A662A0484D478867544ECF561FF26 /* PBXContainerItemProxy */;\n\t\t};\n\t\tD2F9E46EE53762B96D30861C5B6374B7 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-runtimescheduler\";\n\t\t\ttarget = 52C3F83DB80E5D527EDA54FA1DE5470A /* React-runtimescheduler */;\n\t\t\ttargetProxy = C342240C879F110F98B32A6586138BAC /* PBXContainerItemProxy */;\n\t\t};\n\t\tD3A74B4CE67ACE3CD7D76E524C2644BA /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"RCT-Folly\";\n\t\t\ttarget = EC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */;\n\t\t\ttargetProxy = 5E1475973708794027FA6EF77468A061 /* PBXContainerItemProxy */;\n\t\t};\n\t\tD3E014E2312527475A53EFF6DEC95B1E /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-logger\";\n\t\t\ttarget = 083B602EA19B4AD50EC53C0602F29A7D /* React-logger */;\n\t\t\ttargetProxy = F9EAF1F1FB5D7937A895952B6DC44E2C /* PBXContainerItemProxy */;\n\t\t};\n\t\tD3FE2FB1AC5AF0B7210C03C7CACCEE4F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-rendererdebug\";\n\t\t\ttarget = 9F96BF8B7FC28F5CF47242D7A73B11DA /* React-rendererdebug */;\n\t\t\ttargetProxy = 3B8A3FBDB20D3A657E89E7BDB7525ED8 /* PBXContainerItemProxy */;\n\t\t};\n\t\tD50E0503B0649D4A32DEA23BFA42C61D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTNetwork\";\n\t\t\ttarget = 651511D7DA7F07F9FC9AA40A2E86270D /* React-RCTNetwork */;\n\t\t\ttargetProxy = B3A65B874F5E1F12E1BEE7077B201AF2 /* PBXContainerItemProxy */;\n\t\t};\n\t\tD596FE4363A5F7DED779B98D3DECE515 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Fabric\";\n\t\t\ttarget = 50DBAF155FAFB994E067BA8820221EDF /* React-Fabric */;\n\t\t\ttargetProxy = 285E1159FDF1A7A09F6A29288FE2D2C3 /* PBXContainerItemProxy */;\n\t\t};\n\t\tD5B29CCC47333E6A4DECCCEA63418522 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"hermes-engine\";\n\t\t\ttarget = 985FEA01F314F3C00F0C1E1181E6C4A5 /* hermes-engine */;\n\t\t\ttargetProxy = A33E41C8F72330ECDE20BF394124C97B /* PBXContainerItemProxy */;\n\t\t};\n\t\tD5EFD2E9F124E1BAB6AC216A804BAF12 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-NativeModulesApple\";\n\t\t\ttarget = 5807741745EB757C97C09F2D56726BE0 /* React-NativeModulesApple */;\n\t\t\ttargetProxy = 34B293D00EA654992B64C623FB73669A /* PBXContainerItemProxy */;\n\t\t};\n\t\tD6064FA2E952381FD5566D4FE51ADCBE /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-debug\";\n\t\t\ttarget = 0C050E11C4409D3BFAE9CC219C4D6195 /* React-debug */;\n\t\t\ttargetProxy = B122FEC78343AAB6003C5DAA20FF12A8 /* PBXContainerItemProxy */;\n\t\t};\n\t\tD64FBFB3001F5CD6E0240571ADCE2DD8 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = fmt;\n\t\t\ttarget = 02B79DFED924FA19CA90EC69614733E1 /* fmt */;\n\t\t\ttargetProxy = 1E43F670654169F733EBF0224B62C200 /* PBXContainerItemProxy */;\n\t\t};\n\t\tD6F113C392C802440FC28E2899F6D75C /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"RCT-Folly\";\n\t\t\ttarget = EC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */;\n\t\t\ttargetProxy = 3A88FFAE788BA5C7005A06203E2D5B09 /* PBXContainerItemProxy */;\n\t\t};\n\t\tD865588C4D23024C831B0C28A68F836D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-NativeModulesApple\";\n\t\t\ttarget = 5807741745EB757C97C09F2D56726BE0 /* React-NativeModulesApple */;\n\t\t\ttargetProxy = BB5387DCE059C87AA11AECE4CE628A71 /* PBXContainerItemProxy */;\n\t\t};\n\t\tD871603375871A9101013BADEECA2E73 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTNetwork\";\n\t\t\ttarget = 651511D7DA7F07F9FC9AA40A2E86270D /* React-RCTNetwork */;\n\t\t\ttargetProxy = E442B4B6A2F8AA2C693319580C2AF969 /* PBXContainerItemProxy */;\n\t\t};\n\t\tDA0E7DC74C748518BFF8C294148EDAE8 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"RCT-Folly\";\n\t\t\ttarget = EC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */;\n\t\t\ttargetProxy = 6C63CA93F2CEB17BE0AB630B55D93DF7 /* PBXContainerItemProxy */;\n\t\t};\n\t\tDA18253AF45CCA4B3F48F3534E2E39B8 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"hermes-engine\";\n\t\t\ttarget = 985FEA01F314F3C00F0C1E1181E6C4A5 /* hermes-engine */;\n\t\t\ttargetProxy = 9D4B5C2351B1CA9FA4CE976414BF39CB /* PBXContainerItemProxy */;\n\t\t};\n\t\tDA81774A8A6DB56723A413D0EE8927C6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-utils\";\n\t\t\ttarget = 30621D5A9764AC0BD9D02E87B2EA6665 /* React-utils */;\n\t\t\ttargetProxy = FEEBE7070BF647FB6130AFBC699EDA46 /* PBXContainerItemProxy */;\n\t\t};\n\t\tDC14CDA2247EDD85F3EA1DDEF118E059 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"RCT-Folly\";\n\t\t\ttarget = EC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */;\n\t\t\ttargetProxy = 1F19152BF279C2350CFF110149351FCA /* PBXContainerItemProxy */;\n\t\t};\n\t\tDDEB2059B6B32BE5EF7B55C7C7112CD4 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"hermes-engine\";\n\t\t\ttarget = 985FEA01F314F3C00F0C1E1181E6C4A5 /* hermes-engine */;\n\t\t\ttargetProxy = 933D10BF42FEB63C8C84E9E62A6B915F /* PBXContainerItemProxy */;\n\t\t};\n\t\tDE4836880D0968B12D6E0A473EF2A047 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = simdjson;\n\t\t\ttarget = 45B79B0C60C74716DCD2AD7BE782A719 /* simdjson */;\n\t\t\ttargetProxy = 7158D0B64E400178ECFE8BDBAD235DA5 /* PBXContainerItemProxy */;\n\t\t};\n\t\tDE547671DADE1EAA3518584FB142D4D3 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-ImageManager\";\n\t\t\ttarget = B5E1D7706FCB7EC5FF39F8CDA49A5653 /* React-ImageManager */;\n\t\t\ttargetProxy = 1C26555D9AAE15CA4E6E78862CB2F8D7 /* PBXContainerItemProxy */;\n\t\t};\n\t\tDEA448341ABAAE0D25466C34F1F235A4 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-runtimeexecutor\";\n\t\t\ttarget = 54EB12219122432FA744088BC5A680D2 /* React-runtimeexecutor */;\n\t\t\ttargetProxy = 995ED0C60B49D159FBA98BBF575252AB /* PBXContainerItemProxy */;\n\t\t};\n\t\tDFAE25DECCD0A8C005755C2E97CB95EF /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-nativeconfig\";\n\t\t\ttarget = B69D68A280EC3E60655BD2C715ACB004 /* React-nativeconfig */;\n\t\t\ttargetProxy = 3550D2C7B73010DD94B2507B76857F52 /* PBXContainerItemProxy */;\n\t\t};\n\t\tE0CC9856A49E4B0C1F8060683656BF84 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = ReactCommon;\n\t\t\ttarget = B6D5DD49633DFF0657B8C3F08EB3ABA9 /* ReactCommon */;\n\t\t\ttargetProxy = 0841A812345E34F753B65CB24CDDECE4 /* PBXContainerItemProxy */;\n\t\t};\n\t\tE0F2CB12CF095E00B9403D3AE141BC5C /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = DoubleConversion;\n\t\t\ttarget = 2AB2EF542954AB1C999E03BFEF8DE806 /* DoubleConversion */;\n\t\t\ttargetProxy = CEA49CA159329299D1916EE8ABEDB910 /* PBXContainerItemProxy */;\n\t\t};\n\t\tE17833655FED386BC89BA3174ECD7B76 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-runtimeexecutor\";\n\t\t\ttarget = 54EB12219122432FA744088BC5A680D2 /* React-runtimeexecutor */;\n\t\t\ttargetProxy = 792C4CE9FB1431C17A2D5C379D689D80 /* PBXContainerItemProxy */;\n\t\t};\n\t\tE2B5EC8381B3A50F28D40F975A2672B6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTImage\";\n\t\t\ttarget = 4F265533AAB7C8985856EC78A33164BB /* React-RCTImage */;\n\t\t\ttargetProxy = 072B6EE4F36C319A81BD03E2D2FD3B6C /* PBXContainerItemProxy */;\n\t\t};\n\t\tE39BA450DBC90AD38839CAC587ADA2E3 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTImage\";\n\t\t\ttarget = 4F265533AAB7C8985856EC78A33164BB /* React-RCTImage */;\n\t\t\ttargetProxy = 18FF611EE7F2DCFF095EE41573494D81 /* PBXContainerItemProxy */;\n\t\t};\n\t\tE3B183453B2C859BF77E884025BB337B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Core\";\n\t\t\ttarget = 7ACAA9BE580DD31A5CB9D97C45D9492D /* React-Core */;\n\t\t\ttargetProxy = A4EAB72AACA2C806DE0C40C49536CDD2 /* PBXContainerItemProxy */;\n\t\t};\n\t\tE3C0BF921958C89B2B9262B8B7517F4B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-graphics\";\n\t\t\ttarget = 4BDD270EACFE5730793AEF0B9BCCBA31 /* React-graphics */;\n\t\t\ttargetProxy = 6EB4F5AD2509B4497784B3A8CBBC25D4 /* PBXContainerItemProxy */;\n\t\t};\n\t\tE3F0DCA13D829C18DBC21AF71610055F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTAnimation\";\n\t\t\ttarget = 938CCE22F6C4094B3FB6CF1478579E4B /* React-RCTAnimation */;\n\t\t\ttargetProxy = 58D01897CD4E2D764437DA0038900ACE /* PBXContainerItemProxy */;\n\t\t};\n\t\tE5406C298236EDB8B77BE6D95F60EE6E /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Fabric\";\n\t\t\ttarget = 50DBAF155FAFB994E067BA8820221EDF /* React-Fabric */;\n\t\t\ttargetProxy = E8F7C167F6E0596B97FAF940464F2AAD /* PBXContainerItemProxy */;\n\t\t};\n\t\tE55D350A9268572D7FC8C05E97502888 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"RCT-Folly\";\n\t\t\ttarget = EC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */;\n\t\t\ttargetProxy = 4C00808CD01965B91DB4DE20301AE79A /* PBXContainerItemProxy */;\n\t\t};\n\t\tE5E22178DC5D3A1B2EDEFFE3240FE5F5 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Fabric\";\n\t\t\ttarget = 50DBAF155FAFB994E067BA8820221EDF /* React-Fabric */;\n\t\t\ttargetProxy = 86A2C6528D2E3ACA552AD500A9049C6B /* PBXContainerItemProxy */;\n\t\t};\n\t\tE7B3814796F81B42574B7892A825D853 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-nativeconfig\";\n\t\t\ttarget = B69D68A280EC3E60655BD2C715ACB004 /* React-nativeconfig */;\n\t\t\ttargetProxy = 1970E63906E04E6F5CC4059A6A594441 /* PBXContainerItemProxy */;\n\t\t};\n\t\tE87D08CAA09D3388E7127BB834C4D010 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-NativeModulesApple\";\n\t\t\ttarget = 5807741745EB757C97C09F2D56726BE0 /* React-NativeModulesApple */;\n\t\t\ttargetProxy = 92FD7911CF88661BEC8C53326ACD95D0 /* PBXContainerItemProxy */;\n\t\t};\n\t\tE9AADA080FCC408EA94BBC9B3500DDAC /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-rendererdebug\";\n\t\t\ttarget = 9F96BF8B7FC28F5CF47242D7A73B11DA /* React-rendererdebug */;\n\t\t\ttargetProxy = 41DB73748AA04BD6E5CD07130AAFD267 /* PBXContainerItemProxy */;\n\t\t};\n\t\tE9C48BEA57BC9B4B9A176BA0823CEF2F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RuntimeCore\";\n\t\t\ttarget = C7F600C052808C7C987C26EC74B3A290 /* React-RuntimeCore */;\n\t\t\ttargetProxy = 87161657935B5B7DF31A7B031AA1BD08 /* PBXContainerItemProxy */;\n\t\t};\n\t\tEA0D661BF9E1291A368BD6C59D9375AF /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = glog;\n\t\t\ttarget = D0EFEFB685D97280256C559792236873 /* glog */;\n\t\t\ttargetProxy = B9A089006BD78E0587595CAB4CA1C15D /* PBXContainerItemProxy */;\n\t\t};\n\t\tECF7B124979853303D57F72C1816C3DE /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = WatermelonDB;\n\t\t\ttarget = EF554722D0D580AC702A6DAB8FDBB2B5 /* WatermelonDB */;\n\t\t\ttargetProxy = D3E449977C2F1B93649FE5935155E48B /* PBXContainerItemProxy */;\n\t\t};\n\t\tED51FC4ED914B90C6FB3A3A184B18632 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = RCTRequired;\n\t\t\ttarget = E7E7CE52C8C68B17224FF8C262D80ABF /* RCTRequired */;\n\t\t\ttargetProxy = 08479658374D8A84889129BFF1758177 /* PBXContainerItemProxy */;\n\t\t};\n\t\tED633AA62BFF42E31A4FAA9CF28BB16F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Mapbuffer\";\n\t\t\ttarget = 091003D98BDA80B01B9E35CADE3947F0 /* React-Mapbuffer */;\n\t\t\ttargetProxy = E813DFDA85C90877A292688B397709DC /* PBXContainerItemProxy */;\n\t\t};\n\t\tEE1683DA42ED1D4C631FC47BE8AD9535 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = glog;\n\t\t\ttarget = D0EFEFB685D97280256C559792236873 /* glog */;\n\t\t\ttargetProxy = B389764894DEAE9026600EDBCD8A4763 /* PBXContainerItemProxy */;\n\t\t};\n\t\tEEC595C51EF9EDBB40E0F5B472E38245 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTText\";\n\t\t\ttarget = DBD2D83E10F8B7D3F4E0E34E6A9FCFA6 /* React-RCTText */;\n\t\t\ttargetProxy = C0833537177F0AC13EEDE7B7CADA02A2 /* PBXContainerItemProxy */;\n\t\t};\n\t\tEEE2BC18221D4FB58F26D95BA6FC69BA /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Fabric\";\n\t\t\ttarget = 50DBAF155FAFB994E067BA8820221EDF /* React-Fabric */;\n\t\t\ttargetProxy = E328FF71A41B524BF24AFE31D600C8BE /* PBXContainerItemProxy */;\n\t\t};\n\t\tEF402A140375BB13E5C26D861193A401 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = FBLazyVector;\n\t\t\ttarget = 8CC4EAA817AA86310D1900F1DAB3580F /* FBLazyVector */;\n\t\t\ttargetProxy = DFA19DBEE7782E6D2AC285DEDEC6A394 /* PBXContainerItemProxy */;\n\t\t};\n\t\tEF5884976FE3748E18B03AC28DED4AAC /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = glog;\n\t\t\ttarget = D0EFEFB685D97280256C559792236873 /* glog */;\n\t\t\ttargetProxy = 0BD3FE504C29567775D9641CEBB9B2B5 /* PBXContainerItemProxy */;\n\t\t};\n\t\tEF845B0031E0D8C62943D74C2C5B1956 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsi\";\n\t\t\ttarget = FA877ADC442CB19CF61793D234C8B131 /* React-jsi */;\n\t\t\ttargetProxy = F6E4CB08E98088B45C9D01C8C23CD322 /* PBXContainerItemProxy */;\n\t\t};\n\t\tF0540A7333ABA06B5224BADDE669D817 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-CoreModules\";\n\t\t\ttarget = E16E206437995280D349D4B67695C894 /* React-CoreModules */;\n\t\t\ttargetProxy = C339D19AFB5425F4ACFF222B89E642C5 /* PBXContainerItemProxy */;\n\t\t};\n\t\tF14DCBE464449F61D897CA3C769D6C93 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-logger\";\n\t\t\ttarget = 083B602EA19B4AD50EC53C0602F29A7D /* React-logger */;\n\t\t\ttargetProxy = 2787D1BB90BE7254AF9CAA44E76EDF74 /* PBXContainerItemProxy */;\n\t\t};\n\t\tF1B334885D6D8C27483276B36A4D8CD6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsi\";\n\t\t\ttarget = FA877ADC442CB19CF61793D234C8B131 /* React-jsi */;\n\t\t\ttargetProxy = C66D90E52EFB399DB604AC9B7394D4BD /* PBXContainerItemProxy */;\n\t\t};\n\t\tF1CF5620523DB34FC9603AFE5E3FCE46 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"hermes-engine\";\n\t\t\ttarget = 985FEA01F314F3C00F0C1E1181E6C4A5 /* hermes-engine */;\n\t\t\ttargetProxy = 8F3EDB0170BE68F1914E876834457955 /* PBXContainerItemProxy */;\n\t\t};\n\t\tF2C2F506161C15F85CE462E289D34B51 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"RCT-Folly\";\n\t\t\ttarget = EC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */;\n\t\t\ttargetProxy = E59433E2F97541C6CE25FB34745C0597 /* PBXContainerItemProxy */;\n\t\t};\n\t\tF34157E1DF7D5E455A66302A9C9AD088 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-cxxreact\";\n\t\t\ttarget = 463F41A7E8B252F8AC5024DA1F4AF6DA /* React-cxxreact */;\n\t\t\ttargetProxy = 6682A5C614DCD26B5D7B0DE8C3DEB7C0 /* PBXContainerItemProxy */;\n\t\t};\n\t\tF45BCAC1136338F32A9CB80C9B478209 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-jsiexecutor\";\n\t\t\ttarget = DA0709CAAD589C6E7963495210438021 /* React-jsiexecutor */;\n\t\t\ttargetProxy = EFB0F809D1F6A97E2AACC5F39FBBDE3A /* PBXContainerItemProxy */;\n\t\t};\n\t\tF4A8A11533BA5371EB5105103BFD9E90 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-utils\";\n\t\t\ttarget = 30621D5A9764AC0BD9D02E87B2EA6665 /* React-utils */;\n\t\t\ttargetProxy = 58D8334E9B16E13EB96FE3FE0FDCF10F /* PBXContainerItemProxy */;\n\t\t};\n\t\tF50C79BA5E25D2CE982062B263ADCA17 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = SocketRocket;\n\t\t\ttarget = 1948D0B63D2CF6A48E18B0B292BC6091 /* SocketRocket */;\n\t\t\ttargetProxy = B455D622235FFAB0ECAD084D352B56F9 /* PBXContainerItemProxy */;\n\t\t};\n\t\tF6E7477DEC8DA6FFF14280294749452A /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Codegen\";\n\t\t\ttarget = 66B8F5758E6F90E16807A85C003CE61F /* React-Codegen */;\n\t\t\ttargetProxy = 470C26614128A65CB3DFE45361C557CA /* PBXContainerItemProxy */;\n\t\t};\n\t\tF7269812A409325D81BBDB1626D42A5B /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-utils\";\n\t\t\ttarget = 30621D5A9764AC0BD9D02E87B2EA6665 /* React-utils */;\n\t\t\ttargetProxy = B875F5E8A9737CADD56F2D32A8D43A6C /* PBXContainerItemProxy */;\n\t\t};\n\t\tF77531E668A19B6443CBD7E19D27545D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Core\";\n\t\t\ttarget = 7ACAA9BE580DD31A5CB9D97C45D9492D /* React-Core */;\n\t\t\ttargetProxy = 0F6F6C6360E16A9A1264290F55453760 /* PBXContainerItemProxy */;\n\t\t};\n\t\tF7A0AFA84119944170C3962FDAED17D3 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = DoubleConversion;\n\t\t\ttarget = 2AB2EF542954AB1C999E03BFEF8DE806 /* DoubleConversion */;\n\t\t\ttargetProxy = 11F2156C55352C7A4376481AC963683D /* PBXContainerItemProxy */;\n\t\t};\n\t\tF85656E4964D16005F093C8BD55E4612 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-perflogger\";\n\t\t\ttarget = F1E2583679398CB5F4D2B3272E9B198F /* React-perflogger */;\n\t\t\ttargetProxy = D075EC87D0910DE9AA411C7752F01529 /* PBXContainerItemProxy */;\n\t\t};\n\t\tF86D55633179768891C4FADBBC92E034 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-cxxreact\";\n\t\t\ttarget = 463F41A7E8B252F8AC5024DA1F4AF6DA /* React-cxxreact */;\n\t\t\ttargetProxy = 69F28387CD69BA9EB00ECC48BBE04334 /* PBXContainerItemProxy */;\n\t\t};\n\t\tF87F876F414C87A2BF69648DAE44FFF0 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTSettings\";\n\t\t\ttarget = 680299219D3A48D42A648AF6706275A9 /* React-RCTSettings */;\n\t\t\ttargetProxy = F1A51BC2544543B9EA596410040D2824 /* PBXContainerItemProxy */;\n\t\t};\n\t\tF9A8004C6196E9C33150C72E5FC1683E /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-ImageManager\";\n\t\t\ttarget = B5E1D7706FCB7EC5FF39F8CDA49A5653 /* React-ImageManager */;\n\t\t\ttargetProxy = A2DB2A457F35677E14332209CA3AB475 /* PBXContainerItemProxy */;\n\t\t};\n\t\tFA042F3DFD66A81A0915835F4787ABAF /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-debug\";\n\t\t\ttarget = 0C050E11C4409D3BFAE9CC219C4D6195 /* React-debug */;\n\t\t\ttargetProxy = 64B026DA708A8DEF22DD19ACC82A7D53 /* PBXContainerItemProxy */;\n\t\t};\n\t\tFBC0958CCFB9E09A2F566E87296DFE17 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTText\";\n\t\t\ttarget = DBD2D83E10F8B7D3F4E0E34E6A9FCFA6 /* React-RCTText */;\n\t\t\ttargetProxy = EB6C649F337A405031F9117FA5BA3422 /* PBXContainerItemProxy */;\n\t\t};\n\t\tFBDAE38412AAE074731A400CBF19F946 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = WatermelonDB;\n\t\t\ttarget = EF554722D0D580AC702A6DAB8FDBB2B5 /* WatermelonDB */;\n\t\t\ttargetProxy = CBBEE84629A720F7DD2A47F106239061 /* PBXContainerItemProxy */;\n\t\t};\n\t\tFD09F1B752681CA8CCC4A39FB3D55188 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-cxxreact\";\n\t\t\ttarget = 463F41A7E8B252F8AC5024DA1F4AF6DA /* React-cxxreact */;\n\t\t\ttargetProxy = 8CAFE184AE4C9DD706ECA03373F2C811 /* PBXContainerItemProxy */;\n\t\t};\n\t\tFE5A1DF1E4AAEB8FF1AAE875962EBFF4 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"RCT-Folly\";\n\t\t\ttarget = EC55D52694092A9D0E6A78EB01207EB5 /* RCT-Folly */;\n\t\t\ttargetProxy = C5B2D41028C0D910182768F522988D50 /* PBXContainerItemProxy */;\n\t\t};\n\t\tFE8D0EFE7556F1EBD21261B17D82DFF2 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = fmt;\n\t\t\ttarget = 02B79DFED924FA19CA90EC69614733E1 /* fmt */;\n\t\t\ttargetProxy = 7F45F83A2EAD4093F12D40375946D470 /* PBXContainerItemProxy */;\n\t\t};\n\t\tFE902201A16A01BD21B612A64BED9AAD /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-RCTAppDelegate\";\n\t\t\ttarget = C2B1B75CCC326124F29FE703CC59BFB7 /* React-RCTAppDelegate */;\n\t\t\ttargetProxy = EDE299B0E0E532AF35E34DAD285C0EDE /* PBXContainerItemProxy */;\n\t\t};\n\t\tFFA7F1EF8FAC3A0952EEFDE38DE91E5A /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"React-Core\";\n\t\t\ttarget = 7ACAA9BE580DD31A5CB9D97C45D9492D /* React-Core */;\n\t\t\ttargetProxy = 8B9623D05D47EDD8969CEB97507656FA /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin XCBuildConfiguration section */\n\t\t018A699977B43DF54A5388A977841260 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 50CCFCC93BE3FD24C09BEB499BEACA7B /* React-cxxreact.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-cxxreact/React-cxxreact-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = cxxreact;\n\t\t\t\tPRODUCT_NAME = \"React-cxxreact\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\t04778D8576ED573ED3D035D5FD0C8790 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 49C7723A5D97C7404CB0972A1F44276F /* Yoga.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/Yoga/Yoga-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = Headers/Public/yoga/Yoga.modulemap;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = yoga;\n\t\t\t\tPRODUCT_NAME = Yoga;\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\t056694F8D0C86B3713F8353E4582F89A /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = A73C90F6C769770D58136250FCF48CCC /* React-hermes.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-hermes/React-hermes-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"HERMES_ENABLE_DEBUGGER=1\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = reacthermes;\n\t\t\t\tPRODUCT_NAME = \"React-hermes\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\t08CDA085B84DEFE53F3E9FC57495A7B1 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 4C138289B336DA780427BF289634EA74 /* RCTRequired.debug.xcconfig */;\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 = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\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\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t09DE6D1D41918E704C850693789D572E /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7568E7B5AE849AB3EBC22558FB87A3A0 /* React-jsitracing.release.xcconfig */;\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 = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\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\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t0AEE42B6AF134488CE307D9407337DD5 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = A275DD42FB75440C81B2F60BD6B23196 /* fmt.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/fmt/fmt-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = fmt;\n\t\t\t\tPRODUCT_NAME = fmt;\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\t0C4A7CE2F9E8B1F3AC5496501BBA1B1A /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = FEB255691DB29610BDE1D3938C435B8C /* React-Core.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-Core/React-Core-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = \"Headers/Public/React/React-Core.modulemap\";\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DFOLLY_NO_CONFIG\",\n\t\t\t\t\t\"-DFOLLY_MOBILE=1\",\n\t\t\t\t\t\"-DFOLLY_USE_LIBCPP=1\",\n\t\t\t\t\t\"-DFOLLY_CFG_NO_COROUTINES=1\",\n\t\t\t\t\t\"-DFOLLY_HAVE_CLOCK_GETTIME=1\",\n\t\t\t\t\t\"-Wno-comma\",\n\t\t\t\t\t\"-Wno-shorten-64-to-32\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = React;\n\t\t\t\tPRODUCT_NAME = \"React-Core\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\t0EEDCB8A7B61E6778E280CC8A5B4C5B0 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 8A80985843E4723FCDE8D548AB93AC54 /* React-Mapbuffer.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-Mapbuffer/React-Mapbuffer-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = react_renderer_mapbuffer;\n\t\t\t\tPRODUCT_NAME = \"React-Mapbuffer\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t10066A18E063481B550E23ADA03005AE /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 846735472D63BEB4DB75ECD903ECD756 /* React-hermes.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-hermes/React-hermes-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = reacthermes;\n\t\t\t\tPRODUCT_NAME = \"React-hermes\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t101CBCE1C2C1E8BA5847D6EAD5702399 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = D5F81F5AAC387C14EE7017B61CB495EC /* Pods-WatermelonTester.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.0;\n\t\t\t\tMACH_O_TYPE = staticlib;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPODS_ROOT = \"$(SRCROOT)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t13D10FC94AEA7BB8B0F77CE5DDA07D9F /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 967DBD838FB53E8907C105802E22ECCA /* React-Codegen.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-Codegen/React-Codegen-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 12.4;\n\t\t\t\tMODULEMAP_FILE = \"Headers/Public/React_Codegen/React-Codegen.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = React_Codegen;\n\t\t\t\tPRODUCT_NAME = \"React-Codegen\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\t14C1CF143C41528891604A92041BEE5A /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = EC7EC957168B2840A6783186671E89DB /* React-callinvoker.release.xcconfig */;\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 = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\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\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1926B4BB348A3C6E0E0A3D464CCAFBDE /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = FEB255691DB29610BDE1D3938C435B8C /* React-Core.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCODE_SIGNING_ALLOWED = NO;\n\t\t\t\tCONFIGURATION_BUILD_DIR = \"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/React-Core\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIBSC_MODULE = React;\n\t\t\t\tINFOPLIST_FILE = \"Target Support Files/React-Core/ResourceBundle-RCTI18nStrings-React-Core-Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tPRODUCT_NAME = RCTI18nStrings;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tWRAPPER_EXTENSION = bundle;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1D363B72BC5025D9B8DE46B8F3631147 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 4B2CA6BADDBABE04EA3FC848D2DFBA7C /* React-RCTFabric.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-RCTFabric/React-RCTFabric-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = \"Headers/Public/RCTFabric/React-RCTFabric.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = RCTFabric;\n\t\t\t\tPRODUCT_NAME = \"React-RCTFabric\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\t1EB589223DB61A0CC57D72143471CD9C /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 33AFE6C6C66107B924778D5E609CBE54 /* React-RCTActionSheet.release.xcconfig */;\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 = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\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\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1F9EF9FDD1FFA34C2022EBF931B0F37F /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = E1140A4CC7FEA96D57FF547DA1D75EA0 /* Pods-WatermelonTester-WatermelonTesterTests.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.0;\n\t\t\t\tMACH_O_TYPE = staticlib;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPODS_ROOT = \"$(SRCROOT)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t2833F66F875A26F844089CF6BFF332EF /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 4DE72A397551E705994E98D86904430A /* React-RuntimeHermes.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-RuntimeHermes/React-RuntimeHermes-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = react_runtime_hermes;\n\t\t\t\tPRODUCT_NAME = \"React-RuntimeHermes\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t2A29B58589FA66317C725FBE5DCDA803 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = B0846154EC35111B28426222762CF880 /* React-RCTFabric.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-RCTFabric/React-RCTFabric-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = \"Headers/Public/RCTFabric/React-RCTFabric.modulemap\";\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = RCTFabric;\n\t\t\t\tPRODUCT_NAME = \"React-RCTFabric\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t2B221AEBC14A861BF463CF46C260CCB7 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = F0EA3D90914575269885513BFC07386C /* React-Mapbuffer.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-Mapbuffer/React-Mapbuffer-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = react_renderer_mapbuffer;\n\t\t\t\tPRODUCT_NAME = \"React-Mapbuffer\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\t2B3C3F7DAF3E97ADB03B625260E9A2C3 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 543D873E1BAD025BDD864DB650682C5D /* React-RCTSettings.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-RCTSettings/React-RCTSettings-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = RCTSettings;\n\t\t\t\tPRODUCT_NAME = \"React-RCTSettings\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t2C71D7027C68688E621A0314ABAE9630 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = A7C3FA3DEC4092F63BB39E1F2566D4BC /* React-runtimeexecutor.debug.xcconfig */;\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 = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\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\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t2D805517E0E395E6F8828785D5DE0D66 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7157DE4FF39A888005019A6919C6304D /* boost.release.xcconfig */;\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 = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\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\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t2DB8CA194A472322BDFF94E57E7AD3AC /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 9EB5D5242D476B50F6A84EA6ECF95DAF /* React-FabricImage.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-FabricImage/React-FabricImage-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = react_renderer_components_image;\n\t\t\t\tPRODUCT_NAME = \"React-FabricImage\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\t3410F70629881DF6D9E1146E1EBBF55D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 1C9CA7D5550AD1D94A7AA763FBA17534 /* DoubleConversion.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/DoubleConversion/DoubleConversion-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = Headers/Public/DoubleConversion/DoubleConversion.modulemap;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = DoubleConversion;\n\t\t\t\tPRODUCT_NAME = DoubleConversion;\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t35DED647B18E0C5F5E2B4A45D62DB3D6 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7125A220ACBD1ACDAEC0A33004BF401B /* React-jserrorhandler.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-jserrorhandler/React-jserrorhandler-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = jserrorhandler;\n\t\t\t\tPRODUCT_NAME = \"React-jserrorhandler\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\t37BCE36EE3C38B37F32177E13BE793E9 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = AD2710EC72C624EB87F820405512AA45 /* React-Fabric.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-Fabric/React-Fabric-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = \"Headers/Public/React_Fabric/React-Fabric.modulemap\";\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = React_Fabric;\n\t\t\t\tPRODUCT_NAME = \"React-Fabric\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t3D1D91B804D25B65783055F9D295ED4F /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = A07A822153FEC0A3E902A56BD0450957 /* React-RuntimeHermes.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-RuntimeHermes/React-RuntimeHermes-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"HERMES_ENABLE_DEBUGGER=1\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = react_runtime_hermes;\n\t\t\t\tPRODUCT_NAME = \"React-RuntimeHermes\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\t3D4FC99CDC76C9524BC1F015F45D5E37 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 481D4593ECDD5D02E193B28FEF265A45 /* simdjson.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/simdjson/simdjson-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = Headers/Public/simdjson/simdjson.modulemap;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = simdjson;\n\t\t\t\tPRODUCT_NAME = simdjson;\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t458EA9D2AFB826AF6F125A23390B3E72 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 65D4FD7CDCA49048491D835A28092DCC /* React-rendererdebug.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-rendererdebug/React-rendererdebug-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = \"Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\";\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = react_renderer_debug;\n\t\t\t\tPRODUCT_NAME = \"React-rendererdebug\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t49D01D1CC6D95E241EEF124BCD449141 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 6CD702447664E9814FDF64C2521FE0A8 /* glog.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/glog/glog-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = Headers/Public/glog/glog.modulemap;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = glog;\n\t\t\t\tPRODUCT_NAME = glog;\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t4B3CDC8D3D3FFFA5EBD6A180E54DE221 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 5883D7A51536D3FB292BBC1FEF7C6C1C /* React.release.xcconfig */;\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 = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\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\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t4EAB1F82D42083A7A6795A9385EFD439 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 4C664E2A68FE1D2FA0458ED4485088A9 /* React-RCTText.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-RCTText/React-RCTText-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = RCTText;\n\t\t\t\tPRODUCT_NAME = \"React-RCTText\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\t51CE8C2ADBEFC3589D77A365F30FE6F6 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 5601EFF66A7656BA9E668AE17351D360 /* React.debug.xcconfig */;\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 = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\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\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t531D19EFC8B7A07D8B5362B29A4F5877 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = D1A2CC54073AD525A26E9DC8CA1044F5 /* React-Core.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-Core/React-Core-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = \"Headers/Public/React/React-Core.modulemap\";\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t\t\"-DFOLLY_NO_CONFIG\",\n\t\t\t\t\t\"-DFOLLY_MOBILE=1\",\n\t\t\t\t\t\"-DFOLLY_USE_LIBCPP=1\",\n\t\t\t\t\t\"-DFOLLY_CFG_NO_COROUTINES=1\",\n\t\t\t\t\t\"-DFOLLY_HAVE_CLOCK_GETTIME=1\",\n\t\t\t\t\t\"-Wno-comma\",\n\t\t\t\t\t\"-Wno-shorten-64-to-32\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = React;\n\t\t\t\tPRODUCT_NAME = \"React-Core\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t53BE662BA9F4225F5401BA92D84C61AE /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 0BFAD875BDFCB017A45CCF7A1AD8AE34 /* boost.debug.xcconfig */;\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 = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\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\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t556F215F73AD70669785BB704E7FF3FD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = E553A373CAD882BEE4374E43EBAD7556 /* React-RCTImage.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-RCTImage/React-RCTImage-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = RCTImage;\n\t\t\t\tPRODUCT_NAME = \"React-RCTImage\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\t572933D427FDEA7D3C0815E9B99D61F0 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 997842162A2D57DA5A2636E554A28F19 /* React-utils.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-utils/React-utils-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = \"Headers/Public/react_utils/React-utils.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = react_utils;\n\t\t\t\tPRODUCT_NAME = \"React-utils\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\t592181D556023CD1C894B701362E4DA4 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = D1A2CC54073AD525A26E9DC8CA1044F5 /* React-Core.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCODE_SIGNING_ALLOWED = NO;\n\t\t\t\tCONFIGURATION_BUILD_DIR = \"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/React-Core\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIBSC_MODULE = React;\n\t\t\t\tINFOPLIST_FILE = \"Target Support Files/React-Core/ResourceBundle-RCTI18nStrings-React-Core-Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tPRODUCT_NAME = RCTI18nStrings;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tWRAPPER_EXTENSION = bundle;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t596D1E536C46F393552CAF1F8BD63D31 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 69377A3F74E51E3872AC1F550123E373 /* React-RCTActionSheet.debug.xcconfig */;\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 = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\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\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t5D836308F838876BEA6E15EA4442264C /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 106A05F0520EFBA0E22815812BDA18F5 /* ReactCommon.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/ReactCommon/ReactCommon-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = Headers/Public/ReactCommon/ReactCommon.modulemap;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = ReactCommon;\n\t\t\t\tPRODUCT_NAME = ReactCommon;\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\t61821F3B24E655D15183326DC352D9BE /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = C609BD215F18E3B6ACB3641DBF1B200C /* React-rncore.debug.xcconfig */;\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 = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\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\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t675390F86EB23FA49464FB782CAF0014 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 734BE1C2E4FE1B7AA7823A95F6F55FB4 /* React-runtimescheduler.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-runtimescheduler/React-runtimescheduler-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = react_renderer_runtimescheduler;\n\t\t\t\tPRODUCT_NAME = \"React-runtimescheduler\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t678D48C418EB8199FBF88BD9F57F8447 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 0146BE1DD8D87E794B0CFD58725CC02C /* glog.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/glog/glog-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = Headers/Public/glog/glog.modulemap;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = glog;\n\t\t\t\tPRODUCT_NAME = glog;\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\t6A776DA165E894C693E080A92B873914 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = FA6E512F724BFB0B3D270261962078F8 /* React-RCTLinking.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-RCTLinking/React-RCTLinking-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = RCTLinking;\n\t\t\t\tPRODUCT_NAME = \"React-RCTLinking\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\t6DB5D13F19305EB6CA0B293E0BF786CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = A0C9633F0AEEFB533D94C4D5B1D9CFDE /* React-perflogger.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-perflogger/React-perflogger-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = reactperflogger;\n\t\t\t\tPRODUCT_NAME = \"React-perflogger\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\t6EBB7CB930647993566D4C38C4ED32B2 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 4148047344F184B4D856D414B9B4349D /* hermes-engine.release.xcconfig */;\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 = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\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\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t7291D0787BB051F79F3D0EAF355E78A0 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 99E222D0C7D14CFBD1BC586704C58A9D /* React-runtimeexecutor.release.xcconfig */;\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 = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\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\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t72988AE6F2442AF167ACC14C8D84C1FF /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 2E12202A59E36B86AFC6D2CB7CC7B1A2 /* React-CoreModules.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-CoreModules/React-CoreModules-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DFOLLY_NO_CONFIG\",\n\t\t\t\t\t\"-DFOLLY_MOBILE=1\",\n\t\t\t\t\t\"-DFOLLY_USE_LIBCPP=1\",\n\t\t\t\t\t\"-DFOLLY_CFG_NO_COROUTINES=1\",\n\t\t\t\t\t\"-DFOLLY_HAVE_CLOCK_GETTIME=1\",\n\t\t\t\t\t\"-Wno-comma\",\n\t\t\t\t\t\"-Wno-shorten-64-to-32\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = CoreModules;\n\t\t\t\tPRODUCT_NAME = \"React-CoreModules\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\t7487028E6EEFFE8D0A9F2AF94BD4AA1A /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 22F665521DA4A7B91AD3CDC51E8779D6 /* React-RuntimeCore.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-RuntimeCore/React-RuntimeCore-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = react_runtime;\n\t\t\t\tPRODUCT_NAME = \"React-RuntimeCore\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\t749D29305F3B147BEA433A8ED3A52055 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 6F03806CF8FEA9AE1097FB463956AAD4 /* React-nativeconfig.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-nativeconfig/React-nativeconfig-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = react_config;\n\t\t\t\tPRODUCT_NAME = \"React-nativeconfig\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t76FAF1D653E3091D8F31A040BCAF3242 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 12B4501A9455AFB01AA0089214B8A38D /* React-jsi.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-jsi/React-jsi-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = \"Headers/Public/jsi/React-jsi.modulemap\";\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = jsi;\n\t\t\t\tPRODUCT_NAME = \"React-jsi\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t77779BB20E55F693035240DE888044A8 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = E39F032BC206A3CC16C40890B632D25E /* React-logger.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-logger/React-logger-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = logger;\n\t\t\t\tPRODUCT_NAME = \"React-logger\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t7B6774F79AB067206CA65BBF3ADDE822 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 11FCAB3F234C2F7A1E00B43655EF0707 /* React-RCTVibration.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-RCTVibration/React-RCTVibration-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = RCTVibration;\n\t\t\t\tPRODUCT_NAME = \"React-RCTVibration\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t7E1661B1D42FD4320D2DF45DFBBF0569 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 3EA47022B15AB1C45235DBA9B57DA776 /* DoubleConversion.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/DoubleConversion/DoubleConversion-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = Headers/Public/DoubleConversion/DoubleConversion.modulemap;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = DoubleConversion;\n\t\t\t\tPRODUCT_NAME = DoubleConversion;\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\t7EE96DBD4F3FD36343287841E13E3E42 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = DB93F82879D24A74491FCA910E31A733 /* React-utils.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-utils/React-utils-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = \"Headers/Public/react_utils/React-utils.modulemap\";\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = react_utils;\n\t\t\t\tPRODUCT_NAME = \"React-utils\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t8240BCFA16E2325996C60923974225AB /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 902581D4E30B461C86B20B03CC2F5AA6 /* React-RCTAppDelegate.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-RCTAppDelegate/React-RCTAppDelegate-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = \"Headers/Public/React_RCTAppDelegate/React-RCTAppDelegate.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = React_RCTAppDelegate;\n\t\t\t\tPRODUCT_NAME = \"React-RCTAppDelegate\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\t82EFCB4F4469DA6AFF305D017CB93AFF /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 07AE3DB6F5EB2B92FE81A1B8A4CE6BE8 /* RCTDeprecation.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/RCTDeprecation/RCTDeprecation-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = Headers/Public/RCTDeprecation/RCTDeprecation.modulemap;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = RCTDeprecation;\n\t\t\t\tPRODUCT_NAME = RCTDeprecation;\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t83A1E30C35D447DDFEE09B9845881E86 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 77CE993F9446B711B336A9AF061A5504 /* fmt.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/fmt/fmt-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = fmt;\n\t\t\t\tPRODUCT_NAME = fmt;\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t857D2EEFD5273048A02DC360E3945215 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7C910125B6ECED6233B803D062331A90 /* React-RCTNetwork.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-RCTNetwork/React-RCTNetwork-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = RCTNetwork;\n\t\t\t\tPRODUCT_NAME = \"React-RCTNetwork\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t85D200DC120335672B1B81C7F2422A9A /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 52DFAF9CB84CA1E1BDC56A3F71A3C404 /* FBLazyVector.release.xcconfig */;\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 = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\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\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t8760A2D85E97AB06F84ACD71B7BD299F /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 325477957D7D1B6F9F9C72D859C2E8BE /* React-perflogger.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-perflogger/React-perflogger-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = reactperflogger;\n\t\t\t\tPRODUCT_NAME = \"React-perflogger\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t87FA83E446D43813C592A551733FBFF5 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = FFE3B6010494BF1759723F25C1271613 /* React-RCTVibration.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-RCTVibration/React-RCTVibration-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = RCTVibration;\n\t\t\t\tPRODUCT_NAME = \"React-RCTVibration\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\t90D4D09BCB6A4660E43ACBE9ECB6FE9A /* 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_LOCALIZABILITY_NONLOCALIZED = YES;\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++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\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\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\"POD_CONFIGURATION_DEBUG=1\",\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 = 15.0;\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\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\" \",\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tREACT_NATIVE_PATH = \"${PODS_ROOT}/../../../node_modules/react-native\";\n\t\t\t\tSTRIP_INSTALLED_PRODUCT = NO;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tSYMROOT = \"${SRCROOT}/../build\";\n\t\t\t\tUSE_HERMES = true;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t931B4D02069204C8B36EF5077FA0C069 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = E39930085671F1947A94AAE3B2EB3580 /* React-NativeModulesApple.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-NativeModulesApple/React-NativeModulesApple-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = \"Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\";\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = React_NativeModulesApple;\n\t\t\t\tPRODUCT_NAME = \"React-NativeModulesApple\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t93790FAB2314B5185C12CF46BF260616 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = F923F037E88C68DA2463BCD75AA9ED60 /* SocketRocket.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/SocketRocket/SocketRocket-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = SocketRocket;\n\t\t\t\tPRODUCT_NAME = SocketRocket;\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\t9553C89E183877A5CB2F3C6801BEC129 /* 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_LOCALIZABILITY_NONLOCALIZED = YES;\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++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\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\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"POD_CONFIGURATION_RELEASE=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 = 15.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\" \",\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tREACT_NATIVE_PATH = \"${PODS_ROOT}/../../../node_modules/react-native\";\n\t\t\t\tSTRIP_INSTALLED_PRODUCT = NO;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tSYMROOT = \"${SRCROOT}/../build\";\n\t\t\t\tUSE_HERMES = true;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t976E7D6E4A2D2582C2D63BC38DFC725E /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 78D72FC8CF42B31C8EDAD6F8657F610F /* React-RCTAnimation.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-RCTAnimation/React-RCTAnimation-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = RCTAnimation;\n\t\t\t\tPRODUCT_NAME = \"React-RCTAnimation\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t9793834942B6B511FCAC87E74D4AE4DC /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 441AA6664650EC12BAF8937E4A882741 /* React-Codegen.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-Codegen/React-Codegen-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 12.4;\n\t\t\t\tMODULEMAP_FILE = \"Headers/Public/React_Codegen/React-Codegen.modulemap\";\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = React_Codegen;\n\t\t\t\tPRODUCT_NAME = \"React-Codegen\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t9F5D655EFEE356B6278439617431B389 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7B51B43D6B45FB260FFA0B15BFED390E /* React-jsinspector.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-jsinspector/React-jsinspector-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = \"Headers/Public/jsinspector_modern/React-jsinspector.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = jsinspector_modern;\n\t\t\t\tPRODUCT_NAME = \"React-jsinspector\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\t9FD952B7BE0C46A0DF7E6AB4EC3072E2 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = C31DDCFAF4110E35C011007CE400A3D4 /* RCTRequired.release.xcconfig */;\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 = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\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\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tA0BBCE59E95803992E15B022E523A32A /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = DB803AD9555BB8D6B00BBA6644681627 /* Yoga.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/Yoga/Yoga-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = Headers/Public/yoga/Yoga.modulemap;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = yoga;\n\t\t\t\tPRODUCT_NAME = Yoga;\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tA7036092C396D0E15E8494AE7E86C458 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 2E89F76541853DEFE4E1B570E724F503 /* RCT-Folly.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/RCT-Folly/RCT-Folly-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = \"Headers/Public/folly/RCT-Folly.modulemap\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = folly;\n\t\t\t\tPRODUCT_NAME = \"RCT-Folly\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\tA79343D4FCC4946246DDEC2EB1498F89 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 6387BDDE6369AEDABBA8E222A92D7DDE /* WatermelonDB.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/WatermelonDB/WatermelonDB-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = WatermelonDB;\n\t\t\t\tPRODUCT_NAME = WatermelonDB;\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tA9B99E2F7E73EF951B0D3F31B92B673F /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 9033A744B6DD1EB398DCC4DEC2188393 /* React-debug.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-debug/React-debug-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = \"Headers/Public/react_debug/React-debug.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = react_debug;\n\t\t\t\tPRODUCT_NAME = \"React-debug\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\tAE90C8871B9E2C95A56150448D932D54 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 047508626E4450B1D2FB80B3358F97F6 /* React-ImageManager.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-ImageManager/React-ImageManager-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = \"Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\";\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = react_renderer_imagemanager;\n\t\t\t\tPRODUCT_NAME = \"React-ImageManager\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tB0F96B3D84646746679A0633B4255B12 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = D40D2FA9CCC999A6A1985688544C9701 /* Pods-WatermelonTester-WatermelonTesterTests.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.0;\n\t\t\t\tMACH_O_TYPE = staticlib;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPODS_ROOT = \"$(SRCROOT)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tB366651097A40B84BBA78641F0929939 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 9046E45D1CA4C4109F20975FE05769E0 /* FBLazyVector.debug.xcconfig */;\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 = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\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\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tB7355507D474FD8BBD3E60F24A667A65 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 1544C565704FC17B15EBCF4F926F4C60 /* React-jsiexecutor.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-jsiexecutor/React-jsiexecutor-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = jsireact;\n\t\t\t\tPRODUCT_NAME = \"React-jsiexecutor\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\tB75F6C2CC510DF3A9CF307AC1FE8884F /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 9F03A2E19DD75677633924F1B93787D1 /* React-RCTAppDelegate.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-RCTAppDelegate/React-RCTAppDelegate-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = \"Headers/Public/React_RCTAppDelegate/React-RCTAppDelegate.modulemap\";\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = React_RCTAppDelegate;\n\t\t\t\tPRODUCT_NAME = \"React-RCTAppDelegate\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tB8CBE1EC8859C96FB379248A1B7A3F2D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 3B7CA49DCCF91C74062D35600488A355 /* React-jsi.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-jsi/React-jsi-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = \"Headers/Public/jsi/React-jsi.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = jsi;\n\t\t\t\tPRODUCT_NAME = \"React-jsi\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\tB91E69DB0F6A8D8C43413CBAF866AF10 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = E8A93054841794EAD58EB675761B8905 /* SocketRocket.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/SocketRocket/SocketRocket-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = SocketRocket;\n\t\t\t\tPRODUCT_NAME = SocketRocket;\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tB9DF6E69CBD6AC7C082B3B20661FC457 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = E951AE3ED64705A1E7CF71EDD854B178 /* React-RCTImage.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-RCTImage/React-RCTImage-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = RCTImage;\n\t\t\t\tPRODUCT_NAME = \"React-RCTImage\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tBA0B546CC26F64AB7A03D77C4C2936A7 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = DAEB77A1371F2344F999D880C3A90E0B /* React-RuntimeApple.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-RuntimeApple/React-RuntimeApple-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = ReactCommon;\n\t\t\t\tPRODUCT_NAME = \"React-RuntimeApple\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\tBA6F6F866B15E5642C85804F1C4EDEFC /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 8C190024D996EF72661EA3DECD88FD76 /* React-RCTLinking.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-RCTLinking/React-RCTLinking-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = RCTLinking;\n\t\t\t\tPRODUCT_NAME = \"React-RCTLinking\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tBB2873BBFB708E1D15CDBBF71949B6AD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 776825034C674A4EB458170D6BBB3139 /* React-RuntimeCore.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-RuntimeCore/React-RuntimeCore-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = react_runtime;\n\t\t\t\tPRODUCT_NAME = \"React-RuntimeCore\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tC5D670E4CCEE2B63BA55AD8411673B6F /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 56909D6C087AAA9D6C77D684FEC0C328 /* simdjson.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/simdjson/simdjson-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = Headers/Public/simdjson/simdjson.modulemap;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = simdjson;\n\t\t\t\tPRODUCT_NAME = simdjson;\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\tC63640657EED77D8622FE18B3A447727 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 55F26557222F60DEF94D6A5C8A9D24F9 /* React-RCTNetwork.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-RCTNetwork/React-RCTNetwork-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = RCTNetwork;\n\t\t\t\tPRODUCT_NAME = \"React-RCTNetwork\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\tC7A496836DFD638F181789F01B6E001E /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = EDE4EBF1DFE11D301F8A60F2D5B99F29 /* RCTTypeSafety.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/RCTTypeSafety/RCTTypeSafety-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = RCTTypeSafety;\n\t\t\t\tPRODUCT_NAME = RCTTypeSafety;\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\tC9099507DFF7989CAC568482DD830342 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = EAA2B5EA3356A9C6FCE82CC15F04FDC0 /* React-RCTSettings.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-RCTSettings/React-RCTSettings-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = RCTSettings;\n\t\t\t\tPRODUCT_NAME = \"React-RCTSettings\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\tCA4F6381FF1B7E6A3473AD1A3CC763A8 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 0EB25BDE8A306950B650A09F1A8ED625 /* React-logger.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-logger/React-logger-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = logger;\n\t\t\t\tPRODUCT_NAME = \"React-logger\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\tCAAA94DBEF54BED737F7E295DA145198 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = AB3065BC1723E238FF985D2A37F0A542 /* RCT-Folly.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/RCT-Folly/RCT-Folly-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = \"Headers/Public/folly/RCT-Folly.modulemap\";\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = folly;\n\t\t\t\tPRODUCT_NAME = \"RCT-Folly\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tCC51EABEB4CFC450D8890E53D7AB11D7 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = B49E927D98F0202C6C5CD21E1077E16E /* ReactCommon.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/ReactCommon/ReactCommon-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = Headers/Public/ReactCommon/ReactCommon.modulemap;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = ReactCommon;\n\t\t\t\tPRODUCT_NAME = ReactCommon;\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tCCB2C9D366498942DBE3BE5060FDE9FB /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 73B3A96DAB49C42270A59966B121F1A7 /* Pods-WatermelonTester.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.0;\n\t\t\t\tMACH_O_TYPE = staticlib;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPODS_ROOT = \"$(SRCROOT)\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tCE82C584340CABBA4F77AE60DD4A3390 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 58C1E8B779C42177C4AE37F87FA08B90 /* React-CoreModules.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-CoreModules/React-CoreModules-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t\t\"-DFOLLY_NO_CONFIG\",\n\t\t\t\t\t\"-DFOLLY_MOBILE=1\",\n\t\t\t\t\t\"-DFOLLY_USE_LIBCPP=1\",\n\t\t\t\t\t\"-DFOLLY_CFG_NO_COROUTINES=1\",\n\t\t\t\t\t\"-DFOLLY_HAVE_CLOCK_GETTIME=1\",\n\t\t\t\t\t\"-Wno-comma\",\n\t\t\t\t\t\"-Wno-shorten-64-to-32\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = CoreModules;\n\t\t\t\tPRODUCT_NAME = \"React-CoreModules\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD29732B7B0462383B7D8E84D4568F8B6 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 6DF638889DD6D88E1694A065C0A27BC6 /* React-rendererdebug.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-rendererdebug/React-rendererdebug-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = \"Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = react_renderer_debug;\n\t\t\t\tPRODUCT_NAME = \"React-rendererdebug\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\tD406B4608B484215F600C45D03EE82DF /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 8D07443F9F8CE58F73EE39187877455E /* hermes-engine.debug.xcconfig */;\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 = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"HERMES_ENABLE_DEBUGGER=1\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\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\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD438FE95D011ACEAE1EEC20BE4BE9525 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = E2F009051F05B8597141D79A5583D4FF /* React-featureflags.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-featureflags/React-featureflags-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = \"Headers/Public/react_featureflags/React-featureflags.modulemap\";\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = react_featureflags;\n\t\t\t\tPRODUCT_NAME = \"React-featureflags\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD49C415D918F61ABFCD3ECD90CCA2806 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = EA980E88736BC513D1E4D3CF3B6A67E8 /* React-runtimescheduler.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-runtimescheduler/React-runtimescheduler-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = react_renderer_runtimescheduler;\n\t\t\t\tPRODUCT_NAME = \"React-runtimescheduler\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\tD602DA10931FC0F5257BF28A7E9E7A3E /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 292CA568BD4ABB3A490EAADD2CA64FB7 /* React-cxxreact.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-cxxreact/React-cxxreact-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = cxxreact;\n\t\t\t\tPRODUCT_NAME = \"React-cxxreact\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD7E361BB16736ACF8838B065235BA173 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 17A0B50A888B86A9F608EBDAB0EA9B29 /* React-callinvoker.debug.xcconfig */;\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 = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\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\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD7FBC2DC890B490543B0810CCFD46A8E /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 30800F41E56952F66104FBA05648D6FB /* React-jsinspector.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-jsinspector/React-jsinspector-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = \"Headers/Public/jsinspector_modern/React-jsinspector.modulemap\";\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = jsinspector_modern;\n\t\t\t\tPRODUCT_NAME = \"React-jsinspector\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD87B33CFA204F39000C6AAA541DD2C63 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = B8BDA25E90049F9C70AA8B349A93426F /* React-graphics.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-graphics/React-graphics-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = \"Headers/Public/react_renderer_graphics/React-graphics.modulemap\";\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = react_renderer_graphics;\n\t\t\t\tPRODUCT_NAME = \"React-graphics\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tDD14E13C597C9B1858F728061E61ED43 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = B17B5D76BCAC42472B55462BAE850852 /* React-graphics.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-graphics/React-graphics-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = \"Headers/Public/react_renderer_graphics/React-graphics.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = react_renderer_graphics;\n\t\t\t\tPRODUCT_NAME = \"React-graphics\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\tDF3B88146486C5BADF9F4046B759697F /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 157BEE76ABB5FC023F974602BC587B8A /* React-Fabric.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-Fabric/React-Fabric-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = \"Headers/Public/React_Fabric/React-Fabric.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = React_Fabric;\n\t\t\t\tPRODUCT_NAME = \"React-Fabric\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\tDF8E3FD99144DA19A4ABA4D1F442A5EE /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = DFDFCA220F4E0487D24966099C7AC6BD /* React-rncore.release.xcconfig */;\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 = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\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\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tE06DE0D716501E26D79A956F721097E1 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = F8E385BE54CB846981F47BD4BBF298BC /* React-NativeModulesApple.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-NativeModulesApple/React-NativeModulesApple-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = \"Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = React_NativeModulesApple;\n\t\t\t\tPRODUCT_NAME = \"React-NativeModulesApple\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\tE438AE86F28741B18812A55CDBEE545A /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 4D27045A96C63465EC6F9A1AED2DED9D /* React-jsiexecutor.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-jsiexecutor/React-jsiexecutor-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = jsireact;\n\t\t\t\tPRODUCT_NAME = \"React-jsiexecutor\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tE678C5B8D52E99B32FFEBC7F1C705BFD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = ADD320EC4221CCC1B76BB433ED455CEC /* React-debug.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-debug/React-debug-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = \"Headers/Public/react_debug/React-debug.modulemap\";\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = react_debug;\n\t\t\t\tPRODUCT_NAME = \"React-debug\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tE99DFB667A53A19734E28CDCDF821BA4 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 9414F0292C4CA9913CEEC7F61F3E32B3 /* React-jserrorhandler.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-jserrorhandler/React-jserrorhandler-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = jserrorhandler;\n\t\t\t\tPRODUCT_NAME = \"React-jserrorhandler\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tEA28FECD5F865E3FE918A41D7A616FBA /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = C8980F597D1A97A167ACA46B54A4BC70 /* React-RCTAnimation.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-RCTAnimation/React-RCTAnimation-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = RCTAnimation;\n\t\t\t\tPRODUCT_NAME = \"React-RCTAnimation\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\tEA3BBD5E20726235E3306255BEBA7722 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 1E8D7F44C4927699FE5FFB25997A96F8 /* React-RuntimeApple.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-RuntimeApple/React-RuntimeApple-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = ReactCommon;\n\t\t\t\tPRODUCT_NAME = \"React-RuntimeApple\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tEAF219E82C6B0565AE53FA2AE9069D12 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 0AB45FDFADEB5035DFD513D71DB737DC /* React-featureflags.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-featureflags/React-featureflags-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = \"Headers/Public/react_featureflags/React-featureflags.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = react_featureflags;\n\t\t\t\tPRODUCT_NAME = \"React-featureflags\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\tEC1A7DB8DAABFD75F0340838EAD43BB6 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = BEC2935F7CAC9628D23D98B726129B8A /* React-ImageManager.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-ImageManager/React-ImageManager-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = \"Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\";\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = react_renderer_imagemanager;\n\t\t\t\tPRODUCT_NAME = \"React-ImageManager\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\tECD48242973C8F5694CF10EF62485A04 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = DECEAEDC186B345BDAAD789EDD05B9FD /* RCTDeprecation.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/RCTDeprecation/RCTDeprecation-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = Headers/Public/RCTDeprecation/RCTDeprecation.modulemap;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = RCTDeprecation;\n\t\t\t\tPRODUCT_NAME = RCTDeprecation;\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\tED301872A32449FE75120D1E7736B2D9 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 1AD8831E19FF419852060A20EFC9943A /* React-nativeconfig.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-nativeconfig/React-nativeconfig-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = react_config;\n\t\t\t\tPRODUCT_NAME = \"React-nativeconfig\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\tF10023C18296B5775743BC3999B95E08 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = E5CB5398F86031A46AD389FAA73E2323 /* RCTTypeSafety.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/RCTTypeSafety/RCTTypeSafety-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tMODULEMAP_FILE = Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = RCTTypeSafety;\n\t\t\t\tPRODUCT_NAME = RCTTypeSafety;\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tF16A76B772BE5925FA6612319337A226 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 2E2A892270F483593BF828FD99446809 /* React-RCTBlob.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-RCTBlob/React-RCTBlob-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = RCTBlob;\n\t\t\t\tPRODUCT_NAME = \"React-RCTBlob\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tF73E94D57A40E0C72DAB6510266D647C /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 0FE5FBB2B14D4BC374CECD01A71C50C3 /* WatermelonDB.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/WatermelonDB/WatermelonDB-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = WatermelonDB;\n\t\t\t\tPRODUCT_NAME = WatermelonDB;\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\tF8953168B22454E9419F25D28B9B9CF5 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = D9F52BE4E914A8BB9CDE60E8D6D9067A /* React-RCTText.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-RCTText/React-RCTText-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = RCTText;\n\t\t\t\tPRODUCT_NAME = \"React-RCTText\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tF9294C78D5005D3E1D56975ED464D611 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 8FC5170482B4001507331897446093A4 /* React-RCTBlob.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-RCTBlob/React-RCTBlob-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = RCTBlob;\n\t\t\t\tPRODUCT_NAME = \"React-RCTBlob\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\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\tFB755FACBBF1CDC5C214FB4F1770F706 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = E2B590F31CAE0577156C53171FEFEF07 /* React-FabricImage.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=appletvos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=watchos*]\" = \"\";\n\t\t\t\tGCC_PREFIX_HEADER = \"Target Support Files/React-FabricImage/React-FabricImage-prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-DNDEBUG\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tOTHER_LIBTOOLFLAGS = \"\";\n\t\t\t\tPRIVATE_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tPRODUCT_MODULE_NAME = react_renderer_components_image;\n\t\t\t\tPRODUCT_NAME = \"React-FabricImage\";\n\t\t\t\tPUBLIC_HEADERS_FOLDER_PATH = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) \";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tFCCB1D8601F08A44CAE526762FFAE461 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 0D01E2CE505FD137C83D5A00A839D8B9 /* React-jsitracing.debug.xcconfig */;\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 = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = NO;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 13.4;\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\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t064B0AD934FAEAE90C5B19183E95B267 /* Build configuration list for PBXNativeTarget \"WatermelonDB\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tF73E94D57A40E0C72DAB6510266D647C /* Debug */,\n\t\t\t\tA79343D4FCC4946246DDEC2EB1498F89 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t075CFEE2CD881582988C1D1118EEC225 /* Build configuration list for PBXNativeTarget \"React-FabricImage\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t2DB8CA194A472322BDFF94E57E7AD3AC /* Debug */,\n\t\t\t\tFB755FACBBF1CDC5C214FB4F1770F706 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t0C275FBF85ADB0F9F7275AA03EEFF4D8 /* Build configuration list for PBXNativeTarget \"React-graphics\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tDD14E13C597C9B1858F728061E61ED43 /* Debug */,\n\t\t\t\tD87B33CFA204F39000C6AAA541DD2C63 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t0F57A9E1BCAF11956772C8D87FE73D2D /* Build configuration list for PBXNativeTarget \"React-RuntimeHermes\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t3D1D91B804D25B65783055F9D295ED4F /* Debug */,\n\t\t\t\t2833F66F875A26F844089CF6BFF332EF /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1C5DC16C5742A9680E69626CDBC9F65B /* Build configuration list for PBXNativeTarget \"React-nativeconfig\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tED301872A32449FE75120D1E7736B2D9 /* Debug */,\n\t\t\t\t749D29305F3B147BEA433A8ED3A52055 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1C8845324AC124F676276B99D738106A /* Build configuration list for PBXNativeTarget \"React-jsinspector\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t9F5D655EFEE356B6278439617431B389 /* Debug */,\n\t\t\t\tD7FBC2DC890B490543B0810CCFD46A8E /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1CAE6B2FF32C286031FF774A500E5F6B /* Build configuration list for PBXNativeTarget \"React-runtimescheduler\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD49C415D918F61ABFCD3ECD90CCA2806 /* Debug */,\n\t\t\t\t675390F86EB23FA49464FB782CAF0014 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t2007902842A2D91320A831EDA401D9D3 /* Build configuration list for PBXNativeTarget \"React-RCTImage\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t556F215F73AD70669785BB704E7FF3FD /* Debug */,\n\t\t\t\tB9DF6E69CBD6AC7C082B3B20661FC457 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t2023F194410EB76C507DE4868A948CDE /* Build configuration list for PBXNativeTarget \"React-CoreModules\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t72988AE6F2442AF167ACC14C8D84C1FF /* Debug */,\n\t\t\t\tCE82C584340CABBA4F77AE60DD4A3390 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t25D58DD7F531AAF078902F24BDB05BA5 /* Build configuration list for PBXNativeTarget \"ReactCommon\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t5D836308F838876BEA6E15EA4442264C /* Debug */,\n\t\t\t\tCC51EABEB4CFC450D8890E53D7AB11D7 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t30B947E14EE1C9821D33E6F7B6C9B674 /* Build configuration list for PBXAggregateTarget \"React-RCTActionSheet\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t596D1E536C46F393552CAF1F8BD63D31 /* Debug */,\n\t\t\t\t1EB589223DB61A0CC57D72143471CD9C /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t35BDABAF8BA6C6EA1964325CDB079A1D /* Build configuration list for PBXNativeTarget \"React-Core-RCTI18nStrings\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1926B4BB348A3C6E0E0A3D464CCAFBDE /* Debug */,\n\t\t\t\t592181D556023CD1C894B701362E4DA4 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t3B20501A4B72AB953CEA417EABF8576B /* Build configuration list for PBXNativeTarget \"React-RuntimeApple\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tBA0B546CC26F64AB7A03D77C4C2936A7 /* Debug */,\n\t\t\t\tEA3BBD5E20726235E3306255BEBA7722 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t3C2B4CD24E58B412E3E2C697725C9878 /* Build configuration list for PBXAggregateTarget \"React-jsitracing\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tFCCB1D8601F08A44CAE526762FFAE461 /* Debug */,\n\t\t\t\t09DE6D1D41918E704C850693789D572E /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t3CDF0161DB20A500B3F98141C7B4D171 /* Build configuration list for PBXNativeTarget \"React-cxxreact\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t018A699977B43DF54A5388A977841260 /* Debug */,\n\t\t\t\tD602DA10931FC0F5257BF28A7E9E7A3E /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t3F9D73DBB45031EEA90F9BEAF35DBEC0 /* Build configuration list for PBXNativeTarget \"React-RCTVibration\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t87FA83E446D43813C592A551733FBFF5 /* Debug */,\n\t\t\t\t7B6774F79AB067206CA65BBF3ADDE822 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t430F0181C23B9D49AE0FB01BF97532C0 /* Build configuration list for PBXAggregateTarget \"React-callinvoker\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD7E361BB16736ACF8838B065235BA173 /* Debug */,\n\t\t\t\t14C1CF143C41528891604A92041BEE5A /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject \"Pods\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t90D4D09BCB6A4660E43ACBE9ECB6FE9A /* Debug */,\n\t\t\t\t9553C89E183877A5CB2F3C6801BEC129 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t4ADC4A4F4CD285503097D676C2835DAD /* Build configuration list for PBXNativeTarget \"RCTDeprecation\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tECD48242973C8F5694CF10EF62485A04 /* Debug */,\n\t\t\t\t82EFCB4F4469DA6AFF305D017CB93AFF /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t4BB3D33652ACC437885A3F69A7BD4E2B /* Build configuration list for PBXNativeTarget \"React-RCTFabric\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1D363B72BC5025D9B8DE46B8F3631147 /* Debug */,\n\t\t\t\t2A29B58589FA66317C725FBE5DCDA803 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t4FB4FCC7287CF5184D152FD0437A63C6 /* Build configuration list for PBXNativeTarget \"React-jsi\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tB8CBE1EC8859C96FB379248A1B7A3F2D /* Debug */,\n\t\t\t\t76FAF1D653E3091D8F31A040BCAF3242 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t5BBEBFE986F7B4F914468460EB8F1959 /* Build configuration list for PBXNativeTarget \"React-logger\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tCA4F6381FF1B7E6A3473AD1A3CC763A8 /* Debug */,\n\t\t\t\t77779BB20E55F693035240DE888044A8 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t611882B4FC76DDB90E3FE11E69E82A1D /* Build configuration list for PBXAggregateTarget \"FBLazyVector\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tB366651097A40B84BBA78641F0929939 /* Debug */,\n\t\t\t\t85D200DC120335672B1B81C7F2422A9A /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t62FCE44A9C2279F047899EE9CBDB05E9 /* Build configuration list for PBXNativeTarget \"React-RCTNetwork\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC63640657EED77D8622FE18B3A447727 /* Debug */,\n\t\t\t\t857D2EEFD5273048A02DC360E3945215 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t6421C0EF07096454C13037FB6D1B25FB /* Build configuration list for PBXNativeTarget \"React-rendererdebug\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD29732B7B0462383B7D8E84D4568F8B6 /* Debug */,\n\t\t\t\t458EA9D2AFB826AF6F125A23390B3E72 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t64F885119F50A3C56A0D08EA0B025C49 /* Build configuration list for PBXNativeTarget \"React-RuntimeCore\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t7487028E6EEFFE8D0A9F2AF94BD4AA1A /* Debug */,\n\t\t\t\tBB2873BBFB708E1D15CDBBF71949B6AD /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t65417709D1683A7567ED9D68A22636AA /* Build configuration list for PBXAggregateTarget \"hermes-engine\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD406B4608B484215F600C45D03EE82DF /* Debug */,\n\t\t\t\t6EBB7CB930647993566D4C38C4ED32B2 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t662954243572A7CB6DEE48482351D64F /* Build configuration list for PBXNativeTarget \"React-RCTLinking\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t6A776DA165E894C693E080A92B873914 /* Debug */,\n\t\t\t\tBA6F6F866B15E5642C85804F1C4EDEFC /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t6707DE3D6F26E17231DE98DB9A3E3AB3 /* Build configuration list for PBXNativeTarget \"React-jserrorhandler\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t35DED647B18E0C5F5E2B4A45D62DB3D6 /* Debug */,\n\t\t\t\tE99DFB667A53A19734E28CDCDF821BA4 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t7060A6016509840F2216B4B586CDB808 /* Build configuration list for PBXNativeTarget \"glog\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t678D48C418EB8199FBF88BD9F57F8447 /* Debug */,\n\t\t\t\t49D01D1CC6D95E241EEF124BCD449141 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t772C322C9EE72B896EB7A93983C1ABFF /* Build configuration list for PBXNativeTarget \"React-RCTText\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t4EAB1F82D42083A7A6795A9385EFD439 /* Debug */,\n\t\t\t\tF8953168B22454E9419F25D28B9B9CF5 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t7AB9946DDD1C3D6A76F4EC20B825E6B1 /* Build configuration list for PBXNativeTarget \"React-utils\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t572933D427FDEA7D3C0815E9B99D61F0 /* Debug */,\n\t\t\t\t7EE96DBD4F3FD36343287841E13E3E42 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t7CDBC45D37D1B150104FBBEAFF6D7DFA /* Build configuration list for PBXNativeTarget \"DoubleConversion\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t7E1661B1D42FD4320D2DF45DFBBF0569 /* Debug */,\n\t\t\t\t3410F70629881DF6D9E1146E1EBBF55D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t81539B5A4569E3F41E63CB9C9B3DDF65 /* Build configuration list for PBXAggregateTarget \"React-runtimeexecutor\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t2C71D7027C68688E621A0314ABAE9630 /* Debug */,\n\t\t\t\t7291D0787BB051F79F3D0EAF355E78A0 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t8155B5CA84599E484C0CD5B5A50F38AA /* Build configuration list for PBXNativeTarget \"fmt\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t0AEE42B6AF134488CE307D9407337DD5 /* Debug */,\n\t\t\t\t83A1E30C35D447DDFEE09B9845881E86 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t8B2FBF8FCEC45B37713547AEBD5D99B6 /* Build configuration list for PBXNativeTarget \"React-Fabric\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tDF3B88146486C5BADF9F4046B759697F /* Debug */,\n\t\t\t\t37BCE36EE3C38B37F32177E13BE793E9 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t9A3369F1A104F96B1995A4DC4B4D5777 /* Build configuration list for PBXAggregateTarget \"RCTRequired\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t08CDA085B84DEFE53F3E9FC57495A7B1 /* Debug */,\n\t\t\t\t9FD952B7BE0C46A0DF7E6AB4EC3072E2 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t9A8C7076F126DE9D2C93C68E1F84C184 /* Build configuration list for PBXNativeTarget \"React-Codegen\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t13D10FC94AEA7BB8B0F77CE5DDA07D9F /* Debug */,\n\t\t\t\t9793834942B6B511FCAC87E74D4AE4DC /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t9DE30F4D4057127ECD1C4181A033108A /* Build configuration list for PBXNativeTarget \"React-ImageManager\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tEC1A7DB8DAABFD75F0340838EAD43BB6 /* Debug */,\n\t\t\t\tAE90C8871B9E2C95A56150448D932D54 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t9F2C5C7A82B8C5C2581EDD99BF908E3B /* Build configuration list for PBXNativeTarget \"RCT-Folly\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tA7036092C396D0E15E8494AE7E86C458 /* Debug */,\n\t\t\t\tCAAA94DBEF54BED737F7E295DA145198 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tB0BA1E3B69666258803F3BA8BC7753D5 /* Build configuration list for PBXNativeTarget \"React-debug\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tA9B99E2F7E73EF951B0D3F31B92B673F /* Debug */,\n\t\t\t\tE678C5B8D52E99B32FFEBC7F1C705BFD /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tB1628683B730946B45D719929318C407 /* Build configuration list for PBXNativeTarget \"React-hermes\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t056694F8D0C86B3713F8353E4582F89A /* Debug */,\n\t\t\t\t10066A18E063481B550E23ADA03005AE /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tB1B375EB7281E82379407E0756F4CA72 /* Build configuration list for PBXNativeTarget \"React-Mapbuffer\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t2B221AEBC14A861BF463CF46C260CCB7 /* Debug */,\n\t\t\t\t0EEDCB8A7B61E6778E280CC8A5B4C5B0 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tB5BF53901A44961D2F0245A680C5600D /* Build configuration list for PBXNativeTarget \"React-Core\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t0C4A7CE2F9E8B1F3AC5496501BBA1B1A /* Debug */,\n\t\t\t\t531D19EFC8B7A07D8B5362B29A4F5877 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tBC2E6F2E3470A4F5826B9F71F74F6A1E /* Build configuration list for PBXNativeTarget \"Yoga\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t04778D8576ED573ED3D035D5FD0C8790 /* Debug */,\n\t\t\t\tA0BBCE59E95803992E15B022E523A32A /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tBF3133F2BD1849B71229502EAFA6C771 /* Build configuration list for PBXNativeTarget \"React-RCTAppDelegate\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t8240BCFA16E2325996C60923974225AB /* Debug */,\n\t\t\t\tB75F6C2CC510DF3A9CF307AC1FE8884F /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tBF798DE132A0163B4BE4BECA4240D2A1 /* Build configuration list for PBXNativeTarget \"Pods-WatermelonTester-WatermelonTesterTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tB0F96B3D84646746679A0633B4255B12 /* Debug */,\n\t\t\t\t1F9EF9FDD1FFA34C2022EBF931B0F37F /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tC0CFAFD893AA5A3CF3EF3D5182D8DFCA /* Build configuration list for PBXNativeTarget \"simdjson\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC5D670E4CCEE2B63BA55AD8411673B6F /* Debug */,\n\t\t\t\t3D4FC99CDC76C9524BC1F015F45D5E37 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tCBAB2C5064DBA2DAE34E7B896B68FABD /* Build configuration list for PBXAggregateTarget \"boost\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t53BE662BA9F4225F5401BA92D84C61AE /* Debug */,\n\t\t\t\t2D805517E0E395E6F8828785D5DE0D66 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tCDFD8CE3A5B07C8AC39C77C03139B84E /* Build configuration list for PBXNativeTarget \"React-RCTAnimation\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tEA28FECD5F865E3FE918A41D7A616FBA /* Debug */,\n\t\t\t\t976E7D6E4A2D2582C2D63BC38DFC725E /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD04C425F4F78AE26547DDB4435695187 /* Build configuration list for PBXNativeTarget \"React-RCTSettings\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC9099507DFF7989CAC568482DD830342 /* Debug */,\n\t\t\t\t2B3C3F7DAF3E97ADB03B625260E9A2C3 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD343A1B642437DBEA4FA80B9A4094074 /* Build configuration list for PBXNativeTarget \"React-jsiexecutor\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tB7355507D474FD8BBD3E60F24A667A65 /* Debug */,\n\t\t\t\tE438AE86F28741B18812A55CDBEE545A /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD50F4D7598C6D582311D01575A97FE3C /* Build configuration list for PBXNativeTarget \"React-RCTBlob\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tF9294C78D5005D3E1D56975ED464D611 /* Debug */,\n\t\t\t\tF16A76B772BE5925FA6612319337A226 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD6A86079896F7EF87D956234AFC7707B /* Build configuration list for PBXAggregateTarget \"React\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t51CE8C2ADBEFC3589D77A365F30FE6F6 /* Debug */,\n\t\t\t\t4B3CDC8D3D3FFFA5EBD6A180E54DE221 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD7B61D8E284A82A5FFDD5722F2E8CB19 /* Build configuration list for PBXNativeTarget \"SocketRocket\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t93790FAB2314B5185C12CF46BF260616 /* Debug */,\n\t\t\t\tB91E69DB0F6A8D8C43413CBAF866AF10 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tE78E1B9C796F493267390DA3E9932266 /* Build configuration list for PBXNativeTarget \"RCTTypeSafety\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC7A496836DFD638F181789F01B6E001E /* Debug */,\n\t\t\t\tF10023C18296B5775743BC3999B95E08 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tF26D4DF8D52FF944DEF674FAE1118945 /* Build configuration list for PBXNativeTarget \"React-NativeModulesApple\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tE06DE0D716501E26D79A956F721097E1 /* Debug */,\n\t\t\t\t931B4D02069204C8B36EF5077FA0C069 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tF2768486D471591D3A8A58B2E7F81CD4 /* Build configuration list for PBXNativeTarget \"React-featureflags\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tEAF219E82C6B0565AE53FA2AE9069D12 /* Debug */,\n\t\t\t\tD438FE95D011ACEAE1EEC20BE4BE9525 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tF6160CF29B028D7ECAD77007C47BE1C6 /* Build configuration list for PBXNativeTarget \"Pods-WatermelonTester\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t101CBCE1C2C1E8BA5847D6EAD5702399 /* Debug */,\n\t\t\t\tCCB2C9D366498942DBE3BE5060FDE9FB /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tF730EC4EA56CE21717CD773050DB72DA /* Build configuration list for PBXAggregateTarget \"React-rncore\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t61821F3B24E655D15183326DC352D9BE /* Debug */,\n\t\t\t\tDF8E3FD99144DA19A4ABA4D1F442A5EE /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tFB6AD053F80544ABF6568EAFF5394DB4 /* Build configuration list for PBXNativeTarget \"React-perflogger\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t6DB5D13F19305EB6CA0B293E0BF786CD /* Debug */,\n\t\t\t\t8760A2D85E97AB06F84ACD71B7BD299F /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */;\n}\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/LICENSE",
    "content": "BSD License\n\nFor SocketRocket software\n\nCopyright (c) 2016-present, Facebook, Inc. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n   list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution.\n\n * Neither the name Facebook nor the names of its contributors may be used to\n   endorse or promote products derived from this software without specific\n   prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/LICENSE-examples",
    "content": "Copyright (c) 2016-present, Facebook, Inc. All rights reserved.\n\nThe examples provided by Facebook are for non-commercial testing and evaluation\npurposes only. Facebook reserves all rights not expressly granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\nFACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\nACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/README.md",
    "content": "# SocketRocket\n\n![Platforms][platforms-svg]\n[![License][license-svg]][license-link]\n\n[![Podspec][podspec-svg]][podspec-link]\n[![Carthage Compatible][carthage-svg]](carthage-link)\n\n[![Build Status][build-status-svg]][build-status-link]\n\nA conforming WebSocket ([RFC 6455](https://tools.ietf.org/html/rfc6455>)) client library for iOS, macOS and tvOS.\n\nTest results for SocketRocket [here](http://facebook.github.io/SocketRocket/results/).\nYou can compare to what modern browsers look like [here](http://autobahn.ws/testsuite/reports/clients/index.html).\n\nSocketRocket currently conforms to all core ~300 of [Autobahn](http://autobahn.ws/testsuite/>)'s fuzzing tests \n(aside from two UTF-8 ones where it is merely *non-strict* tests 6.4.2 and 6.4.4).\n\n## Features/Design\n\n- TLS (wss) support, including self-signed certificates.\n- Seems to perform quite well.\n- Supports HTTP Proxies.\n- Supports IPv4/IPv6.\n- Supports SSL certificate pinning.\n- Sends `ping` and can process `pong` events.\n- Asynchronous and non-blocking. Most of the work is done on a background thread.\n- Supports iOS, macOS, tvOS.\n\n## Installing\n\nThere are a few options. Choose one, or just figure it out:\n\n- **[CocoaPods](https://cocoapods.org)**\n\n Add the following line to your Podfile:\n ```ruby\n pod 'SocketRocket'\n ```\n Run `pod install`, and you are all set.\n  \n- **[Carthage](https://github.com/carthage/carthage)**\n\n Add the following line to your Cartfile:\n ```\n github \"facebook/SocketRocket\"\n ```\n Run `carthage update`, and you should now have the latest version of `SocketRocket` in your `Carthage` folder.\n\n- **Using SocketRocket as a sub-project**\n\n  You can also include `SocketRocket` as a subproject inside of your application if you'd prefer, although we do not recommend this, as it will increase your indexing time significantly. To do so, just drag and drop the `SocketRocket.xcodeproj` file into your workspace.\n\n## API\n\n### `SRWebSocket`\n\nThe Web Socket.\n\n#### Note:\n\n`SRWebSocket` will retain itself between `-(void)open` and when it closes, errors, or fails.\nThis is similar to how `NSURLConnection` behaves (unlike `NSURLConnection`, `SRWebSocket` won't retain the delegate).\n\n#### Interface\n\n```objective-c\n@interface SRWebSocket : NSObject\n\n// Make it with this\n- (instancetype)initWithURLRequest:(NSURLRequest *)request;\n\n// Set this before opening\n@property (nonatomic, weak) id <SRWebSocketDelegate> delegate;\n\n// Open with this\n- (void)open;\n\n// Close it with this\n- (void)close;\n\n// Send a Data\n- (void)sendData:(nullable NSData *)data error:(NSError **)error;\n\n// Send a UTF8 String\n- (void)sendString:(NSString *)string error:(NSError **)error;\n\n@end\n```\n\n### `SRWebSocketDelegate`\n\nYou implement this\n\n```objective-c\n@protocol SRWebSocketDelegate <NSObject>\n\n@optional\n\n- (void)webSocketDidOpen:(SRWebSocket *)webSocket;\n\n- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessageWithString:(NSString *)string;\n- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessageWithData:(NSData *)data;\n\n- (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error;\n- (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(nullable NSString *)reason wasClean:(BOOL)wasClean;\n\n@end\n```\n\n## Testing\n\nIncluded are setup scripts for the python testing environment.\nIt comes packaged with vitualenv so all the dependencies are installed in userland.\n\nTo run the short test from the command line, run:\n```bash\n  make test\n```\n\nTo run all the tests, run:\n```bash\n  make test_all\n```\n\nThe short tests don't include the performance tests\n(the test harness is actually the bottleneck, not SocketRocket).\n\nThe first time this is run, it may take a while to install the dependencies. It will be smooth sailing after that. \n\nYou can also run tests inside Xcode, which runs the same thing, but makes it easier to debug.\n\n- Choose the `SocketRocketTests` target\n- Make sure your running destination is either your Mac or any Simulator\n- Run the test action (`⌘+U`)\n\n### TestChat Demo Application\n\nSocketRocket includes a demo app, TestChat.\nIt will \"chat\" with a listening websocket on port 9900.\n\n#### TestChat Server\n\nThe sever takes a message and broadcasts it to all other connected clients.\n\nIt requires some dependencies though to run. \nWe also want to reuse the virtualenv we made when we ran the tests. \nIf you haven't run the tests yet, go into the SocketRocket root directory and type:\n\n```bash\nmake test\n```\n\nThis will set up your [virtualenv](https://pypi.python.org/pypi/virtualenv).\n\nNow, in your terminal:\n\n```bash\nsource .env/bin/activate\npip install git+https://github.com/tornadoweb/tornado.git\n```\n\nIn the same terminal session, start the chatroom server:\n\n```bash\npython TestChatServer/py/chatroom.py\n```\n\nThere's also a Go implementation (with the latest weekly) where you can:\n\n```bash\ncd TestChatServer/go\ngo run chatroom.go\n```\n\n#### Chatting\n\nNow, start TestChat.app (just run the target in the Xcode project).\nIf you had it started already you can hit the refresh button to reconnect.\nIt should say \"Connected!\" on top.\n\nTo talk with the app, open up your browser to [http://localhost:9000](http://localhost:9000) and start chatting.\n\n\n## WebSocket Server Implementation Recommendations\n\nSocketRocket has been used with the following libraries:\n\n- [Tornado](https://github.com/tornadoweb/tornado)\n- Go's [WebSocket package](https://godoc.org/golang.org/x/net/websocket) or Gorilla's [version](http://www.gorillatoolkit.org/pkg/websocket).\n- [Autobahn](http://autobahn.ws/testsuite/) (using its fuzzing client).\n\nThe Tornado one is dirt simple and works like a charm. \n([IPython notebook](http://ipython.org/ipython-doc/dev/interactive/htmlnotebook.html) uses it too).\nIt's much easier to configure handlers and routes than in Autobahn/twisted.\n\n## Contributing\n\nWe’re glad you’re interested in SocketRocket, and we’d love to see where you take it. \nPlease read our [contributing guidelines](https://github.com/facebook/SocketRocket/blob/master/CONTRIBUTING.md) prior to submitting a Pull Request.\n\n [build-status-svg]: https://img.shields.io/travis/facebook/SocketRocket/master.svg\n [build-status-link]: https://travis-ci.org/facebook/SocketRocket/branches\n\n [license-svg]: https://img.shields.io/badge/license-BSD-lightgrey.svg\n [license-link]: https://github.com/facebook/SocketRocket/blob/master/LICENSE\n\n [podspec-svg]: https://img.shields.io/cocoapods/v/SocketRocket.svg\n [podspec-link]: https://cocoapods.org/pods/SocketRocket\n \n [carthage-svg]: https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat\n [carthage-link]: https://github.com/carthage/carthage\n\n [platforms-svg]: http://img.shields.io/cocoapods/p/SocketRocket.svg?style=flat\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/Delegate/SRDelegateController.h",
    "content": "//\n// Copyright (c) 2016-present, Facebook, Inc.\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import <Foundation/Foundation.h>\n\n#import <SocketRocket/SRWebSocket.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\n#if OBJC_BOOL_IS_BOOL\n\nstruct SRDelegateAvailableMethods {\n    BOOL didReceiveMessage : 1;\n    BOOL didReceiveMessageWithString : 1;\n    BOOL didReceiveMessageWithData : 1;\n    BOOL didOpen : 1;\n    BOOL didFailWithError : 1;\n    BOOL didCloseWithCode : 1;\n    BOOL didReceivePing : 1;\n    BOOL didReceivePong : 1;\n    BOOL shouldConvertTextFrameToString : 1;\n};\n\n#else\n\nstruct SRDelegateAvailableMethods {\n    BOOL didReceiveMessage;\n    BOOL didReceiveMessageWithString;\n    BOOL didReceiveMessageWithData;\n    BOOL didOpen;\n    BOOL didFailWithError;\n    BOOL didCloseWithCode;\n    BOOL didReceivePing;\n    BOOL didReceivePong;\n    BOOL shouldConvertTextFrameToString;\n};\n\n#endif\n\ntypedef struct SRDelegateAvailableMethods SRDelegateAvailableMethods;\n\ntypedef void(^SRDelegateBlock)(id<SRWebSocketDelegate> _Nullable delegate, SRDelegateAvailableMethods availableMethods);\n\n@interface SRDelegateController : NSObject\n\n@property (nonatomic, weak) id<SRWebSocketDelegate> delegate;\n@property (atomic, readonly) SRDelegateAvailableMethods availableDelegateMethods;\n\n@property (nullable, nonatomic, strong) dispatch_queue_t dispatchQueue;\n@property (nullable, nonatomic, strong) NSOperationQueue *operationQueue;\n\n///--------------------------------------\n#pragma mark - Perform\n///--------------------------------------\n\n- (void)performDelegateBlock:(SRDelegateBlock)block;\n- (void)performDelegateQueueBlock:(dispatch_block_t)block;\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/Delegate/SRDelegateController.m",
    "content": "//\n// Copyright (c) 2016-present, Facebook, Inc.\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import \"SRDelegateController.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface SRDelegateController ()\n\n@property (nonatomic, strong, readonly) dispatch_queue_t accessQueue;\n\n@property (atomic, assign, readwrite) SRDelegateAvailableMethods availableDelegateMethods;\n\n@end\n\n@implementation SRDelegateController\n\n@synthesize delegate = _delegate;\n@synthesize dispatchQueue = _dispatchQueue;\n@synthesize operationQueue = _operationQueue;\n\n///--------------------------------------\n#pragma mark - Init\n///--------------------------------------\n\n- (instancetype)init\n{\n    self = [super init];\n    if (!self) return self;\n\n    _accessQueue = dispatch_queue_create(\"com.facebook.socketrocket.delegate.access\", DISPATCH_QUEUE_CONCURRENT);\n    _dispatchQueue = dispatch_get_main_queue();\n\n    return self;\n}\n\n///--------------------------------------\n#pragma mark - Accessors\n///--------------------------------------\n\n- (void)setDelegate:(id<SRWebSocketDelegate> _Nullable)delegate\n{\n    dispatch_barrier_async(self.accessQueue, ^{\n        self->_delegate = delegate;\n\n        self.availableDelegateMethods = (SRDelegateAvailableMethods){\n            .didReceiveMessage = [delegate respondsToSelector:@selector(webSocket:didReceiveMessage:)],\n            .didReceiveMessageWithString = [delegate respondsToSelector:@selector(webSocket:didReceiveMessageWithString:)],\n            .didReceiveMessageWithData = [delegate respondsToSelector:@selector(webSocket:didReceiveMessageWithData:)],\n            .didOpen = [delegate respondsToSelector:@selector(webSocketDidOpen:)],\n            .didFailWithError = [delegate respondsToSelector:@selector(webSocket:didFailWithError:)],\n            .didCloseWithCode = [delegate respondsToSelector:@selector(webSocket:didCloseWithCode:reason:wasClean:)],\n            .didReceivePing = [delegate respondsToSelector:@selector(webSocket:didReceivePingWithData:)],\n            .didReceivePong = [delegate respondsToSelector:@selector(webSocket:didReceivePong:)],\n            .shouldConvertTextFrameToString = [delegate respondsToSelector:@selector(webSocketShouldConvertTextFrameToString:)]\n        };\n    });\n}\n\n- (id<SRWebSocketDelegate> _Nullable)delegate\n{\n    __block id<SRWebSocketDelegate> delegate = nil;\n    dispatch_sync(self.accessQueue, ^{\n        delegate = self->_delegate;\n    });\n    return delegate;\n}\n\n- (void)setDispatchQueue:(dispatch_queue_t _Nullable)queue\n{\n    dispatch_barrier_async(self.accessQueue, ^{\n        self->_dispatchQueue = queue ?: dispatch_get_main_queue();\n        self->_operationQueue = nil;\n    });\n}\n\n- (dispatch_queue_t _Nullable)dispatchQueue\n{\n    __block dispatch_queue_t queue = nil;\n    dispatch_sync(self.accessQueue, ^{\n        queue = self->_dispatchQueue;\n    });\n    return queue;\n}\n\n- (void)setOperationQueue:(NSOperationQueue *_Nullable)queue\n{\n    dispatch_barrier_async(self.accessQueue, ^{\n        self->_dispatchQueue = queue ? nil : dispatch_get_main_queue();\n        self->_operationQueue = queue;\n    });\n}\n\n- (NSOperationQueue *_Nullable)operationQueue\n{\n    __block NSOperationQueue *queue = nil;\n    dispatch_sync(self.accessQueue, ^{\n        queue = self->_operationQueue;\n    });\n    return queue;\n}\n\n///--------------------------------------\n#pragma mark - Perform\n///--------------------------------------\n\n- (void)performDelegateBlock:(SRDelegateBlock)block\n{\n    __block __strong id<SRWebSocketDelegate> delegate = nil;\n    __block SRDelegateAvailableMethods availableMethods = {};\n    dispatch_sync(self.accessQueue, ^{\n        delegate = self->_delegate; // Not `OK` to go through `self`, since queue sync.\n        availableMethods = self.availableDelegateMethods; // `OK` to call through `self`, since no queue sync.\n    });\n    [self performDelegateQueueBlock:^{\n        block(delegate, availableMethods);\n    }];\n}\n\n- (void)performDelegateQueueBlock:(dispatch_block_t)block\n{\n    dispatch_queue_t dispatchQueue = self.dispatchQueue;\n    if (dispatchQueue) {\n        dispatch_async(dispatchQueue, block);\n    } else {\n        [self.operationQueue addOperationWithBlock:block];\n    }\n}\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/IOConsumer/SRIOConsumer.h",
    "content": "//\n// Copyright 2012 Square Inc.\n// Portions Copyright (c) 2016-present, Facebook, Inc.\n//\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import <Foundation/Foundation.h>\n\n@class SRWebSocket; // TODO: (nlutsenko) Remove dependency on SRWebSocket here.\n\n// Returns number of bytes consumed. Returning 0 means you didn't match.\n// Sends bytes to callback handler;\ntypedef size_t (^stream_scanner)(NSData *collected_data);\ntypedef void (^data_callback)(SRWebSocket *webSocket,  NSData *data);\n\n@interface SRIOConsumer : NSObject {\n    stream_scanner _scanner;\n    data_callback _handler;\n    size_t _bytesNeeded;\n    BOOL _readToCurrentFrame;\n    BOOL _unmaskBytes;\n}\n@property (nonatomic, copy, readonly) stream_scanner consumer;\n@property (nonatomic, copy, readonly) data_callback handler;\n@property (nonatomic, assign) size_t bytesNeeded;\n@property (nonatomic, assign, readonly) BOOL readToCurrentFrame;\n@property (nonatomic, assign, readonly) BOOL unmaskBytes;\n\n- (void)resetWithScanner:(stream_scanner)scanner\n                 handler:(data_callback)handler\n             bytesNeeded:(size_t)bytesNeeded\n      readToCurrentFrame:(BOOL)readToCurrentFrame\n             unmaskBytes:(BOOL)unmaskBytes;\n\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/IOConsumer/SRIOConsumer.m",
    "content": "//\n// Copyright 2012 Square Inc.\n// Portions Copyright (c) 2016-present, Facebook, Inc.\n//\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import \"SRIOConsumer.h\"\n\n@implementation SRIOConsumer\n\n@synthesize bytesNeeded = _bytesNeeded;\n@synthesize consumer = _scanner;\n@synthesize handler = _handler;\n@synthesize readToCurrentFrame = _readToCurrentFrame;\n@synthesize unmaskBytes = _unmaskBytes;\n\n- (void)resetWithScanner:(stream_scanner)scanner\n                 handler:(data_callback)handler\n             bytesNeeded:(size_t)bytesNeeded\n      readToCurrentFrame:(BOOL)readToCurrentFrame\n             unmaskBytes:(BOOL)unmaskBytes\n{\n    _scanner = [scanner copy];\n    _handler = [handler copy];\n    _bytesNeeded = bytesNeeded;\n    _readToCurrentFrame = readToCurrentFrame;\n    _unmaskBytes = unmaskBytes;\n    assert(_scanner || _bytesNeeded);\n}\n\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/IOConsumer/SRIOConsumerPool.h",
    "content": "//\n// Copyright 2012 Square Inc.\n// Portions Copyright (c) 2016-present, Facebook, Inc.\n//\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import <Foundation/Foundation.h>\n\n#import \"SRIOConsumer.h\" // TODO: (nlutsenko) Convert to @class and constants file for block types\n\n// This class is not thread-safe, and is expected to always be run on the same queue.\n@interface SRIOConsumerPool : NSObject\n\n- (instancetype)initWithBufferCapacity:(NSUInteger)poolSize;\n\n- (SRIOConsumer *)consumerWithScanner:(stream_scanner)scanner\n                              handler:(data_callback)handler\n                          bytesNeeded:(size_t)bytesNeeded\n                   readToCurrentFrame:(BOOL)readToCurrentFrame\n                          unmaskBytes:(BOOL)unmaskBytes;\n- (void)returnConsumer:(SRIOConsumer *)consumer;\n\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/IOConsumer/SRIOConsumerPool.m",
    "content": "//\n// Copyright 2012 Square Inc.\n// Portions Copyright (c) 2016-present, Facebook, Inc.\n//\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import \"SRIOConsumerPool.h\"\n\n@implementation SRIOConsumerPool {\n    NSUInteger _poolSize;\n    NSMutableArray<SRIOConsumer *> *_bufferedConsumers;\n}\n\n- (instancetype)initWithBufferCapacity:(NSUInteger)poolSize\n{\n    self = [super init];\n    if (self) {\n        _poolSize = poolSize;\n        _bufferedConsumers = [NSMutableArray arrayWithCapacity:poolSize];\n    }\n    return self;\n}\n\n- (instancetype)init\n{\n    return [self initWithBufferCapacity:8];\n}\n\n- (SRIOConsumer *)consumerWithScanner:(stream_scanner)scanner\n                              handler:(data_callback)handler\n                          bytesNeeded:(size_t)bytesNeeded\n                   readToCurrentFrame:(BOOL)readToCurrentFrame\n                          unmaskBytes:(BOOL)unmaskBytes\n{\n    SRIOConsumer *consumer = nil;\n    if (_bufferedConsumers.count) {\n        consumer = [_bufferedConsumers lastObject];\n        [_bufferedConsumers removeLastObject];\n    } else {\n        consumer = [[SRIOConsumer alloc] init];\n    }\n\n    [consumer resetWithScanner:scanner\n                       handler:handler\n                   bytesNeeded:bytesNeeded\n            readToCurrentFrame:readToCurrentFrame\n                   unmaskBytes:unmaskBytes];\n\n    return consumer;\n}\n\n- (void)returnConsumer:(SRIOConsumer *)consumer\n{\n    if (_bufferedConsumers.count < _poolSize) {\n        [_bufferedConsumers addObject:consumer];\n    }\n}\n\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/NSRunLoop+SRWebSocketPrivate.h",
    "content": "//\n// Copyright (c) 2016-present, Facebook, Inc.\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import <SocketRocket/NSRunLoop+SRWebSocket.h>\n\n// Empty function that force links the object file for the category.\nextern void import_NSRunLoop_SRWebSocket(void);\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/NSURLRequest+SRWebSocketPrivate.h",
    "content": "//\n// Copyright (c) 2016-present, Facebook, Inc.\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import <SocketRocket/NSURLRequest+SRWebSocket.h>\n\n// Empty function that force links the object file for the category.\nextern void import_NSURLRequest_SRWebSocket(void);\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/Proxy/SRProxyConnect.h",
    "content": "//\n// Copyright (c) 2016-present, Facebook, Inc.\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import <Foundation/Foundation.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\ntypedef void(^SRProxyConnectCompletion)(NSError *_Nullable error,\n                                        NSInputStream *_Nullable readStream,\n                                        NSOutputStream *_Nullable writeStream);\n\n@interface SRProxyConnect : NSObject\n\n- (instancetype)initWithURL:(NSURL *)url;\n\n- (void)openNetworkStreamWithCompletion:(SRProxyConnectCompletion)completion;\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/Proxy/SRProxyConnect.m",
    "content": "//\n// Copyright (c) 2016-present, Facebook, Inc.\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import \"SRProxyConnect.h\"\n\n#import \"NSRunLoop+SRWebSocket.h\"\n#import \"SRConstants.h\"\n#import \"SRError.h\"\n#import \"SRLog.h\"\n#import \"SRURLUtilities.h\"\n\n@interface SRProxyConnect() <NSStreamDelegate>\n\n@property (nonatomic, strong) NSURL *url;\n@property (nonatomic, strong) NSInputStream *inputStream;\n@property (nonatomic, strong) NSOutputStream *outputStream;\n\n@end\n\n@implementation SRProxyConnect\n{\n    SRProxyConnectCompletion _completion;\n\n    NSString *_httpProxyHost;\n    uint32_t _httpProxyPort;\n\n    CFHTTPMessageRef _receivedHTTPHeaders;\n\n    NSString *_socksProxyHost;\n    uint32_t _socksProxyPort;\n    NSString *_socksProxyUsername;\n    NSString *_socksProxyPassword;\n\n    BOOL _connectionRequiresSSL;\n\n    NSMutableArray<NSData *> *_inputQueue;\n    dispatch_queue_t _writeQueue;\n}\n\n///--------------------------------------\n#pragma mark - Init\n///--------------------------------------\n\n-(instancetype)initWithURL:(NSURL *)url\n{\n    self = [super init];\n    if (!self) return self;\n\n    _url = url;\n    _connectionRequiresSSL = SRURLRequiresSSL(url);\n\n    _writeQueue = dispatch_queue_create(\"com.facebook.socketrocket.proxyconnect.write\", DISPATCH_QUEUE_SERIAL);\n    _inputQueue = [NSMutableArray arrayWithCapacity:2];\n\n    return self;\n}\n\n- (void)dealloc\n{\n    // If we get deallocated before the socket open finishes - we need to cleanup everything.\n\n    [self.inputStream removeFromRunLoop:[NSRunLoop SR_networkRunLoop] forMode:NSDefaultRunLoopMode];\n    self.inputStream.delegate = nil;\n    [self.inputStream close];\n    self.inputStream = nil;\n\n    self.outputStream.delegate = nil;\n    [self.outputStream close];\n    self.outputStream = nil;\n}\n\n///--------------------------------------\n#pragma mark - Open\n///--------------------------------------\n\n- (void)openNetworkStreamWithCompletion:(SRProxyConnectCompletion)completion\n{\n    _completion = completion;\n    [self _configureProxy];\n}\n\n///--------------------------------------\n#pragma mark - Flow\n///--------------------------------------\n\n- (void)_didConnect\n{\n    SRDebugLog(@\"_didConnect, return streams\");\n    if (_connectionRequiresSSL) {\n        if (_httpProxyHost) {\n            // Must set the real peer name before turning on SSL\n            SRDebugLog(@\"proxy set peer name to real host %@\", self.url.host);\n            [self.outputStream setProperty:self.url.host forKey:@\"_kCFStreamPropertySocketPeerName\"];\n        }\n    }\n    if (_receivedHTTPHeaders) {\n        CFRelease(_receivedHTTPHeaders);\n        _receivedHTTPHeaders = NULL;\n    }\n\n    NSInputStream *inputStream = self.inputStream;\n    NSOutputStream *outputStream = self.outputStream;\n\n    self.inputStream = nil;\n    self.outputStream = nil;\n\n    [inputStream removeFromRunLoop:[NSRunLoop SR_networkRunLoop] forMode:NSDefaultRunLoopMode];\n    inputStream.delegate = nil;\n    outputStream.delegate = nil;\n\n    _completion(nil, inputStream, outputStream);\n}\n\n- (void)_failWithError:(NSError *)error\n{\n    SRDebugLog(@\"_failWithError, return error\");\n    if (!error) {\n        error = SRHTTPErrorWithCodeDescription(500, 2132,@\"Proxy Error\");\n    }\n\n    if (_receivedHTTPHeaders) {\n        CFRelease(_receivedHTTPHeaders);\n        _receivedHTTPHeaders = NULL;\n    }\n\n    self.inputStream.delegate = nil;\n    self.outputStream.delegate = nil;\n\n    [self.inputStream removeFromRunLoop:[NSRunLoop SR_networkRunLoop]\n                                forMode:NSDefaultRunLoopMode];\n    [self.inputStream close];\n    [self.outputStream close];\n    self.inputStream = nil;\n    self.outputStream = nil;\n    _completion(error, nil, nil);\n}\n\n// get proxy setting from device setting\n- (void)_configureProxy\n{\n    SRDebugLog(@\"configureProxy\");\n    NSDictionary *proxySettings = CFBridgingRelease(CFNetworkCopySystemProxySettings());\n\n    // CFNetworkCopyProxiesForURL doesn't understand ws:// or wss://\n    NSURL *httpURL;\n    if (_connectionRequiresSSL) {\n        httpURL = [NSURL URLWithString:[NSString stringWithFormat:@\"https://%@\", _url.host]];\n    } else {\n        httpURL = [NSURL URLWithString:[NSString stringWithFormat:@\"http://%@\", _url.host]];\n    }\n\n    NSArray *proxies = CFBridgingRelease(CFNetworkCopyProxiesForURL((__bridge CFURLRef)httpURL, (__bridge CFDictionaryRef)proxySettings));\n    if (proxies.count == 0) {\n        SRDebugLog(@\"configureProxy no proxies\");\n        [self _openConnection];\n        return;                 // no proxy\n    }\n    NSDictionary *settings = [proxies objectAtIndex:0];\n    NSString *proxyType = settings[(NSString *)kCFProxyTypeKey];\n    if ([proxyType isEqualToString:(NSString *)kCFProxyTypeAutoConfigurationURL]) {\n        NSURL *pacURL = settings[(NSString *)kCFProxyAutoConfigurationURLKey];\n        if (pacURL) {\n            [self _fetchPAC:pacURL withProxySettings:proxySettings];\n            return;\n        }\n    }\n    if ([proxyType isEqualToString:(__bridge NSString *)kCFProxyTypeAutoConfigurationJavaScript]) {\n        NSString *script = settings[(__bridge NSString *)kCFProxyAutoConfigurationJavaScriptKey];\n        if (script) {\n            [self _runPACScript:script withProxySettings:proxySettings];\n            return;\n        }\n    }\n    [self _readProxySettingWithType:proxyType settings:settings];\n\n    [self _openConnection];\n}\n\n- (void)_readProxySettingWithType:(NSString *)proxyType settings:(NSDictionary *)settings\n{\n    if ([proxyType isEqualToString:(NSString *)kCFProxyTypeHTTP] ||\n        [proxyType isEqualToString:(NSString *)kCFProxyTypeHTTPS]) {\n        _httpProxyHost = settings[(NSString *)kCFProxyHostNameKey];\n        NSNumber *portValue = settings[(NSString *)kCFProxyPortNumberKey];\n        if (portValue) {\n            _httpProxyPort = [portValue intValue];\n        }\n    }\n    if ([proxyType isEqualToString:(NSString *)kCFProxyTypeSOCKS]) {\n        _socksProxyHost = settings[(NSString *)kCFProxyHostNameKey];\n        NSNumber *portValue = settings[(NSString *)kCFProxyPortNumberKey];\n        if (portValue)\n            _socksProxyPort = [portValue intValue];\n        _socksProxyUsername = settings[(NSString *)kCFProxyUsernameKey];\n        _socksProxyPassword = settings[(NSString *)kCFProxyPasswordKey];\n    }\n    if (_httpProxyHost) {\n        SRDebugLog(@\"Using http proxy %@:%u\", _httpProxyHost, _httpProxyPort);\n    } else if (_socksProxyHost) {\n        SRDebugLog(@\"Using socks proxy %@:%u\", _socksProxyHost, _socksProxyPort);\n    } else {\n        SRDebugLog(@\"configureProxy no proxies\");\n    }\n}\n\n- (void)_fetchPAC:(NSURL *)PACurl withProxySettings:(NSDictionary *)proxySettings\n{\n    SRDebugLog(@\"SRWebSocket fetchPAC:%@\", PACurl);\n\n    if ([PACurl isFileURL]) {\n        NSError *error = nil;\n        NSString *script = [NSString stringWithContentsOfURL:PACurl\n                                                usedEncoding:NULL\n                                                       error:&error];\n\n        if (error) {\n            [self _openConnection];\n        } else {\n            [self _runPACScript:script withProxySettings:proxySettings];\n        }\n        return;\n    }\n\n    NSString *scheme = [PACurl.scheme lowercaseString];\n    if (![scheme isEqualToString:@\"http\"] && ![scheme isEqualToString:@\"https\"]) {\n        // Don't know how to read data from this URL, we'll have to give up\n        // We'll simply assume no proxies, and start the request as normal\n        [self _openConnection];\n        return;\n    }\n    __weak typeof(self) wself = self;\n    NSURLRequest *request = [NSURLRequest requestWithURL:PACurl];\n    NSURLSession *session = [NSURLSession sharedSession];\n    [[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n        __strong typeof(wself) sself = wself;\n        if (!error) {\n            NSString *script = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];\n            [sself _runPACScript:script withProxySettings:proxySettings];\n        } else {\n            [sself _openConnection];\n        }\n    }] resume];\n}\n\n- (void)_runPACScript:(NSString *)script withProxySettings:(NSDictionary *)proxySettings\n{\n    if (!script) {\n        [self _openConnection];\n        return;\n    }\n    SRDebugLog(@\"runPACScript\");\n    // From: http://developer.apple.com/samplecode/CFProxySupportTool/listing1.html\n    // Work around <rdar://problem/5530166>.  This dummy call to\n    // CFNetworkCopyProxiesForURL initialise some state within CFNetwork\n    // that is required by CFNetworkCopyProxiesForAutoConfigurationScript.\n    CFBridgingRelease(CFNetworkCopyProxiesForURL((__bridge CFURLRef)_url, (__bridge CFDictionaryRef)proxySettings));\n\n    // Obtain the list of proxies by running the autoconfiguration script\n    CFErrorRef err = NULL;\n\n    // CFNetworkCopyProxiesForAutoConfigurationScript doesn't understand ws:// or wss://\n    NSURL *httpURL;\n    if (_connectionRequiresSSL)\n        httpURL = [NSURL URLWithString:[NSString stringWithFormat:@\"https://%@\", _url.host]];\n    else\n        httpURL = [NSURL URLWithString:[NSString stringWithFormat:@\"http://%@\", _url.host]];\n\n    NSArray *proxies = CFBridgingRelease(CFNetworkCopyProxiesForAutoConfigurationScript((__bridge CFStringRef)script,(__bridge CFURLRef)httpURL, &err));\n    if (!err && [proxies count] > 0) {\n        NSDictionary *settings = [proxies objectAtIndex:0];\n        NSString *proxyType = settings[(NSString *)kCFProxyTypeKey];\n        [self _readProxySettingWithType:proxyType settings:settings];\n    }\n    [self _openConnection];\n}\n\n- (void)_openConnection\n{\n    [self _initializeStreams];\n\n    [self.inputStream scheduleInRunLoop:[NSRunLoop SR_networkRunLoop]\n                                forMode:NSDefaultRunLoopMode];\n    //[self.outputStream scheduleInRunLoop:[NSRunLoop SR_networkRunLoop]\n    //                           forMode:NSDefaultRunLoopMode];\n    [self.outputStream open];\n    [self.inputStream open];\n}\n\n- (void)_initializeStreams\n{\n    assert(_url.port.unsignedIntValue <= UINT32_MAX);\n    uint32_t port = _url.port.unsignedIntValue;\n    if (port == 0) {\n        port = (_connectionRequiresSSL ? 443 : 80);\n    }\n    NSString *host = _url.host;\n\n    if (_httpProxyHost) {\n        host = _httpProxyHost;\n        port = (_httpProxyPort ?: 80);\n    }\n\n    CFReadStreamRef readStream = NULL;\n    CFWriteStreamRef writeStream = NULL;\n\n    SRDebugLog(@\"ProxyConnect connect stream to %@:%u\", host, port);\n    CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)host, port, &readStream, &writeStream);\n\n    self.outputStream = CFBridgingRelease(writeStream);\n    self.inputStream = CFBridgingRelease(readStream);\n\n    if (_socksProxyHost) {\n        SRDebugLog(@\"ProxyConnect set sock property stream to %@:%u user %@ password %@\", _socksProxyHost, _socksProxyPort, _socksProxyUsername, _socksProxyPassword);\n        NSMutableDictionary *settings = [NSMutableDictionary dictionaryWithCapacity:4];\n        settings[NSStreamSOCKSProxyHostKey] = _socksProxyHost;\n        if (_socksProxyPort) {\n            settings[NSStreamSOCKSProxyPortKey] = @(_socksProxyPort);\n        }\n        if (_socksProxyUsername) {\n            settings[NSStreamSOCKSProxyUserKey] = _socksProxyUsername;\n        }\n        if (_socksProxyPassword) {\n            settings[NSStreamSOCKSProxyPasswordKey] = _socksProxyPassword;\n        }\n        [self.inputStream setProperty:settings forKey:NSStreamSOCKSProxyConfigurationKey];\n        [self.outputStream setProperty:settings forKey:NSStreamSOCKSProxyConfigurationKey];\n    }\n    self.inputStream.delegate = self;\n    self.outputStream.delegate = self;\n}\n\n- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode\n{\n    SRDebugLog(@\"stream handleEvent %u\", eventCode);\n    switch (eventCode) {\n        case NSStreamEventOpenCompleted: {\n            if (aStream == self.inputStream) {\n                if (_httpProxyHost) {\n                    [self _proxyDidConnect];\n                } else {\n                    [self _didConnect];\n                }\n            }\n        }  break;\n        case NSStreamEventErrorOccurred: {\n            [self _failWithError:aStream.streamError];\n        } break;\n        case NSStreamEventEndEncountered: {\n            [self _failWithError:aStream.streamError];\n        } break;\n        case NSStreamEventHasBytesAvailable: {\n            if (aStream == _inputStream) {\n                [self _processInputStream];\n            }\n        } break;\n        case NSStreamEventHasSpaceAvailable:\n        case NSStreamEventNone:\n            SRDebugLog(@\"(default)  %@\", aStream);\n            break;\n    }\n}\n\n- (void)_proxyDidConnect\n{\n    SRDebugLog(@\"Proxy Connected\");\n    uint32_t port = _url.port.unsignedIntValue;\n    if (port == 0) {\n        port = (_connectionRequiresSSL ? 443 : 80);\n    }\n    // Send HTTP CONNECT Request\n    NSString *connectRequestStr = [NSString stringWithFormat:@\"CONNECT %@:%u HTTP/1.1\\r\\nHost: %@\\r\\nConnection: keep-alive\\r\\nProxy-Connection: keep-alive\\r\\n\\r\\n\", _url.host, port, _url.host];\n\n    NSData *message = [connectRequestStr dataUsingEncoding:NSUTF8StringEncoding];\n    SRDebugLog(@\"Proxy sending %@\", connectRequestStr);\n\n    [self _writeData:message];\n}\n\n///handles the incoming bytes and sending them to the proper processing method\n- (void)_processInputStream\n{\n    NSMutableData *buf = [NSMutableData dataWithCapacity:SRDefaultBufferSize()];\n    uint8_t *buffer = buf.mutableBytes;\n    NSInteger length = [_inputStream read:buffer maxLength:SRDefaultBufferSize()];\n\n    if (length <= 0) {\n        return;\n    }\n\n    BOOL process = (_inputQueue.count == 0);\n    [_inputQueue addObject:[NSData dataWithBytes:buffer length:length]];\n\n    if (process) {\n        [self _dequeueInput];\n    }\n}\n\n// dequeue the incoming input so it is processed in order\n\n- (void)_dequeueInput\n{\n    while (_inputQueue.count > 0) {\n        NSData *data = _inputQueue.firstObject;\n        [_inputQueue removeObjectAtIndex:0];\n\n        // No need to process any data further, we got the full header data.\n        if ([self _proxyProcessHTTPResponseWithData:data]) {\n            break;\n        }\n    }\n}\n//handle checking the proxy  connection status\n- (BOOL)_proxyProcessHTTPResponseWithData:(NSData *)data\n{\n    if (_receivedHTTPHeaders == NULL) {\n        _receivedHTTPHeaders = CFHTTPMessageCreateEmpty(NULL, NO);\n    }\n\n    CFHTTPMessageAppendBytes(_receivedHTTPHeaders, (const UInt8 *)data.bytes, data.length);\n    if (CFHTTPMessageIsHeaderComplete(_receivedHTTPHeaders)) {\n        SRDebugLog(@\"Finished reading headers %@\", CFBridgingRelease(CFHTTPMessageCopyAllHeaderFields(_receivedHTTPHeaders)));\n        [self _proxyHTTPHeadersDidFinish];\n        return YES;\n    }\n\n    return NO;\n}\n\n- (void)_proxyHTTPHeadersDidFinish\n{\n    NSInteger responseCode = CFHTTPMessageGetResponseStatusCode(_receivedHTTPHeaders);\n\n    if (responseCode >= 299) {\n        SRDebugLog(@\"Connect to Proxy Request failed with response code %d\", responseCode);\n        NSError *error = SRHTTPErrorWithCodeDescription(responseCode, 2132,\n                                                        [NSString stringWithFormat:@\"Received bad response code from proxy server: %d.\",\n                                                         (int)responseCode]);\n        [self _failWithError:error];\n        return;\n    }\n    SRDebugLog(@\"proxy connect return %d, call socket connect\", responseCode);\n    [self _didConnect];\n}\n\nstatic NSTimeInterval const SRProxyConnectWriteTimeout = 5.0;\n\n- (void)_writeData:(NSData *)data\n{\n    const uint8_t * bytes = data.bytes;\n    __block NSInteger timeout = (NSInteger)(SRProxyConnectWriteTimeout * 1000000); // wait timeout before giving up\n    __weak typeof(self) wself = self;\n    dispatch_async(_writeQueue, ^{\n        __strong typeof(wself) sself = self;\n        if (!sself) {\n            return;\n        }\n        NSOutputStream *outStream = sself.outputStream;\n        if (!outStream) {\n            return;\n        }\n        while (![outStream hasSpaceAvailable]) {\n            usleep(100); //wait until the socket is ready\n            timeout -= 100;\n            if (timeout < 0) {\n                NSError *error = SRHTTPErrorWithCodeDescription(408, 2132, @\"Proxy timeout\");\n                [sself _failWithError:error];\n            } else if (outStream.streamError != nil) {\n                [sself _failWithError:outStream.streamError];\n            }\n        }\n        [outStream write:bytes maxLength:data.length];\n    });\n}\n\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/RunLoop/SRRunLoopThread.h",
    "content": "//\n// Copyright 2012 Square Inc.\n// Portions Copyright (c) 2016-present, Facebook, Inc.\n//\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import <Foundation/Foundation.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface SRRunLoopThread : NSThread\n\n@property (nonatomic, strong, readonly) NSRunLoop *runLoop;\n\n+ (instancetype)sharedThread;\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/RunLoop/SRRunLoopThread.m",
    "content": "//\n// Copyright 2012 Square Inc.\n// Portions Copyright (c) 2016-present, Facebook, Inc.\n//\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import \"SRRunLoopThread.h\"\n\n@interface SRRunLoopThread ()\n{\n    dispatch_group_t _waitGroup;\n}\n\n@property (nonatomic, strong, readwrite) NSRunLoop *runLoop;\n\n@end\n\n@implementation SRRunLoopThread\n\n+ (instancetype)sharedThread\n{\n    static SRRunLoopThread *thread;\n    static dispatch_once_t onceToken;\n    dispatch_once(&onceToken, ^{\n        thread = [[SRRunLoopThread alloc] init];\n        thread.name = @\"com.facebook.SocketRocket.NetworkThread\";\n        thread.qualityOfService = NSQualityOfServiceUserInitiated;\n        [thread start];\n    });\n    return thread;\n}\n\n- (instancetype)init\n{\n    self = [super init];\n    if (self) {\n        _waitGroup = dispatch_group_create();\n        dispatch_group_enter(_waitGroup);\n    }\n    return self;\n}\n\n- (void)main\n{\n    @autoreleasepool {\n        _runLoop = [NSRunLoop currentRunLoop];\n        dispatch_group_leave(_waitGroup);\n\n        // Add an empty run loop source to prevent runloop from spinning.\n        CFRunLoopSourceContext sourceCtx = {\n            .version = 0,\n            .info = NULL,\n            .retain = NULL,\n            .release = NULL,\n            .copyDescription = NULL,\n            .equal = NULL,\n            .hash = NULL,\n            .schedule = NULL,\n            .cancel = NULL,\n            .perform = NULL\n        };\n        CFRunLoopSourceRef source = CFRunLoopSourceCreate(NULL, 0, &sourceCtx);\n        CFRunLoopAddSource(CFRunLoopGetCurrent(), source, kCFRunLoopDefaultMode);\n        CFRelease(source);\n\n        while ([_runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]) {\n\n        }\n        assert(NO);\n    }\n}\n\n- (NSRunLoop *)runLoop\n{\n    dispatch_group_wait(_waitGroup, DISPATCH_TIME_FOREVER);\n    return _runLoop;\n}\n\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/SRConstants.h",
    "content": "//\n// Copyright (c) 2016-present, Facebook, Inc.\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import <Foundation/Foundation.h>\n\ntypedef NS_ENUM(uint8_t, SROpCode)\n{\n    SROpCodeTextFrame = 0x1,\n    SROpCodeBinaryFrame = 0x2,\n    // 3-7 reserved.\n    SROpCodeConnectionClose = 0x8,\n    SROpCodePing = 0x9,\n    SROpCodePong = 0xA,\n    // B-F reserved.\n};\n\n/**\n Default buffer size that is used for reading/writing to streams.\n */\nextern size_t SRDefaultBufferSize(void);\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/SRConstants.m",
    "content": "//\n// Copyright (c) 2016-present, Facebook, Inc.\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import \"SRConstants.h\"\n\nsize_t SRDefaultBufferSize(void) {\n    static size_t size;\n    static dispatch_once_t onceToken;\n    dispatch_once(&onceToken, ^{\n        size = getpagesize();\n    });\n    return size;\n}\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/Security/SRPinningSecurityPolicy.h",
    "content": "//\n// Copyright (c) 2016-present, Facebook, Inc.\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import <Foundation/Foundation.h>\n\n#import <SocketRocket/SRSecurityPolicy.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\n/**\n * NOTE: While publicly, SocketRocket does not support configuring the security policy with pinned certificates,\n * it is still possible to manually construct a security policy of this class. If you do this, note that you may\n * be open to MitM attacks, and we will not support any issues you may have. Dive at your own risk.\n */\n@interface SRPinningSecurityPolicy : SRSecurityPolicy\n\n- (instancetype)initWithCertificates:(NSArray *)pinnedCertificates;\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/Security/SRPinningSecurityPolicy.m",
    "content": "//\n// Copyright (c) 2016-present, Facebook, Inc.\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import \"SRPinningSecurityPolicy.h\"\n\n#import <Foundation/Foundation.h>\n\n#import \"SRLog.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface SRPinningSecurityPolicy ()\n\n@property (nonatomic, copy, readonly) NSArray *pinnedCertificates;\n\n@end\n\n@implementation SRPinningSecurityPolicy\n\n- (instancetype)initWithCertificates:(NSArray *)pinnedCertificates\n{\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wdeprecated\"\n    // Do not validate certificate chain since we're pinning to specific certificates.\n    self = [super initWithCertificateChainValidationEnabled:NO];\n#pragma clang diagnostic pop\n\n    if (!self) { return self; }\n\n    if (pinnedCertificates.count == 0) {\n        @throw [NSException exceptionWithName:@\"Creating security policy failed.\"\n                                       reason:@\"Must specify at least one certificate when creating a pinning policy.\"\n                                     userInfo:nil];\n    }\n    _pinnedCertificates = [pinnedCertificates copy];\n\n    return self;\n}\n\n- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust forDomain:(NSString *)domain\n{\n    SRDebugLog(@\"Pinned cert count: %d\", self.pinnedCertificates.count);\n    NSUInteger requiredCertCount = self.pinnedCertificates.count;\n\n    NSUInteger validatedCertCount = 0;\n    CFIndex serverCertCount = SecTrustGetCertificateCount(serverTrust);\n    for (CFIndex i = 0; i < serverCertCount; i++) {\n        SecCertificateRef cert = SecTrustGetCertificateAtIndex(serverTrust, i);\n        NSData *data = CFBridgingRelease(SecCertificateCopyData(cert));\n        for (id ref in self.pinnedCertificates) {\n            SecCertificateRef trustedCert = (__bridge SecCertificateRef)ref;\n            // TODO: (nlutsenko) Add caching, so we don't copy the data for every pinned cert all the time.\n            NSData *trustedCertData = CFBridgingRelease(SecCertificateCopyData(trustedCert));\n            if ([trustedCertData isEqualToData:data]) {\n                validatedCertCount++;\n                break;\n            }\n        }\n    }\n    return (requiredCertCount == validatedCertCount);\n}\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRError.h",
    "content": "//\n// Copyright (c) 2016-present, Facebook, Inc.\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import <Foundation/Foundation.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\nextern NSError *SRErrorWithDomainCodeDescription(NSString *domain, NSInteger code, NSString *description);\nextern NSError *SRErrorWithCodeDescription(NSInteger code, NSString *description);\nextern NSError *SRErrorWithCodeDescriptionUnderlyingError(NSInteger code, NSString *description, NSError *underlyingError);\n\nextern NSError *SRHTTPErrorWithCodeDescription(NSInteger httpCode, NSInteger errorCode, NSString *description);\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRError.m",
    "content": "//\n// Copyright (c) 2016-present, Facebook, Inc.\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import \"SRError.h\"\n\n#import \"SRWebSocket.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n\nNSError *SRErrorWithDomainCodeDescription(NSString *domain, NSInteger code, NSString *description)\n{\n    return [NSError errorWithDomain:domain code:code userInfo:@{ NSLocalizedDescriptionKey: description }];\n}\n\nNSError *SRErrorWithCodeDescription(NSInteger code, NSString *description)\n{\n    return SRErrorWithDomainCodeDescription(SRWebSocketErrorDomain, code, description);\n}\n\nNSError *SRErrorWithCodeDescriptionUnderlyingError(NSInteger code, NSString *description, NSError *underlyingError)\n{\n    return [NSError errorWithDomain:SRWebSocketErrorDomain\n                               code:code\n                           userInfo:@{ NSLocalizedDescriptionKey: description,\n                                       NSUnderlyingErrorKey: underlyingError }];\n}\n\nNSError *SRHTTPErrorWithCodeDescription(NSInteger httpCode, NSInteger errorCode, NSString *description)\n{\n    return [NSError errorWithDomain:SRWebSocketErrorDomain\n                               code:errorCode\n                           userInfo:@{ NSLocalizedDescriptionKey: description,\n                                       SRHTTPResponseErrorKey: @(httpCode) }];\n}\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRHTTPConnectMessage.h",
    "content": "//\n// Copyright (c) 2016-present, Facebook, Inc.\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import <Foundation/Foundation.h>\n#import <CFNetwork/CFNetwork.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\nextern CFHTTPMessageRef SRHTTPConnectMessageCreate(NSURLRequest *request,\n                                                   NSString *securityKey,\n                                                   uint8_t webSocketProtocolVersion,\n                                                   NSArray<NSHTTPCookie *> *_Nullable cookies,\n                                                   NSArray<NSString *> *_Nullable requestedProtocols);\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRHTTPConnectMessage.m",
    "content": "//\n// Copyright (c) 2016-present, Facebook, Inc.\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import \"SRHTTPConnectMessage.h\"\n\n#import \"SRURLUtilities.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n\nstatic NSString *_SRHTTPConnectMessageHost(NSURL *url)\n{\n    NSString *host = url.host;\n    if (url.port) {\n        host = [host stringByAppendingFormat:@\":%@\", url.port];\n    }\n    return host;\n}\n\nCFHTTPMessageRef SRHTTPConnectMessageCreate(NSURLRequest *request,\n                                            NSString *securityKey,\n                                            uint8_t webSocketProtocolVersion,\n                                            NSArray<NSHTTPCookie *> *_Nullable cookies,\n                                            NSArray<NSString *> *_Nullable requestedProtocols)\n{\n    NSURL *url = request.URL;\n\n    CFHTTPMessageRef message = CFHTTPMessageCreateRequest(NULL, (__bridge CFStringRef)request.HTTPMethod, (__bridge CFURLRef)url, kCFHTTPVersion1_1);\n\n    // Set host first so it defaults\n    CFHTTPMessageSetHeaderFieldValue(message, CFSTR(\"Host\"), (__bridge CFStringRef)_SRHTTPConnectMessageHost(url));\n\n    // Apply cookies if any have been provided\n    if (cookies) {\n        NSDictionary<NSString *, NSString *> *messageCookies = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies];\n        [messageCookies enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, NSString * _Nonnull obj, BOOL * _Nonnull stop) {\n            if (key.length && obj.length) {\n                CFHTTPMessageSetHeaderFieldValue(message, (__bridge CFStringRef)key, (__bridge CFStringRef)obj);\n            }\n        }];\n    }\n\n    // set header for http basic auth\n    NSString *basicAuthorizationString = SRBasicAuthorizationHeaderFromURL(url);\n    if (basicAuthorizationString) {\n        CFHTTPMessageSetHeaderFieldValue(message, CFSTR(\"Authorization\"), (__bridge CFStringRef)basicAuthorizationString);\n    }\n\n    CFHTTPMessageSetHeaderFieldValue(message, CFSTR(\"Upgrade\"), CFSTR(\"websocket\"));\n    CFHTTPMessageSetHeaderFieldValue(message, CFSTR(\"Connection\"), CFSTR(\"Upgrade\"));\n    CFHTTPMessageSetHeaderFieldValue(message, CFSTR(\"Sec-WebSocket-Key\"), (__bridge CFStringRef)securityKey);\n    CFHTTPMessageSetHeaderFieldValue(message, CFSTR(\"Sec-WebSocket-Version\"), (__bridge CFStringRef)@(webSocketProtocolVersion).stringValue);\n\n    CFHTTPMessageSetHeaderFieldValue(message, CFSTR(\"Origin\"), (__bridge CFStringRef)SRURLOrigin(url));\n\n    if (requestedProtocols.count) {\n        CFHTTPMessageSetHeaderFieldValue(message, CFSTR(\"Sec-WebSocket-Protocol\"),\n                                         (__bridge CFStringRef)[requestedProtocols componentsJoinedByString:@\", \"]);\n    }\n\n    [request.allHTTPHeaderFields enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {\n        CFHTTPMessageSetHeaderFieldValue(message, (__bridge CFStringRef)key, (__bridge CFStringRef)obj);\n    }];\n\n    return message;\n}\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRHash.h",
    "content": "//\n// Copyright (c) 2016-present, Facebook, Inc.\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import <Foundation/Foundation.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\nextern NSData *SRSHA1HashFromString(NSString *string);\nextern NSData *SRSHA1HashFromBytes(const char *bytes, size_t length);\n\nextern NSString *SRBase64EncodedStringFromData(NSData *data);\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRHash.m",
    "content": "//\n// Copyright (c) 2016-present, Facebook, Inc.\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import \"SRHash.h\"\n\n#import <CommonCrypto/CommonDigest.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\nNSData *SRSHA1HashFromString(NSString *string)\n{\n    size_t length = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding];\n    return SRSHA1HashFromBytes(string.UTF8String, length);\n}\n\nNSData *SRSHA1HashFromBytes(const char *bytes, size_t length)\n{\n    uint8_t outputLength = CC_SHA1_DIGEST_LENGTH;\n    unsigned char output[outputLength];\n    CC_SHA1(bytes, (CC_LONG)length, output);\n\n    return [NSData dataWithBytes:output length:outputLength];\n}\n\nNSString *SRBase64EncodedStringFromData(NSData *data)\n{\n    if ([data respondsToSelector:@selector(base64EncodedStringWithOptions:)]) {\n        return [data base64EncodedStringWithOptions:0];\n    }\n\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wdeprecated-declarations\"\n    return [data base64Encoding];\n#pragma clang diagnostic pop\n}\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRLog.h",
    "content": "//\n// Copyright (c) 2016-present, Facebook, Inc.\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import <Foundation/Foundation.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\n// Uncomment this line to enable debug logging\n//#define SR_DEBUG_LOG_ENABLED\n\nextern void SRErrorLog(NSString *format, ...);\nextern void SRDebugLog(NSString *format, ...);\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRLog.m",
    "content": "//\n// Copyright (c) 2016-present, Facebook, Inc.\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import \"SRLog.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n\nextern void SRErrorLog(NSString *format, ...)\n{\n    __block va_list arg_list;\n    va_start (arg_list, format);\n\n    NSString *formattedString = [[NSString alloc] initWithFormat:format arguments:arg_list];\n\n    va_end(arg_list);\n\n    NSLog(@\"[SocketRocket] %@\", formattedString);\n}\n\nextern void SRDebugLog(NSString *format, ...)\n{\n#ifdef SR_DEBUG_LOG_ENABLED\n    SRErrorLog(tag, format);\n#endif\n}\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRMutex.h",
    "content": "//\n// Copyright (c) 2016-present, Facebook, Inc.\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import <Foundation/Foundation.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\ntypedef __attribute__((capability(\"mutex\"))) pthread_mutex_t *SRMutex;\n\nextern SRMutex SRMutexInitRecursive(void);\nextern void SRMutexDestroy(SRMutex mutex);\n\nextern void SRMutexLock(SRMutex mutex) __attribute__((acquire_capability(mutex)));\nextern void SRMutexUnlock(SRMutex mutex) __attribute__((release_capability(mutex)));\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRMutex.m",
    "content": "//\n// Copyright (c) 2016-present, Facebook, Inc.\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import \"SRMutex.h\"\n\n#import <pthread/pthread.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\nSRMutex SRMutexInitRecursive(void)\n{\n    pthread_mutex_t *mutex = malloc(sizeof(pthread_mutex_t));\n    pthread_mutexattr_t attributes;\n\n    pthread_mutexattr_init(&attributes);\n    pthread_mutexattr_settype(&attributes, PTHREAD_MUTEX_RECURSIVE);\n    pthread_mutex_init(mutex, &attributes);\n    pthread_mutexattr_destroy(&attributes);\n\n    return mutex;\n}\n\nvoid SRMutexDestroy(SRMutex mutex)\n{\n    pthread_mutex_destroy(mutex);\n    free(mutex);\n}\n\n__attribute__((no_thread_safety_analysis))\nvoid SRMutexLock(SRMutex mutex)\n{\n    pthread_mutex_lock(mutex);\n}\n\n__attribute__((no_thread_safety_analysis))\nvoid SRMutexUnlock(SRMutex mutex)\n{\n    pthread_mutex_unlock(mutex);\n}\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRRandom.h",
    "content": "//\n// Copyright (c) 2016-present, Facebook, Inc.\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import <Foundation/Foundation.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\nextern NSData *SRRandomData(NSUInteger length);\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRRandom.m",
    "content": "//\n// Copyright (c) 2016-present, Facebook, Inc.\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import \"SRRandom.h\"\n\n#import <Security/SecRandom.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\nNSData *SRRandomData(NSUInteger length)\n{\n    NSMutableData *_Nullable data = [NSMutableData dataWithLength:length];\n    if (data == nil) {\n        [NSException raise:NSInternalInconsistencyException format:@\"Failed to allocate random data\"];\n    }\n    \n    int result = SecRandomCopyBytes(kSecRandomDefault, data.length, data.mutableBytes);\n    if (result != errSecSuccess) {\n        [NSException raise:NSInternalInconsistencyException format:@\"Failed to generate random bytes with OSStatus: %d\", result];\n    }\n    return data;\n}\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRSIMDHelpers.h",
    "content": "//\n// Copyright (c) 2016-present, Facebook, Inc.\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import <Foundation/Foundation.h>\n\n/**\n Unmask bytes using XOR via SIMD.\n\n @param bytes    The bytes to unmask.\n @param length   The number of bytes to unmask.\n @param maskKey The mask to XOR with MUST be of length sizeof(uint32_t).\n */\nvoid SRMaskBytesSIMD(uint8_t *bytes, size_t length, uint8_t *maskKey);\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRSIMDHelpers.m",
    "content": "//\n// Copyright (c) 2016-present, Facebook, Inc.\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import \"SRSIMDHelpers.h\"\n\ntypedef uint8_t uint8x32_t __attribute__((vector_size(32)));\n\nstatic void SRMaskBytesManual(uint8_t *bytes, size_t length, uint8_t *maskKey) {\n    for (size_t i = 0; i < length; i++) {\n        bytes[i] = bytes[i] ^ maskKey[i % sizeof(uint32_t)];\n    }\n}\n\n/**\n Right-shift the elements of a vector, circularly.\n\n @param vector The vector to circular shift.\n @param by     The number of elements to shift by.\n\n @return A shifted vector.\n */\nstatic uint8x32_t SRShiftVector(uint8x32_t vector, size_t by) {\n    uint8x32_t vectorCopy = vector;\n    by = by % _Alignof(uint8x32_t);\n\n    uint8_t *vectorPointer = (uint8_t *)&vector;\n    uint8_t *vectorCopyPointer = (uint8_t *)&vectorCopy;\n\n    memmove(vectorPointer + by, vectorPointer, sizeof(vector) - by);\n    memcpy(vectorPointer, vectorCopyPointer + (sizeof(vector) - by), by);\n\n    return vector;\n}\n\nvoid SRMaskBytesSIMD(uint8_t *bytes, size_t length, uint8_t *maskKey) {\n    size_t alignmentBytes = _Alignof(uint8x32_t) - ((uintptr_t)bytes % _Alignof(uint8x32_t));\n    if (alignmentBytes == _Alignof(uint8x32_t)) {\n        alignmentBytes = 0;\n    }\n\n    // If the number of bytes that can be processed after aligning is\n    // less than the number of bytes we can put into a vector,\n    // then there's no work to do with SIMD, just call the manual version.\n    if (alignmentBytes > length || (length - alignmentBytes) < sizeof(uint8x32_t)) {\n        SRMaskBytesManual(bytes, length, maskKey);\n        return;\n    }\n\n    size_t vectorLength = (length - alignmentBytes) / sizeof(uint8x32_t);\n    size_t manualStartOffset = alignmentBytes + (vectorLength * sizeof(uint8x32_t));\n    size_t manualLength = length - manualStartOffset;\n\n    uint8x32_t *vector = (uint8x32_t *)(bytes + alignmentBytes);\n    uint8x32_t maskVector = { };\n\n    memset_pattern4(&maskVector, maskKey, sizeof(uint8x32_t));\n    maskVector = SRShiftVector(maskVector, alignmentBytes);\n\n    SRMaskBytesManual(bytes, alignmentBytes, maskKey);\n\n    for (size_t vectorIndex = 0; vectorIndex < vectorLength; vectorIndex++) {\n        vector[vectorIndex] = vector[vectorIndex] ^ maskVector;\n    }\n\n    // Use the shifted mask for the final manual part.\n    SRMaskBytesManual(bytes + manualStartOffset, manualLength, (uint8_t *) &maskVector);\n}\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRURLUtilities.h",
    "content": "//\n// Copyright (c) 2016-present, Facebook, Inc.\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import <Foundation/Foundation.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\n// The origin isn't really applicable for a native application.\n// So instead, just map ws -> http and wss -> https.\nextern NSString *SRURLOrigin(NSURL *url);\n\nextern BOOL SRURLRequiresSSL(NSURL *url);\n\n// Extracts `user` and `password` from url (if available) into `Basic base64(user:password)`.\nextern NSString *_Nullable SRBasicAuthorizationHeaderFromURL(NSURL *url);\n\n// Returns a valid value for `NSStreamNetworkServiceType` or `nil`.\nextern NSString *_Nullable SRStreamNetworkServiceTypeFromURLRequest(NSURLRequest *request);\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRURLUtilities.m",
    "content": "//\n// Copyright (c) 2016-present, Facebook, Inc.\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import \"SRURLUtilities.h\"\n\n#import \"SRHash.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n\nNSString *SRURLOrigin(NSURL *url)\n{\n    NSMutableString *origin = [NSMutableString string];\n\n    NSString *scheme = url.scheme.lowercaseString;\n    if ([scheme isEqualToString:@\"wss\"]) {\n        scheme = @\"https\";\n    } else if ([scheme isEqualToString:@\"ws\"]) {\n        scheme = @\"http\";\n    }\n    [origin appendFormat:@\"%@://%@\", scheme, url.host];\n\n    NSNumber *port = url.port;\n    BOOL portIsDefault = (!port ||\n                          ([scheme isEqualToString:@\"http\"] && port.integerValue == 80) ||\n                          ([scheme isEqualToString:@\"https\"] && port.integerValue == 443));\n    if (!portIsDefault) {\n        [origin appendFormat:@\":%@\", port.stringValue];\n    }\n    return origin;\n}\n\nextern BOOL SRURLRequiresSSL(NSURL *url)\n{\n    NSString *scheme = url.scheme.lowercaseString;\n    return ([scheme isEqualToString:@\"wss\"] || [scheme isEqualToString:@\"https\"]);\n}\n\nextern NSString *_Nullable SRBasicAuthorizationHeaderFromURL(NSURL *url)\n{\n    if (!url.user || !url.password) {\n        return nil;\n    }\n\n    NSData *data = [[NSString stringWithFormat:@\"%@:%@\", url.user, url.password] dataUsingEncoding:NSUTF8StringEncoding];\n    return [NSString stringWithFormat:@\"Basic %@\", SRBase64EncodedStringFromData(data)];\n}\n\nextern NSString *_Nullable SRStreamNetworkServiceTypeFromURLRequest(NSURLRequest *request)\n{\n    NSString *networkServiceType = nil;\n    switch (request.networkServiceType) {\n        case NSURLNetworkServiceTypeDefault:\n        case NSURLNetworkServiceTypeResponsiveData:\n        case NSURLNetworkServiceTypeAVStreaming:\n        case NSURLNetworkServiceTypeResponsiveAV:\n            break;\n        case NSURLNetworkServiceTypeVoIP:\n            networkServiceType = NSStreamNetworkServiceTypeVoIP;\n            break;\n        case NSURLNetworkServiceTypeVideo:\n            networkServiceType = NSStreamNetworkServiceTypeVideo;\n            break;\n        case NSURLNetworkServiceTypeBackground:\n            networkServiceType = NSStreamNetworkServiceTypeBackground;\n            break;\n        case NSURLNetworkServiceTypeVoice:\n            networkServiceType = NSStreamNetworkServiceTypeVoice;\n            break;\n#if (__MAC_OS_X_VERSION_MAX_ALLOWED >= 101200 || __IPHONE_OS_VERSION_MAX_ALLOWED >= 100000 || __TV_OS_VERSION_MAX_ALLOWED >= 100000 || __WATCH_OS_VERSION_MAX_ALLOWED >= 30000)\n        case NSURLNetworkServiceTypeCallSignaling: {\n            if (@available(iOS 10.0, tvOS 10.0, macOS 10.12, *)) {\n                networkServiceType = NSStreamNetworkServiceTypeCallSignaling;\n            }\n        } break;\n#endif\n    }\n    return networkServiceType;\n}\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/NSRunLoop+SRWebSocket.h",
    "content": "//\n// Copyright 2012 Square Inc.\n// Portions Copyright (c) 2016-present, Facebook, Inc.\n//\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import <Foundation/Foundation.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface NSRunLoop (SRWebSocket)\n\n/**\n Default run loop that will be used to schedule all instances of `SRWebSocket`.\n\n @return An instance of `NSRunLoop`.\n */\n+ (NSRunLoop *)SR_networkRunLoop;\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/NSRunLoop+SRWebSocket.m",
    "content": "//\n// Copyright 2012 Square Inc.\n// Portions Copyright (c) 2016-present, Facebook, Inc.\n//\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import \"NSRunLoop+SRWebSocket.h\"\n#import \"NSRunLoop+SRWebSocketPrivate.h\"\n\n#import \"SRRunLoopThread.h\"\n\n// Required for object file to always be linked.\nvoid import_NSRunLoop_SRWebSocket(void) { }\n\n@implementation NSRunLoop (SRWebSocket)\n\n+ (NSRunLoop *)SR_networkRunLoop\n{\n    return [SRRunLoopThread sharedThread].runLoop;\n}\n\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/NSURLRequest+SRWebSocket.h",
    "content": "//\n// Copyright 2012 Square Inc.\n// Portions Copyright (c) 2016-present, Facebook, Inc.\n//\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import <Foundation/Foundation.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface NSURLRequest (SRWebSocket)\n\n/**\n An array of pinned `SecCertificateRef` SSL certificates that `SRWebSocket` will use for validation.\n */\n@property (nullable, nonatomic, copy, readonly) NSArray *SR_SSLPinnedCertificates\n    DEPRECATED_MSG_ATTRIBUTE(\"Using pinned certificates is neither secure nor supported in SocketRocket, \"\n                             \"and leads to security issues. Please use a proper, trust chain validated certificate.\");\n\n@end\n\n@interface NSMutableURLRequest (SRWebSocket)\n\n/**\n An array of pinned `SecCertificateRef` SSL certificates that `SRWebSocket` will use for validation.\n */\n@property (nullable, nonatomic, copy) NSArray *SR_SSLPinnedCertificates\n    DEPRECATED_MSG_ATTRIBUTE(\"Using pinned certificates is neither secure nor supported in SocketRocket, \"\n                             \"and leads to security issues. Please use a proper, trust chain validated certificate.\");\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/NSURLRequest+SRWebSocket.m",
    "content": "//\n// Copyright 2012 Square Inc.\n// Portions Copyright (c) 2016-present, Facebook, Inc.\n//\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import \"NSURLRequest+SRWebSocket.h\"\n#import \"NSURLRequest+SRWebSocketPrivate.h\"\n\n// Required for object file to always be linked.\nvoid import_NSURLRequest_SRWebSocket(void) { }\n\nNS_ASSUME_NONNULL_BEGIN\n\nstatic NSString *const SRSSLPinnnedCertificatesKey = @\"SocketRocket_SSLPinnedCertificates\";\n\n@implementation NSURLRequest (SRWebSocket)\n\n- (nullable NSArray *)SR_SSLPinnedCertificates\n{\n    return nil;\n}\n\n@end\n\n@implementation NSMutableURLRequest (SRWebSocket)\n\n- (void)setSR_SSLPinnedCertificates:(nullable NSArray *)SR_SSLPinnedCertificates\n{\n    [NSException raise:NSInvalidArgumentException\n                format:@\"Using pinned certificates is neither secure nor supported in SocketRocket, \"\n                        \"and leads to security issues. Please use a proper, trust chain validated certificate.\"];\n}\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/SRSecurityPolicy.h",
    "content": "//\n// Copyright (c) 2016-present, Facebook, Inc.\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import <Foundation/Foundation.h>\n#import <Security/Security.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface SRSecurityPolicy : NSObject\n\n/**\n A default `SRSecurityPolicy` implementation specifies socket security and\n validates the certificate chain.\n\n Use a subclass of `SRSecurityPolicy` for more fine grained customization.\n */\n+ (instancetype)defaultPolicy;\n\n/**\n Specifies socket security and provider certificate pinning, disregarding certificate\n chain validation.\n\n @param pinnedCertificates Array of `SecCertificateRef` SSL certificates to use for validation.\n */\n+ (instancetype)pinnningPolicyWithCertificates:(NSArray *)pinnedCertificates\n    DEPRECATED_MSG_ATTRIBUTE(\"Using pinned certificates is neither secure nor supported in SocketRocket, \"\n                             \"and leads to security issues. Please use a proper, trust chain validated certificate.\");\n\n/**\n Specifies socket security and optional certificate chain validation.\n\n @param enabled Whether or not to validate the SSL certificate chain. If you\n are considering using this method because your certificate was not issued by a\n recognized certificate authority, consider using `pinningPolicyWithCertificates` instead.\n */\n- (instancetype)initWithCertificateChainValidationEnabled:(BOOL)enabled\n    DEPRECATED_MSG_ATTRIBUTE(\"Disabling certificate chain validation is unsafe. \"\n                             \"Please use a proper Certificate Authority to issue your TLS certificates.\")\n    NS_DESIGNATED_INITIALIZER;\n\n/**\n Updates all the security options for input and output streams, for example you\n can set your socket security level here.\n\n @param stream Stream to update the options in.\n */\n- (void)updateSecurityOptionsInStream:(NSStream *)stream;\n\n/**\n Whether or not the specified server trust should be accepted, based on the security policy.\n\n This method should be used when responding to an authentication challenge from\n a server. In the default implemenation, no further validation is done here, but\n you're free to override it in a subclass. See `SRPinningSecurityPolicy.h` for\n an example.\n\n @param serverTrust The X.509 certificate trust of the server.\n @param domain The domain of serverTrust.\n\n @return Whether or not to trust the server.\n */\n- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust forDomain:(NSString *)domain;\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/SRSecurityPolicy.m",
    "content": "//\n// Copyright (c) 2016-present, Facebook, Inc.\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import \"SRSecurityPolicy.h\"\n#import \"SRPinningSecurityPolicy.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface SRSecurityPolicy ()\n\n@property (nonatomic, assign, readonly) BOOL certificateChainValidationEnabled;\n\n@end\n\n@implementation SRSecurityPolicy\n\n+ (instancetype)defaultPolicy\n{\n    return [self new];\n}\n\n+ (instancetype)pinnningPolicyWithCertificates:(NSArray *)pinnedCertificates\n{\n    [NSException raise:NSInvalidArgumentException\n                format:@\"Using pinned certificates is neither secure nor supported in SocketRocket, \"\n                        \"and leads to security issues. Please use a proper, trust chain validated certificate.\"];\n\n    return nil;\n}\n\n- (instancetype)initWithCertificateChainValidationEnabled:(BOOL)enabled\n{\n    self = [super init];\n    if (!self) { return self; }\n\n    _certificateChainValidationEnabled = enabled;\n\n    return self;\n}\n\n- (instancetype)init\n{\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wdeprecated\"\n\n    return [self initWithCertificateChainValidationEnabled:YES];\n\n#pragma clang diagnostic pop\n}\n\n- (void)updateSecurityOptionsInStream:(NSStream *)stream\n{\n    // Enforce TLS 1.2\n    [stream setProperty:(__bridge id)CFSTR(\"kCFStreamSocketSecurityLevelTLSv1_2\") forKey:(__bridge id)kCFStreamPropertySocketSecurityLevel];\n\n    // Validate certificate chain for this stream if enabled.\n    NSDictionary<NSString *, id> *sslOptions = @{ (__bridge NSString *)kCFStreamSSLValidatesCertificateChain : @(self.certificateChainValidationEnabled) };\n    [stream setProperty:sslOptions forKey:(__bridge NSString *)kCFStreamPropertySSLSettings];\n}\n\n- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust forDomain:(NSString *)domain\n{\n    // No further evaluation happens in the default policy.\n    return YES;\n}\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/SRWebSocket.h",
    "content": "//\n// Copyright 2012 Square Inc.\n// Portions Copyright (c) 2016-present, Facebook, Inc.\n//\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import <Foundation/Foundation.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\ntypedef NS_ENUM(NSInteger, SRReadyState) {\n    SR_CONNECTING   = 0,\n    SR_OPEN         = 1,\n    SR_CLOSING      = 2,\n    SR_CLOSED       = 3,\n};\n\ntypedef NS_ENUM(NSInteger, SRStatusCode) {\n    // 0-999: Reserved and not used.\n    SRStatusCodeNormal = 1000,\n    SRStatusCodeGoingAway = 1001,\n    SRStatusCodeProtocolError = 1002,\n    SRStatusCodeUnhandledType = 1003,\n    // 1004 reserved.\n    SRStatusNoStatusReceived = 1005,\n    SRStatusCodeAbnormal = 1006,\n    SRStatusCodeInvalidUTF8 = 1007,\n    SRStatusCodePolicyViolated = 1008,\n    SRStatusCodeMessageTooBig = 1009,\n    SRStatusCodeMissingExtension = 1010,\n    SRStatusCodeInternalError = 1011,\n    SRStatusCodeServiceRestart = 1012,\n    SRStatusCodeTryAgainLater = 1013,\n    // 1014: Reserved for future use by the WebSocket standard.\n    SRStatusCodeTLSHandshake = 1015,\n    // 1016-1999: Reserved for future use by the WebSocket standard.\n    // 2000-2999: Reserved for use by WebSocket extensions.\n    // 3000-3999: Available for use by libraries and frameworks. May not be used by applications. Available for registration at the IANA via first-come, first-serve.\n    // 4000-4999: Available for use by applications.\n};\n\n@class SRWebSocket;\n@class SRSecurityPolicy;\n\n/**\n Error domain used for errors reported by SRWebSocket.\n */\nextern NSString *const SRWebSocketErrorDomain;\n\n/**\n Key used for HTTP status code if bad response was received from the server.\n */\nextern NSString *const SRHTTPResponseErrorKey;\n\n@protocol SRWebSocketDelegate;\n\n///--------------------------------------\n#pragma mark - SRWebSocket\n///--------------------------------------\n\n/**\n A `SRWebSocket` object lets you connect, send and receive data to a remote Web Socket.\n */\n@interface SRWebSocket : NSObject <NSStreamDelegate>\n\n/**\n The delegate of the web socket.\n\n The web socket delegate is notified on all state changes that happen to the web socket.\n */\n@property (nonatomic, weak) id <SRWebSocketDelegate> delegate;\n\n/**\n A dispatch queue for scheduling the delegate calls. The queue doesn't need be a serial queue.\n\n If `nil` and `delegateOperationQueue` is `nil`, the socket uses main queue for performing all delegate method calls.\n */\n@property (nullable, nonatomic, strong) dispatch_queue_t delegateDispatchQueue;\n\n/**\n An operation queue for scheduling the delegate calls.\n\n If `nil` and `delegateOperationQueue` is `nil`, the socket uses main queue for performing all delegate method calls.\n */\n@property (nullable, nonatomic, strong) NSOperationQueue *delegateOperationQueue;\n\n/**\n Current ready state of the socket. Default: `SR_CONNECTING`.\n\n This property is Key-Value Observable and fully thread-safe.\n */\n@property (atomic, assign, readonly) SRReadyState readyState;\n\n/**\n An instance of `NSURL` that this socket connects to.\n */\n@property (nullable, nonatomic, strong, readonly) NSURL *url;\n\n/**\n All HTTP headers that were received by socket or `nil` if none were received so far.\n */\n@property (nullable, nonatomic, assign, readonly) CFHTTPMessageRef receivedHTTPHeaders;\n\n/**\n Array of `NSHTTPCookie` cookies to apply to the connection.\n */\n@property (nullable, nonatomic, copy) NSArray<NSHTTPCookie *> *requestCookies;\n\n/**\n The negotiated web socket protocol or `nil` if handshake did not yet complete.\n */\n@property (nullable, nonatomic, copy, readonly) NSString *protocol;\n\n/**\n A boolean value indicating whether this socket will allow connection without SSL trust chain evaluation.\n For DEBUG builds this flag is ignored, and SSL connections are allowed regardless of the certificate trust configuration\n */\n@property (nonatomic, assign, readonly) BOOL allowsUntrustedSSLCertificates;\n\n///--------------------------------------\n#pragma mark - Constructors\n///--------------------------------------\n\n/**\n Initializes a web socket with a given `NSURLRequest`.\n\n @param request Request to initialize with.\n */\n- (instancetype)initWithURLRequest:(NSURLRequest *)request;\n\n/**\n Initializes a web socket with a given `NSURLRequest`, specifying a transport security policy (e.g. SSL configuration).\n\n @param request        Request to initialize with.\n @param securityPolicy Policy object describing transport security behavior.\n */\n- (instancetype)initWithURLRequest:(NSURLRequest *)request securityPolicy:(SRSecurityPolicy *)securityPolicy;\n\n/**\n Initializes a web socket with a given `NSURLRequest` and list of sub-protocols.\n\n @param request   Request to initialize with.\n @param protocols An array of strings that turn into `Sec-WebSocket-Protocol`. Default: `nil`.\n */\n- (instancetype)initWithURLRequest:(NSURLRequest *)request protocols:(nullable NSArray<NSString *> *)protocols;\n\n/**\n Initializes a web socket with a given `NSURLRequest`, list of sub-protocols and whether untrusted SSL certificates are allowed.\n\n @param request                        Request to initialize with.\n @param protocols                      An array of strings that turn into `Sec-WebSocket-Protocol`. Default: `nil`.\n @param allowsUntrustedSSLCertificates Boolean value indicating whether untrusted SSL certificates are allowed. Default: `false`.\n */\n- (instancetype)initWithURLRequest:(NSURLRequest *)request protocols:(nullable NSArray<NSString *> *)protocols allowsUntrustedSSLCertificates:(BOOL)allowsUntrustedSSLCertificates\n    DEPRECATED_MSG_ATTRIBUTE(\"Disabling certificate chain validation is unsafe. \"\n                             \"Please use a proper Certificate Authority to issue your TLS certificates.\");\n\n/**\n Initializes a web socket with a given `NSURLRequest`, list of sub-protocols and whether untrusted SSL certificates are allowed.\n\n @param request        Request to initialize with.\n @param protocols      An array of strings that turn into `Sec-WebSocket-Protocol`. Default: `nil`.\n @param securityPolicy Policy object describing transport security behavior.\n */\n- (instancetype)initWithURLRequest:(NSURLRequest *)request protocols:(nullable NSArray<NSString *> *)protocols securityPolicy:(SRSecurityPolicy *)securityPolicy NS_DESIGNATED_INITIALIZER;\n\n/**\n Initializes a web socket with a given `NSURL`.\n\n @param url URL to initialize with.\n */\n- (instancetype)initWithURL:(NSURL *)url;\n\n/**\n Initializes a web socket with a given `NSURL` and list of sub-protocols.\n\n @param url       URL to initialize with.\n @param protocols An array of strings that turn into `Sec-WebSocket-Protocol`. Default: `nil`.\n */\n- (instancetype)initWithURL:(NSURL *)url protocols:(nullable NSArray<NSString *> *)protocols;\n\n/**\n Initializes a web socket with a given `NSURL`, specifying a transport security policy (e.g. SSL configuration).\n\n @param url            URL to initialize with.\n @param securityPolicy Policy object describing transport security behavior.\n */\n- (instancetype)initWithURL:(NSURL *)url securityPolicy:(SRSecurityPolicy *)securityPolicy;\n\n/**\n Initializes a web socket with a given `NSURL`, list of sub-protocols and whether untrusted SSL certificates are allowed.\n\n @param url                            URL to initialize with.\n @param protocols                      An array of strings that turn into `Sec-WebSocket-Protocol`. Default: `nil`.\n @param allowsUntrustedSSLCertificates Boolean value indicating whether untrusted SSL certificates are allowed. Default: `false`.\n */\n- (instancetype)initWithURL:(NSURL *)url protocols:(nullable NSArray<NSString *> *)protocols allowsUntrustedSSLCertificates:(BOOL)allowsUntrustedSSLCertificates\n    DEPRECATED_MSG_ATTRIBUTE(\"Disabling certificate chain validation is unsafe. \"\n                             \"Please use a proper Certificate Authority to issue your TLS certificates.\");\n\n/**\n Unavailable initializer. Please use any other initializer.\n */\n- (instancetype)init NS_UNAVAILABLE;\n\n/**\n Unavailable constructor. Please use any other initializer.\n */\n+ (instancetype)new NS_UNAVAILABLE;\n\n///--------------------------------------\n#pragma mark - Schedule\n///--------------------------------------\n\n/**\n Schedules a received on a given run loop in a given mode.\n By default, a web socket will schedule itself on `+[NSRunLoop SR_networkRunLoop]` using `NSDefaultRunLoopMode`.\n\n @param runLoop The run loop on which to schedule the receiver.\n @param mode     The mode for the run loop.\n */\n- (void)scheduleInRunLoop:(NSRunLoop *)runLoop forMode:(NSString *)mode NS_SWIFT_NAME(schedule(in:forMode:));\n\n/**\n Removes the receiver from a given run loop running in a given mode.\n\n @param runLoop The run loop on which the receiver was scheduled.\n @param mode    The mode for the run loop.\n */\n- (void)unscheduleFromRunLoop:(NSRunLoop *)runLoop forMode:(NSString *)mode NS_SWIFT_NAME(unschedule(from:forMode:));\n\n///--------------------------------------\n#pragma mark - Open / Close\n///--------------------------------------\n\n/**\n Opens web socket, which will trigger connection, authentication and start receiving/sending events.\n An instance of `SRWebSocket` is intended for one-time-use only. This method should be called once and only once.\n */\n- (void)open;\n\n/**\n Closes a web socket using `SRStatusCodeNormal` code and no reason.\n */\n- (void)close;\n\n/**\n Closes a web socket using a given code and reason.\n\n @param code   Code to close the socket with.\n @param reason Reason to send to the server or `nil`.\n */\n- (void)closeWithCode:(NSInteger)code reason:(nullable NSString *)reason;\n\n///--------------------------------------\n#pragma mark Send\n///--------------------------------------\n\n/**\n Send a UTF-8 string or binary data to the server.\n\n @param message UTF-8 String or Data to send.\n\n @deprecated Please use `sendString:` or `sendData` instead.\n */\n- (void)send:(nullable id)message __attribute__((deprecated(\"Please use `sendString:error:` or `sendData:error:` instead.\")));\n\n/**\n Send a UTF-8 String to the server.\n\n @param string String to send.\n @param error  On input, a pointer to variable for an `NSError` object.\n If an error occurs, this pointer is set to an `NSError` object containing information about the error.\n You may specify `nil` to ignore the error information.\n\n @return `YES` if the string was scheduled to send, otherwise - `NO`.\n */\n- (BOOL)sendString:(NSString *)string error:(NSError **)error NS_SWIFT_NAME(send(string:));\n\n/**\n Send binary data to the server.\n\n @param data  Data to send.\n @param error On input, a pointer to variable for an `NSError` object.\n If an error occurs, this pointer is set to an `NSError` object containing information about the error.\n You may specify `nil` to ignore the error information.\n\n @return `YES` if the string was scheduled to send, otherwise - `NO`.\n */\n- (BOOL)sendData:(nullable NSData *)data error:(NSError **)error NS_SWIFT_NAME(send(data:));\n\n/**\n Send binary data to the server, without making a defensive copy of it first.\n\n @param data  Data to send.\n @param error On input, a pointer to variable for an `NSError` object.\n If an error occurs, this pointer is set to an `NSError` object containing information about the error.\n You may specify `nil` to ignore the error information.\n\n @return `YES` if the string was scheduled to send, otherwise - `NO`.\n */\n- (BOOL)sendDataNoCopy:(nullable NSData *)data error:(NSError **)error NS_SWIFT_NAME(send(dataNoCopy:));\n\n/**\n Send Ping message to the server with optional data.\n\n @param data  Instance of `NSData` or `nil`.\n @param error On input, a pointer to variable for an `NSError` object.\n If an error occurs, this pointer is set to an `NSError` object containing information about the error.\n You may specify `nil` to ignore the error information.\n\n @return `YES` if the string was scheduled to send, otherwise - `NO`.\n */\n- (BOOL)sendPing:(nullable NSData *)data error:(NSError **)error NS_SWIFT_NAME(sendPing(_:));\n\n@end\n\n///--------------------------------------\n#pragma mark - SRWebSocketDelegate\n///--------------------------------------\n\n/**\n The `SRWebSocketDelegate` protocol describes the methods that `SRWebSocket` objects\n call on their delegates to handle status and messsage events.\n */\n@protocol SRWebSocketDelegate <NSObject>\n\n@optional\n\n#pragma mark Receive Messages\n\n/**\n Called when any message was received from a web socket.\n This method is suboptimal and might be deprecated in a future release.\n\n @param webSocket An instance of `SRWebSocket` that received a message.\n @param message   Received message. Either a `String` or `NSData`.\n */\n- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message;\n\n/**\n Called when a frame was received from a web socket.\n\n @param webSocket An instance of `SRWebSocket` that received a message.\n @param string    Received text in a form of UTF-8 `String`.\n */\n- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessageWithString:(NSString *)string;\n\n/**\n Called when a frame was received from a web socket.\n\n @param webSocket An instance of `SRWebSocket` that received a message.\n @param data      Received data in a form of `NSData`.\n */\n- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessageWithData:(NSData *)data;\n\n#pragma mark Status & Connection\n\n/**\n Called when a given web socket was open and authenticated.\n\n @param webSocket An instance of `SRWebSocket` that was open.\n */\n- (void)webSocketDidOpen:(SRWebSocket *)webSocket;\n\n/**\n Called when a given web socket encountered an error.\n\n @param webSocket An instance of `SRWebSocket` that failed with an error.\n @param error     An instance of `NSError`.\n */\n- (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error;\n\n/**\n Called when a given web socket was closed.\n\n @param webSocket An instance of `SRWebSocket` that was closed.\n @param code      Code reported by the server.\n @param reason    Reason in a form of a String that was reported by the server or `nil`.\n @param wasClean  Boolean value indicating whether a socket was closed in a clean state.\n */\n- (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(nullable NSString *)reason wasClean:(BOOL)wasClean;\n\n/**\n Called on receive of a ping message from the server.\n\n @param webSocket An instance of `SRWebSocket` that received a ping frame.\n @param data      Payload that was received or `nil` if there was no payload.\n */\n- (void)webSocket:(SRWebSocket *)webSocket didReceivePingWithData:(nullable NSData *)data;\n\n/**\n Called when a pong data was received in response to ping.\n\n @param webSocket An instance of `SRWebSocket` that received a pong frame.\n @param pongData  Payload that was received or `nil` if there was no payload.\n */\n- (void)webSocket:(SRWebSocket *)webSocket didReceivePong:(nullable NSData *)pongData;\n\n/**\n Sent before reporting a text frame to be able to configure if it shuold be convert to a UTF-8 String or passed as `NSData`.\n If the method is not implemented - it will always convert text frames to String.\n\n @param webSocket An instance of `SRWebSocket` that received a text frame.\n\n @return `YES` if text frame should be converted to UTF-8 String, otherwise - `NO`. Default: `YES`.\n */\n- (BOOL)webSocketShouldConvertTextFrameToString:(SRWebSocket *)webSocket NS_SWIFT_NAME(webSocketShouldConvertTextFrameToString(_:));\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/SRWebSocket.m",
    "content": "//\n// Copyright 2012 Square Inc.\n// Portions Copyright (c) 2016-present, Facebook, Inc.\n//\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import \"SRWebSocket.h\"\n\n#if __has_include(<unicode/utf8.h>)\n#define HAS_ICU\n#endif\n\n#ifdef HAS_ICU\n#import <unicode/utf8.h>\n#endif\n\n#import <libkern/OSAtomic.h>\n\n#import \"SRDelegateController.h\"\n#import \"SRIOConsumer.h\"\n#import \"SRIOConsumerPool.h\"\n#import \"SRHash.h\"\n#import \"SRURLUtilities.h\"\n#import \"SRError.h\"\n#import \"NSURLRequest+SRWebSocket.h\"\n#import \"NSRunLoop+SRWebSocket.h\"\n#import \"SRProxyConnect.h\"\n#import \"SRSecurityPolicy.h\"\n#import \"SRHTTPConnectMessage.h\"\n#import \"SRRandom.h\"\n#import \"SRLog.h\"\n#import \"SRMutex.h\"\n#import \"SRSIMDHelpers.h\"\n#import \"NSURLRequest+SRWebSocketPrivate.h\"\n#import \"NSRunLoop+SRWebSocketPrivate.h\"\n#import \"SRConstants.h\"\n\n#if !__has_feature(objc_arc)\n#error SocketRocket must be compiled with ARC enabled\n#endif\n\n__attribute__((used)) static void importCategories(void)\n{\n    import_NSURLRequest_SRWebSocket();\n    import_NSRunLoop_SRWebSocket();\n}\n\ntypedef struct {\n    BOOL fin;\n    //  BOOL rsv1;\n    //  BOOL rsv2;\n    //  BOOL rsv3;\n    uint8_t opcode;\n    BOOL masked;\n    uint64_t payload_length;\n} frame_header;\n\nstatic NSString *const SRWebSocketAppendToSecKeyString = @\"258EAFA5-E914-47DA-95CA-C5AB0DC85B11\";\n\nstatic inline int32_t validate_dispatch_data_partial_string(NSData *data);\n\nstatic uint8_t const SRWebSocketProtocolVersion = 13;\n\nNSString *const SRWebSocketErrorDomain = @\"SRWebSocketErrorDomain\";\nNSString *const SRHTTPResponseErrorKey = @\"HTTPResponseStatusCode\";\n\n@interface SRWebSocket ()  <NSStreamDelegate>\n\n@property (atomic, assign, readwrite) SRReadyState readyState;\n\n// Specifies whether SSL trust chain should NOT be evaluated.\n// By default this flag is set to NO, meaning only secure SSL connections are allowed.\n// For DEBUG builds this flag is ignored, and SSL connections are allowed regardless\n// of the certificate trust configuration\n@property (nonatomic, assign, readwrite) BOOL allowsUntrustedSSLCertificates;\n\n@property (nonatomic, strong, readonly) SRDelegateController *delegateController;\n\n@end\n\n@implementation SRWebSocket {\n    SRMutex _kvoLock;\n    OSSpinLock _propertyLock;\n\n    dispatch_queue_t _workQueue;\n    NSMutableArray<SRIOConsumer *> *_consumers;\n\n    NSInputStream *_inputStream;\n    NSOutputStream *_outputStream;\n\n    dispatch_data_t _readBuffer;\n    NSUInteger _readBufferOffset;\n\n    dispatch_data_t _outputBuffer;\n    NSUInteger _outputBufferOffset;\n\n    uint8_t _currentFrameOpcode;\n    size_t _currentFrameCount;\n    size_t _readOpCount;\n    uint32_t _currentStringScanPosition;\n    NSMutableData *_currentFrameData;\n\n    NSString *_closeReason;\n\n    NSString *_secKey;\n\n    SRSecurityPolicy *_securityPolicy;\n    BOOL _requestRequiresSSL;\n    BOOL _streamSecurityValidated;\n\n    uint8_t _currentReadMaskKey[4];\n    size_t _currentReadMaskOffset;\n\n    BOOL _closeWhenFinishedWriting;\n    BOOL _failed;\n\n    NSURLRequest *_urlRequest;\n\n    BOOL _sentClose;\n    BOOL _didFail;\n    BOOL _cleanupScheduled;\n    int _closeCode;\n\n    BOOL _isPumping;\n\n    NSMutableSet<NSArray *> *_scheduledRunloops; // Set<[RunLoop, Mode]>. TODO: (nlutsenko) Fix clowntown\n\n    // We use this to retain ourselves.\n    __strong SRWebSocket *_selfRetain;\n\n    NSArray<NSString *> *_requestedProtocols;\n    SRIOConsumerPool *_consumerPool;\n\n    // proxy support\n    SRProxyConnect *_proxyConnect;\n}\n\n@synthesize readyState = _readyState;\n\n///--------------------------------------\n#pragma mark - Init\n///--------------------------------------\n\n- (instancetype)initWithURLRequest:(NSURLRequest *)request protocols:(NSArray<NSString *> *)protocols securityPolicy:(SRSecurityPolicy *)securityPolicy\n{\n    self = [super init];\n    if (!self) return self;\n\n    assert(request.URL);\n    _url = request.URL;\n    _urlRequest = request;\n    _requestedProtocols = [protocols copy];\n    _securityPolicy = securityPolicy;\n    _requestRequiresSSL = SRURLRequiresSSL(_url);\n\n    _readyState = SR_CONNECTING;\n\n    _propertyLock = OS_SPINLOCK_INIT;\n    _kvoLock = SRMutexInitRecursive();\n    _workQueue = dispatch_queue_create(NULL, DISPATCH_QUEUE_SERIAL);\n\n    // Going to set a specific on the queue so we can validate we're on the work queue\n    dispatch_queue_set_specific(_workQueue, (__bridge void *)self, (__bridge void *)(_workQueue), NULL);\n\n    _delegateController = [[SRDelegateController alloc] init];\n\n    _readBuffer = dispatch_data_empty;\n    _outputBuffer = dispatch_data_empty;\n\n    _currentFrameData = [[NSMutableData alloc] init];\n\n    _consumers = [[NSMutableArray alloc] init];\n\n    _consumerPool = [[SRIOConsumerPool alloc] init];\n\n    _scheduledRunloops = [[NSMutableSet alloc] init];\n\n    return self;\n}\n\n- (instancetype)initWithURLRequest:(NSURLRequest *)request protocols:(NSArray<NSString *> *)protocols allowsUntrustedSSLCertificates:(BOOL)allowsUntrustedSSLCertificates\n{\n    SRSecurityPolicy *securityPolicy;\n    NSArray *pinnedCertificates = request.SR_SSLPinnedCertificates;\n    if (pinnedCertificates) {\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wdeprecated\"\n        securityPolicy = [SRSecurityPolicy pinnningPolicyWithCertificates:pinnedCertificates];\n#pragma clang diagnostic pop\n    } else {\n        BOOL certificateChainValidationEnabled = !allowsUntrustedSSLCertificates;\n    securityPolicy = [[SRSecurityPolicy alloc] initWithCertificateChainValidationEnabled:certificateChainValidationEnabled];\n    }\n\n    return [self initWithURLRequest:request protocols:protocols securityPolicy:securityPolicy];\n}\n\n- (instancetype)initWithURLRequest:(NSURLRequest *)request securityPolicy:(SRSecurityPolicy *)securityPolicy\n{\n    return [self initWithURLRequest:request protocols:nil securityPolicy:securityPolicy];\n}\n\n- (instancetype)initWithURLRequest:(NSURLRequest *)request protocols:(NSArray<NSString *> *)protocols\n{\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wdeprecated\"\n    return [self initWithURLRequest:request protocols:protocols allowsUntrustedSSLCertificates:NO];\n#pragma clang diagnostic pop\n}\n\n- (instancetype)initWithURLRequest:(NSURLRequest *)request\n{\n    return [self initWithURLRequest:request protocols:nil];\n}\n\n- (instancetype)initWithURL:(NSURL *)url\n{\n    return [self initWithURL:url protocols:nil];\n}\n\n- (instancetype)initWithURL:(NSURL *)url protocols:(NSArray<NSString *> *)protocols\n{\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wdeprecated\"\n    return [self initWithURL:url protocols:protocols allowsUntrustedSSLCertificates:NO];\n#pragma clang diagnostic pop\n}\n\n- (instancetype)initWithURL:(NSURL *)url securityPolicy:(SRSecurityPolicy *)securityPolicy\n{\n    NSURLRequest *request = [NSURLRequest requestWithURL:url];\n    return [self initWithURLRequest:request protocols:nil securityPolicy:securityPolicy];\n}\n\n- (instancetype)initWithURL:(NSURL *)url protocols:(NSArray<NSString *> *)protocols allowsUntrustedSSLCertificates:(BOOL)allowsUntrustedSSLCertificates\n{\n    NSURLRequest *request = [NSURLRequest requestWithURL:url];\n    return [self initWithURLRequest:request protocols:protocols allowsUntrustedSSLCertificates:allowsUntrustedSSLCertificates];\n}\n\n- (void)assertOnWorkQueue\n{\n    assert(dispatch_get_specific((__bridge void *)self) == (__bridge void *)_workQueue);\n}\n\n///--------------------------------------\n#pragma mark - Dealloc\n///--------------------------------------\n\n- (void)dealloc\n{\n    _inputStream.delegate = nil;\n    _outputStream.delegate = nil;\n\n    [_inputStream close];\n    [_outputStream close];\n\n    if (_receivedHTTPHeaders) {\n        CFRelease(_receivedHTTPHeaders);\n        _receivedHTTPHeaders = NULL;\n    }\n\n    SRMutexDestroy(_kvoLock);\n}\n\n///--------------------------------------\n#pragma mark - Accessors\n///--------------------------------------\n\n#pragma mark readyState\n\n- (void)setReadyState:(SRReadyState)readyState\n{\n    @try {\n        SRMutexLock(_kvoLock);\n        if (_readyState != readyState) {\n            [self willChangeValueForKey:@\"readyState\"];\n            OSSpinLockLock(&_propertyLock);\n            _readyState = readyState;\n            OSSpinLockUnlock(&_propertyLock);\n            [self didChangeValueForKey:@\"readyState\"];\n        }\n    }\n    @finally {\n        SRMutexUnlock(_kvoLock);\n    }\n}\n\n- (SRReadyState)readyState\n{\n    SRReadyState state = 0;\n    OSSpinLockLock(&_propertyLock);\n    state = _readyState;\n    OSSpinLockUnlock(&_propertyLock);\n    return state;\n}\n\n+ (BOOL)automaticallyNotifiesObserversOfReadyState {\n    return NO;\n}\n\n///--------------------------------------\n#pragma mark - Open / Close\n///--------------------------------------\n\n- (void)open\n{\n    assert(_url);\n    NSAssert(self.readyState == SR_CONNECTING, @\"Cannot call -(void)open on SRWebSocket more than once.\");\n\n    _selfRetain = self;\n\n    if (_urlRequest.timeoutInterval > 0) {\n        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(_urlRequest.timeoutInterval * NSEC_PER_SEC));\n        __weak typeof(self) wself = self;\n        dispatch_after(popTime, dispatch_get_main_queue(), ^{\n            __strong SRWebSocket *sself = wself;\n            if (!sself) {\n                return;\n            }\n            if (sself.readyState == SR_CONNECTING) {\n                NSError *error = SRErrorWithDomainCodeDescription(NSURLErrorDomain, NSURLErrorTimedOut, @\"Timed out connecting to server.\");\n                [sself _failWithError:error];\n            }\n        });\n    }\n\n    _proxyConnect = [[SRProxyConnect alloc] initWithURL:_url];\n\n    __weak typeof(self) wself = self;\n    [_proxyConnect openNetworkStreamWithCompletion:^(NSError *error, NSInputStream *readStream, NSOutputStream *writeStream) {\n        [wself _connectionDoneWithError:error readStream:readStream writeStream:writeStream];\n    }];\n}\n\n- (void)_connectionDoneWithError:(NSError *)error readStream:(NSInputStream *)readStream writeStream:(NSOutputStream *)writeStream\n{\n    if (error != nil) {\n        [self _failWithError:error];\n    } else {\n        _outputStream = writeStream;\n        _inputStream = readStream;\n\n        _inputStream.delegate = self;\n        _outputStream.delegate = self;\n        [self _updateSecureStreamOptions];\n\n        if (!_scheduledRunloops.count) {\n            [self scheduleInRunLoop:[NSRunLoop SR_networkRunLoop] forMode:NSDefaultRunLoopMode];\n        }\n\n        // If we don't require SSL validation - consider that we connected.\n        // Otherwise `didConnect` is called when SSL validation finishes.\n        if (!_requestRequiresSSL) {\n            dispatch_async(_workQueue, ^{\n                [self didConnect];\n            });\n        }\n    }\n    // Schedule to run on a work queue, to make sure we don't run this inline and deallocate `self` inside `SRProxyConnect`.\n    // TODO: (nlutsenko) Find a better structure for this, maybe Bolts Tasks?\n    dispatch_async(_workQueue, ^{\n        self->_proxyConnect = nil;\n    });\n}\n\n- (BOOL)_checkHandshake:(CFHTTPMessageRef)httpMessage\n{\n    NSString *acceptHeader = CFBridgingRelease(CFHTTPMessageCopyHeaderFieldValue(httpMessage, CFSTR(\"Sec-WebSocket-Accept\")));\n\n    if (acceptHeader == nil) {\n        return NO;\n    }\n\n    NSString *concattedString = [_secKey stringByAppendingString:SRWebSocketAppendToSecKeyString];\n    NSData *hashedString = SRSHA1HashFromString(concattedString);\n    NSString *expectedAccept = SRBase64EncodedStringFromData(hashedString);\n    return [acceptHeader isEqualToString:expectedAccept];\n}\n\n- (void)_HTTPHeadersDidFinish\n{\n    NSInteger responseCode = CFHTTPMessageGetResponseStatusCode(_receivedHTTPHeaders);\n    if (responseCode >= 400) {\n        SRDebugLog(@\"Request failed with response code %d\", responseCode);\n        NSError *error = SRHTTPErrorWithCodeDescription(responseCode, 2132,\n                                                        [NSString stringWithFormat:@\"Received bad response code from server: %d.\",\n                                                         (int)responseCode]);\n        [self _failWithError:error];\n        return;\n    }\n\n    if(![self _checkHandshake:_receivedHTTPHeaders]) {\n        NSError *error = SRErrorWithCodeDescription(2133, @\"Invalid Sec-WebSocket-Accept response.\");\n        [self _failWithError:error];\n        return;\n    }\n\n    NSString *negotiatedProtocol = CFBridgingRelease(CFHTTPMessageCopyHeaderFieldValue(_receivedHTTPHeaders, CFSTR(\"Sec-WebSocket-Protocol\")));\n    if (negotiatedProtocol) {\n        // Make sure we requested the protocol\n        if ([_requestedProtocols indexOfObject:negotiatedProtocol] == NSNotFound) {\n            NSError *error = SRErrorWithCodeDescription(2133, @\"Server specified Sec-WebSocket-Protocol that wasn't requested.\");\n            [self _failWithError:error];\n            return;\n        }\n\n        _protocol = negotiatedProtocol;\n    }\n\n    self.readyState = SR_OPEN;\n\n    if (!_didFail) {\n        [self _readFrameNew];\n    }\n\n    [self.delegateController performDelegateBlock:^(id<SRWebSocketDelegate>  _Nullable delegate, SRDelegateAvailableMethods availableMethods) {\n        if (availableMethods.didOpen) {\n            [delegate webSocketDidOpen:self];\n        }\n    }];\n}\n\n\n- (void)_readHTTPHeader\n{\n    if (_receivedHTTPHeaders == NULL) {\n        _receivedHTTPHeaders = CFHTTPMessageCreateEmpty(NULL, NO);\n    }\n\n    [self _readUntilHeaderCompleteWithCallback:^(SRWebSocket *socket,  NSData *data) {\n        if (!socket) {\n            return;\n        }\n        CFHTTPMessageRef receivedHTTPHeaders = socket->_receivedHTTPHeaders;\n\n        CFHTTPMessageAppendBytes(receivedHTTPHeaders, (const UInt8 *)data.bytes, data.length);\n\n        if (CFHTTPMessageIsHeaderComplete(receivedHTTPHeaders)) {\n            SRDebugLog(@\"Finished reading headers %@\", CFBridgingRelease(CFHTTPMessageCopyAllHeaderFields(receivedHTTPHeaders)));\n            [socket _HTTPHeadersDidFinish];\n        } else {\n            [socket _readHTTPHeader];\n        }\n    }];\n}\n\n- (void)didConnect\n{\n    SRDebugLog(@\"Connected\");\n\n    _secKey = SRBase64EncodedStringFromData(SRRandomData(16));\n    assert([_secKey length] == 24);\n\n    CFHTTPMessageRef message = SRHTTPConnectMessageCreate(_urlRequest,\n                                                          _secKey,\n                                                          SRWebSocketProtocolVersion,\n                                                          self.requestCookies,\n                                                          _requestedProtocols);\n\n    NSData *messageData = CFBridgingRelease(CFHTTPMessageCopySerializedMessage(message));\n\n    CFRelease(message);\n\n    [self _writeData:messageData];\n    [self _readHTTPHeader];\n}\n\n- (void)_updateSecureStreamOptions\n{\n    if (_requestRequiresSSL) {\n        SRDebugLog(@\"Setting up security for streams.\");\n        [_securityPolicy updateSecurityOptionsInStream:_inputStream];\n        [_securityPolicy updateSecurityOptionsInStream:_outputStream];\n    }\n\n    NSString *networkServiceType = SRStreamNetworkServiceTypeFromURLRequest(_urlRequest);\n    if (networkServiceType != nil) {\n        [_inputStream setProperty:networkServiceType forKey:NSStreamNetworkServiceType];\n        [_outputStream setProperty:networkServiceType forKey:NSStreamNetworkServiceType];\n    }\n}\n\n- (void)scheduleInRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode\n{\n    [_outputStream scheduleInRunLoop:aRunLoop forMode:mode];\n    [_inputStream scheduleInRunLoop:aRunLoop forMode:mode];\n\n    [_scheduledRunloops addObject:@[aRunLoop, mode]];\n}\n\n- (void)unscheduleFromRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode\n{\n    [_outputStream removeFromRunLoop:aRunLoop forMode:mode];\n    [_inputStream removeFromRunLoop:aRunLoop forMode:mode];\n\n    [_scheduledRunloops removeObject:@[aRunLoop, mode]];\n}\n\n- (void)close\n{\n    [self closeWithCode:SRStatusCodeNormal reason:nil];\n}\n\n- (void)closeWithCode:(NSInteger)code reason:(NSString *)reason\n{\n    assert(code);\n    __weak typeof(self) wself = self;\n    dispatch_async(_workQueue, ^{\n        __strong SRWebSocket *sself = wself;\n        if (!sself) {\n          return;\n        }\n        if (sself.readyState == SR_CLOSING || sself.readyState == SR_CLOSED) {\n            return;\n        }\n\n        BOOL wasConnecting = sself.readyState == SR_CONNECTING;\n\n        sself.readyState = SR_CLOSING;\n\n        SRDebugLog(@\"Closing with code %d reason %@\", code, reason);\n\n        if (wasConnecting) {\n            [sself closeConnection];\n            return;\n        }\n\n        size_t maxMsgSize = [reason maximumLengthOfBytesUsingEncoding:NSUTF8StringEncoding];\n        NSMutableData *mutablePayload = [[NSMutableData alloc] initWithLength:sizeof(uint16_t) + maxMsgSize];\n        NSData *payload = mutablePayload;\n\n        ((uint16_t *)mutablePayload.mutableBytes)[0] = CFSwapInt16BigToHost((uint16_t)code);\n\n        if (reason) {\n            NSRange remainingRange = {0};\n\n            NSUInteger usedLength = 0;\n\n            BOOL success = [reason getBytes:(char *)mutablePayload.mutableBytes + sizeof(uint16_t) maxLength:payload.length - sizeof(uint16_t) usedLength:&usedLength encoding:NSUTF8StringEncoding options:NSStringEncodingConversionExternalRepresentation range:NSMakeRange(0, reason.length) remainingRange:&remainingRange];\n#pragma unused (success)\n\n            assert(success);\n            assert(remainingRange.length == 0);\n\n            if (usedLength != maxMsgSize) {\n                payload = [payload subdataWithRange:NSMakeRange(0, usedLength + sizeof(uint16_t))];\n            }\n        }\n\n\n        [sself _sendFrameWithOpcode:SROpCodeConnectionClose data:payload];\n    });\n}\n\n- (void)_closeWithProtocolError:(NSString *)message\n{\n    // Need to shunt this on the _callbackQueue first to see if they received any messages\n    [self.delegateController performDelegateQueueBlock:^{\n        [self closeWithCode:SRStatusCodeProtocolError reason:message];\n        dispatch_async(self->_workQueue, ^{\n            [self closeConnection];\n        });\n    }];\n}\n\n- (void)_failWithError:(NSError *)error\n{\n    dispatch_async(_workQueue, ^{\n        if (self.readyState != SR_CLOSED) {\n            self->_failed = YES;\n            [self.delegateController performDelegateBlock:^(id<SRWebSocketDelegate>  _Nullable delegate, SRDelegateAvailableMethods availableMethods) {\n                if (availableMethods.didFailWithError) {\n                    [delegate webSocket:self didFailWithError:error];\n                }\n            }];\n\n            self.readyState = SR_CLOSED;\n\n            SRDebugLog(@\"Failing with error %@\", error.localizedDescription);\n\n            [self closeConnection];\n            [self _scheduleCleanup];\n        }\n    });\n}\n\n- (void)_writeData:(NSData *)data\n{\n    [self assertOnWorkQueue];\n\n    if (_closeWhenFinishedWriting) {\n        return;\n    }\n\n    __block NSData *strongData = data;\n    dispatch_data_t newData = dispatch_data_create(data.bytes, data.length, nil, ^{\n        strongData = nil;\n    });\n    (void)strongData;\n    _outputBuffer = dispatch_data_create_concat(_outputBuffer, newData);\n    [self _pumpWriting];\n}\n\n- (void)send:(nullable id)message\n{\n    if (!message) {\n        [self sendData:nil error:nil]; // Send Data, but it doesn't matter since we are going to send the same text frame with 0 length.\n    } else if ([message isKindOfClass:[NSString class]]) {\n        [self sendString:message error:nil];\n    } else if ([message isKindOfClass:[NSData class]]) {\n        [self sendData:message error:nil];\n    } else {\n        NSAssert(NO, @\"Unrecognized message. Not able to send anything other than a String or NSData.\");\n    }\n}\n\n- (BOOL)sendString:(NSString *)string error:(NSError **)error\n{\n    if (self.readyState != SR_OPEN) {\n        NSString *message = @\"Invalid State: Cannot call `sendString:error:` until connection is open.\";\n        if (error) {\n            *error = SRErrorWithCodeDescription(2134, message);\n        }\n        SRDebugLog(message);\n        return NO;\n    }\n\n    string = [string copy];\n    dispatch_async(_workQueue, ^{\n        [self _sendFrameWithOpcode:SROpCodeTextFrame data:[string dataUsingEncoding:NSUTF8StringEncoding]];\n    });\n    return YES;\n}\n\n- (BOOL)sendData:(nullable NSData *)data error:(NSError **)error\n{\n    data = [data copy];\n    return [self sendDataNoCopy:data error:error];\n}\n\n- (BOOL)sendDataNoCopy:(nullable NSData *)data error:(NSError **)error\n{\n    if (self.readyState != SR_OPEN) {\n        NSString *message = @\"Invalid State: Cannot call `sendDataNoCopy:error:` until connection is open.\";\n        if (error) {\n            *error = SRErrorWithCodeDescription(2134, message);\n        }\n        SRDebugLog(message);\n        return NO;\n    }\n\n    dispatch_async(_workQueue, ^{\n        if (data) {\n            [self _sendFrameWithOpcode:SROpCodeBinaryFrame data:data];\n        } else {\n            [self _sendFrameWithOpcode:SROpCodeTextFrame data:nil];\n        }\n    });\n    return YES;\n}\n\n- (BOOL)sendPing:(nullable NSData *)data error:(NSError **)error\n{\n    if (self.readyState != SR_OPEN) {\n        NSString *message = @\"Invalid State: Cannot call `sendPing:error:` until connection is open.\";\n        if (error) {\n            *error = SRErrorWithCodeDescription(2134, message);\n        }\n        SRDebugLog(message);\n        return NO;\n    }\n\n    data = [data copy] ?: [NSData data]; // It's okay for a ping to be empty\n    dispatch_async(_workQueue, ^{\n        [self _sendFrameWithOpcode:SROpCodePing data:data];\n    });\n    return YES;\n}\n\n- (void)_handlePingWithData:(nullable NSData *)data\n{\n    // Need to pingpong this off _callbackQueue first to make sure messages happen in order\n    [self.delegateController performDelegateBlock:^(id<SRWebSocketDelegate> _Nullable delegate, SRDelegateAvailableMethods availableMethods) {\n        if (availableMethods.didReceivePing) {\n            [delegate webSocket:self didReceivePingWithData:data];\n        }\n        dispatch_async(self->_workQueue, ^{\n            [self _sendFrameWithOpcode:SROpCodePong data:data];\n        });\n    }];\n}\n\n- (void)handlePong:(NSData *)pongData\n{\n    SRDebugLog(@\"Received pong\");\n    [self.delegateController performDelegateBlock:^(id<SRWebSocketDelegate>  _Nullable delegate, SRDelegateAvailableMethods availableMethods) {\n        if (availableMethods.didReceivePong) {\n            [delegate webSocket:self didReceivePong:pongData];\n        }\n    }];\n}\n\n\nstatic inline BOOL closeCodeIsValid(int closeCode) {\n    if (closeCode < 1000) {\n        return NO;\n    }\n\n    if (closeCode >= 1000 && closeCode <= 1011) {\n        if (closeCode == 1004 ||\n            closeCode == 1005 ||\n            closeCode == 1006) {\n            return NO;\n        }\n        return YES;\n    }\n\n    if (closeCode >= 3000 && closeCode <= 3999) {\n        return YES;\n    }\n\n    if (closeCode >= 4000 && closeCode <= 4999) {\n        return YES;\n    }\n\n    return NO;\n}\n\n//  Note from RFC:\n//\n//  If there is a body, the first two\n//  bytes of the body MUST be a 2-byte unsigned integer (in network byte\n//  order) representing a status code with value /code/ defined in\n//  Section 7.4.  Following the 2-byte integer the body MAY contain UTF-8\n//  encoded data with value /reason/, the interpretation of which is not\n//  defined by this specification.\n\n- (void)handleCloseWithData:(NSData *)data\n{\n    size_t dataSize = data.length;\n    __block uint16_t closeCode = 0;\n\n    SRDebugLog(@\"Received close frame\");\n\n    if (dataSize == 1) {\n        // TODO handle error\n        [self _closeWithProtocolError:@\"Payload for close must be larger than 2 bytes\"];\n        return;\n    } else if (dataSize >= 2) {\n        [data getBytes:&closeCode length:sizeof(closeCode)];\n        _closeCode = CFSwapInt16BigToHost(closeCode);\n        if (!closeCodeIsValid(_closeCode)) {\n            [self _closeWithProtocolError:[NSString stringWithFormat:@\"Cannot have close code of %d\", _closeCode]];\n            return;\n        }\n        if (dataSize > 2) {\n            _closeReason = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(2, dataSize - 2)] encoding:NSUTF8StringEncoding];\n            if (!_closeReason) {\n                [self _closeWithProtocolError:@\"Close reason MUST be valid UTF-8\"];\n                return;\n            }\n        }\n    } else {\n        _closeCode = SRStatusNoStatusReceived;\n    }\n\n    [self assertOnWorkQueue];\n\n    if (self.readyState == SR_OPEN) {\n        [self closeWithCode:1000 reason:nil];\n    }\n    dispatch_async(_workQueue, ^{\n        [self closeConnection];\n    });\n}\n\n- (void)closeConnection\n{\n    [self assertOnWorkQueue];\n    SRDebugLog(@\"Trying to disconnect\");\n    _closeWhenFinishedWriting = YES;\n    [self _pumpWriting];\n}\n\n- (void)_handleFrameWithData:(NSData *)frameData opCode:(SROpCode)opcode\n{\n    // Check that the current data is valid UTF8\n\n    BOOL isControlFrame = (opcode == SROpCodePing || opcode == SROpCodePong || opcode == SROpCodeConnectionClose);\n    if (isControlFrame) {\n        //frameData will be copied before passing to handlers\n        //otherwise there can be misbehaviours when value at the pointer is changed\n        frameData = [frameData copy];\n\n        dispatch_async(_workQueue, ^{\n            [self _readFrameContinue];\n        });\n    } else {\n        [self _readFrameNew];\n    }\n\n    switch (opcode) {\n        case SROpCodeTextFrame: {\n            NSString *string = [[NSString alloc] initWithData:frameData encoding:NSUTF8StringEncoding];\n            if (!string && frameData) {\n                [self closeWithCode:SRStatusCodeInvalidUTF8 reason:@\"Text frames must be valid UTF-8.\"];\n                dispatch_async(_workQueue, ^{\n                    [self closeConnection];\n                });\n                return;\n            }\n            SRDebugLog(@\"Received text message.\");\n            [self.delegateController performDelegateBlock:^(id<SRWebSocketDelegate>  _Nullable delegate, SRDelegateAvailableMethods availableMethods) {\n                // Don't convert into string - iff `delegate` tells us not to. Otherwise - create UTF8 string and handle that.\n                if (availableMethods.shouldConvertTextFrameToString && ![delegate webSocketShouldConvertTextFrameToString:self]) {\n                    if (availableMethods.didReceiveMessage) {\n                        [delegate webSocket:self didReceiveMessage:frameData];\n                    }\n                    if (availableMethods.didReceiveMessageWithData) {\n                        [delegate webSocket:self didReceiveMessageWithData:frameData];\n                    }\n                } else {\n                    if (availableMethods.didReceiveMessage) {\n                        [delegate webSocket:self didReceiveMessage:string];\n                    }\n                    if (availableMethods.didReceiveMessageWithString) {\n                        [delegate webSocket:self didReceiveMessageWithString:string];\n                    }\n                }\n            }];\n            break;\n        }\n        case SROpCodeBinaryFrame: {\n            SRDebugLog(@\"Received data message.\");\n            [self.delegateController performDelegateBlock:^(id<SRWebSocketDelegate>  _Nullable delegate, SRDelegateAvailableMethods availableMethods) {\n                if (availableMethods.didReceiveMessage) {\n                    [delegate webSocket:self didReceiveMessage:frameData];\n                }\n                if (availableMethods.didReceiveMessageWithData) {\n                    [delegate webSocket:self didReceiveMessageWithData:frameData];\n                }\n            }];\n        }\n            break;\n        case SROpCodeConnectionClose:\n            [self handleCloseWithData:frameData];\n            break;\n        case SROpCodePing:\n            [self _handlePingWithData:frameData];\n            break;\n        case SROpCodePong:\n            [self handlePong:frameData];\n            break;\n        default:\n            [self _closeWithProtocolError:[NSString stringWithFormat:@\"Unknown opcode %ld\", (long)opcode]];\n            // TODO: Handle invalid opcode\n            break;\n    }\n}\n\n- (void)_handleFrameHeader:(frame_header)frame_header curData:(NSData *)curData\n{\n    assert(frame_header.opcode != 0);\n\n    if (self.readyState == SR_CLOSED) {\n        return;\n    }\n\n\n    BOOL isControlFrame = (frame_header.opcode == SROpCodePing || frame_header.opcode == SROpCodePong || frame_header.opcode == SROpCodeConnectionClose);\n\n    if (isControlFrame && !frame_header.fin) {\n        [self _closeWithProtocolError:@\"Fragmented control frames not allowed\"];\n        return;\n    }\n\n    if (isControlFrame && frame_header.payload_length >= 126) {\n        [self _closeWithProtocolError:@\"Control frames cannot have payloads larger than 126 bytes\"];\n        return;\n    }\n\n    if (!isControlFrame) {\n        _currentFrameOpcode = frame_header.opcode;\n        _currentFrameCount += 1;\n    }\n\n    if (frame_header.payload_length == 0) {\n        if (isControlFrame) {\n            [self _handleFrameWithData:curData opCode:frame_header.opcode];\n        } else {\n            if (frame_header.fin) {\n                [self _handleFrameWithData:_currentFrameData opCode:frame_header.opcode];\n            } else {\n                // TODO add assert that opcode is not a control;\n                [self _readFrameContinue];\n            }\n        }\n    } else {\n        assert(frame_header.payload_length <= SIZE_T_MAX);\n        [self _addConsumerWithDataLength:(size_t)frame_header.payload_length callback:^(SRWebSocket *sself, NSData *newData) {\n            if (isControlFrame) {\n                [sself _handleFrameWithData:newData opCode:frame_header.opcode];\n            } else {\n                if (frame_header.fin) {\n                    [sself _handleFrameWithData:sself->_currentFrameData opCode:frame_header.opcode];\n                } else {\n                    // TODO add assert that opcode is not a control;\n                    [sself _readFrameContinue];\n                }\n            }\n        } readToCurrentFrame:!isControlFrame unmaskBytes:frame_header.masked];\n    }\n}\n\n/* From RFC:\n\n 0                   1                   2                   3\n 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n +-+-+-+-+-------+-+-------------+-------------------------------+\n |F|R|R|R| opcode|M| Payload len |    Extended payload length    |\n |I|S|S|S|  (4)  |A|     (7)     |             (16/64)           |\n |N|V|V|V|       |S|             |   (if payload len==126/127)   |\n | |1|2|3|       |K|             |                               |\n +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +\n |     Extended payload length continued, if payload len == 127  |\n + - - - - - - - - - - - - - - - +-------------------------------+\n |                               |Masking-key, if MASK set to 1  |\n +-------------------------------+-------------------------------+\n | Masking-key (continued)       |          Payload Data         |\n +-------------------------------- - - - - - - - - - - - - - - - +\n :                     Payload Data continued ...                :\n + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +\n |                     Payload Data continued ...                |\n +---------------------------------------------------------------+\n */\n\nstatic const uint8_t SRFinMask          = 0x80;\nstatic const uint8_t SROpCodeMask       = 0x0F;\nstatic const uint8_t SRRsvMask          = 0x70;\nstatic const uint8_t SRMaskMask         = 0x80;\nstatic const uint8_t SRPayloadLenMask   = 0x7F;\n\n\n- (void)_readFrameContinue\n{\n    assert((_currentFrameCount == 0 && _currentFrameOpcode == 0) || (_currentFrameCount > 0 && _currentFrameOpcode > 0));\n\n    [self _addConsumerWithDataLength:2 callback:^(SRWebSocket *sself, NSData *data) {\n        __block frame_header header = {0};\n\n        const uint8_t *headerBuffer = data.bytes;\n        assert(data.length >= 2);\n\n        if (headerBuffer[0] & SRRsvMask) {\n            [sself _closeWithProtocolError:@\"Server used RSV bits\"];\n            return;\n        }\n\n        uint8_t receivedOpcode = (SROpCodeMask & headerBuffer[0]);\n\n        BOOL isControlFrame = (receivedOpcode == SROpCodePing || receivedOpcode == SROpCodePong || receivedOpcode == SROpCodeConnectionClose);\n\n        if (!isControlFrame && receivedOpcode != 0 && sself->_currentFrameCount > 0) {\n            [sself _closeWithProtocolError:@\"all data frames after the initial data frame must have opcode 0\"];\n            return;\n        }\n\n        if (receivedOpcode == 0 && sself->_currentFrameCount == 0) {\n            [sself _closeWithProtocolError:@\"cannot continue a message\"];\n            return;\n        }\n\n        header.opcode = receivedOpcode == 0 ? sself->_currentFrameOpcode : receivedOpcode;\n\n        header.fin = !!(SRFinMask & headerBuffer[0]);\n\n\n        header.masked = !!(SRMaskMask & headerBuffer[1]);\n        header.payload_length = SRPayloadLenMask & headerBuffer[1];\n\n        headerBuffer = NULL;\n\n        if (header.masked) {\n            [sself _closeWithProtocolError:@\"Client must receive unmasked data\"];\n            return;\n        }\n\n        size_t extra_bytes_needed = header.masked ? sizeof(sself->_currentReadMaskKey) : 0;\n\n        if (header.payload_length == 126) {\n            extra_bytes_needed += sizeof(uint16_t);\n        } else if (header.payload_length == 127) {\n            extra_bytes_needed += sizeof(uint64_t);\n        }\n\n        if (extra_bytes_needed == 0) {\n            [sself _handleFrameHeader:header curData:sself->_currentFrameData];\n        } else {\n            [sself _addConsumerWithDataLength:extra_bytes_needed callback:^(SRWebSocket *eself, NSData *edata) {\n                size_t mapped_size = edata.length;\n#pragma unused (mapped_size)\n                const void *mapped_buffer = edata.bytes;\n                size_t offset = 0;\n\n                if (header.payload_length == 126) {\n                    assert(mapped_size >= sizeof(uint16_t));\n                    uint16_t payloadLength = 0;\n                    memcpy(&payloadLength, mapped_buffer, sizeof(uint16_t));\n                    payloadLength = CFSwapInt16BigToHost(payloadLength);\n\n                    header.payload_length = payloadLength;\n                    offset += sizeof(uint16_t);\n                } else if (header.payload_length == 127) {\n                    assert(mapped_size >= sizeof(uint64_t));\n                    uint64_t payloadLength = 0;\n                    memcpy(&payloadLength, mapped_buffer, sizeof(uint64_t));\n                    payloadLength = CFSwapInt64BigToHost(payloadLength);\n\n                    header.payload_length = payloadLength;\n                    offset += sizeof(uint64_t);\n                } else {\n                    assert(header.payload_length < 126 && header.payload_length >= 0);\n                }\n\n                if (header.masked) {\n                    assert(mapped_size >= sizeof(eself->_currentReadMaskOffset) + offset);\n                    memcpy(eself->_currentReadMaskKey, ((uint8_t *)mapped_buffer) + offset, sizeof(eself->_currentReadMaskKey));\n                }\n\n                [eself _handleFrameHeader:header curData:eself->_currentFrameData];\n            } readToCurrentFrame:NO unmaskBytes:NO];\n        }\n    } readToCurrentFrame:NO unmaskBytes:NO];\n}\n\n- (void)_readFrameNew\n{\n    dispatch_async(_workQueue, ^{\n        // Don't reset the length, since Apple doesn't guarantee that this will free the memory (and in tests on\n        // some platforms, it doesn't seem to, effectively causing a leak the size of the biggest frame so far).\n        self->_currentFrameData = [[NSMutableData alloc] init];\n\n        self->_currentFrameOpcode = 0;\n        self->_currentFrameCount = 0;\n        self->_readOpCount = 0;\n        self->_currentStringScanPosition = 0;\n\n        [self _readFrameContinue];\n    });\n}\n\n- (void)_pumpWriting\n{\n    [self assertOnWorkQueue];\n\n    NSUInteger dataLength = dispatch_data_get_size(_outputBuffer);\n    if (dataLength - _outputBufferOffset > 0 && _outputStream.hasSpaceAvailable) {\n        __block NSInteger bytesWritten = 0;\n        __block BOOL streamFailed = NO;\n\n        dispatch_data_t dataToSend = dispatch_data_create_subrange(_outputBuffer, _outputBufferOffset, dataLength - _outputBufferOffset);\n        dispatch_data_apply(dataToSend, ^bool(dispatch_data_t region, size_t offset, const void *buffer, size_t size) {\n            NSInteger sentLength = [_outputStream write:buffer maxLength:size];\n            if (sentLength == -1) {\n                streamFailed = YES;\n                return false;\n            }\n            bytesWritten += sentLength;\n            return (sentLength >= (NSInteger)size); // If we can't write all the data into the stream - bail-out early.\n        });\n        if (streamFailed) {\n            NSInteger code = 2145;\n            NSString *description = @\"Error writing to stream.\";\n            NSError *streamError = _outputStream.streamError;\n            NSError *error = streamError ? SRErrorWithCodeDescriptionUnderlyingError(code, description, streamError) : SRErrorWithCodeDescription(code, description);\n            [self _failWithError:error];\n            return;\n        }\n\n        _outputBufferOffset += bytesWritten;\n\n        if (_outputBufferOffset > SRDefaultBufferSize() && _outputBufferOffset > dataLength / 2) {\n            _outputBuffer = dispatch_data_create_subrange(_outputBuffer, _outputBufferOffset, dataLength - _outputBufferOffset);\n            _outputBufferOffset = 0;\n        }\n    }\n\n    if (_closeWhenFinishedWriting &&\n        (dispatch_data_get_size(_outputBuffer) - _outputBufferOffset) == 0 &&\n        (_inputStream.streamStatus != NSStreamStatusNotOpen &&\n         _inputStream.streamStatus != NSStreamStatusClosed) &&\n        !_sentClose) {\n        _sentClose = YES;\n\n        @synchronized(self) {\n            [_outputStream close];\n            [_inputStream close];\n\n\n            for (NSArray *runLoop in [_scheduledRunloops copy]) {\n                [self unscheduleFromRunLoop:[runLoop objectAtIndex:0] forMode:[runLoop objectAtIndex:1]];\n            }\n        }\n\n        if (!_failed) {\n            [self.delegateController performDelegateBlock:^(id<SRWebSocketDelegate>  _Nullable delegate, SRDelegateAvailableMethods availableMethods) {\n                if (availableMethods.didCloseWithCode) {\n                    [delegate webSocket:self didCloseWithCode:self->_closeCode reason:self->_closeReason wasClean:YES];\n                }\n            }];\n        }\n\n        [self _scheduleCleanup];\n    }\n}\n\n- (void)_addConsumerWithScanner:(stream_scanner)consumer callback:(data_callback)callback\n{\n    [self assertOnWorkQueue];\n    [self _addConsumerWithScanner:consumer callback:callback dataLength:0];\n}\n\n- (void)_addConsumerWithDataLength:(size_t)dataLength callback:(data_callback)callback readToCurrentFrame:(BOOL)readToCurrentFrame unmaskBytes:(BOOL)unmaskBytes\n{\n    [self assertOnWorkQueue];\n    assert(dataLength);\n\n    [_consumers addObject:[_consumerPool consumerWithScanner:nil handler:callback bytesNeeded:dataLength readToCurrentFrame:readToCurrentFrame unmaskBytes:unmaskBytes]];\n    [self _pumpScanner];\n}\n\n- (void)_addConsumerWithScanner:(stream_scanner)consumer callback:(data_callback)callback dataLength:(size_t)dataLength\n{\n    [self assertOnWorkQueue];\n    [_consumers addObject:[_consumerPool consumerWithScanner:consumer handler:callback bytesNeeded:dataLength readToCurrentFrame:NO unmaskBytes:NO]];\n    [self _pumpScanner];\n}\n\n\n- (void)_scheduleCleanup\n{\n    @synchronized(self) {\n        if (_cleanupScheduled) {\n            return;\n        }\n\n        _cleanupScheduled = YES;\n\n        // Cleanup NSStream delegate's in the same RunLoop used by the streams themselves:\n        // This way we'll prevent race conditions between handleEvent and SRWebsocket's dealloc\n        NSTimer *timer = [NSTimer timerWithTimeInterval:(0.0f) target:self selector:@selector(_cleanupSelfReference:) userInfo:nil repeats:NO];\n        [[NSRunLoop SR_networkRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];\n    }\n}\n\n- (void)_cleanupSelfReference:(NSTimer *)timer\n{\n    @synchronized(self) {\n        // Nuke NSStream delegate's\n        _inputStream.delegate = nil;\n        _outputStream.delegate = nil;\n\n        // Remove the streams, right now, from the networkRunLoop\n        [_inputStream close];\n        [_outputStream close];\n    }\n\n    // Cleanup selfRetain in the same GCD queue as usual\n    dispatch_async(_workQueue, ^{\n        self->_selfRetain = nil;\n    });\n}\n\n\nstatic const char CRLFCRLFBytes[] = {'\\r', '\\n', '\\r', '\\n'};\n\n- (void)_readUntilHeaderCompleteWithCallback:(data_callback)dataHandler\n{\n    [self _readUntilBytes:CRLFCRLFBytes length:sizeof(CRLFCRLFBytes) callback:dataHandler];\n}\n\n- (void)_readUntilBytes:(const void *)bytes length:(size_t)length callback:(data_callback)dataHandler\n{\n    // TODO optimize so this can continue from where we last searched\n    stream_scanner consumer = ^size_t(NSData *data) {\n        __block size_t found_size = 0;\n        __block size_t match_count = 0;\n\n        size_t size = data.length;\n        const unsigned char *buffer = data.bytes;\n        for (size_t i = 0; i < size; i++ ) {\n            if (((const unsigned char *)buffer)[i] == ((const unsigned char *)bytes)[match_count]) {\n                match_count += 1;\n                if (match_count == length) {\n                    found_size = i + 1;\n                    break;\n                }\n            } else {\n                match_count = 0;\n            }\n        }\n        return found_size;\n    };\n    [self _addConsumerWithScanner:consumer callback:dataHandler];\n}\n\n\n// Returns true if did work\n- (BOOL)_innerPumpScanner {\n\n    BOOL didWork = NO;\n\n    if (self.readyState >= SR_CLOSED) {\n        return didWork;\n    }\n\n    size_t readBufferSize = dispatch_data_get_size(_readBuffer);\n\n    if (!_consumers.count) {\n        return didWork;\n    }\n\n    size_t curSize = readBufferSize - _readBufferOffset;\n    if (!curSize) {\n        return didWork;\n    }\n\n    SRIOConsumer *consumer = [_consumers objectAtIndex:0];\n\n    size_t bytesNeeded = consumer.bytesNeeded;\n\n    size_t foundSize = 0;\n    if (consumer.consumer) {\n        NSData *subdata = (NSData *)dispatch_data_create_subrange(_readBuffer, _readBufferOffset, readBufferSize - _readBufferOffset);\n        foundSize = consumer.consumer(subdata);\n    } else {\n        assert(consumer.bytesNeeded);\n        if (curSize >= bytesNeeded) {\n            foundSize = bytesNeeded;\n        } else if (consumer.readToCurrentFrame) {\n            foundSize = curSize;\n        }\n    }\n\n    if (consumer.readToCurrentFrame || foundSize) {\n        dispatch_data_t slice = dispatch_data_create_subrange(_readBuffer, _readBufferOffset, foundSize);\n\n        _readBufferOffset += foundSize;\n\n        if (_readBufferOffset > SRDefaultBufferSize() && _readBufferOffset > readBufferSize / 2) {\n            _readBuffer = dispatch_data_create_subrange(_readBuffer, _readBufferOffset, readBufferSize - _readBufferOffset);\n            _readBufferOffset = 0;\n        }\n\n        if (consumer.unmaskBytes) {\n            __block NSMutableData *mutableSlice = [slice mutableCopy];\n\n            NSUInteger len = mutableSlice.length;\n            uint8_t *bytes = mutableSlice.mutableBytes;\n\n            for (NSUInteger i = 0; i < len; i++) {\n                bytes[i] = bytes[i] ^ _currentReadMaskKey[_currentReadMaskOffset % sizeof(_currentReadMaskKey)];\n                _currentReadMaskOffset += 1;\n            }\n\n            slice = dispatch_data_create(bytes, len, nil, ^{\n                mutableSlice = nil;\n            });\n        }\n\n        if (consumer.readToCurrentFrame) {\n            dispatch_data_apply(slice, ^bool(dispatch_data_t region, size_t offset, const void *buffer, size_t size) {\n                [_currentFrameData appendBytes:buffer length:size];\n                return true;\n            });\n\n            _readOpCount += 1;\n\n            if (_currentFrameOpcode == SROpCodeTextFrame) {\n                // Validate UTF8 stuff.\n                size_t currentDataSize = _currentFrameData.length;\n                if (_currentFrameOpcode == SROpCodeTextFrame && currentDataSize > 0) {\n                    // TODO: Optimize the crap out of this.  Don't really have to copy all the data each time\n\n                    size_t scanSize = currentDataSize - _currentStringScanPosition;\n\n                    NSData *scan_data = [_currentFrameData subdataWithRange:NSMakeRange(_currentStringScanPosition, scanSize)];\n                    int32_t valid_utf8_size = validate_dispatch_data_partial_string(scan_data);\n\n                    if (valid_utf8_size == -1) {\n                        [self closeWithCode:SRStatusCodeInvalidUTF8 reason:@\"Text frames must be valid UTF-8\"];\n                        dispatch_async(_workQueue, ^{\n                            [self closeConnection];\n                        });\n                        return didWork;\n                    } else {\n                        _currentStringScanPosition += valid_utf8_size;\n                    }\n                }\n\n            }\n\n            consumer.bytesNeeded -= foundSize;\n\n            if (consumer.bytesNeeded == 0) {\n                [_consumers removeObjectAtIndex:0];\n                consumer.handler(self, nil);\n                [_consumerPool returnConsumer:consumer];\n                didWork = YES;\n            }\n        } else if (foundSize) {\n            [_consumers removeObjectAtIndex:0];\n            consumer.handler(self, (NSData *)slice);\n            [_consumerPool returnConsumer:consumer];\n            didWork = YES;\n        }\n    }\n    return didWork;\n}\n\n-(void)_pumpScanner\n{\n    [self assertOnWorkQueue];\n\n    if (!_isPumping) {\n        _isPumping = YES;\n    } else {\n        return;\n    }\n\n    while ([self _innerPumpScanner]) {\n\n    }\n\n    _isPumping = NO;\n}\n\n//#define NOMASK\n\nstatic const size_t SRFrameHeaderOverhead = 32;\n\n- (void)_sendFrameWithOpcode:(SROpCode)opCode data:(NSData *)data\n{\n    [self assertOnWorkQueue];\n\n    if (!data) {\n        return;\n    }\n\n    size_t payloadLength = data.length;\n\n    NSMutableData *frameData = [[NSMutableData alloc] initWithLength:payloadLength + SRFrameHeaderOverhead];\n    if (!frameData) {\n        [self closeWithCode:SRStatusCodeMessageTooBig reason:@\"Message too big\"];\n        return;\n    }\n    uint8_t *frameBuffer = (uint8_t *)frameData.mutableBytes;\n\n    // set fin\n    frameBuffer[0] = SRFinMask | opCode;\n\n    // set the mask and header\n    frameBuffer[1] |= SRMaskMask;\n\n    size_t frameBufferSize = 2;\n\n    if (payloadLength < 126) {\n        frameBuffer[1] |= payloadLength;\n    } else {\n        uint64_t declaredPayloadLength = 0;\n        size_t declaredPayloadLengthSize = 0;\n\n        if (payloadLength <= UINT16_MAX) {\n            frameBuffer[1] |= 126;\n\n            declaredPayloadLength = CFSwapInt16BigToHost((uint16_t)payloadLength);\n            declaredPayloadLengthSize = sizeof(uint16_t);\n        } else {\n            frameBuffer[1] |= 127;\n\n            declaredPayloadLength = CFSwapInt64BigToHost((uint64_t)payloadLength);\n            declaredPayloadLengthSize = sizeof(uint64_t);\n        }\n\n        memcpy((frameBuffer + frameBufferSize), &declaredPayloadLength, declaredPayloadLengthSize);\n        frameBufferSize += declaredPayloadLengthSize;\n    }\n\n    const uint8_t *unmaskedPayloadBuffer = (uint8_t *)data.bytes;\n    uint8_t *maskKey = frameBuffer + frameBufferSize;\n    \n    size_t randomBytesSize = sizeof(uint32_t);\n    NSData *randomData = SRRandomData(randomBytesSize);\n    [randomData getBytes:maskKey range:NSMakeRange(0, randomBytesSize)];\n    frameBufferSize += randomBytesSize;\n\n    // Copy and unmask the buffer\n    uint8_t *frameBufferPayloadPointer = frameBuffer + frameBufferSize;\n\n    memcpy(frameBufferPayloadPointer, unmaskedPayloadBuffer, payloadLength);\n    SRMaskBytesSIMD(frameBufferPayloadPointer, payloadLength, maskKey);\n    frameBufferSize += payloadLength;\n\n    assert(frameBufferSize <= frameData.length);\n    frameData.length = frameBufferSize;\n\n    [self _writeData:frameData];\n}\n\n- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode\n{\n    __weak typeof(self) wself = self;\n\n    if (_requestRequiresSSL && !_streamSecurityValidated &&\n        (eventCode == NSStreamEventHasBytesAvailable || eventCode == NSStreamEventHasSpaceAvailable)) {\n        SecTrustRef trust = (__bridge SecTrustRef)[aStream propertyForKey:(__bridge id)kCFStreamPropertySSLPeerTrust];\n        if (trust) {\n            _streamSecurityValidated = [_securityPolicy evaluateServerTrust:trust forDomain:_urlRequest.URL.host];\n        }\n        if (!_streamSecurityValidated) {\n            dispatch_async(_workQueue, ^{\n                NSError *error = SRErrorWithDomainCodeDescription(NSURLErrorDomain,\n                                                                  NSURLErrorClientCertificateRejected,\n                                                                  @\"Invalid server certificate.\");\n                [wself _failWithError:error];\n            });\n            return;\n        }\n        dispatch_async(_workQueue, ^{\n            [self didConnect];\n        });\n    }\n    dispatch_async(_workQueue, ^{\n        [wself safeHandleEvent:eventCode stream:aStream];\n    });\n}\n\n- (void)safeHandleEvent:(NSStreamEvent)eventCode stream:(NSStream *)aStream\n{\n    switch (eventCode) {\n        case NSStreamEventOpenCompleted: {\n            SRDebugLog(@\"NSStreamEventOpenCompleted %@\", aStream);\n            if (self.readyState >= SR_CLOSING) {\n                return;\n            }\n            assert(_readBuffer);\n\n            if (!_requestRequiresSSL && self.readyState == SR_CONNECTING && aStream == _inputStream) {\n                [self didConnect];\n            }\n\n            [self _pumpWriting];\n            [self _pumpScanner];\n\n            break;\n        }\n\n        case NSStreamEventErrorOccurred: {\n            SRDebugLog(@\"NSStreamEventErrorOccurred %@ %@\", aStream, [[aStream streamError] copy]);\n            /// TODO specify error better!\n            [self _failWithError:aStream.streamError];\n            _readBufferOffset = 0;\n            _readBuffer = dispatch_data_empty;\n            break;\n\n        }\n\n        case NSStreamEventEndEncountered: {\n            [self _pumpScanner];\n            SRDebugLog(@\"NSStreamEventEndEncountered %@\", aStream);\n            if (aStream.streamError) {\n                [self _failWithError:aStream.streamError];\n            } else {\n                dispatch_async(_workQueue, ^{\n                    if (self.readyState != SR_CLOSED) {\n                        self.readyState = SR_CLOSED;\n                        [self _scheduleCleanup];\n                    }\n\n                    if (!self->_sentClose && !self->_failed) {\n                        self->_sentClose = YES;\n                        // If we get closed in this state it's probably not clean because we should be sending this when we send messages\n                        [self.delegateController performDelegateBlock:^(id<SRWebSocketDelegate>  _Nullable delegate, SRDelegateAvailableMethods availableMethods) {\n                            if (availableMethods.didCloseWithCode) {\n                                [delegate webSocket:self\n                                   didCloseWithCode:SRStatusCodeGoingAway\n                                             reason:@\"Stream end encountered\"\n                                           wasClean:NO];\n                            }\n                        }];\n                    }\n                });\n            }\n\n            break;\n        }\n\n        case NSStreamEventHasBytesAvailable: {\n            SRDebugLog(@\"NSStreamEventHasBytesAvailable %@\", aStream);\n            uint8_t buffer[SRDefaultBufferSize()];\n\n            while (_inputStream.hasBytesAvailable) {\n                NSInteger bytesRead = [_inputStream read:buffer maxLength:SRDefaultBufferSize()];\n                if (bytesRead > 0) {\n                    dispatch_data_t data = dispatch_data_create(buffer, bytesRead, nil, DISPATCH_DATA_DESTRUCTOR_DEFAULT);\n                    if (!data) {\n                        NSError *error = SRErrorWithCodeDescription(SRStatusCodeMessageTooBig,\n                                                                    @\"Unable to allocate memory to read from socket.\");\n                        [self _failWithError:error];\n                        return;\n                    }\n                    _readBuffer = dispatch_data_create_concat(_readBuffer, data);\n                } else if (bytesRead == -1) {\n                    [self _failWithError:_inputStream.streamError];\n                }\n            }\n            [self _pumpScanner];\n            break;\n        }\n\n        case NSStreamEventHasSpaceAvailable: {\n            SRDebugLog(@\"NSStreamEventHasSpaceAvailable %@\", aStream);\n            [self _pumpWriting];\n            break;\n        }\n\n        case NSStreamEventNone:\n            SRDebugLog(@\"(default)  %@\", aStream);\n            break;\n    }\n}\n\n///--------------------------------------\n#pragma mark - Delegate\n///--------------------------------------\n\n- (id<SRWebSocketDelegate> _Nullable)delegate\n{\n    return self.delegateController.delegate;\n}\n\n- (void)setDelegate:(id<SRWebSocketDelegate> _Nullable)delegate\n{\n    self.delegateController.delegate = delegate;\n}\n\n- (void)setDelegateDispatchQueue:(dispatch_queue_t _Nullable)queue\n{\n    self.delegateController.dispatchQueue = queue;\n}\n\n- (dispatch_queue_t _Nullable)delegateDispatchQueue\n{\n    return self.delegateController.dispatchQueue;\n}\n\n- (void)setDelegateOperationQueue:(NSOperationQueue *_Nullable)queue\n{\n    self.delegateController.operationQueue = queue;\n}\n\n- (NSOperationQueue *_Nullable)delegateOperationQueue\n{\n    return self.delegateController.operationQueue;\n}\n\n@end\n\n#ifdef HAS_ICU\n\nstatic inline int32_t validate_dispatch_data_partial_string(NSData *data) {\n    if ([data length] > INT32_MAX) {\n        // INT32_MAX is the limit so long as this Framework is using 32 bit ints everywhere.\n        return -1;\n    }\n\n    int32_t size = (int32_t)[data length];\n\n    const void * contents = [data bytes];\n    const uint8_t *str = (const uint8_t *)contents;\n\n    UChar32 codepoint = 1;\n    int32_t offset = 0;\n    int32_t lastOffset = 0;\n    while(offset < size && codepoint > 0)  {\n        lastOffset = offset;\n        U8_NEXT(str, offset, size, codepoint);\n    }\n\n    if (codepoint == -1) {\n        // Check to see if the last byte is valid or whether it was just continuing\n        if (!U8_IS_LEAD(str[lastOffset]) || U8_COUNT_TRAIL_BYTES(str[lastOffset]) + lastOffset < (int32_t)size) {\n\n            size = -1;\n        } else {\n            uint8_t leadByte = str[lastOffset];\n            U8_MASK_LEAD_BYTE(leadByte, U8_COUNT_TRAIL_BYTES(leadByte));\n\n            for (int i = lastOffset + 1; i < offset; i++) {\n                if (U8_IS_SINGLE(str[i]) || U8_IS_LEAD(str[i]) || !U8_IS_TRAIL(str[i])) {\n                    size = -1;\n                }\n            }\n\n            if (size != -1) {\n                size = lastOffset;\n            }\n        }\n    }\n\n    if (size != -1 && ![[NSString alloc] initWithBytesNoCopy:(char *)[data bytes] length:size encoding:NSUTF8StringEncoding freeWhenDone:NO]) {\n        size = -1;\n    }\n\n    return size;\n}\n\n#else\n\n// This is a hack, and probably not optimal\nstatic inline int32_t validate_dispatch_data_partial_string(NSData *data) {\n    static const int maxCodepointSize = 3;\n\n    for (int i = 0; i < maxCodepointSize; i++) {\n        NSString *str = [[NSString alloc] initWithBytesNoCopy:(char *)data.bytes length:data.length - i encoding:NSUTF8StringEncoding freeWhenDone:NO];\n        if (str) {\n            return (int32_t)data.length - i;\n        }\n    }\n\n    return -1;\n}\n\n#endif\n"
  },
  {
    "path": "native/iosTest/Pods/SocketRocket/SocketRocket/SocketRocket.h",
    "content": "//\n// Copyright 2012 Square Inc.\n// Portions Copyright (c) 2016-present, Facebook, Inc.\n//\n// All rights reserved.\n//\n// This source code is licensed under the BSD-style license found in the\n// LICENSE file in the root directory of this source tree. An additional grant\n// of patent rights can be found in the PATENTS file in the same directory.\n//\n\n#import <SocketRocket/NSRunLoop+SRWebSocket.h>\n#import <SocketRocket/NSURLRequest+SRWebSocket.h>\n#import <SocketRocket/SRSecurityPolicy.h>\n#import <SocketRocket/SRWebSocket.h>\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/DoubleConversion/DoubleConversion-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_DoubleConversion : NSObject\n@end\n@implementation PodsDummy_DoubleConversion\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/DoubleConversion/DoubleConversion-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/DoubleConversion/DoubleConversion-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n#import \"double-conversion/bignum-dtoa.h\"\n#import \"double-conversion/bignum.h\"\n#import \"double-conversion/cached-powers.h\"\n#import \"double-conversion/diy-fp.h\"\n#import \"double-conversion/double-conversion.h\"\n#import \"double-conversion/fast-dtoa.h\"\n#import \"double-conversion/fixed-dtoa.h\"\n#import \"double-conversion/ieee.h\"\n#import \"double-conversion/strtod.h\"\n#import \"double-conversion/utils.h\"\n\nFOUNDATION_EXPORT double DoubleConversionVersionNumber;\nFOUNDATION_EXPORT const unsigned char DoubleConversionVersionString[];\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/DoubleConversion/DoubleConversion.debug.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/DoubleConversion\nDEFINES_MODULE = YES\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/DoubleConversion\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/DoubleConversion\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/DoubleConversion/DoubleConversion.modulemap",
    "content": "module DoubleConversion {\n  umbrella header \"DoubleConversion-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/DoubleConversion/DoubleConversion.release.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/DoubleConversion\nDEFINES_MODULE = YES\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/DoubleConversion\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/DoubleConversion\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/FBLazyVector/FBLazyVector.debug.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FBLazyVector\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/FBLazyVector\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/Libraries/FBLazyVector\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/FBLazyVector/FBLazyVector.release.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FBLazyVector\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/FBLazyVector\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/Libraries/FBLazyVector\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Pods-WatermelonTester/Pods-WatermelonTester-acknowledgements.markdown",
    "content": "# Acknowledgements\nThis application makes use of the following third party libraries:\n\n## DoubleConversion\n\nCopyright 2006-2011, the V8 project authors. All rights reserved.\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google Inc. nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\n## RCT-Folly\n\n\n                                 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\nFiles in folly/external/farmhash licensed as follows\n\n    Copyright (c) 2014 Google, Inc.\n\n    Permission is hereby granted, free of charge, to any person obtaining a copy\n    of this software and associated documentation files (the \"Software\"), to deal\n    in the Software without restriction, including without limitation the rights\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the Software is\n    furnished to do so, subject to the following conditions:\n\n    The above copyright notice and this permission notice shall be included in\n    all copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n    THE SOFTWARE.\n\n\n## React\n\nMIT License\n\nCopyright (c) Meta Platforms, Inc. and affiliates.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n## React-Core\n\nMIT License\n\nCopyright (c) Meta Platforms, Inc. and affiliates.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n## SocketRocket\n\nBSD License\n\nFor SocketRocket software\n\nCopyright (c) 2016-present, Facebook, Inc. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n   list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution.\n\n * Neither the name Facebook nor the names of its contributors may be used to\n   endorse or promote products derived from this software without specific\n   prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n## WatermelonDB\n\nMIT License\n\nCopyright (c) Nozbe\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n## boost\n\nBoost Software License - Version 1.0 - August 17th, 2003\n\nPermission is hereby granted, free of charge, to any person or organization\nobtaining a copy of the software and accompanying documentation covered by\nthis license (the \"Software\") to use, reproduce, display, distribute,\nexecute, and transmit the Software, and to prepare derivative works of the\nSoftware, and to permit third-parties to whom the Software is furnished to\ndo so, all subject to the following:\n\nThe copyright notices in the Software and this entire statement, including\nthe above license grant, this restriction and the following disclaimer,\nmust be included in all copies of the Software, in whole or in part, and\nall derivative works of the Software, unless such copies or derivative\nworks are solely in the form of machine-executable object code generated by\na source language processor.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT\nSHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE\nFOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,\nARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE.\n\n\n## fmt\n\nCopyright (c) 2012 - present, Victor Zverovich\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n--- Optional exception to the license ---\n\nAs an exception, if, as a result of your compiling your source code, portions\nof this Software are embedded into a machine-executable object form of such\nsource code, you may redistribute such embedded portions in such object form\nwithout including the above copyright and permission notices.\n\n\n## glog\n\nCopyright (c) 2008, Google Inc.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n    * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\nA function gettimeofday in utilities.cc is based on\n\nhttp://www.google.com/codesearch/p?hl=en#dR3YEbitojA/COPYING&q=GetSystemTimeAsFileTime%20license:bsd\n\nThe license of this code is:\n\nCopyright (c) 2003-2008, Jouni Malinen <j@w1.fi> and contributors\nAll Rights Reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in the\n   documentation and/or other materials provided with the distribution.\n\n3. Neither the name(s) of the above-listed copyright holder(s) nor the\n   names of its contributors may be used to endorse or promote products\n   derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\n## hermes-engine\n\nMIT License\n\nCopyright (c) Meta Platforms, Inc. and affiliates.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n## simdjson\n\n                                 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 2018-2019 The simdjson authors\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.\n\nGenerated by CocoaPods - https://cocoapods.org\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Pods-WatermelonTester/Pods-WatermelonTester-acknowledgements.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>PreferenceSpecifiers</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>This application makes use of the following third party libraries:</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>Acknowledgements</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Copyright 2006-2011, the V8 project authors. All rights reserved.\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google Inc. nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>DoubleConversion</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>\n                                 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\nFiles in folly/external/farmhash licensed as follows\n\n    Copyright (c) 2014 Google, Inc.\n\n    Permission is hereby granted, free of charge, to any person obtaining a copy\n    of this software and associated documentation files (the \"Software\"), to deal\n    in the Software without restriction, including without limitation the rights\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the Software is\n    furnished to do so, subject to the following conditions:\n\n    The above copyright notice and this permission notice shall be included in\n    all copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n    THE SOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>Apache License, Version 2.0</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>RCT-Folly</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>MIT License\n\nCopyright (c) Meta Platforms, Inc. and affiliates.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>React</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>MIT License\n\nCopyright (c) Meta Platforms, Inc. and affiliates.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>React-Core</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>BSD License\n\nFor SocketRocket software\n\nCopyright (c) 2016-present, Facebook, Inc. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n   list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution.\n\n * Neither the name Facebook nor the names of its contributors may be used to\n   endorse or promote products derived from this software without specific\n   prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</string>\n\t\t\t<key>License</key>\n\t\t\t<string>BSD</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>SocketRocket</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>MIT License\n\nCopyright (c) Nozbe\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>WatermelonDB</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Boost Software License - Version 1.0 - August 17th, 2003\n\nPermission is hereby granted, free of charge, to any person or organization\nobtaining a copy of the software and accompanying documentation covered by\nthis license (the \"Software\") to use, reproduce, display, distribute,\nexecute, and transmit the Software, and to prepare derivative works of the\nSoftware, and to permit third-parties to whom the Software is furnished to\ndo so, all subject to the following:\n\nThe copyright notices in the Software and this entire statement, including\nthe above license grant, this restriction and the following disclaimer,\nmust be included in all copies of the Software, in whole or in part, and\nall derivative works of the Software, unless such copies or derivative\nworks are solely in the form of machine-executable object code generated by\na source language processor.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT\nSHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE\nFOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,\nARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>Boost Software License</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>boost</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Copyright (c) 2012 - present, Victor Zverovich\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n--- Optional exception to the license ---\n\nAs an exception, if, as a result of your compiling your source code, portions\nof this Software are embedded into a machine-executable object form of such\nsource code, you may redistribute such embedded portions in such object form\nwithout including the above copyright and permission notices.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>fmt</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Copyright (c) 2008, Google Inc.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n    * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\nA function gettimeofday in utilities.cc is based on\n\nhttp://www.google.com/codesearch/p?hl=en#dR3YEbitojA/COPYING&amp;q=GetSystemTimeAsFileTime%20license:bsd\n\nThe license of this code is:\n\nCopyright (c) 2003-2008, Jouni Malinen &lt;j@w1.fi&gt; and contributors\nAll Rights Reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in the\n   documentation and/or other materials provided with the distribution.\n\n3. Neither the name(s) of the above-listed copyright holder(s) nor the\n   names of its contributors may be used to endorse or promote products\n   derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>Google</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>glog</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>MIT License\n\nCopyright (c) Meta Platforms, Inc. and affiliates.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>hermes-engine</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>                                 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 2018-2019 The simdjson authors\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.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>Apache-2.0</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>simdjson</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Generated by CocoaPods - https://cocoapods.org</string>\n\t\t\t<key>Title</key>\n\t\t\t<string></string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t</array>\n\t<key>StringsTable</key>\n\t<string>Acknowledgements</string>\n\t<key>Title</key>\n\t<string>Acknowledgements</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Pods-WatermelonTester/Pods-WatermelonTester-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_Pods_WatermelonTester : NSObject\n@end\n@implementation PodsDummy_Pods_WatermelonTester\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Pods-WatermelonTester/Pods-WatermelonTester-frameworks-Debug-input-files.xcfilelist",
    "content": "${PODS_ROOT}/Target Support Files/Pods-WatermelonTester/Pods-WatermelonTester-frameworks.sh\n${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Pods-WatermelonTester/Pods-WatermelonTester-frameworks-Debug-output-files.xcfilelist",
    "content": "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Pods-WatermelonTester/Pods-WatermelonTester-frameworks-Release-input-files.xcfilelist",
    "content": "${PODS_ROOT}/Target Support Files/Pods-WatermelonTester/Pods-WatermelonTester-frameworks.sh\n${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Pods-WatermelonTester/Pods-WatermelonTester-frameworks-Release-output-files.xcfilelist",
    "content": "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Pods-WatermelonTester/Pods-WatermelonTester-frameworks.sh",
    "content": "#!/bin/sh\nset -e\nset -u\nset -o pipefail\n\nfunction on_error {\n  echo \"$(realpath -mq \"${0}\"):$1: error: Unexpected failure\"\n}\ntrap 'on_error $LINENO' ERR\n\nif [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then\n  # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy\n  # frameworks to, so exit 0 (signalling the script phase was successful).\n  exit 0\nfi\n\necho \"mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\nmkdir -p \"${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n\nCOCOAPODS_PARALLEL_CODE_SIGN=\"${COCOAPODS_PARALLEL_CODE_SIGN:-false}\"\nSWIFT_STDLIB_PATH=\"${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}\"\nBCSYMBOLMAP_DIR=\"BCSymbolMaps\"\n\n\n# This protects against multiple targets copying the same framework dependency at the same time. The solution\n# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html\nRSYNC_PROTECT_TMP_FILES=(--filter \"P .*.??????\")\n\n# Copies and strips a vendored framework\ninstall_framework()\n{\n  if [ -r \"${BUILT_PRODUCTS_DIR}/$1\" ]; then\n    local source=\"${BUILT_PRODUCTS_DIR}/$1\"\n  elif [ -r \"${BUILT_PRODUCTS_DIR}/$(basename \"$1\")\" ]; then\n    local source=\"${BUILT_PRODUCTS_DIR}/$(basename \"$1\")\"\n  elif [ -r \"$1\" ]; then\n    local source=\"$1\"\n  fi\n\n  local destination=\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n\n  if [ -L \"${source}\" ]; then\n    echo \"Symlinked...\"\n    source=\"$(readlink -f \"${source}\")\"\n  fi\n\n  if [ -d \"${source}/${BCSYMBOLMAP_DIR}\" ]; then\n    # Locate and install any .bcsymbolmaps if present, and remove them from the .framework before the framework is copied\n    find \"${source}/${BCSYMBOLMAP_DIR}\" -name \"*.bcsymbolmap\"|while read f; do\n      echo \"Installing $f\"\n      install_bcsymbolmap \"$f\" \"$destination\"\n      rm \"$f\"\n    done\n    rmdir \"${source}/${BCSYMBOLMAP_DIR}\"\n  fi\n\n  # Use filter instead of exclude so missing patterns don't throw errors.\n  echo \"rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --links --filter \\\"- CVS/\\\" --filter \\\"- .svn/\\\" --filter \\\"- .git/\\\" --filter \\\"- .hg/\\\" --filter \\\"- Headers\\\" --filter \\\"- PrivateHeaders\\\" --filter \\\"- Modules\\\" \\\"${source}\\\" \\\"${destination}\\\"\"\n  rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"\n\n  local basename\n  basename=\"$(basename -s .framework \"$1\")\"\n  binary=\"${destination}/${basename}.framework/${basename}\"\n\n  if ! [ -r \"$binary\" ]; then\n    binary=\"${destination}/${basename}\"\n  elif [ -L \"${binary}\" ]; then\n    echo \"Destination binary is symlinked...\"\n    dirname=\"$(dirname \"${binary}\")\"\n    binary=\"${dirname}/$(readlink \"${binary}\")\"\n  fi\n\n  # Strip invalid architectures so \"fat\" simulator / device frameworks work on device\n  if [[ \"$(file \"$binary\")\" == *\"dynamically linked shared library\"* ]]; then\n    strip_invalid_archs \"$binary\"\n  fi\n\n  # Resign the code if required by the build settings to avoid unstable apps\n  code_sign_if_enabled \"${destination}/$(basename \"$1\")\"\n\n  # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.\n  if [ \"${XCODE_VERSION_MAJOR}\" -lt 7 ]; then\n    local swift_runtime_libs\n    swift_runtime_libs=$(xcrun otool -LX \"$binary\" | grep --color=never @rpath/libswift | sed -E s/@rpath\\\\/\\(.+dylib\\).*/\\\\1/g | uniq -u)\n    for lib in $swift_runtime_libs; do\n      echo \"rsync -auv \\\"${SWIFT_STDLIB_PATH}/${lib}\\\" \\\"${destination}\\\"\"\n      rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"\n      code_sign_if_enabled \"${destination}/${lib}\"\n    done\n  fi\n}\n# Copies and strips a vendored dSYM\ninstall_dsym() {\n  local source=\"$1\"\n  warn_missing_arch=${2:-true}\n  if [ -r \"$source\" ]; then\n    # Copy the dSYM into the targets temp dir.\n    echo \"rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --filter \\\"- CVS/\\\" --filter \\\"- .svn/\\\" --filter \\\"- .git/\\\" --filter \\\"- .hg/\\\" --filter \\\"- Headers\\\" --filter \\\"- PrivateHeaders\\\" --filter \\\"- Modules\\\" \\\"${source}\\\" \\\"${DERIVED_FILES_DIR}\\\"\"\n    rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"\n\n    local basename\n    basename=\"$(basename -s .dSYM \"$source\")\"\n    binary_name=\"$(ls \"$source/Contents/Resources/DWARF\")\"\n    binary=\"${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}\"\n\n    # Strip invalid architectures from the dSYM.\n    if [[ \"$(file \"$binary\")\" == *\"Mach-O \"*\"dSYM companion\"* ]]; then\n      strip_invalid_archs \"$binary\" \"$warn_missing_arch\"\n    fi\n    if [[ $STRIP_BINARY_RETVAL == 0 ]]; then\n      # Move the stripped file into its final destination.\n      echo \"rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --links --filter \\\"- CVS/\\\" --filter \\\"- .svn/\\\" --filter \\\"- .git/\\\" --filter \\\"- .hg/\\\" --filter \\\"- Headers\\\" --filter \\\"- PrivateHeaders\\\" --filter \\\"- Modules\\\" \\\"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\\\" \\\"${DWARF_DSYM_FOLDER_PATH}\\\"\"\n      rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"\n    else\n      # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing.\n      mkdir -p \"${DWARF_DSYM_FOLDER_PATH}\"\n      touch \"${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM\"\n    fi\n  fi\n}\n\n# Used as a return value for each invocation of `strip_invalid_archs` function.\nSTRIP_BINARY_RETVAL=0\n\n# Strip invalid architectures\nstrip_invalid_archs() {\n  binary=\"$1\"\n  warn_missing_arch=${2:-true}\n  # Get architectures for current target binary\n  binary_archs=\"$(lipo -info \"$binary\" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)\"\n  # Intersect them with the architectures we are building for\n  intersected_archs=\"$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\\n' | sort | uniq -d)\"\n  # If there are no archs supported by this binary then warn the user\n  if [[ -z \"$intersected_archs\" ]]; then\n    if [[ \"$warn_missing_arch\" == \"true\" ]]; then\n      echo \"warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS).\"\n    fi\n    STRIP_BINARY_RETVAL=1\n    return\n  fi\n  stripped=\"\"\n  for arch in $binary_archs; do\n    if ! [[ \"${ARCHS}\" == *\"$arch\"* ]]; then\n      # Strip non-valid architectures in-place\n      lipo -remove \"$arch\" -output \"$binary\" \"$binary\"\n      stripped=\"$stripped $arch\"\n    fi\n  done\n  if [[ \"$stripped\" ]]; then\n    echo \"Stripped $binary of architectures:$stripped\"\n  fi\n  STRIP_BINARY_RETVAL=0\n}\n\n# Copies the bcsymbolmap files of a vendored framework\ninstall_bcsymbolmap() {\n    local bcsymbolmap_path=\"$1\"\n    local destination=\"${BUILT_PRODUCTS_DIR}\"\n    echo \"rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${bcsymbolmap_path}\" \"${destination}\"\"\n    rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${bcsymbolmap_path}\" \"${destination}\"\n}\n\n# Signs a framework with the provided identity\ncode_sign_if_enabled() {\n  if [ -n \"${EXPANDED_CODE_SIGN_IDENTITY:-}\" -a \"${CODE_SIGNING_REQUIRED:-}\" != \"NO\" -a \"${CODE_SIGNING_ALLOWED}\" != \"NO\" ]; then\n    # Use the current code_sign_identity\n    echo \"Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}\"\n    local code_sign_cmd=\"/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'\"\n\n    if [ \"${COCOAPODS_PARALLEL_CODE_SIGN}\" == \"true\" ]; then\n      code_sign_cmd=\"$code_sign_cmd &\"\n    fi\n    echo \"$code_sign_cmd\"\n    eval \"$code_sign_cmd\"\n  fi\n}\n\nif [[ \"$CONFIGURATION\" == \"Debug\" ]]; then\n  install_framework \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework\"\nfi\nif [[ \"$CONFIGURATION\" == \"Release\" ]]; then\n  install_framework \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework\"\nfi\nif [ \"${COCOAPODS_PARALLEL_CODE_SIGN}\" == \"true\" ]; then\n  wait\nfi\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Pods-WatermelonTester/Pods-WatermelonTester-resources-Debug-input-files.xcfilelist",
    "content": "${PODS_ROOT}/Target Support Files/Pods-WatermelonTester/Pods-WatermelonTester-resources.sh\n${PODS_CONFIGURATION_BUILD_DIR}/React-Core/RCTI18nStrings.bundle"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Pods-WatermelonTester/Pods-WatermelonTester-resources-Debug-output-files.xcfilelist",
    "content": "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCTI18nStrings.bundle"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Pods-WatermelonTester/Pods-WatermelonTester-resources-Release-input-files.xcfilelist",
    "content": "${PODS_ROOT}/Target Support Files/Pods-WatermelonTester/Pods-WatermelonTester-resources.sh\n${PODS_CONFIGURATION_BUILD_DIR}/React-Core/RCTI18nStrings.bundle"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Pods-WatermelonTester/Pods-WatermelonTester-resources-Release-output-files.xcfilelist",
    "content": "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCTI18nStrings.bundle"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Pods-WatermelonTester/Pods-WatermelonTester-resources.sh",
    "content": "#!/bin/sh\nset -e\nset -u\nset -o pipefail\n\nfunction on_error {\n  echo \"$(realpath -mq \"${0}\"):$1: error: Unexpected failure\"\n}\ntrap 'on_error $LINENO' ERR\n\nif [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then\n  # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy\n  # resources to, so exit 0 (signalling the script phase was successful).\n  exit 0\nfi\n\nmkdir -p \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n\nRESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt\n> \"$RESOURCES_TO_COPY\"\n\nXCASSET_FILES=()\n\n# This protects against multiple targets copying the same framework dependency at the same time. The solution\n# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html\nRSYNC_PROTECT_TMP_FILES=(--filter \"P .*.??????\")\n\ncase \"${TARGETED_DEVICE_FAMILY:-}\" in\n  1,2)\n    TARGET_DEVICE_ARGS=\"--target-device ipad --target-device iphone\"\n    ;;\n  1)\n    TARGET_DEVICE_ARGS=\"--target-device iphone\"\n    ;;\n  2)\n    TARGET_DEVICE_ARGS=\"--target-device ipad\"\n    ;;\n  3)\n    TARGET_DEVICE_ARGS=\"--target-device tv\"\n    ;;\n  4)\n    TARGET_DEVICE_ARGS=\"--target-device watch\"\n    ;;\n  *)\n    TARGET_DEVICE_ARGS=\"--target-device mac\"\n    ;;\nesac\n\ninstall_resource()\n{\n  if [[ \"$1\" = /* ]] ; then\n    RESOURCE_PATH=\"$1\"\n  else\n    RESOURCE_PATH=\"${PODS_ROOT}/$1\"\n  fi\n  if [[ ! -e \"$RESOURCE_PATH\" ]] ; then\n    cat << EOM\nerror: Resource \"$RESOURCE_PATH\" not found. Run 'pod install' to update the copy resources script.\nEOM\n    exit 1\n  fi\n  case $RESOURCE_PATH in\n    *.storyboard)\n      echo \"ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}\" || true\n      ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .storyboard`.storyboardc\" \"$RESOURCE_PATH\" --sdk \"${SDKROOT}\" ${TARGET_DEVICE_ARGS}\n      ;;\n    *.xib)\n      echo \"ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}\" || true\n      ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .xib`.nib\" \"$RESOURCE_PATH\" --sdk \"${SDKROOT}\" ${TARGET_DEVICE_ARGS}\n      ;;\n    *.framework)\n      echo \"mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\" || true\n      mkdir -p \"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n      echo \"rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\" || true\n      rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n      ;;\n    *.xcdatamodel)\n      echo \"xcrun momc \\\"$RESOURCE_PATH\\\" \\\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\"`.mom\\\"\" || true\n      xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcdatamodel`.mom\"\n      ;;\n    *.xcdatamodeld)\n      echo \"xcrun momc \\\"$RESOURCE_PATH\\\" \\\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcdatamodeld`.momd\\\"\" || true\n      xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcdatamodeld`.momd\"\n      ;;\n    *.xcmappingmodel)\n      echo \"xcrun mapc \\\"$RESOURCE_PATH\\\" \\\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcmappingmodel`.cdm\\\"\" || true\n      xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcmappingmodel`.cdm\"\n      ;;\n    *.xcassets)\n      ABSOLUTE_XCASSET_FILE=\"$RESOURCE_PATH\"\n      XCASSET_FILES+=(\"$ABSOLUTE_XCASSET_FILE\")\n      ;;\n    *)\n      echo \"$RESOURCE_PATH\" || true\n      echo \"$RESOURCE_PATH\" >> \"$RESOURCES_TO_COPY\"\n      ;;\n  esac\n}\nif [[ \"$CONFIGURATION\" == \"Debug\" ]]; then\n  install_resource \"${PODS_CONFIGURATION_BUILD_DIR}/React-Core/RCTI18nStrings.bundle\"\nfi\nif [[ \"$CONFIGURATION\" == \"Release\" ]]; then\n  install_resource \"${PODS_CONFIGURATION_BUILD_DIR}/React-Core/RCTI18nStrings.bundle\"\nfi\n\nmkdir -p \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nrsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from=\"$RESOURCES_TO_COPY\" / \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nif [[ \"${ACTION}\" == \"install\" ]] && [[ \"${SKIP_INSTALL}\" == \"NO\" ]]; then\n  mkdir -p \"${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n  rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from=\"$RESOURCES_TO_COPY\" / \"${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nfi\nrm -f \"$RESOURCES_TO_COPY\"\n\nif [[ -n \"${WRAPPER_EXTENSION}\" ]] && [ \"`xcrun --find actool`\" ] && [ -n \"${XCASSET_FILES:-}\" ]\nthen\n  # Find all other xcassets (this unfortunately includes those of path pods and other targets).\n  OTHER_XCASSETS=$(find -L \"$PWD\" -iname \"*.xcassets\" -type d)\n  while read line; do\n    if [[ $line != \"${PODS_ROOT}*\" ]]; then\n      XCASSET_FILES+=(\"$line\")\n    fi\n  done <<<\"$OTHER_XCASSETS\"\n\n  if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then\n    printf \"%s\\0\" \"${XCASSET_FILES[@]}\" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform \"${PLATFORM_NAME}\" --minimum-deployment-target \"${!DEPLOYMENT_TARGET_SETTING_NAME}\" ${TARGET_DEVICE_ARGS} --compress-pngs --compile \"${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n  else\n    printf \"%s\\0\" \"${XCASSET_FILES[@]}\" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform \"${PLATFORM_NAME}\" --minimum-deployment-target \"${!DEPLOYMENT_TARGET_SETTING_NAME}\" ${TARGET_DEVICE_ARGS} --compress-pngs --compile \"${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\" --app-icon \"${ASSETCATALOG_COMPILER_APPICON_NAME}\" --output-partial-info-plist \"${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist\"\n  fi\nfi\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Pods-WatermelonTester/Pods-WatermelonTester.debug.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-Mapbuffer\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-RCTAnimation\" \"${PODS_ROOT}/Headers/Public/React-RCTAppDelegate\" \"${PODS_ROOT}/Headers/Public/React-RCTBlob\" \"${PODS_ROOT}/Headers/Public/React-RCTFabric\" \"${PODS_ROOT}/Headers/Public/React-RCTText\" \"${PODS_ROOT}/Headers/Public/React-RuntimeApple\" \"${PODS_ROOT}/Headers/Public/React-RuntimeCore\" \"${PODS_ROOT}/Headers/Public/React-RuntimeHermes\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jserrorhandler\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-nativeconfig\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/WatermelonDB\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"${PODS_ROOT}/Headers/Public/simdjson\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/Headers/Private/React-Core\"\nLD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'\nLIBRARY_SEARCH_PATHS = $(inherited) \"${PODS_CONFIGURATION_BUILD_DIR}/DoubleConversion\" \"${PODS_CONFIGURATION_BUILD_DIR}/RCT-Folly\" \"${PODS_CONFIGURATION_BUILD_DIR}/RCTDeprecation\" \"${PODS_CONFIGURATION_BUILD_DIR}/RCTTypeSafety\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Core\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-CoreModules\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-FabricImage\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-ImageManager\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Mapbuffer\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTAnimation\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTAppDelegate\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTBlob\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTFabric\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTImage\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTLinking\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTNetwork\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTSettings\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTText\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTVibration\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RuntimeApple\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RuntimeCore\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RuntimeHermes\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-debug\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-featureflags\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-hermes\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jserrorhandler\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jsi\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jsiexecutor\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-logger\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-nativeconfig\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-perflogger\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-rendererdebug\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-runtimescheduler\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-utils\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon\" \"${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket\" \"${PODS_CONFIGURATION_BUILD_DIR}/WatermelonDB\" \"${PODS_CONFIGURATION_BUILD_DIR}/Yoga\" \"${PODS_CONFIGURATION_BUILD_DIR}/fmt\" \"${PODS_CONFIGURATION_BUILD_DIR}/glog\" \"${PODS_CONFIGURATION_BUILD_DIR}/simdjson\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTFabric/React-RCTFabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_RCTAppDelegate/React-RCTAppDelegate.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/simdjson/simdjson.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\" -isystem \"${PODS_ROOT}/Headers/Public\"\nOTHER_CPLUSPLUSFLAGS = $(inherited) -DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\nOTHER_LDFLAGS = $(inherited) -ObjC -l\"DoubleConversion\" -l\"RCT-Folly\" -l\"RCTDeprecation\" -l\"RCTTypeSafety\" -l\"React-Codegen\" -l\"React-Core\" -l\"React-CoreModules\" -l\"React-Fabric\" -l\"React-FabricImage\" -l\"React-ImageManager\" -l\"React-Mapbuffer\" -l\"React-NativeModulesApple\" -l\"React-RCTAnimation\" -l\"React-RCTAppDelegate\" -l\"React-RCTBlob\" -l\"React-RCTFabric\" -l\"React-RCTImage\" -l\"React-RCTLinking\" -l\"React-RCTNetwork\" -l\"React-RCTSettings\" -l\"React-RCTText\" -l\"React-RCTVibration\" -l\"React-RuntimeApple\" -l\"React-RuntimeCore\" -l\"React-RuntimeHermes\" -l\"React-cxxreact\" -l\"React-debug\" -l\"React-featureflags\" -l\"React-graphics\" -l\"React-hermes\" -l\"React-jserrorhandler\" -l\"React-jsi\" -l\"React-jsiexecutor\" -l\"React-jsinspector\" -l\"React-logger\" -l\"React-nativeconfig\" -l\"React-perflogger\" -l\"React-rendererdebug\" -l\"React-runtimescheduler\" -l\"React-utils\" -l\"ReactCommon\" -l\"SocketRocket\" -l\"WatermelonDB\" -l\"Yoga\" -l\"c++\" -l\"c++abi\" -l\"fmt\" -l\"glog\" -l\"icucore\" -l\"simdjson\" -l\"sqlite3\" -framework \"Accelerate\" -framework \"AudioToolbox\" -framework \"CFNetwork\" -framework \"JavaScriptCore\" -framework \"MobileCoreServices\" -framework \"Security\" -framework \"UIKit\" -framework \"hermes\"\nOTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTFabric/React-RCTFabric.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_RCTAppDelegate/React-RCTAppDelegate.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/simdjson/simdjson.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_PODFILE_DIR_PATH = ${SRCROOT}/.\nPODS_ROOT = ${SRCROOT}/Pods\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Pods-WatermelonTester/Pods-WatermelonTester.release.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-Mapbuffer\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-RCTAnimation\" \"${PODS_ROOT}/Headers/Public/React-RCTAppDelegate\" \"${PODS_ROOT}/Headers/Public/React-RCTBlob\" \"${PODS_ROOT}/Headers/Public/React-RCTFabric\" \"${PODS_ROOT}/Headers/Public/React-RCTText\" \"${PODS_ROOT}/Headers/Public/React-RuntimeApple\" \"${PODS_ROOT}/Headers/Public/React-RuntimeCore\" \"${PODS_ROOT}/Headers/Public/React-RuntimeHermes\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jserrorhandler\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-nativeconfig\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/WatermelonDB\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"${PODS_ROOT}/Headers/Public/simdjson\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/Headers/Private/React-Core\"\nLD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'\nLIBRARY_SEARCH_PATHS = $(inherited) \"${PODS_CONFIGURATION_BUILD_DIR}/DoubleConversion\" \"${PODS_CONFIGURATION_BUILD_DIR}/RCT-Folly\" \"${PODS_CONFIGURATION_BUILD_DIR}/RCTDeprecation\" \"${PODS_CONFIGURATION_BUILD_DIR}/RCTTypeSafety\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Core\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-CoreModules\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-FabricImage\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-ImageManager\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Mapbuffer\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTAnimation\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTAppDelegate\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTBlob\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTFabric\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTImage\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTLinking\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTNetwork\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTSettings\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTText\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTVibration\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RuntimeApple\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RuntimeCore\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RuntimeHermes\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-debug\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-featureflags\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-hermes\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jserrorhandler\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jsi\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jsiexecutor\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-logger\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-nativeconfig\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-perflogger\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-rendererdebug\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-runtimescheduler\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-utils\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon\" \"${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket\" \"${PODS_CONFIGURATION_BUILD_DIR}/WatermelonDB\" \"${PODS_CONFIGURATION_BUILD_DIR}/Yoga\" \"${PODS_CONFIGURATION_BUILD_DIR}/fmt\" \"${PODS_CONFIGURATION_BUILD_DIR}/glog\" \"${PODS_CONFIGURATION_BUILD_DIR}/simdjson\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTFabric/React-RCTFabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_RCTAppDelegate/React-RCTAppDelegate.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/simdjson/simdjson.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\" -isystem \"${PODS_ROOT}/Headers/Public\" -DNDEBUG\nOTHER_CPLUSPLUSFLAGS = $(inherited) -DNDEBUG -DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\nOTHER_LDFLAGS = $(inherited) -ObjC -l\"DoubleConversion\" -l\"RCT-Folly\" -l\"RCTDeprecation\" -l\"RCTTypeSafety\" -l\"React-Codegen\" -l\"React-Core\" -l\"React-CoreModules\" -l\"React-Fabric\" -l\"React-FabricImage\" -l\"React-ImageManager\" -l\"React-Mapbuffer\" -l\"React-NativeModulesApple\" -l\"React-RCTAnimation\" -l\"React-RCTAppDelegate\" -l\"React-RCTBlob\" -l\"React-RCTFabric\" -l\"React-RCTImage\" -l\"React-RCTLinking\" -l\"React-RCTNetwork\" -l\"React-RCTSettings\" -l\"React-RCTText\" -l\"React-RCTVibration\" -l\"React-RuntimeApple\" -l\"React-RuntimeCore\" -l\"React-RuntimeHermes\" -l\"React-cxxreact\" -l\"React-debug\" -l\"React-featureflags\" -l\"React-graphics\" -l\"React-hermes\" -l\"React-jserrorhandler\" -l\"React-jsi\" -l\"React-jsiexecutor\" -l\"React-jsinspector\" -l\"React-logger\" -l\"React-nativeconfig\" -l\"React-perflogger\" -l\"React-rendererdebug\" -l\"React-runtimescheduler\" -l\"React-utils\" -l\"ReactCommon\" -l\"SocketRocket\" -l\"WatermelonDB\" -l\"Yoga\" -l\"c++\" -l\"c++abi\" -l\"fmt\" -l\"glog\" -l\"icucore\" -l\"simdjson\" -l\"sqlite3\" -framework \"Accelerate\" -framework \"AudioToolbox\" -framework \"CFNetwork\" -framework \"JavaScriptCore\" -framework \"MobileCoreServices\" -framework \"Security\" -framework \"UIKit\" -framework \"hermes\"\nOTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTFabric/React-RCTFabric.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_RCTAppDelegate/React-RCTAppDelegate.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/simdjson/simdjson.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_PODFILE_DIR_PATH = ${SRCROOT}/.\nPODS_ROOT = ${SRCROOT}/Pods\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Pods-WatermelonTester-WatermelonTesterTests/Pods-WatermelonTester-WatermelonTesterTests-acknowledgements.markdown",
    "content": "# Acknowledgements\nThis application makes use of the following third party libraries:\n\n## DoubleConversion\n\nCopyright 2006-2011, the V8 project authors. All rights reserved.\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google Inc. nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\n## RCT-Folly\n\n\n                                 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\nFiles in folly/external/farmhash licensed as follows\n\n    Copyright (c) 2014 Google, Inc.\n\n    Permission is hereby granted, free of charge, to any person obtaining a copy\n    of this software and associated documentation files (the \"Software\"), to deal\n    in the Software without restriction, including without limitation the rights\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the Software is\n    furnished to do so, subject to the following conditions:\n\n    The above copyright notice and this permission notice shall be included in\n    all copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n    THE SOFTWARE.\n\n\n## React\n\nMIT License\n\nCopyright (c) Meta Platforms, Inc. and affiliates.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n## React-Core\n\nMIT License\n\nCopyright (c) Meta Platforms, Inc. and affiliates.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n## SocketRocket\n\nBSD License\n\nFor SocketRocket software\n\nCopyright (c) 2016-present, Facebook, Inc. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n   list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution.\n\n * Neither the name Facebook nor the names of its contributors may be used to\n   endorse or promote products derived from this software without specific\n   prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n## WatermelonDB\n\nMIT License\n\nCopyright (c) Nozbe\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n## boost\n\nBoost Software License - Version 1.0 - August 17th, 2003\n\nPermission is hereby granted, free of charge, to any person or organization\nobtaining a copy of the software and accompanying documentation covered by\nthis license (the \"Software\") to use, reproduce, display, distribute,\nexecute, and transmit the Software, and to prepare derivative works of the\nSoftware, and to permit third-parties to whom the Software is furnished to\ndo so, all subject to the following:\n\nThe copyright notices in the Software and this entire statement, including\nthe above license grant, this restriction and the following disclaimer,\nmust be included in all copies of the Software, in whole or in part, and\nall derivative works of the Software, unless such copies or derivative\nworks are solely in the form of machine-executable object code generated by\na source language processor.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT\nSHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE\nFOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,\nARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE.\n\n\n## fmt\n\nCopyright (c) 2012 - present, Victor Zverovich\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n--- Optional exception to the license ---\n\nAs an exception, if, as a result of your compiling your source code, portions\nof this Software are embedded into a machine-executable object form of such\nsource code, you may redistribute such embedded portions in such object form\nwithout including the above copyright and permission notices.\n\n\n## glog\n\nCopyright (c) 2008, Google Inc.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n    * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\nA function gettimeofday in utilities.cc is based on\n\nhttp://www.google.com/codesearch/p?hl=en#dR3YEbitojA/COPYING&q=GetSystemTimeAsFileTime%20license:bsd\n\nThe license of this code is:\n\nCopyright (c) 2003-2008, Jouni Malinen <j@w1.fi> and contributors\nAll Rights Reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in the\n   documentation and/or other materials provided with the distribution.\n\n3. Neither the name(s) of the above-listed copyright holder(s) nor the\n   names of its contributors may be used to endorse or promote products\n   derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\n## hermes-engine\n\nMIT License\n\nCopyright (c) Meta Platforms, Inc. and affiliates.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n## simdjson\n\n                                 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 2018-2019 The simdjson authors\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.\n\nGenerated by CocoaPods - https://cocoapods.org\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Pods-WatermelonTester-WatermelonTesterTests/Pods-WatermelonTester-WatermelonTesterTests-acknowledgements.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>PreferenceSpecifiers</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>This application makes use of the following third party libraries:</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>Acknowledgements</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Copyright 2006-2011, the V8 project authors. All rights reserved.\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n    * Neither the name of Google Inc. nor the names of its\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>DoubleConversion</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>\n                                 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\nFiles in folly/external/farmhash licensed as follows\n\n    Copyright (c) 2014 Google, Inc.\n\n    Permission is hereby granted, free of charge, to any person obtaining a copy\n    of this software and associated documentation files (the \"Software\"), to deal\n    in the Software without restriction, including without limitation the rights\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the Software is\n    furnished to do so, subject to the following conditions:\n\n    The above copyright notice and this permission notice shall be included in\n    all copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n    THE SOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>Apache License, Version 2.0</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>RCT-Folly</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>MIT License\n\nCopyright (c) Meta Platforms, Inc. and affiliates.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>React</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>MIT License\n\nCopyright (c) Meta Platforms, Inc. and affiliates.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>React-Core</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>BSD License\n\nFor SocketRocket software\n\nCopyright (c) 2016-present, Facebook, Inc. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n   list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution.\n\n * Neither the name Facebook nor the names of its contributors may be used to\n   endorse or promote products derived from this software without specific\n   prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</string>\n\t\t\t<key>License</key>\n\t\t\t<string>BSD</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>SocketRocket</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>MIT License\n\nCopyright (c) Nozbe\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>WatermelonDB</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Boost Software License - Version 1.0 - August 17th, 2003\n\nPermission is hereby granted, free of charge, to any person or organization\nobtaining a copy of the software and accompanying documentation covered by\nthis license (the \"Software\") to use, reproduce, display, distribute,\nexecute, and transmit the Software, and to prepare derivative works of the\nSoftware, and to permit third-parties to whom the Software is furnished to\ndo so, all subject to the following:\n\nThe copyright notices in the Software and this entire statement, including\nthe above license grant, this restriction and the following disclaimer,\nmust be included in all copies of the Software, in whole or in part, and\nall derivative works of the Software, unless such copies or derivative\nworks are solely in the form of machine-executable object code generated by\na source language processor.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT\nSHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE\nFOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,\nARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>Boost Software License</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>boost</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Copyright (c) 2012 - present, Victor Zverovich\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n--- Optional exception to the license ---\n\nAs an exception, if, as a result of your compiling your source code, portions\nof this Software are embedded into a machine-executable object form of such\nsource code, you may redistribute such embedded portions in such object form\nwithout including the above copyright and permission notices.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>fmt</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Copyright (c) 2008, Google Inc.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n    * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\nA function gettimeofday in utilities.cc is based on\n\nhttp://www.google.com/codesearch/p?hl=en#dR3YEbitojA/COPYING&amp;q=GetSystemTimeAsFileTime%20license:bsd\n\nThe license of this code is:\n\nCopyright (c) 2003-2008, Jouni Malinen &lt;j@w1.fi&gt; and contributors\nAll Rights Reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in the\n   documentation and/or other materials provided with the distribution.\n\n3. Neither the name(s) of the above-listed copyright holder(s) nor the\n   names of its contributors may be used to endorse or promote products\n   derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>Google</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>glog</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>MIT License\n\nCopyright (c) Meta Platforms, Inc. and affiliates.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>MIT</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>hermes-engine</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>                                 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 2018-2019 The simdjson authors\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.\n</string>\n\t\t\t<key>License</key>\n\t\t\t<string>Apache-2.0</string>\n\t\t\t<key>Title</key>\n\t\t\t<string>simdjson</string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>FooterText</key>\n\t\t\t<string>Generated by CocoaPods - https://cocoapods.org</string>\n\t\t\t<key>Title</key>\n\t\t\t<string></string>\n\t\t\t<key>Type</key>\n\t\t\t<string>PSGroupSpecifier</string>\n\t\t</dict>\n\t</array>\n\t<key>StringsTable</key>\n\t<string>Acknowledgements</string>\n\t<key>Title</key>\n\t<string>Acknowledgements</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Pods-WatermelonTester-WatermelonTesterTests/Pods-WatermelonTester-WatermelonTesterTests-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_Pods_WatermelonTester_WatermelonTesterTests : NSObject\n@end\n@implementation PodsDummy_Pods_WatermelonTester_WatermelonTesterTests\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Pods-WatermelonTester-WatermelonTesterTests/Pods-WatermelonTester-WatermelonTesterTests-frameworks-Debug-input-files.xcfilelist",
    "content": "${PODS_ROOT}/Target Support Files/Pods-WatermelonTester-WatermelonTesterTests/Pods-WatermelonTester-WatermelonTesterTests-frameworks.sh\n${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Pods-WatermelonTester-WatermelonTesterTests/Pods-WatermelonTester-WatermelonTesterTests-frameworks-Debug-output-files.xcfilelist",
    "content": "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Pods-WatermelonTester-WatermelonTesterTests/Pods-WatermelonTester-WatermelonTesterTests-frameworks-Release-input-files.xcfilelist",
    "content": "${PODS_ROOT}/Target Support Files/Pods-WatermelonTester-WatermelonTesterTests/Pods-WatermelonTester-WatermelonTesterTests-frameworks.sh\n${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Pods-WatermelonTester-WatermelonTesterTests/Pods-WatermelonTester-WatermelonTesterTests-frameworks-Release-output-files.xcfilelist",
    "content": "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Pods-WatermelonTester-WatermelonTesterTests/Pods-WatermelonTester-WatermelonTesterTests-frameworks.sh",
    "content": "#!/bin/sh\nset -e\nset -u\nset -o pipefail\n\nfunction on_error {\n  echo \"$(realpath -mq \"${0}\"):$1: error: Unexpected failure\"\n}\ntrap 'on_error $LINENO' ERR\n\nif [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then\n  # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy\n  # frameworks to, so exit 0 (signalling the script phase was successful).\n  exit 0\nfi\n\necho \"mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\nmkdir -p \"${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n\nCOCOAPODS_PARALLEL_CODE_SIGN=\"${COCOAPODS_PARALLEL_CODE_SIGN:-false}\"\nSWIFT_STDLIB_PATH=\"${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}\"\nBCSYMBOLMAP_DIR=\"BCSymbolMaps\"\n\n\n# This protects against multiple targets copying the same framework dependency at the same time. The solution\n# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html\nRSYNC_PROTECT_TMP_FILES=(--filter \"P .*.??????\")\n\n# Copies and strips a vendored framework\ninstall_framework()\n{\n  if [ -r \"${BUILT_PRODUCTS_DIR}/$1\" ]; then\n    local source=\"${BUILT_PRODUCTS_DIR}/$1\"\n  elif [ -r \"${BUILT_PRODUCTS_DIR}/$(basename \"$1\")\" ]; then\n    local source=\"${BUILT_PRODUCTS_DIR}/$(basename \"$1\")\"\n  elif [ -r \"$1\" ]; then\n    local source=\"$1\"\n  fi\n\n  local destination=\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n\n  if [ -L \"${source}\" ]; then\n    echo \"Symlinked...\"\n    source=\"$(readlink -f \"${source}\")\"\n  fi\n\n  if [ -d \"${source}/${BCSYMBOLMAP_DIR}\" ]; then\n    # Locate and install any .bcsymbolmaps if present, and remove them from the .framework before the framework is copied\n    find \"${source}/${BCSYMBOLMAP_DIR}\" -name \"*.bcsymbolmap\"|while read f; do\n      echo \"Installing $f\"\n      install_bcsymbolmap \"$f\" \"$destination\"\n      rm \"$f\"\n    done\n    rmdir \"${source}/${BCSYMBOLMAP_DIR}\"\n  fi\n\n  # Use filter instead of exclude so missing patterns don't throw errors.\n  echo \"rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --links --filter \\\"- CVS/\\\" --filter \\\"- .svn/\\\" --filter \\\"- .git/\\\" --filter \\\"- .hg/\\\" --filter \\\"- Headers\\\" --filter \\\"- PrivateHeaders\\\" --filter \\\"- Modules\\\" \\\"${source}\\\" \\\"${destination}\\\"\"\n  rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"\n\n  local basename\n  basename=\"$(basename -s .framework \"$1\")\"\n  binary=\"${destination}/${basename}.framework/${basename}\"\n\n  if ! [ -r \"$binary\" ]; then\n    binary=\"${destination}/${basename}\"\n  elif [ -L \"${binary}\" ]; then\n    echo \"Destination binary is symlinked...\"\n    dirname=\"$(dirname \"${binary}\")\"\n    binary=\"${dirname}/$(readlink \"${binary}\")\"\n  fi\n\n  # Strip invalid architectures so \"fat\" simulator / device frameworks work on device\n  if [[ \"$(file \"$binary\")\" == *\"dynamically linked shared library\"* ]]; then\n    strip_invalid_archs \"$binary\"\n  fi\n\n  # Resign the code if required by the build settings to avoid unstable apps\n  code_sign_if_enabled \"${destination}/$(basename \"$1\")\"\n\n  # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.\n  if [ \"${XCODE_VERSION_MAJOR}\" -lt 7 ]; then\n    local swift_runtime_libs\n    swift_runtime_libs=$(xcrun otool -LX \"$binary\" | grep --color=never @rpath/libswift | sed -E s/@rpath\\\\/\\(.+dylib\\).*/\\\\1/g | uniq -u)\n    for lib in $swift_runtime_libs; do\n      echo \"rsync -auv \\\"${SWIFT_STDLIB_PATH}/${lib}\\\" \\\"${destination}\\\"\"\n      rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"\n      code_sign_if_enabled \"${destination}/${lib}\"\n    done\n  fi\n}\n# Copies and strips a vendored dSYM\ninstall_dsym() {\n  local source=\"$1\"\n  warn_missing_arch=${2:-true}\n  if [ -r \"$source\" ]; then\n    # Copy the dSYM into the targets temp dir.\n    echo \"rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --filter \\\"- CVS/\\\" --filter \\\"- .svn/\\\" --filter \\\"- .git/\\\" --filter \\\"- .hg/\\\" --filter \\\"- Headers\\\" --filter \\\"- PrivateHeaders\\\" --filter \\\"- Modules\\\" \\\"${source}\\\" \\\"${DERIVED_FILES_DIR}\\\"\"\n    rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"\n\n    local basename\n    basename=\"$(basename -s .dSYM \"$source\")\"\n    binary_name=\"$(ls \"$source/Contents/Resources/DWARF\")\"\n    binary=\"${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}\"\n\n    # Strip invalid architectures from the dSYM.\n    if [[ \"$(file \"$binary\")\" == *\"Mach-O \"*\"dSYM companion\"* ]]; then\n      strip_invalid_archs \"$binary\" \"$warn_missing_arch\"\n    fi\n    if [[ $STRIP_BINARY_RETVAL == 0 ]]; then\n      # Move the stripped file into its final destination.\n      echo \"rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --links --filter \\\"- CVS/\\\" --filter \\\"- .svn/\\\" --filter \\\"- .git/\\\" --filter \\\"- .hg/\\\" --filter \\\"- Headers\\\" --filter \\\"- PrivateHeaders\\\" --filter \\\"- Modules\\\" \\\"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\\\" \\\"${DWARF_DSYM_FOLDER_PATH}\\\"\"\n      rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"\n    else\n      # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing.\n      mkdir -p \"${DWARF_DSYM_FOLDER_PATH}\"\n      touch \"${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM\"\n    fi\n  fi\n}\n\n# Used as a return value for each invocation of `strip_invalid_archs` function.\nSTRIP_BINARY_RETVAL=0\n\n# Strip invalid architectures\nstrip_invalid_archs() {\n  binary=\"$1\"\n  warn_missing_arch=${2:-true}\n  # Get architectures for current target binary\n  binary_archs=\"$(lipo -info \"$binary\" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)\"\n  # Intersect them with the architectures we are building for\n  intersected_archs=\"$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\\n' | sort | uniq -d)\"\n  # If there are no archs supported by this binary then warn the user\n  if [[ -z \"$intersected_archs\" ]]; then\n    if [[ \"$warn_missing_arch\" == \"true\" ]]; then\n      echo \"warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS).\"\n    fi\n    STRIP_BINARY_RETVAL=1\n    return\n  fi\n  stripped=\"\"\n  for arch in $binary_archs; do\n    if ! [[ \"${ARCHS}\" == *\"$arch\"* ]]; then\n      # Strip non-valid architectures in-place\n      lipo -remove \"$arch\" -output \"$binary\" \"$binary\"\n      stripped=\"$stripped $arch\"\n    fi\n  done\n  if [[ \"$stripped\" ]]; then\n    echo \"Stripped $binary of architectures:$stripped\"\n  fi\n  STRIP_BINARY_RETVAL=0\n}\n\n# Copies the bcsymbolmap files of a vendored framework\ninstall_bcsymbolmap() {\n    local bcsymbolmap_path=\"$1\"\n    local destination=\"${BUILT_PRODUCTS_DIR}\"\n    echo \"rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${bcsymbolmap_path}\" \"${destination}\"\"\n    rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${bcsymbolmap_path}\" \"${destination}\"\n}\n\n# Signs a framework with the provided identity\ncode_sign_if_enabled() {\n  if [ -n \"${EXPANDED_CODE_SIGN_IDENTITY:-}\" -a \"${CODE_SIGNING_REQUIRED:-}\" != \"NO\" -a \"${CODE_SIGNING_ALLOWED}\" != \"NO\" ]; then\n    # Use the current code_sign_identity\n    echo \"Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}\"\n    local code_sign_cmd=\"/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'\"\n\n    if [ \"${COCOAPODS_PARALLEL_CODE_SIGN}\" == \"true\" ]; then\n      code_sign_cmd=\"$code_sign_cmd &\"\n    fi\n    echo \"$code_sign_cmd\"\n    eval \"$code_sign_cmd\"\n  fi\n}\n\nif [[ \"$CONFIGURATION\" == \"Debug\" ]]; then\n  install_framework \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework\"\nfi\nif [[ \"$CONFIGURATION\" == \"Release\" ]]; then\n  install_framework \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework\"\nfi\nif [ \"${COCOAPODS_PARALLEL_CODE_SIGN}\" == \"true\" ]; then\n  wait\nfi\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Pods-WatermelonTester-WatermelonTesterTests/Pods-WatermelonTester-WatermelonTesterTests-resources-Debug-input-files.xcfilelist",
    "content": "${PODS_ROOT}/Target Support Files/Pods-WatermelonTester-WatermelonTesterTests/Pods-WatermelonTester-WatermelonTesterTests-resources.sh\n${PODS_CONFIGURATION_BUILD_DIR}/React-Core/RCTI18nStrings.bundle"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Pods-WatermelonTester-WatermelonTesterTests/Pods-WatermelonTester-WatermelonTesterTests-resources-Debug-output-files.xcfilelist",
    "content": "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCTI18nStrings.bundle"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Pods-WatermelonTester-WatermelonTesterTests/Pods-WatermelonTester-WatermelonTesterTests-resources-Release-input-files.xcfilelist",
    "content": "${PODS_ROOT}/Target Support Files/Pods-WatermelonTester-WatermelonTesterTests/Pods-WatermelonTester-WatermelonTesterTests-resources.sh\n${PODS_CONFIGURATION_BUILD_DIR}/React-Core/RCTI18nStrings.bundle"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Pods-WatermelonTester-WatermelonTesterTests/Pods-WatermelonTester-WatermelonTesterTests-resources-Release-output-files.xcfilelist",
    "content": "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCTI18nStrings.bundle"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Pods-WatermelonTester-WatermelonTesterTests/Pods-WatermelonTester-WatermelonTesterTests-resources.sh",
    "content": "#!/bin/sh\nset -e\nset -u\nset -o pipefail\n\nfunction on_error {\n  echo \"$(realpath -mq \"${0}\"):$1: error: Unexpected failure\"\n}\ntrap 'on_error $LINENO' ERR\n\nif [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then\n  # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy\n  # resources to, so exit 0 (signalling the script phase was successful).\n  exit 0\nfi\n\nmkdir -p \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n\nRESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt\n> \"$RESOURCES_TO_COPY\"\n\nXCASSET_FILES=()\n\n# This protects against multiple targets copying the same framework dependency at the same time. The solution\n# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html\nRSYNC_PROTECT_TMP_FILES=(--filter \"P .*.??????\")\n\ncase \"${TARGETED_DEVICE_FAMILY:-}\" in\n  1,2)\n    TARGET_DEVICE_ARGS=\"--target-device ipad --target-device iphone\"\n    ;;\n  1)\n    TARGET_DEVICE_ARGS=\"--target-device iphone\"\n    ;;\n  2)\n    TARGET_DEVICE_ARGS=\"--target-device ipad\"\n    ;;\n  3)\n    TARGET_DEVICE_ARGS=\"--target-device tv\"\n    ;;\n  4)\n    TARGET_DEVICE_ARGS=\"--target-device watch\"\n    ;;\n  *)\n    TARGET_DEVICE_ARGS=\"--target-device mac\"\n    ;;\nesac\n\ninstall_resource()\n{\n  if [[ \"$1\" = /* ]] ; then\n    RESOURCE_PATH=\"$1\"\n  else\n    RESOURCE_PATH=\"${PODS_ROOT}/$1\"\n  fi\n  if [[ ! -e \"$RESOURCE_PATH\" ]] ; then\n    cat << EOM\nerror: Resource \"$RESOURCE_PATH\" not found. Run 'pod install' to update the copy resources script.\nEOM\n    exit 1\n  fi\n  case $RESOURCE_PATH in\n    *.storyboard)\n      echo \"ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}\" || true\n      ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .storyboard`.storyboardc\" \"$RESOURCE_PATH\" --sdk \"${SDKROOT}\" ${TARGET_DEVICE_ARGS}\n      ;;\n    *.xib)\n      echo \"ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}\" || true\n      ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\\"$RESOURCE_PATH\\\" .xib`.nib\" \"$RESOURCE_PATH\" --sdk \"${SDKROOT}\" ${TARGET_DEVICE_ARGS}\n      ;;\n    *.framework)\n      echo \"mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\" || true\n      mkdir -p \"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n      echo \"rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\" || true\n      rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\n      ;;\n    *.xcdatamodel)\n      echo \"xcrun momc \\\"$RESOURCE_PATH\\\" \\\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\"`.mom\\\"\" || true\n      xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcdatamodel`.mom\"\n      ;;\n    *.xcdatamodeld)\n      echo \"xcrun momc \\\"$RESOURCE_PATH\\\" \\\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcdatamodeld`.momd\\\"\" || true\n      xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcdatamodeld`.momd\"\n      ;;\n    *.xcmappingmodel)\n      echo \"xcrun mapc \\\"$RESOURCE_PATH\\\" \\\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcmappingmodel`.cdm\\\"\" || true\n      xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xcmappingmodel`.cdm\"\n      ;;\n    *.xcassets)\n      ABSOLUTE_XCASSET_FILE=\"$RESOURCE_PATH\"\n      XCASSET_FILES+=(\"$ABSOLUTE_XCASSET_FILE\")\n      ;;\n    *)\n      echo \"$RESOURCE_PATH\" || true\n      echo \"$RESOURCE_PATH\" >> \"$RESOURCES_TO_COPY\"\n      ;;\n  esac\n}\nif [[ \"$CONFIGURATION\" == \"Debug\" ]]; then\n  install_resource \"${PODS_CONFIGURATION_BUILD_DIR}/React-Core/RCTI18nStrings.bundle\"\nfi\nif [[ \"$CONFIGURATION\" == \"Release\" ]]; then\n  install_resource \"${PODS_CONFIGURATION_BUILD_DIR}/React-Core/RCTI18nStrings.bundle\"\nfi\n\nmkdir -p \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nrsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from=\"$RESOURCES_TO_COPY\" / \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nif [[ \"${ACTION}\" == \"install\" ]] && [[ \"${SKIP_INSTALL}\" == \"NO\" ]]; then\n  mkdir -p \"${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n  rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from=\"$RESOURCES_TO_COPY\" / \"${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\nfi\nrm -f \"$RESOURCES_TO_COPY\"\n\nif [[ -n \"${WRAPPER_EXTENSION}\" ]] && [ \"`xcrun --find actool`\" ] && [ -n \"${XCASSET_FILES:-}\" ]\nthen\n  # Find all other xcassets (this unfortunately includes those of path pods and other targets).\n  OTHER_XCASSETS=$(find -L \"$PWD\" -iname \"*.xcassets\" -type d)\n  while read line; do\n    if [[ $line != \"${PODS_ROOT}*\" ]]; then\n      XCASSET_FILES+=(\"$line\")\n    fi\n  done <<<\"$OTHER_XCASSETS\"\n\n  if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then\n    printf \"%s\\0\" \"${XCASSET_FILES[@]}\" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform \"${PLATFORM_NAME}\" --minimum-deployment-target \"${!DEPLOYMENT_TARGET_SETTING_NAME}\" ${TARGET_DEVICE_ARGS} --compress-pngs --compile \"${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n  else\n    printf \"%s\\0\" \"${XCASSET_FILES[@]}\" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform \"${PLATFORM_NAME}\" --minimum-deployment-target \"${!DEPLOYMENT_TARGET_SETTING_NAME}\" ${TARGET_DEVICE_ARGS} --compress-pngs --compile \"${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\" --app-icon \"${ASSETCATALOG_COMPILER_APPICON_NAME}\" --output-partial-info-plist \"${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist\"\n  fi\nfi\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Pods-WatermelonTester-WatermelonTesterTests/Pods-WatermelonTester-WatermelonTesterTests.debug.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-Mapbuffer\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-RCTAnimation\" \"${PODS_ROOT}/Headers/Public/React-RCTAppDelegate\" \"${PODS_ROOT}/Headers/Public/React-RCTBlob\" \"${PODS_ROOT}/Headers/Public/React-RCTFabric\" \"${PODS_ROOT}/Headers/Public/React-RCTText\" \"${PODS_ROOT}/Headers/Public/React-RuntimeApple\" \"${PODS_ROOT}/Headers/Public/React-RuntimeCore\" \"${PODS_ROOT}/Headers/Public/React-RuntimeHermes\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jserrorhandler\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-nativeconfig\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/WatermelonDB\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"${PODS_ROOT}/Headers/Public/simdjson\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/Headers/Private/React-Core\"\nLD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'\nLIBRARY_SEARCH_PATHS = $(inherited) \"${PODS_CONFIGURATION_BUILD_DIR}/DoubleConversion\" \"${PODS_CONFIGURATION_BUILD_DIR}/RCT-Folly\" \"${PODS_CONFIGURATION_BUILD_DIR}/RCTDeprecation\" \"${PODS_CONFIGURATION_BUILD_DIR}/RCTTypeSafety\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Core\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-CoreModules\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-FabricImage\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-ImageManager\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Mapbuffer\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTAnimation\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTAppDelegate\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTBlob\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTFabric\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTImage\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTLinking\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTNetwork\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTSettings\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTText\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTVibration\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RuntimeApple\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RuntimeCore\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RuntimeHermes\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-debug\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-featureflags\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-hermes\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jserrorhandler\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jsi\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jsiexecutor\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-logger\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-nativeconfig\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-perflogger\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-rendererdebug\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-runtimescheduler\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-utils\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon\" \"${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket\" \"${PODS_CONFIGURATION_BUILD_DIR}/WatermelonDB\" \"${PODS_CONFIGURATION_BUILD_DIR}/Yoga\" \"${PODS_CONFIGURATION_BUILD_DIR}/fmt\" \"${PODS_CONFIGURATION_BUILD_DIR}/glog\" \"${PODS_CONFIGURATION_BUILD_DIR}/simdjson\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTFabric/React-RCTFabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_RCTAppDelegate/React-RCTAppDelegate.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/simdjson/simdjson.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\" -isystem \"${PODS_ROOT}/Headers/Public\"\nOTHER_CPLUSPLUSFLAGS = $(inherited) -DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\nOTHER_LDFLAGS = $(inherited) -ObjC -l\"DoubleConversion\" -l\"RCT-Folly\" -l\"RCTDeprecation\" -l\"RCTTypeSafety\" -l\"React-Codegen\" -l\"React-Core\" -l\"React-CoreModules\" -l\"React-Fabric\" -l\"React-FabricImage\" -l\"React-ImageManager\" -l\"React-Mapbuffer\" -l\"React-NativeModulesApple\" -l\"React-RCTAnimation\" -l\"React-RCTAppDelegate\" -l\"React-RCTBlob\" -l\"React-RCTFabric\" -l\"React-RCTImage\" -l\"React-RCTLinking\" -l\"React-RCTNetwork\" -l\"React-RCTSettings\" -l\"React-RCTText\" -l\"React-RCTVibration\" -l\"React-RuntimeApple\" -l\"React-RuntimeCore\" -l\"React-RuntimeHermes\" -l\"React-cxxreact\" -l\"React-debug\" -l\"React-featureflags\" -l\"React-graphics\" -l\"React-hermes\" -l\"React-jserrorhandler\" -l\"React-jsi\" -l\"React-jsiexecutor\" -l\"React-jsinspector\" -l\"React-logger\" -l\"React-nativeconfig\" -l\"React-perflogger\" -l\"React-rendererdebug\" -l\"React-runtimescheduler\" -l\"React-utils\" -l\"ReactCommon\" -l\"SocketRocket\" -l\"WatermelonDB\" -l\"Yoga\" -l\"c++\" -l\"c++abi\" -l\"fmt\" -l\"glog\" -l\"icucore\" -l\"simdjson\" -l\"sqlite3\" -framework \"Accelerate\" -framework \"AudioToolbox\" -framework \"CFNetwork\" -framework \"JavaScriptCore\" -framework \"MobileCoreServices\" -framework \"Security\" -framework \"UIKit\" -framework \"hermes\"\nOTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTFabric/React-RCTFabric.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_RCTAppDelegate/React-RCTAppDelegate.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/simdjson/simdjson.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_PODFILE_DIR_PATH = ${SRCROOT}/.\nPODS_ROOT = ${SRCROOT}/Pods\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Pods-WatermelonTester-WatermelonTesterTests/Pods-WatermelonTester-WatermelonTesterTests.release.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-Mapbuffer\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-RCTAnimation\" \"${PODS_ROOT}/Headers/Public/React-RCTAppDelegate\" \"${PODS_ROOT}/Headers/Public/React-RCTBlob\" \"${PODS_ROOT}/Headers/Public/React-RCTFabric\" \"${PODS_ROOT}/Headers/Public/React-RCTText\" \"${PODS_ROOT}/Headers/Public/React-RuntimeApple\" \"${PODS_ROOT}/Headers/Public/React-RuntimeCore\" \"${PODS_ROOT}/Headers/Public/React-RuntimeHermes\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jserrorhandler\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-nativeconfig\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/WatermelonDB\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"${PODS_ROOT}/Headers/Public/simdjson\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/Headers/Private/React-Core\"\nLD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'\nLIBRARY_SEARCH_PATHS = $(inherited) \"${PODS_CONFIGURATION_BUILD_DIR}/DoubleConversion\" \"${PODS_CONFIGURATION_BUILD_DIR}/RCT-Folly\" \"${PODS_CONFIGURATION_BUILD_DIR}/RCTDeprecation\" \"${PODS_CONFIGURATION_BUILD_DIR}/RCTTypeSafety\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Core\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-CoreModules\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-FabricImage\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-ImageManager\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Mapbuffer\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTAnimation\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTAppDelegate\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTBlob\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTFabric\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTImage\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTLinking\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTNetwork\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTSettings\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTText\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTVibration\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RuntimeApple\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RuntimeCore\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RuntimeHermes\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-debug\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-featureflags\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-hermes\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jserrorhandler\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jsi\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jsiexecutor\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-logger\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-nativeconfig\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-perflogger\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-rendererdebug\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-runtimescheduler\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-utils\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon\" \"${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket\" \"${PODS_CONFIGURATION_BUILD_DIR}/WatermelonDB\" \"${PODS_CONFIGURATION_BUILD_DIR}/Yoga\" \"${PODS_CONFIGURATION_BUILD_DIR}/fmt\" \"${PODS_CONFIGURATION_BUILD_DIR}/glog\" \"${PODS_CONFIGURATION_BUILD_DIR}/simdjson\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTFabric/React-RCTFabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_RCTAppDelegate/React-RCTAppDelegate.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/simdjson/simdjson.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\" -isystem \"${PODS_ROOT}/Headers/Public\" -DNDEBUG\nOTHER_CPLUSPLUSFLAGS = $(inherited) -DNDEBUG -DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\nOTHER_LDFLAGS = $(inherited) -ObjC -l\"DoubleConversion\" -l\"RCT-Folly\" -l\"RCTDeprecation\" -l\"RCTTypeSafety\" -l\"React-Codegen\" -l\"React-Core\" -l\"React-CoreModules\" -l\"React-Fabric\" -l\"React-FabricImage\" -l\"React-ImageManager\" -l\"React-Mapbuffer\" -l\"React-NativeModulesApple\" -l\"React-RCTAnimation\" -l\"React-RCTAppDelegate\" -l\"React-RCTBlob\" -l\"React-RCTFabric\" -l\"React-RCTImage\" -l\"React-RCTLinking\" -l\"React-RCTNetwork\" -l\"React-RCTSettings\" -l\"React-RCTText\" -l\"React-RCTVibration\" -l\"React-RuntimeApple\" -l\"React-RuntimeCore\" -l\"React-RuntimeHermes\" -l\"React-cxxreact\" -l\"React-debug\" -l\"React-featureflags\" -l\"React-graphics\" -l\"React-hermes\" -l\"React-jserrorhandler\" -l\"React-jsi\" -l\"React-jsiexecutor\" -l\"React-jsinspector\" -l\"React-logger\" -l\"React-nativeconfig\" -l\"React-perflogger\" -l\"React-rendererdebug\" -l\"React-runtimescheduler\" -l\"React-utils\" -l\"ReactCommon\" -l\"SocketRocket\" -l\"WatermelonDB\" -l\"Yoga\" -l\"c++\" -l\"c++abi\" -l\"fmt\" -l\"glog\" -l\"icucore\" -l\"simdjson\" -l\"sqlite3\" -framework \"Accelerate\" -framework \"AudioToolbox\" -framework \"CFNetwork\" -framework \"JavaScriptCore\" -framework \"MobileCoreServices\" -framework \"Security\" -framework \"UIKit\" -framework \"hermes\"\nOTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTFabric/React-RCTFabric.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_RCTAppDelegate/React-RCTAppDelegate.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/simdjson/simdjson.modulemap\" -Xcc -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_PODFILE_DIR_PATH = ${SRCROOT}/.\nPODS_ROOT = ${SRCROOT}/Pods\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/RCT-Folly/RCT-Folly-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_RCT_Folly : NSObject\n@end\n@implementation PodsDummy_RCT_Folly\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/RCT-Folly/RCT-Folly-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/RCT-Folly/RCT-Folly-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n#import \"folly/AtomicHashArray-inl.h\"\n#import \"folly/AtomicHashArray.h\"\n#import \"folly/AtomicHashMap-inl.h\"\n#import \"folly/AtomicHashMap.h\"\n#import \"folly/AtomicIntrusiveLinkedList.h\"\n#import \"folly/AtomicLinkedList.h\"\n#import \"folly/AtomicUnorderedMap.h\"\n#import \"folly/base64.h\"\n#import \"folly/Benchmark.h\"\n#import \"folly/BenchmarkUtil.h\"\n#import \"folly/Bits.h\"\n#import \"folly/CancellationToken-inl.h\"\n#import \"folly/CancellationToken.h\"\n#import \"folly/Chrono.h\"\n#import \"folly/ClockGettimeWrappers.h\"\n#import \"folly/ConcurrentBitSet.h\"\n#import \"folly/ConcurrentLazy.h\"\n#import \"folly/ConcurrentSkipList-inl.h\"\n#import \"folly/ConcurrentSkipList.h\"\n#import \"folly/ConstexprMath.h\"\n#import \"folly/ConstructorCallbackList.h\"\n#import \"folly/Conv.h\"\n#import \"folly/CPortability.h\"\n#import \"folly/CppAttributes.h\"\n#import \"folly/CpuId.h\"\n#import \"folly/DefaultKeepAliveExecutor.h\"\n#import \"folly/Demangle.h\"\n#import \"folly/DiscriminatedPtr.h\"\n#import \"folly/dynamic-inl.h\"\n#import \"folly/dynamic.h\"\n#import \"folly/DynamicConverter.h\"\n#import \"folly/Exception.h\"\n#import \"folly/ExceptionString.h\"\n#import \"folly/ExceptionWrapper-inl.h\"\n#import \"folly/ExceptionWrapper.h\"\n#import \"folly/Executor.h\"\n#import \"folly/Expected.h\"\n#import \"folly/FBString.h\"\n#import \"folly/FBVector.h\"\n#import \"folly/File.h\"\n#import \"folly/FileUtil.h\"\n#import \"folly/Fingerprint.h\"\n#import \"folly/FixedString.h\"\n#import \"folly/FollyMemcpy.h\"\n#import \"folly/FollyMemset.h\"\n#import \"folly/Format-inl.h\"\n#import \"folly/Format.h\"\n#import \"folly/FormatArg.h\"\n#import \"folly/FormatTraits.h\"\n#import \"folly/Function.h\"\n#import \"folly/GLog.h\"\n#import \"folly/GroupVarint.h\"\n#import \"folly/Hash.h\"\n#import \"folly/Indestructible.h\"\n#import \"folly/IndexedMemPool.h\"\n#import \"folly/IntrusiveList.h\"\n#import \"folly/IPAddress.h\"\n#import \"folly/IPAddressException.h\"\n#import \"folly/IPAddressV4.h\"\n#import \"folly/IPAddressV6.h\"\n#import \"folly/json.h\"\n#import \"folly/json_patch.h\"\n#import \"folly/json_pointer.h\"\n#import \"folly/Lazy.h\"\n#import \"folly/Likely.h\"\n#import \"folly/MacAddress.h\"\n#import \"folly/MapUtil.h\"\n#import \"folly/Math.h\"\n#import \"folly/MaybeManagedPtr.h\"\n#import \"folly/Memory.h\"\n#import \"folly/MicroLock.h\"\n#import \"folly/MicroSpinLock.h\"\n#import \"folly/MoveWrapper.h\"\n#import \"folly/MPMCPipeline.h\"\n#import \"folly/MPMCQueue.h\"\n#import \"folly/ObserverContainer.h\"\n#import \"folly/Optional.h\"\n#import \"folly/Overload.h\"\n#import \"folly/PackedSyncPtr.h\"\n#import \"folly/Padded.h\"\n#import \"folly/Poly-inl.h\"\n#import \"folly/Poly.h\"\n#import \"folly/PolyException.h\"\n#import \"folly/Portability.h\"\n#import \"folly/Preprocessor.h\"\n#import \"folly/ProducerConsumerQueue.h\"\n#import \"folly/Random-inl.h\"\n#import \"folly/Random.h\"\n#import \"folly/Range.h\"\n#import \"folly/Replaceable.h\"\n#import \"folly/RWSpinLock.h\"\n#import \"folly/ScopeGuard.h\"\n#import \"folly/SharedMutex.h\"\n#import \"folly/Singleton-inl.h\"\n#import \"folly/Singleton.h\"\n#import \"folly/SingletonThreadLocal.h\"\n#import \"folly/small_vector.h\"\n#import \"folly/SocketAddress.h\"\n#import \"folly/sorted_vector_types.h\"\n#import \"folly/SpinLock.h\"\n#import \"folly/stop_watch.h\"\n#import \"folly/String-inl.h\"\n#import \"folly/String.h\"\n#import \"folly/Subprocess.h\"\n#import \"folly/Synchronized.h\"\n#import \"folly/SynchronizedPtr.h\"\n#import \"folly/ThreadCachedInt.h\"\n#import \"folly/ThreadLocal.h\"\n#import \"folly/TimeoutQueue.h\"\n#import \"folly/TokenBucket.h\"\n#import \"folly/Traits.h\"\n#import \"folly/Try-inl.h\"\n#import \"folly/Try.h\"\n#import \"folly/Unicode.h\"\n#import \"folly/Unit.h\"\n#import \"folly/Uri-inl.h\"\n#import \"folly/Uri.h\"\n#import \"folly/UTF8String.h\"\n#import \"folly/Utility.h\"\n#import \"folly/Varint.h\"\n#import \"folly/VirtualExecutor.h\"\n#import \"folly/container/Access.h\"\n#import \"folly/container/Array.h\"\n#import \"folly/container/BitIterator.h\"\n#import \"folly/container/Enumerate.h\"\n#import \"folly/container/EvictingCacheMap.h\"\n#import \"folly/container/F14Map-fwd.h\"\n#import \"folly/container/F14Map.h\"\n#import \"folly/container/F14Set-fwd.h\"\n#import \"folly/container/F14Set.h\"\n#import \"folly/container/Foreach-inl.h\"\n#import \"folly/container/Foreach.h\"\n#import \"folly/container/heap_vector_types.h\"\n#import \"folly/container/HeterogeneousAccess-fwd.h\"\n#import \"folly/container/HeterogeneousAccess.h\"\n#import \"folly/container/IntrusiveHeap.h\"\n#import \"folly/container/Iterator.h\"\n#import \"folly/container/Merge.h\"\n#import \"folly/container/SparseByteSet.h\"\n#import \"folly/container/View.h\"\n#import \"folly/container/WeightedEvictingCacheMap.h\"\n#import \"folly/container/detail/BitIteratorDetail.h\"\n#import \"folly/container/detail/F14Defaults.h\"\n#import \"folly/container/detail/F14IntrinsicsAvailability.h\"\n#import \"folly/container/detail/F14MapFallback.h\"\n#import \"folly/container/detail/F14Mask.h\"\n#import \"folly/container/detail/F14Policy.h\"\n#import \"folly/container/detail/F14SetFallback.h\"\n#import \"folly/container/detail/F14Table.h\"\n#import \"folly/container/detail/Util.h\"\n#import \"folly/detail/AsyncTrace.h\"\n#import \"folly/detail/AtomicHashUtils.h\"\n#import \"folly/detail/AtomicUnorderedMapUtils.h\"\n#import \"folly/detail/DiscriminatedPtrDetail.h\"\n#import \"folly/detail/FileUtilDetail.h\"\n#import \"folly/detail/FileUtilVectorDetail.h\"\n#import \"folly/detail/FingerprintPolynomial.h\"\n#import \"folly/detail/Futex-inl.h\"\n#import \"folly/detail/Futex.h\"\n#import \"folly/detail/GroupVarintDetail.h\"\n#import \"folly/detail/IPAddress.h\"\n#import \"folly/detail/IPAddressSource.h\"\n#import \"folly/detail/Iterators.h\"\n#import \"folly/detail/MemoryIdler.h\"\n#import \"folly/detail/MPMCPipelineDetail.h\"\n#import \"folly/detail/PerfScoped.h\"\n#import \"folly/detail/PolyDetail.h\"\n#import \"folly/detail/RangeCommon.h\"\n#import \"folly/detail/RangeSse42.h\"\n#import \"folly/detail/SimdAnyOf.h\"\n#import \"folly/detail/SimdCharPlatform.h\"\n#import \"folly/detail/SimdForEach.h\"\n#import \"folly/detail/SimpleSimdStringUtils.h\"\n#import \"folly/detail/SimpleSimdStringUtilsImpl.h\"\n#import \"folly/detail/Singleton.h\"\n#import \"folly/detail/SlowFingerprint.h\"\n#import \"folly/detail/SocketFastOpen.h\"\n#import \"folly/detail/SplitStringSimd.h\"\n#import \"folly/detail/SplitStringSimdImpl.h\"\n#import \"folly/detail/Sse.h\"\n#import \"folly/detail/StaticSingletonManager.h\"\n#import \"folly/detail/ThreadLocalDetail.h\"\n#import \"folly/detail/TurnSequencer.h\"\n#import \"folly/detail/TypeList.h\"\n#import \"folly/detail/UniqueInstance.h\"\n#import \"folly/detail/UnrollUtils.h\"\n#import \"folly/functional/ApplyTuple.h\"\n#import \"folly/functional/Invoke.h\"\n#import \"folly/functional/Partial.h\"\n#import \"folly/functional/protocol.h\"\n#import \"folly/functional/traits.h\"\n#import \"folly/hash/Checksum.h\"\n#import \"folly/hash/FarmHash.h\"\n#import \"folly/hash/Hash.h\"\n#import \"folly/hash/SpookyHashV1.h\"\n#import \"folly/hash/SpookyHashV2.h\"\n#import \"folly/lang/Access.h\"\n#import \"folly/lang/Align.h\"\n#import \"folly/lang/Aligned.h\"\n#import \"folly/lang/Assume.h\"\n#import \"folly/lang/Badge.h\"\n#import \"folly/lang/Bits.h\"\n#import \"folly/lang/Builtin.h\"\n#import \"folly/lang/Byte.h\"\n#import \"folly/lang/CArray.h\"\n#import \"folly/lang/Cast.h\"\n#import \"folly/lang/CheckedMath.h\"\n#import \"folly/lang/CString.h\"\n#import \"folly/lang/CustomizationPoint.h\"\n#import \"folly/lang/Exception.h\"\n#import \"folly/lang/Extern.h\"\n#import \"folly/lang/Hint-inl.h\"\n#import \"folly/lang/Hint.h\"\n#import \"folly/lang/Keep.h\"\n#import \"folly/lang/Launder.h\"\n#import \"folly/lang/New.h\"\n#import \"folly/lang/Ordering.h\"\n#import \"folly/lang/Pretty.h\"\n#import \"folly/lang/PropagateConst.h\"\n#import \"folly/lang/RValueReferenceWrapper.h\"\n#import \"folly/lang/SafeAssert.h\"\n#import \"folly/lang/StaticConst.h\"\n#import \"folly/lang/Thunk.h\"\n#import \"folly/lang/ToAscii.h\"\n#import \"folly/lang/TypeInfo.h\"\n#import \"folly/lang/UncaughtExceptions.h\"\n#import \"folly/memory/Arena-inl.h\"\n#import \"folly/memory/Arena.h\"\n#import \"folly/memory/EnableSharedFromThis.h\"\n#import \"folly/memory/MallctlHelper.h\"\n#import \"folly/memory/Malloc.h\"\n#import \"folly/memory/MemoryResource.h\"\n#import \"folly/memory/not_null-inl.h\"\n#import \"folly/memory/not_null.h\"\n#import \"folly/memory/ReentrantAllocator.h\"\n#import \"folly/memory/SanitizeAddress.h\"\n#import \"folly/memory/SanitizeLeak.h\"\n#import \"folly/memory/ThreadCachedArena.h\"\n#import \"folly/memory/UninitializedMemoryHacks.h\"\n#import \"folly/memory/detail/MallocImpl.h\"\n#import \"folly/net/NetOps.h\"\n#import \"folly/net/NetOpsDispatcher.h\"\n#import \"folly/net/NetworkSocket.h\"\n#import \"folly/net/TcpInfo.h\"\n#import \"folly/net/TcpInfoDispatcher.h\"\n#import \"folly/net/TcpInfoTypes.h\"\n#import \"folly/net/detail/SocketFileDescriptorMap.h\"\n#import \"folly/portability/Asm.h\"\n#import \"folly/portability/Atomic.h\"\n#import \"folly/portability/Builtins.h\"\n#import \"folly/portability/Config.h\"\n#import \"folly/portability/Constexpr.h\"\n#import \"folly/portability/Dirent.h\"\n#import \"folly/portability/Event.h\"\n#import \"folly/portability/Fcntl.h\"\n#import \"folly/portability/Filesystem.h\"\n#import \"folly/portability/FmtCompile.h\"\n#import \"folly/portability/GFlags.h\"\n#import \"folly/portability/GMock.h\"\n#import \"folly/portability/GTest.h\"\n#import \"folly/portability/IOVec.h\"\n#import \"folly/portability/Libgen.h\"\n#import \"folly/portability/Libunwind.h\"\n#import \"folly/portability/Malloc.h\"\n#import \"folly/portability/Math.h\"\n#import \"folly/portability/Memory.h\"\n#import \"folly/portability/OpenSSL.h\"\n#import \"folly/portability/PThread.h\"\n#import \"folly/portability/Sched.h\"\n#import \"folly/portability/Sockets.h\"\n#import \"folly/portability/SourceLocation.h\"\n#import \"folly/portability/Stdio.h\"\n#import \"folly/portability/Stdlib.h\"\n#import \"folly/portability/String.h\"\n#import \"folly/portability/SysFile.h\"\n#import \"folly/portability/Syslog.h\"\n#import \"folly/portability/SysMembarrier.h\"\n#import \"folly/portability/SysMman.h\"\n#import \"folly/portability/SysResource.h\"\n#import \"folly/portability/SysStat.h\"\n#import \"folly/portability/SysSyscall.h\"\n#import \"folly/portability/SysTime.h\"\n#import \"folly/portability/SysTypes.h\"\n#import \"folly/portability/SysUio.h\"\n#import \"folly/portability/Time.h\"\n#import \"folly/portability/Unistd.h\"\n#import \"folly/portability/Windows.h\"\n#import \"folly/system/AtFork.h\"\n#import \"folly/system/HardwareConcurrency.h\"\n#import \"folly/system/MemoryMapping.h\"\n#import \"folly/system/Pid.h\"\n#import \"folly/system/Shell.h\"\n#import \"folly/system/ThreadId.h\"\n#import \"folly/system/ThreadName.h\"\n#import \"folly/concurrency/CacheLocality.h\"\n#import \"folly/synchronization/AsymmetricThreadFence.h\"\n#import \"folly/synchronization/AtomicNotification-inl.h\"\n#import \"folly/synchronization/AtomicNotification.h\"\n#import \"folly/synchronization/AtomicRef.h\"\n#import \"folly/synchronization/AtomicStruct.h\"\n#import \"folly/synchronization/AtomicUtil-inl.h\"\n#import \"folly/synchronization/AtomicUtil.h\"\n#import \"folly/synchronization/Baton.h\"\n#import \"folly/synchronization/CallOnce.h\"\n#import \"folly/synchronization/DelayedInit.h\"\n#import \"folly/synchronization/DistributedMutex-inl.h\"\n#import \"folly/synchronization/DistributedMutex.h\"\n#import \"folly/synchronization/Hazptr-fwd.h\"\n#import \"folly/synchronization/Hazptr.h\"\n#import \"folly/synchronization/HazptrDomain.h\"\n#import \"folly/synchronization/HazptrHolder.h\"\n#import \"folly/synchronization/HazptrObj.h\"\n#import \"folly/synchronization/HazptrObjLinked.h\"\n#import \"folly/synchronization/HazptrRec.h\"\n#import \"folly/synchronization/HazptrThreadPoolExecutor.h\"\n#import \"folly/synchronization/HazptrThrLocal.h\"\n#import \"folly/synchronization/Latch.h\"\n#import \"folly/synchronization/LifoSem.h\"\n#import \"folly/synchronization/Lock.h\"\n#import \"folly/synchronization/MicroSpinLock.h\"\n#import \"folly/synchronization/NativeSemaphore.h\"\n#import \"folly/synchronization/ParkingLot.h\"\n#import \"folly/synchronization/PicoSpinLock.h\"\n#import \"folly/synchronization/Rcu.h\"\n#import \"folly/synchronization/RelaxedAtomic.h\"\n#import \"folly/synchronization/RWSpinLock.h\"\n#import \"folly/synchronization/SanitizeThread.h\"\n#import \"folly/synchronization/SaturatingSemaphore.h\"\n#import \"folly/synchronization/SmallLocks.h\"\n#import \"folly/synchronization/ThrottledLifoSem.h\"\n#import \"folly/synchronization/Utility.h\"\n#import \"folly/synchronization/WaitOptions.h\"\n#import \"folly/system/ThreadId.h\"\n\nFOUNDATION_EXPORT double follyVersionNumber;\nFOUNDATION_EXPORT const unsigned char follyVersionString[];\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/RCT-Folly/RCT-Folly.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RCT-Folly\nDEFINES_MODULE = YES\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/RCT-Folly\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"$(PODS_TARGET_SRCROOT)\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\"\nOTHER_LDFLAGS = $(inherited) -Wl,-U,_jump_fcontext -Wl,-U,_make_fcontext\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/RCT-Folly\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = NO\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/RCT-Folly/RCT-Folly.modulemap",
    "content": "module folly {\n  umbrella header \"RCT-Folly-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/RCT-Folly/RCT-Folly.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RCT-Folly\nDEFINES_MODULE = YES\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/RCT-Folly\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"$(PODS_TARGET_SRCROOT)\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\"\nOTHER_LDFLAGS = $(inherited) -Wl,-U,_jump_fcontext -Wl,-U,_make_fcontext\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/RCT-Folly\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = NO\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/RCTDeprecation/RCTDeprecation-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_RCTDeprecation : NSObject\n@end\n@implementation PodsDummy_RCTDeprecation\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/RCTDeprecation/RCTDeprecation-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/RCTDeprecation/RCTDeprecation-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n#import \"RCTDeprecation.h\"\n\nFOUNDATION_EXPORT double RCTDeprecationVersionNumber;\nFOUNDATION_EXPORT const unsigned char RCTDeprecationVersionString[];\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/RCTDeprecation/RCTDeprecation.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RCTDeprecation\nDEFINES_MODULE = YES\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/RCTDeprecation/RCTDeprecation.modulemap",
    "content": "module RCTDeprecation {\n  umbrella header \"RCTDeprecation-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/RCTDeprecation/RCTDeprecation.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RCTDeprecation\nDEFINES_MODULE = YES\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/RCTRequired/RCTRequired.debug.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RCTRequired\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/RCTRequired\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/RCTRequired\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/Libraries/Required\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/RCTRequired/RCTRequired.release.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RCTRequired\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/RCTRequired\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/RCTRequired\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/Libraries/Required\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/RCTTypeSafety/RCTTypeSafety-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_RCTTypeSafety : NSObject\n@end\n@implementation PodsDummy_RCTTypeSafety\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/RCTTypeSafety/RCTTypeSafety-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/RCTTypeSafety/RCTTypeSafety-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n#import \"RCTTypeSafety/RCTConvertHelpers.h\"\n#import \"RCTTypeSafety/RCTTypedModuleConstants.h\"\n\nFOUNDATION_EXPORT double RCTTypeSafetyVersionNumber;\nFOUNDATION_EXPORT const unsigned char RCTTypeSafetyVersionString[];\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/RCTTypeSafety/RCTTypeSafety.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RCTTypeSafety\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_TARGET_SRCROOT)/Libraries/TypeSafety\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/Libraries/TypeSafety\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/RCTTypeSafety/RCTTypeSafety.modulemap",
    "content": "module RCTTypeSafety {\n  umbrella header \"RCTTypeSafety-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/RCTTypeSafety/RCTTypeSafety.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RCTTypeSafety\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_TARGET_SRCROOT)/Libraries/TypeSafety\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/Libraries/TypeSafety\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React/React.debug.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-RCTAnimation\" \"${PODS_ROOT}/Headers/Public/React-RCTBlob\" \"${PODS_ROOT}/Headers/Public/React-RCTText\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React/React.release.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-RCTAnimation\" \"${PODS_ROOT}/Headers/Public/React-RCTBlob\" \"${PODS_ROOT}/Headers/Public/React-RCTText\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-Codegen/React-Codegen-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_Codegen : NSObject\n@end\n@implementation PodsDummy_React_Codegen\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-Codegen/React-Codegen-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-Codegen/React-Codegen-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n#import \"FBReactNativeSpec/FBReactNativeSpec.h\"\n#import \"FBReactNativeSpecJSI.h\"\n#import \"RCTModulesConformingToProtocolsProvider.h\"\n\nFOUNDATION_EXPORT double React_CodegenVersionNumber;\nFOUNDATION_EXPORT const unsigned char React_CodegenVersionString[];\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-Codegen/React-Codegen.debug.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-Codegen\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\" \"${PODS_ROOT}/Headers/Public/React-Codegen/react/renderer/components\" \"$(PODS_ROOT)/Headers/Private/React-Fabric\" \"$(PODS_ROOT)/Headers/Private/React-RCTFabric\" \"$(PODS_ROOT)/Headers/Private/Yoga\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\" \"$(PODS_TARGET_SRCROOT)\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../build/generated/ios\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-Codegen/React-Codegen.modulemap",
    "content": "module React_Codegen {\n  umbrella header \"React-Codegen-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-Codegen/React-Codegen.release.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-Codegen\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\" \"${PODS_ROOT}/Headers/Public/React-Codegen/react/renderer/components\" \"$(PODS_ROOT)/Headers/Private/React-Fabric\" \"$(PODS_ROOT)/Headers/Private/React-RCTFabric\" \"$(PODS_ROOT)/Headers/Private/Yoga\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\" \"$(PODS_TARGET_SRCROOT)\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../build/generated/ios\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-Core/React-Core-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_Core : NSObject\n@end\n@implementation PodsDummy_React_Core\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-Core/React-Core-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-Core/React-Core-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n#import \"React/CoreModulesPlugins.h\"\n#import \"React/RCTAccessibilityManager+Internal.h\"\n#import \"React/RCTAccessibilityManager.h\"\n#import \"React/RCTActionSheetManager.h\"\n#import \"React/RCTAlertController.h\"\n#import \"React/RCTAlertManager.h\"\n#import \"React/RCTAppearance.h\"\n#import \"React/RCTAppState.h\"\n#import \"React/RCTClipboard.h\"\n#import \"React/RCTDeviceInfo.h\"\n#import \"React/RCTDevLoadingView.h\"\n#import \"React/RCTDevMenu.h\"\n#import \"React/RCTDevSettings.h\"\n#import \"React/RCTEventDispatcher.h\"\n#import \"React/RCTExceptionsManager.h\"\n#import \"React/RCTFPSGraph.h\"\n#import \"React/RCTI18nManager.h\"\n#import \"React/RCTKeyboardObserver.h\"\n#import \"React/RCTLogBox.h\"\n#import \"React/RCTLogBoxView.h\"\n#import \"React/RCTPlatform.h\"\n#import \"React/RCTRedBox.h\"\n#import \"React/RCTSourceCode.h\"\n#import \"React/RCTStatusBarManager.h\"\n#import \"React/RCTTiming.h\"\n#import \"React/RCTWebSocketExecutor.h\"\n#import \"React/RCTWebSocketModule.h\"\n#import \"React/RCTAssert.h\"\n#import \"React/RCTBridge+Inspector.h\"\n#import \"React/RCTBridge+Private.h\"\n#import \"React/RCTBridge.h\"\n#import \"React/RCTBridgeConstants.h\"\n#import \"React/RCTBridgeDelegate.h\"\n#import \"React/RCTBridgeMethod.h\"\n#import \"React/RCTBridgeModule.h\"\n#import \"React/RCTBridgeModuleDecorator.h\"\n#import \"React/RCTBridgeProxy+Cxx.h\"\n#import \"React/RCTBridgeProxy.h\"\n#import \"React/RCTBundleManager.h\"\n#import \"React/RCTBundleURLProvider.h\"\n#import \"React/RCTComponentEvent.h\"\n#import \"React/RCTConstants.h\"\n#import \"React/RCTConvert.h\"\n#import \"React/RCTCxxConvert.h\"\n#import \"React/RCTDefines.h\"\n#import \"React/RCTDisplayLink.h\"\n#import \"React/RCTErrorCustomizer.h\"\n#import \"React/RCTErrorInfo.h\"\n#import \"React/RCTEventDispatcherProtocol.h\"\n#import \"React/RCTFrameUpdate.h\"\n#import \"React/RCTImageSource.h\"\n#import \"React/RCTInitializing.h\"\n#import \"React/RCTInvalidating.h\"\n#import \"React/RCTJavaScriptExecutor.h\"\n#import \"React/RCTJavaScriptLoader.h\"\n#import \"React/RCTJSStackFrame.h\"\n#import \"React/RCTJSThread.h\"\n#import \"React/RCTKeyCommands.h\"\n#import \"React/RCTLog.h\"\n#import \"React/RCTManagedPointer.h\"\n#import \"React/RCTMockDef.h\"\n#import \"React/RCTModuleData.h\"\n#import \"React/RCTModuleMethod.h\"\n#import \"React/RCTMultipartDataTask.h\"\n#import \"React/RCTMultipartStreamReader.h\"\n#import \"React/RCTNullability.h\"\n#import \"React/RCTParserUtils.h\"\n#import \"React/RCTPerformanceLogger.h\"\n#import \"React/RCTPerformanceLoggerLabels.h\"\n#import \"React/RCTPLTag.h\"\n#import \"React/RCTRedBoxSetEnabled.h\"\n#import \"React/RCTReloadCommand.h\"\n#import \"React/RCTRootContentView.h\"\n#import \"React/RCTRootView.h\"\n#import \"React/RCTRootViewDelegate.h\"\n#import \"React/RCTRootViewInternal.h\"\n#import \"React/RCTRuntimeExecutorModule.h\"\n#import \"React/RCTTouchEvent.h\"\n#import \"React/RCTTouchHandler.h\"\n#import \"React/RCTTurboModuleRegistry.h\"\n#import \"React/RCTURLRequestDelegate.h\"\n#import \"React/RCTURLRequestHandler.h\"\n#import \"React/RCTUtils.h\"\n#import \"React/RCTUtilsUIOverride.h\"\n#import \"React/RCTVersion.h\"\n#import \"React/RCTSurface.h\"\n#import \"React/RCTSurfaceDelegate.h\"\n#import \"React/RCTSurfaceProtocol.h\"\n#import \"React/RCTSurfaceRootShadowView.h\"\n#import \"React/RCTSurfaceRootShadowViewDelegate.h\"\n#import \"React/RCTSurfaceRootView.h\"\n#import \"React/RCTSurfaceStage.h\"\n#import \"React/RCTSurfaceView+Internal.h\"\n#import \"React/RCTSurfaceView.h\"\n#import \"React/RCTSurfaceHostingProxyRootView.h\"\n#import \"React/RCTSurfaceHostingView.h\"\n#import \"React/RCTSurfaceSizeMeasureMode.h\"\n#import \"React/FBXXHashUtils.h\"\n#import \"React/RCTLocalizedString.h\"\n#import \"React/RCTEventEmitter.h\"\n#import \"React/RCTI18nUtil.h\"\n#import \"React/RCTLayoutAnimation.h\"\n#import \"React/RCTLayoutAnimationGroup.h\"\n#import \"React/RCTRedBoxExtraDataViewController.h\"\n#import \"React/RCTSurfacePresenterStub.h\"\n#import \"React/RCTUIManager.h\"\n#import \"React/RCTUIManagerObserverCoordinator.h\"\n#import \"React/RCTUIManagerUtils.h\"\n#import \"React/RCTMacros.h\"\n#import \"React/RCTProfile.h\"\n#import \"React/RCTUIUtils.h\"\n#import \"React/RCTActivityIndicatorView.h\"\n#import \"React/RCTActivityIndicatorViewManager.h\"\n#import \"React/RCTAnimationType.h\"\n#import \"React/RCTAutoInsetsProtocol.h\"\n#import \"React/RCTBorderCurve.h\"\n#import \"React/RCTBorderDrawing.h\"\n#import \"React/RCTBorderStyle.h\"\n#import \"React/RCTComponent.h\"\n#import \"React/RCTComponentData.h\"\n#import \"React/RCTConvert+CoreLocation.h\"\n#import \"React/RCTConvert+Transform.h\"\n#import \"React/RCTCursor.h\"\n#import \"React/RCTDebuggingOverlay.h\"\n#import \"React/RCTDebuggingOverlayManager.h\"\n#import \"React/RCTFont.h\"\n#import \"React/RCTLayout.h\"\n#import \"React/RCTModalHostView.h\"\n#import \"React/RCTModalHostViewController.h\"\n#import \"React/RCTModalHostViewManager.h\"\n#import \"React/RCTModalManager.h\"\n#import \"React/RCTPointerEvents.h\"\n#import \"React/RCTRootShadowView.h\"\n#import \"React/RCTSegmentedControl.h\"\n#import \"React/RCTSegmentedControlManager.h\"\n#import \"React/RCTShadowView+Internal.h\"\n#import \"React/RCTShadowView+Layout.h\"\n#import \"React/RCTShadowView.h\"\n#import \"React/RCTSwitch.h\"\n#import \"React/RCTSwitchManager.h\"\n#import \"React/RCTTextDecorationLineType.h\"\n#import \"React/RCTView.h\"\n#import \"React/RCTViewManager.h\"\n#import \"React/RCTViewUtils.h\"\n#import \"React/RCTWrapperViewController.h\"\n#import \"React/RCTRefreshableProtocol.h\"\n#import \"React/RCTRefreshControl.h\"\n#import \"React/RCTRefreshControlManager.h\"\n#import \"React/RCTSafeAreaShadowView.h\"\n#import \"React/RCTSafeAreaView.h\"\n#import \"React/RCTSafeAreaViewLocalData.h\"\n#import \"React/RCTSafeAreaViewManager.h\"\n#import \"React/RCTScrollableProtocol.h\"\n#import \"React/RCTScrollContentShadowView.h\"\n#import \"React/RCTScrollContentView.h\"\n#import \"React/RCTScrollContentViewManager.h\"\n#import \"React/RCTScrollEvent.h\"\n#import \"React/RCTScrollView.h\"\n#import \"React/RCTScrollViewManager.h\"\n#import \"React/UIView+Private.h\"\n#import \"React/UIView+React.h\"\n#import \"React/RCTDevLoadingViewProtocol.h\"\n#import \"React/RCTDevLoadingViewSetEnabled.h\"\n#import \"React/RCTInspectorDevServerHelper.h\"\n#import \"React/RCTPackagerClient.h\"\n#import \"React/RCTPackagerConnection.h\"\n#import \"React/RCTInspector.h\"\n#import \"React/RCTInspectorPackagerConnection.h\"\n#import \"React/RCTAnimationDriver.h\"\n#import \"React/RCTDecayAnimation.h\"\n#import \"React/RCTEventAnimation.h\"\n#import \"React/RCTFrameAnimation.h\"\n#import \"React/RCTSpringAnimation.h\"\n#import \"React/RCTAdditionAnimatedNode.h\"\n#import \"React/RCTAnimatedNode.h\"\n#import \"React/RCTColorAnimatedNode.h\"\n#import \"React/RCTDiffClampAnimatedNode.h\"\n#import \"React/RCTDivisionAnimatedNode.h\"\n#import \"React/RCTInterpolationAnimatedNode.h\"\n#import \"React/RCTModuloAnimatedNode.h\"\n#import \"React/RCTMultiplicationAnimatedNode.h\"\n#import \"React/RCTObjectAnimatedNode.h\"\n#import \"React/RCTPropsAnimatedNode.h\"\n#import \"React/RCTStyleAnimatedNode.h\"\n#import \"React/RCTSubtractionAnimatedNode.h\"\n#import \"React/RCTTrackingAnimatedNode.h\"\n#import \"React/RCTTransformAnimatedNode.h\"\n#import \"React/RCTValueAnimatedNode.h\"\n#import \"React/RCTAnimationPlugins.h\"\n#import \"React/RCTAnimationUtils.h\"\n#import \"React/RCTNativeAnimatedModule.h\"\n#import \"React/RCTNativeAnimatedNodesManager.h\"\n#import \"React/RCTNativeAnimatedTurboModule.h\"\n#import \"React/RCTBlobManager.h\"\n#import \"React/RCTFileReaderModule.h\"\n#import \"React/RCTAnimatedImage.h\"\n#import \"React/RCTBundleAssetImageLoader.h\"\n#import \"React/RCTDisplayWeakRefreshable.h\"\n#import \"React/RCTGIFImageDecoder.h\"\n#import \"React/RCTImageBlurUtils.h\"\n#import \"React/RCTImageCache.h\"\n#import \"React/RCTImageDataDecoder.h\"\n#import \"React/RCTImageEditingManager.h\"\n#import \"React/RCTImageLoader.h\"\n#import \"React/RCTImageLoaderLoggable.h\"\n#import \"React/RCTImageLoaderProtocol.h\"\n#import \"React/RCTImageLoaderWithAttributionProtocol.h\"\n#import \"React/RCTImagePlugins.h\"\n#import \"React/RCTImageShadowView.h\"\n#import \"React/RCTImageStoreManager.h\"\n#import \"React/RCTImageURLLoader.h\"\n#import \"React/RCTImageURLLoaderWithAttribution.h\"\n#import \"React/RCTImageUtils.h\"\n#import \"React/RCTImageView.h\"\n#import \"React/RCTImageViewManager.h\"\n#import \"React/RCTLocalAssetImageLoader.h\"\n#import \"React/RCTResizeMode.h\"\n#import \"React/RCTUIImageViewAnimated.h\"\n#import \"React/RCTLinkingManager.h\"\n#import \"React/RCTLinkingPlugins.h\"\n#import \"React/RCTDataRequestHandler.h\"\n#import \"React/RCTFileRequestHandler.h\"\n#import \"React/RCTHTTPRequestHandler.h\"\n#import \"React/RCTNetworking.h\"\n#import \"React/RCTNetworkPlugins.h\"\n#import \"React/RCTNetworkTask.h\"\n#import \"React/RCTSettingsManager.h\"\n#import \"React/RCTSettingsPlugins.h\"\n#import \"React/RCTBaseTextShadowView.h\"\n#import \"React/RCTBaseTextViewManager.h\"\n#import \"React/RCTRawTextShadowView.h\"\n#import \"React/RCTRawTextViewManager.h\"\n#import \"React/RCTConvert+Text.h\"\n#import \"React/RCTTextAttributes.h\"\n#import \"React/RCTTextTransform.h\"\n#import \"React/NSTextStorage+FontScaling.h\"\n#import \"React/RCTDynamicTypeRamp.h\"\n#import \"React/RCTTextShadowView.h\"\n#import \"React/RCTTextView.h\"\n#import \"React/RCTTextViewManager.h\"\n#import \"React/RCTMultilineTextInputView.h\"\n#import \"React/RCTMultilineTextInputViewManager.h\"\n#import \"React/RCTUITextView.h\"\n#import \"React/RCTBackedTextInputDelegate.h\"\n#import \"React/RCTBackedTextInputDelegateAdapter.h\"\n#import \"React/RCTBackedTextInputViewProtocol.h\"\n#import \"React/RCTBaseTextInputShadowView.h\"\n#import \"React/RCTBaseTextInputView.h\"\n#import \"React/RCTBaseTextInputViewManager.h\"\n#import \"React/RCTInputAccessoryShadowView.h\"\n#import \"React/RCTInputAccessoryView.h\"\n#import \"React/RCTInputAccessoryViewContent.h\"\n#import \"React/RCTInputAccessoryViewManager.h\"\n#import \"React/RCTTextSelection.h\"\n#import \"React/RCTSinglelineTextInputView.h\"\n#import \"React/RCTSinglelineTextInputViewManager.h\"\n#import \"React/RCTUITextField.h\"\n#import \"React/RCTVirtualTextShadowView.h\"\n#import \"React/RCTVirtualTextView.h\"\n#import \"React/RCTVirtualTextViewManager.h\"\n#import \"React/RCTVibration.h\"\n#import \"React/RCTVibrationPlugins.h\"\n#import \"React/RCTReconnectingWebSocket.h\"\n\nFOUNDATION_EXPORT double ReactVersionNumber;\nFOUNDATION_EXPORT const unsigned char ReactVersionString[];\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-Core/React-Core.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-Core\nDEFINES_MODULE = YES\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-hermes\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 RCT_METRO_PORT=${RCT_METRO_PORT}\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-Core\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" $(PODS_TARGET_SRCROOT)/ReactCommon $(PODS_ROOT)/boost $(PODS_ROOT)/DoubleConversion $(PODS_ROOT)/fmt/include $(PODS_ROOT)/RCT-Folly ${PODS_ROOT}/Headers/Public/FlipperKit $(PODS_ROOT)/Headers/Public/ReactCommon $(PODS_ROOT)/Headers/Public/React-hermes $(PODS_ROOT)/Headers/Public/hermes-engine \"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector/jsinspector_modern.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/RCTDeprecation/RCTDeprecation.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-Core/React-Core.modulemap",
    "content": "module React {\n  umbrella header \"React-Core-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-Core/React-Core.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-Core\nDEFINES_MODULE = YES\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-hermes\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 RCT_METRO_PORT=${RCT_METRO_PORT}\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-Core\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" $(PODS_TARGET_SRCROOT)/ReactCommon $(PODS_ROOT)/boost $(PODS_ROOT)/DoubleConversion $(PODS_ROOT)/fmt/include $(PODS_ROOT)/RCT-Folly ${PODS_ROOT}/Headers/Public/FlipperKit $(PODS_ROOT)/Headers/Public/ReactCommon $(PODS_ROOT)/Headers/Public/React-hermes $(PODS_ROOT)/Headers/Public/hermes-engine \"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector/jsinspector_modern.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/RCTDeprecation/RCTDeprecation.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-Core/ResourceBundle-RCTI18nStrings-React-Core-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>CFBundleDevelopmentRegion</key>\n  <string>${PODS_DEVELOPMENT_LANGUAGE}</string>\n  <key>CFBundleIdentifier</key>\n  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>\n  <key>CFBundleInfoDictionaryVersion</key>\n  <string>6.0</string>\n  <key>CFBundleName</key>\n  <string>${PRODUCT_NAME}</string>\n  <key>CFBundlePackageType</key>\n  <string>BNDL</string>\n  <key>CFBundleShortVersionString</key>\n  <string>0.74.6</string>\n  <key>CFBundleSignature</key>\n  <string>????</string>\n  <key>CFBundleVersion</key>\n  <string>1</string>\n  <key>NSPrincipalClass</key>\n  <string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-CoreModules/React-CoreModules-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_CoreModules : NSObject\n@end\n@implementation PodsDummy_React_CoreModules\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-CoreModules/React-CoreModules-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-CoreModules/React-CoreModules.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-CoreModules\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-RCTBlob\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/boost\" \"$(PODS_TARGET_SRCROOT)/React/CoreModules\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\" \"${PODS_ROOT}/Headers/Public/React-Codegen/react/renderer/components\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector/jsinspector_modern.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/React/CoreModules\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-CoreModules/React-CoreModules.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-CoreModules\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-RCTBlob\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/boost\" \"$(PODS_TARGET_SRCROOT)/React/CoreModules\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\" \"${PODS_ROOT}/Headers/Public/React-Codegen/react/renderer/components\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector/jsinspector_modern.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/React/CoreModules\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-Fabric/React-Fabric-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_Fabric : NSObject\n@end\n@implementation PodsDummy_React_Fabric\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-Fabric/React-Fabric-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-Fabric/React-Fabric-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n#import \"react/renderer/animations/conversions.h\"\n#import \"react/renderer/animations/LayoutAnimationCallbackWrapper.h\"\n#import \"react/renderer/animations/LayoutAnimationDriver.h\"\n#import \"react/renderer/animations/LayoutAnimationKeyFrameManager.h\"\n#import \"react/renderer/animations/primitives.h\"\n#import \"react/renderer/animations/utils.h\"\n#import \"react/renderer/attributedstring/AttributedString.h\"\n#import \"react/renderer/attributedstring/AttributedStringBox.h\"\n#import \"react/renderer/attributedstring/conversions.h\"\n#import \"react/renderer/attributedstring/ParagraphAttributes.h\"\n#import \"react/renderer/attributedstring/primitives.h\"\n#import \"react/renderer/attributedstring/TextAttributes.h\"\n#import \"react/renderer/componentregistry/ComponentDescriptorFactory.h\"\n#import \"react/renderer/componentregistry/ComponentDescriptorProvider.h\"\n#import \"react/renderer/componentregistry/ComponentDescriptorProviderRegistry.h\"\n#import \"react/renderer/componentregistry/ComponentDescriptorRegistry.h\"\n#import \"react/renderer/componentregistry/componentNameByReactViewName.h\"\n#import \"react/renderer/componentregistry/native/NativeComponentRegistryBinding.h\"\n#import \"react/renderer/components/inputaccessory/InputAccessoryComponentDescriptor.h\"\n#import \"react/renderer/components/inputaccessory/InputAccessoryShadowNode.h\"\n#import \"react/renderer/components/inputaccessory/InputAccessoryState.h\"\n#import \"react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropComponentDescriptor.h\"\n#import \"react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropShadowNode.h\"\n#import \"react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropState.h\"\n#import \"react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropViewEventEmitter.h\"\n#import \"react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropViewProps.h\"\n#import \"react/renderer/components/legacyviewmanagerinterop/RCTLegacyViewManagerInteropCoordinator.h\"\n#import \"react/renderer/components/legacyviewmanagerinterop/UnstableLegacyViewManagerAutomaticComponentDescriptor.h\"\n#import \"react/renderer/components/legacyviewmanagerinterop/UnstableLegacyViewManagerAutomaticShadowNode.h\"\n#import \"react/renderer/components/legacyviewmanagerinterop/UnstableLegacyViewManagerInteropComponentDescriptor.h\"\n#import \"react/renderer/components/modal/ModalHostViewComponentDescriptor.h\"\n#import \"react/renderer/components/modal/ModalHostViewShadowNode.h\"\n#import \"react/renderer/components/modal/ModalHostViewState.h\"\n#import \"react/renderer/components/rncore/ComponentDescriptors.h\"\n#import \"react/renderer/components/rncore/EventEmitters.h\"\n#import \"react/renderer/components/rncore/Props.h\"\n#import \"react/renderer/components/rncore/RCTComponentViewHelpers.h\"\n#import \"react/renderer/components/rncore/ShadowNodes.h\"\n#import \"react/renderer/components/rncore/States.h\"\n#import \"react/renderer/components/root/RootComponentDescriptor.h\"\n#import \"react/renderer/components/root/RootProps.h\"\n#import \"react/renderer/components/root/RootShadowNode.h\"\n#import \"react/renderer/components/safeareaview/SafeAreaViewComponentDescriptor.h\"\n#import \"react/renderer/components/safeareaview/SafeAreaViewShadowNode.h\"\n#import \"react/renderer/components/safeareaview/SafeAreaViewState.h\"\n#import \"react/renderer/components/scrollview/conversions.h\"\n#import \"react/renderer/components/scrollview/primitives.h\"\n#import \"react/renderer/components/scrollview/RCTComponentViewHelpers.h\"\n#import \"react/renderer/components/scrollview/ScrollViewComponentDescriptor.h\"\n#import \"react/renderer/components/scrollview/ScrollViewEventEmitter.h\"\n#import \"react/renderer/components/scrollview/ScrollViewProps.h\"\n#import \"react/renderer/components/scrollview/ScrollViewShadowNode.h\"\n#import \"react/renderer/components/scrollview/ScrollViewState.h\"\n#import \"react/renderer/components/text/BaseTextProps.h\"\n#import \"react/renderer/components/text/BaseTextShadowNode.h\"\n#import \"react/renderer/components/text/conversions.h\"\n#import \"react/renderer/components/text/ParagraphComponentDescriptor.h\"\n#import \"react/renderer/components/text/ParagraphEventEmitter.h\"\n#import \"react/renderer/components/text/ParagraphLayoutManager.h\"\n#import \"react/renderer/components/text/ParagraphProps.h\"\n#import \"react/renderer/components/text/ParagraphShadowNode.h\"\n#import \"react/renderer/components/text/ParagraphState.h\"\n#import \"react/renderer/components/text/RawTextComponentDescriptor.h\"\n#import \"react/renderer/components/text/RawTextProps.h\"\n#import \"react/renderer/components/text/RawTextShadowNode.h\"\n#import \"react/renderer/components/text/TextComponentDescriptor.h\"\n#import \"react/renderer/components/text/TextProps.h\"\n#import \"react/renderer/components/text/TextShadowNode.h\"\n#import \"react/renderer/components/iostextinput/conversions.h\"\n#import \"react/renderer/components/iostextinput/primitives.h\"\n#import \"react/renderer/components/iostextinput/propsConversions.h\"\n#import \"react/renderer/components/iostextinput/TextInputComponentDescriptor.h\"\n#import \"react/renderer/components/iostextinput/TextInputEventEmitter.h\"\n#import \"react/renderer/components/iostextinput/TextInputProps.h\"\n#import \"react/renderer/components/iostextinput/TextInputShadowNode.h\"\n#import \"react/renderer/components/iostextinput/TextInputState.h\"\n#import \"react/renderer/components/unimplementedview/UnimplementedViewComponentDescriptor.h\"\n#import \"react/renderer/components/unimplementedview/UnimplementedViewProps.h\"\n#import \"react/renderer/components/unimplementedview/UnimplementedViewShadowNode.h\"\n#import \"react/renderer/components/view/AccessibilityPrimitives.h\"\n#import \"react/renderer/components/view/AccessibilityProps.h\"\n#import \"react/renderer/components/view/accessibilityPropsConversions.h\"\n#import \"react/renderer/components/view/BaseTouch.h\"\n#import \"react/renderer/components/view/BaseViewEventEmitter.h\"\n#import \"react/renderer/components/view/BaseViewProps.h\"\n#import \"react/renderer/components/view/ConcreteViewShadowNode.h\"\n#import \"react/renderer/components/view/conversions.h\"\n#import \"react/renderer/components/view/HostPlatformTouch.h\"\n#import \"react/renderer/components/view/HostPlatformViewEventEmitter.h\"\n#import \"react/renderer/components/view/HostPlatformViewProps.h\"\n#import \"react/renderer/components/view/HostPlatformViewTraitsInitializer.h\"\n#import \"react/renderer/components/view/PointerEvent.h\"\n#import \"react/renderer/components/view/primitives.h\"\n#import \"react/renderer/components/view/propsConversions.h\"\n#import \"react/renderer/components/view/Touch.h\"\n#import \"react/renderer/components/view/TouchEvent.h\"\n#import \"react/renderer/components/view/TouchEventEmitter.h\"\n#import \"react/renderer/components/view/ViewComponentDescriptor.h\"\n#import \"react/renderer/components/view/ViewEventEmitter.h\"\n#import \"react/renderer/components/view/ViewProps.h\"\n#import \"react/renderer/components/view/ViewPropsInterpolation.h\"\n#import \"react/renderer/components/view/ViewShadowNode.h\"\n#import \"react/renderer/components/view/YogaLayoutableShadowNode.h\"\n#import \"react/renderer/components/view/YogaStylableProps.h\"\n#import \"react/renderer/core/BatchedEventQueue.h\"\n#import \"react/renderer/core/ComponentDescriptor.h\"\n#import \"react/renderer/core/ConcreteComponentDescriptor.h\"\n#import \"react/renderer/core/ConcreteShadowNode.h\"\n#import \"react/renderer/core/ConcreteState.h\"\n#import \"react/renderer/core/conversions.h\"\n#import \"react/renderer/core/DynamicPropsUtilities.h\"\n#import \"react/renderer/core/EventBeat.h\"\n#import \"react/renderer/core/EventDispatcher.h\"\n#import \"react/renderer/core/EventEmitter.h\"\n#import \"react/renderer/core/EventListener.h\"\n#import \"react/renderer/core/EventLogger.h\"\n#import \"react/renderer/core/EventPayload.h\"\n#import \"react/renderer/core/EventPayloadType.h\"\n#import \"react/renderer/core/EventPipe.h\"\n#import \"react/renderer/core/EventPriority.h\"\n#import \"react/renderer/core/EventQueue.h\"\n#import \"react/renderer/core/EventQueueProcessor.h\"\n#import \"react/renderer/core/EventTarget.h\"\n#import \"react/renderer/core/graphicsConversions.h\"\n#import \"react/renderer/core/InstanceHandle.h\"\n#import \"react/renderer/core/LayoutableShadowNode.h\"\n#import \"react/renderer/core/LayoutConstraints.h\"\n#import \"react/renderer/core/LayoutContext.h\"\n#import \"react/renderer/core/LayoutMetrics.h\"\n#import \"react/renderer/core/LayoutPrimitives.h\"\n#import \"react/renderer/core/Props.h\"\n#import \"react/renderer/core/propsConversions.h\"\n#import \"react/renderer/core/PropsMacros.h\"\n#import \"react/renderer/core/PropsParserContext.h\"\n#import \"react/renderer/core/RawEvent.h\"\n#import \"react/renderer/core/RawProps.h\"\n#import \"react/renderer/core/RawPropsKey.h\"\n#import \"react/renderer/core/RawPropsKeyMap.h\"\n#import \"react/renderer/core/RawPropsParser.h\"\n#import \"react/renderer/core/RawPropsPrimitives.h\"\n#import \"react/renderer/core/RawValue.h\"\n#import \"react/renderer/core/ReactEventPriority.h\"\n#import \"react/renderer/core/ReactPrimitives.h\"\n#import \"react/renderer/core/Sealable.h\"\n#import \"react/renderer/core/ShadowNode.h\"\n#import \"react/renderer/core/ShadowNodeFamily.h\"\n#import \"react/renderer/core/ShadowNodeFragment.h\"\n#import \"react/renderer/core/ShadowNodeTraits.h\"\n#import \"react/renderer/core/State.h\"\n#import \"react/renderer/core/StateData.h\"\n#import \"react/renderer/core/StatePipe.h\"\n#import \"react/renderer/core/StateUpdate.h\"\n#import \"react/renderer/core/UnbatchedEventQueue.h\"\n#import \"react/renderer/core/ValueFactory.h\"\n#import \"react/renderer/core/ValueFactoryEventPayload.h\"\n#import \"react/renderer/imagemanager/ImageManager.h\"\n#import \"react/renderer/imagemanager/ImageRequest.h\"\n#import \"react/renderer/imagemanager/ImageResponse.h\"\n#import \"react/renderer/imagemanager/ImageResponseObserver.h\"\n#import \"react/renderer/imagemanager/ImageResponseObserverCoordinator.h\"\n#import \"react/renderer/imagemanager/ImageTelemetry.h\"\n#import \"react/renderer/imagemanager/primitives.h\"\n#import \"react/renderer/leakchecker/LeakChecker.h\"\n#import \"react/renderer/leakchecker/WeakFamilyRegistry.h\"\n#import \"react/renderer/mounting/Differentiator.h\"\n#import \"react/renderer/mounting/MountingCoordinator.h\"\n#import \"react/renderer/mounting/MountingOverrideDelegate.h\"\n#import \"react/renderer/mounting/MountingTransaction.h\"\n#import \"react/renderer/mounting/ShadowTree.h\"\n#import \"react/renderer/mounting/ShadowTreeDelegate.h\"\n#import \"react/renderer/mounting/ShadowTreeRegistry.h\"\n#import \"react/renderer/mounting/ShadowTreeRevision.h\"\n#import \"react/renderer/mounting/ShadowView.h\"\n#import \"react/renderer/mounting/ShadowViewMutation.h\"\n#import \"react/renderer/mounting/stubs.h\"\n#import \"react/renderer/mounting/StubView.h\"\n#import \"react/renderer/mounting/StubViewTree.h\"\n#import \"react/renderer/mounting/TelemetryController.h\"\n#import \"react/renderer/scheduler/AsynchronousEventBeat.h\"\n#import \"react/renderer/scheduler/InspectorData.h\"\n#import \"react/renderer/scheduler/Scheduler.h\"\n#import \"react/renderer/scheduler/SchedulerDelegate.h\"\n#import \"react/renderer/scheduler/SchedulerToolbox.h\"\n#import \"react/renderer/scheduler/SurfaceHandler.h\"\n#import \"react/renderer/scheduler/SurfaceManager.h\"\n#import \"react/renderer/scheduler/SynchronousEventBeat.h\"\n#import \"react/renderer/telemetry/SurfaceTelemetry.h\"\n#import \"react/renderer/telemetry/TransactionTelemetry.h\"\n#import \"react/renderer/textlayoutmanager/RCTAttributedTextUtils.h\"\n#import \"react/renderer/textlayoutmanager/RCTFontProperties.h\"\n#import \"react/renderer/textlayoutmanager/RCTFontUtils.h\"\n#import \"react/renderer/textlayoutmanager/RCTTextLayoutManager.h\"\n#import \"react/renderer/textlayoutmanager/RCTTextPrimitivesConversions.h\"\n#import \"react/renderer/textlayoutmanager/TextLayoutManager.h\"\n#import \"react/renderer/textlayoutmanager/TextLayoutContext.h\"\n#import \"react/renderer/textlayoutmanager/TextMeasureCache.h\"\n#import \"react/renderer/uimanager/bindingUtils.h\"\n#import \"react/renderer/uimanager/LayoutAnimationStatusDelegate.h\"\n#import \"react/renderer/uimanager/PointerEventsProcessor.h\"\n#import \"react/renderer/uimanager/PointerHoverTracker.h\"\n#import \"react/renderer/uimanager/primitives.h\"\n#import \"react/renderer/uimanager/SurfaceRegistryBinding.h\"\n#import \"react/renderer/uimanager/UIManager.h\"\n#import \"react/renderer/uimanager/UIManagerAnimationDelegate.h\"\n#import \"react/renderer/uimanager/UIManagerBinding.h\"\n#import \"react/renderer/uimanager/UIManagerCommitHook.h\"\n#import \"react/renderer/uimanager/UIManagerDelegate.h\"\n#import \"react/renderer/uimanager/UIManagerMountHook.h\"\n\nFOUNDATION_EXPORT double React_FabricVersionNumber;\nFOUNDATION_EXPORT const unsigned char React_FabricVersionString[];\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-Fabric/React-Fabric.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric\nDEFINES_MODULE = YES\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nGCC_WARN_PEDANTIC = YES\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-Fabric\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-rendererdebug/React_rendererdebug.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-rendererdebug/React_rendererdebug.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\" \"$(PODS_ROOT)/Headers/Private/React-Core\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-rendererdebug/React_rendererdebug.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\" \"$(PODS_ROOT)/Headers/Private/Yoga\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-rendererdebug/React_rendererdebug.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\" \"$(PODS_ROOT)/boost\" \"$(PODS_TARGET_SRCROOT)/ReactCommon\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/Headers/Private/Yoga\" \"$(PODS_TARGET_SRCROOT)\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-Fabric/React-Fabric.modulemap",
    "content": "module React_Fabric {\n  umbrella header \"React-Fabric-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-Fabric/React-Fabric.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric\nDEFINES_MODULE = YES\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nGCC_WARN_PEDANTIC = YES\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-Fabric\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-rendererdebug/React_rendererdebug.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-rendererdebug/React_rendererdebug.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\" \"$(PODS_ROOT)/Headers/Private/React-Core\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-rendererdebug/React_rendererdebug.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\" \"$(PODS_ROOT)/Headers/Private/Yoga\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-rendererdebug/React_rendererdebug.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\" \"$(PODS_ROOT)/boost\" \"$(PODS_TARGET_SRCROOT)/ReactCommon\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/Headers/Private/Yoga\" \"$(PODS_TARGET_SRCROOT)\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-FabricImage/React-FabricImage-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_FabricImage : NSObject\n@end\n@implementation PodsDummy_React_FabricImage\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-FabricImage/React-FabricImage-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-FabricImage/React-FabricImage.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-FabricImage\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-FabricImage\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/boost\" \"$(PODS_TARGET_SRCROOT)/ReactCommon\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/Headers/Private/Yoga\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/imagemanager/platform/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-rendererdebug/React_rendererdebug.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-FabricImage/React-FabricImage.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-FabricImage\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-FabricImage\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/boost\" \"$(PODS_TARGET_SRCROOT)/ReactCommon\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/Headers/Private/Yoga\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/imagemanager/platform/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-rendererdebug/React_rendererdebug.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-ImageManager/React-ImageManager-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_ImageManager : NSObject\n@end\n@implementation PodsDummy_React_ImageManager\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-ImageManager/React-ImageManager-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-ImageManager/React-ImageManager-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n#import \"react/renderer/imagemanager/RCTImageManager.h\"\n#import \"react/renderer/imagemanager/RCTImageManagerProtocol.h\"\n#import \"react/renderer/imagemanager/RCTImagePrimitivesConversions.h\"\n#import \"react/renderer/imagemanager/RCTSyncImageManager.h\"\n\nFOUNDATION_EXPORT double react_renderer_imagemanagerVersionNumber;\nFOUNDATION_EXPORT const unsigned char react_renderer_imagemanagerVersionString[];\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-ImageManager/React-ImageManager.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-ImageManager\nDEFINES_MODULE = YES\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-ImageManager\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/boost\" \"$(PODS_TARGET_SRCROOT)/../../../\" \"$(PODS_TARGET_SRCROOT)\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-debug/React_debug.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-utils/React_utils.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-rendererdebug/React_rendererdebug.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = NO\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-ImageManager/React-ImageManager.modulemap",
    "content": "module react_renderer_imagemanager {\n  umbrella header \"React-ImageManager-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-ImageManager/React-ImageManager.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-ImageManager\nDEFINES_MODULE = YES\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-ImageManager\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/boost\" \"$(PODS_TARGET_SRCROOT)/../../../\" \"$(PODS_TARGET_SRCROOT)\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-debug/React_debug.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-utils/React_utils.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-rendererdebug/React_rendererdebug.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = NO\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-Mapbuffer/React-Mapbuffer-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_Mapbuffer : NSObject\n@end\n@implementation PodsDummy_React_Mapbuffer\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-Mapbuffer/React-Mapbuffer-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-Mapbuffer/React-Mapbuffer.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-Mapbuffer\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-Mapbuffer\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/React-Mapbuffer\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/glog\" \"$(PODS_TARGET_SRCROOT)\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-debug/React_debug.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-Mapbuffer/React-Mapbuffer.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-Mapbuffer\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-Mapbuffer\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/React-Mapbuffer\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/glog\" \"$(PODS_TARGET_SRCROOT)\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-debug/React_debug.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-NativeModulesApple/React-NativeModulesApple-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_NativeModulesApple : NSObject\n@end\n@implementation PodsDummy_React_NativeModulesApple\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-NativeModulesApple/React-NativeModulesApple-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-NativeModulesApple/React-NativeModulesApple-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n#import \"ReactCommon/RCTInteropTurboModule.h\"\n#import \"ReactCommon/RCTRuntimeExecutor.h\"\n#import \"ReactCommon/RCTTurboModule.h\"\n#import \"ReactCommon/RCTTurboModuleManager.h\"\n\nFOUNDATION_EXPORT double React_NativeModulesAppleVersionNumber;\nFOUNDATION_EXPORT const unsigned char React_NativeModulesAppleVersionString[];\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-NativeModulesApple/React-NativeModulesApple.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nGCC_WARN_PEDANTIC = YES\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\" \"$(PODS_ROOT)/Headers/Private/React-Core\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector/jsinspector_modern.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-NativeModulesApple/React-NativeModulesApple.modulemap",
    "content": "module React_NativeModulesApple {\n  umbrella header \"React-NativeModulesApple-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-NativeModulesApple/React-NativeModulesApple.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nGCC_WARN_PEDANTIC = YES\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\" \"$(PODS_ROOT)/Headers/Private/React-Core\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector/jsinspector_modern.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTActionSheet/React-RCTActionSheet.debug.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-RCTActionSheet\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/Libraries/ActionSheetIOS\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTActionSheet/React-RCTActionSheet.release.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-RCTActionSheet\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/Libraries/ActionSheetIOS\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTAnimation/React-RCTAnimation-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_RCTAnimation : NSObject\n@end\n@implementation PodsDummy_React_RCTAnimation\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTAnimation/React-RCTAnimation-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTAnimation/React-RCTAnimation.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-RCTAnimation\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-RCTAnimation\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-RCTAnimation\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-Codegen/react/renderer/components\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers/build/generated/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/Libraries/NativeAnimation\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTAnimation/React-RCTAnimation.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-RCTAnimation\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-RCTAnimation\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-RCTAnimation\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-Codegen/react/renderer/components\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers/build/generated/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/Libraries/NativeAnimation\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTAppDelegate/React-RCTAppDelegate-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_RCTAppDelegate : NSObject\n@end\n@implementation PodsDummy_React_RCTAppDelegate\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTAppDelegate/React-RCTAppDelegate-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTAppDelegate/React-RCTAppDelegate-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n#import \"RCTAppDelegate+Protected.h\"\n#import \"RCTAppDelegate.h\"\n#import \"RCTAppSetupUtils.h\"\n#import \"RCTRootViewFactory.h\"\n\nFOUNDATION_EXPORT double React_RCTAppDelegateVersionNumber;\nFOUNDATION_EXPORT const unsigned char React_RCTAppDelegateVersionString[];\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTAppDelegate/React-RCTAppDelegate.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-RCTAppDelegate\nDEFINES_MODULE = YES\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-RCTAppDelegate\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-Mapbuffer\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-RCTBlob\" \"${PODS_ROOT}/Headers/Public/React-RCTFabric\" \"${PODS_ROOT}/Headers/Public/React-RCTText\" \"${PODS_ROOT}/Headers/Public/React-RuntimeApple\" \"${PODS_ROOT}/Headers/Public/React-RuntimeCore\" \"${PODS_ROOT}/Headers/Public/React-RuntimeHermes\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jserrorhandler\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-nativeconfig\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" $(PODS_TARGET_SRCROOT)/../../ReactCommon $(PODS_ROOT)/Headers/Private/React-Core $(PODS_ROOT)/boost $(PODS_ROOT)/DoubleConversion $(PODS_ROOT)/fmt/include $(PODS_ROOT)/RCT-Folly ${PODS_ROOT}/Headers/Public/FlipperKit $(PODS_ROOT)/Headers/Public/ReactCommon $(PODS_ROOT)/Headers/Public/React-RCTFabric $(PODS_ROOT)/Headers/Private/Yoga $(PODS_ROOT)/Headers/Public/React-hermes $(PODS_ROOT)/Headers/Public/hermes-engine \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-runtimescheduler/React_runtimescheduler.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTFabric/RCTFabric.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RuntimeCore/React_RuntimeCore.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RuntimeApple/React_RuntimeApple.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-utils/React_utils.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-debug/React_debug.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-rendererdebug/React_rendererdebug.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-featureflags/React_featureflags.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTFabric/React-RCTFabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nOTHER_CPLUSPLUSFLAGS = $(inherited) -DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DUSE_HERMES\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/Libraries/AppDelegate\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTAppDelegate/React-RCTAppDelegate.modulemap",
    "content": "module React_RCTAppDelegate {\n  umbrella header \"React-RCTAppDelegate-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTAppDelegate/React-RCTAppDelegate.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-RCTAppDelegate\nDEFINES_MODULE = YES\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-RCTAppDelegate\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-Mapbuffer\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-RCTBlob\" \"${PODS_ROOT}/Headers/Public/React-RCTFabric\" \"${PODS_ROOT}/Headers/Public/React-RCTText\" \"${PODS_ROOT}/Headers/Public/React-RuntimeApple\" \"${PODS_ROOT}/Headers/Public/React-RuntimeCore\" \"${PODS_ROOT}/Headers/Public/React-RuntimeHermes\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jserrorhandler\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-nativeconfig\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" $(PODS_TARGET_SRCROOT)/../../ReactCommon $(PODS_ROOT)/Headers/Private/React-Core $(PODS_ROOT)/boost $(PODS_ROOT)/DoubleConversion $(PODS_ROOT)/fmt/include $(PODS_ROOT)/RCT-Folly ${PODS_ROOT}/Headers/Public/FlipperKit $(PODS_ROOT)/Headers/Public/ReactCommon $(PODS_ROOT)/Headers/Public/React-RCTFabric $(PODS_ROOT)/Headers/Private/Yoga $(PODS_ROOT)/Headers/Public/React-hermes $(PODS_ROOT)/Headers/Public/hermes-engine \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-runtimescheduler/React_runtimescheduler.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RCTFabric/RCTFabric.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RuntimeCore/React_RuntimeCore.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-RuntimeApple/React_RuntimeApple.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-utils/React_utils.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-debug/React_debug.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-rendererdebug/React_rendererdebug.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-featureflags/React_featureflags.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTFabric/React-RCTFabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nOTHER_CPLUSPLUSFLAGS = $(inherited) -DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32 -DUSE_HERMES\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/Libraries/AppDelegate\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTBlob/React-RCTBlob-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_RCTBlob : NSObject\n@end\n@implementation PodsDummy_React_RCTBlob\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTBlob/React-RCTBlob-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTBlob/React-RCTBlob.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-RCTBlob\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-RCTBlob\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-RCTBlob\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\" \"${PODS_ROOT}/Headers/Public/React-Codegen/react/renderer/components\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector/jsinspector_modern.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/Libraries/Blob\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTBlob/React-RCTBlob.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-RCTBlob\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-RCTBlob\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-RCTBlob\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\" \"${PODS_ROOT}/Headers/Public/React-Codegen/react/renderer/components\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector/jsinspector_modern.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/Libraries/Blob\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTFabric/React-RCTFabric-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_RCTFabric : NSObject\n@end\n@implementation PodsDummy_React_RCTFabric\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTFabric/React-RCTFabric-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTFabric/React-RCTFabric-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n#import \"React/RCTActivityIndicatorViewComponentView.h\"\n#import \"React/RCTDebuggingOverlayComponentView.h\"\n#import \"React/RCTImageComponentView.h\"\n#import \"React/RCTInputAccessoryComponentView.h\"\n#import \"React/RCTInputAccessoryContentView.h\"\n#import \"React/RCTLegacyViewManagerInteropComponentView.h\"\n#import \"React/RCTLegacyViewManagerInteropCoordinatorAdapter.h\"\n#import \"React/RCTFabricModalHostViewController.h\"\n#import \"React/RCTModalHostViewComponentView.h\"\n#import \"React/RCTFabricComponentsPlugins.h\"\n#import \"React/RCTRootComponentView.h\"\n#import \"React/RCTSafeAreaViewComponentView.h\"\n#import \"React/RCTCustomPullToRefreshViewProtocol.h\"\n#import \"React/RCTEnhancedScrollView.h\"\n#import \"React/RCTPullToRefreshViewComponentView.h\"\n#import \"React/RCTScrollViewComponentView.h\"\n#import \"React/RCTSwitchComponentView.h\"\n#import \"React/RCTAccessibilityElement.h\"\n#import \"React/RCTParagraphComponentAccessibilityProvider.h\"\n#import \"React/RCTParagraphComponentView.h\"\n#import \"React/RCTTextInputComponentView.h\"\n#import \"React/RCTTextInputNativeCommands.h\"\n#import \"React/RCTTextInputUtils.h\"\n#import \"React/RCTUnimplementedNativeComponentView.h\"\n#import \"React/RCTUnimplementedViewComponentView.h\"\n#import \"React/RCTViewComponentView.h\"\n#import \"React/RCTComponentViewClassDescriptor.h\"\n#import \"React/RCTComponentViewDescriptor.h\"\n#import \"React/RCTComponentViewFactory.h\"\n#import \"React/RCTComponentViewProtocol.h\"\n#import \"React/RCTComponentViewRegistry.h\"\n#import \"React/RCTMountingManager.h\"\n#import \"React/RCTMountingManagerDelegate.h\"\n#import \"React/RCTMountingTransactionObserverCoordinator.h\"\n#import \"React/RCTMountingTransactionObserving.h\"\n#import \"React/UIView+ComponentViewProtocol.h\"\n#import \"React/RCTConversions.h\"\n#import \"React/RCTImageResponseDelegate.h\"\n#import \"React/RCTImageResponseObserverProxy.h\"\n#import \"React/RCTLocalizationProvider.h\"\n#import \"React/RCTPrimitives.h\"\n#import \"React/RCTScheduler.h\"\n#import \"React/RCTSurfacePointerHandler.h\"\n#import \"React/RCTSurfacePresenter.h\"\n#import \"React/RCTSurfacePresenterBridgeAdapter.h\"\n#import \"React/RCTSurfaceRegistry.h\"\n#import \"React/RCTSurfaceTouchHandler.h\"\n#import \"React/RCTThirdPartyFabricComponentsProvider.h\"\n#import \"React/RCTTouchableComponentViewProtocol.h\"\n#import \"React/RCTFabricSurface.h\"\n#import \"React/PlatformRunLoopObserver.h\"\n#import \"React/RCTGenericDelegateSplitter.h\"\n#import \"React/RCTIdentifierPool.h\"\n#import \"React/RCTReactTaggedView.h\"\n\nFOUNDATION_EXPORT double RCTFabricVersionNumber;\nFOUNDATION_EXPORT const unsigned char RCTFabricVersionString[];\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTFabric/React-RCTFabric.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-RCTFabric\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-RCTFabric\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-RCTFabric\" \"${PODS_ROOT}/Headers/Public/React-RCTText\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-nativeconfig\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_TARGET_SRCROOT)/ReactCommon\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/Headers/Private/React-Core\" \"$(PODS_ROOT)/Headers/Private/Yoga\" \"$(PODS_ROOT)/Headers/Public/React-Codegen\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-FabricImage/React_FabricImage.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/textlayoutmanager/platform/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/textinput/platform/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/imagemanager/platform/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-nativeconfig/React_nativeconfig.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-ImageManager/React_ImageManager.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-featureflags/React_featureflags.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-debug/React_debug.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-utils/React_utils.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-rendererdebug/React_rendererdebug.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-runtimescheduler/React_runtimescheduler.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector/jsinspector_modern.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\" $(inherited) -DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/React\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTFabric/React-RCTFabric.modulemap",
    "content": "module RCTFabric {\n  umbrella header \"React-RCTFabric-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTFabric/React-RCTFabric.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-RCTFabric\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-RCTFabric\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-RCTFabric\" \"${PODS_ROOT}/Headers/Public/React-RCTText\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-nativeconfig\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_TARGET_SRCROOT)/ReactCommon\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/Headers/Private/React-Core\" \"$(PODS_ROOT)/Headers/Private/Yoga\" \"$(PODS_ROOT)/Headers/Public/React-Codegen\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-FabricImage/React_FabricImage.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/textlayoutmanager/platform/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/textinput/platform/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/imagemanager/platform/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-nativeconfig/React_nativeconfig.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-ImageManager/React_ImageManager.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-featureflags/React_featureflags.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-debug/React_debug.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-utils/React_utils.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-rendererdebug/React_rendererdebug.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-runtimescheduler/React_runtimescheduler.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector/jsinspector_modern.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\" $(inherited) -DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_CFG_NO_COROUTINES=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -Wno-comma -Wno-shorten-64-to-32\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/React\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTImage/React-RCTImage-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_RCTImage : NSObject\n@end\n@implementation PodsDummy_React_RCTImage\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTImage/React-RCTImage-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTImage/React-RCTImage.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-RCTImage\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-Codegen/react/renderer/components\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/Libraries/Image\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTImage/React-RCTImage.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-RCTImage\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-Codegen/react/renderer/components\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/Libraries/Image\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTLinking/React-RCTLinking-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_RCTLinking : NSObject\n@end\n@implementation PodsDummy_React_RCTLinking\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTLinking/React-RCTLinking-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTLinking/React-RCTLinking.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-RCTLinking\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-Codegen/react/renderer/components\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers/build/generated/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers/build/generated/ios\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/Libraries/LinkingIOS\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTLinking/React-RCTLinking.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-RCTLinking\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-Codegen/react/renderer/components\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers/build/generated/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers/build/generated/ios\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/Libraries/LinkingIOS\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTNetwork/React-RCTNetwork-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_RCTNetwork : NSObject\n@end\n@implementation PodsDummy_React_RCTNetwork\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTNetwork/React-RCTNetwork-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTNetwork/React-RCTNetwork.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-RCTNetwork\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-Codegen/react/renderer/components\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers/build/generated/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers/build/generated/ios\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/Libraries/Network\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTNetwork/React-RCTNetwork.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-RCTNetwork\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-Codegen/react/renderer/components\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers/build/generated/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers/build/generated/ios\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/Libraries/Network\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTSettings/React-RCTSettings-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_RCTSettings : NSObject\n@end\n@implementation PodsDummy_React_RCTSettings\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTSettings/React-RCTSettings-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTSettings/React-RCTSettings.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-RCTSettings\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-Codegen/react/renderer/components\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers/build/generated/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers/build/generated/ios\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/Libraries/Settings\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTSettings/React-RCTSettings.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-RCTSettings\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-Codegen/react/renderer/components\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers/build/generated/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers/build/generated/ios\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/Libraries/Settings\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTText/React-RCTText-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_RCTText : NSObject\n@end\n@implementation PodsDummy_React_RCTText\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTText/React-RCTText-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTText/React-RCTText.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-RCTText\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-RCTText\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-RCTText\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/Libraries/Text\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTText/React-RCTText.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-RCTText\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-RCTText\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-RCTText\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/Libraries/Text\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTVibration/React-RCTVibration-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_RCTVibration : NSObject\n@end\n@implementation PodsDummy_React_RCTVibration\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTVibration/React-RCTVibration-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTVibration/React-RCTVibration.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-RCTVibration\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-Codegen/react/renderer/components\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers/build/generated/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/Libraries/Vibration\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RCTVibration/React-RCTVibration.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-RCTVibration\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-Codegen/react/renderer/components\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Codegen/React_Codegen.framework/Headers/build/generated/ios\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/Libraries/Vibration\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RuntimeApple/React-RuntimeApple-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_RuntimeApple : NSObject\n@end\n@implementation PodsDummy_React_RuntimeApple\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RuntimeApple/React-RuntimeApple-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RuntimeApple/React-RuntimeApple.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-RuntimeApple\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nGCC_WARN_PEDANTIC = YES\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-RuntimeApple\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-Mapbuffer\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-RCTBlob\" \"${PODS_ROOT}/Headers/Public/React-RCTFabric\" \"${PODS_ROOT}/Headers/Public/React-RCTText\" \"${PODS_ROOT}/Headers/Public/React-RuntimeApple\" \"${PODS_ROOT}/Headers/Public/React-RuntimeCore\" \"${PODS_ROOT}/Headers/Public/React-RuntimeHermes\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jserrorhandler\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-nativeconfig\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" $(PODS_ROOT)/boost $(PODS_ROOT)/Headers/Private/React-Core $(PODS_TARGET_SRCROOT)/../../../.. $(PODS_TARGET_SRCROOT)/../../../../..\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTFabric/React-RCTFabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/react/runtime/platform/ios\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RuntimeApple/React-RuntimeApple.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-RuntimeApple\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nGCC_WARN_PEDANTIC = YES\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-RuntimeApple\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-Mapbuffer\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-RCTBlob\" \"${PODS_ROOT}/Headers/Public/React-RCTFabric\" \"${PODS_ROOT}/Headers/Public/React-RCTText\" \"${PODS_ROOT}/Headers/Public/React-RuntimeApple\" \"${PODS_ROOT}/Headers/Public/React-RuntimeCore\" \"${PODS_ROOT}/Headers/Public/React-RuntimeHermes\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jserrorhandler\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-nativeconfig\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" $(PODS_ROOT)/boost $(PODS_ROOT)/Headers/Private/React-Core $(PODS_TARGET_SRCROOT)/../../../.. $(PODS_TARGET_SRCROOT)/../../../../..\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTFabric/React-RCTFabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/react/runtime/platform/ios\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RuntimeCore/React-RuntimeCore-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_RuntimeCore : NSObject\n@end\n@implementation PodsDummy_React_RuntimeCore\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RuntimeCore/React-RuntimeCore-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RuntimeCore/React-RuntimeCore.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-RuntimeCore\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nGCC_WARN_PEDANTIC = YES\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-RuntimeCore\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-Mapbuffer\" \"${PODS_ROOT}/Headers/Public/React-RuntimeCore\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-jserrorhandler\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/Headers/Private/React-Core\" \"${PODS_TARGET_SRCROOT}/../..\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/react/runtime\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RuntimeCore/React-RuntimeCore.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-RuntimeCore\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nGCC_WARN_PEDANTIC = YES\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-RuntimeCore\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-Mapbuffer\" \"${PODS_ROOT}/Headers/Public/React-RuntimeCore\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-jserrorhandler\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/Headers/Private/React-Core\" \"${PODS_TARGET_SRCROOT}/../..\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/react/runtime\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RuntimeHermes/React-RuntimeHermes-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_RuntimeHermes : NSObject\n@end\n@implementation PodsDummy_React_RuntimeHermes\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RuntimeHermes/React-RuntimeHermes-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RuntimeHermes/React-RuntimeHermes.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-RuntimeHermes\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nGCC_WARN_PEDANTIC = YES\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-RuntimeHermes\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-Mapbuffer\" \"${PODS_ROOT}/Headers/Public/React-RuntimeCore\" \"${PODS_ROOT}/Headers/Public/React-RuntimeHermes\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jserrorhandler\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-nativeconfig\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"${PODS_TARGET_SRCROOT}/../..\" \"${PODS_TARGET_SRCROOT}/../../hermes/executor\" \"$(PODS_ROOT)/boost\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector/jsinspector_modern.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/react/runtime\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-RuntimeHermes/React-RuntimeHermes.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-RuntimeHermes\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nGCC_WARN_PEDANTIC = YES\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-RuntimeHermes\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-Mapbuffer\" \"${PODS_ROOT}/Headers/Public/React-RuntimeCore\" \"${PODS_ROOT}/Headers/Public/React-RuntimeHermes\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jserrorhandler\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-nativeconfig\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"${PODS_TARGET_SRCROOT}/../..\" \"${PODS_TARGET_SRCROOT}/../../hermes/executor\" \"$(PODS_ROOT)/boost\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector/jsinspector_modern.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/react/runtime\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-callinvoker/React-callinvoker.debug.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-callinvoker\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-callinvoker\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/callinvoker\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-callinvoker/React-callinvoker.release.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-callinvoker\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-callinvoker\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/callinvoker\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-cxxreact/React-cxxreact-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_cxxreact : NSObject\n@end\n@implementation PodsDummy_React_cxxreact\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-cxxreact/React-cxxreact-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-cxxreact/React-cxxreact.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-cxxreact\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-debug/React_debug.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-runtimeexecutor/React_runtimeexecutor.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector/jsinspector_modern.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/cxxreact\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-cxxreact/React-cxxreact.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-cxxreact\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-debug/React_debug.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-runtimeexecutor/React_runtimeexecutor.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector/jsinspector_modern.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/cxxreact\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-debug/React-debug-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_debug : NSObject\n@end\n@implementation PodsDummy_React_debug\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-debug/React-debug-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-debug/React-debug-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n#import \"react/debug/flags.h\"\n#import \"react/debug/react_native_assert.h\"\n#import \"react/debug/react_native_expect.h\"\n\nFOUNDATION_EXPORT double react_debugVersionNumber;\nFOUNDATION_EXPORT const unsigned char react_debugVersionString[];\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-debug/React-debug.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-debug\nDEFINES_MODULE = YES\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-debug\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/React-debug\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/react/debug\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-debug/React-debug.modulemap",
    "content": "module react_debug {\n  umbrella header \"React-debug-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-debug/React-debug.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-debug\nDEFINES_MODULE = YES\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-debug\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/React-debug\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/react/debug\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-featureflags/React-featureflags-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_featureflags : NSObject\n@end\n@implementation PodsDummy_React_featureflags\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-featureflags/React-featureflags-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-featureflags/React-featureflags-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n#import \"react/featureflags/ReactNativeFeatureFlags.h\"\n#import \"react/featureflags/ReactNativeFeatureFlagsAccessor.h\"\n#import \"react/featureflags/ReactNativeFeatureFlagsDefaults.h\"\n#import \"react/featureflags/ReactNativeFeatureFlagsProvider.h\"\n\nFOUNDATION_EXPORT double react_featureflagsVersionNumber;\nFOUNDATION_EXPORT const unsigned char react_featureflagsVersionString[];\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-featureflags/React-featureflags.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-featureflags\nDEFINES_MODULE = YES\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-featureflags\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/React-featureflags\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/react/featureflags\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-featureflags/React-featureflags.modulemap",
    "content": "module react_featureflags {\n  umbrella header \"React-featureflags-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-featureflags/React-featureflags.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-featureflags\nDEFINES_MODULE = YES\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-featureflags\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/React-featureflags\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/react/featureflags\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-graphics/React-graphics-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_graphics : NSObject\n@end\n@implementation PodsDummy_React_graphics\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-graphics/React-graphics-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-graphics/React-graphics-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n#import \"react/renderer/graphics/Color.h\"\n#import \"react/renderer/graphics/ColorComponents.h\"\n#import \"react/renderer/graphics/conversions.h\"\n#import \"react/renderer/graphics/fromRawValueShared.h\"\n#import \"react/renderer/graphics/Geometry.h\"\n#import \"react/renderer/graphics/Float.h\"\n#import \"react/renderer/graphics/HostPlatformColor.h\"\n#import \"react/renderer/graphics/PlatformColorParser.h\"\n#import \"react/renderer/graphics/RCTPlatformColorUtils.h\"\n#import \"react/renderer/graphics/Point.h\"\n#import \"react/renderer/graphics/Rect.h\"\n#import \"react/renderer/graphics/RectangleCorners.h\"\n#import \"react/renderer/graphics/RectangleEdges.h\"\n#import \"react/renderer/graphics/rounding.h\"\n#import \"react/renderer/graphics/Size.h\"\n#import \"react/renderer/graphics/Transform.h\"\n#import \"react/renderer/graphics/ValueUnit.h\"\n#import \"react/renderer/graphics/Vector.h\"\n\nFOUNDATION_EXPORT double react_renderer_graphicsVersionNumber;\nFOUNDATION_EXPORT const unsigned char react_renderer_graphicsVersionString[];\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-graphics/React-graphics.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-graphics\nDEFINES_MODULE = YES\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-graphics\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/boost\" \"$(PODS_TARGET_SRCROOT)/../../../\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/react/renderer/graphics\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = NO\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-graphics/React-graphics.modulemap",
    "content": "module react_renderer_graphics {\n  umbrella header \"React-graphics-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-graphics/React-graphics.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-graphics\nDEFINES_MODULE = YES\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-graphics\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/boost\" \"$(PODS_TARGET_SRCROOT)/../../../\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/react/renderer/graphics\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = NO\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-hermes/React-hermes-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_hermes : NSObject\n@end\n@implementation PodsDummy_React_hermes\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-hermes/React-hermes-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-hermes/React-hermes.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-hermes\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-hermes\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"${PODS_ROOT}/hermes-engine/destroot/include\" \"$(PODS_TARGET_SRCROOT)/..\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector/jsinspector_modern.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/hermes\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-hermes/React-hermes.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-hermes\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-hermes\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"${PODS_ROOT}/hermes-engine/destroot/include\" \"$(PODS_TARGET_SRCROOT)/..\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector/jsinspector_modern.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/hermes\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-jserrorhandler/React-jserrorhandler-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_jserrorhandler : NSObject\n@end\n@implementation PodsDummy_React_jserrorhandler\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-jserrorhandler/React-jserrorhandler-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-jserrorhandler/React-jserrorhandler.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-jserrorhandler\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-jserrorhandler\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-Mapbuffer\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-jserrorhandler\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-debug/React_debug.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Mapbuffer/React_Mapbuffer.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/jserrorhandler\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-jserrorhandler/React-jserrorhandler.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-jserrorhandler\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-jserrorhandler\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-Mapbuffer\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-jserrorhandler\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-debug/React_debug.framework/Headers\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-Mapbuffer/React_Mapbuffer.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/jserrorhandler\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-jsi/React-jsi-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_jsi : NSObject\n@end\n@implementation PodsDummy_React_jsi\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-jsi/React-jsi-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-jsi/React-jsi-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n#import \"jsi/decorator.h\"\n#import \"jsi/instrumentation.h\"\n#import \"jsi/jsi-inl.h\"\n#import \"jsi/jsi.h\"\n#import \"jsi/JSIDynamic.h\"\n#import \"jsi/jsilib.h\"\n#import \"jsi/threadsafe.h\"\n\nFOUNDATION_EXPORT double jsiVersionNumber;\nFOUNDATION_EXPORT const unsigned char jsiVersionString[];\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-jsi/React-jsi.debug.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-jsi\nDEFINES_MODULE = YES\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-jsi\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/jsi\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-jsi/React-jsi.modulemap",
    "content": "module jsi {\n  umbrella header \"React-jsi-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-jsi/React-jsi.release.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-jsi\nDEFINES_MODULE = YES\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-jsi\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/jsi\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-jsiexecutor/React-jsiexecutor-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_jsiexecutor : NSObject\n@end\n@implementation PodsDummy_React_jsiexecutor\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-jsiexecutor/React-jsiexecutor-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-jsiexecutor/React-jsiexecutor.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-jsiexecutor\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector/jsinspector_modern.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/jsiexecutor\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-jsiexecutor/React-jsiexecutor.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-jsiexecutor\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector/jsinspector_modern.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/jsiexecutor\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-jsinspector/React-jsinspector-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_jsinspector : NSObject\n@end\n@implementation PodsDummy_React_jsinspector\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-jsinspector/React-jsinspector-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-jsinspector/React-jsinspector-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n#import \"jsinspector-modern/ExecutionContext.h\"\n#import \"jsinspector-modern/ExecutionContextManager.h\"\n#import \"jsinspector-modern/FallbackRuntimeAgentDelegate.h\"\n#import \"jsinspector-modern/InspectorFlags.h\"\n#import \"jsinspector-modern/InspectorInterfaces.h\"\n#import \"jsinspector-modern/InspectorPackagerConnection.h\"\n#import \"jsinspector-modern/InspectorPackagerConnectionImpl.h\"\n#import \"jsinspector-modern/InspectorUtilities.h\"\n#import \"jsinspector-modern/InstanceAgent.h\"\n#import \"jsinspector-modern/InstanceTarget.h\"\n#import \"jsinspector-modern/PageAgent.h\"\n#import \"jsinspector-modern/PageTarget.h\"\n#import \"jsinspector-modern/Parsing.h\"\n#import \"jsinspector-modern/ReactCdp.h\"\n#import \"jsinspector-modern/RuntimeAgent.h\"\n#import \"jsinspector-modern/RuntimeAgentDelegate.h\"\n#import \"jsinspector-modern/RuntimeTarget.h\"\n#import \"jsinspector-modern/ScopedExecutor.h\"\n#import \"jsinspector-modern/SessionState.h\"\n#import \"jsinspector-modern/UniqueMonostate.h\"\n#import \"jsinspector-modern/WeakList.h\"\n#import \"jsinspector-modern/WebSocketInterfaces.h\"\n\nFOUNDATION_EXPORT double jsinspector_modernVersionNumber;\nFOUNDATION_EXPORT const unsigned char jsinspector_modernVersionString[];\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-jsinspector/React-jsinspector.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector\nDEFINES_MODULE = YES\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-jsinspector\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_TARGET_SRCROOT)/..\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/jsinspector-modern\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-jsinspector/React-jsinspector.modulemap",
    "content": "module jsinspector_modern {\n  umbrella header \"React-jsinspector-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-jsinspector/React-jsinspector.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector\nDEFINES_MODULE = YES\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-jsinspector\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_TARGET_SRCROOT)/..\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/jsinspector-modern\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-jsitracing/React-jsitracing.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-jsitracing\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nGCC_WARN_PEDANTIC = YES\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"${PODS_TARGET_SRCROOT}/../..\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/hermes/executor\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-jsitracing/React-jsitracing.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-jsitracing\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nGCC_WARN_PEDANTIC = YES\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"${PODS_TARGET_SRCROOT}/../..\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/hermes/executor\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-logger/React-logger-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_logger : NSObject\n@end\n@implementation PodsDummy_React_logger\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-logger/React-logger-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-logger/React-logger.debug.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-logger\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-logger\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/glog\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/logger\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-logger/React-logger.release.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-logger\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-logger\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/glog\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/logger\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-nativeconfig/React-nativeconfig-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_nativeconfig : NSObject\n@end\n@implementation PodsDummy_React_nativeconfig\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-nativeconfig/React-nativeconfig-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-nativeconfig/React-nativeconfig.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-nativeconfig\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-nativeconfig\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/React-nativeconfig\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-nativeconfig/React-nativeconfig.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-nativeconfig\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-nativeconfig\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/React-nativeconfig\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-perflogger/React-perflogger-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_perflogger : NSObject\n@end\n@implementation PodsDummy_React_perflogger\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-perflogger/React-perflogger-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-perflogger/React-perflogger.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-perflogger\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-perflogger\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/React-perflogger\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/reactperflogger\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-perflogger/React-perflogger.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-perflogger\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-perflogger\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/React-perflogger\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/reactperflogger\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-rendererdebug/React-rendererdebug-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_rendererdebug : NSObject\n@end\n@implementation PodsDummy_React_rendererdebug\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-rendererdebug/React-rendererdebug-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-rendererdebug/React-rendererdebug-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n#import \"react/renderer/debug/DebugStringConvertible.h\"\n#import \"react/renderer/debug/DebugStringConvertibleItem.h\"\n#import \"react/renderer/debug/debugStringConvertibleUtils.h\"\n#import \"react/renderer/debug/flags.h\"\n#import \"react/renderer/debug/SystraceSection.h\"\n\nFOUNDATION_EXPORT double react_renderer_debugVersionNumber;\nFOUNDATION_EXPORT const unsigned char react_renderer_debugVersionString[];\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-rendererdebug/React-rendererdebug.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-rendererdebug\nDEFINES_MODULE = YES\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-debug/React_debug.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/react/renderer/debug\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-rendererdebug/React-rendererdebug.modulemap",
    "content": "module react_renderer_debug {\n  umbrella header \"React-rendererdebug-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-rendererdebug/React-rendererdebug.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-rendererdebug\nDEFINES_MODULE = YES\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-debug/React_debug.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/react/renderer/debug\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-rncore/React-rncore.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-rncore\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"$(PODS_TARGET_SRCROOT)\" \"$(PODS_TARGET_SRCROOT)/ReactCommon\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-rncore/React-rncore.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-rncore\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"$(PODS_TARGET_SRCROOT)\" \"$(PODS_TARGET_SRCROOT)/ReactCommon\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-runtimeexecutor/React-runtimeexecutor.debug.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-runtimeexecutor\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/runtimeexecutor\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-runtimeexecutor/React-runtimeexecutor.release.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-runtimeexecutor\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/runtimeexecutor\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-runtimescheduler/React-runtimescheduler-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_runtimescheduler : NSObject\n@end\n@implementation PodsDummy_React_runtimescheduler\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-runtimescheduler/React-runtimescheduler-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-runtimescheduler/React-runtimescheduler.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-runtimescheduler\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/boost\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-debug/React_debug.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-runtimescheduler/React-runtimescheduler.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-runtimescheduler\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/boost\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-debug/React_debug.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-utils/React-utils-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_React_utils : NSObject\n@end\n@implementation PodsDummy_React_utils\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-utils/React-utils-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-utils/React-utils-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n#import \"react/utils/ContextContainer.h\"\n#import \"react/utils/CoreFeatures.h\"\n#import \"react/utils/FloatComparison.h\"\n#import \"react/utils/fnv1a.h\"\n#import \"react/utils/hash_combine.h\"\n#import \"react/utils/jsi.h\"\n#import \"react/utils/ManagedObjectWrapper.h\"\n#import \"react/utils/PackTraits.h\"\n#import \"react/utils/RunLoopObserver.h\"\n#import \"react/utils/SharedFunction.h\"\n#import \"react/utils/SimpleThreadSafeCache.h\"\n#import \"react/utils/Telemetry.h\"\n#import \"react/utils/to_underlying.h\"\n\nFOUNDATION_EXPORT double react_utilsVersionNumber;\nFOUNDATION_EXPORT const unsigned char react_utilsVersionString[];\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-utils/React-utils.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-utils\nDEFINES_MODULE = YES\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-utils\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_TARGET_SRCROOT)\" \"$(PODS_TARGET_SRCROOT)/ReactCommon\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-debug/React_debug.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/react/utils\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-utils/React-utils.modulemap",
    "content": "module react_utils {\n  umbrella header \"React-utils-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/React-utils/React-utils.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/React-utils\nDEFINES_MODULE = YES\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/React-utils\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_TARGET_SRCROOT)\" \"$(PODS_TARGET_SRCROOT)/ReactCommon\" \"${PODS_CONFIGURATION_BUILD_DIR}/React-debug/React_debug.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/react/utils\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/ReactCommon/ReactCommon-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_ReactCommon : NSObject\n@end\n@implementation PodsDummy_ReactCommon\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/ReactCommon/ReactCommon-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/ReactCommon/ReactCommon-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n#import \"react/bridging/Array.h\"\n#import \"react/bridging/AString.h\"\n#import \"react/bridging/Base.h\"\n#import \"react/bridging/Bool.h\"\n#import \"react/bridging/Bridging.h\"\n#import \"react/bridging/CallbackWrapper.h\"\n#import \"react/bridging/Class.h\"\n#import \"react/bridging/Convert.h\"\n#import \"react/bridging/Dynamic.h\"\n#import \"react/bridging/Error.h\"\n#import \"react/bridging/Function.h\"\n#import \"react/bridging/LongLivedObject.h\"\n#import \"react/bridging/Number.h\"\n#import \"react/bridging/Object.h\"\n#import \"react/bridging/Promise.h\"\n#import \"react/bridging/Value.h\"\n#import \"ReactCommon/CallbackWrapper.h\"\n#import \"ReactCommon/CxxTurboModuleUtils.h\"\n#import \"ReactCommon/LongLivedObject.h\"\n#import \"ReactCommon/TurboCxxModule.h\"\n#import \"ReactCommon/TurboModule.h\"\n#import \"ReactCommon/TurboModuleBinding.h\"\n#import \"ReactCommon/TurboModulePerfLogger.h\"\n#import \"ReactCommon/TurboModuleUtils.h\"\n\nFOUNDATION_EXPORT double ReactCommonVersionNumber;\nFOUNDATION_EXPORT const unsigned char ReactCommonVersionString[];\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/ReactCommon/ReactCommon.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon\nDEFINES_MODULE = YES\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nGCC_WARN_PEDANTIC = YES\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/ReactCommon\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\" \"$(PODS_ROOT)/Headers/Private/React-Core\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\" \"$(PODS_ROOT)/Headers/Private/React-Core\" \"$(PODS_TARGET_SRCROOT)/ReactCommon\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\" \"$(PODS_ROOT)/Headers/Private/React-Core\" \"$(PODS_TARGET_SRCROOT)/ReactCommon\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-debug/React_debug.framework/Headers\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-utils/React_utils.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/ReactCommon/ReactCommon.modulemap",
    "content": "module ReactCommon {\n  umbrella header \"ReactCommon-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/ReactCommon/ReactCommon.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon\nDEFINES_MODULE = YES\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nGCC_WARN_PEDANTIC = YES\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/ReactCommon\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\" \"$(PODS_ROOT)/Headers/Private/React-Core\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\" \"$(PODS_ROOT)/Headers/Private/React-Core\" \"$(PODS_TARGET_SRCROOT)/ReactCommon\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/fmt/include\" \"$(PODS_ROOT)/Headers/Private/React-Core\" \"$(PODS_TARGET_SRCROOT)/ReactCommon\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-debug/React_debug.framework/Headers\" \"$(PODS_CONFIGURATION_BUILD_DIR)/React-utils/React_utils.framework/Headers\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/SocketRocket/SocketRocket-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_SocketRocket : NSObject\n@end\n@implementation PodsDummy_SocketRocket\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/SocketRocket/SocketRocket-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/SocketRocket/SocketRocket.debug.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/SocketRocket\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/SocketRocket\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/SocketRocket\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/SocketRocket/SocketRocket.release.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/SocketRocket\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/SocketRocket\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/SocketRocket\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/WatermelonDB/WatermelonDB-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_WatermelonDB : NSObject\n@end\n@implementation PodsDummy_WatermelonDB\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/WatermelonDB/WatermelonDB-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/WatermelonDB/WatermelonDB.debug.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/WatermelonDB\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/WatermelonDB\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-RCTAnimation\" \"${PODS_ROOT}/Headers/Public/React-RCTBlob\" \"${PODS_ROOT}/Headers/Public/React-RCTText\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/WatermelonDB\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"${PODS_ROOT}/Headers/Public/simdjson\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/simdjson/simdjson.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../..\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/WatermelonDB/WatermelonDB.release.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/WatermelonDB\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/WatermelonDB\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/DoubleConversion\" \"${PODS_ROOT}/Headers/Public/FBLazyVector\" \"${PODS_ROOT}/Headers/Public/RCT-Folly\" \"${PODS_ROOT}/Headers/Public/RCTDeprecation\" \"${PODS_ROOT}/Headers/Public/RCTRequired\" \"${PODS_ROOT}/Headers/Public/RCTTypeSafety\" \"${PODS_ROOT}/Headers/Public/React-Codegen\" \"${PODS_ROOT}/Headers/Public/React-Core\" \"${PODS_ROOT}/Headers/Public/React-Fabric\" \"${PODS_ROOT}/Headers/Public/React-FabricImage\" \"${PODS_ROOT}/Headers/Public/React-ImageManager\" \"${PODS_ROOT}/Headers/Public/React-NativeModulesApple\" \"${PODS_ROOT}/Headers/Public/React-RCTAnimation\" \"${PODS_ROOT}/Headers/Public/React-RCTBlob\" \"${PODS_ROOT}/Headers/Public/React-RCTText\" \"${PODS_ROOT}/Headers/Public/React-callinvoker\" \"${PODS_ROOT}/Headers/Public/React-cxxreact\" \"${PODS_ROOT}/Headers/Public/React-debug\" \"${PODS_ROOT}/Headers/Public/React-featureflags\" \"${PODS_ROOT}/Headers/Public/React-graphics\" \"${PODS_ROOT}/Headers/Public/React-hermes\" \"${PODS_ROOT}/Headers/Public/React-jsi\" \"${PODS_ROOT}/Headers/Public/React-jsiexecutor\" \"${PODS_ROOT}/Headers/Public/React-jsinspector\" \"${PODS_ROOT}/Headers/Public/React-logger\" \"${PODS_ROOT}/Headers/Public/React-perflogger\" \"${PODS_ROOT}/Headers/Public/React-rendererdebug\" \"${PODS_ROOT}/Headers/Public/React-runtimeexecutor\" \"${PODS_ROOT}/Headers/Public/React-runtimescheduler\" \"${PODS_ROOT}/Headers/Public/React-utils\" \"${PODS_ROOT}/Headers/Public/ReactCommon\" \"${PODS_ROOT}/Headers/Public/SocketRocket\" \"${PODS_ROOT}/Headers/Public/WatermelonDB\" \"${PODS_ROOT}/Headers/Public/Yoga\" \"${PODS_ROOT}/Headers/Public/fmt\" \"${PODS_ROOT}/Headers/Public/glog\" \"${PODS_ROOT}/Headers/Public/hermes-engine\" \"${PODS_ROOT}/Headers/Public/simdjson\"\nOTHER_CFLAGS = $(inherited) -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/DoubleConversion/DoubleConversion.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTDeprecation/RCTDeprecation.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/RCTTypeSafety/RCTTypeSafety.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React/React-Core.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/ReactCommon/ReactCommon.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Codegen/React-Codegen.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_Fabric/React-Fabric.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/React_NativeModulesApple/React-NativeModulesApple.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/folly/RCT-Folly.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/glog/glog.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsi/React-jsi.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/jsinspector_modern/React-jsinspector.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_debug/React-debug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_featureflags/React-featureflags.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_debug/React-rendererdebug.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_graphics/React-graphics.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_renderer_imagemanager/React-ImageManager.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/react_utils/React-utils.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/simdjson/simdjson.modulemap\" -fmodule-map-file=\"${PODS_ROOT}/Headers/Public/yoga/Yoga.modulemap\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../..\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Yoga/Yoga-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_Yoga : NSObject\n@end\n@implementation PodsDummy_Yoga\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Yoga/Yoga-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Yoga/Yoga-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n#import \"yoga/YGConfig.h\"\n#import \"yoga/YGEnums.h\"\n#import \"yoga/YGMacros.h\"\n#import \"yoga/YGNode.h\"\n#import \"yoga/YGNodeLayout.h\"\n#import \"yoga/YGNodeStyle.h\"\n#import \"yoga/YGPixelGrid.h\"\n#import \"yoga/YGValue.h\"\n#import \"yoga/Yoga.h\"\n\nFOUNDATION_EXPORT double yogaVersionNumber;\nFOUNDATION_EXPORT const unsigned char yogaVersionString[];\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Yoga/Yoga.debug.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Yoga\nDEFINES_MODULE = YES\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/Yoga\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/Yoga\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/yoga\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Yoga/Yoga.modulemap",
    "content": "module yoga {\n  umbrella header \"Yoga-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/Yoga/Yoga.release.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Yoga\nDEFINES_MODULE = YES\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/Yoga\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/Yoga\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/react-native/ReactCommon/yoga\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/boost/boost.debug.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/boost\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/boost\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/boost/boost.release.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/boost\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/boost\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/fmt/fmt-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_fmt : NSObject\n@end\n@implementation PodsDummy_fmt\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/fmt/fmt-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/fmt/fmt.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/fmt\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/fmt\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/fmt\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/fmt\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/fmt/fmt.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/fmt\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/fmt\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/fmt\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/fmt\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/glog/glog-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_glog : NSObject\n@end\n@implementation PodsDummy_glog\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/glog/glog-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/glog/glog-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n#import \"glog/logging.h\"\n#import \"glog/log_severity.h\"\n#import \"glog/raw_logging.h\"\n#import \"glog/stl_logging.h\"\n#import \"glog/vlog_is_on.h\"\n\nFOUNDATION_EXPORT double glogVersionNumber;\nFOUNDATION_EXPORT const unsigned char glogVersionString[];\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/glog/glog.debug.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/glog\nDEFINES_MODULE = YES\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/glog\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/glog\" $(PODS_TARGET_SRCROOT)/src\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/glog\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = NO\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/glog/glog.modulemap",
    "content": "module glog {\n  umbrella header \"glog-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/glog/glog.release.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/glog\nDEFINES_MODULE = YES\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/glog\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/glog\" $(PODS_TARGET_SRCROOT)/src\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/glog\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_HEADERMAP = NO\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/hermes-engine/hermes-engine-xcframeworks-input-files.xcfilelist",
    "content": "${PODS_ROOT}/Target Support Files/hermes-engine/hermes-engine-xcframeworks.sh\n${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal/hermes.xcframework"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/hermes-engine/hermes-engine-xcframeworks-output-files.xcfilelist",
    "content": "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/hermes-engine/hermes-engine-xcframeworks.sh",
    "content": "#!/bin/sh\nset -e\nset -u\nset -o pipefail\n\nfunction on_error {\n  echo \"$(realpath -mq \"${0}\"):$1: error: Unexpected failure\"\n}\ntrap 'on_error $LINENO' ERR\n\n\n# This protects against multiple targets copying the same framework dependency at the same time. The solution\n# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html\nRSYNC_PROTECT_TMP_FILES=(--filter \"P .*.??????\")\n\n\nvariant_for_slice()\n{\n  case \"$1\" in\n  \"hermes.xcframework/ios-arm64\")\n    echo \"\"\n    ;;\n  \"hermes.xcframework/ios-arm64_x86_64-maccatalyst\")\n    echo \"maccatalyst\"\n    ;;\n  \"hermes.xcframework/ios-arm64_x86_64-simulator\")\n    echo \"simulator\"\n    ;;\n  \"hermes.xcframework/xros-arm64\")\n    echo \"\"\n    ;;\n  \"hermes.xcframework/xros-arm64-simulator\")\n    echo \"simulator\"\n    ;;\n  esac\n}\n\narchs_for_slice()\n{\n  case \"$1\" in\n  \"hermes.xcframework/ios-arm64\")\n    echo \"arm64\"\n    ;;\n  \"hermes.xcframework/ios-arm64_x86_64-maccatalyst\")\n    echo \"arm64 x86_64\"\n    ;;\n  \"hermes.xcframework/ios-arm64_x86_64-simulator\")\n    echo \"arm64 x86_64\"\n    ;;\n  \"hermes.xcframework/xros-arm64\")\n    echo \"arm64\"\n    ;;\n  \"hermes.xcframework/xros-arm64-simulator\")\n    echo \"arm64\"\n    ;;\n  esac\n}\n\ncopy_dir()\n{\n  local source=\"$1\"\n  local destination=\"$2\"\n\n  # Use filter instead of exclude so missing patterns don't throw errors.\n  echo \"rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --links --filter \\\"- CVS/\\\" --filter \\\"- .svn/\\\" --filter \\\"- .git/\\\" --filter \\\"- .hg/\\\" \\\"${source}*\\\" \\\"${destination}\\\"\"\n  rsync --delete -av \"${RSYNC_PROTECT_TMP_FILES[@]}\" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" \"${source}\"/* \"${destination}\"\n}\n\nSELECT_SLICE_RETVAL=\"\"\n\nselect_slice() {\n  local xcframework_name=\"$1\"\n  xcframework_name=\"${xcframework_name##*/}\"\n  local paths=(\"${@:2}\")\n  # Locate the correct slice of the .xcframework for the current architectures\n  local target_path=\"\"\n\n  # Split archs on space so we can find a slice that has all the needed archs\n  local target_archs=$(echo $ARCHS | tr \" \" \"\\n\")\n\n  local target_variant=\"\"\n  if [[ \"$PLATFORM_NAME\" == *\"simulator\" ]]; then\n    target_variant=\"simulator\"\n  fi\n  if [[ ! -z ${EFFECTIVE_PLATFORM_NAME+x} && \"$EFFECTIVE_PLATFORM_NAME\" == *\"maccatalyst\" ]]; then\n    target_variant=\"maccatalyst\"\n  fi\n  for i in ${!paths[@]}; do\n    local matched_all_archs=\"1\"\n    local slice_archs=\"$(archs_for_slice \"${xcframework_name}/${paths[$i]}\")\"\n    local slice_variant=\"$(variant_for_slice \"${xcframework_name}/${paths[$i]}\")\"\n    for target_arch in $target_archs; do\n      if ! [[ \"${slice_variant}\" == \"$target_variant\" ]]; then\n        matched_all_archs=\"0\"\n        break\n      fi\n\n      if ! echo \"${slice_archs}\" | tr \" \" \"\\n\" | grep -F -q -x \"$target_arch\"; then\n        matched_all_archs=\"0\"\n        break\n      fi\n    done\n\n    if [[ \"$matched_all_archs\" == \"1\" ]]; then\n      # Found a matching slice\n      echo \"Selected xcframework slice ${paths[$i]}\"\n      SELECT_SLICE_RETVAL=${paths[$i]}\n      break\n    fi\n  done\n}\n\ninstall_xcframework() {\n  local basepath=\"$1\"\n  local name=\"$2\"\n  local package_type=\"$3\"\n  local paths=(\"${@:4}\")\n\n  # Locate the correct slice of the .xcframework for the current architectures\n  select_slice \"${basepath}\" \"${paths[@]}\"\n  local target_path=\"$SELECT_SLICE_RETVAL\"\n  if [[ -z \"$target_path\" ]]; then\n    echo \"warning: [CP] $(basename ${basepath}): Unable to find matching slice in '${paths[@]}' for the current build architectures ($ARCHS) and platform (${EFFECTIVE_PLATFORM_NAME-${PLATFORM_NAME}}).\"\n    return\n  fi\n  local source=\"$basepath/$target_path\"\n\n  local destination=\"${PODS_XCFRAMEWORKS_BUILD_DIR}/${name}\"\n\n  if [ ! -d \"$destination\" ]; then\n    mkdir -p \"$destination\"\n  fi\n\n  copy_dir \"$source/\" \"$destination\"\n  echo \"Copied $source to $destination\"\n}\n\ninstall_xcframework \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal/hermes.xcframework\" \"hermes-engine/Pre-built\" \"framework\" \"ios-arm64\" \"ios-arm64_x86_64-maccatalyst\" \"ios-arm64_x86_64-simulator\"\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/hermes-engine/hermes-engine.debug.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_CXX_LIBRARY = compiler-default\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/hermes-engine\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/hermes-engine\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/hermes-engine\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/hermes-engine\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/hermes-engine/hermes-engine.release.xcconfig",
    "content": "CLANG_CXX_LANGUAGE_STANDARD = c++20\nCLANG_CXX_LIBRARY = compiler-default\nCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/hermes-engine\nFRAMEWORK_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/universal\" \"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built\"\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/hermes-engine\" \"${PODS_ROOT}/Headers/Public\" \"${PODS_ROOT}/Headers/Public/hermes-engine\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/hermes-engine\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/simdjson/simdjson-dummy.m",
    "content": "#import <Foundation/Foundation.h>\n@interface PodsDummy_simdjson : NSObject\n@end\n@implementation PodsDummy_simdjson\n@end\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/simdjson/simdjson-prefix.pch",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/simdjson/simdjson-umbrella.h",
    "content": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#else\n#ifndef FOUNDATION_EXPORT\n#if defined(__cplusplus)\n#define FOUNDATION_EXPORT extern \"C\"\n#else\n#define FOUNDATION_EXPORT extern\n#endif\n#endif\n#endif\n\n#import \"simdjson.h\"\n\nFOUNDATION_EXPORT double simdjsonVersionNumber;\nFOUNDATION_EXPORT const unsigned char simdjsonVersionString[];\n\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/simdjson/simdjson.debug.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/simdjson\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/simdjson\" \"${PODS_ROOT}/Headers/Public\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/@nozbe/simdjson\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/simdjson/simdjson.modulemap",
    "content": "module simdjson {\n  umbrella header \"simdjson-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "native/iosTest/Pods/Target Support Files/simdjson/simdjson.release.xcconfig",
    "content": "CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO\nCONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/simdjson\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1\nHEADER_SEARCH_PATHS = $(inherited) \"${PODS_ROOT}/Headers/Private\" \"${PODS_ROOT}/Headers/Private/simdjson\" \"${PODS_ROOT}/Headers/Public\"\nPODS_BUILD_DIR = ${BUILD_DIR}\nPODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\nPODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}\nPODS_ROOT = ${SRCROOT}\nPODS_TARGET_SRCROOT = ${PODS_ROOT}/../../../node_modules/@nozbe/simdjson\nPODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates\nPRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}\nSKIP_INSTALL = YES\nUSE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES\n"
  },
  {
    "path": "native/iosTest/Pods/fmt/LICENSE.rst",
    "content": "Copyright (c) 2012 - present, Victor Zverovich\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n--- Optional exception to the license ---\n\nAs an exception, if, as a result of your compiling your source code, portions\nof this Software are embedded into a machine-executable object form of such\nsource code, you may redistribute such embedded portions in such object form\nwithout including the above copyright and permission notices.\n"
  },
  {
    "path": "native/iosTest/Pods/fmt/README.rst",
    "content": ".. image:: https://user-images.githubusercontent.com/\n           576385/156254208-f5b743a9-88cf-439d-b0c0-923d53e8d551.png\n   :width: 25%\n   :alt: {fmt}\n\n.. image:: https://github.com/fmtlib/fmt/workflows/linux/badge.svg\n   :target: https://github.com/fmtlib/fmt/actions?query=workflow%3Alinux\n\n.. image:: https://github.com/fmtlib/fmt/workflows/macos/badge.svg\n   :target: https://github.com/fmtlib/fmt/actions?query=workflow%3Amacos\n\n.. image:: https://github.com/fmtlib/fmt/workflows/windows/badge.svg\n   :target: https://github.com/fmtlib/fmt/actions?query=workflow%3Awindows\n\n.. image:: https://oss-fuzz-build-logs.storage.googleapis.com/badges/fmt.svg\n   :alt: fmt is continuously fuzzed at oss-fuzz\n   :target: https://bugs.chromium.org/p/oss-fuzz/issues/list?\\\n            colspec=ID%20Type%20Component%20Status%20Proj%20Reported%20Owner%20\\\n            Summary&q=proj%3Dfmt&can=1\n\n.. image:: https://img.shields.io/badge/stackoverflow-fmt-blue.svg\n   :alt: Ask questions at StackOverflow with the tag fmt\n   :target: https://stackoverflow.com/questions/tagged/fmt\n\n**{fmt}** is an open-source formatting library providing a fast and safe\nalternative to C stdio and C++ iostreams.\n\nIf you like this project, please consider donating to one of the funds that\nhelp victims of the war in Ukraine: https://www.stopputin.net/.\n\n`Documentation <https://fmt.dev>`__\n\n`Cheat Sheets <https://hackingcpp.com/cpp/libs/fmt.html>`__\n\nQ&A: ask questions on `StackOverflow with the tag fmt\n<https://stackoverflow.com/questions/tagged/fmt>`_.\n\nTry {fmt} in `Compiler Explorer <https://godbolt.org/z/Eq5763>`_.\n\nFeatures\n--------\n\n* Simple `format API <https://fmt.dev/latest/api.html>`_ with positional arguments\n  for localization\n* Implementation of `C++20 std::format\n  <https://en.cppreference.com/w/cpp/utility/format>`__\n* `Format string syntax <https://fmt.dev/latest/syntax.html>`_ similar to Python's\n  `format <https://docs.python.org/3/library/stdtypes.html#str.format>`_\n* Fast IEEE 754 floating-point formatter with correct rounding, shortness and\n  round-trip guarantees\n* Safe `printf implementation\n  <https://fmt.dev/latest/api.html#printf-formatting>`_ including the POSIX\n  extension for positional arguments\n* Extensibility: `support for user-defined types\n  <https://fmt.dev/latest/api.html#formatting-user-defined-types>`_\n* High performance: faster than common standard library implementations of\n  ``(s)printf``, iostreams, ``to_string`` and ``to_chars``, see `Speed tests`_\n  and `Converting a hundred million integers to strings per second\n  <http://www.zverovich.net/2020/06/13/fast-int-to-string-revisited.html>`_\n* Small code size both in terms of source code with the minimum configuration\n  consisting of just three files, ``core.h``, ``format.h`` and ``format-inl.h``,\n  and compiled code; see `Compile time and code bloat`_\n* Reliability: the library has an extensive set of `tests\n  <https://github.com/fmtlib/fmt/tree/master/test>`_ and is `continuously fuzzed\n  <https://bugs.chromium.org/p/oss-fuzz/issues/list?colspec=ID%20Type%20\n  Component%20Status%20Proj%20Reported%20Owner%20Summary&q=proj%3Dfmt&can=1>`_\n* Safety: the library is fully type safe, errors in format strings can be\n  reported at compile time, automatic memory management prevents buffer overflow\n  errors\n* Ease of use: small self-contained code base, no external dependencies,\n  permissive MIT `license\n  <https://github.com/fmtlib/fmt/blob/master/LICENSE.rst>`_\n* `Portability <https://fmt.dev/latest/index.html#portability>`_ with\n  consistent output across platforms and support for older compilers\n* Clean warning-free codebase even on high warning levels such as\n  ``-Wall -Wextra -pedantic``\n* Locale-independence by default\n* Optional header-only configuration enabled with the ``FMT_HEADER_ONLY`` macro\n\nSee the `documentation <https://fmt.dev>`_ for more details.\n\nExamples\n--------\n\n**Print to stdout** (`run <https://godbolt.org/z/Tevcjh>`_)\n\n.. code:: c++\n\n    #include <fmt/core.h>\n    \n    int main() {\n      fmt::print(\"Hello, world!\\n\");\n    }\n\n**Format a string** (`run <https://godbolt.org/z/oK8h33>`_)\n\n.. code:: c++\n\n    std::string s = fmt::format(\"The answer is {}.\", 42);\n    // s == \"The answer is 42.\"\n\n**Format a string using positional arguments** (`run <https://godbolt.org/z/Yn7Txe>`_)\n\n.. code:: c++\n\n    std::string s = fmt::format(\"I'd rather be {1} than {0}.\", \"right\", \"happy\");\n    // s == \"I'd rather be happy than right.\"\n\n**Print chrono durations** (`run <https://godbolt.org/z/K8s4Mc>`_)\n\n.. code:: c++\n\n    #include <fmt/chrono.h>\n\n    int main() {\n      using namespace std::literals::chrono_literals;\n      fmt::print(\"Default format: {} {}\\n\", 42s, 100ms);\n      fmt::print(\"strftime-like format: {:%H:%M:%S}\\n\", 3h + 15min + 30s);\n    }\n\nOutput::\n\n    Default format: 42s 100ms\n    strftime-like format: 03:15:30\n\n**Print a container** (`run <https://godbolt.org/z/MxM1YqjE7>`_)\n\n.. code:: c++\n\n    #include <vector>\n    #include <fmt/ranges.h>\n\n    int main() {\n      std::vector<int> v = {1, 2, 3};\n      fmt::print(\"{}\\n\", v);\n    }\n\nOutput::\n\n    [1, 2, 3]\n\n**Check a format string at compile time**\n\n.. code:: c++\n\n    std::string s = fmt::format(\"{:d}\", \"I am not a number\");\n\nThis gives a compile-time error in C++20 because ``d`` is an invalid format\nspecifier for a string.\n\n**Write a file from a single thread**\n\n.. code:: c++\n\n    #include <fmt/os.h>\n\n    int main() {\n      auto out = fmt::output_file(\"guide.txt\");\n      out.print(\"Don't {}\", \"Panic\");\n    }\n\nThis can be `5 to 9 times faster than fprintf\n<http://www.zverovich.net/2020/08/04/optimal-file-buffer-size.html>`_.\n\n**Print with colors and text styles**\n\n.. code:: c++\n\n    #include <fmt/color.h>\n\n    int main() {\n      fmt::print(fg(fmt::color::crimson) | fmt::emphasis::bold,\n                 \"Hello, {}!\\n\", \"world\");\n      fmt::print(fg(fmt::color::floral_white) | bg(fmt::color::slate_gray) |\n                 fmt::emphasis::underline, \"Hello, {}!\\n\", \"мир\");\n      fmt::print(fg(fmt::color::steel_blue) | fmt::emphasis::italic,\n                 \"Hello, {}!\\n\", \"世界\");\n    }\n\nOutput on a modern terminal:\n\n.. image:: https://user-images.githubusercontent.com/\n           576385/88485597-d312f600-cf2b-11ea-9cbe-61f535a86e28.png\n\nBenchmarks\n----------\n\nSpeed tests\n~~~~~~~~~~~\n\n================= ============= ===========\nLibrary           Method        Run Time, s\n================= ============= ===========\nlibc              printf          1.04\nlibc++            std::ostream    3.05\n{fmt} 6.1.1       fmt::print      0.75\nBoost Format 1.67 boost::format   7.24\nFolly Format      folly::format   2.23\n================= ============= ===========\n\n{fmt} is the fastest of the benchmarked methods, ~35% faster than ``printf``.\n\nThe above results were generated by building ``tinyformat_test.cpp`` on macOS\n10.14.6 with ``clang++ -O3 -DNDEBUG -DSPEED_TEST -DHAVE_FORMAT``, and taking the\nbest of three runs. In the test, the format string ``\"%0.10f:%04d:%+g:%s:%p:%c:%%\\n\"``\nor equivalent is filled 2,000,000 times with output sent to ``/dev/null``; for\nfurther details refer to the `source\n<https://github.com/fmtlib/format-benchmark/blob/master/src/tinyformat-test.cc>`_.\n\n{fmt} is up to 20-30x faster than ``std::ostringstream`` and ``sprintf`` on\nfloating-point formatting (`dtoa-benchmark <https://github.com/fmtlib/dtoa-benchmark>`_)\nand faster than `double-conversion <https://github.com/google/double-conversion>`_ and\n`ryu <https://github.com/ulfjack/ryu>`_:\n\n.. image:: https://user-images.githubusercontent.com/576385/\n           95684665-11719600-0ba8-11eb-8e5b-972ff4e49428.png\n   :target: https://fmt.dev/unknown_mac64_clang12.0.html\n\nCompile time and code bloat\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe script `bloat-test.py\n<https://github.com/fmtlib/format-benchmark/blob/master/bloat-test.py>`_\nfrom `format-benchmark <https://github.com/fmtlib/format-benchmark>`_\ntests compile time and code bloat for nontrivial projects.\nIt generates 100 translation units and uses ``printf()`` or its alternative\nfive times in each to simulate a medium sized project.  The resulting\nexecutable size and compile time (Apple LLVM version 8.1.0 (clang-802.0.42),\nmacOS Sierra, best of three) is shown in the following tables.\n\n**Optimized build (-O3)**\n\n============= =============== ==================== ==================\nMethod        Compile Time, s Executable size, KiB Stripped size, KiB\n============= =============== ==================== ==================\nprintf                    2.6                   29                 26\nprintf+string            16.4                   29                 26\niostreams                31.1                   59                 55\n{fmt}                    19.0                   37                 34\nBoost Format             91.9                  226                203\nFolly Format            115.7                  101                 88\n============= =============== ==================== ==================\n\nAs you can see, {fmt} has 60% less overhead in terms of resulting binary code\nsize compared to iostreams and comes pretty close to ``printf``. Boost Format\nand Folly Format have the largest overheads.\n\n``printf+string`` is the same as ``printf`` but with extra ``<string>``\ninclude to measure the overhead of the latter.\n\n**Non-optimized build**\n\n============= =============== ==================== ==================\nMethod        Compile Time, s Executable size, KiB Stripped size, KiB\n============= =============== ==================== ==================\nprintf                    2.2                   33                 30\nprintf+string            16.0                   33                 30\niostreams                28.3                   56                 52\n{fmt}                    18.2                   59                 50\nBoost Format             54.1                  365                303\nFolly Format             79.9                  445                430\n============= =============== ==================== ==================\n\n``libc``, ``lib(std)c++`` and ``libfmt`` are all linked as shared libraries to\ncompare formatting function overhead only. Boost Format is a\nheader-only library so it doesn't provide any linkage options.\n\nRunning the tests\n~~~~~~~~~~~~~~~~~\n\nPlease refer to `Building the library`__ for the instructions on how to build\nthe library and run the unit tests.\n\n__ https://fmt.dev/latest/usage.html#building-the-library\n\nBenchmarks reside in a separate repository,\n`format-benchmarks <https://github.com/fmtlib/format-benchmark>`_,\nso to run the benchmarks you first need to clone this repository and\ngenerate Makefiles with CMake::\n\n    $ git clone --recursive https://github.com/fmtlib/format-benchmark.git\n    $ cd format-benchmark\n    $ cmake .\n\nThen you can run the speed test::\n\n    $ make speed-test\n\nor the bloat test::\n\n    $ make bloat-test\n    \nMigrating code\n--------------\n\n`clang-tidy-fmt <https://github.com/mikecrowe/clang-tidy-fmt>`_ provides clang\ntidy checks for converting occurrences of ``printf`` and ``fprintf`` to\n``fmt::print``.\n\nProjects using this library\n---------------------------\n\n* `0 A.D. <https://play0ad.com/>`_: a free, open-source, cross-platform\n  real-time strategy game\n\n* `2GIS <https://2gis.ru/>`_: free business listings with a city map\n\n* `AMPL/MP <https://github.com/ampl/mp>`_:\n  an open-source library for mathematical programming\n\n* `Aseprite <https://github.com/aseprite/aseprite>`_:\n  animated sprite editor & pixel art tool \n\n* `AvioBook <https://www.aviobook.aero/en>`_: a comprehensive aircraft\n  operations suite\n  \n* `Blizzard Battle.net <https://battle.net/>`_: an online gaming platform\n  \n* `Celestia <https://celestia.space/>`_: real-time 3D visualization of space\n\n* `Ceph <https://ceph.com/>`_: a scalable distributed storage system\n\n* `ccache <https://ccache.dev/>`_: a compiler cache\n\n* `ClickHouse <https://github.com/ClickHouse/ClickHouse>`_: analytical database\n  management system\n\n* `CUAUV <https://cuauv.org/>`_: Cornell University's autonomous underwater\n  vehicle\n\n* `Drake <https://drake.mit.edu/>`_: a planning, control, and analysis toolbox\n  for nonlinear dynamical systems (MIT)\n\n* `Envoy <https://lyft.github.io/envoy/>`_: C++ L7 proxy and communication bus\n  (Lyft)\n\n* `FiveM <https://fivem.net/>`_: a modification framework for GTA V\n\n* `fmtlog <https://github.com/MengRao/fmtlog>`_: a performant fmtlib-style\n  logging library with latency in nanoseconds\n\n* `Folly <https://github.com/facebook/folly>`_: Facebook open-source library\n\n* `GemRB <https://gemrb.org/>`_: a portable open-source implementation of\n  Bioware’s Infinity Engine\n\n* `Grand Mountain Adventure\n  <https://store.steampowered.com/app/1247360/Grand_Mountain_Adventure/>`_:\n  a beautiful open-world ski & snowboarding game\n\n* `HarpyWar/pvpgn <https://github.com/pvpgn/pvpgn-server>`_:\n  Player vs Player Gaming Network with tweaks\n\n* `KBEngine <https://github.com/kbengine/kbengine>`_: an open-source MMOG server\n  engine\n\n* `Keypirinha <https://keypirinha.com/>`_: a semantic launcher for Windows\n\n* `Kodi <https://kodi.tv/>`_ (formerly xbmc): home theater software\n\n* `Knuth <https://kth.cash/>`_: high-performance Bitcoin full-node\n\n* `Microsoft Verona <https://github.com/microsoft/verona>`_:\n  research programming language for concurrent ownership\n\n* `MongoDB <https://mongodb.com/>`_: distributed document database\n\n* `MongoDB Smasher <https://github.com/duckie/mongo_smasher>`_: a small tool to\n  generate randomized datasets\n\n* `OpenSpace <https://openspaceproject.com/>`_: an open-source\n  astrovisualization framework\n\n* `PenUltima Online (POL) <https://www.polserver.com/>`_:\n  an MMO server, compatible with most Ultima Online clients\n\n* `PyTorch <https://github.com/pytorch/pytorch>`_: an open-source machine\n  learning library\n\n* `quasardb <https://www.quasardb.net/>`_: a distributed, high-performance,\n  associative database\n  \n* `Quill <https://github.com/odygrd/quill>`_: asynchronous low-latency logging library\n\n* `QKW <https://github.com/ravijanjam/qkw>`_: generalizing aliasing to simplify\n  navigation, and executing complex multi-line terminal command sequences\n\n* `redis-cerberus <https://github.com/HunanTV/redis-cerberus>`_: a Redis cluster\n  proxy\n\n* `redpanda <https://vectorized.io/redpanda>`_: a 10x faster Kafka® replacement\n  for mission critical systems written in C++\n\n* `rpclib <http://rpclib.net/>`_: a modern C++ msgpack-RPC server and client\n  library\n\n* `Salesforce Analytics Cloud\n  <https://www.salesforce.com/analytics-cloud/overview/>`_:\n  business intelligence software\n\n* `Scylla <https://www.scylladb.com/>`_: a Cassandra-compatible NoSQL data store\n  that can handle 1 million transactions per second on a single server\n\n* `Seastar <http://www.seastar-project.org/>`_: an advanced, open-source C++\n  framework for high-performance server applications on modern hardware\n\n* `spdlog <https://github.com/gabime/spdlog>`_: super fast C++ logging library\n\n* `Stellar <https://www.stellar.org/>`_: financial platform\n\n* `Touch Surgery <https://www.touchsurgery.com/>`_: surgery simulator\n\n* `TrinityCore <https://github.com/TrinityCore/TrinityCore>`_: open-source\n  MMORPG framework\n\n* `Windows Terminal <https://github.com/microsoft/terminal>`_: the new Windows\n  terminal\n\n`More... <https://github.com/search?q=fmtlib&type=Code>`_\n\nIf you are aware of other projects using this library, please let me know\nby `email <mailto:victor.zverovich@gmail.com>`_ or by submitting an\n`issue <https://github.com/fmtlib/fmt/issues>`_.\n\nMotivation\n----------\n\nSo why yet another formatting library?\n\nThere are plenty of methods for doing this task, from standard ones like\nthe printf family of function and iostreams to Boost Format and FastFormat\nlibraries. The reason for creating a new library is that every existing\nsolution that I found either had serious issues or didn't provide\nall the features I needed.\n\nprintf\n~~~~~~\n\nThe good thing about ``printf`` is that it is pretty fast and readily available\nbeing a part of the C standard library. The main drawback is that it\ndoesn't support user-defined types. ``printf`` also has safety issues although\nthey are somewhat mitigated with `__attribute__ ((format (printf, ...))\n<https://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html>`_ in GCC.\nThere is a POSIX extension that adds positional arguments required for\n`i18n <https://en.wikipedia.org/wiki/Internationalization_and_localization>`_\nto ``printf`` but it is not a part of C99 and may not be available on some\nplatforms.\n\niostreams\n~~~~~~~~~\n\nThe main issue with iostreams is best illustrated with an example:\n\n.. code:: c++\n\n    std::cout << std::setprecision(2) << std::fixed << 1.23456 << \"\\n\";\n\nwhich is a lot of typing compared to printf:\n\n.. code:: c++\n\n    printf(\"%.2f\\n\", 1.23456);\n\nMatthew Wilson, the author of FastFormat, called this \"chevron hell\". iostreams\ndon't support positional arguments by design.\n\nThe good part is that iostreams support user-defined types and are safe although\nerror handling is awkward.\n\nBoost Format\n~~~~~~~~~~~~\n\nThis is a very powerful library which supports both ``printf``-like format\nstrings and positional arguments. Its main drawback is performance. According to\nvarious benchmarks, it is much slower than other methods considered here. Boost\nFormat also has excessive build times and severe code bloat issues (see\n`Benchmarks`_).\n\nFastFormat\n~~~~~~~~~~\n\nThis is an interesting library which is fast, safe and has positional arguments.\nHowever, it has significant limitations, citing its author:\n\n    Three features that have no hope of being accommodated within the\n    current design are:\n\n    * Leading zeros (or any other non-space padding)\n    * Octal/hexadecimal encoding\n    * Runtime width/alignment specification\n\nIt is also quite big and has a heavy dependency, STLSoft, which might be too\nrestrictive for using it in some projects.\n\nBoost Spirit.Karma\n~~~~~~~~~~~~~~~~~~\n\nThis is not really a formatting library but I decided to include it here for\ncompleteness. As iostreams, it suffers from the problem of mixing verbatim text\nwith arguments. The library is pretty fast, but slower on integer formatting\nthan ``fmt::format_to`` with format string compilation on Karma's own benchmark,\nsee `Converting a hundred million integers to strings per second\n<http://www.zverovich.net/2020/06/13/fast-int-to-string-revisited.html>`_.\n\nLicense\n-------\n\n{fmt} is distributed under the MIT `license\n<https://github.com/fmtlib/fmt/blob/master/LICENSE.rst>`_.\n\nDocumentation License\n---------------------\n\nThe `Format String Syntax <https://fmt.dev/latest/syntax.html>`_\nsection in the documentation is based on the one from Python `string module\ndocumentation <https://docs.python.org/3/library/string.html#module-string>`_.\nFor this reason the documentation is distributed under the Python Software\nFoundation license available in `doc/python-license.txt\n<https://raw.github.com/fmtlib/fmt/master/doc/python-license.txt>`_.\nIt only applies if you distribute the documentation of {fmt}.\n\nMaintainers\n-----------\n\nThe {fmt} library is maintained by Victor Zverovich (`vitaut\n<https://github.com/vitaut>`_) and Jonathan Müller (`foonathan\n<https://github.com/foonathan>`_) with contributions from many other people.\nSee `Contributors <https://github.com/fmtlib/fmt/graphs/contributors>`_ and\n`Releases <https://github.com/fmtlib/fmt/releases>`_ for some of the names.\nLet us know if your contribution is not listed or mentioned incorrectly and\nwe'll make it right.\n"
  },
  {
    "path": "native/iosTest/Pods/fmt/include/fmt/args.h",
    "content": "// Formatting library for C++ - dynamic format arguments\n//\n// Copyright (c) 2012 - present, Victor Zverovich\n// All rights reserved.\n//\n// For the license information refer to format.h.\n\n#ifndef FMT_ARGS_H_\n#define FMT_ARGS_H_\n\n#include <functional>  // std::reference_wrapper\n#include <memory>      // std::unique_ptr\n#include <vector>\n\n#include \"core.h\"\n\nFMT_BEGIN_NAMESPACE\n\nnamespace detail {\n\ntemplate <typename T> struct is_reference_wrapper : std::false_type {};\ntemplate <typename T>\nstruct is_reference_wrapper<std::reference_wrapper<T>> : std::true_type {};\n\ntemplate <typename T> const T& unwrap(const T& v) { return v; }\ntemplate <typename T> const T& unwrap(const std::reference_wrapper<T>& v) {\n  return static_cast<const T&>(v);\n}\n\nclass dynamic_arg_list {\n  // Workaround for clang's -Wweak-vtables. Unlike for regular classes, for\n  // templates it doesn't complain about inability to deduce single translation\n  // unit for placing vtable. So storage_node_base is made a fake template.\n  template <typename = void> struct node {\n    virtual ~node() = default;\n    std::unique_ptr<node<>> next;\n  };\n\n  template <typename T> struct typed_node : node<> {\n    T value;\n\n    template <typename Arg>\n    FMT_CONSTEXPR typed_node(const Arg& arg) : value(arg) {}\n\n    template <typename Char>\n    FMT_CONSTEXPR typed_node(const basic_string_view<Char>& arg)\n        : value(arg.data(), arg.size()) {}\n  };\n\n  std::unique_ptr<node<>> head_;\n\n public:\n  template <typename T, typename Arg> const T& push(const Arg& arg) {\n    auto new_node = std::unique_ptr<typed_node<T>>(new typed_node<T>(arg));\n    auto& value = new_node->value;\n    new_node->next = std::move(head_);\n    head_ = std::move(new_node);\n    return value;\n  }\n};\n}  // namespace detail\n\n/**\n  \\rst\n  A dynamic version of `fmt::format_arg_store`.\n  It's equipped with a storage to potentially temporary objects which lifetimes\n  could be shorter than the format arguments object.\n\n  It can be implicitly converted into `~fmt::basic_format_args` for passing\n  into type-erased formatting functions such as `~fmt::vformat`.\n  \\endrst\n */\ntemplate <typename Context>\nclass dynamic_format_arg_store\n#if FMT_GCC_VERSION && FMT_GCC_VERSION < 409\n    // Workaround a GCC template argument substitution bug.\n    : public basic_format_args<Context>\n#endif\n{\n private:\n  using char_type = typename Context::char_type;\n\n  template <typename T> struct need_copy {\n    static constexpr detail::type mapped_type =\n        detail::mapped_type_constant<T, Context>::value;\n\n    enum {\n      value = !(detail::is_reference_wrapper<T>::value ||\n                std::is_same<T, basic_string_view<char_type>>::value ||\n                std::is_same<T, detail::std_string_view<char_type>>::value ||\n                (mapped_type != detail::type::cstring_type &&\n                 mapped_type != detail::type::string_type &&\n                 mapped_type != detail::type::custom_type))\n    };\n  };\n\n  template <typename T>\n  using stored_type = conditional_t<\n      std::is_convertible<T, std::basic_string<char_type>>::value &&\n          !detail::is_reference_wrapper<T>::value,\n      std::basic_string<char_type>, T>;\n\n  // Storage of basic_format_arg must be contiguous.\n  std::vector<basic_format_arg<Context>> data_;\n  std::vector<detail::named_arg_info<char_type>> named_info_;\n\n  // Storage of arguments not fitting into basic_format_arg must grow\n  // without relocation because items in data_ refer to it.\n  detail::dynamic_arg_list dynamic_args_;\n\n  friend class basic_format_args<Context>;\n\n  unsigned long long get_types() const {\n    return detail::is_unpacked_bit | data_.size() |\n           (named_info_.empty()\n                ? 0ULL\n                : static_cast<unsigned long long>(detail::has_named_args_bit));\n  }\n\n  const basic_format_arg<Context>* data() const {\n    return named_info_.empty() ? data_.data() : data_.data() + 1;\n  }\n\n  template <typename T> void emplace_arg(const T& arg) {\n    data_.emplace_back(detail::make_arg<Context>(arg));\n  }\n\n  template <typename T>\n  void emplace_arg(const detail::named_arg<char_type, T>& arg) {\n    if (named_info_.empty()) {\n      constexpr const detail::named_arg_info<char_type>* zero_ptr{nullptr};\n      data_.insert(data_.begin(), {zero_ptr, 0});\n    }\n    data_.emplace_back(detail::make_arg<Context>(detail::unwrap(arg.value)));\n    auto pop_one = [](std::vector<basic_format_arg<Context>>* data) {\n      data->pop_back();\n    };\n    std::unique_ptr<std::vector<basic_format_arg<Context>>, decltype(pop_one)>\n        guard{&data_, pop_one};\n    named_info_.push_back({arg.name, static_cast<int>(data_.size() - 2u)});\n    data_[0].value_.named_args = {named_info_.data(), named_info_.size()};\n    guard.release();\n  }\n\n public:\n  constexpr dynamic_format_arg_store() = default;\n\n  /**\n    \\rst\n    Adds an argument into the dynamic store for later passing to a formatting\n    function.\n\n    Note that custom types and string types (but not string views) are copied\n    into the store dynamically allocating memory if necessary.\n\n    **Example**::\n\n      fmt::dynamic_format_arg_store<fmt::format_context> store;\n      store.push_back(42);\n      store.push_back(\"abc\");\n      store.push_back(1.5f);\n      std::string result = fmt::vformat(\"{} and {} and {}\", store);\n    \\endrst\n  */\n  template <typename T> void push_back(const T& arg) {\n    if (detail::const_check(need_copy<T>::value))\n      emplace_arg(dynamic_args_.push<stored_type<T>>(arg));\n    else\n      emplace_arg(detail::unwrap(arg));\n  }\n\n  /**\n    \\rst\n    Adds a reference to the argument into the dynamic store for later passing to\n    a formatting function.\n\n    **Example**::\n\n      fmt::dynamic_format_arg_store<fmt::format_context> store;\n      char band[] = \"Rolling Stones\";\n      store.push_back(std::cref(band));\n      band[9] = 'c'; // Changing str affects the output.\n      std::string result = fmt::vformat(\"{}\", store);\n      // result == \"Rolling Scones\"\n    \\endrst\n  */\n  template <typename T> void push_back(std::reference_wrapper<T> arg) {\n    static_assert(\n        need_copy<T>::value,\n        \"objects of built-in types and string views are always copied\");\n    emplace_arg(arg.get());\n  }\n\n  /**\n    Adds named argument into the dynamic store for later passing to a formatting\n    function. ``std::reference_wrapper`` is supported to avoid copying of the\n    argument. The name is always copied into the store.\n  */\n  template <typename T>\n  void push_back(const detail::named_arg<char_type, T>& arg) {\n    const char_type* arg_name =\n        dynamic_args_.push<std::basic_string<char_type>>(arg.name).c_str();\n    if (detail::const_check(need_copy<T>::value)) {\n      emplace_arg(\n          fmt::arg(arg_name, dynamic_args_.push<stored_type<T>>(arg.value)));\n    } else {\n      emplace_arg(fmt::arg(arg_name, arg.value));\n    }\n  }\n\n  /** Erase all elements from the store */\n  void clear() {\n    data_.clear();\n    named_info_.clear();\n    dynamic_args_ = detail::dynamic_arg_list();\n  }\n\n  /**\n    \\rst\n    Reserves space to store at least *new_cap* arguments including\n    *new_cap_named* named arguments.\n    \\endrst\n  */\n  void reserve(size_t new_cap, size_t new_cap_named) {\n    FMT_ASSERT(new_cap >= new_cap_named,\n               \"Set of arguments includes set of named arguments\");\n    data_.reserve(new_cap);\n    named_info_.reserve(new_cap_named);\n  }\n};\n\nFMT_END_NAMESPACE\n\n#endif  // FMT_ARGS_H_\n"
  },
  {
    "path": "native/iosTest/Pods/fmt/include/fmt/chrono.h",
    "content": "// Formatting library for C++ - chrono support\n//\n// Copyright (c) 2012 - present, Victor Zverovich\n// All rights reserved.\n//\n// For the license information refer to format.h.\n\n#ifndef FMT_CHRONO_H_\n#define FMT_CHRONO_H_\n\n#include <algorithm>\n#include <chrono>\n#include <cmath>    // std::isfinite\n#include <cstring>  // std::memcpy\n#include <ctime>\n#include <iterator>\n#include <locale>\n#include <ostream>\n#include <type_traits>\n\n#include \"format.h\"\n\nFMT_BEGIN_NAMESPACE\n\n// Enable tzset.\n#ifndef FMT_USE_TZSET\n// UWP doesn't provide _tzset.\n#  if FMT_HAS_INCLUDE(\"winapifamily.h\")\n#    include <winapifamily.h>\n#  endif\n#  if defined(_WIN32) && (!defined(WINAPI_FAMILY) || \\\n                          (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP))\n#    define FMT_USE_TZSET 1\n#  else\n#    define FMT_USE_TZSET 0\n#  endif\n#endif\n\n// Enable safe chrono durations, unless explicitly disabled.\n#ifndef FMT_SAFE_DURATION_CAST\n#  define FMT_SAFE_DURATION_CAST 1\n#endif\n#if FMT_SAFE_DURATION_CAST\n\n// For conversion between std::chrono::durations without undefined\n// behaviour or erroneous results.\n// This is a stripped down version of duration_cast, for inclusion in fmt.\n// See https://github.com/pauldreik/safe_duration_cast\n//\n// Copyright Paul Dreik 2019\nnamespace safe_duration_cast {\n\ntemplate <typename To, typename From,\n          FMT_ENABLE_IF(!std::is_same<From, To>::value &&\n                        std::numeric_limits<From>::is_signed ==\n                            std::numeric_limits<To>::is_signed)>\nFMT_CONSTEXPR To lossless_integral_conversion(const From from, int& ec) {\n  ec = 0;\n  using F = std::numeric_limits<From>;\n  using T = std::numeric_limits<To>;\n  static_assert(F::is_integer, \"From must be integral\");\n  static_assert(T::is_integer, \"To must be integral\");\n\n  // A and B are both signed, or both unsigned.\n  if (detail::const_check(F::digits <= T::digits)) {\n    // From fits in To without any problem.\n  } else {\n    // From does not always fit in To, resort to a dynamic check.\n    if (from < (T::min)() || from > (T::max)()) {\n      // outside range.\n      ec = 1;\n      return {};\n    }\n  }\n  return static_cast<To>(from);\n}\n\n/**\n * converts From to To, without loss. If the dynamic value of from\n * can't be converted to To without loss, ec is set.\n */\ntemplate <typename To, typename From,\n          FMT_ENABLE_IF(!std::is_same<From, To>::value &&\n                        std::numeric_limits<From>::is_signed !=\n                            std::numeric_limits<To>::is_signed)>\nFMT_CONSTEXPR To lossless_integral_conversion(const From from, int& ec) {\n  ec = 0;\n  using F = std::numeric_limits<From>;\n  using T = std::numeric_limits<To>;\n  static_assert(F::is_integer, \"From must be integral\");\n  static_assert(T::is_integer, \"To must be integral\");\n\n  if (detail::const_check(F::is_signed && !T::is_signed)) {\n    // From may be negative, not allowed!\n    if (fmt::detail::is_negative(from)) {\n      ec = 1;\n      return {};\n    }\n    // From is positive. Can it always fit in To?\n    if (detail::const_check(F::digits > T::digits) &&\n        from > static_cast<From>(detail::max_value<To>())) {\n      ec = 1;\n      return {};\n    }\n  }\n\n  if (detail::const_check(!F::is_signed && T::is_signed &&\n                          F::digits >= T::digits) &&\n      from > static_cast<From>(detail::max_value<To>())) {\n    ec = 1;\n    return {};\n  }\n  return static_cast<To>(from);  // Lossless conversion.\n}\n\ntemplate <typename To, typename From,\n          FMT_ENABLE_IF(std::is_same<From, To>::value)>\nFMT_CONSTEXPR To lossless_integral_conversion(const From from, int& ec) {\n  ec = 0;\n  return from;\n}  // function\n\n// clang-format off\n/**\n * converts From to To if possible, otherwise ec is set.\n *\n * input                            |    output\n * ---------------------------------|---------------\n * NaN                              | NaN\n * Inf                              | Inf\n * normal, fits in output           | converted (possibly lossy)\n * normal, does not fit in output   | ec is set\n * subnormal                        | best effort\n * -Inf                             | -Inf\n */\n// clang-format on\ntemplate <typename To, typename From,\n          FMT_ENABLE_IF(!std::is_same<From, To>::value)>\nFMT_CONSTEXPR To safe_float_conversion(const From from, int& ec) {\n  ec = 0;\n  using T = std::numeric_limits<To>;\n  static_assert(std::is_floating_point<From>::value, \"From must be floating\");\n  static_assert(std::is_floating_point<To>::value, \"To must be floating\");\n\n  // catch the only happy case\n  if (std::isfinite(from)) {\n    if (from >= T::lowest() && from <= (T::max)()) {\n      return static_cast<To>(from);\n    }\n    // not within range.\n    ec = 1;\n    return {};\n  }\n\n  // nan and inf will be preserved\n  return static_cast<To>(from);\n}  // function\n\ntemplate <typename To, typename From,\n          FMT_ENABLE_IF(std::is_same<From, To>::value)>\nFMT_CONSTEXPR To safe_float_conversion(const From from, int& ec) {\n  ec = 0;\n  static_assert(std::is_floating_point<From>::value, \"From must be floating\");\n  return from;\n}\n\n/**\n * safe duration cast between integral durations\n */\ntemplate <typename To, typename FromRep, typename FromPeriod,\n          FMT_ENABLE_IF(std::is_integral<FromRep>::value),\n          FMT_ENABLE_IF(std::is_integral<typename To::rep>::value)>\nTo safe_duration_cast(std::chrono::duration<FromRep, FromPeriod> from,\n                      int& ec) {\n  using From = std::chrono::duration<FromRep, FromPeriod>;\n  ec = 0;\n  // the basic idea is that we need to convert from count() in the from type\n  // to count() in the To type, by multiplying it with this:\n  struct Factor\n      : std::ratio_divide<typename From::period, typename To::period> {};\n\n  static_assert(Factor::num > 0, \"num must be positive\");\n  static_assert(Factor::den > 0, \"den must be positive\");\n\n  // the conversion is like this: multiply from.count() with Factor::num\n  // /Factor::den and convert it to To::rep, all this without\n  // overflow/underflow. let's start by finding a suitable type that can hold\n  // both To, From and Factor::num\n  using IntermediateRep =\n      typename std::common_type<typename From::rep, typename To::rep,\n                                decltype(Factor::num)>::type;\n\n  // safe conversion to IntermediateRep\n  IntermediateRep count =\n      lossless_integral_conversion<IntermediateRep>(from.count(), ec);\n  if (ec) return {};\n  // multiply with Factor::num without overflow or underflow\n  if (detail::const_check(Factor::num != 1)) {\n    const auto max1 = detail::max_value<IntermediateRep>() / Factor::num;\n    if (count > max1) {\n      ec = 1;\n      return {};\n    }\n    const auto min1 =\n        (std::numeric_limits<IntermediateRep>::min)() / Factor::num;\n    if (!std::is_unsigned<IntermediateRep>::value && count < min1) {\n      ec = 1;\n      return {};\n    }\n    count *= Factor::num;\n  }\n\n  if (detail::const_check(Factor::den != 1)) count /= Factor::den;\n  auto tocount = lossless_integral_conversion<typename To::rep>(count, ec);\n  return ec ? To() : To(tocount);\n}\n\n/**\n * safe duration_cast between floating point durations\n */\ntemplate <typename To, typename FromRep, typename FromPeriod,\n          FMT_ENABLE_IF(std::is_floating_point<FromRep>::value),\n          FMT_ENABLE_IF(std::is_floating_point<typename To::rep>::value)>\nTo safe_duration_cast(std::chrono::duration<FromRep, FromPeriod> from,\n                      int& ec) {\n  using From = std::chrono::duration<FromRep, FromPeriod>;\n  ec = 0;\n  if (std::isnan(from.count())) {\n    // nan in, gives nan out. easy.\n    return To{std::numeric_limits<typename To::rep>::quiet_NaN()};\n  }\n  // maybe we should also check if from is denormal, and decide what to do about\n  // it.\n\n  // +-inf should be preserved.\n  if (std::isinf(from.count())) {\n    return To{from.count()};\n  }\n\n  // the basic idea is that we need to convert from count() in the from type\n  // to count() in the To type, by multiplying it with this:\n  struct Factor\n      : std::ratio_divide<typename From::period, typename To::period> {};\n\n  static_assert(Factor::num > 0, \"num must be positive\");\n  static_assert(Factor::den > 0, \"den must be positive\");\n\n  // the conversion is like this: multiply from.count() with Factor::num\n  // /Factor::den and convert it to To::rep, all this without\n  // overflow/underflow. let's start by finding a suitable type that can hold\n  // both To, From and Factor::num\n  using IntermediateRep =\n      typename std::common_type<typename From::rep, typename To::rep,\n                                decltype(Factor::num)>::type;\n\n  // force conversion of From::rep -> IntermediateRep to be safe,\n  // even if it will never happen be narrowing in this context.\n  IntermediateRep count =\n      safe_float_conversion<IntermediateRep>(from.count(), ec);\n  if (ec) {\n    return {};\n  }\n\n  // multiply with Factor::num without overflow or underflow\n  if (detail::const_check(Factor::num != 1)) {\n    constexpr auto max1 = detail::max_value<IntermediateRep>() /\n                          static_cast<IntermediateRep>(Factor::num);\n    if (count > max1) {\n      ec = 1;\n      return {};\n    }\n    constexpr auto min1 = std::numeric_limits<IntermediateRep>::lowest() /\n                          static_cast<IntermediateRep>(Factor::num);\n    if (count < min1) {\n      ec = 1;\n      return {};\n    }\n    count *= static_cast<IntermediateRep>(Factor::num);\n  }\n\n  // this can't go wrong, right? den>0 is checked earlier.\n  if (detail::const_check(Factor::den != 1)) {\n    using common_t = typename std::common_type<IntermediateRep, intmax_t>::type;\n    count /= static_cast<common_t>(Factor::den);\n  }\n\n  // convert to the to type, safely\n  using ToRep = typename To::rep;\n\n  const ToRep tocount = safe_float_conversion<ToRep>(count, ec);\n  if (ec) {\n    return {};\n  }\n  return To{tocount};\n}\n}  // namespace safe_duration_cast\n#endif\n\n// Prevents expansion of a preceding token as a function-style macro.\n// Usage: f FMT_NOMACRO()\n#define FMT_NOMACRO\n\nnamespace detail {\ntemplate <typename T = void> struct null {};\ninline null<> localtime_r FMT_NOMACRO(...) { return null<>(); }\ninline null<> localtime_s(...) { return null<>(); }\ninline null<> gmtime_r(...) { return null<>(); }\ninline null<> gmtime_s(...) { return null<>(); }\n\ninline const std::locale& get_classic_locale() {\n  static const auto& locale = std::locale::classic();\n  return locale;\n}\n\ntemplate <typename CodeUnit> struct codecvt_result {\n  static constexpr const size_t max_size = 32;\n  CodeUnit buf[max_size];\n  CodeUnit* end;\n};\ntemplate <typename CodeUnit>\nconstexpr const size_t codecvt_result<CodeUnit>::max_size;\n\ntemplate <typename CodeUnit>\nvoid write_codecvt(codecvt_result<CodeUnit>& out, string_view in_buf,\n                   const std::locale& loc) {\n#if FMT_CLANG_VERSION\n#  pragma clang diagnostic push\n#  pragma clang diagnostic ignored \"-Wdeprecated\"\n  auto& f = std::use_facet<std::codecvt<CodeUnit, char, std::mbstate_t>>(loc);\n#  pragma clang diagnostic pop\n#else\n  auto& f = std::use_facet<std::codecvt<CodeUnit, char, std::mbstate_t>>(loc);\n#endif\n  auto mb = std::mbstate_t();\n  const char* from_next = nullptr;\n  auto result = f.in(mb, in_buf.begin(), in_buf.end(), from_next,\n                     std::begin(out.buf), std::end(out.buf), out.end);\n  if (result != std::codecvt_base::ok)\n    FMT_THROW(format_error(\"failed to format time\"));\n}\n\ntemplate <typename OutputIt>\nauto write_encoded_tm_str(OutputIt out, string_view in, const std::locale& loc)\n    -> OutputIt {\n  if (detail::is_utf8() && loc != get_classic_locale()) {\n    // char16_t and char32_t codecvts are broken in MSVC (linkage errors) and\n    // gcc-4.\n#if FMT_MSC_VERSION != 0 || \\\n    (defined(__GLIBCXX__) && !defined(_GLIBCXX_USE_DUAL_ABI))\n    // The _GLIBCXX_USE_DUAL_ABI macro is always defined in libstdc++ from gcc-5\n    // and newer.\n    using code_unit = wchar_t;\n#else\n    using code_unit = char32_t;\n#endif\n\n    using unit_t = codecvt_result<code_unit>;\n    unit_t unit;\n    write_codecvt(unit, in, loc);\n    // In UTF-8 is used one to four one-byte code units.\n    auto&& buf = basic_memory_buffer<char, unit_t::max_size * 4>();\n    for (code_unit* p = unit.buf; p != unit.end; ++p) {\n      uint32_t c = static_cast<uint32_t>(*p);\n      if (sizeof(code_unit) == 2 && c >= 0xd800 && c <= 0xdfff) {\n        // surrogate pair\n        ++p;\n        if (p == unit.end || (c & 0xfc00) != 0xd800 ||\n            (*p & 0xfc00) != 0xdc00) {\n          FMT_THROW(format_error(\"failed to format time\"));\n        }\n        c = (c << 10) + static_cast<uint32_t>(*p) - 0x35fdc00;\n      }\n      if (c < 0x80) {\n        buf.push_back(static_cast<char>(c));\n      } else if (c < 0x800) {\n        buf.push_back(static_cast<char>(0xc0 | (c >> 6)));\n        buf.push_back(static_cast<char>(0x80 | (c & 0x3f)));\n      } else if ((c >= 0x800 && c <= 0xd7ff) || (c >= 0xe000 && c <= 0xffff)) {\n        buf.push_back(static_cast<char>(0xe0 | (c >> 12)));\n        buf.push_back(static_cast<char>(0x80 | ((c & 0xfff) >> 6)));\n        buf.push_back(static_cast<char>(0x80 | (c & 0x3f)));\n      } else if (c >= 0x10000 && c <= 0x10ffff) {\n        buf.push_back(static_cast<char>(0xf0 | (c >> 18)));\n        buf.push_back(static_cast<char>(0x80 | ((c & 0x3ffff) >> 12)));\n        buf.push_back(static_cast<char>(0x80 | ((c & 0xfff) >> 6)));\n        buf.push_back(static_cast<char>(0x80 | (c & 0x3f)));\n      } else {\n        FMT_THROW(format_error(\"failed to format time\"));\n      }\n    }\n    return copy_str<char>(buf.data(), buf.data() + buf.size(), out);\n  }\n  return copy_str<char>(in.data(), in.data() + in.size(), out);\n}\n\ntemplate <typename Char, typename OutputIt,\n          FMT_ENABLE_IF(!std::is_same<Char, char>::value)>\nauto write_tm_str(OutputIt out, string_view sv, const std::locale& loc)\n    -> OutputIt {\n  codecvt_result<Char> unit;\n  write_codecvt(unit, sv, loc);\n  return copy_str<Char>(unit.buf, unit.end, out);\n}\n\ntemplate <typename Char, typename OutputIt,\n          FMT_ENABLE_IF(std::is_same<Char, char>::value)>\nauto write_tm_str(OutputIt out, string_view sv, const std::locale& loc)\n    -> OutputIt {\n  return write_encoded_tm_str(out, sv, loc);\n}\n\ntemplate <typename Char>\ninline void do_write(buffer<Char>& buf, const std::tm& time,\n                     const std::locale& loc, char format, char modifier) {\n  auto&& format_buf = formatbuf<std::basic_streambuf<Char>>(buf);\n  auto&& os = std::basic_ostream<Char>(&format_buf);\n  os.imbue(loc);\n  using iterator = std::ostreambuf_iterator<Char>;\n  const auto& facet = std::use_facet<std::time_put<Char, iterator>>(loc);\n  auto end = facet.put(os, os, Char(' '), &time, format, modifier);\n  if (end.failed()) FMT_THROW(format_error(\"failed to format time\"));\n}\n\ntemplate <typename Char, typename OutputIt,\n          FMT_ENABLE_IF(!std::is_same<Char, char>::value)>\nauto write(OutputIt out, const std::tm& time, const std::locale& loc,\n           char format, char modifier = 0) -> OutputIt {\n  auto&& buf = get_buffer<Char>(out);\n  do_write<Char>(buf, time, loc, format, modifier);\n  return buf.out();\n}\n\ntemplate <typename Char, typename OutputIt,\n          FMT_ENABLE_IF(std::is_same<Char, char>::value)>\nauto write(OutputIt out, const std::tm& time, const std::locale& loc,\n           char format, char modifier = 0) -> OutputIt {\n  auto&& buf = basic_memory_buffer<Char>();\n  do_write<char>(buf, time, loc, format, modifier);\n  return write_encoded_tm_str(out, string_view(buf.data(), buf.size()), loc);\n}\n\n}  // namespace detail\n\nFMT_MODULE_EXPORT_BEGIN\n\n/**\n  Converts given time since epoch as ``std::time_t`` value into calendar time,\n  expressed in local time. Unlike ``std::localtime``, this function is\n  thread-safe on most platforms.\n */\ninline std::tm localtime(std::time_t time) {\n  struct dispatcher {\n    std::time_t time_;\n    std::tm tm_;\n\n    dispatcher(std::time_t t) : time_(t) {}\n\n    bool run() {\n      using namespace fmt::detail;\n      return handle(localtime_r(&time_, &tm_));\n    }\n\n    bool handle(std::tm* tm) { return tm != nullptr; }\n\n    bool handle(detail::null<>) {\n      using namespace fmt::detail;\n      return fallback(localtime_s(&tm_, &time_));\n    }\n\n    bool fallback(int res) { return res == 0; }\n\n#if !FMT_MSC_VERSION\n    bool fallback(detail::null<>) {\n      using namespace fmt::detail;\n      std::tm* tm = std::localtime(&time_);\n      if (tm) tm_ = *tm;\n      return tm != nullptr;\n    }\n#endif\n  };\n  dispatcher lt(time);\n  // Too big time values may be unsupported.\n  if (!lt.run()) FMT_THROW(format_error(\"time_t value out of range\"));\n  return lt.tm_;\n}\n\ninline std::tm localtime(\n    std::chrono::time_point<std::chrono::system_clock> time_point) {\n  return localtime(std::chrono::system_clock::to_time_t(time_point));\n}\n\n/**\n  Converts given time since epoch as ``std::time_t`` value into calendar time,\n  expressed in Coordinated Universal Time (UTC). Unlike ``std::gmtime``, this\n  function is thread-safe on most platforms.\n */\ninline std::tm gmtime(std::time_t time) {\n  struct dispatcher {\n    std::time_t time_;\n    std::tm tm_;\n\n    dispatcher(std::time_t t) : time_(t) {}\n\n    bool run() {\n      using namespace fmt::detail;\n      return handle(gmtime_r(&time_, &tm_));\n    }\n\n    bool handle(std::tm* tm) { return tm != nullptr; }\n\n    bool handle(detail::null<>) {\n      using namespace fmt::detail;\n      return fallback(gmtime_s(&tm_, &time_));\n    }\n\n    bool fallback(int res) { return res == 0; }\n\n#if !FMT_MSC_VERSION\n    bool fallback(detail::null<>) {\n      std::tm* tm = std::gmtime(&time_);\n      if (tm) tm_ = *tm;\n      return tm != nullptr;\n    }\n#endif\n  };\n  dispatcher gt(time);\n  // Too big time values may be unsupported.\n  if (!gt.run()) FMT_THROW(format_error(\"time_t value out of range\"));\n  return gt.tm_;\n}\n\ninline std::tm gmtime(\n    std::chrono::time_point<std::chrono::system_clock> time_point) {\n  return gmtime(std::chrono::system_clock::to_time_t(time_point));\n}\n\nFMT_BEGIN_DETAIL_NAMESPACE\n\n// Writes two-digit numbers a, b and c separated by sep to buf.\n// The method by Pavel Novikov based on\n// https://johnnylee-sde.github.io/Fast-unsigned-integer-to-time-string/.\ninline void write_digit2_separated(char* buf, unsigned a, unsigned b,\n                                   unsigned c, char sep) {\n  unsigned long long digits =\n      a | (b << 24) | (static_cast<unsigned long long>(c) << 48);\n  // Convert each value to BCD.\n  // We have x = a * 10 + b and we want to convert it to BCD y = a * 16 + b.\n  // The difference is\n  //   y - x = a * 6\n  // a can be found from x:\n  //   a = floor(x / 10)\n  // then\n  //   y = x + a * 6 = x + floor(x / 10) * 6\n  // floor(x / 10) is (x * 205) >> 11 (needs 16 bits).\n  digits += (((digits * 205) >> 11) & 0x000f00000f00000f) * 6;\n  // Put low nibbles to high bytes and high nibbles to low bytes.\n  digits = ((digits & 0x00f00000f00000f0) >> 4) |\n           ((digits & 0x000f00000f00000f) << 8);\n  auto usep = static_cast<unsigned long long>(sep);\n  // Add ASCII '0' to each digit byte and insert separators.\n  digits |= 0x3030003030003030 | (usep << 16) | (usep << 40);\n\n  constexpr const size_t len = 8;\n  if (const_check(is_big_endian())) {\n    char tmp[len];\n    std::memcpy(tmp, &digits, len);\n    std::reverse_copy(tmp, tmp + len, buf);\n  } else {\n    std::memcpy(buf, &digits, len);\n  }\n}\n\ntemplate <typename Period> FMT_CONSTEXPR inline const char* get_units() {\n  if (std::is_same<Period, std::atto>::value) return \"as\";\n  if (std::is_same<Period, std::femto>::value) return \"fs\";\n  if (std::is_same<Period, std::pico>::value) return \"ps\";\n  if (std::is_same<Period, std::nano>::value) return \"ns\";\n  if (std::is_same<Period, std::micro>::value) return \"µs\";\n  if (std::is_same<Period, std::milli>::value) return \"ms\";\n  if (std::is_same<Period, std::centi>::value) return \"cs\";\n  if (std::is_same<Period, std::deci>::value) return \"ds\";\n  if (std::is_same<Period, std::ratio<1>>::value) return \"s\";\n  if (std::is_same<Period, std::deca>::value) return \"das\";\n  if (std::is_same<Period, std::hecto>::value) return \"hs\";\n  if (std::is_same<Period, std::kilo>::value) return \"ks\";\n  if (std::is_same<Period, std::mega>::value) return \"Ms\";\n  if (std::is_same<Period, std::giga>::value) return \"Gs\";\n  if (std::is_same<Period, std::tera>::value) return \"Ts\";\n  if (std::is_same<Period, std::peta>::value) return \"Ps\";\n  if (std::is_same<Period, std::exa>::value) return \"Es\";\n  if (std::is_same<Period, std::ratio<60>>::value) return \"m\";\n  if (std::is_same<Period, std::ratio<3600>>::value) return \"h\";\n  return nullptr;\n}\n\nenum class numeric_system {\n  standard,\n  // Alternative numeric system, e.g. 十二 instead of 12 in ja_JP locale.\n  alternative\n};\n\n// Parses a put_time-like format string and invokes handler actions.\ntemplate <typename Char, typename Handler>\nFMT_CONSTEXPR const Char* parse_chrono_format(const Char* begin,\n                                              const Char* end,\n                                              Handler&& handler) {\n  auto ptr = begin;\n  while (ptr != end) {\n    auto c = *ptr;\n    if (c == '}') break;\n    if (c != '%') {\n      ++ptr;\n      continue;\n    }\n    if (begin != ptr) handler.on_text(begin, ptr);\n    ++ptr;  // consume '%'\n    if (ptr == end) FMT_THROW(format_error(\"invalid format\"));\n    c = *ptr++;\n    switch (c) {\n    case '%':\n      handler.on_text(ptr - 1, ptr);\n      break;\n    case 'n': {\n      const Char newline[] = {'\\n'};\n      handler.on_text(newline, newline + 1);\n      break;\n    }\n    case 't': {\n      const Char tab[] = {'\\t'};\n      handler.on_text(tab, tab + 1);\n      break;\n    }\n    // Year:\n    case 'Y':\n      handler.on_year(numeric_system::standard);\n      break;\n    case 'y':\n      handler.on_short_year(numeric_system::standard);\n      break;\n    case 'C':\n      handler.on_century(numeric_system::standard);\n      break;\n    case 'G':\n      handler.on_iso_week_based_year();\n      break;\n    case 'g':\n      handler.on_iso_week_based_short_year();\n      break;\n    // Day of the week:\n    case 'a':\n      handler.on_abbr_weekday();\n      break;\n    case 'A':\n      handler.on_full_weekday();\n      break;\n    case 'w':\n      handler.on_dec0_weekday(numeric_system::standard);\n      break;\n    case 'u':\n      handler.on_dec1_weekday(numeric_system::standard);\n      break;\n    // Month:\n    case 'b':\n    case 'h':\n      handler.on_abbr_month();\n      break;\n    case 'B':\n      handler.on_full_month();\n      break;\n    case 'm':\n      handler.on_dec_month(numeric_system::standard);\n      break;\n    // Day of the year/month:\n    case 'U':\n      handler.on_dec0_week_of_year(numeric_system::standard);\n      break;\n    case 'W':\n      handler.on_dec1_week_of_year(numeric_system::standard);\n      break;\n    case 'V':\n      handler.on_iso_week_of_year(numeric_system::standard);\n      break;\n    case 'j':\n      handler.on_day_of_year();\n      break;\n    case 'd':\n      handler.on_day_of_month(numeric_system::standard);\n      break;\n    case 'e':\n      handler.on_day_of_month_space(numeric_system::standard);\n      break;\n    // Hour, minute, second:\n    case 'H':\n      handler.on_24_hour(numeric_system::standard);\n      break;\n    case 'I':\n      handler.on_12_hour(numeric_system::standard);\n      break;\n    case 'M':\n      handler.on_minute(numeric_system::standard);\n      break;\n    case 'S':\n      handler.on_second(numeric_system::standard);\n      break;\n    // Other:\n    case 'c':\n      handler.on_datetime(numeric_system::standard);\n      break;\n    case 'x':\n      handler.on_loc_date(numeric_system::standard);\n      break;\n    case 'X':\n      handler.on_loc_time(numeric_system::standard);\n      break;\n    case 'D':\n      handler.on_us_date();\n      break;\n    case 'F':\n      handler.on_iso_date();\n      break;\n    case 'r':\n      handler.on_12_hour_time();\n      break;\n    case 'R':\n      handler.on_24_hour_time();\n      break;\n    case 'T':\n      handler.on_iso_time();\n      break;\n    case 'p':\n      handler.on_am_pm();\n      break;\n    case 'Q':\n      handler.on_duration_value();\n      break;\n    case 'q':\n      handler.on_duration_unit();\n      break;\n    case 'z':\n      handler.on_utc_offset();\n      break;\n    case 'Z':\n      handler.on_tz_name();\n      break;\n    // Alternative representation:\n    case 'E': {\n      if (ptr == end) FMT_THROW(format_error(\"invalid format\"));\n      c = *ptr++;\n      switch (c) {\n      case 'Y':\n        handler.on_year(numeric_system::alternative);\n        break;\n      case 'y':\n        handler.on_offset_year();\n        break;\n      case 'C':\n        handler.on_century(numeric_system::alternative);\n        break;\n      case 'c':\n        handler.on_datetime(numeric_system::alternative);\n        break;\n      case 'x':\n        handler.on_loc_date(numeric_system::alternative);\n        break;\n      case 'X':\n        handler.on_loc_time(numeric_system::alternative);\n        break;\n      default:\n        FMT_THROW(format_error(\"invalid format\"));\n      }\n      break;\n    }\n    case 'O':\n      if (ptr == end) FMT_THROW(format_error(\"invalid format\"));\n      c = *ptr++;\n      switch (c) {\n      case 'y':\n        handler.on_short_year(numeric_system::alternative);\n        break;\n      case 'm':\n        handler.on_dec_month(numeric_system::alternative);\n        break;\n      case 'U':\n        handler.on_dec0_week_of_year(numeric_system::alternative);\n        break;\n      case 'W':\n        handler.on_dec1_week_of_year(numeric_system::alternative);\n        break;\n      case 'V':\n        handler.on_iso_week_of_year(numeric_system::alternative);\n        break;\n      case 'd':\n        handler.on_day_of_month(numeric_system::alternative);\n        break;\n      case 'e':\n        handler.on_day_of_month_space(numeric_system::alternative);\n        break;\n      case 'w':\n        handler.on_dec0_weekday(numeric_system::alternative);\n        break;\n      case 'u':\n        handler.on_dec1_weekday(numeric_system::alternative);\n        break;\n      case 'H':\n        handler.on_24_hour(numeric_system::alternative);\n        break;\n      case 'I':\n        handler.on_12_hour(numeric_system::alternative);\n        break;\n      case 'M':\n        handler.on_minute(numeric_system::alternative);\n        break;\n      case 'S':\n        handler.on_second(numeric_system::alternative);\n        break;\n      default:\n        FMT_THROW(format_error(\"invalid format\"));\n      }\n      break;\n    default:\n      FMT_THROW(format_error(\"invalid format\"));\n    }\n    begin = ptr;\n  }\n  if (begin != ptr) handler.on_text(begin, ptr);\n  return ptr;\n}\n\ntemplate <typename Derived> struct null_chrono_spec_handler {\n  FMT_CONSTEXPR void unsupported() {\n    static_cast<Derived*>(this)->unsupported();\n  }\n  FMT_CONSTEXPR void on_year(numeric_system) { unsupported(); }\n  FMT_CONSTEXPR void on_short_year(numeric_system) { unsupported(); }\n  FMT_CONSTEXPR void on_offset_year() { unsupported(); }\n  FMT_CONSTEXPR void on_century(numeric_system) { unsupported(); }\n  FMT_CONSTEXPR void on_iso_week_based_year() { unsupported(); }\n  FMT_CONSTEXPR void on_iso_week_based_short_year() { unsupported(); }\n  FMT_CONSTEXPR void on_abbr_weekday() { unsupported(); }\n  FMT_CONSTEXPR void on_full_weekday() { unsupported(); }\n  FMT_CONSTEXPR void on_dec0_weekday(numeric_system) { unsupported(); }\n  FMT_CONSTEXPR void on_dec1_weekday(numeric_system) { unsupported(); }\n  FMT_CONSTEXPR void on_abbr_month() { unsupported(); }\n  FMT_CONSTEXPR void on_full_month() { unsupported(); }\n  FMT_CONSTEXPR void on_dec_month(numeric_system) { unsupported(); }\n  FMT_CONSTEXPR void on_dec0_week_of_year(numeric_system) { unsupported(); }\n  FMT_CONSTEXPR void on_dec1_week_of_year(numeric_system) { unsupported(); }\n  FMT_CONSTEXPR void on_iso_week_of_year(numeric_system) { unsupported(); }\n  FMT_CONSTEXPR void on_day_of_year() { unsupported(); }\n  FMT_CONSTEXPR void on_day_of_month(numeric_system) { unsupported(); }\n  FMT_CONSTEXPR void on_day_of_month_space(numeric_system) { unsupported(); }\n  FMT_CONSTEXPR void on_24_hour(numeric_system) { unsupported(); }\n  FMT_CONSTEXPR void on_12_hour(numeric_system) { unsupported(); }\n  FMT_CONSTEXPR void on_minute(numeric_system) { unsupported(); }\n  FMT_CONSTEXPR void on_second(numeric_system) { unsupported(); }\n  FMT_CONSTEXPR void on_datetime(numeric_system) { unsupported(); }\n  FMT_CONSTEXPR void on_loc_date(numeric_system) { unsupported(); }\n  FMT_CONSTEXPR void on_loc_time(numeric_system) { unsupported(); }\n  FMT_CONSTEXPR void on_us_date() { unsupported(); }\n  FMT_CONSTEXPR void on_iso_date() { unsupported(); }\n  FMT_CONSTEXPR void on_12_hour_time() { unsupported(); }\n  FMT_CONSTEXPR void on_24_hour_time() { unsupported(); }\n  FMT_CONSTEXPR void on_iso_time() { unsupported(); }\n  FMT_CONSTEXPR void on_am_pm() { unsupported(); }\n  FMT_CONSTEXPR void on_duration_value() { unsupported(); }\n  FMT_CONSTEXPR void on_duration_unit() { unsupported(); }\n  FMT_CONSTEXPR void on_utc_offset() { unsupported(); }\n  FMT_CONSTEXPR void on_tz_name() { unsupported(); }\n};\n\nstruct tm_format_checker : null_chrono_spec_handler<tm_format_checker> {\n  FMT_NORETURN void unsupported() { FMT_THROW(format_error(\"no format\")); }\n\n  template <typename Char>\n  FMT_CONSTEXPR void on_text(const Char*, const Char*) {}\n  FMT_CONSTEXPR void on_year(numeric_system) {}\n  FMT_CONSTEXPR void on_short_year(numeric_system) {}\n  FMT_CONSTEXPR void on_offset_year() {}\n  FMT_CONSTEXPR void on_century(numeric_system) {}\n  FMT_CONSTEXPR void on_iso_week_based_year() {}\n  FMT_CONSTEXPR void on_iso_week_based_short_year() {}\n  FMT_CONSTEXPR void on_abbr_weekday() {}\n  FMT_CONSTEXPR void on_full_weekday() {}\n  FMT_CONSTEXPR void on_dec0_weekday(numeric_system) {}\n  FMT_CONSTEXPR void on_dec1_weekday(numeric_system) {}\n  FMT_CONSTEXPR void on_abbr_month() {}\n  FMT_CONSTEXPR void on_full_month() {}\n  FMT_CONSTEXPR void on_dec_month(numeric_system) {}\n  FMT_CONSTEXPR void on_dec0_week_of_year(numeric_system) {}\n  FMT_CONSTEXPR void on_dec1_week_of_year(numeric_system) {}\n  FMT_CONSTEXPR void on_iso_week_of_year(numeric_system) {}\n  FMT_CONSTEXPR void on_day_of_year() {}\n  FMT_CONSTEXPR void on_day_of_month(numeric_system) {}\n  FMT_CONSTEXPR void on_day_of_month_space(numeric_system) {}\n  FMT_CONSTEXPR void on_24_hour(numeric_system) {}\n  FMT_CONSTEXPR void on_12_hour(numeric_system) {}\n  FMT_CONSTEXPR void on_minute(numeric_system) {}\n  FMT_CONSTEXPR void on_second(numeric_system) {}\n  FMT_CONSTEXPR void on_datetime(numeric_system) {}\n  FMT_CONSTEXPR void on_loc_date(numeric_system) {}\n  FMT_CONSTEXPR void on_loc_time(numeric_system) {}\n  FMT_CONSTEXPR void on_us_date() {}\n  FMT_CONSTEXPR void on_iso_date() {}\n  FMT_CONSTEXPR void on_12_hour_time() {}\n  FMT_CONSTEXPR void on_24_hour_time() {}\n  FMT_CONSTEXPR void on_iso_time() {}\n  FMT_CONSTEXPR void on_am_pm() {}\n  FMT_CONSTEXPR void on_utc_offset() {}\n  FMT_CONSTEXPR void on_tz_name() {}\n};\n\ninline const char* tm_wday_full_name(int wday) {\n  static constexpr const char* full_name_list[] = {\n      \"Sunday\",   \"Monday\", \"Tuesday\", \"Wednesday\",\n      \"Thursday\", \"Friday\", \"Saturday\"};\n  return wday >= 0 && wday <= 6 ? full_name_list[wday] : \"?\";\n}\ninline const char* tm_wday_short_name(int wday) {\n  static constexpr const char* short_name_list[] = {\"Sun\", \"Mon\", \"Tue\", \"Wed\",\n                                                    \"Thu\", \"Fri\", \"Sat\"};\n  return wday >= 0 && wday <= 6 ? short_name_list[wday] : \"???\";\n}\n\ninline const char* tm_mon_full_name(int mon) {\n  static constexpr const char* full_name_list[] = {\n      \"January\", \"February\", \"March\",     \"April\",   \"May\",      \"June\",\n      \"July\",    \"August\",   \"September\", \"October\", \"November\", \"December\"};\n  return mon >= 0 && mon <= 11 ? full_name_list[mon] : \"?\";\n}\ninline const char* tm_mon_short_name(int mon) {\n  static constexpr const char* short_name_list[] = {\n      \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\",\n      \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\",\n  };\n  return mon >= 0 && mon <= 11 ? short_name_list[mon] : \"???\";\n}\n\ntemplate <typename T, typename = void>\nstruct has_member_data_tm_gmtoff : std::false_type {};\ntemplate <typename T>\nstruct has_member_data_tm_gmtoff<T, void_t<decltype(T::tm_gmtoff)>>\n    : std::true_type {};\n\ntemplate <typename T, typename = void>\nstruct has_member_data_tm_zone : std::false_type {};\ntemplate <typename T>\nstruct has_member_data_tm_zone<T, void_t<decltype(T::tm_zone)>>\n    : std::true_type {};\n\n#if FMT_USE_TZSET\ninline void tzset_once() {\n  static bool init = []() -> bool {\n    _tzset();\n    return true;\n  }();\n  ignore_unused(init);\n}\n#endif\n\ntemplate <typename OutputIt, typename Char> class tm_writer {\n private:\n  static constexpr int days_per_week = 7;\n\n  const std::locale& loc_;\n  const bool is_classic_;\n  OutputIt out_;\n  const std::tm& tm_;\n\n  auto tm_sec() const noexcept -> int {\n    FMT_ASSERT(tm_.tm_sec >= 0 && tm_.tm_sec <= 61, \"\");\n    return tm_.tm_sec;\n  }\n  auto tm_min() const noexcept -> int {\n    FMT_ASSERT(tm_.tm_min >= 0 && tm_.tm_min <= 59, \"\");\n    return tm_.tm_min;\n  }\n  auto tm_hour() const noexcept -> int {\n    FMT_ASSERT(tm_.tm_hour >= 0 && tm_.tm_hour <= 23, \"\");\n    return tm_.tm_hour;\n  }\n  auto tm_mday() const noexcept -> int {\n    FMT_ASSERT(tm_.tm_mday >= 1 && tm_.tm_mday <= 31, \"\");\n    return tm_.tm_mday;\n  }\n  auto tm_mon() const noexcept -> int {\n    FMT_ASSERT(tm_.tm_mon >= 0 && tm_.tm_mon <= 11, \"\");\n    return tm_.tm_mon;\n  }\n  auto tm_year() const noexcept -> long long { return 1900ll + tm_.tm_year; }\n  auto tm_wday() const noexcept -> int {\n    FMT_ASSERT(tm_.tm_wday >= 0 && tm_.tm_wday <= 6, \"\");\n    return tm_.tm_wday;\n  }\n  auto tm_yday() const noexcept -> int {\n    FMT_ASSERT(tm_.tm_yday >= 0 && tm_.tm_yday <= 365, \"\");\n    return tm_.tm_yday;\n  }\n\n  auto tm_hour12() const noexcept -> int {\n    const auto h = tm_hour();\n    const auto z = h < 12 ? h : h - 12;\n    return z == 0 ? 12 : z;\n  }\n\n  // POSIX and the C Standard are unclear or inconsistent about what %C and %y\n  // do if the year is negative or exceeds 9999. Use the convention that %C\n  // concatenated with %y yields the same output as %Y, and that %Y contains at\n  // least 4 characters, with more only if necessary.\n  auto split_year_lower(long long year) const noexcept -> int {\n    auto l = year % 100;\n    if (l < 0) l = -l;  // l in [0, 99]\n    return static_cast<int>(l);\n  }\n\n  // Algorithm:\n  // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_the_week_number_from_a_month_and_day_of_the_month_or_ordinal_date\n  auto iso_year_weeks(long long curr_year) const noexcept -> int {\n    const auto prev_year = curr_year - 1;\n    const auto curr_p =\n        (curr_year + curr_year / 4 - curr_year / 100 + curr_year / 400) %\n        days_per_week;\n    const auto prev_p =\n        (prev_year + prev_year / 4 - prev_year / 100 + prev_year / 400) %\n        days_per_week;\n    return 52 + ((curr_p == 4 || prev_p == 3) ? 1 : 0);\n  }\n  auto iso_week_num(int tm_yday, int tm_wday) const noexcept -> int {\n    return (tm_yday + 11 - (tm_wday == 0 ? days_per_week : tm_wday)) /\n           days_per_week;\n  }\n  auto tm_iso_week_year() const noexcept -> long long {\n    const auto year = tm_year();\n    const auto w = iso_week_num(tm_yday(), tm_wday());\n    if (w < 1) return year - 1;\n    if (w > iso_year_weeks(year)) return year + 1;\n    return year;\n  }\n  auto tm_iso_week_of_year() const noexcept -> int {\n    const auto year = tm_year();\n    const auto w = iso_week_num(tm_yday(), tm_wday());\n    if (w < 1) return iso_year_weeks(year - 1);\n    if (w > iso_year_weeks(year)) return 1;\n    return w;\n  }\n\n  void write1(int value) {\n    *out_++ = static_cast<char>('0' + to_unsigned(value) % 10);\n  }\n  void write2(int value) {\n    const char* d = digits2(to_unsigned(value) % 100);\n    *out_++ = *d++;\n    *out_++ = *d;\n  }\n\n  void write_year_extended(long long year) {\n    // At least 4 characters.\n    int width = 4;\n    if (year < 0) {\n      *out_++ = '-';\n      year = 0 - year;\n      --width;\n    }\n    uint32_or_64_or_128_t<long long> n = to_unsigned(year);\n    const int num_digits = count_digits(n);\n    if (width > num_digits) out_ = std::fill_n(out_, width - num_digits, '0');\n    out_ = format_decimal<Char>(out_, n, num_digits).end;\n  }\n  void write_year(long long year) {\n    if (year >= 0 && year < 10000) {\n      write2(static_cast<int>(year / 100));\n      write2(static_cast<int>(year % 100));\n    } else {\n      write_year_extended(year);\n    }\n  }\n\n  void write_utc_offset(long offset) {\n    if (offset < 0) {\n      *out_++ = '-';\n      offset = -offset;\n    } else {\n      *out_++ = '+';\n    }\n    offset /= 60;\n    write2(static_cast<int>(offset / 60));\n    write2(static_cast<int>(offset % 60));\n  }\n  template <typename T, FMT_ENABLE_IF(has_member_data_tm_gmtoff<T>::value)>\n  void format_utc_offset_impl(const T& tm) {\n    write_utc_offset(tm.tm_gmtoff);\n  }\n  template <typename T, FMT_ENABLE_IF(!has_member_data_tm_gmtoff<T>::value)>\n  void format_utc_offset_impl(const T& tm) {\n#if defined(_WIN32) && defined(_UCRT)\n#  if FMT_USE_TZSET\n    tzset_once();\n#  endif\n    long offset = 0;\n    _get_timezone(&offset);\n    if (tm.tm_isdst) {\n      long dstbias = 0;\n      _get_dstbias(&dstbias);\n      offset += dstbias;\n    }\n    write_utc_offset(-offset);\n#else\n    ignore_unused(tm);\n    format_localized('z');\n#endif\n  }\n\n  template <typename T, FMT_ENABLE_IF(has_member_data_tm_zone<T>::value)>\n  void format_tz_name_impl(const T& tm) {\n    if (is_classic_)\n      out_ = write_tm_str<Char>(out_, tm.tm_zone, loc_);\n    else\n      format_localized('Z');\n  }\n  template <typename T, FMT_ENABLE_IF(!has_member_data_tm_zone<T>::value)>\n  void format_tz_name_impl(const T&) {\n    format_localized('Z');\n  }\n\n  void format_localized(char format, char modifier = 0) {\n    out_ = write<Char>(out_, tm_, loc_, format, modifier);\n  }\n\n public:\n  tm_writer(const std::locale& loc, OutputIt out, const std::tm& tm)\n      : loc_(loc),\n        is_classic_(loc_ == get_classic_locale()),\n        out_(out),\n        tm_(tm) {}\n\n  OutputIt out() const { return out_; }\n\n  FMT_CONSTEXPR void on_text(const Char* begin, const Char* end) {\n    out_ = copy_str<Char>(begin, end, out_);\n  }\n\n  void on_abbr_weekday() {\n    if (is_classic_)\n      out_ = write(out_, tm_wday_short_name(tm_wday()));\n    else\n      format_localized('a');\n  }\n  void on_full_weekday() {\n    if (is_classic_)\n      out_ = write(out_, tm_wday_full_name(tm_wday()));\n    else\n      format_localized('A');\n  }\n  void on_dec0_weekday(numeric_system ns) {\n    if (is_classic_ || ns == numeric_system::standard) return write1(tm_wday());\n    format_localized('w', 'O');\n  }\n  void on_dec1_weekday(numeric_system ns) {\n    if (is_classic_ || ns == numeric_system::standard) {\n      auto wday = tm_wday();\n      write1(wday == 0 ? days_per_week : wday);\n    } else {\n      format_localized('u', 'O');\n    }\n  }\n\n  void on_abbr_month() {\n    if (is_classic_)\n      out_ = write(out_, tm_mon_short_name(tm_mon()));\n    else\n      format_localized('b');\n  }\n  void on_full_month() {\n    if (is_classic_)\n      out_ = write(out_, tm_mon_full_name(tm_mon()));\n    else\n      format_localized('B');\n  }\n\n  void on_datetime(numeric_system ns) {\n    if (is_classic_) {\n      on_abbr_weekday();\n      *out_++ = ' ';\n      on_abbr_month();\n      *out_++ = ' ';\n      on_day_of_month_space(numeric_system::standard);\n      *out_++ = ' ';\n      on_iso_time();\n      *out_++ = ' ';\n      on_year(numeric_system::standard);\n    } else {\n      format_localized('c', ns == numeric_system::standard ? '\\0' : 'E');\n    }\n  }\n  void on_loc_date(numeric_system ns) {\n    if (is_classic_)\n      on_us_date();\n    else\n      format_localized('x', ns == numeric_system::standard ? '\\0' : 'E');\n  }\n  void on_loc_time(numeric_system ns) {\n    if (is_classic_)\n      on_iso_time();\n    else\n      format_localized('X', ns == numeric_system::standard ? '\\0' : 'E');\n  }\n  void on_us_date() {\n    char buf[8];\n    write_digit2_separated(buf, to_unsigned(tm_mon() + 1),\n                           to_unsigned(tm_mday()),\n                           to_unsigned(split_year_lower(tm_year())), '/');\n    out_ = copy_str<Char>(std::begin(buf), std::end(buf), out_);\n  }\n  void on_iso_date() {\n    auto year = tm_year();\n    char buf[10];\n    size_t offset = 0;\n    if (year >= 0 && year < 10000) {\n      copy2(buf, digits2(static_cast<size_t>(year / 100)));\n    } else {\n      offset = 4;\n      write_year_extended(year);\n      year = 0;\n    }\n    write_digit2_separated(buf + 2, static_cast<unsigned>(year % 100),\n                           to_unsigned(tm_mon() + 1), to_unsigned(tm_mday()),\n                           '-');\n    out_ = copy_str<Char>(std::begin(buf) + offset, std::end(buf), out_);\n  }\n\n  void on_utc_offset() { format_utc_offset_impl(tm_); }\n  void on_tz_name() { format_tz_name_impl(tm_); }\n\n  void on_year(numeric_system ns) {\n    if (is_classic_ || ns == numeric_system::standard)\n      return write_year(tm_year());\n    format_localized('Y', 'E');\n  }\n  void on_short_year(numeric_system ns) {\n    if (is_classic_ || ns == numeric_system::standard)\n      return write2(split_year_lower(tm_year()));\n    format_localized('y', 'O');\n  }\n  void on_offset_year() {\n    if (is_classic_) return write2(split_year_lower(tm_year()));\n    format_localized('y', 'E');\n  }\n\n  void on_century(numeric_system ns) {\n    if (is_classic_ || ns == numeric_system::standard) {\n      auto year = tm_year();\n      auto upper = year / 100;\n      if (year >= -99 && year < 0) {\n        // Zero upper on negative year.\n        *out_++ = '-';\n        *out_++ = '0';\n      } else if (upper >= 0 && upper < 100) {\n        write2(static_cast<int>(upper));\n      } else {\n        out_ = write<Char>(out_, upper);\n      }\n    } else {\n      format_localized('C', 'E');\n    }\n  }\n\n  void on_dec_month(numeric_system ns) {\n    if (is_classic_ || ns == numeric_system::standard)\n      return write2(tm_mon() + 1);\n    format_localized('m', 'O');\n  }\n\n  void on_dec0_week_of_year(numeric_system ns) {\n    if (is_classic_ || ns == numeric_system::standard)\n      return write2((tm_yday() + days_per_week - tm_wday()) / days_per_week);\n    format_localized('U', 'O');\n  }\n  void on_dec1_week_of_year(numeric_system ns) {\n    if (is_classic_ || ns == numeric_system::standard) {\n      auto wday = tm_wday();\n      write2((tm_yday() + days_per_week -\n              (wday == 0 ? (days_per_week - 1) : (wday - 1))) /\n             days_per_week);\n    } else {\n      format_localized('W', 'O');\n    }\n  }\n  void on_iso_week_of_year(numeric_system ns) {\n    if (is_classic_ || ns == numeric_system::standard)\n      return write2(tm_iso_week_of_year());\n    format_localized('V', 'O');\n  }\n\n  void on_iso_week_based_year() { write_year(tm_iso_week_year()); }\n  void on_iso_week_based_short_year() {\n    write2(split_year_lower(tm_iso_week_year()));\n  }\n\n  void on_day_of_year() {\n    auto yday = tm_yday() + 1;\n    write1(yday / 100);\n    write2(yday % 100);\n  }\n  void on_day_of_month(numeric_system ns) {\n    if (is_classic_ || ns == numeric_system::standard) return write2(tm_mday());\n    format_localized('d', 'O');\n  }\n  void on_day_of_month_space(numeric_system ns) {\n    if (is_classic_ || ns == numeric_system::standard) {\n      auto mday = to_unsigned(tm_mday()) % 100;\n      const char* d2 = digits2(mday);\n      *out_++ = mday < 10 ? ' ' : d2[0];\n      *out_++ = d2[1];\n    } else {\n      format_localized('e', 'O');\n    }\n  }\n\n  void on_24_hour(numeric_system ns) {\n    if (is_classic_ || ns == numeric_system::standard) return write2(tm_hour());\n    format_localized('H', 'O');\n  }\n  void on_12_hour(numeric_system ns) {\n    if (is_classic_ || ns == numeric_system::standard)\n      return write2(tm_hour12());\n    format_localized('I', 'O');\n  }\n  void on_minute(numeric_system ns) {\n    if (is_classic_ || ns == numeric_system::standard) return write2(tm_min());\n    format_localized('M', 'O');\n  }\n  void on_second(numeric_system ns) {\n    if (is_classic_ || ns == numeric_system::standard) return write2(tm_sec());\n    format_localized('S', 'O');\n  }\n\n  void on_12_hour_time() {\n    if (is_classic_) {\n      char buf[8];\n      write_digit2_separated(buf, to_unsigned(tm_hour12()),\n                             to_unsigned(tm_min()), to_unsigned(tm_sec()), ':');\n      out_ = copy_str<Char>(std::begin(buf), std::end(buf), out_);\n      *out_++ = ' ';\n      on_am_pm();\n    } else {\n      format_localized('r');\n    }\n  }\n  void on_24_hour_time() {\n    write2(tm_hour());\n    *out_++ = ':';\n    write2(tm_min());\n  }\n  void on_iso_time() {\n    char buf[8];\n    write_digit2_separated(buf, to_unsigned(tm_hour()), to_unsigned(tm_min()),\n                           to_unsigned(tm_sec()), ':');\n    out_ = copy_str<Char>(std::begin(buf), std::end(buf), out_);\n  }\n\n  void on_am_pm() {\n    if (is_classic_) {\n      *out_++ = tm_hour() < 12 ? 'A' : 'P';\n      *out_++ = 'M';\n    } else {\n      format_localized('p');\n    }\n  }\n\n  // These apply to chrono durations but not tm.\n  void on_duration_value() {}\n  void on_duration_unit() {}\n};\n\nstruct chrono_format_checker : null_chrono_spec_handler<chrono_format_checker> {\n  FMT_NORETURN void unsupported() { FMT_THROW(format_error(\"no date\")); }\n\n  template <typename Char>\n  FMT_CONSTEXPR void on_text(const Char*, const Char*) {}\n  FMT_CONSTEXPR void on_24_hour(numeric_system) {}\n  FMT_CONSTEXPR void on_12_hour(numeric_system) {}\n  FMT_CONSTEXPR void on_minute(numeric_system) {}\n  FMT_CONSTEXPR void on_second(numeric_system) {}\n  FMT_CONSTEXPR void on_12_hour_time() {}\n  FMT_CONSTEXPR void on_24_hour_time() {}\n  FMT_CONSTEXPR void on_iso_time() {}\n  FMT_CONSTEXPR void on_am_pm() {}\n  FMT_CONSTEXPR void on_duration_value() {}\n  FMT_CONSTEXPR void on_duration_unit() {}\n};\n\ntemplate <typename T, FMT_ENABLE_IF(std::is_integral<T>::value)>\ninline bool isfinite(T) {\n  return true;\n}\n\n// Converts value to Int and checks that it's in the range [0, upper).\ntemplate <typename T, typename Int, FMT_ENABLE_IF(std::is_integral<T>::value)>\ninline Int to_nonnegative_int(T value, Int upper) {\n  FMT_ASSERT(std::is_unsigned<Int>::value ||\n             (value >= 0 && to_unsigned(value) <= to_unsigned(upper)),\n             \"invalid value\");\n  (void)upper;\n  return static_cast<Int>(value);\n}\ntemplate <typename T, typename Int, FMT_ENABLE_IF(!std::is_integral<T>::value)>\ninline Int to_nonnegative_int(T value, Int upper) {\n  if (value < 0 || value > static_cast<T>(upper))\n    FMT_THROW(format_error(\"invalid value\"));\n  return static_cast<Int>(value);\n}\n\ntemplate <typename T, FMT_ENABLE_IF(std::is_integral<T>::value)>\ninline T mod(T x, int y) {\n  return x % static_cast<T>(y);\n}\ntemplate <typename T, FMT_ENABLE_IF(std::is_floating_point<T>::value)>\ninline T mod(T x, int y) {\n  return std::fmod(x, static_cast<T>(y));\n}\n\n// If T is an integral type, maps T to its unsigned counterpart, otherwise\n// leaves it unchanged (unlike std::make_unsigned).\ntemplate <typename T, bool INTEGRAL = std::is_integral<T>::value>\nstruct make_unsigned_or_unchanged {\n  using type = T;\n};\n\ntemplate <typename T> struct make_unsigned_or_unchanged<T, true> {\n  using type = typename std::make_unsigned<T>::type;\n};\n\n#if FMT_SAFE_DURATION_CAST\n// throwing version of safe_duration_cast\ntemplate <typename To, typename FromRep, typename FromPeriod>\nTo fmt_safe_duration_cast(std::chrono::duration<FromRep, FromPeriod> from) {\n  int ec;\n  To to = safe_duration_cast::safe_duration_cast<To>(from, ec);\n  if (ec) FMT_THROW(format_error(\"cannot format duration\"));\n  return to;\n}\n#endif\n\ntemplate <typename Rep, typename Period,\n          FMT_ENABLE_IF(std::is_integral<Rep>::value)>\ninline std::chrono::duration<Rep, std::milli> get_milliseconds(\n    std::chrono::duration<Rep, Period> d) {\n  // this may overflow and/or the result may not fit in the\n  // target type.\n#if FMT_SAFE_DURATION_CAST\n  using CommonSecondsType =\n      typename std::common_type<decltype(d), std::chrono::seconds>::type;\n  const auto d_as_common = fmt_safe_duration_cast<CommonSecondsType>(d);\n  const auto d_as_whole_seconds =\n      fmt_safe_duration_cast<std::chrono::seconds>(d_as_common);\n  // this conversion should be nonproblematic\n  const auto diff = d_as_common - d_as_whole_seconds;\n  const auto ms =\n      fmt_safe_duration_cast<std::chrono::duration<Rep, std::milli>>(diff);\n  return ms;\n#else\n  auto s = std::chrono::duration_cast<std::chrono::seconds>(d);\n  return std::chrono::duration_cast<std::chrono::milliseconds>(d - s);\n#endif\n}\n\n// Counts the number of fractional digits in the range [0, 18] according to the\n// C++20 spec. If more than 18 fractional digits are required then returns 6 for\n// microseconds precision.\ntemplate <long long Num, long long Den, int N = 0,\n          bool Enabled = (N < 19) && (Num <= max_value<long long>() / 10)>\nstruct count_fractional_digits {\n  static constexpr int value =\n      Num % Den == 0 ? N : count_fractional_digits<Num * 10, Den, N + 1>::value;\n};\n\n// Base case that doesn't instantiate any more templates\n// in order to avoid overflow.\ntemplate <long long Num, long long Den, int N>\nstruct count_fractional_digits<Num, Den, N, false> {\n  static constexpr int value = (Num % Den == 0) ? N : 6;\n};\n\nconstexpr long long pow10(std::uint32_t n) {\n  return n == 0 ? 1 : 10 * pow10(n - 1);\n}\n\ntemplate <class Rep, class Period,\n          FMT_ENABLE_IF(std::numeric_limits<Rep>::is_signed)>\nconstexpr std::chrono::duration<Rep, Period> abs(\n    std::chrono::duration<Rep, Period> d) {\n  // We need to compare the duration using the count() method directly\n  // due to a compiler bug in clang-11 regarding the spaceship operator,\n  // when -Wzero-as-null-pointer-constant is enabled.\n  // In clang-12 the bug has been fixed. See\n  // https://bugs.llvm.org/show_bug.cgi?id=46235 and the reproducible example:\n  // https://www.godbolt.org/z/Knbb5joYx.\n  return d.count() >= d.zero().count() ? d : -d;\n}\n\ntemplate <class Rep, class Period,\n          FMT_ENABLE_IF(!std::numeric_limits<Rep>::is_signed)>\nconstexpr std::chrono::duration<Rep, Period> abs(\n    std::chrono::duration<Rep, Period> d) {\n  return d;\n}\n\ntemplate <typename Char, typename Rep, typename OutputIt,\n          FMT_ENABLE_IF(std::is_integral<Rep>::value)>\nOutputIt format_duration_value(OutputIt out, Rep val, int) {\n  return write<Char>(out, val);\n}\n\ntemplate <typename Char, typename Rep, typename OutputIt,\n          FMT_ENABLE_IF(std::is_floating_point<Rep>::value)>\nOutputIt format_duration_value(OutputIt out, Rep val, int precision) {\n  auto specs = basic_format_specs<Char>();\n  specs.precision = precision;\n  specs.type = precision >= 0 ? presentation_type::fixed_lower\n                              : presentation_type::general_lower;\n  return write<Char>(out, val, specs);\n}\n\ntemplate <typename Char, typename OutputIt>\nOutputIt copy_unit(string_view unit, OutputIt out, Char) {\n  return std::copy(unit.begin(), unit.end(), out);\n}\n\ntemplate <typename OutputIt>\nOutputIt copy_unit(string_view unit, OutputIt out, wchar_t) {\n  // This works when wchar_t is UTF-32 because units only contain characters\n  // that have the same representation in UTF-16 and UTF-32.\n  utf8_to_utf16 u(unit);\n  return std::copy(u.c_str(), u.c_str() + u.size(), out);\n}\n\ntemplate <typename Char, typename Period, typename OutputIt>\nOutputIt format_duration_unit(OutputIt out) {\n  if (const char* unit = get_units<Period>())\n    return copy_unit(string_view(unit), out, Char());\n  *out++ = '[';\n  out = write<Char>(out, Period::num);\n  if (const_check(Period::den != 1)) {\n    *out++ = '/';\n    out = write<Char>(out, Period::den);\n  }\n  *out++ = ']';\n  *out++ = 's';\n  return out;\n}\n\nclass get_locale {\n private:\n  union {\n    std::locale locale_;\n  };\n  bool has_locale_ = false;\n\n public:\n  get_locale(bool localized, locale_ref loc) : has_locale_(localized) {\n    if (localized)\n      ::new (&locale_) std::locale(loc.template get<std::locale>());\n  }\n  ~get_locale() {\n    if (has_locale_) locale_.~locale();\n  }\n  operator const std::locale&() const {\n    return has_locale_ ? locale_ : get_classic_locale();\n  }\n};\n\ntemplate <typename FormatContext, typename OutputIt, typename Rep,\n          typename Period>\nstruct chrono_formatter {\n  FormatContext& context;\n  OutputIt out;\n  int precision;\n  bool localized = false;\n  // rep is unsigned to avoid overflow.\n  using rep =\n      conditional_t<std::is_integral<Rep>::value && sizeof(Rep) < sizeof(int),\n                    unsigned, typename make_unsigned_or_unchanged<Rep>::type>;\n  rep val;\n  using seconds = std::chrono::duration<rep>;\n  seconds s;\n  using milliseconds = std::chrono::duration<rep, std::milli>;\n  bool negative;\n\n  using char_type = typename FormatContext::char_type;\n  using tm_writer_type = tm_writer<OutputIt, char_type>;\n\n  chrono_formatter(FormatContext& ctx, OutputIt o,\n                   std::chrono::duration<Rep, Period> d)\n      : context(ctx),\n        out(o),\n        val(static_cast<rep>(d.count())),\n        negative(false) {\n    if (d.count() < 0) {\n      val = 0 - val;\n      negative = true;\n    }\n\n    // this may overflow and/or the result may not fit in the\n    // target type.\n#if FMT_SAFE_DURATION_CAST\n    // might need checked conversion (rep!=Rep)\n    auto tmpval = std::chrono::duration<rep, Period>(val);\n    s = fmt_safe_duration_cast<seconds>(tmpval);\n#else\n    s = std::chrono::duration_cast<seconds>(\n        std::chrono::duration<rep, Period>(val));\n#endif\n  }\n\n  // returns true if nan or inf, writes to out.\n  bool handle_nan_inf() {\n    if (isfinite(val)) {\n      return false;\n    }\n    if (isnan(val)) {\n      write_nan();\n      return true;\n    }\n    // must be +-inf\n    if (val > 0) {\n      write_pinf();\n    } else {\n      write_ninf();\n    }\n    return true;\n  }\n\n  Rep hour() const { return static_cast<Rep>(mod((s.count() / 3600), 24)); }\n\n  Rep hour12() const {\n    Rep hour = static_cast<Rep>(mod((s.count() / 3600), 12));\n    return hour <= 0 ? 12 : hour;\n  }\n\n  Rep minute() const { return static_cast<Rep>(mod((s.count() / 60), 60)); }\n  Rep second() const { return static_cast<Rep>(mod(s.count(), 60)); }\n\n  std::tm time() const {\n    auto time = std::tm();\n    time.tm_hour = to_nonnegative_int(hour(), 24);\n    time.tm_min = to_nonnegative_int(minute(), 60);\n    time.tm_sec = to_nonnegative_int(second(), 60);\n    return time;\n  }\n\n  void write_sign() {\n    if (negative) {\n      *out++ = '-';\n      negative = false;\n    }\n  }\n\n  void write(Rep value, int width) {\n    write_sign();\n    if (isnan(value)) return write_nan();\n    uint32_or_64_or_128_t<int> n =\n        to_unsigned(to_nonnegative_int(value, max_value<int>()));\n    int num_digits = detail::count_digits(n);\n    if (width > num_digits) out = std::fill_n(out, width - num_digits, '0');\n    out = format_decimal<char_type>(out, n, num_digits).end;\n  }\n\n  template <typename Duration> void write_fractional_seconds(Duration d) {\n    FMT_ASSERT(!std::is_floating_point<typename Duration::rep>::value, \"\");\n    constexpr auto num_fractional_digits =\n        count_fractional_digits<Duration::period::num,\n                                Duration::period::den>::value;\n\n    using subsecond_precision = std::chrono::duration<\n        typename std::common_type<typename Duration::rep,\n                                  std::chrono::seconds::rep>::type,\n        std::ratio<1, detail::pow10(num_fractional_digits)>>;\n    if (std::ratio_less<typename subsecond_precision::period,\n                        std::chrono::seconds::period>::value) {\n      *out++ = '.';\n      auto fractional =\n          detail::abs(d) - std::chrono::duration_cast<std::chrono::seconds>(d);\n      auto subseconds =\n          std::chrono::treat_as_floating_point<\n              typename subsecond_precision::rep>::value\n              ? fractional.count()\n              : std::chrono::duration_cast<subsecond_precision>(fractional)\n                    .count();\n      uint32_or_64_or_128_t<long long> n =\n          to_unsigned(to_nonnegative_int(subseconds, max_value<long long>()));\n      int num_digits = detail::count_digits(n);\n      if (num_fractional_digits > num_digits)\n        out = std::fill_n(out, num_fractional_digits - num_digits, '0');\n      out = format_decimal<char_type>(out, n, num_digits).end;\n    }\n  }\n\n  void write_nan() { std::copy_n(\"nan\", 3, out); }\n  void write_pinf() { std::copy_n(\"inf\", 3, out); }\n  void write_ninf() { std::copy_n(\"-inf\", 4, out); }\n\n  template <typename Callback, typename... Args>\n  void format_tm(const tm& time, Callback cb, Args... args) {\n    if (isnan(val)) return write_nan();\n    get_locale loc(localized, context.locale());\n    auto w = tm_writer_type(loc, out, time);\n    (w.*cb)(args...);\n    out = w.out();\n  }\n\n  void on_text(const char_type* begin, const char_type* end) {\n    std::copy(begin, end, out);\n  }\n\n  // These are not implemented because durations don't have date information.\n  void on_abbr_weekday() {}\n  void on_full_weekday() {}\n  void on_dec0_weekday(numeric_system) {}\n  void on_dec1_weekday(numeric_system) {}\n  void on_abbr_month() {}\n  void on_full_month() {}\n  void on_datetime(numeric_system) {}\n  void on_loc_date(numeric_system) {}\n  void on_loc_time(numeric_system) {}\n  void on_us_date() {}\n  void on_iso_date() {}\n  void on_utc_offset() {}\n  void on_tz_name() {}\n  void on_year(numeric_system) {}\n  void on_short_year(numeric_system) {}\n  void on_offset_year() {}\n  void on_century(numeric_system) {}\n  void on_iso_week_based_year() {}\n  void on_iso_week_based_short_year() {}\n  void on_dec_month(numeric_system) {}\n  void on_dec0_week_of_year(numeric_system) {}\n  void on_dec1_week_of_year(numeric_system) {}\n  void on_iso_week_of_year(numeric_system) {}\n  void on_day_of_year() {}\n  void on_day_of_month(numeric_system) {}\n  void on_day_of_month_space(numeric_system) {}\n\n  void on_24_hour(numeric_system ns) {\n    if (handle_nan_inf()) return;\n\n    if (ns == numeric_system::standard) return write(hour(), 2);\n    auto time = tm();\n    time.tm_hour = to_nonnegative_int(hour(), 24);\n    format_tm(time, &tm_writer_type::on_24_hour, ns);\n  }\n\n  void on_12_hour(numeric_system ns) {\n    if (handle_nan_inf()) return;\n\n    if (ns == numeric_system::standard) return write(hour12(), 2);\n    auto time = tm();\n    time.tm_hour = to_nonnegative_int(hour12(), 12);\n    format_tm(time, &tm_writer_type::on_12_hour, ns);\n  }\n\n  void on_minute(numeric_system ns) {\n    if (handle_nan_inf()) return;\n\n    if (ns == numeric_system::standard) return write(minute(), 2);\n    auto time = tm();\n    time.tm_min = to_nonnegative_int(minute(), 60);\n    format_tm(time, &tm_writer_type::on_minute, ns);\n  }\n\n  void on_second(numeric_system ns) {\n    if (handle_nan_inf()) return;\n\n    if (ns == numeric_system::standard) {\n      if (std::is_floating_point<rep>::value) {\n        constexpr auto num_fractional_digits =\n            count_fractional_digits<Period::num, Period::den>::value;\n        auto buf = memory_buffer();\n        format_to(std::back_inserter(buf), runtime(\"{:.{}f}\"),\n                  std::fmod(val * static_cast<rep>(Period::num) /\n                                static_cast<rep>(Period::den),\n                            static_cast<rep>(60)),\n                  num_fractional_digits);\n        if (negative) *out++ = '-';\n        if (buf.size() < 2 || buf[1] == '.') *out++ = '0';\n        out = std::copy(buf.begin(), buf.end(), out);\n      } else {\n        write(second(), 2);\n        write_fractional_seconds(std::chrono::duration<rep, Period>(val));\n      }\n      return;\n    }\n    auto time = tm();\n    time.tm_sec = to_nonnegative_int(second(), 60);\n    format_tm(time, &tm_writer_type::on_second, ns);\n  }\n\n  void on_12_hour_time() {\n    if (handle_nan_inf()) return;\n    format_tm(time(), &tm_writer_type::on_12_hour_time);\n  }\n\n  void on_24_hour_time() {\n    if (handle_nan_inf()) {\n      *out++ = ':';\n      handle_nan_inf();\n      return;\n    }\n\n    write(hour(), 2);\n    *out++ = ':';\n    write(minute(), 2);\n  }\n\n  void on_iso_time() {\n    on_24_hour_time();\n    *out++ = ':';\n    if (handle_nan_inf()) return;\n    on_second(numeric_system::standard);\n  }\n\n  void on_am_pm() {\n    if (handle_nan_inf()) return;\n    format_tm(time(), &tm_writer_type::on_am_pm);\n  }\n\n  void on_duration_value() {\n    if (handle_nan_inf()) return;\n    write_sign();\n    out = format_duration_value<char_type>(out, val, precision);\n  }\n\n  void on_duration_unit() {\n    out = format_duration_unit<char_type, Period>(out);\n  }\n};\n\nFMT_END_DETAIL_NAMESPACE\n\n#if defined(__cpp_lib_chrono) && __cpp_lib_chrono >= 201907\nusing weekday = std::chrono::weekday;\n#else\n// A fallback version of weekday.\nclass weekday {\n private:\n  unsigned char value;\n\n public:\n  weekday() = default;\n  explicit constexpr weekday(unsigned wd) noexcept\n      : value(static_cast<unsigned char>(wd != 7 ? wd : 0)) {}\n  constexpr unsigned c_encoding() const noexcept { return value; }\n};\n\nclass year_month_day {};\n#endif\n\n// A rudimentary weekday formatter.\ntemplate <typename Char> struct formatter<weekday, Char> {\n private:\n  bool localized = false;\n\n public:\n  FMT_CONSTEXPR auto parse(basic_format_parse_context<Char>& ctx)\n      -> decltype(ctx.begin()) {\n    auto begin = ctx.begin(), end = ctx.end();\n    if (begin != end && *begin == 'L') {\n      ++begin;\n      localized = true;\n    }\n    return begin;\n  }\n\n  template <typename FormatContext>\n  auto format(weekday wd, FormatContext& ctx) const -> decltype(ctx.out()) {\n    auto time = std::tm();\n    time.tm_wday = static_cast<int>(wd.c_encoding());\n    detail::get_locale loc(localized, ctx.locale());\n    auto w = detail::tm_writer<decltype(ctx.out()), Char>(loc, ctx.out(), time);\n    w.on_abbr_weekday();\n    return w.out();\n  }\n};\n\ntemplate <typename Rep, typename Period, typename Char>\nstruct formatter<std::chrono::duration<Rep, Period>, Char> {\n private:\n  basic_format_specs<Char> specs;\n  int precision = -1;\n  using arg_ref_type = detail::arg_ref<Char>;\n  arg_ref_type width_ref;\n  arg_ref_type precision_ref;\n  bool localized = false;\n  basic_string_view<Char> format_str;\n  using duration = std::chrono::duration<Rep, Period>;\n\n  struct spec_handler {\n    formatter& f;\n    basic_format_parse_context<Char>& context;\n    basic_string_view<Char> format_str;\n\n    template <typename Id> FMT_CONSTEXPR arg_ref_type make_arg_ref(Id arg_id) {\n      context.check_arg_id(arg_id);\n      return arg_ref_type(arg_id);\n    }\n\n    FMT_CONSTEXPR arg_ref_type make_arg_ref(basic_string_view<Char> arg_id) {\n      context.check_arg_id(arg_id);\n      return arg_ref_type(arg_id);\n    }\n\n    FMT_CONSTEXPR arg_ref_type make_arg_ref(detail::auto_id) {\n      return arg_ref_type(context.next_arg_id());\n    }\n\n    void on_error(const char* msg) { FMT_THROW(format_error(msg)); }\n    FMT_CONSTEXPR void on_fill(basic_string_view<Char> fill) {\n      f.specs.fill = fill;\n    }\n    FMT_CONSTEXPR void on_align(align_t align) { f.specs.align = align; }\n    FMT_CONSTEXPR void on_width(int width) { f.specs.width = width; }\n    FMT_CONSTEXPR void on_precision(int _precision) {\n      f.precision = _precision;\n    }\n    FMT_CONSTEXPR void end_precision() {}\n\n    template <typename Id> FMT_CONSTEXPR void on_dynamic_width(Id arg_id) {\n      f.width_ref = make_arg_ref(arg_id);\n    }\n\n    template <typename Id> FMT_CONSTEXPR void on_dynamic_precision(Id arg_id) {\n      f.precision_ref = make_arg_ref(arg_id);\n    }\n  };\n\n  using iterator = typename basic_format_parse_context<Char>::iterator;\n  struct parse_range {\n    iterator begin;\n    iterator end;\n  };\n\n  FMT_CONSTEXPR parse_range do_parse(basic_format_parse_context<Char>& ctx) {\n    auto begin = ctx.begin(), end = ctx.end();\n    if (begin == end || *begin == '}') return {begin, begin};\n    spec_handler handler{*this, ctx, format_str};\n    begin = detail::parse_align(begin, end, handler);\n    if (begin == end) return {begin, begin};\n    begin = detail::parse_width(begin, end, handler);\n    if (begin == end) return {begin, begin};\n    if (*begin == '.') {\n      if (std::is_floating_point<Rep>::value)\n        begin = detail::parse_precision(begin, end, handler);\n      else\n        handler.on_error(\"precision not allowed for this argument type\");\n    }\n    if (begin != end && *begin == 'L') {\n      ++begin;\n      localized = true;\n    }\n    end = detail::parse_chrono_format(begin, end,\n                                      detail::chrono_format_checker());\n    return {begin, end};\n  }\n\n public:\n  FMT_CONSTEXPR auto parse(basic_format_parse_context<Char>& ctx)\n      -> decltype(ctx.begin()) {\n    auto range = do_parse(ctx);\n    format_str = basic_string_view<Char>(\n        &*range.begin, detail::to_unsigned(range.end - range.begin));\n    return range.end;\n  }\n\n  template <typename FormatContext>\n  auto format(const duration& d, FormatContext& ctx) const\n      -> decltype(ctx.out()) {\n    auto specs_copy = specs;\n    auto precision_copy = precision;\n    auto begin = format_str.begin(), end = format_str.end();\n    // As a possible future optimization, we could avoid extra copying if width\n    // is not specified.\n    basic_memory_buffer<Char> buf;\n    auto out = std::back_inserter(buf);\n    detail::handle_dynamic_spec<detail::width_checker>(specs_copy.width,\n                                                       width_ref, ctx);\n    detail::handle_dynamic_spec<detail::precision_checker>(precision_copy,\n                                                           precision_ref, ctx);\n    if (begin == end || *begin == '}') {\n      out = detail::format_duration_value<Char>(out, d.count(), precision_copy);\n      detail::format_duration_unit<Char, Period>(out);\n    } else {\n      detail::chrono_formatter<FormatContext, decltype(out), Rep, Period> f(\n          ctx, out, d);\n      f.precision = precision_copy;\n      f.localized = localized;\n      detail::parse_chrono_format(begin, end, f);\n    }\n    return detail::write(\n        ctx.out(), basic_string_view<Char>(buf.data(), buf.size()), specs_copy);\n  }\n};\n\ntemplate <typename Char, typename Duration>\nstruct formatter<std::chrono::time_point<std::chrono::system_clock, Duration>,\n                 Char> : formatter<std::tm, Char> {\n  FMT_CONSTEXPR formatter() {\n    basic_string_view<Char> default_specs =\n        detail::string_literal<Char, '%', 'F', ' ', '%', 'T'>{};\n    this->do_parse(default_specs.begin(), default_specs.end());\n  }\n\n  template <typename FormatContext>\n  auto format(std::chrono::time_point<std::chrono::system_clock> val,\n              FormatContext& ctx) const -> decltype(ctx.out()) {\n    return formatter<std::tm, Char>::format(localtime(val), ctx);\n  }\n};\n\ntemplate <typename Char> struct formatter<std::tm, Char> {\n private:\n  enum class spec {\n    unknown,\n    year_month_day,\n    hh_mm_ss,\n  };\n  spec spec_ = spec::unknown;\n  basic_string_view<Char> specs;\n\n protected:\n  template <typename It> FMT_CONSTEXPR auto do_parse(It begin, It end) -> It {\n    if (begin != end && *begin == ':') ++begin;\n    end = detail::parse_chrono_format(begin, end, detail::tm_format_checker());\n    // Replace default spec only if the new spec is not empty.\n    if (end != begin) specs = {begin, detail::to_unsigned(end - begin)};\n    return end;\n  }\n\n public:\n  FMT_CONSTEXPR auto parse(basic_format_parse_context<Char>& ctx)\n      -> decltype(ctx.begin()) {\n    auto end = this->do_parse(ctx.begin(), ctx.end());\n    // basic_string_view<>::compare isn't constexpr before C++17.\n    if (specs.size() == 2 && specs[0] == Char('%')) {\n      if (specs[1] == Char('F'))\n        spec_ = spec::year_month_day;\n      else if (specs[1] == Char('T'))\n        spec_ = spec::hh_mm_ss;\n    }\n    return end;\n  }\n\n  template <typename FormatContext>\n  auto format(const std::tm& tm, FormatContext& ctx) const\n      -> decltype(ctx.out()) {\n    const auto loc_ref = ctx.locale();\n    detail::get_locale loc(static_cast<bool>(loc_ref), loc_ref);\n    auto w = detail::tm_writer<decltype(ctx.out()), Char>(loc, ctx.out(), tm);\n    if (spec_ == spec::year_month_day)\n      w.on_iso_date();\n    else if (spec_ == spec::hh_mm_ss)\n      w.on_iso_time();\n    else\n      detail::parse_chrono_format(specs.begin(), specs.end(), w);\n    return w.out();\n  }\n};\n\nFMT_MODULE_EXPORT_END\nFMT_END_NAMESPACE\n\n#endif  // FMT_CHRONO_H_\n"
  },
  {
    "path": "native/iosTest/Pods/fmt/include/fmt/color.h",
    "content": "// Formatting library for C++ - color support\n//\n// Copyright (c) 2018 - present, Victor Zverovich and fmt contributors\n// All rights reserved.\n//\n// For the license information refer to format.h.\n\n#ifndef FMT_COLOR_H_\n#define FMT_COLOR_H_\n\n#include \"format.h\"\n\nFMT_BEGIN_NAMESPACE\nFMT_MODULE_EXPORT_BEGIN\n\nenum class color : uint32_t {\n  alice_blue = 0xF0F8FF,               // rgb(240,248,255)\n  antique_white = 0xFAEBD7,            // rgb(250,235,215)\n  aqua = 0x00FFFF,                     // rgb(0,255,255)\n  aquamarine = 0x7FFFD4,               // rgb(127,255,212)\n  azure = 0xF0FFFF,                    // rgb(240,255,255)\n  beige = 0xF5F5DC,                    // rgb(245,245,220)\n  bisque = 0xFFE4C4,                   // rgb(255,228,196)\n  black = 0x000000,                    // rgb(0,0,0)\n  blanched_almond = 0xFFEBCD,          // rgb(255,235,205)\n  blue = 0x0000FF,                     // rgb(0,0,255)\n  blue_violet = 0x8A2BE2,              // rgb(138,43,226)\n  brown = 0xA52A2A,                    // rgb(165,42,42)\n  burly_wood = 0xDEB887,               // rgb(222,184,135)\n  cadet_blue = 0x5F9EA0,               // rgb(95,158,160)\n  chartreuse = 0x7FFF00,               // rgb(127,255,0)\n  chocolate = 0xD2691E,                // rgb(210,105,30)\n  coral = 0xFF7F50,                    // rgb(255,127,80)\n  cornflower_blue = 0x6495ED,          // rgb(100,149,237)\n  cornsilk = 0xFFF8DC,                 // rgb(255,248,220)\n  crimson = 0xDC143C,                  // rgb(220,20,60)\n  cyan = 0x00FFFF,                     // rgb(0,255,255)\n  dark_blue = 0x00008B,                // rgb(0,0,139)\n  dark_cyan = 0x008B8B,                // rgb(0,139,139)\n  dark_golden_rod = 0xB8860B,          // rgb(184,134,11)\n  dark_gray = 0xA9A9A9,                // rgb(169,169,169)\n  dark_green = 0x006400,               // rgb(0,100,0)\n  dark_khaki = 0xBDB76B,               // rgb(189,183,107)\n  dark_magenta = 0x8B008B,             // rgb(139,0,139)\n  dark_olive_green = 0x556B2F,         // rgb(85,107,47)\n  dark_orange = 0xFF8C00,              // rgb(255,140,0)\n  dark_orchid = 0x9932CC,              // rgb(153,50,204)\n  dark_red = 0x8B0000,                 // rgb(139,0,0)\n  dark_salmon = 0xE9967A,              // rgb(233,150,122)\n  dark_sea_green = 0x8FBC8F,           // rgb(143,188,143)\n  dark_slate_blue = 0x483D8B,          // rgb(72,61,139)\n  dark_slate_gray = 0x2F4F4F,          // rgb(47,79,79)\n  dark_turquoise = 0x00CED1,           // rgb(0,206,209)\n  dark_violet = 0x9400D3,              // rgb(148,0,211)\n  deep_pink = 0xFF1493,                // rgb(255,20,147)\n  deep_sky_blue = 0x00BFFF,            // rgb(0,191,255)\n  dim_gray = 0x696969,                 // rgb(105,105,105)\n  dodger_blue = 0x1E90FF,              // rgb(30,144,255)\n  fire_brick = 0xB22222,               // rgb(178,34,34)\n  floral_white = 0xFFFAF0,             // rgb(255,250,240)\n  forest_green = 0x228B22,             // rgb(34,139,34)\n  fuchsia = 0xFF00FF,                  // rgb(255,0,255)\n  gainsboro = 0xDCDCDC,                // rgb(220,220,220)\n  ghost_white = 0xF8F8FF,              // rgb(248,248,255)\n  gold = 0xFFD700,                     // rgb(255,215,0)\n  golden_rod = 0xDAA520,               // rgb(218,165,32)\n  gray = 0x808080,                     // rgb(128,128,128)\n  green = 0x008000,                    // rgb(0,128,0)\n  green_yellow = 0xADFF2F,             // rgb(173,255,47)\n  honey_dew = 0xF0FFF0,                // rgb(240,255,240)\n  hot_pink = 0xFF69B4,                 // rgb(255,105,180)\n  indian_red = 0xCD5C5C,               // rgb(205,92,92)\n  indigo = 0x4B0082,                   // rgb(75,0,130)\n  ivory = 0xFFFFF0,                    // rgb(255,255,240)\n  khaki = 0xF0E68C,                    // rgb(240,230,140)\n  lavender = 0xE6E6FA,                 // rgb(230,230,250)\n  lavender_blush = 0xFFF0F5,           // rgb(255,240,245)\n  lawn_green = 0x7CFC00,               // rgb(124,252,0)\n  lemon_chiffon = 0xFFFACD,            // rgb(255,250,205)\n  light_blue = 0xADD8E6,               // rgb(173,216,230)\n  light_coral = 0xF08080,              // rgb(240,128,128)\n  light_cyan = 0xE0FFFF,               // rgb(224,255,255)\n  light_golden_rod_yellow = 0xFAFAD2,  // rgb(250,250,210)\n  light_gray = 0xD3D3D3,               // rgb(211,211,211)\n  light_green = 0x90EE90,              // rgb(144,238,144)\n  light_pink = 0xFFB6C1,               // rgb(255,182,193)\n  light_salmon = 0xFFA07A,             // rgb(255,160,122)\n  light_sea_green = 0x20B2AA,          // rgb(32,178,170)\n  light_sky_blue = 0x87CEFA,           // rgb(135,206,250)\n  light_slate_gray = 0x778899,         // rgb(119,136,153)\n  light_steel_blue = 0xB0C4DE,         // rgb(176,196,222)\n  light_yellow = 0xFFFFE0,             // rgb(255,255,224)\n  lime = 0x00FF00,                     // rgb(0,255,0)\n  lime_green = 0x32CD32,               // rgb(50,205,50)\n  linen = 0xFAF0E6,                    // rgb(250,240,230)\n  magenta = 0xFF00FF,                  // rgb(255,0,255)\n  maroon = 0x800000,                   // rgb(128,0,0)\n  medium_aquamarine = 0x66CDAA,        // rgb(102,205,170)\n  medium_blue = 0x0000CD,              // rgb(0,0,205)\n  medium_orchid = 0xBA55D3,            // rgb(186,85,211)\n  medium_purple = 0x9370DB,            // rgb(147,112,219)\n  medium_sea_green = 0x3CB371,         // rgb(60,179,113)\n  medium_slate_blue = 0x7B68EE,        // rgb(123,104,238)\n  medium_spring_green = 0x00FA9A,      // rgb(0,250,154)\n  medium_turquoise = 0x48D1CC,         // rgb(72,209,204)\n  medium_violet_red = 0xC71585,        // rgb(199,21,133)\n  midnight_blue = 0x191970,            // rgb(25,25,112)\n  mint_cream = 0xF5FFFA,               // rgb(245,255,250)\n  misty_rose = 0xFFE4E1,               // rgb(255,228,225)\n  moccasin = 0xFFE4B5,                 // rgb(255,228,181)\n  navajo_white = 0xFFDEAD,             // rgb(255,222,173)\n  navy = 0x000080,                     // rgb(0,0,128)\n  old_lace = 0xFDF5E6,                 // rgb(253,245,230)\n  olive = 0x808000,                    // rgb(128,128,0)\n  olive_drab = 0x6B8E23,               // rgb(107,142,35)\n  orange = 0xFFA500,                   // rgb(255,165,0)\n  orange_red = 0xFF4500,               // rgb(255,69,0)\n  orchid = 0xDA70D6,                   // rgb(218,112,214)\n  pale_golden_rod = 0xEEE8AA,          // rgb(238,232,170)\n  pale_green = 0x98FB98,               // rgb(152,251,152)\n  pale_turquoise = 0xAFEEEE,           // rgb(175,238,238)\n  pale_violet_red = 0xDB7093,          // rgb(219,112,147)\n  papaya_whip = 0xFFEFD5,              // rgb(255,239,213)\n  peach_puff = 0xFFDAB9,               // rgb(255,218,185)\n  peru = 0xCD853F,                     // rgb(205,133,63)\n  pink = 0xFFC0CB,                     // rgb(255,192,203)\n  plum = 0xDDA0DD,                     // rgb(221,160,221)\n  powder_blue = 0xB0E0E6,              // rgb(176,224,230)\n  purple = 0x800080,                   // rgb(128,0,128)\n  rebecca_purple = 0x663399,           // rgb(102,51,153)\n  red = 0xFF0000,                      // rgb(255,0,0)\n  rosy_brown = 0xBC8F8F,               // rgb(188,143,143)\n  royal_blue = 0x4169E1,               // rgb(65,105,225)\n  saddle_brown = 0x8B4513,             // rgb(139,69,19)\n  salmon = 0xFA8072,                   // rgb(250,128,114)\n  sandy_brown = 0xF4A460,              // rgb(244,164,96)\n  sea_green = 0x2E8B57,                // rgb(46,139,87)\n  sea_shell = 0xFFF5EE,                // rgb(255,245,238)\n  sienna = 0xA0522D,                   // rgb(160,82,45)\n  silver = 0xC0C0C0,                   // rgb(192,192,192)\n  sky_blue = 0x87CEEB,                 // rgb(135,206,235)\n  slate_blue = 0x6A5ACD,               // rgb(106,90,205)\n  slate_gray = 0x708090,               // rgb(112,128,144)\n  snow = 0xFFFAFA,                     // rgb(255,250,250)\n  spring_green = 0x00FF7F,             // rgb(0,255,127)\n  steel_blue = 0x4682B4,               // rgb(70,130,180)\n  tan = 0xD2B48C,                      // rgb(210,180,140)\n  teal = 0x008080,                     // rgb(0,128,128)\n  thistle = 0xD8BFD8,                  // rgb(216,191,216)\n  tomato = 0xFF6347,                   // rgb(255,99,71)\n  turquoise = 0x40E0D0,                // rgb(64,224,208)\n  violet = 0xEE82EE,                   // rgb(238,130,238)\n  wheat = 0xF5DEB3,                    // rgb(245,222,179)\n  white = 0xFFFFFF,                    // rgb(255,255,255)\n  white_smoke = 0xF5F5F5,              // rgb(245,245,245)\n  yellow = 0xFFFF00,                   // rgb(255,255,0)\n  yellow_green = 0x9ACD32              // rgb(154,205,50)\n};                                     // enum class color\n\nenum class terminal_color : uint8_t {\n  black = 30,\n  red,\n  green,\n  yellow,\n  blue,\n  magenta,\n  cyan,\n  white,\n  bright_black = 90,\n  bright_red,\n  bright_green,\n  bright_yellow,\n  bright_blue,\n  bright_magenta,\n  bright_cyan,\n  bright_white\n};\n\nenum class emphasis : uint8_t {\n  bold = 1,\n  faint = 1 << 1,\n  italic = 1 << 2,\n  underline = 1 << 3,\n  blink = 1 << 4,\n  reverse = 1 << 5,\n  conceal = 1 << 6,\n  strikethrough = 1 << 7,\n};\n\n// rgb is a struct for red, green and blue colors.\n// Using the name \"rgb\" makes some editors show the color in a tooltip.\nstruct rgb {\n  FMT_CONSTEXPR rgb() : r(0), g(0), b(0) {}\n  FMT_CONSTEXPR rgb(uint8_t r_, uint8_t g_, uint8_t b_) : r(r_), g(g_), b(b_) {}\n  FMT_CONSTEXPR rgb(uint32_t hex)\n      : r((hex >> 16) & 0xFF), g((hex >> 8) & 0xFF), b(hex & 0xFF) {}\n  FMT_CONSTEXPR rgb(color hex)\n      : r((uint32_t(hex) >> 16) & 0xFF),\n        g((uint32_t(hex) >> 8) & 0xFF),\n        b(uint32_t(hex) & 0xFF) {}\n  uint8_t r;\n  uint8_t g;\n  uint8_t b;\n};\n\nFMT_BEGIN_DETAIL_NAMESPACE\n\n// color is a struct of either a rgb color or a terminal color.\nstruct color_type {\n  FMT_CONSTEXPR color_type() noexcept : is_rgb(), value{} {}\n  FMT_CONSTEXPR color_type(color rgb_color) noexcept : is_rgb(true), value{} {\n    value.rgb_color = static_cast<uint32_t>(rgb_color);\n  }\n  FMT_CONSTEXPR color_type(rgb rgb_color) noexcept : is_rgb(true), value{} {\n    value.rgb_color = (static_cast<uint32_t>(rgb_color.r) << 16) |\n                      (static_cast<uint32_t>(rgb_color.g) << 8) | rgb_color.b;\n  }\n  FMT_CONSTEXPR color_type(terminal_color term_color) noexcept\n      : is_rgb(), value{} {\n    value.term_color = static_cast<uint8_t>(term_color);\n  }\n  bool is_rgb;\n  union color_union {\n    uint8_t term_color;\n    uint32_t rgb_color;\n  } value;\n};\n\nFMT_END_DETAIL_NAMESPACE\n\n/** A text style consisting of foreground and background colors and emphasis. */\nclass text_style {\n public:\n  FMT_CONSTEXPR text_style(emphasis em = emphasis()) noexcept\n      : set_foreground_color(), set_background_color(), ems(em) {}\n\n  FMT_CONSTEXPR text_style& operator|=(const text_style& rhs) {\n    if (!set_foreground_color) {\n      set_foreground_color = rhs.set_foreground_color;\n      foreground_color = rhs.foreground_color;\n    } else if (rhs.set_foreground_color) {\n      if (!foreground_color.is_rgb || !rhs.foreground_color.is_rgb)\n        FMT_THROW(format_error(\"can't OR a terminal color\"));\n      foreground_color.value.rgb_color |= rhs.foreground_color.value.rgb_color;\n    }\n\n    if (!set_background_color) {\n      set_background_color = rhs.set_background_color;\n      background_color = rhs.background_color;\n    } else if (rhs.set_background_color) {\n      if (!background_color.is_rgb || !rhs.background_color.is_rgb)\n        FMT_THROW(format_error(\"can't OR a terminal color\"));\n      background_color.value.rgb_color |= rhs.background_color.value.rgb_color;\n    }\n\n    ems = static_cast<emphasis>(static_cast<uint8_t>(ems) |\n                                static_cast<uint8_t>(rhs.ems));\n    return *this;\n  }\n\n  friend FMT_CONSTEXPR text_style operator|(text_style lhs,\n                                            const text_style& rhs) {\n    return lhs |= rhs;\n  }\n\n  FMT_CONSTEXPR bool has_foreground() const noexcept {\n    return set_foreground_color;\n  }\n  FMT_CONSTEXPR bool has_background() const noexcept {\n    return set_background_color;\n  }\n  FMT_CONSTEXPR bool has_emphasis() const noexcept {\n    return static_cast<uint8_t>(ems) != 0;\n  }\n  FMT_CONSTEXPR detail::color_type get_foreground() const noexcept {\n    FMT_ASSERT(has_foreground(), \"no foreground specified for this style\");\n    return foreground_color;\n  }\n  FMT_CONSTEXPR detail::color_type get_background() const noexcept {\n    FMT_ASSERT(has_background(), \"no background specified for this style\");\n    return background_color;\n  }\n  FMT_CONSTEXPR emphasis get_emphasis() const noexcept {\n    FMT_ASSERT(has_emphasis(), \"no emphasis specified for this style\");\n    return ems;\n  }\n\n private:\n  FMT_CONSTEXPR text_style(bool is_foreground,\n                           detail::color_type text_color) noexcept\n      : set_foreground_color(), set_background_color(), ems() {\n    if (is_foreground) {\n      foreground_color = text_color;\n      set_foreground_color = true;\n    } else {\n      background_color = text_color;\n      set_background_color = true;\n    }\n  }\n\n  friend FMT_CONSTEXPR text_style fg(detail::color_type foreground) noexcept;\n\n  friend FMT_CONSTEXPR text_style bg(detail::color_type background) noexcept;\n\n  detail::color_type foreground_color;\n  detail::color_type background_color;\n  bool set_foreground_color;\n  bool set_background_color;\n  emphasis ems;\n};\n\n/** Creates a text style from the foreground (text) color. */\nFMT_CONSTEXPR inline text_style fg(detail::color_type foreground) noexcept {\n  return text_style(true, foreground);\n}\n\n/** Creates a text style from the background color. */\nFMT_CONSTEXPR inline text_style bg(detail::color_type background) noexcept {\n  return text_style(false, background);\n}\n\nFMT_CONSTEXPR inline text_style operator|(emphasis lhs, emphasis rhs) noexcept {\n  return text_style(lhs) | rhs;\n}\n\nFMT_BEGIN_DETAIL_NAMESPACE\n\ntemplate <typename Char> struct ansi_color_escape {\n  FMT_CONSTEXPR ansi_color_escape(detail::color_type text_color,\n                                  const char* esc) noexcept {\n    // If we have a terminal color, we need to output another escape code\n    // sequence.\n    if (!text_color.is_rgb) {\n      bool is_background = esc == string_view(\"\\x1b[48;2;\");\n      uint32_t value = text_color.value.term_color;\n      // Background ASCII codes are the same as the foreground ones but with\n      // 10 more.\n      if (is_background) value += 10u;\n\n      size_t index = 0;\n      buffer[index++] = static_cast<Char>('\\x1b');\n      buffer[index++] = static_cast<Char>('[');\n\n      if (value >= 100u) {\n        buffer[index++] = static_cast<Char>('1');\n        value %= 100u;\n      }\n      buffer[index++] = static_cast<Char>('0' + value / 10u);\n      buffer[index++] = static_cast<Char>('0' + value % 10u);\n\n      buffer[index++] = static_cast<Char>('m');\n      buffer[index++] = static_cast<Char>('\\0');\n      return;\n    }\n\n    for (int i = 0; i < 7; i++) {\n      buffer[i] = static_cast<Char>(esc[i]);\n    }\n    rgb color(text_color.value.rgb_color);\n    to_esc(color.r, buffer + 7, ';');\n    to_esc(color.g, buffer + 11, ';');\n    to_esc(color.b, buffer + 15, 'm');\n    buffer[19] = static_cast<Char>(0);\n  }\n  FMT_CONSTEXPR ansi_color_escape(emphasis em) noexcept {\n    uint8_t em_codes[num_emphases] = {};\n    if (has_emphasis(em, emphasis::bold)) em_codes[0] = 1;\n    if (has_emphasis(em, emphasis::faint)) em_codes[1] = 2;\n    if (has_emphasis(em, emphasis::italic)) em_codes[2] = 3;\n    if (has_emphasis(em, emphasis::underline)) em_codes[3] = 4;\n    if (has_emphasis(em, emphasis::blink)) em_codes[4] = 5;\n    if (has_emphasis(em, emphasis::reverse)) em_codes[5] = 7;\n    if (has_emphasis(em, emphasis::conceal)) em_codes[6] = 8;\n    if (has_emphasis(em, emphasis::strikethrough)) em_codes[7] = 9;\n\n    size_t index = 0;\n    for (size_t i = 0; i < num_emphases; ++i) {\n      if (!em_codes[i]) continue;\n      buffer[index++] = static_cast<Char>('\\x1b');\n      buffer[index++] = static_cast<Char>('[');\n      buffer[index++] = static_cast<Char>('0' + em_codes[i]);\n      buffer[index++] = static_cast<Char>('m');\n    }\n    buffer[index++] = static_cast<Char>(0);\n  }\n  FMT_CONSTEXPR operator const Char*() const noexcept { return buffer; }\n\n  FMT_CONSTEXPR const Char* begin() const noexcept { return buffer; }\n  FMT_CONSTEXPR_CHAR_TRAITS const Char* end() const noexcept {\n    return buffer + std::char_traits<Char>::length(buffer);\n  }\n\n private:\n  static constexpr size_t num_emphases = 8;\n  Char buffer[7u + 3u * num_emphases + 1u];\n\n  static FMT_CONSTEXPR void to_esc(uint8_t c, Char* out,\n                                   char delimiter) noexcept {\n    out[0] = static_cast<Char>('0' + c / 100);\n    out[1] = static_cast<Char>('0' + c / 10 % 10);\n    out[2] = static_cast<Char>('0' + c % 10);\n    out[3] = static_cast<Char>(delimiter);\n  }\n  static FMT_CONSTEXPR bool has_emphasis(emphasis em, emphasis mask) noexcept {\n    return static_cast<uint8_t>(em) & static_cast<uint8_t>(mask);\n  }\n};\n\ntemplate <typename Char>\nFMT_CONSTEXPR ansi_color_escape<Char> make_foreground_color(\n    detail::color_type foreground) noexcept {\n  return ansi_color_escape<Char>(foreground, \"\\x1b[38;2;\");\n}\n\ntemplate <typename Char>\nFMT_CONSTEXPR ansi_color_escape<Char> make_background_color(\n    detail::color_type background) noexcept {\n  return ansi_color_escape<Char>(background, \"\\x1b[48;2;\");\n}\n\ntemplate <typename Char>\nFMT_CONSTEXPR ansi_color_escape<Char> make_emphasis(emphasis em) noexcept {\n  return ansi_color_escape<Char>(em);\n}\n\ntemplate <typename Char> inline void fputs(const Char* chars, FILE* stream) {\n  int result = std::fputs(chars, stream);\n  if (result < 0)\n    FMT_THROW(system_error(errno, FMT_STRING(\"cannot write to file\")));\n}\n\ntemplate <> inline void fputs<wchar_t>(const wchar_t* chars, FILE* stream) {\n  int result = std::fputws(chars, stream);\n  if (result < 0)\n    FMT_THROW(system_error(errno, FMT_STRING(\"cannot write to file\")));\n}\n\ntemplate <typename Char> inline void reset_color(FILE* stream) {\n  fputs(\"\\x1b[0m\", stream);\n}\n\ntemplate <> inline void reset_color<wchar_t>(FILE* stream) {\n  fputs(L\"\\x1b[0m\", stream);\n}\n\ntemplate <typename Char> inline void reset_color(buffer<Char>& buffer) {\n  auto reset_color = string_view(\"\\x1b[0m\");\n  buffer.append(reset_color.begin(), reset_color.end());\n}\n\ntemplate <typename T> struct styled_arg {\n  const T& value;\n  text_style style;\n};\n\ntemplate <typename Char>\nvoid vformat_to(buffer<Char>& buf, const text_style& ts,\n                basic_string_view<Char> format_str,\n                basic_format_args<buffer_context<type_identity_t<Char>>> args) {\n  bool has_style = false;\n  if (ts.has_emphasis()) {\n    has_style = true;\n    auto emphasis = detail::make_emphasis<Char>(ts.get_emphasis());\n    buf.append(emphasis.begin(), emphasis.end());\n  }\n  if (ts.has_foreground()) {\n    has_style = true;\n    auto foreground = detail::make_foreground_color<Char>(ts.get_foreground());\n    buf.append(foreground.begin(), foreground.end());\n  }\n  if (ts.has_background()) {\n    has_style = true;\n    auto background = detail::make_background_color<Char>(ts.get_background());\n    buf.append(background.begin(), background.end());\n  }\n  detail::vformat_to(buf, format_str, args, {});\n  if (has_style) detail::reset_color<Char>(buf);\n}\n\nFMT_END_DETAIL_NAMESPACE\n\ntemplate <typename S, typename Char = char_t<S>>\nvoid vprint(std::FILE* f, const text_style& ts, const S& format,\n            basic_format_args<buffer_context<type_identity_t<Char>>> args) {\n  basic_memory_buffer<Char> buf;\n  detail::vformat_to(buf, ts, detail::to_string_view(format), args);\n  if (detail::is_utf8()) {\n    detail::print(f, basic_string_view<Char>(buf.begin(), buf.size()));\n  } else {\n    buf.push_back(Char(0));\n    detail::fputs(buf.data(), f);\n  }\n}\n\n/**\n  \\rst\n  Formats a string and prints it to the specified file stream using ANSI\n  escape sequences to specify text formatting.\n\n  **Example**::\n\n    fmt::print(fmt::emphasis::bold | fg(fmt::color::red),\n               \"Elapsed time: {0:.2f} seconds\", 1.23);\n  \\endrst\n */\ntemplate <typename S, typename... Args,\n          FMT_ENABLE_IF(detail::is_string<S>::value)>\nvoid print(std::FILE* f, const text_style& ts, const S& format_str,\n           const Args&... args) {\n  vprint(f, ts, format_str,\n         fmt::make_format_args<buffer_context<char_t<S>>>(args...));\n}\n\n/**\n  \\rst\n  Formats a string and prints it to stdout using ANSI escape sequences to\n  specify text formatting.\n\n  **Example**::\n\n    fmt::print(fmt::emphasis::bold | fg(fmt::color::red),\n               \"Elapsed time: {0:.2f} seconds\", 1.23);\n  \\endrst\n */\ntemplate <typename S, typename... Args,\n          FMT_ENABLE_IF(detail::is_string<S>::value)>\nvoid print(const text_style& ts, const S& format_str, const Args&... args) {\n  return print(stdout, ts, format_str, args...);\n}\n\ntemplate <typename S, typename Char = char_t<S>>\ninline std::basic_string<Char> vformat(\n    const text_style& ts, const S& format_str,\n    basic_format_args<buffer_context<type_identity_t<Char>>> args) {\n  basic_memory_buffer<Char> buf;\n  detail::vformat_to(buf, ts, detail::to_string_view(format_str), args);\n  return fmt::to_string(buf);\n}\n\n/**\n  \\rst\n  Formats arguments and returns the result as a string using ANSI\n  escape sequences to specify text formatting.\n\n  **Example**::\n\n    #include <fmt/color.h>\n    std::string message = fmt::format(fmt::emphasis::bold | fg(fmt::color::red),\n                                      \"The answer is {}\", 42);\n  \\endrst\n*/\ntemplate <typename S, typename... Args, typename Char = char_t<S>>\ninline std::basic_string<Char> format(const text_style& ts, const S& format_str,\n                                      const Args&... args) {\n  return fmt::vformat(ts, detail::to_string_view(format_str),\n                      fmt::make_format_args<buffer_context<Char>>(args...));\n}\n\n/**\n  Formats a string with the given text_style and writes the output to ``out``.\n */\ntemplate <typename OutputIt, typename Char,\n          FMT_ENABLE_IF(detail::is_output_iterator<OutputIt, Char>::value)>\nOutputIt vformat_to(\n    OutputIt out, const text_style& ts, basic_string_view<Char> format_str,\n    basic_format_args<buffer_context<type_identity_t<Char>>> args) {\n  auto&& buf = detail::get_buffer<Char>(out);\n  detail::vformat_to(buf, ts, format_str, args);\n  return detail::get_iterator(buf);\n}\n\n/**\n  \\rst\n  Formats arguments with the given text_style, writes the result to the output\n  iterator ``out`` and returns the iterator past the end of the output range.\n\n  **Example**::\n\n    std::vector<char> out;\n    fmt::format_to(std::back_inserter(out),\n                   fmt::emphasis::bold | fg(fmt::color::red), \"{}\", 42);\n  \\endrst\n*/\ntemplate <typename OutputIt, typename S, typename... Args,\n          bool enable = detail::is_output_iterator<OutputIt, char_t<S>>::value&&\n              detail::is_string<S>::value>\ninline auto format_to(OutputIt out, const text_style& ts, const S& format_str,\n                      Args&&... args) ->\n    typename std::enable_if<enable, OutputIt>::type {\n  return vformat_to(out, ts, detail::to_string_view(format_str),\n                    fmt::make_format_args<buffer_context<char_t<S>>>(args...));\n}\n\ntemplate <typename T, typename Char>\nstruct formatter<detail::styled_arg<T>, Char> : formatter<T, Char> {\n  template <typename FormatContext>\n  auto format(const detail::styled_arg<T>& arg, FormatContext& ctx) const\n      -> decltype(ctx.out()) {\n    const auto& ts = arg.style;\n    const auto& value = arg.value;\n    auto out = ctx.out();\n\n    bool has_style = false;\n    if (ts.has_emphasis()) {\n      has_style = true;\n      auto emphasis = detail::make_emphasis<Char>(ts.get_emphasis());\n      out = std::copy(emphasis.begin(), emphasis.end(), out);\n    }\n    if (ts.has_foreground()) {\n      has_style = true;\n      auto foreground =\n          detail::make_foreground_color<Char>(ts.get_foreground());\n      out = std::copy(foreground.begin(), foreground.end(), out);\n    }\n    if (ts.has_background()) {\n      has_style = true;\n      auto background =\n          detail::make_background_color<Char>(ts.get_background());\n      out = std::copy(background.begin(), background.end(), out);\n    }\n    out = formatter<T, Char>::format(value, ctx);\n    if (has_style) {\n      auto reset_color = string_view(\"\\x1b[0m\");\n      out = std::copy(reset_color.begin(), reset_color.end(), out);\n    }\n    return out;\n  }\n};\n\n/**\n  \\rst\n  Returns an argument that will be formatted using ANSI escape sequences,\n  to be used in a formatting function.\n\n  **Example**::\n\n    fmt::print(\"Elapsed time: {0:.2f} seconds\",\n               fmt::styled(1.23, fmt::fg(fmt::color::green) |\n                                 fmt::bg(fmt::color::blue)));\n  \\endrst\n */\ntemplate <typename T>\nFMT_CONSTEXPR auto styled(const T& value, text_style ts)\n    -> detail::styled_arg<remove_cvref_t<T>> {\n  return detail::styled_arg<remove_cvref_t<T>>{value, ts};\n}\n\nFMT_MODULE_EXPORT_END\nFMT_END_NAMESPACE\n\n#endif  // FMT_COLOR_H_\n"
  },
  {
    "path": "native/iosTest/Pods/fmt/include/fmt/compile.h",
    "content": "// Formatting library for C++ - experimental format string compilation\n//\n// Copyright (c) 2012 - present, Victor Zverovich and fmt contributors\n// All rights reserved.\n//\n// For the license information refer to format.h.\n\n#ifndef FMT_COMPILE_H_\n#define FMT_COMPILE_H_\n\n#include \"format.h\"\n\nFMT_BEGIN_NAMESPACE\nnamespace detail {\n\ntemplate <typename Char, typename InputIt>\nFMT_CONSTEXPR inline counting_iterator copy_str(InputIt begin, InputIt end,\n                                                counting_iterator it) {\n  return it + (end - begin);\n}\n\ntemplate <typename OutputIt> class truncating_iterator_base {\n protected:\n  OutputIt out_;\n  size_t limit_;\n  size_t count_ = 0;\n\n  truncating_iterator_base() : out_(), limit_(0) {}\n\n  truncating_iterator_base(OutputIt out, size_t limit)\n      : out_(out), limit_(limit) {}\n\n public:\n  using iterator_category = std::output_iterator_tag;\n  using value_type = typename std::iterator_traits<OutputIt>::value_type;\n  using difference_type = std::ptrdiff_t;\n  using pointer = void;\n  using reference = void;\n  FMT_UNCHECKED_ITERATOR(truncating_iterator_base);\n\n  OutputIt base() const { return out_; }\n  size_t count() const { return count_; }\n};\n\n// An output iterator that truncates the output and counts the number of objects\n// written to it.\ntemplate <typename OutputIt,\n          typename Enable = typename std::is_void<\n              typename std::iterator_traits<OutputIt>::value_type>::type>\nclass truncating_iterator;\n\ntemplate <typename OutputIt>\nclass truncating_iterator<OutputIt, std::false_type>\n    : public truncating_iterator_base<OutputIt> {\n  mutable typename truncating_iterator_base<OutputIt>::value_type blackhole_;\n\n public:\n  using value_type = typename truncating_iterator_base<OutputIt>::value_type;\n\n  truncating_iterator() = default;\n\n  truncating_iterator(OutputIt out, size_t limit)\n      : truncating_iterator_base<OutputIt>(out, limit) {}\n\n  truncating_iterator& operator++() {\n    if (this->count_++ < this->limit_) ++this->out_;\n    return *this;\n  }\n\n  truncating_iterator operator++(int) {\n    auto it = *this;\n    ++*this;\n    return it;\n  }\n\n  value_type& operator*() const {\n    return this->count_ < this->limit_ ? *this->out_ : blackhole_;\n  }\n};\n\ntemplate <typename OutputIt>\nclass truncating_iterator<OutputIt, std::true_type>\n    : public truncating_iterator_base<OutputIt> {\n public:\n  truncating_iterator() = default;\n\n  truncating_iterator(OutputIt out, size_t limit)\n      : truncating_iterator_base<OutputIt>(out, limit) {}\n\n  template <typename T> truncating_iterator& operator=(T val) {\n    if (this->count_++ < this->limit_) *this->out_++ = val;\n    return *this;\n  }\n\n  truncating_iterator& operator++() { return *this; }\n  truncating_iterator& operator++(int) { return *this; }\n  truncating_iterator& operator*() { return *this; }\n};\n\n// A compile-time string which is compiled into fast formatting code.\nclass compiled_string {};\n\ntemplate <typename S>\nstruct is_compiled_string : std::is_base_of<compiled_string, S> {};\n\n/**\n  \\rst\n  Converts a string literal *s* into a format string that will be parsed at\n  compile time and converted into efficient formatting code. Requires C++17\n  ``constexpr if`` compiler support.\n\n  **Example**::\n\n    // Converts 42 into std::string using the most efficient method and no\n    // runtime format string processing.\n    std::string s = fmt::format(FMT_COMPILE(\"{}\"), 42);\n  \\endrst\n */\n#if defined(__cpp_if_constexpr) && defined(__cpp_return_type_deduction)\n#  define FMT_COMPILE(s) \\\n    FMT_STRING_IMPL(s, fmt::detail::compiled_string, explicit)\n#else\n#  define FMT_COMPILE(s) FMT_STRING(s)\n#endif\n\n#if FMT_USE_NONTYPE_TEMPLATE_ARGS\ntemplate <typename Char, size_t N,\n          fmt::detail_exported::fixed_string<Char, N> Str>\nstruct udl_compiled_string : compiled_string {\n  using char_type = Char;\n  explicit constexpr operator basic_string_view<char_type>() const {\n    return {Str.data, N - 1};\n  }\n};\n#endif\n\ntemplate <typename T, typename... Tail>\nconst T& first(const T& value, const Tail&...) {\n  return value;\n}\n\n#if defined(__cpp_if_constexpr) && defined(__cpp_return_type_deduction)\ntemplate <typename... Args> struct type_list {};\n\n// Returns a reference to the argument at index N from [first, rest...].\ntemplate <int N, typename T, typename... Args>\nconstexpr const auto& get([[maybe_unused]] const T& first,\n                          [[maybe_unused]] const Args&... rest) {\n  static_assert(N < 1 + sizeof...(Args), \"index is out of bounds\");\n  if constexpr (N == 0)\n    return first;\n  else\n    return detail::get<N - 1>(rest...);\n}\n\ntemplate <typename Char, typename... Args>\nconstexpr int get_arg_index_by_name(basic_string_view<Char> name,\n                                    type_list<Args...>) {\n  return get_arg_index_by_name<Args...>(name);\n}\n\ntemplate <int N, typename> struct get_type_impl;\n\ntemplate <int N, typename... Args> struct get_type_impl<N, type_list<Args...>> {\n  using type =\n      remove_cvref_t<decltype(detail::get<N>(std::declval<Args>()...))>;\n};\n\ntemplate <int N, typename T>\nusing get_type = typename get_type_impl<N, T>::type;\n\ntemplate <typename T> struct is_compiled_format : std::false_type {};\n\ntemplate <typename Char> struct text {\n  basic_string_view<Char> data;\n  using char_type = Char;\n\n  template <typename OutputIt, typename... Args>\n  constexpr OutputIt format(OutputIt out, const Args&...) const {\n    return write<Char>(out, data);\n  }\n};\n\ntemplate <typename Char>\nstruct is_compiled_format<text<Char>> : std::true_type {};\n\ntemplate <typename Char>\nconstexpr text<Char> make_text(basic_string_view<Char> s, size_t pos,\n                               size_t size) {\n  return {{&s[pos], size}};\n}\n\ntemplate <typename Char> struct code_unit {\n  Char value;\n  using char_type = Char;\n\n  template <typename OutputIt, typename... Args>\n  constexpr OutputIt format(OutputIt out, const Args&...) const {\n    return write<Char>(out, value);\n  }\n};\n\n// This ensures that the argument type is convertible to `const T&`.\ntemplate <typename T, int N, typename... Args>\nconstexpr const T& get_arg_checked(const Args&... args) {\n  const auto& arg = detail::get<N>(args...);\n  if constexpr (detail::is_named_arg<remove_cvref_t<decltype(arg)>>()) {\n    return arg.value;\n  } else {\n    return arg;\n  }\n}\n\ntemplate <typename Char>\nstruct is_compiled_format<code_unit<Char>> : std::true_type {};\n\n// A replacement field that refers to argument N.\ntemplate <typename Char, typename T, int N> struct field {\n  using char_type = Char;\n\n  template <typename OutputIt, typename... Args>\n  constexpr OutputIt format(OutputIt out, const Args&... args) const {\n    return write<Char>(out, get_arg_checked<T, N>(args...));\n  }\n};\n\ntemplate <typename Char, typename T, int N>\nstruct is_compiled_format<field<Char, T, N>> : std::true_type {};\n\n// A replacement field that refers to argument with name.\ntemplate <typename Char> struct runtime_named_field {\n  using char_type = Char;\n  basic_string_view<Char> name;\n\n  template <typename OutputIt, typename T>\n  constexpr static bool try_format_argument(\n      OutputIt& out,\n      // [[maybe_unused]] due to unused-but-set-parameter warning in GCC 7,8,9\n      [[maybe_unused]] basic_string_view<Char> arg_name, const T& arg) {\n    if constexpr (is_named_arg<typename std::remove_cv<T>::type>::value) {\n      if (arg_name == arg.name) {\n        out = write<Char>(out, arg.value);\n        return true;\n      }\n    }\n    return false;\n  }\n\n  template <typename OutputIt, typename... Args>\n  constexpr OutputIt format(OutputIt out, const Args&... args) const {\n    bool found = (try_format_argument(out, name, args) || ...);\n    if (!found) {\n      FMT_THROW(format_error(\"argument with specified name is not found\"));\n    }\n    return out;\n  }\n};\n\ntemplate <typename Char>\nstruct is_compiled_format<runtime_named_field<Char>> : std::true_type {};\n\n// A replacement field that refers to argument N and has format specifiers.\ntemplate <typename Char, typename T, int N> struct spec_field {\n  using char_type = Char;\n  formatter<T, Char> fmt;\n\n  template <typename OutputIt, typename... Args>\n  constexpr FMT_INLINE OutputIt format(OutputIt out,\n                                       const Args&... args) const {\n    const auto& vargs =\n        fmt::make_format_args<basic_format_context<OutputIt, Char>>(args...);\n    basic_format_context<OutputIt, Char> ctx(out, vargs);\n    return fmt.format(get_arg_checked<T, N>(args...), ctx);\n  }\n};\n\ntemplate <typename Char, typename T, int N>\nstruct is_compiled_format<spec_field<Char, T, N>> : std::true_type {};\n\ntemplate <typename L, typename R> struct concat {\n  L lhs;\n  R rhs;\n  using char_type = typename L::char_type;\n\n  template <typename OutputIt, typename... Args>\n  constexpr OutputIt format(OutputIt out, const Args&... args) const {\n    out = lhs.format(out, args...);\n    return rhs.format(out, args...);\n  }\n};\n\ntemplate <typename L, typename R>\nstruct is_compiled_format<concat<L, R>> : std::true_type {};\n\ntemplate <typename L, typename R>\nconstexpr concat<L, R> make_concat(L lhs, R rhs) {\n  return {lhs, rhs};\n}\n\nstruct unknown_format {};\n\ntemplate <typename Char>\nconstexpr size_t parse_text(basic_string_view<Char> str, size_t pos) {\n  for (size_t size = str.size(); pos != size; ++pos) {\n    if (str[pos] == '{' || str[pos] == '}') break;\n  }\n  return pos;\n}\n\ntemplate <typename Args, size_t POS, int ID, typename S>\nconstexpr auto compile_format_string(S format_str);\n\ntemplate <typename Args, size_t POS, int ID, typename T, typename S>\nconstexpr auto parse_tail(T head, S format_str) {\n  if constexpr (POS !=\n                basic_string_view<typename S::char_type>(format_str).size()) {\n    constexpr auto tail = compile_format_string<Args, POS, ID>(format_str);\n    if constexpr (std::is_same<remove_cvref_t<decltype(tail)>,\n                               unknown_format>())\n      return tail;\n    else\n      return make_concat(head, tail);\n  } else {\n    return head;\n  }\n}\n\ntemplate <typename T, typename Char> struct parse_specs_result {\n  formatter<T, Char> fmt;\n  size_t end;\n  int next_arg_id;\n};\n\nconstexpr int manual_indexing_id = -1;\n\ntemplate <typename T, typename Char>\nconstexpr parse_specs_result<T, Char> parse_specs(basic_string_view<Char> str,\n                                                  size_t pos, int next_arg_id) {\n  str.remove_prefix(pos);\n  auto ctx = compile_parse_context<Char>(str, max_value<int>(), nullptr, {},\n                                         next_arg_id);\n  auto f = formatter<T, Char>();\n  auto end = f.parse(ctx);\n  return {f, pos + fmt::detail::to_unsigned(end - str.data()),\n          next_arg_id == 0 ? manual_indexing_id : ctx.next_arg_id()};\n}\n\ntemplate <typename Char> struct arg_id_handler {\n  arg_ref<Char> arg_id;\n\n  constexpr int operator()() {\n    FMT_ASSERT(false, \"handler cannot be used with automatic indexing\");\n    return 0;\n  }\n  constexpr int operator()(int id) {\n    arg_id = arg_ref<Char>(id);\n    return 0;\n  }\n  constexpr int operator()(basic_string_view<Char> id) {\n    arg_id = arg_ref<Char>(id);\n    return 0;\n  }\n\n  constexpr void on_error(const char* message) {\n    FMT_THROW(format_error(message));\n  }\n};\n\ntemplate <typename Char> struct parse_arg_id_result {\n  arg_ref<Char> arg_id;\n  const Char* arg_id_end;\n};\n\ntemplate <int ID, typename Char>\nconstexpr auto parse_arg_id(const Char* begin, const Char* end) {\n  auto handler = arg_id_handler<Char>{arg_ref<Char>{}};\n  auto arg_id_end = parse_arg_id(begin, end, handler);\n  return parse_arg_id_result<Char>{handler.arg_id, arg_id_end};\n}\n\ntemplate <typename T, typename Enable = void> struct field_type {\n  using type = remove_cvref_t<T>;\n};\n\ntemplate <typename T>\nstruct field_type<T, enable_if_t<detail::is_named_arg<T>::value>> {\n  using type = remove_cvref_t<decltype(T::value)>;\n};\n\ntemplate <typename T, typename Args, size_t END_POS, int ARG_INDEX, int NEXT_ID,\n          typename S>\nconstexpr auto parse_replacement_field_then_tail(S format_str) {\n  using char_type = typename S::char_type;\n  constexpr auto str = basic_string_view<char_type>(format_str);\n  constexpr char_type c = END_POS != str.size() ? str[END_POS] : char_type();\n  if constexpr (c == '}') {\n    return parse_tail<Args, END_POS + 1, NEXT_ID>(\n        field<char_type, typename field_type<T>::type, ARG_INDEX>(),\n        format_str);\n  } else if constexpr (c != ':') {\n    FMT_THROW(format_error(\"expected ':'\"));\n  } else {\n    constexpr auto result = parse_specs<typename field_type<T>::type>(\n        str, END_POS + 1, NEXT_ID == manual_indexing_id ? 0 : NEXT_ID);\n    if constexpr (result.end >= str.size() || str[result.end] != '}') {\n      FMT_THROW(format_error(\"expected '}'\"));\n      return 0;\n    } else {\n      return parse_tail<Args, result.end + 1, result.next_arg_id>(\n          spec_field<char_type, typename field_type<T>::type, ARG_INDEX>{\n              result.fmt},\n          format_str);\n    }\n  }\n}\n\n// Compiles a non-empty format string and returns the compiled representation\n// or unknown_format() on unrecognized input.\ntemplate <typename Args, size_t POS, int ID, typename S>\nconstexpr auto compile_format_string(S format_str) {\n  using char_type = typename S::char_type;\n  constexpr auto str = basic_string_view<char_type>(format_str);\n  if constexpr (str[POS] == '{') {\n    if constexpr (POS + 1 == str.size())\n      FMT_THROW(format_error(\"unmatched '{' in format string\"));\n    if constexpr (str[POS + 1] == '{') {\n      return parse_tail<Args, POS + 2, ID>(make_text(str, POS, 1), format_str);\n    } else if constexpr (str[POS + 1] == '}' || str[POS + 1] == ':') {\n      static_assert(ID != manual_indexing_id,\n                    \"cannot switch from manual to automatic argument indexing\");\n      constexpr auto next_id =\n          ID != manual_indexing_id ? ID + 1 : manual_indexing_id;\n      return parse_replacement_field_then_tail<get_type<ID, Args>, Args,\n                                               POS + 1, ID, next_id>(\n          format_str);\n    } else {\n      constexpr auto arg_id_result =\n          parse_arg_id<ID>(str.data() + POS + 1, str.data() + str.size());\n      constexpr auto arg_id_end_pos = arg_id_result.arg_id_end - str.data();\n      constexpr char_type c =\n          arg_id_end_pos != str.size() ? str[arg_id_end_pos] : char_type();\n      static_assert(c == '}' || c == ':', \"missing '}' in format string\");\n      if constexpr (arg_id_result.arg_id.kind == arg_id_kind::index) {\n        static_assert(\n            ID == manual_indexing_id || ID == 0,\n            \"cannot switch from automatic to manual argument indexing\");\n        constexpr auto arg_index = arg_id_result.arg_id.val.index;\n        return parse_replacement_field_then_tail<get_type<arg_index, Args>,\n                                                 Args, arg_id_end_pos,\n                                                 arg_index, manual_indexing_id>(\n            format_str);\n      } else if constexpr (arg_id_result.arg_id.kind == arg_id_kind::name) {\n        constexpr auto arg_index =\n            get_arg_index_by_name(arg_id_result.arg_id.val.name, Args{});\n        if constexpr (arg_index != invalid_arg_index) {\n          constexpr auto next_id =\n              ID != manual_indexing_id ? ID + 1 : manual_indexing_id;\n          return parse_replacement_field_then_tail<\n              decltype(get_type<arg_index, Args>::value), Args, arg_id_end_pos,\n              arg_index, next_id>(format_str);\n        } else {\n          if constexpr (c == '}') {\n            return parse_tail<Args, arg_id_end_pos + 1, ID>(\n                runtime_named_field<char_type>{arg_id_result.arg_id.val.name},\n                format_str);\n          } else if constexpr (c == ':') {\n            return unknown_format();  // no type info for specs parsing\n          }\n        }\n      }\n    }\n  } else if constexpr (str[POS] == '}') {\n    if constexpr (POS + 1 == str.size())\n      FMT_THROW(format_error(\"unmatched '}' in format string\"));\n    return parse_tail<Args, POS + 2, ID>(make_text(str, POS, 1), format_str);\n  } else {\n    constexpr auto end = parse_text(str, POS + 1);\n    if constexpr (end - POS > 1) {\n      return parse_tail<Args, end, ID>(make_text(str, POS, end - POS),\n                                       format_str);\n    } else {\n      return parse_tail<Args, end, ID>(code_unit<char_type>{str[POS]},\n                                       format_str);\n    }\n  }\n}\n\ntemplate <typename... Args, typename S,\n          FMT_ENABLE_IF(detail::is_compiled_string<S>::value)>\nconstexpr auto compile(S format_str) {\n  constexpr auto str = basic_string_view<typename S::char_type>(format_str);\n  if constexpr (str.size() == 0) {\n    return detail::make_text(str, 0, 0);\n  } else {\n    constexpr auto result =\n        detail::compile_format_string<detail::type_list<Args...>, 0, 0>(\n            format_str);\n    return result;\n  }\n}\n#endif  // defined(__cpp_if_constexpr) && defined(__cpp_return_type_deduction)\n}  // namespace detail\n\nFMT_MODULE_EXPORT_BEGIN\n\n#if defined(__cpp_if_constexpr) && defined(__cpp_return_type_deduction)\n\ntemplate <typename CompiledFormat, typename... Args,\n          typename Char = typename CompiledFormat::char_type,\n          FMT_ENABLE_IF(detail::is_compiled_format<CompiledFormat>::value)>\nFMT_INLINE std::basic_string<Char> format(const CompiledFormat& cf,\n                                          const Args&... args) {\n  auto s = std::basic_string<Char>();\n  cf.format(std::back_inserter(s), args...);\n  return s;\n}\n\ntemplate <typename OutputIt, typename CompiledFormat, typename... Args,\n          FMT_ENABLE_IF(detail::is_compiled_format<CompiledFormat>::value)>\nconstexpr FMT_INLINE OutputIt format_to(OutputIt out, const CompiledFormat& cf,\n                                        const Args&... args) {\n  return cf.format(out, args...);\n}\n\ntemplate <typename S, typename... Args,\n          FMT_ENABLE_IF(detail::is_compiled_string<S>::value)>\nFMT_INLINE std::basic_string<typename S::char_type> format(const S&,\n                                                           Args&&... args) {\n  if constexpr (std::is_same<typename S::char_type, char>::value) {\n    constexpr auto str = basic_string_view<typename S::char_type>(S());\n    if constexpr (str.size() == 2 && str[0] == '{' && str[1] == '}') {\n      const auto& first = detail::first(args...);\n      if constexpr (detail::is_named_arg<\n                        remove_cvref_t<decltype(first)>>::value) {\n        return fmt::to_string(first.value);\n      } else {\n        return fmt::to_string(first);\n      }\n    }\n  }\n  constexpr auto compiled = detail::compile<Args...>(S());\n  if constexpr (std::is_same<remove_cvref_t<decltype(compiled)>,\n                             detail::unknown_format>()) {\n    return fmt::format(\n        static_cast<basic_string_view<typename S::char_type>>(S()),\n        std::forward<Args>(args)...);\n  } else {\n    return fmt::format(compiled, std::forward<Args>(args)...);\n  }\n}\n\ntemplate <typename OutputIt, typename S, typename... Args,\n          FMT_ENABLE_IF(detail::is_compiled_string<S>::value)>\nFMT_CONSTEXPR OutputIt format_to(OutputIt out, const S&, Args&&... args) {\n  constexpr auto compiled = detail::compile<Args...>(S());\n  if constexpr (std::is_same<remove_cvref_t<decltype(compiled)>,\n                             detail::unknown_format>()) {\n    return fmt::format_to(\n        out, static_cast<basic_string_view<typename S::char_type>>(S()),\n        std::forward<Args>(args)...);\n  } else {\n    return fmt::format_to(out, compiled, std::forward<Args>(args)...);\n  }\n}\n#endif\n\ntemplate <typename OutputIt, typename S, typename... Args,\n          FMT_ENABLE_IF(detail::is_compiled_string<S>::value)>\nformat_to_n_result<OutputIt> format_to_n(OutputIt out, size_t n,\n                                         const S& format_str, Args&&... args) {\n  auto it = fmt::format_to(detail::truncating_iterator<OutputIt>(out, n),\n                           format_str, std::forward<Args>(args)...);\n  return {it.base(), it.count()};\n}\n\ntemplate <typename S, typename... Args,\n          FMT_ENABLE_IF(detail::is_compiled_string<S>::value)>\nFMT_CONSTEXPR20 size_t formatted_size(const S& format_str,\n                                      const Args&... args) {\n  return fmt::format_to(detail::counting_iterator(), format_str, args...)\n      .count();\n}\n\ntemplate <typename S, typename... Args,\n          FMT_ENABLE_IF(detail::is_compiled_string<S>::value)>\nvoid print(std::FILE* f, const S& format_str, const Args&... args) {\n  memory_buffer buffer;\n  fmt::format_to(std::back_inserter(buffer), format_str, args...);\n  detail::print(f, {buffer.data(), buffer.size()});\n}\n\ntemplate <typename S, typename... Args,\n          FMT_ENABLE_IF(detail::is_compiled_string<S>::value)>\nvoid print(const S& format_str, const Args&... args) {\n  print(stdout, format_str, args...);\n}\n\n#if FMT_USE_NONTYPE_TEMPLATE_ARGS\ninline namespace literals {\ntemplate <detail_exported::fixed_string Str> constexpr auto operator\"\"_cf() {\n  using char_t = remove_cvref_t<decltype(Str.data[0])>;\n  return detail::udl_compiled_string<char_t, sizeof(Str.data) / sizeof(char_t),\n                                     Str>();\n}\n}  // namespace literals\n#endif\n\nFMT_MODULE_EXPORT_END\nFMT_END_NAMESPACE\n\n#endif  // FMT_COMPILE_H_\n"
  },
  {
    "path": "native/iosTest/Pods/fmt/include/fmt/core.h",
    "content": "// Formatting library for C++ - the core API for char/UTF-8\n//\n// Copyright (c) 2012 - present, Victor Zverovich\n// All rights reserved.\n//\n// For the license information refer to format.h.\n\n#ifndef FMT_CORE_H_\n#define FMT_CORE_H_\n\n#include <cstddef>  // std::byte\n#include <cstdio>   // std::FILE\n#include <cstring>  // std::strlen\n#include <iterator>\n#include <limits>\n#include <string>\n#include <type_traits>\n\n// The fmt library version in the form major * 10000 + minor * 100 + patch.\n#define FMT_VERSION 90100\n\n#if defined(__clang__) && !defined(__ibmxl__)\n#  define FMT_CLANG_VERSION (__clang_major__ * 100 + __clang_minor__)\n#else\n#  define FMT_CLANG_VERSION 0\n#endif\n\n#if defined(__GNUC__) && !defined(__clang__) && !defined(__INTEL_COMPILER) && \\\n    !defined(__NVCOMPILER)\n#  define FMT_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)\n#else\n#  define FMT_GCC_VERSION 0\n#endif\n\n#ifndef FMT_GCC_PRAGMA\n// Workaround _Pragma bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59884.\n#  if FMT_GCC_VERSION >= 504\n#    define FMT_GCC_PRAGMA(arg) _Pragma(arg)\n#  else\n#    define FMT_GCC_PRAGMA(arg)\n#  endif\n#endif\n\n#ifdef __ICL\n#  define FMT_ICC_VERSION __ICL\n#elif defined(__INTEL_COMPILER)\n#  define FMT_ICC_VERSION __INTEL_COMPILER\n#else\n#  define FMT_ICC_VERSION 0\n#endif\n\n#ifdef _MSC_VER\n#  define FMT_MSC_VERSION _MSC_VER\n#  define FMT_MSC_WARNING(...) __pragma(warning(__VA_ARGS__))\n#else\n#  define FMT_MSC_VERSION 0\n#  define FMT_MSC_WARNING(...)\n#endif\n\n#ifdef _MSVC_LANG\n#  define FMT_CPLUSPLUS _MSVC_LANG\n#else\n#  define FMT_CPLUSPLUS __cplusplus\n#endif\n\n#ifdef __has_feature\n#  define FMT_HAS_FEATURE(x) __has_feature(x)\n#else\n#  define FMT_HAS_FEATURE(x) 0\n#endif\n\n#if (defined(__has_include) || FMT_ICC_VERSION >= 1600 || \\\n     FMT_MSC_VERSION > 1900) &&                           \\\n    !defined(__INTELLISENSE__)\n#  define FMT_HAS_INCLUDE(x) __has_include(x)\n#else\n#  define FMT_HAS_INCLUDE(x) 0\n#endif\n\n#ifdef __has_cpp_attribute\n#  define FMT_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x)\n#else\n#  define FMT_HAS_CPP_ATTRIBUTE(x) 0\n#endif\n\n#define FMT_HAS_CPP14_ATTRIBUTE(attribute) \\\n  (FMT_CPLUSPLUS >= 201402L && FMT_HAS_CPP_ATTRIBUTE(attribute))\n\n#define FMT_HAS_CPP17_ATTRIBUTE(attribute) \\\n  (FMT_CPLUSPLUS >= 201703L && FMT_HAS_CPP_ATTRIBUTE(attribute))\n\n// Check if relaxed C++14 constexpr is supported.\n// GCC doesn't allow throw in constexpr until version 6 (bug 67371).\n#ifndef FMT_USE_CONSTEXPR\n#  if (FMT_HAS_FEATURE(cxx_relaxed_constexpr) || FMT_MSC_VERSION >= 1912 || \\\n       (FMT_GCC_VERSION >= 600 && FMT_CPLUSPLUS >= 201402L)) &&             \\\n      !FMT_ICC_VERSION && !defined(__NVCC__)\n#    define FMT_USE_CONSTEXPR 1\n#  else\n#    define FMT_USE_CONSTEXPR 0\n#  endif\n#endif\n#if FMT_USE_CONSTEXPR\n#  define FMT_CONSTEXPR constexpr\n#else\n#  define FMT_CONSTEXPR\n#endif\n\n#if ((FMT_CPLUSPLUS >= 202002L) &&                            \\\n     (!defined(_GLIBCXX_RELEASE) || _GLIBCXX_RELEASE > 9)) || \\\n    (FMT_CPLUSPLUS >= 201709L && FMT_GCC_VERSION >= 1002)\n#  define FMT_CONSTEXPR20 constexpr\n#else\n#  define FMT_CONSTEXPR20\n#endif\n\n// Check if constexpr std::char_traits<>::{compare,length} are supported.\n#if defined(__GLIBCXX__)\n#  if FMT_CPLUSPLUS >= 201703L && defined(_GLIBCXX_RELEASE) && \\\n      _GLIBCXX_RELEASE >= 7  // GCC 7+ libstdc++ has _GLIBCXX_RELEASE.\n#    define FMT_CONSTEXPR_CHAR_TRAITS constexpr\n#  endif\n#elif defined(_LIBCPP_VERSION) && FMT_CPLUSPLUS >= 201703L && \\\n    _LIBCPP_VERSION >= 4000\n#  define FMT_CONSTEXPR_CHAR_TRAITS constexpr\n#elif FMT_MSC_VERSION >= 1914 && FMT_CPLUSPLUS >= 201703L\n#  define FMT_CONSTEXPR_CHAR_TRAITS constexpr\n#endif\n#ifndef FMT_CONSTEXPR_CHAR_TRAITS\n#  define FMT_CONSTEXPR_CHAR_TRAITS\n#endif\n\n// Check if exceptions are disabled.\n#ifndef FMT_EXCEPTIONS\n#  if (defined(__GNUC__) && !defined(__EXCEPTIONS)) || \\\n      (FMT_MSC_VERSION && !_HAS_EXCEPTIONS)\n#    define FMT_EXCEPTIONS 0\n#  else\n#    define FMT_EXCEPTIONS 1\n#  endif\n#endif\n\n#ifndef FMT_DEPRECATED\n#  if FMT_HAS_CPP14_ATTRIBUTE(deprecated) || FMT_MSC_VERSION >= 1900\n#    define FMT_DEPRECATED [[deprecated]]\n#  else\n#    if (defined(__GNUC__) && !defined(__LCC__)) || defined(__clang__)\n#      define FMT_DEPRECATED __attribute__((deprecated))\n#    elif FMT_MSC_VERSION\n#      define FMT_DEPRECATED __declspec(deprecated)\n#    else\n#      define FMT_DEPRECATED /* deprecated */\n#    endif\n#  endif\n#endif\n\n// [[noreturn]] is disabled on MSVC and NVCC because of bogus unreachable code\n// warnings.\n#if FMT_EXCEPTIONS && FMT_HAS_CPP_ATTRIBUTE(noreturn) && !FMT_MSC_VERSION && \\\n    !defined(__NVCC__)\n#  define FMT_NORETURN [[noreturn]]\n#else\n#  define FMT_NORETURN\n#endif\n\n#if FMT_HAS_CPP17_ATTRIBUTE(fallthrough)\n#  define FMT_FALLTHROUGH [[fallthrough]]\n#elif defined(__clang__)\n#  define FMT_FALLTHROUGH [[clang::fallthrough]]\n#elif FMT_GCC_VERSION >= 700 && \\\n    (!defined(__EDG_VERSION__) || __EDG_VERSION__ >= 520)\n#  define FMT_FALLTHROUGH [[gnu::fallthrough]]\n#else\n#  define FMT_FALLTHROUGH\n#endif\n\n#ifndef FMT_NODISCARD\n#  if FMT_HAS_CPP17_ATTRIBUTE(nodiscard)\n#    define FMT_NODISCARD [[nodiscard]]\n#  else\n#    define FMT_NODISCARD\n#  endif\n#endif\n\n#ifndef FMT_USE_FLOAT\n#  define FMT_USE_FLOAT 1\n#endif\n#ifndef FMT_USE_DOUBLE\n#  define FMT_USE_DOUBLE 1\n#endif\n#ifndef FMT_USE_LONG_DOUBLE\n#  define FMT_USE_LONG_DOUBLE 1\n#endif\n\n#ifndef FMT_INLINE\n#  if FMT_GCC_VERSION || FMT_CLANG_VERSION\n#    define FMT_INLINE inline __attribute__((always_inline))\n#  else\n#    define FMT_INLINE inline\n#  endif\n#endif\n\n// An inline std::forward replacement.\n#define FMT_FORWARD(...) static_cast<decltype(__VA_ARGS__)&&>(__VA_ARGS__)\n\n#ifdef _MSC_VER\n#  define FMT_UNCHECKED_ITERATOR(It) \\\n    using _Unchecked_type = It  // Mark iterator as checked.\n#else\n#  define FMT_UNCHECKED_ITERATOR(It) using unchecked_type = It\n#endif\n\n#ifndef FMT_BEGIN_NAMESPACE\n#  define FMT_BEGIN_NAMESPACE \\\n    namespace fmt {           \\\n    inline namespace v9 {\n#  define FMT_END_NAMESPACE \\\n    }                       \\\n    }\n#endif\n\n#ifndef FMT_MODULE_EXPORT\n#  define FMT_MODULE_EXPORT\n#  define FMT_MODULE_EXPORT_BEGIN\n#  define FMT_MODULE_EXPORT_END\n#  define FMT_BEGIN_DETAIL_NAMESPACE namespace detail {\n#  define FMT_END_DETAIL_NAMESPACE }\n#endif\n\n#if !defined(FMT_HEADER_ONLY) && defined(_WIN32)\n#  define FMT_CLASS_API FMT_MSC_WARNING(suppress : 4275)\n#  ifdef FMT_EXPORT\n#    define FMT_API __declspec(dllexport)\n#  elif defined(FMT_SHARED)\n#    define FMT_API __declspec(dllimport)\n#  endif\n#else\n#  define FMT_CLASS_API\n#  if defined(FMT_EXPORT) || defined(FMT_SHARED)\n#    if defined(__GNUC__) || defined(__clang__)\n#      define FMT_API __attribute__((visibility(\"default\")))\n#    endif\n#  endif\n#endif\n#ifndef FMT_API\n#  define FMT_API\n#endif\n\n// libc++ supports string_view in pre-c++17.\n#if FMT_HAS_INCLUDE(<string_view>) && \\\n    (FMT_CPLUSPLUS >= 201703L || defined(_LIBCPP_VERSION))\n#  include <string_view>\n#  define FMT_USE_STRING_VIEW\n#elif FMT_HAS_INCLUDE(\"experimental/string_view\") && FMT_CPLUSPLUS >= 201402L\n#  include <experimental/string_view>\n#  define FMT_USE_EXPERIMENTAL_STRING_VIEW\n#endif\n\n#ifndef FMT_UNICODE\n#  define FMT_UNICODE !FMT_MSC_VERSION\n#endif\n\n#ifndef FMT_CONSTEVAL\n#  if ((FMT_GCC_VERSION >= 1000 || FMT_CLANG_VERSION >= 1101) &&         \\\n       FMT_CPLUSPLUS >= 202002L && !defined(__apple_build_version__)) || \\\n      (defined(__cpp_consteval) &&                                       \\\n       (!FMT_MSC_VERSION || _MSC_FULL_VER >= 193030704))\n// consteval is broken in MSVC before VS2022 and Apple clang 13.\n#    define FMT_CONSTEVAL consteval\n#    define FMT_HAS_CONSTEVAL\n#  else\n#    define FMT_CONSTEVAL\n#  endif\n#endif\n\n#ifndef FMT_USE_NONTYPE_TEMPLATE_ARGS\n#  if defined(__cpp_nontype_template_args) &&                  \\\n      ((FMT_GCC_VERSION >= 903 && FMT_CPLUSPLUS >= 201709L) || \\\n       __cpp_nontype_template_args >= 201911L) &&              \\\n      !defined(__NVCOMPILER)\n#    define FMT_USE_NONTYPE_TEMPLATE_ARGS 1\n#  else\n#    define FMT_USE_NONTYPE_TEMPLATE_ARGS 0\n#  endif\n#endif\n\n// Enable minimal optimizations for more compact code in debug mode.\nFMT_GCC_PRAGMA(\"GCC push_options\")\n#if !defined(__OPTIMIZE__) && !defined(__NVCOMPILER)\nFMT_GCC_PRAGMA(\"GCC optimize(\\\"Og\\\")\")\n#endif\n\nFMT_BEGIN_NAMESPACE\nFMT_MODULE_EXPORT_BEGIN\n\n// Implementations of enable_if_t and other metafunctions for older systems.\ntemplate <bool B, typename T = void>\nusing enable_if_t = typename std::enable_if<B, T>::type;\ntemplate <bool B, typename T, typename F>\nusing conditional_t = typename std::conditional<B, T, F>::type;\ntemplate <bool B> using bool_constant = std::integral_constant<bool, B>;\ntemplate <typename T>\nusing remove_reference_t = typename std::remove_reference<T>::type;\ntemplate <typename T>\nusing remove_const_t = typename std::remove_const<T>::type;\ntemplate <typename T>\nusing remove_cvref_t = typename std::remove_cv<remove_reference_t<T>>::type;\ntemplate <typename T> struct type_identity { using type = T; };\ntemplate <typename T> using type_identity_t = typename type_identity<T>::type;\ntemplate <typename T>\nusing underlying_t = typename std::underlying_type<T>::type;\n\ntemplate <typename...> struct disjunction : std::false_type {};\ntemplate <typename P> struct disjunction<P> : P {};\ntemplate <typename P1, typename... Pn>\nstruct disjunction<P1, Pn...>\n    : conditional_t<bool(P1::value), P1, disjunction<Pn...>> {};\n\ntemplate <typename...> struct conjunction : std::true_type {};\ntemplate <typename P> struct conjunction<P> : P {};\ntemplate <typename P1, typename... Pn>\nstruct conjunction<P1, Pn...>\n    : conditional_t<bool(P1::value), conjunction<Pn...>, P1> {};\n\nstruct monostate {\n  constexpr monostate() {}\n};\n\n// An enable_if helper to be used in template parameters which results in much\n// shorter symbols: https://godbolt.org/z/sWw4vP. Extra parentheses are needed\n// to workaround a bug in MSVC 2019 (see #1140 and #1186).\n#ifdef FMT_DOC\n#  define FMT_ENABLE_IF(...)\n#else\n#  define FMT_ENABLE_IF(...) enable_if_t<(__VA_ARGS__), int> = 0\n#endif\n\nFMT_BEGIN_DETAIL_NAMESPACE\n\n// Suppresses \"unused variable\" warnings with the method described in\n// https://herbsutter.com/2009/10/18/mailbag-shutting-up-compiler-warnings/.\n// (void)var does not work on many Intel compilers.\ntemplate <typename... T> FMT_CONSTEXPR void ignore_unused(const T&...) {}\n\nconstexpr FMT_INLINE auto is_constant_evaluated(\n    bool default_value = false) noexcept -> bool {\n#ifdef __cpp_lib_is_constant_evaluated\n  ignore_unused(default_value);\n  return std::is_constant_evaluated();\n#else\n  return default_value;\n#endif\n}\n\n// Suppresses \"conditional expression is constant\" warnings.\ntemplate <typename T> constexpr FMT_INLINE auto const_check(T value) -> T {\n  return value;\n}\n\nFMT_NORETURN FMT_API void assert_fail(const char* file, int line,\n                                      const char* message);\n\n#ifndef FMT_ASSERT\n#  ifdef NDEBUG\n// FMT_ASSERT is not empty to avoid -Wempty-body.\n#    define FMT_ASSERT(condition, message) \\\n      ::fmt::detail::ignore_unused((condition), (message))\n#  else\n#    define FMT_ASSERT(condition, message)                                    \\\n      ((condition) /* void() fails with -Winvalid-constexpr on clang 4.0.1 */ \\\n           ? (void)0                                                          \\\n           : ::fmt::detail::assert_fail(__FILE__, __LINE__, (message)))\n#  endif\n#endif\n\n#if defined(FMT_USE_STRING_VIEW)\ntemplate <typename Char> using std_string_view = std::basic_string_view<Char>;\n#elif defined(FMT_USE_EXPERIMENTAL_STRING_VIEW)\ntemplate <typename Char>\nusing std_string_view = std::experimental::basic_string_view<Char>;\n#else\ntemplate <typename T> struct std_string_view {};\n#endif\n\n#ifdef FMT_USE_INT128\n// Do nothing.\n#elif defined(__SIZEOF_INT128__) && !defined(__NVCC__) && \\\n    !(FMT_CLANG_VERSION && FMT_MSC_VERSION)\n#  define FMT_USE_INT128 1\nusing int128_opt = __int128_t;  // An optional native 128-bit integer.\nusing uint128_opt = __uint128_t;\ntemplate <typename T> inline auto convert_for_visit(T value) -> T {\n  return value;\n}\n#else\n#  define FMT_USE_INT128 0\n#endif\n#if !FMT_USE_INT128\nenum class int128_opt {};\nenum class uint128_opt {};\n// Reduce template instantiations.\ntemplate <typename T> auto convert_for_visit(T) -> monostate { return {}; }\n#endif\n\n// Casts a nonnegative integer to unsigned.\ntemplate <typename Int>\nFMT_CONSTEXPR auto to_unsigned(Int value) ->\n    typename std::make_unsigned<Int>::type {\n  FMT_ASSERT(std::is_unsigned<Int>::value || value >= 0, \"negative value\");\n  return static_cast<typename std::make_unsigned<Int>::type>(value);\n}\n\nFMT_MSC_WARNING(suppress : 4566) constexpr unsigned char micro[] = \"\\u00B5\";\n\nconstexpr auto is_utf8() -> bool {\n  // Avoid buggy sign extensions in MSVC's constant evaluation mode (#2297).\n  using uchar = unsigned char;\n  return FMT_UNICODE || (sizeof(micro) == 3 && uchar(micro[0]) == 0xC2 &&\n                         uchar(micro[1]) == 0xB5);\n}\nFMT_END_DETAIL_NAMESPACE\n\n/**\n  An implementation of ``std::basic_string_view`` for pre-C++17. It provides a\n  subset of the API. ``fmt::basic_string_view`` is used for format strings even\n  if ``std::string_view`` is available to prevent issues when a library is\n  compiled with a different ``-std`` option than the client code (which is not\n  recommended).\n */\ntemplate <typename Char> class basic_string_view {\n private:\n  const Char* data_;\n  size_t size_;\n\n public:\n  using value_type = Char;\n  using iterator = const Char*;\n\n  constexpr basic_string_view() noexcept : data_(nullptr), size_(0) {}\n\n  /** Constructs a string reference object from a C string and a size. */\n  constexpr basic_string_view(const Char* s, size_t count) noexcept\n      : data_(s), size_(count) {}\n\n  /**\n    \\rst\n    Constructs a string reference object from a C string computing\n    the size with ``std::char_traits<Char>::length``.\n    \\endrst\n   */\n  FMT_CONSTEXPR_CHAR_TRAITS\n  FMT_INLINE\n  basic_string_view(const Char* s)\n      : data_(s),\n        size_(detail::const_check(std::is_same<Char, char>::value &&\n                                  !detail::is_constant_evaluated(true))\n                  ? std::strlen(reinterpret_cast<const char*>(s))\n                  : std::char_traits<Char>::length(s)) {}\n\n  /** Constructs a string reference from a ``std::basic_string`` object. */\n  template <typename Traits, typename Alloc>\n  FMT_CONSTEXPR basic_string_view(\n      const std::basic_string<Char, Traits, Alloc>& s) noexcept\n      : data_(s.data()), size_(s.size()) {}\n\n  template <typename S, FMT_ENABLE_IF(std::is_same<\n                                      S, detail::std_string_view<Char>>::value)>\n  FMT_CONSTEXPR basic_string_view(S s) noexcept\n      : data_(s.data()), size_(s.size()) {}\n\n  /** Returns a pointer to the string data. */\n  constexpr auto data() const noexcept -> const Char* { return data_; }\n\n  /** Returns the string size. */\n  constexpr auto size() const noexcept -> size_t { return size_; }\n\n  constexpr auto begin() const noexcept -> iterator { return data_; }\n  constexpr auto end() const noexcept -> iterator { return data_ + size_; }\n\n  constexpr auto operator[](size_t pos) const noexcept -> const Char& {\n    return data_[pos];\n  }\n\n  FMT_CONSTEXPR void remove_prefix(size_t n) noexcept {\n    data_ += n;\n    size_ -= n;\n  }\n\n  // Lexicographically compare this string reference to other.\n  FMT_CONSTEXPR_CHAR_TRAITS auto compare(basic_string_view other) const -> int {\n    size_t str_size = size_ < other.size_ ? size_ : other.size_;\n    int result = std::char_traits<Char>::compare(data_, other.data_, str_size);\n    if (result == 0)\n      result = size_ == other.size_ ? 0 : (size_ < other.size_ ? -1 : 1);\n    return result;\n  }\n\n  FMT_CONSTEXPR_CHAR_TRAITS friend auto operator==(basic_string_view lhs,\n                                                   basic_string_view rhs)\n      -> bool {\n    return lhs.compare(rhs) == 0;\n  }\n  friend auto operator!=(basic_string_view lhs, basic_string_view rhs) -> bool {\n    return lhs.compare(rhs) != 0;\n  }\n  friend auto operator<(basic_string_view lhs, basic_string_view rhs) -> bool {\n    return lhs.compare(rhs) < 0;\n  }\n  friend auto operator<=(basic_string_view lhs, basic_string_view rhs) -> bool {\n    return lhs.compare(rhs) <= 0;\n  }\n  friend auto operator>(basic_string_view lhs, basic_string_view rhs) -> bool {\n    return lhs.compare(rhs) > 0;\n  }\n  friend auto operator>=(basic_string_view lhs, basic_string_view rhs) -> bool {\n    return lhs.compare(rhs) >= 0;\n  }\n};\n\nusing string_view = basic_string_view<char>;\n\n/** Specifies if ``T`` is a character type. Can be specialized by users. */\ntemplate <typename T> struct is_char : std::false_type {};\ntemplate <> struct is_char<char> : std::true_type {};\n\nFMT_BEGIN_DETAIL_NAMESPACE\n\n// A base class for compile-time strings.\nstruct compile_string {};\n\ntemplate <typename S>\nstruct is_compile_string : std::is_base_of<compile_string, S> {};\n\n// Returns a string view of `s`.\ntemplate <typename Char, FMT_ENABLE_IF(is_char<Char>::value)>\nFMT_INLINE auto to_string_view(const Char* s) -> basic_string_view<Char> {\n  return s;\n}\ntemplate <typename Char, typename Traits, typename Alloc>\ninline auto to_string_view(const std::basic_string<Char, Traits, Alloc>& s)\n    -> basic_string_view<Char> {\n  return s;\n}\ntemplate <typename Char>\nconstexpr auto to_string_view(basic_string_view<Char> s)\n    -> basic_string_view<Char> {\n  return s;\n}\ntemplate <typename Char,\n          FMT_ENABLE_IF(!std::is_empty<std_string_view<Char>>::value)>\ninline auto to_string_view(std_string_view<Char> s) -> basic_string_view<Char> {\n  return s;\n}\ntemplate <typename S, FMT_ENABLE_IF(is_compile_string<S>::value)>\nconstexpr auto to_string_view(const S& s)\n    -> basic_string_view<typename S::char_type> {\n  return basic_string_view<typename S::char_type>(s);\n}\nvoid to_string_view(...);\n\n// Specifies whether S is a string type convertible to fmt::basic_string_view.\n// It should be a constexpr function but MSVC 2017 fails to compile it in\n// enable_if and MSVC 2015 fails to compile it as an alias template.\n// ADL invocation of to_string_view is DEPRECATED!\ntemplate <typename S>\nstruct is_string : std::is_class<decltype(to_string_view(std::declval<S>()))> {\n};\n\ntemplate <typename S, typename = void> struct char_t_impl {};\ntemplate <typename S> struct char_t_impl<S, enable_if_t<is_string<S>::value>> {\n  using result = decltype(to_string_view(std::declval<S>()));\n  using type = typename result::value_type;\n};\n\nenum class type {\n  none_type,\n  // Integer types should go first,\n  int_type,\n  uint_type,\n  long_long_type,\n  ulong_long_type,\n  int128_type,\n  uint128_type,\n  bool_type,\n  char_type,\n  last_integer_type = char_type,\n  // followed by floating-point types.\n  float_type,\n  double_type,\n  long_double_type,\n  last_numeric_type = long_double_type,\n  cstring_type,\n  string_type,\n  pointer_type,\n  custom_type\n};\n\n// Maps core type T to the corresponding type enum constant.\ntemplate <typename T, typename Char>\nstruct type_constant : std::integral_constant<type, type::custom_type> {};\n\n#define FMT_TYPE_CONSTANT(Type, constant) \\\n  template <typename Char>                \\\n  struct type_constant<Type, Char>        \\\n      : std::integral_constant<type, type::constant> {}\n\nFMT_TYPE_CONSTANT(int, int_type);\nFMT_TYPE_CONSTANT(unsigned, uint_type);\nFMT_TYPE_CONSTANT(long long, long_long_type);\nFMT_TYPE_CONSTANT(unsigned long long, ulong_long_type);\nFMT_TYPE_CONSTANT(int128_opt, int128_type);\nFMT_TYPE_CONSTANT(uint128_opt, uint128_type);\nFMT_TYPE_CONSTANT(bool, bool_type);\nFMT_TYPE_CONSTANT(Char, char_type);\nFMT_TYPE_CONSTANT(float, float_type);\nFMT_TYPE_CONSTANT(double, double_type);\nFMT_TYPE_CONSTANT(long double, long_double_type);\nFMT_TYPE_CONSTANT(const Char*, cstring_type);\nFMT_TYPE_CONSTANT(basic_string_view<Char>, string_type);\nFMT_TYPE_CONSTANT(const void*, pointer_type);\n\nconstexpr bool is_integral_type(type t) {\n  return t > type::none_type && t <= type::last_integer_type;\n}\n\nconstexpr bool is_arithmetic_type(type t) {\n  return t > type::none_type && t <= type::last_numeric_type;\n}\n\nFMT_NORETURN FMT_API void throw_format_error(const char* message);\n\nstruct error_handler {\n  constexpr error_handler() = default;\n  constexpr error_handler(const error_handler&) = default;\n\n  // This function is intentionally not constexpr to give a compile-time error.\n  FMT_NORETURN void on_error(const char* message) {\n    throw_format_error(message);\n  }\n};\nFMT_END_DETAIL_NAMESPACE\n\n/** String's character type. */\ntemplate <typename S> using char_t = typename detail::char_t_impl<S>::type;\n\n/**\n  \\rst\n  Parsing context consisting of a format string range being parsed and an\n  argument counter for automatic indexing.\n  You can use the ``format_parse_context`` type alias for ``char`` instead.\n  \\endrst\n */\ntemplate <typename Char, typename ErrorHandler = detail::error_handler>\nclass basic_format_parse_context : private ErrorHandler {\n private:\n  basic_string_view<Char> format_str_;\n  int next_arg_id_;\n\n  FMT_CONSTEXPR void do_check_arg_id(int id);\n\n public:\n  using char_type = Char;\n  using iterator = typename basic_string_view<Char>::iterator;\n\n  explicit constexpr basic_format_parse_context(\n      basic_string_view<Char> format_str, ErrorHandler eh = {},\n      int next_arg_id = 0)\n      : ErrorHandler(eh), format_str_(format_str), next_arg_id_(next_arg_id) {}\n\n  /**\n    Returns an iterator to the beginning of the format string range being\n    parsed.\n   */\n  constexpr auto begin() const noexcept -> iterator {\n    return format_str_.begin();\n  }\n\n  /**\n    Returns an iterator past the end of the format string range being parsed.\n   */\n  constexpr auto end() const noexcept -> iterator { return format_str_.end(); }\n\n  /** Advances the begin iterator to ``it``. */\n  FMT_CONSTEXPR void advance_to(iterator it) {\n    format_str_.remove_prefix(detail::to_unsigned(it - begin()));\n  }\n\n  /**\n    Reports an error if using the manual argument indexing; otherwise returns\n    the next argument index and switches to the automatic indexing.\n   */\n  FMT_CONSTEXPR auto next_arg_id() -> int {\n    if (next_arg_id_ < 0) {\n      on_error(\"cannot switch from manual to automatic argument indexing\");\n      return 0;\n    }\n    int id = next_arg_id_++;\n    do_check_arg_id(id);\n    return id;\n  }\n\n  /**\n    Reports an error if using the automatic argument indexing; otherwise\n    switches to the manual indexing.\n   */\n  FMT_CONSTEXPR void check_arg_id(int id) {\n    if (next_arg_id_ > 0) {\n      on_error(\"cannot switch from automatic to manual argument indexing\");\n      return;\n    }\n    next_arg_id_ = -1;\n    do_check_arg_id(id);\n  }\n  FMT_CONSTEXPR void check_arg_id(basic_string_view<Char>) {}\n  FMT_CONSTEXPR void check_dynamic_spec(int arg_id);\n\n  FMT_CONSTEXPR void on_error(const char* message) {\n    ErrorHandler::on_error(message);\n  }\n\n  constexpr auto error_handler() const -> ErrorHandler { return *this; }\n};\n\nusing format_parse_context = basic_format_parse_context<char>;\n\nFMT_BEGIN_DETAIL_NAMESPACE\n// A parse context with extra data used only in compile-time checks.\ntemplate <typename Char, typename ErrorHandler = detail::error_handler>\nclass compile_parse_context\n    : public basic_format_parse_context<Char, ErrorHandler> {\n private:\n  int num_args_;\n  const type* types_;\n  using base = basic_format_parse_context<Char, ErrorHandler>;\n\n public:\n  explicit FMT_CONSTEXPR compile_parse_context(\n      basic_string_view<Char> format_str, int num_args, const type* types,\n      ErrorHandler eh = {}, int next_arg_id = 0)\n      : base(format_str, eh, next_arg_id), num_args_(num_args), types_(types) {}\n\n  constexpr auto num_args() const -> int { return num_args_; }\n  constexpr auto arg_type(int id) const -> type { return types_[id]; }\n\n  FMT_CONSTEXPR auto next_arg_id() -> int {\n    int id = base::next_arg_id();\n    if (id >= num_args_) this->on_error(\"argument not found\");\n    return id;\n  }\n\n  FMT_CONSTEXPR void check_arg_id(int id) {\n    base::check_arg_id(id);\n    if (id >= num_args_) this->on_error(\"argument not found\");\n  }\n  using base::check_arg_id;\n\n  FMT_CONSTEXPR void check_dynamic_spec(int arg_id) {\n    if (arg_id < num_args_ && types_ && !is_integral_type(types_[arg_id]))\n      this->on_error(\"width/precision is not integer\");\n  }\n};\nFMT_END_DETAIL_NAMESPACE\n\ntemplate <typename Char, typename ErrorHandler>\nFMT_CONSTEXPR void\nbasic_format_parse_context<Char, ErrorHandler>::do_check_arg_id(int id) {\n  // Argument id is only checked at compile-time during parsing because\n  // formatting has its own validation.\n  if (detail::is_constant_evaluated() && FMT_GCC_VERSION >= 1200) {\n    using context = detail::compile_parse_context<Char, ErrorHandler>;\n    if (id >= static_cast<context*>(this)->num_args())\n      on_error(\"argument not found\");\n  }\n}\n\ntemplate <typename Char, typename ErrorHandler>\nFMT_CONSTEXPR void\nbasic_format_parse_context<Char, ErrorHandler>::check_dynamic_spec(int arg_id) {\n  if (detail::is_constant_evaluated()) {\n    using context = detail::compile_parse_context<Char, ErrorHandler>;\n    static_cast<context*>(this)->check_dynamic_spec(arg_id);\n  }\n}\n\ntemplate <typename Context> class basic_format_arg;\ntemplate <typename Context> class basic_format_args;\ntemplate <typename Context> class dynamic_format_arg_store;\n\n// A formatter for objects of type T.\ntemplate <typename T, typename Char = char, typename Enable = void>\nstruct formatter {\n  // A deleted default constructor indicates a disabled formatter.\n  formatter() = delete;\n};\n\n// Specifies if T has an enabled formatter specialization. A type can be\n// formattable even if it doesn't have a formatter e.g. via a conversion.\ntemplate <typename T, typename Context>\nusing has_formatter =\n    std::is_constructible<typename Context::template formatter_type<T>>;\n\n// Checks whether T is a container with contiguous storage.\ntemplate <typename T> struct is_contiguous : std::false_type {};\ntemplate <typename Char>\nstruct is_contiguous<std::basic_string<Char>> : std::true_type {};\n\nclass appender;\n\nFMT_BEGIN_DETAIL_NAMESPACE\n\ntemplate <typename Context, typename T>\nconstexpr auto has_const_formatter_impl(T*)\n    -> decltype(typename Context::template formatter_type<T>().format(\n                    std::declval<const T&>(), std::declval<Context&>()),\n                true) {\n  return true;\n}\ntemplate <typename Context>\nconstexpr auto has_const_formatter_impl(...) -> bool {\n  return false;\n}\ntemplate <typename T, typename Context>\nconstexpr auto has_const_formatter() -> bool {\n  return has_const_formatter_impl<Context>(static_cast<T*>(nullptr));\n}\n\n// Extracts a reference to the container from back_insert_iterator.\ntemplate <typename Container>\ninline auto get_container(std::back_insert_iterator<Container> it)\n    -> Container& {\n  using base = std::back_insert_iterator<Container>;\n  struct accessor : base {\n    accessor(base b) : base(b) {}\n    using base::container;\n  };\n  return *accessor(it).container;\n}\n\ntemplate <typename Char, typename InputIt, typename OutputIt>\nFMT_CONSTEXPR auto copy_str(InputIt begin, InputIt end, OutputIt out)\n    -> OutputIt {\n  while (begin != end) *out++ = static_cast<Char>(*begin++);\n  return out;\n}\n\ntemplate <typename Char, typename T, typename U,\n          FMT_ENABLE_IF(\n              std::is_same<remove_const_t<T>, U>::value&& is_char<U>::value)>\nFMT_CONSTEXPR auto copy_str(T* begin, T* end, U* out) -> U* {\n  if (is_constant_evaluated()) return copy_str<Char, T*, U*>(begin, end, out);\n  auto size = to_unsigned(end - begin);\n  memcpy(out, begin, size * sizeof(U));\n  return out + size;\n}\n\n/**\n  \\rst\n  A contiguous memory buffer with an optional growing ability. It is an internal\n  class and shouldn't be used directly, only via `~fmt::basic_memory_buffer`.\n  \\endrst\n */\ntemplate <typename T> class buffer {\n private:\n  T* ptr_;\n  size_t size_;\n  size_t capacity_;\n\n protected:\n  // Don't initialize ptr_ since it is not accessed to save a few cycles.\n  FMT_MSC_WARNING(suppress : 26495)\n  buffer(size_t sz) noexcept : size_(sz), capacity_(sz) {}\n\n  FMT_CONSTEXPR20 buffer(T* p = nullptr, size_t sz = 0, size_t cap = 0) noexcept\n      : ptr_(p), size_(sz), capacity_(cap) {}\n\n  FMT_CONSTEXPR20 ~buffer() = default;\n  buffer(buffer&&) = default;\n\n  /** Sets the buffer data and capacity. */\n  FMT_CONSTEXPR void set(T* buf_data, size_t buf_capacity) noexcept {\n    ptr_ = buf_data;\n    capacity_ = buf_capacity;\n  }\n\n  /** Increases the buffer capacity to hold at least *capacity* elements. */\n  virtual FMT_CONSTEXPR20 void grow(size_t capacity) = 0;\n\n public:\n  using value_type = T;\n  using const_reference = const T&;\n\n  buffer(const buffer&) = delete;\n  void operator=(const buffer&) = delete;\n\n  auto begin() noexcept -> T* { return ptr_; }\n  auto end() noexcept -> T* { return ptr_ + size_; }\n\n  auto begin() const noexcept -> const T* { return ptr_; }\n  auto end() const noexcept -> const T* { return ptr_ + size_; }\n\n  /** Returns the size of this buffer. */\n  constexpr auto size() const noexcept -> size_t { return size_; }\n\n  /** Returns the capacity of this buffer. */\n  constexpr auto capacity() const noexcept -> size_t { return capacity_; }\n\n  /** Returns a pointer to the buffer data. */\n  FMT_CONSTEXPR auto data() noexcept -> T* { return ptr_; }\n\n  /** Returns a pointer to the buffer data. */\n  FMT_CONSTEXPR auto data() const noexcept -> const T* { return ptr_; }\n\n  /** Clears this buffer. */\n  void clear() { size_ = 0; }\n\n  // Tries resizing the buffer to contain *count* elements. If T is a POD type\n  // the new elements may not be initialized.\n  FMT_CONSTEXPR20 void try_resize(size_t count) {\n    try_reserve(count);\n    size_ = count <= capacity_ ? count : capacity_;\n  }\n\n  // Tries increasing the buffer capacity to *new_capacity*. It can increase the\n  // capacity by a smaller amount than requested but guarantees there is space\n  // for at least one additional element either by increasing the capacity or by\n  // flushing the buffer if it is full.\n  FMT_CONSTEXPR20 void try_reserve(size_t new_capacity) {\n    if (new_capacity > capacity_) grow(new_capacity);\n  }\n\n  FMT_CONSTEXPR20 void push_back(const T& value) {\n    try_reserve(size_ + 1);\n    ptr_[size_++] = value;\n  }\n\n  /** Appends data to the end of the buffer. */\n  template <typename U> void append(const U* begin, const U* end);\n\n  template <typename Idx> FMT_CONSTEXPR auto operator[](Idx index) -> T& {\n    return ptr_[index];\n  }\n  template <typename Idx>\n  FMT_CONSTEXPR auto operator[](Idx index) const -> const T& {\n    return ptr_[index];\n  }\n};\n\nstruct buffer_traits {\n  explicit buffer_traits(size_t) {}\n  auto count() const -> size_t { return 0; }\n  auto limit(size_t size) -> size_t { return size; }\n};\n\nclass fixed_buffer_traits {\n private:\n  size_t count_ = 0;\n  size_t limit_;\n\n public:\n  explicit fixed_buffer_traits(size_t limit) : limit_(limit) {}\n  auto count() const -> size_t { return count_; }\n  auto limit(size_t size) -> size_t {\n    size_t n = limit_ > count_ ? limit_ - count_ : 0;\n    count_ += size;\n    return size < n ? size : n;\n  }\n};\n\n// A buffer that writes to an output iterator when flushed.\ntemplate <typename OutputIt, typename T, typename Traits = buffer_traits>\nclass iterator_buffer final : public Traits, public buffer<T> {\n private:\n  OutputIt out_;\n  enum { buffer_size = 256 };\n  T data_[buffer_size];\n\n protected:\n  FMT_CONSTEXPR20 void grow(size_t) override {\n    if (this->size() == buffer_size) flush();\n  }\n\n  void flush() {\n    auto size = this->size();\n    this->clear();\n    out_ = copy_str<T>(data_, data_ + this->limit(size), out_);\n  }\n\n public:\n  explicit iterator_buffer(OutputIt out, size_t n = buffer_size)\n      : Traits(n), buffer<T>(data_, 0, buffer_size), out_(out) {}\n  iterator_buffer(iterator_buffer&& other)\n      : Traits(other), buffer<T>(data_, 0, buffer_size), out_(other.out_) {}\n  ~iterator_buffer() { flush(); }\n\n  auto out() -> OutputIt {\n    flush();\n    return out_;\n  }\n  auto count() const -> size_t { return Traits::count() + this->size(); }\n};\n\ntemplate <typename T>\nclass iterator_buffer<T*, T, fixed_buffer_traits> final\n    : public fixed_buffer_traits,\n      public buffer<T> {\n private:\n  T* out_;\n  enum { buffer_size = 256 };\n  T data_[buffer_size];\n\n protected:\n  FMT_CONSTEXPR20 void grow(size_t) override {\n    if (this->size() == this->capacity()) flush();\n  }\n\n  void flush() {\n    size_t n = this->limit(this->size());\n    if (this->data() == out_) {\n      out_ += n;\n      this->set(data_, buffer_size);\n    }\n    this->clear();\n  }\n\n public:\n  explicit iterator_buffer(T* out, size_t n = buffer_size)\n      : fixed_buffer_traits(n), buffer<T>(out, 0, n), out_(out) {}\n  iterator_buffer(iterator_buffer&& other)\n      : fixed_buffer_traits(other),\n        buffer<T>(std::move(other)),\n        out_(other.out_) {\n    if (this->data() != out_) {\n      this->set(data_, buffer_size);\n      this->clear();\n    }\n  }\n  ~iterator_buffer() { flush(); }\n\n  auto out() -> T* {\n    flush();\n    return out_;\n  }\n  auto count() const -> size_t {\n    return fixed_buffer_traits::count() + this->size();\n  }\n};\n\ntemplate <typename T> class iterator_buffer<T*, T> final : public buffer<T> {\n protected:\n  FMT_CONSTEXPR20 void grow(size_t) override {}\n\n public:\n  explicit iterator_buffer(T* out, size_t = 0) : buffer<T>(out, 0, ~size_t()) {}\n\n  auto out() -> T* { return &*this->end(); }\n};\n\n// A buffer that writes to a container with the contiguous storage.\ntemplate <typename Container>\nclass iterator_buffer<std::back_insert_iterator<Container>,\n                      enable_if_t<is_contiguous<Container>::value,\n                                  typename Container::value_type>>\n    final : public buffer<typename Container::value_type> {\n private:\n  Container& container_;\n\n protected:\n  FMT_CONSTEXPR20 void grow(size_t capacity) override {\n    container_.resize(capacity);\n    this->set(&container_[0], capacity);\n  }\n\n public:\n  explicit iterator_buffer(Container& c)\n      : buffer<typename Container::value_type>(c.size()), container_(c) {}\n  explicit iterator_buffer(std::back_insert_iterator<Container> out, size_t = 0)\n      : iterator_buffer(get_container(out)) {}\n\n  auto out() -> std::back_insert_iterator<Container> {\n    return std::back_inserter(container_);\n  }\n};\n\n// A buffer that counts the number of code units written discarding the output.\ntemplate <typename T = char> class counting_buffer final : public buffer<T> {\n private:\n  enum { buffer_size = 256 };\n  T data_[buffer_size];\n  size_t count_ = 0;\n\n protected:\n  FMT_CONSTEXPR20 void grow(size_t) override {\n    if (this->size() != buffer_size) return;\n    count_ += this->size();\n    this->clear();\n  }\n\n public:\n  counting_buffer() : buffer<T>(data_, 0, buffer_size) {}\n\n  auto count() -> size_t { return count_ + this->size(); }\n};\n\ntemplate <typename T>\nusing buffer_appender = conditional_t<std::is_same<T, char>::value, appender,\n                                      std::back_insert_iterator<buffer<T>>>;\n\n// Maps an output iterator to a buffer.\ntemplate <typename T, typename OutputIt>\nauto get_buffer(OutputIt out) -> iterator_buffer<OutputIt, T> {\n  return iterator_buffer<OutputIt, T>(out);\n}\n\ntemplate <typename Buffer>\nauto get_iterator(Buffer& buf) -> decltype(buf.out()) {\n  return buf.out();\n}\ntemplate <typename T> auto get_iterator(buffer<T>& buf) -> buffer_appender<T> {\n  return buffer_appender<T>(buf);\n}\n\ntemplate <typename T, typename Char = char, typename Enable = void>\nstruct fallback_formatter {\n  fallback_formatter() = delete;\n};\n\n// Specifies if T has an enabled fallback_formatter specialization.\ntemplate <typename T, typename Char>\nusing has_fallback_formatter =\n#ifdef FMT_DEPRECATED_OSTREAM\n    std::is_constructible<fallback_formatter<T, Char>>;\n#else\n    std::false_type;\n#endif\n\nstruct view {};\n\ntemplate <typename Char, typename T> struct named_arg : view {\n  const Char* name;\n  const T& value;\n  named_arg(const Char* n, const T& v) : name(n), value(v) {}\n};\n\ntemplate <typename Char> struct named_arg_info {\n  const Char* name;\n  int id;\n};\n\ntemplate <typename T, typename Char, size_t NUM_ARGS, size_t NUM_NAMED_ARGS>\nstruct arg_data {\n  // args_[0].named_args points to named_args_ to avoid bloating format_args.\n  // +1 to workaround a bug in gcc 7.5 that causes duplicated-branches warning.\n  T args_[1 + (NUM_ARGS != 0 ? NUM_ARGS : +1)];\n  named_arg_info<Char> named_args_[NUM_NAMED_ARGS];\n\n  template <typename... U>\n  arg_data(const U&... init) : args_{T(named_args_, NUM_NAMED_ARGS), init...} {}\n  arg_data(const arg_data& other) = delete;\n  auto args() const -> const T* { return args_ + 1; }\n  auto named_args() -> named_arg_info<Char>* { return named_args_; }\n};\n\ntemplate <typename T, typename Char, size_t NUM_ARGS>\nstruct arg_data<T, Char, NUM_ARGS, 0> {\n  // +1 to workaround a bug in gcc 7.5 that causes duplicated-branches warning.\n  T args_[NUM_ARGS != 0 ? NUM_ARGS : +1];\n\n  template <typename... U>\n  FMT_CONSTEXPR FMT_INLINE arg_data(const U&... init) : args_{init...} {}\n  FMT_CONSTEXPR FMT_INLINE auto args() const -> const T* { return args_; }\n  FMT_CONSTEXPR FMT_INLINE auto named_args() -> std::nullptr_t {\n    return nullptr;\n  }\n};\n\ntemplate <typename Char>\ninline void init_named_args(named_arg_info<Char>*, int, int) {}\n\ntemplate <typename T> struct is_named_arg : std::false_type {};\ntemplate <typename T> struct is_statically_named_arg : std::false_type {};\n\ntemplate <typename T, typename Char>\nstruct is_named_arg<named_arg<Char, T>> : std::true_type {};\n\ntemplate <typename Char, typename T, typename... Tail,\n          FMT_ENABLE_IF(!is_named_arg<T>::value)>\nvoid init_named_args(named_arg_info<Char>* named_args, int arg_count,\n                     int named_arg_count, const T&, const Tail&... args) {\n  init_named_args(named_args, arg_count + 1, named_arg_count, args...);\n}\n\ntemplate <typename Char, typename T, typename... Tail,\n          FMT_ENABLE_IF(is_named_arg<T>::value)>\nvoid init_named_args(named_arg_info<Char>* named_args, int arg_count,\n                     int named_arg_count, const T& arg, const Tail&... args) {\n  named_args[named_arg_count++] = {arg.name, arg_count};\n  init_named_args(named_args, arg_count + 1, named_arg_count, args...);\n}\n\ntemplate <typename... Args>\nFMT_CONSTEXPR FMT_INLINE void init_named_args(std::nullptr_t, int, int,\n                                              const Args&...) {}\n\ntemplate <bool B = false> constexpr auto count() -> size_t { return B ? 1 : 0; }\ntemplate <bool B1, bool B2, bool... Tail> constexpr auto count() -> size_t {\n  return (B1 ? 1 : 0) + count<B2, Tail...>();\n}\n\ntemplate <typename... Args> constexpr auto count_named_args() -> size_t {\n  return count<is_named_arg<Args>::value...>();\n}\n\ntemplate <typename... Args>\nconstexpr auto count_statically_named_args() -> size_t {\n  return count<is_statically_named_arg<Args>::value...>();\n}\n\nstruct unformattable {};\nstruct unformattable_char : unformattable {};\nstruct unformattable_const : unformattable {};\nstruct unformattable_pointer : unformattable {};\n\ntemplate <typename Char> struct string_value {\n  const Char* data;\n  size_t size;\n};\n\ntemplate <typename Char> struct named_arg_value {\n  const named_arg_info<Char>* data;\n  size_t size;\n};\n\ntemplate <typename Context> struct custom_value {\n  using parse_context = typename Context::parse_context_type;\n  void* value;\n  void (*format)(void* arg, parse_context& parse_ctx, Context& ctx);\n};\n\n// A formatting argument value.\ntemplate <typename Context> class value {\n public:\n  using char_type = typename Context::char_type;\n\n  union {\n    monostate no_value;\n    int int_value;\n    unsigned uint_value;\n    long long long_long_value;\n    unsigned long long ulong_long_value;\n    int128_opt int128_value;\n    uint128_opt uint128_value;\n    bool bool_value;\n    char_type char_value;\n    float float_value;\n    double double_value;\n    long double long_double_value;\n    const void* pointer;\n    string_value<char_type> string;\n    custom_value<Context> custom;\n    named_arg_value<char_type> named_args;\n  };\n\n  constexpr FMT_INLINE value() : no_value() {}\n  constexpr FMT_INLINE value(int val) : int_value(val) {}\n  constexpr FMT_INLINE value(unsigned val) : uint_value(val) {}\n  constexpr FMT_INLINE value(long long val) : long_long_value(val) {}\n  constexpr FMT_INLINE value(unsigned long long val) : ulong_long_value(val) {}\n  FMT_INLINE value(int128_opt val) : int128_value(val) {}\n  FMT_INLINE value(uint128_opt val) : uint128_value(val) {}\n  constexpr FMT_INLINE value(float val) : float_value(val) {}\n  constexpr FMT_INLINE value(double val) : double_value(val) {}\n  FMT_INLINE value(long double val) : long_double_value(val) {}\n  constexpr FMT_INLINE value(bool val) : bool_value(val) {}\n  constexpr FMT_INLINE value(char_type val) : char_value(val) {}\n  FMT_CONSTEXPR FMT_INLINE value(const char_type* val) {\n    string.data = val;\n    if (is_constant_evaluated()) string.size = {};\n  }\n  FMT_CONSTEXPR FMT_INLINE value(basic_string_view<char_type> val) {\n    string.data = val.data();\n    string.size = val.size();\n  }\n  FMT_INLINE value(const void* val) : pointer(val) {}\n  FMT_INLINE value(const named_arg_info<char_type>* args, size_t size)\n      : named_args{args, size} {}\n\n  template <typename T> FMT_CONSTEXPR FMT_INLINE value(T& val) {\n    using value_type = remove_cvref_t<T>;\n    custom.value = const_cast<value_type*>(&val);\n    // Get the formatter type through the context to allow different contexts\n    // have different extension points, e.g. `formatter<T>` for `format` and\n    // `printf_formatter<T>` for `printf`.\n    custom.format = format_custom_arg<\n        value_type,\n        conditional_t<has_formatter<value_type, Context>::value,\n                      typename Context::template formatter_type<value_type>,\n                      fallback_formatter<value_type, char_type>>>;\n  }\n  value(unformattable);\n  value(unformattable_char);\n  value(unformattable_const);\n  value(unformattable_pointer);\n\n private:\n  // Formats an argument of a custom type, such as a user-defined class.\n  template <typename T, typename Formatter>\n  static void format_custom_arg(void* arg,\n                                typename Context::parse_context_type& parse_ctx,\n                                Context& ctx) {\n    auto f = Formatter();\n    parse_ctx.advance_to(f.parse(parse_ctx));\n    using qualified_type =\n        conditional_t<has_const_formatter<T, Context>(), const T, T>;\n    ctx.advance_to(f.format(*static_cast<qualified_type*>(arg), ctx));\n  }\n};\n\ntemplate <typename Context, typename T>\nFMT_CONSTEXPR auto make_arg(T&& value) -> basic_format_arg<Context>;\n\n// To minimize the number of types we need to deal with, long is translated\n// either to int or to long long depending on its size.\nenum { long_short = sizeof(long) == sizeof(int) };\nusing long_type = conditional_t<long_short, int, long long>;\nusing ulong_type = conditional_t<long_short, unsigned, unsigned long long>;\n\n#ifdef __cpp_lib_byte\ninline auto format_as(std::byte b) -> unsigned char {\n  return static_cast<unsigned char>(b);\n}\n#endif\n\ntemplate <typename T> struct has_format_as {\n  template <typename U, typename V = decltype(format_as(U())),\n            FMT_ENABLE_IF(std::is_enum<U>::value&& std::is_integral<V>::value)>\n  static auto check(U*) -> std::true_type;\n  static auto check(...) -> std::false_type;\n\n  enum { value = decltype(check(static_cast<T*>(nullptr)))::value };\n};\n\n// Maps formatting arguments to core types.\n// arg_mapper reports errors by returning unformattable instead of using\n// static_assert because it's used in the is_formattable trait.\ntemplate <typename Context> struct arg_mapper {\n  using char_type = typename Context::char_type;\n\n  FMT_CONSTEXPR FMT_INLINE auto map(signed char val) -> int { return val; }\n  FMT_CONSTEXPR FMT_INLINE auto map(unsigned char val) -> unsigned {\n    return val;\n  }\n  FMT_CONSTEXPR FMT_INLINE auto map(short val) -> int { return val; }\n  FMT_CONSTEXPR FMT_INLINE auto map(unsigned short val) -> unsigned {\n    return val;\n  }\n  FMT_CONSTEXPR FMT_INLINE auto map(int val) -> int { return val; }\n  FMT_CONSTEXPR FMT_INLINE auto map(unsigned val) -> unsigned { return val; }\n  FMT_CONSTEXPR FMT_INLINE auto map(long val) -> long_type { return val; }\n  FMT_CONSTEXPR FMT_INLINE auto map(unsigned long val) -> ulong_type {\n    return val;\n  }\n  FMT_CONSTEXPR FMT_INLINE auto map(long long val) -> long long { return val; }\n  FMT_CONSTEXPR FMT_INLINE auto map(unsigned long long val)\n      -> unsigned long long {\n    return val;\n  }\n  FMT_CONSTEXPR FMT_INLINE auto map(int128_opt val) -> int128_opt {\n    return val;\n  }\n  FMT_CONSTEXPR FMT_INLINE auto map(uint128_opt val) -> uint128_opt {\n    return val;\n  }\n  FMT_CONSTEXPR FMT_INLINE auto map(bool val) -> bool { return val; }\n\n  template <typename T, FMT_ENABLE_IF(std::is_same<T, char>::value ||\n                                      std::is_same<T, char_type>::value)>\n  FMT_CONSTEXPR FMT_INLINE auto map(T val) -> char_type {\n    return val;\n  }\n  template <typename T, enable_if_t<(std::is_same<T, wchar_t>::value ||\n#ifdef __cpp_char8_t\n                                     std::is_same<T, char8_t>::value ||\n#endif\n                                     std::is_same<T, char16_t>::value ||\n                                     std::is_same<T, char32_t>::value) &&\n                                        !std::is_same<T, char_type>::value,\n                                    int> = 0>\n  FMT_CONSTEXPR FMT_INLINE auto map(T) -> unformattable_char {\n    return {};\n  }\n\n  FMT_CONSTEXPR FMT_INLINE auto map(float val) -> float { return val; }\n  FMT_CONSTEXPR FMT_INLINE auto map(double val) -> double { return val; }\n  FMT_CONSTEXPR FMT_INLINE auto map(long double val) -> long double {\n    return val;\n  }\n\n  FMT_CONSTEXPR FMT_INLINE auto map(char_type* val) -> const char_type* {\n    return val;\n  }\n  FMT_CONSTEXPR FMT_INLINE auto map(const char_type* val) -> const char_type* {\n    return val;\n  }\n  template <typename T,\n            FMT_ENABLE_IF(is_string<T>::value && !std::is_pointer<T>::value &&\n                          std::is_same<char_type, char_t<T>>::value)>\n  FMT_CONSTEXPR FMT_INLINE auto map(const T& val)\n      -> basic_string_view<char_type> {\n    return to_string_view(val);\n  }\n  template <typename T,\n            FMT_ENABLE_IF(is_string<T>::value && !std::is_pointer<T>::value &&\n                          !std::is_same<char_type, char_t<T>>::value)>\n  FMT_CONSTEXPR FMT_INLINE auto map(const T&) -> unformattable_char {\n    return {};\n  }\n  template <typename T,\n            FMT_ENABLE_IF(\n                std::is_convertible<T, basic_string_view<char_type>>::value &&\n                !is_string<T>::value && !has_formatter<T, Context>::value &&\n                !has_fallback_formatter<T, char_type>::value)>\n  FMT_CONSTEXPR FMT_INLINE auto map(const T& val)\n      -> basic_string_view<char_type> {\n    return basic_string_view<char_type>(val);\n  }\n  template <typename T,\n            FMT_ENABLE_IF(\n                std::is_convertible<T, std_string_view<char_type>>::value &&\n                !std::is_convertible<T, basic_string_view<char_type>>::value &&\n                !is_string<T>::value && !has_formatter<T, Context>::value &&\n                !has_fallback_formatter<T, char_type>::value)>\n  FMT_CONSTEXPR FMT_INLINE auto map(const T& val)\n      -> basic_string_view<char_type> {\n    return std_string_view<char_type>(val);\n  }\n\n  FMT_CONSTEXPR FMT_INLINE auto map(void* val) -> const void* { return val; }\n  FMT_CONSTEXPR FMT_INLINE auto map(const void* val) -> const void* {\n    return val;\n  }\n  FMT_CONSTEXPR FMT_INLINE auto map(std::nullptr_t val) -> const void* {\n    return val;\n  }\n\n  // We use SFINAE instead of a const T* parameter to avoid conflicting with\n  // the C array overload.\n  template <\n      typename T,\n      FMT_ENABLE_IF(\n          std::is_pointer<T>::value || std::is_member_pointer<T>::value ||\n          std::is_function<typename std::remove_pointer<T>::type>::value ||\n          (std::is_convertible<const T&, const void*>::value &&\n           !std::is_convertible<const T&, const char_type*>::value &&\n           !has_formatter<T, Context>::value))>\n  FMT_CONSTEXPR auto map(const T&) -> unformattable_pointer {\n    return {};\n  }\n\n  template <typename T, std::size_t N,\n            FMT_ENABLE_IF(!std::is_same<T, wchar_t>::value)>\n  FMT_CONSTEXPR FMT_INLINE auto map(const T (&values)[N]) -> const T (&)[N] {\n    return values;\n  }\n\n  template <typename T,\n            FMT_ENABLE_IF(\n                std::is_enum<T>::value&& std::is_convertible<T, int>::value &&\n                !has_format_as<T>::value && !has_formatter<T, Context>::value &&\n                !has_fallback_formatter<T, char_type>::value)>\n  FMT_DEPRECATED FMT_CONSTEXPR FMT_INLINE auto map(const T& val)\n      -> decltype(std::declval<arg_mapper>().map(\n          static_cast<underlying_t<T>>(val))) {\n    return map(static_cast<underlying_t<T>>(val));\n  }\n\n  template <typename T, FMT_ENABLE_IF(has_format_as<T>::value &&\n                                      !has_formatter<T, Context>::value)>\n  FMT_CONSTEXPR FMT_INLINE auto map(const T& val)\n      -> decltype(std::declval<arg_mapper>().map(format_as(T()))) {\n    return map(format_as(val));\n  }\n\n  template <typename T, typename U = remove_cvref_t<T>>\n  struct formattable\n      : bool_constant<has_const_formatter<U, Context>() ||\n                      !std::is_const<remove_reference_t<T>>::value ||\n                      has_fallback_formatter<U, char_type>::value> {};\n\n#if (FMT_MSC_VERSION != 0 && FMT_MSC_VERSION < 1910) || \\\n    FMT_ICC_VERSION != 0 || defined(__NVCC__)\n  // Workaround a bug in MSVC and Intel (Issue 2746).\n  template <typename T> FMT_CONSTEXPR FMT_INLINE auto do_map(T&& val) -> T& {\n    return val;\n  }\n#else\n  template <typename T, FMT_ENABLE_IF(formattable<T>::value)>\n  FMT_CONSTEXPR FMT_INLINE auto do_map(T&& val) -> T& {\n    return val;\n  }\n  template <typename T, FMT_ENABLE_IF(!formattable<T>::value)>\n  FMT_CONSTEXPR FMT_INLINE auto do_map(T&&) -> unformattable_const {\n    return {};\n  }\n#endif\n\n  template <typename T, typename U = remove_cvref_t<T>,\n            FMT_ENABLE_IF(!is_string<U>::value && !is_char<U>::value &&\n                          !std::is_array<U>::value &&\n                          !std::is_pointer<U>::value &&\n                          !has_format_as<U>::value &&\n                          (has_formatter<U, Context>::value ||\n                           has_fallback_formatter<U, char_type>::value))>\n  FMT_CONSTEXPR FMT_INLINE auto map(T&& val)\n      -> decltype(this->do_map(std::forward<T>(val))) {\n    return do_map(std::forward<T>(val));\n  }\n\n  template <typename T, FMT_ENABLE_IF(is_named_arg<T>::value)>\n  FMT_CONSTEXPR FMT_INLINE auto map(const T& named_arg)\n      -> decltype(std::declval<arg_mapper>().map(named_arg.value)) {\n    return map(named_arg.value);\n  }\n\n  auto map(...) -> unformattable { return {}; }\n};\n\n// A type constant after applying arg_mapper<Context>.\ntemplate <typename T, typename Context>\nusing mapped_type_constant =\n    type_constant<decltype(arg_mapper<Context>().map(std::declval<const T&>())),\n                  typename Context::char_type>;\n\nenum { packed_arg_bits = 4 };\n// Maximum number of arguments with packed types.\nenum { max_packed_args = 62 / packed_arg_bits };\nenum : unsigned long long { is_unpacked_bit = 1ULL << 63 };\nenum : unsigned long long { has_named_args_bit = 1ULL << 62 };\n\nFMT_END_DETAIL_NAMESPACE\n\n// An output iterator that appends to a buffer.\n// It is used to reduce symbol sizes for the common case.\nclass appender : public std::back_insert_iterator<detail::buffer<char>> {\n  using base = std::back_insert_iterator<detail::buffer<char>>;\n\n  template <typename T>\n  friend auto get_buffer(appender out) -> detail::buffer<char>& {\n    return detail::get_container(out);\n  }\n\n public:\n  using std::back_insert_iterator<detail::buffer<char>>::back_insert_iterator;\n  appender(base it) noexcept : base(it) {}\n  FMT_UNCHECKED_ITERATOR(appender);\n\n  auto operator++() noexcept -> appender& { return *this; }\n  auto operator++(int) noexcept -> appender { return *this; }\n};\n\n// A formatting argument. It is a trivially copyable/constructible type to\n// allow storage in basic_memory_buffer.\ntemplate <typename Context> class basic_format_arg {\n private:\n  detail::value<Context> value_;\n  detail::type type_;\n\n  template <typename ContextType, typename T>\n  friend FMT_CONSTEXPR auto detail::make_arg(T&& value)\n      -> basic_format_arg<ContextType>;\n\n  template <typename Visitor, typename Ctx>\n  friend FMT_CONSTEXPR auto visit_format_arg(Visitor&& vis,\n                                             const basic_format_arg<Ctx>& arg)\n      -> decltype(vis(0));\n\n  friend class basic_format_args<Context>;\n  friend class dynamic_format_arg_store<Context>;\n\n  using char_type = typename Context::char_type;\n\n  template <typename T, typename Char, size_t NUM_ARGS, size_t NUM_NAMED_ARGS>\n  friend struct detail::arg_data;\n\n  basic_format_arg(const detail::named_arg_info<char_type>* args, size_t size)\n      : value_(args, size) {}\n\n public:\n  class handle {\n   public:\n    explicit handle(detail::custom_value<Context> custom) : custom_(custom) {}\n\n    void format(typename Context::parse_context_type& parse_ctx,\n                Context& ctx) const {\n      custom_.format(custom_.value, parse_ctx, ctx);\n    }\n\n   private:\n    detail::custom_value<Context> custom_;\n  };\n\n  constexpr basic_format_arg() : type_(detail::type::none_type) {}\n\n  constexpr explicit operator bool() const noexcept {\n    return type_ != detail::type::none_type;\n  }\n\n  auto type() const -> detail::type { return type_; }\n\n  auto is_integral() const -> bool { return detail::is_integral_type(type_); }\n  auto is_arithmetic() const -> bool {\n    return detail::is_arithmetic_type(type_);\n  }\n};\n\n/**\n  \\rst\n  Visits an argument dispatching to the appropriate visit method based on\n  the argument type. For example, if the argument type is ``double`` then\n  ``vis(value)`` will be called with the value of type ``double``.\n  \\endrst\n */\ntemplate <typename Visitor, typename Context>\nFMT_CONSTEXPR FMT_INLINE auto visit_format_arg(\n    Visitor&& vis, const basic_format_arg<Context>& arg) -> decltype(vis(0)) {\n  switch (arg.type_) {\n  case detail::type::none_type:\n    break;\n  case detail::type::int_type:\n    return vis(arg.value_.int_value);\n  case detail::type::uint_type:\n    return vis(arg.value_.uint_value);\n  case detail::type::long_long_type:\n    return vis(arg.value_.long_long_value);\n  case detail::type::ulong_long_type:\n    return vis(arg.value_.ulong_long_value);\n  case detail::type::int128_type:\n    return vis(detail::convert_for_visit(arg.value_.int128_value));\n  case detail::type::uint128_type:\n    return vis(detail::convert_for_visit(arg.value_.uint128_value));\n  case detail::type::bool_type:\n    return vis(arg.value_.bool_value);\n  case detail::type::char_type:\n    return vis(arg.value_.char_value);\n  case detail::type::float_type:\n    return vis(arg.value_.float_value);\n  case detail::type::double_type:\n    return vis(arg.value_.double_value);\n  case detail::type::long_double_type:\n    return vis(arg.value_.long_double_value);\n  case detail::type::cstring_type:\n    return vis(arg.value_.string.data);\n  case detail::type::string_type:\n    using sv = basic_string_view<typename Context::char_type>;\n    return vis(sv(arg.value_.string.data, arg.value_.string.size));\n  case detail::type::pointer_type:\n    return vis(arg.value_.pointer);\n  case detail::type::custom_type:\n    return vis(typename basic_format_arg<Context>::handle(arg.value_.custom));\n  }\n  return vis(monostate());\n}\n\nFMT_BEGIN_DETAIL_NAMESPACE\n\ntemplate <typename Char, typename InputIt>\nauto copy_str(InputIt begin, InputIt end, appender out) -> appender {\n  get_container(out).append(begin, end);\n  return out;\n}\n\ntemplate <typename Char, typename R, typename OutputIt>\nFMT_CONSTEXPR auto copy_str(R&& rng, OutputIt out) -> OutputIt {\n  return detail::copy_str<Char>(rng.begin(), rng.end(), out);\n}\n\n#if FMT_GCC_VERSION && FMT_GCC_VERSION < 500\n// A workaround for gcc 4.8 to make void_t work in a SFINAE context.\ntemplate <typename... Ts> struct void_t_impl { using type = void; };\ntemplate <typename... Ts>\nusing void_t = typename detail::void_t_impl<Ts...>::type;\n#else\ntemplate <typename...> using void_t = void;\n#endif\n\ntemplate <typename It, typename T, typename Enable = void>\nstruct is_output_iterator : std::false_type {};\n\ntemplate <typename It, typename T>\nstruct is_output_iterator<\n    It, T,\n    void_t<typename std::iterator_traits<It>::iterator_category,\n           decltype(*std::declval<It>() = std::declval<T>())>>\n    : std::true_type {};\n\ntemplate <typename OutputIt>\nstruct is_back_insert_iterator : std::false_type {};\ntemplate <typename Container>\nstruct is_back_insert_iterator<std::back_insert_iterator<Container>>\n    : std::true_type {};\n\ntemplate <typename OutputIt>\nstruct is_contiguous_back_insert_iterator : std::false_type {};\ntemplate <typename Container>\nstruct is_contiguous_back_insert_iterator<std::back_insert_iterator<Container>>\n    : is_contiguous<Container> {};\ntemplate <>\nstruct is_contiguous_back_insert_iterator<appender> : std::true_type {};\n\n// A type-erased reference to an std::locale to avoid a heavy <locale> include.\nclass locale_ref {\n private:\n  const void* locale_;  // A type-erased pointer to std::locale.\n\n public:\n  constexpr locale_ref() : locale_(nullptr) {}\n  template <typename Locale> explicit locale_ref(const Locale& loc);\n\n  explicit operator bool() const noexcept { return locale_ != nullptr; }\n\n  template <typename Locale> auto get() const -> Locale;\n};\n\ntemplate <typename> constexpr auto encode_types() -> unsigned long long {\n  return 0;\n}\n\ntemplate <typename Context, typename Arg, typename... Args>\nconstexpr auto encode_types() -> unsigned long long {\n  return static_cast<unsigned>(mapped_type_constant<Arg, Context>::value) |\n         (encode_types<Context, Args...>() << packed_arg_bits);\n}\n\ntemplate <typename Context, typename T>\nFMT_CONSTEXPR FMT_INLINE auto make_value(T&& val) -> value<Context> {\n  const auto& arg = arg_mapper<Context>().map(FMT_FORWARD(val));\n\n  constexpr bool formattable_char =\n      !std::is_same<decltype(arg), const unformattable_char&>::value;\n  static_assert(formattable_char, \"Mixing character types is disallowed.\");\n\n  constexpr bool formattable_const =\n      !std::is_same<decltype(arg), const unformattable_const&>::value;\n  static_assert(formattable_const, \"Cannot format a const argument.\");\n\n  // Formatting of arbitrary pointers is disallowed. If you want to output\n  // a pointer cast it to \"void *\" or \"const void *\". In particular, this\n  // forbids formatting of \"[const] volatile char *\" which is printed as bool\n  // by iostreams.\n  constexpr bool formattable_pointer =\n      !std::is_same<decltype(arg), const unformattable_pointer&>::value;\n  static_assert(formattable_pointer,\n                \"Formatting of non-void pointers is disallowed.\");\n\n  constexpr bool formattable =\n      !std::is_same<decltype(arg), const unformattable&>::value;\n  static_assert(\n      formattable,\n      \"Cannot format an argument. To make type T formattable provide a \"\n      \"formatter<T> specialization: https://fmt.dev/latest/api.html#udt\");\n  return {arg};\n}\n\ntemplate <typename Context, typename T>\nFMT_CONSTEXPR auto make_arg(T&& value) -> basic_format_arg<Context> {\n  basic_format_arg<Context> arg;\n  arg.type_ = mapped_type_constant<T, Context>::value;\n  arg.value_ = make_value<Context>(value);\n  return arg;\n}\n\n// The type template parameter is there to avoid an ODR violation when using\n// a fallback formatter in one translation unit and an implicit conversion in\n// another (not recommended).\ntemplate <bool IS_PACKED, typename Context, type, typename T,\n          FMT_ENABLE_IF(IS_PACKED)>\nFMT_CONSTEXPR FMT_INLINE auto make_arg(T&& val) -> value<Context> {\n  return make_value<Context>(val);\n}\n\ntemplate <bool IS_PACKED, typename Context, type, typename T,\n          FMT_ENABLE_IF(!IS_PACKED)>\nFMT_CONSTEXPR inline auto make_arg(T&& value) -> basic_format_arg<Context> {\n  return make_arg<Context>(value);\n}\nFMT_END_DETAIL_NAMESPACE\n\n// Formatting context.\ntemplate <typename OutputIt, typename Char> class basic_format_context {\n public:\n  /** The character type for the output. */\n  using char_type = Char;\n\n private:\n  OutputIt out_;\n  basic_format_args<basic_format_context> args_;\n  detail::locale_ref loc_;\n\n public:\n  using iterator = OutputIt;\n  using format_arg = basic_format_arg<basic_format_context>;\n  using parse_context_type = basic_format_parse_context<Char>;\n  template <typename T> using formatter_type = formatter<T, char_type>;\n\n  basic_format_context(basic_format_context&&) = default;\n  basic_format_context(const basic_format_context&) = delete;\n  void operator=(const basic_format_context&) = delete;\n  /**\n   Constructs a ``basic_format_context`` object. References to the arguments are\n   stored in the object so make sure they have appropriate lifetimes.\n   */\n  constexpr basic_format_context(\n      OutputIt out, basic_format_args<basic_format_context> ctx_args,\n      detail::locale_ref loc = detail::locale_ref())\n      : out_(out), args_(ctx_args), loc_(loc) {}\n\n  constexpr auto arg(int id) const -> format_arg { return args_.get(id); }\n  FMT_CONSTEXPR auto arg(basic_string_view<char_type> name) -> format_arg {\n    return args_.get(name);\n  }\n  FMT_CONSTEXPR auto arg_id(basic_string_view<char_type> name) -> int {\n    return args_.get_id(name);\n  }\n  auto args() const -> const basic_format_args<basic_format_context>& {\n    return args_;\n  }\n\n  FMT_CONSTEXPR auto error_handler() -> detail::error_handler { return {}; }\n  void on_error(const char* message) { error_handler().on_error(message); }\n\n  // Returns an iterator to the beginning of the output range.\n  FMT_CONSTEXPR auto out() -> iterator { return out_; }\n\n  // Advances the begin iterator to ``it``.\n  void advance_to(iterator it) {\n    if (!detail::is_back_insert_iterator<iterator>()) out_ = it;\n  }\n\n  FMT_CONSTEXPR auto locale() -> detail::locale_ref { return loc_; }\n};\n\ntemplate <typename Char>\nusing buffer_context =\n    basic_format_context<detail::buffer_appender<Char>, Char>;\nusing format_context = buffer_context<char>;\n\n// Workaround an alias issue: https://stackoverflow.com/q/62767544/471164.\n#define FMT_BUFFER_CONTEXT(Char) \\\n  basic_format_context<detail::buffer_appender<Char>, Char>\n\ntemplate <typename T, typename Char = char>\nusing is_formattable = bool_constant<\n    !std::is_base_of<detail::unformattable,\n                     decltype(detail::arg_mapper<buffer_context<Char>>().map(\n                         std::declval<T>()))>::value &&\n    !detail::has_fallback_formatter<T, Char>::value>;\n\n/**\n  \\rst\n  An array of references to arguments. It can be implicitly converted into\n  `~fmt::basic_format_args` for passing into type-erased formatting functions\n  such as `~fmt::vformat`.\n  \\endrst\n */\ntemplate <typename Context, typename... Args>\nclass format_arg_store\n#if FMT_GCC_VERSION && FMT_GCC_VERSION < 409\n    // Workaround a GCC template argument substitution bug.\n    : public basic_format_args<Context>\n#endif\n{\n private:\n  static const size_t num_args = sizeof...(Args);\n  static const size_t num_named_args = detail::count_named_args<Args...>();\n  static const bool is_packed = num_args <= detail::max_packed_args;\n\n  using value_type = conditional_t<is_packed, detail::value<Context>,\n                                   basic_format_arg<Context>>;\n\n  detail::arg_data<value_type, typename Context::char_type, num_args,\n                   num_named_args>\n      data_;\n\n  friend class basic_format_args<Context>;\n\n  static constexpr unsigned long long desc =\n      (is_packed ? detail::encode_types<Context, Args...>()\n                 : detail::is_unpacked_bit | num_args) |\n      (num_named_args != 0\n           ? static_cast<unsigned long long>(detail::has_named_args_bit)\n           : 0);\n\n public:\n  template <typename... T>\n  FMT_CONSTEXPR FMT_INLINE format_arg_store(T&&... args)\n      :\n#if FMT_GCC_VERSION && FMT_GCC_VERSION < 409\n        basic_format_args<Context>(*this),\n#endif\n        data_{detail::make_arg<\n            is_packed, Context,\n            detail::mapped_type_constant<remove_cvref_t<T>, Context>::value>(\n            FMT_FORWARD(args))...} {\n    detail::init_named_args(data_.named_args(), 0, 0, args...);\n  }\n};\n\n/**\n  \\rst\n  Constructs a `~fmt::format_arg_store` object that contains references to\n  arguments and can be implicitly converted to `~fmt::format_args`. `Context`\n  can be omitted in which case it defaults to `~fmt::context`.\n  See `~fmt::arg` for lifetime considerations.\n  \\endrst\n */\ntemplate <typename Context = format_context, typename... Args>\nconstexpr auto make_format_args(Args&&... args)\n    -> format_arg_store<Context, remove_cvref_t<Args>...> {\n  return {FMT_FORWARD(args)...};\n}\n\n/**\n  \\rst\n  Returns a named argument to be used in a formatting function.\n  It should only be used in a call to a formatting function or\n  `dynamic_format_arg_store::push_back`.\n\n  **Example**::\n\n    fmt::print(\"Elapsed time: {s:.2f} seconds\", fmt::arg(\"s\", 1.23));\n  \\endrst\n */\ntemplate <typename Char, typename T>\ninline auto arg(const Char* name, const T& arg) -> detail::named_arg<Char, T> {\n  static_assert(!detail::is_named_arg<T>(), \"nested named arguments\");\n  return {name, arg};\n}\n\n/**\n  \\rst\n  A view of a collection of formatting arguments. To avoid lifetime issues it\n  should only be used as a parameter type in type-erased functions such as\n  ``vformat``::\n\n    void vlog(string_view format_str, format_args args);  // OK\n    format_args args = make_format_args(42);  // Error: dangling reference\n  \\endrst\n */\ntemplate <typename Context> class basic_format_args {\n public:\n  using size_type = int;\n  using format_arg = basic_format_arg<Context>;\n\n private:\n  // A descriptor that contains information about formatting arguments.\n  // If the number of arguments is less or equal to max_packed_args then\n  // argument types are passed in the descriptor. This reduces binary code size\n  // per formatting function call.\n  unsigned long long desc_;\n  union {\n    // If is_packed() returns true then argument values are stored in values_;\n    // otherwise they are stored in args_. This is done to improve cache\n    // locality and reduce compiled code size since storing larger objects\n    // may require more code (at least on x86-64) even if the same amount of\n    // data is actually copied to stack. It saves ~10% on the bloat test.\n    const detail::value<Context>* values_;\n    const format_arg* args_;\n  };\n\n  constexpr auto is_packed() const -> bool {\n    return (desc_ & detail::is_unpacked_bit) == 0;\n  }\n  auto has_named_args() const -> bool {\n    return (desc_ & detail::has_named_args_bit) != 0;\n  }\n\n  FMT_CONSTEXPR auto type(int index) const -> detail::type {\n    int shift = index * detail::packed_arg_bits;\n    unsigned int mask = (1 << detail::packed_arg_bits) - 1;\n    return static_cast<detail::type>((desc_ >> shift) & mask);\n  }\n\n  constexpr FMT_INLINE basic_format_args(unsigned long long desc,\n                                         const detail::value<Context>* values)\n      : desc_(desc), values_(values) {}\n  constexpr basic_format_args(unsigned long long desc, const format_arg* args)\n      : desc_(desc), args_(args) {}\n\n public:\n  constexpr basic_format_args() : desc_(0), args_(nullptr) {}\n\n  /**\n   \\rst\n   Constructs a `basic_format_args` object from `~fmt::format_arg_store`.\n   \\endrst\n   */\n  template <typename... Args>\n  constexpr FMT_INLINE basic_format_args(\n      const format_arg_store<Context, Args...>& store)\n      : basic_format_args(format_arg_store<Context, Args...>::desc,\n                          store.data_.args()) {}\n\n  /**\n   \\rst\n   Constructs a `basic_format_args` object from\n   `~fmt::dynamic_format_arg_store`.\n   \\endrst\n   */\n  constexpr FMT_INLINE basic_format_args(\n      const dynamic_format_arg_store<Context>& store)\n      : basic_format_args(store.get_types(), store.data()) {}\n\n  /**\n   \\rst\n   Constructs a `basic_format_args` object from a dynamic set of arguments.\n   \\endrst\n   */\n  constexpr basic_format_args(const format_arg* args, int count)\n      : basic_format_args(detail::is_unpacked_bit | detail::to_unsigned(count),\n                          args) {}\n\n  /** Returns the argument with the specified id. */\n  FMT_CONSTEXPR auto get(int id) const -> format_arg {\n    format_arg arg;\n    if (!is_packed()) {\n      if (id < max_size()) arg = args_[id];\n      return arg;\n    }\n    if (id >= detail::max_packed_args) return arg;\n    arg.type_ = type(id);\n    if (arg.type_ == detail::type::none_type) return arg;\n    arg.value_ = values_[id];\n    return arg;\n  }\n\n  template <typename Char>\n  auto get(basic_string_view<Char> name) const -> format_arg {\n    int id = get_id(name);\n    return id >= 0 ? get(id) : format_arg();\n  }\n\n  template <typename Char>\n  auto get_id(basic_string_view<Char> name) const -> int {\n    if (!has_named_args()) return -1;\n    const auto& named_args =\n        (is_packed() ? values_[-1] : args_[-1].value_).named_args;\n    for (size_t i = 0; i < named_args.size; ++i) {\n      if (named_args.data[i].name == name) return named_args.data[i].id;\n    }\n    return -1;\n  }\n\n  auto max_size() const -> int {\n    unsigned long long max_packed = detail::max_packed_args;\n    return static_cast<int>(is_packed() ? max_packed\n                                        : desc_ & ~detail::is_unpacked_bit);\n  }\n};\n\n/** An alias to ``basic_format_args<format_context>``. */\n// A separate type would result in shorter symbols but break ABI compatibility\n// between clang and gcc on ARM (#1919).\nusing format_args = basic_format_args<format_context>;\n\n// We cannot use enum classes as bit fields because of a gcc bug, so we put them\n// in namespaces instead (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61414).\n// Additionally, if an underlying type is specified, older gcc incorrectly warns\n// that the type is too small. Both bugs are fixed in gcc 9.3.\n#if FMT_GCC_VERSION && FMT_GCC_VERSION < 903\n#  define FMT_ENUM_UNDERLYING_TYPE(type)\n#else\n#  define FMT_ENUM_UNDERLYING_TYPE(type) : type\n#endif\nnamespace align {\nenum type FMT_ENUM_UNDERLYING_TYPE(unsigned char){none, left, right, center,\n                                                  numeric};\n}\nusing align_t = align::type;\nnamespace sign {\nenum type FMT_ENUM_UNDERLYING_TYPE(unsigned char){none, minus, plus, space};\n}\nusing sign_t = sign::type;\n\nFMT_BEGIN_DETAIL_NAMESPACE\n\n// Workaround an array initialization issue in gcc 4.8.\ntemplate <typename Char> struct fill_t {\n private:\n  enum { max_size = 4 };\n  Char data_[max_size] = {Char(' '), Char(0), Char(0), Char(0)};\n  unsigned char size_ = 1;\n\n public:\n  FMT_CONSTEXPR void operator=(basic_string_view<Char> s) {\n    auto size = s.size();\n    if (size > max_size) return throw_format_error(\"invalid fill\");\n    for (size_t i = 0; i < size; ++i) data_[i] = s[i];\n    size_ = static_cast<unsigned char>(size);\n  }\n\n  constexpr auto size() const -> size_t { return size_; }\n  constexpr auto data() const -> const Char* { return data_; }\n\n  FMT_CONSTEXPR auto operator[](size_t index) -> Char& { return data_[index]; }\n  FMT_CONSTEXPR auto operator[](size_t index) const -> const Char& {\n    return data_[index];\n  }\n};\nFMT_END_DETAIL_NAMESPACE\n\nenum class presentation_type : unsigned char {\n  none,\n  // Integer types should go first,\n  dec,             // 'd'\n  oct,             // 'o'\n  hex_lower,       // 'x'\n  hex_upper,       // 'X'\n  bin_lower,       // 'b'\n  bin_upper,       // 'B'\n  hexfloat_lower,  // 'a'\n  hexfloat_upper,  // 'A'\n  exp_lower,       // 'e'\n  exp_upper,       // 'E'\n  fixed_lower,     // 'f'\n  fixed_upper,     // 'F'\n  general_lower,   // 'g'\n  general_upper,   // 'G'\n  chr,             // 'c'\n  string,          // 's'\n  pointer,         // 'p'\n  debug            // '?'\n};\n\n// Format specifiers for built-in and string types.\ntemplate <typename Char> struct basic_format_specs {\n  int width;\n  int precision;\n  presentation_type type;\n  align_t align : 4;\n  sign_t sign : 3;\n  bool alt : 1;  // Alternate form ('#').\n  bool localized : 1;\n  detail::fill_t<Char> fill;\n\n  constexpr basic_format_specs()\n      : width(0),\n        precision(-1),\n        type(presentation_type::none),\n        align(align::none),\n        sign(sign::none),\n        alt(false),\n        localized(false) {}\n};\n\nusing format_specs = basic_format_specs<char>;\n\nFMT_BEGIN_DETAIL_NAMESPACE\n\nenum class arg_id_kind { none, index, name };\n\n// An argument reference.\ntemplate <typename Char> struct arg_ref {\n  FMT_CONSTEXPR arg_ref() : kind(arg_id_kind::none), val() {}\n\n  FMT_CONSTEXPR explicit arg_ref(int index)\n      : kind(arg_id_kind::index), val(index) {}\n  FMT_CONSTEXPR explicit arg_ref(basic_string_view<Char> name)\n      : kind(arg_id_kind::name), val(name) {}\n\n  FMT_CONSTEXPR auto operator=(int idx) -> arg_ref& {\n    kind = arg_id_kind::index;\n    val.index = idx;\n    return *this;\n  }\n\n  arg_id_kind kind;\n  union value {\n    FMT_CONSTEXPR value(int id = 0) : index{id} {}\n    FMT_CONSTEXPR value(basic_string_view<Char> n) : name(n) {}\n\n    int index;\n    basic_string_view<Char> name;\n  } val;\n};\n\n// Format specifiers with width and precision resolved at formatting rather\n// than parsing time to allow re-using the same parsed specifiers with\n// different sets of arguments (precompilation of format strings).\ntemplate <typename Char>\nstruct dynamic_format_specs : basic_format_specs<Char> {\n  arg_ref<Char> width_ref;\n  arg_ref<Char> precision_ref;\n};\n\nstruct auto_id {};\n\n// A format specifier handler that sets fields in basic_format_specs.\ntemplate <typename Char> class specs_setter {\n protected:\n  basic_format_specs<Char>& specs_;\n\n public:\n  explicit FMT_CONSTEXPR specs_setter(basic_format_specs<Char>& specs)\n      : specs_(specs) {}\n\n  FMT_CONSTEXPR specs_setter(const specs_setter& other)\n      : specs_(other.specs_) {}\n\n  FMT_CONSTEXPR void on_align(align_t align) { specs_.align = align; }\n  FMT_CONSTEXPR void on_fill(basic_string_view<Char> fill) {\n    specs_.fill = fill;\n  }\n  FMT_CONSTEXPR void on_sign(sign_t s) { specs_.sign = s; }\n  FMT_CONSTEXPR void on_hash() { specs_.alt = true; }\n  FMT_CONSTEXPR void on_localized() { specs_.localized = true; }\n\n  FMT_CONSTEXPR void on_zero() {\n    if (specs_.align == align::none) specs_.align = align::numeric;\n    specs_.fill[0] = Char('0');\n  }\n\n  FMT_CONSTEXPR void on_width(int width) { specs_.width = width; }\n  FMT_CONSTEXPR void on_precision(int precision) {\n    specs_.precision = precision;\n  }\n  FMT_CONSTEXPR void end_precision() {}\n\n  FMT_CONSTEXPR void on_type(presentation_type type) { specs_.type = type; }\n};\n\n// Format spec handler that saves references to arguments representing dynamic\n// width and precision to be resolved at formatting time.\ntemplate <typename ParseContext>\nclass dynamic_specs_handler\n    : public specs_setter<typename ParseContext::char_type> {\n public:\n  using char_type = typename ParseContext::char_type;\n\n  FMT_CONSTEXPR dynamic_specs_handler(dynamic_format_specs<char_type>& specs,\n                                      ParseContext& ctx)\n      : specs_setter<char_type>(specs), specs_(specs), context_(ctx) {}\n\n  FMT_CONSTEXPR dynamic_specs_handler(const dynamic_specs_handler& other)\n      : specs_setter<char_type>(other),\n        specs_(other.specs_),\n        context_(other.context_) {}\n\n  template <typename Id> FMT_CONSTEXPR void on_dynamic_width(Id arg_id) {\n    specs_.width_ref = make_arg_ref(arg_id);\n  }\n\n  template <typename Id> FMT_CONSTEXPR void on_dynamic_precision(Id arg_id) {\n    specs_.precision_ref = make_arg_ref(arg_id);\n  }\n\n  FMT_CONSTEXPR void on_error(const char* message) {\n    context_.on_error(message);\n  }\n\n private:\n  dynamic_format_specs<char_type>& specs_;\n  ParseContext& context_;\n\n  using arg_ref_type = arg_ref<char_type>;\n\n  FMT_CONSTEXPR auto make_arg_ref(int arg_id) -> arg_ref_type {\n    context_.check_arg_id(arg_id);\n    context_.check_dynamic_spec(arg_id);\n    return arg_ref_type(arg_id);\n  }\n\n  FMT_CONSTEXPR auto make_arg_ref(auto_id) -> arg_ref_type {\n    int arg_id = context_.next_arg_id();\n    context_.check_dynamic_spec(arg_id);\n    return arg_ref_type(arg_id);\n  }\n\n  FMT_CONSTEXPR auto make_arg_ref(basic_string_view<char_type> arg_id)\n      -> arg_ref_type {\n    context_.check_arg_id(arg_id);\n    basic_string_view<char_type> format_str(\n        context_.begin(), to_unsigned(context_.end() - context_.begin()));\n    return arg_ref_type(arg_id);\n  }\n};\n\ntemplate <typename Char> constexpr bool is_ascii_letter(Char c) {\n  return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');\n}\n\n// Converts a character to ASCII. Returns a number > 127 on conversion failure.\ntemplate <typename Char, FMT_ENABLE_IF(std::is_integral<Char>::value)>\nconstexpr auto to_ascii(Char c) -> Char {\n  return c;\n}\ntemplate <typename Char, FMT_ENABLE_IF(std::is_enum<Char>::value)>\nconstexpr auto to_ascii(Char c) -> underlying_t<Char> {\n  return c;\n}\n\nFMT_CONSTEXPR inline auto code_point_length_impl(char c) -> int {\n  return \"\\1\\1\\1\\1\\1\\1\\1\\1\\1\\1\\1\\1\\1\\1\\1\\1\\0\\0\\0\\0\\0\\0\\0\\0\\2\\2\\2\\2\\3\\3\\4\"\n      [static_cast<unsigned char>(c) >> 3];\n}\n\ntemplate <typename Char>\nFMT_CONSTEXPR auto code_point_length(const Char* begin) -> int {\n  if (const_check(sizeof(Char) != 1)) return 1;\n  int len = code_point_length_impl(static_cast<char>(*begin));\n\n  // Compute the pointer to the next character early so that the next\n  // iteration can start working on the next character. Neither Clang\n  // nor GCC figure out this reordering on their own.\n  return len + !len;\n}\n\n// Return the result via the out param to workaround gcc bug 77539.\ntemplate <bool IS_CONSTEXPR, typename T, typename Ptr = const T*>\nFMT_CONSTEXPR auto find(Ptr first, Ptr last, T value, Ptr& out) -> bool {\n  for (out = first; out != last; ++out) {\n    if (*out == value) return true;\n  }\n  return false;\n}\n\ntemplate <>\ninline auto find<false, char>(const char* first, const char* last, char value,\n                              const char*& out) -> bool {\n  out = static_cast<const char*>(\n      std::memchr(first, value, to_unsigned(last - first)));\n  return out != nullptr;\n}\n\n// Parses the range [begin, end) as an unsigned integer. This function assumes\n// that the range is non-empty and the first character is a digit.\ntemplate <typename Char>\nFMT_CONSTEXPR auto parse_nonnegative_int(const Char*& begin, const Char* end,\n                                         int error_value) noexcept -> int {\n  FMT_ASSERT(begin != end && '0' <= *begin && *begin <= '9', \"\");\n  unsigned value = 0, prev = 0;\n  auto p = begin;\n  do {\n    prev = value;\n    value = value * 10 + unsigned(*p - '0');\n    ++p;\n  } while (p != end && '0' <= *p && *p <= '9');\n  auto num_digits = p - begin;\n  begin = p;\n  if (num_digits <= std::numeric_limits<int>::digits10)\n    return static_cast<int>(value);\n  // Check for overflow.\n  const unsigned max = to_unsigned((std::numeric_limits<int>::max)());\n  return num_digits == std::numeric_limits<int>::digits10 + 1 &&\n                 prev * 10ull + unsigned(p[-1] - '0') <= max\n             ? static_cast<int>(value)\n             : error_value;\n}\n\n// Parses fill and alignment.\ntemplate <typename Char, typename Handler>\nFMT_CONSTEXPR auto parse_align(const Char* begin, const Char* end,\n                               Handler&& handler) -> const Char* {\n  FMT_ASSERT(begin != end, \"\");\n  auto align = align::none;\n  auto p = begin + code_point_length(begin);\n  if (end - p <= 0) p = begin;\n  for (;;) {\n    switch (to_ascii(*p)) {\n    case '<':\n      align = align::left;\n      break;\n    case '>':\n      align = align::right;\n      break;\n    case '^':\n      align = align::center;\n      break;\n    default:\n      break;\n    }\n    if (align != align::none) {\n      if (p != begin) {\n        auto c = *begin;\n        if (c == '{')\n          return handler.on_error(\"invalid fill character '{'\"), begin;\n        handler.on_fill(basic_string_view<Char>(begin, to_unsigned(p - begin)));\n        begin = p + 1;\n      } else\n        ++begin;\n      handler.on_align(align);\n      break;\n    } else if (p == begin) {\n      break;\n    }\n    p = begin;\n  }\n  return begin;\n}\n\ntemplate <typename Char> FMT_CONSTEXPR bool is_name_start(Char c) {\n  return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || '_' == c;\n}\n\ntemplate <typename Char, typename IDHandler>\nFMT_CONSTEXPR auto do_parse_arg_id(const Char* begin, const Char* end,\n                                   IDHandler&& handler) -> const Char* {\n  FMT_ASSERT(begin != end, \"\");\n  Char c = *begin;\n  if (c >= '0' && c <= '9') {\n    int index = 0;\n    if (c != '0')\n      index =\n          parse_nonnegative_int(begin, end, (std::numeric_limits<int>::max)());\n    else\n      ++begin;\n    if (begin == end || (*begin != '}' && *begin != ':'))\n      handler.on_error(\"invalid format string\");\n    else\n      handler(index);\n    return begin;\n  }\n  if (!is_name_start(c)) {\n    handler.on_error(\"invalid format string\");\n    return begin;\n  }\n  auto it = begin;\n  do {\n    ++it;\n  } while (it != end && (is_name_start(c = *it) || ('0' <= c && c <= '9')));\n  handler(basic_string_view<Char>(begin, to_unsigned(it - begin)));\n  return it;\n}\n\ntemplate <typename Char, typename IDHandler>\nFMT_CONSTEXPR FMT_INLINE auto parse_arg_id(const Char* begin, const Char* end,\n                                           IDHandler&& handler) -> const Char* {\n  Char c = *begin;\n  if (c != '}' && c != ':') return do_parse_arg_id(begin, end, handler);\n  handler();\n  return begin;\n}\n\ntemplate <typename Char, typename Handler>\nFMT_CONSTEXPR auto parse_width(const Char* begin, const Char* end,\n                               Handler&& handler) -> const Char* {\n  using detail::auto_id;\n  struct width_adapter {\n    Handler& handler;\n\n    FMT_CONSTEXPR void operator()() { handler.on_dynamic_width(auto_id()); }\n    FMT_CONSTEXPR void operator()(int id) { handler.on_dynamic_width(id); }\n    FMT_CONSTEXPR void operator()(basic_string_view<Char> id) {\n      handler.on_dynamic_width(id);\n    }\n    FMT_CONSTEXPR void on_error(const char* message) {\n      if (message) handler.on_error(message);\n    }\n  };\n\n  FMT_ASSERT(begin != end, \"\");\n  if ('0' <= *begin && *begin <= '9') {\n    int width = parse_nonnegative_int(begin, end, -1);\n    if (width != -1)\n      handler.on_width(width);\n    else\n      handler.on_error(\"number is too big\");\n  } else if (*begin == '{') {\n    ++begin;\n    if (begin != end) begin = parse_arg_id(begin, end, width_adapter{handler});\n    if (begin == end || *begin != '}')\n      return handler.on_error(\"invalid format string\"), begin;\n    ++begin;\n  }\n  return begin;\n}\n\ntemplate <typename Char, typename Handler>\nFMT_CONSTEXPR auto parse_precision(const Char* begin, const Char* end,\n                                   Handler&& handler) -> const Char* {\n  using detail::auto_id;\n  struct precision_adapter {\n    Handler& handler;\n\n    FMT_CONSTEXPR void operator()() { handler.on_dynamic_precision(auto_id()); }\n    FMT_CONSTEXPR void operator()(int id) { handler.on_dynamic_precision(id); }\n    FMT_CONSTEXPR void operator()(basic_string_view<Char> id) {\n      handler.on_dynamic_precision(id);\n    }\n    FMT_CONSTEXPR void on_error(const char* message) {\n      if (message) handler.on_error(message);\n    }\n  };\n\n  ++begin;\n  auto c = begin != end ? *begin : Char();\n  if ('0' <= c && c <= '9') {\n    auto precision = parse_nonnegative_int(begin, end, -1);\n    if (precision != -1)\n      handler.on_precision(precision);\n    else\n      handler.on_error(\"number is too big\");\n  } else if (c == '{') {\n    ++begin;\n    if (begin != end)\n      begin = parse_arg_id(begin, end, precision_adapter{handler});\n    if (begin == end || *begin++ != '}')\n      return handler.on_error(\"invalid format string\"), begin;\n  } else {\n    return handler.on_error(\"missing precision specifier\"), begin;\n  }\n  handler.end_precision();\n  return begin;\n}\n\ntemplate <typename Char>\nFMT_CONSTEXPR auto parse_presentation_type(Char type) -> presentation_type {\n  switch (to_ascii(type)) {\n  case 'd':\n    return presentation_type::dec;\n  case 'o':\n    return presentation_type::oct;\n  case 'x':\n    return presentation_type::hex_lower;\n  case 'X':\n    return presentation_type::hex_upper;\n  case 'b':\n    return presentation_type::bin_lower;\n  case 'B':\n    return presentation_type::bin_upper;\n  case 'a':\n    return presentation_type::hexfloat_lower;\n  case 'A':\n    return presentation_type::hexfloat_upper;\n  case 'e':\n    return presentation_type::exp_lower;\n  case 'E':\n    return presentation_type::exp_upper;\n  case 'f':\n    return presentation_type::fixed_lower;\n  case 'F':\n    return presentation_type::fixed_upper;\n  case 'g':\n    return presentation_type::general_lower;\n  case 'G':\n    return presentation_type::general_upper;\n  case 'c':\n    return presentation_type::chr;\n  case 's':\n    return presentation_type::string;\n  case 'p':\n    return presentation_type::pointer;\n  case '?':\n    return presentation_type::debug;\n  default:\n    return presentation_type::none;\n  }\n}\n\n// Parses standard format specifiers and sends notifications about parsed\n// components to handler.\ntemplate <typename Char, typename SpecHandler>\nFMT_CONSTEXPR FMT_INLINE auto parse_format_specs(const Char* begin,\n                                                 const Char* end,\n                                                 SpecHandler&& handler)\n    -> const Char* {\n  if (1 < end - begin && begin[1] == '}' && is_ascii_letter(*begin) &&\n      *begin != 'L') {\n    presentation_type type = parse_presentation_type(*begin++);\n    if (type == presentation_type::none)\n      handler.on_error(\"invalid type specifier\");\n    handler.on_type(type);\n    return begin;\n  }\n\n  if (begin == end) return begin;\n\n  begin = parse_align(begin, end, handler);\n  if (begin == end) return begin;\n\n  // Parse sign.\n  switch (to_ascii(*begin)) {\n  case '+':\n    handler.on_sign(sign::plus);\n    ++begin;\n    break;\n  case '-':\n    handler.on_sign(sign::minus);\n    ++begin;\n    break;\n  case ' ':\n    handler.on_sign(sign::space);\n    ++begin;\n    break;\n  default:\n    break;\n  }\n  if (begin == end) return begin;\n\n  if (*begin == '#') {\n    handler.on_hash();\n    if (++begin == end) return begin;\n  }\n\n  // Parse zero flag.\n  if (*begin == '0') {\n    handler.on_zero();\n    if (++begin == end) return begin;\n  }\n\n  begin = parse_width(begin, end, handler);\n  if (begin == end) return begin;\n\n  // Parse precision.\n  if (*begin == '.') {\n    begin = parse_precision(begin, end, handler);\n    if (begin == end) return begin;\n  }\n\n  if (*begin == 'L') {\n    handler.on_localized();\n    ++begin;\n  }\n\n  // Parse type.\n  if (begin != end && *begin != '}') {\n    presentation_type type = parse_presentation_type(*begin++);\n    if (type == presentation_type::none)\n      handler.on_error(\"invalid type specifier\");\n    handler.on_type(type);\n  }\n  return begin;\n}\n\ntemplate <typename Char, typename Handler>\nFMT_CONSTEXPR auto parse_replacement_field(const Char* begin, const Char* end,\n                                           Handler&& handler) -> const Char* {\n  struct id_adapter {\n    Handler& handler;\n    int arg_id;\n\n    FMT_CONSTEXPR void operator()() { arg_id = handler.on_arg_id(); }\n    FMT_CONSTEXPR void operator()(int id) { arg_id = handler.on_arg_id(id); }\n    FMT_CONSTEXPR void operator()(basic_string_view<Char> id) {\n      arg_id = handler.on_arg_id(id);\n    }\n    FMT_CONSTEXPR void on_error(const char* message) {\n      if (message) handler.on_error(message);\n    }\n  };\n\n  ++begin;\n  if (begin == end) return handler.on_error(\"invalid format string\"), end;\n  if (*begin == '}') {\n    handler.on_replacement_field(handler.on_arg_id(), begin);\n  } else if (*begin == '{') {\n    handler.on_text(begin, begin + 1);\n  } else {\n    auto adapter = id_adapter{handler, 0};\n    begin = parse_arg_id(begin, end, adapter);\n    Char c = begin != end ? *begin : Char();\n    if (c == '}') {\n      handler.on_replacement_field(adapter.arg_id, begin);\n    } else if (c == ':') {\n      begin = handler.on_format_specs(adapter.arg_id, begin + 1, end);\n      if (begin == end || *begin != '}')\n        return handler.on_error(\"unknown format specifier\"), end;\n    } else {\n      return handler.on_error(\"missing '}' in format string\"), end;\n    }\n  }\n  return begin + 1;\n}\n\ntemplate <bool IS_CONSTEXPR, typename Char, typename Handler>\nFMT_CONSTEXPR FMT_INLINE void parse_format_string(\n    basic_string_view<Char> format_str, Handler&& handler) {\n  // Workaround a name-lookup bug in MSVC's modules implementation.\n  using detail::find;\n\n  auto begin = format_str.data();\n  auto end = begin + format_str.size();\n  if (end - begin < 32) {\n    // Use a simple loop instead of memchr for small strings.\n    const Char* p = begin;\n    while (p != end) {\n      auto c = *p++;\n      if (c == '{') {\n        handler.on_text(begin, p - 1);\n        begin = p = parse_replacement_field(p - 1, end, handler);\n      } else if (c == '}') {\n        if (p == end || *p != '}')\n          return handler.on_error(\"unmatched '}' in format string\");\n        handler.on_text(begin, p);\n        begin = ++p;\n      }\n    }\n    handler.on_text(begin, end);\n    return;\n  }\n  struct writer {\n    FMT_CONSTEXPR void operator()(const Char* from, const Char* to) {\n      if (from == to) return;\n      for (;;) {\n        const Char* p = nullptr;\n        if (!find<IS_CONSTEXPR>(from, to, Char('}'), p))\n          return handler_.on_text(from, to);\n        ++p;\n        if (p == to || *p != '}')\n          return handler_.on_error(\"unmatched '}' in format string\");\n        handler_.on_text(from, p);\n        from = p + 1;\n      }\n    }\n    Handler& handler_;\n  } write = {handler};\n  while (begin != end) {\n    // Doing two passes with memchr (one for '{' and another for '}') is up to\n    // 2.5x faster than the naive one-pass implementation on big format strings.\n    const Char* p = begin;\n    if (*begin != '{' && !find<IS_CONSTEXPR>(begin + 1, end, Char('{'), p))\n      return write(begin, end);\n    write(begin, p);\n    begin = parse_replacement_field(p, end, handler);\n  }\n}\n\ntemplate <typename T, bool = is_named_arg<T>::value> struct strip_named_arg {\n  using type = T;\n};\ntemplate <typename T> struct strip_named_arg<T, true> {\n  using type = remove_cvref_t<decltype(T::value)>;\n};\n\ntemplate <typename T, typename ParseContext>\nFMT_CONSTEXPR auto parse_format_specs(ParseContext& ctx)\n    -> decltype(ctx.begin()) {\n  using char_type = typename ParseContext::char_type;\n  using context = buffer_context<char_type>;\n  using stripped_type = typename strip_named_arg<T>::type;\n  using mapped_type = conditional_t<\n      mapped_type_constant<T, context>::value != type::custom_type,\n      decltype(arg_mapper<context>().map(std::declval<const T&>())),\n      stripped_type>;\n  auto f = conditional_t<has_formatter<mapped_type, context>::value,\n                         formatter<mapped_type, char_type>,\n                         fallback_formatter<stripped_type, char_type>>();\n  return f.parse(ctx);\n}\n\ntemplate <typename ErrorHandler>\nFMT_CONSTEXPR void check_int_type_spec(presentation_type type,\n                                       ErrorHandler&& eh) {\n  if (type > presentation_type::bin_upper && type != presentation_type::chr)\n    eh.on_error(\"invalid type specifier\");\n}\n\n// Checks char specs and returns true if the type spec is char (and not int).\ntemplate <typename Char, typename ErrorHandler = error_handler>\nFMT_CONSTEXPR auto check_char_specs(const basic_format_specs<Char>& specs,\n                                    ErrorHandler&& eh = {}) -> bool {\n  if (specs.type != presentation_type::none &&\n      specs.type != presentation_type::chr &&\n      specs.type != presentation_type::debug) {\n    check_int_type_spec(specs.type, eh);\n    return false;\n  }\n  if (specs.align == align::numeric || specs.sign != sign::none || specs.alt)\n    eh.on_error(\"invalid format specifier for char\");\n  return true;\n}\n\n// A floating-point presentation format.\nenum class float_format : unsigned char {\n  general,  // General: exponent notation or fixed point based on magnitude.\n  exp,      // Exponent notation with the default precision of 6, e.g. 1.2e-3.\n  fixed,    // Fixed point with the default precision of 6, e.g. 0.0012.\n  hex\n};\n\nstruct float_specs {\n  int precision;\n  float_format format : 8;\n  sign_t sign : 8;\n  bool upper : 1;\n  bool locale : 1;\n  bool binary32 : 1;\n  bool showpoint : 1;\n};\n\ntemplate <typename ErrorHandler = error_handler, typename Char>\nFMT_CONSTEXPR auto parse_float_type_spec(const basic_format_specs<Char>& specs,\n                                         ErrorHandler&& eh = {})\n    -> float_specs {\n  auto result = float_specs();\n  result.showpoint = specs.alt;\n  result.locale = specs.localized;\n  switch (specs.type) {\n  case presentation_type::none:\n    result.format = float_format::general;\n    break;\n  case presentation_type::general_upper:\n    result.upper = true;\n    FMT_FALLTHROUGH;\n  case presentation_type::general_lower:\n    result.format = float_format::general;\n    break;\n  case presentation_type::exp_upper:\n    result.upper = true;\n    FMT_FALLTHROUGH;\n  case presentation_type::exp_lower:\n    result.format = float_format::exp;\n    result.showpoint |= specs.precision != 0;\n    break;\n  case presentation_type::fixed_upper:\n    result.upper = true;\n    FMT_FALLTHROUGH;\n  case presentation_type::fixed_lower:\n    result.format = float_format::fixed;\n    result.showpoint |= specs.precision != 0;\n    break;\n  case presentation_type::hexfloat_upper:\n    result.upper = true;\n    FMT_FALLTHROUGH;\n  case presentation_type::hexfloat_lower:\n    result.format = float_format::hex;\n    break;\n  default:\n    eh.on_error(\"invalid type specifier\");\n    break;\n  }\n  return result;\n}\n\ntemplate <typename ErrorHandler = error_handler>\nFMT_CONSTEXPR auto check_cstring_type_spec(presentation_type type,\n                                           ErrorHandler&& eh = {}) -> bool {\n  if (type == presentation_type::none || type == presentation_type::string ||\n      type == presentation_type::debug)\n    return true;\n  if (type != presentation_type::pointer) eh.on_error(\"invalid type specifier\");\n  return false;\n}\n\ntemplate <typename ErrorHandler = error_handler>\nFMT_CONSTEXPR void check_string_type_spec(presentation_type type,\n                                          ErrorHandler&& eh = {}) {\n  if (type != presentation_type::none && type != presentation_type::string &&\n      type != presentation_type::debug)\n    eh.on_error(\"invalid type specifier\");\n}\n\ntemplate <typename ErrorHandler>\nFMT_CONSTEXPR void check_pointer_type_spec(presentation_type type,\n                                           ErrorHandler&& eh) {\n  if (type != presentation_type::none && type != presentation_type::pointer)\n    eh.on_error(\"invalid type specifier\");\n}\n\n// A parse_format_specs handler that checks if specifiers are consistent with\n// the argument type.\ntemplate <typename Handler> class specs_checker : public Handler {\n private:\n  detail::type arg_type_;\n\n  FMT_CONSTEXPR void require_numeric_argument() {\n    if (!is_arithmetic_type(arg_type_))\n      this->on_error(\"format specifier requires numeric argument\");\n  }\n\n public:\n  FMT_CONSTEXPR specs_checker(const Handler& handler, detail::type arg_type)\n      : Handler(handler), arg_type_(arg_type) {}\n\n  FMT_CONSTEXPR void on_align(align_t align) {\n    if (align == align::numeric) require_numeric_argument();\n    Handler::on_align(align);\n  }\n\n  FMT_CONSTEXPR void on_sign(sign_t s) {\n    require_numeric_argument();\n    if (is_integral_type(arg_type_) && arg_type_ != type::int_type &&\n        arg_type_ != type::long_long_type && arg_type_ != type::int128_type &&\n        arg_type_ != type::char_type) {\n      this->on_error(\"format specifier requires signed argument\");\n    }\n    Handler::on_sign(s);\n  }\n\n  FMT_CONSTEXPR void on_hash() {\n    require_numeric_argument();\n    Handler::on_hash();\n  }\n\n  FMT_CONSTEXPR void on_localized() {\n    require_numeric_argument();\n    Handler::on_localized();\n  }\n\n  FMT_CONSTEXPR void on_zero() {\n    require_numeric_argument();\n    Handler::on_zero();\n  }\n\n  FMT_CONSTEXPR void end_precision() {\n    if (is_integral_type(arg_type_) || arg_type_ == type::pointer_type)\n      this->on_error(\"precision not allowed for this argument type\");\n  }\n};\n\nconstexpr int invalid_arg_index = -1;\n\n#if FMT_USE_NONTYPE_TEMPLATE_ARGS\ntemplate <int N, typename T, typename... Args, typename Char>\nconstexpr auto get_arg_index_by_name(basic_string_view<Char> name) -> int {\n  if constexpr (detail::is_statically_named_arg<T>()) {\n    if (name == T::name) return N;\n  }\n  if constexpr (sizeof...(Args) > 0)\n    return get_arg_index_by_name<N + 1, Args...>(name);\n  (void)name;  // Workaround an MSVC bug about \"unused\" parameter.\n  return invalid_arg_index;\n}\n#endif\n\ntemplate <typename... Args, typename Char>\nFMT_CONSTEXPR auto get_arg_index_by_name(basic_string_view<Char> name) -> int {\n#if FMT_USE_NONTYPE_TEMPLATE_ARGS\n  if constexpr (sizeof...(Args) > 0)\n    return get_arg_index_by_name<0, Args...>(name);\n#endif\n  (void)name;\n  return invalid_arg_index;\n}\n\ntemplate <typename Char, typename ErrorHandler, typename... Args>\nclass format_string_checker {\n private:\n  // In the future basic_format_parse_context will replace compile_parse_context\n  // here and will use is_constant_evaluated and downcasting to access the data\n  // needed for compile-time checks: https://godbolt.org/z/GvWzcTjh1.\n  using parse_context_type = compile_parse_context<Char, ErrorHandler>;\n  static constexpr int num_args = sizeof...(Args);\n\n  // Format specifier parsing function.\n  using parse_func = const Char* (*)(parse_context_type&);\n\n  parse_context_type context_;\n  parse_func parse_funcs_[num_args > 0 ? static_cast<size_t>(num_args) : 1];\n  type types_[num_args > 0 ? static_cast<size_t>(num_args) : 1];\n\n public:\n  explicit FMT_CONSTEXPR format_string_checker(\n      basic_string_view<Char> format_str, ErrorHandler eh)\n      : context_(format_str, num_args, types_, eh),\n        parse_funcs_{&parse_format_specs<Args, parse_context_type>...},\n        types_{\n            mapped_type_constant<Args,\n                                 basic_format_context<Char*, Char>>::value...} {\n  }\n\n  FMT_CONSTEXPR void on_text(const Char*, const Char*) {}\n\n  FMT_CONSTEXPR auto on_arg_id() -> int { return context_.next_arg_id(); }\n  FMT_CONSTEXPR auto on_arg_id(int id) -> int {\n    return context_.check_arg_id(id), id;\n  }\n  FMT_CONSTEXPR auto on_arg_id(basic_string_view<Char> id) -> int {\n#if FMT_USE_NONTYPE_TEMPLATE_ARGS\n    auto index = get_arg_index_by_name<Args...>(id);\n    if (index == invalid_arg_index) on_error(\"named argument is not found\");\n    return context_.check_arg_id(index), index;\n#else\n    (void)id;\n    on_error(\"compile-time checks for named arguments require C++20 support\");\n    return 0;\n#endif\n  }\n\n  FMT_CONSTEXPR void on_replacement_field(int, const Char*) {}\n\n  FMT_CONSTEXPR auto on_format_specs(int id, const Char* begin, const Char*)\n      -> const Char* {\n    context_.advance_to(context_.begin() + (begin - &*context_.begin()));\n    // id >= 0 check is a workaround for gcc 10 bug (#2065).\n    return id >= 0 && id < num_args ? parse_funcs_[id](context_) : begin;\n  }\n\n  FMT_CONSTEXPR void on_error(const char* message) {\n    context_.on_error(message);\n  }\n};\n\n// Reports a compile-time error if S is not a valid format string.\ntemplate <typename..., typename S, FMT_ENABLE_IF(!is_compile_string<S>::value)>\nFMT_INLINE void check_format_string(const S&) {\n#ifdef FMT_ENFORCE_COMPILE_STRING\n  static_assert(is_compile_string<S>::value,\n                \"FMT_ENFORCE_COMPILE_STRING requires all format strings to use \"\n                \"FMT_STRING.\");\n#endif\n}\ntemplate <typename... Args, typename S,\n          FMT_ENABLE_IF(is_compile_string<S>::value)>\nvoid check_format_string(S format_str) {\n  FMT_CONSTEXPR auto s = basic_string_view<typename S::char_type>(format_str);\n  using checker = format_string_checker<typename S::char_type, error_handler,\n                                        remove_cvref_t<Args>...>;\n  FMT_CONSTEXPR bool invalid_format =\n      (parse_format_string<true>(s, checker(s, {})), true);\n  ignore_unused(invalid_format);\n}\n\ntemplate <typename Char>\nvoid vformat_to(\n    buffer<Char>& buf, basic_string_view<Char> fmt,\n    basic_format_args<FMT_BUFFER_CONTEXT(type_identity_t<Char>)> args,\n    locale_ref loc = {});\n\nFMT_API void vprint_mojibake(std::FILE*, string_view, format_args);\n#ifndef _WIN32\ninline void vprint_mojibake(std::FILE*, string_view, format_args) {}\n#endif\nFMT_END_DETAIL_NAMESPACE\n\n// A formatter specialization for the core types corresponding to detail::type\n// constants.\ntemplate <typename T, typename Char>\nstruct formatter<T, Char,\n                 enable_if_t<detail::type_constant<T, Char>::value !=\n                             detail::type::custom_type>> {\n private:\n  detail::dynamic_format_specs<Char> specs_;\n\n public:\n  // Parses format specifiers stopping either at the end of the range or at the\n  // terminating '}'.\n  template <typename ParseContext>\n  FMT_CONSTEXPR auto parse(ParseContext& ctx) -> decltype(ctx.begin()) {\n    auto begin = ctx.begin(), end = ctx.end();\n    if (begin == end) return begin;\n    using handler_type = detail::dynamic_specs_handler<ParseContext>;\n    auto type = detail::type_constant<T, Char>::value;\n    auto checker =\n        detail::specs_checker<handler_type>(handler_type(specs_, ctx), type);\n    auto it = detail::parse_format_specs(begin, end, checker);\n    auto eh = ctx.error_handler();\n    switch (type) {\n    case detail::type::none_type:\n      FMT_ASSERT(false, \"invalid argument type\");\n      break;\n    case detail::type::bool_type:\n      if (specs_.type == presentation_type::none ||\n          specs_.type == presentation_type::string) {\n        break;\n      }\n      FMT_FALLTHROUGH;\n    case detail::type::int_type:\n    case detail::type::uint_type:\n    case detail::type::long_long_type:\n    case detail::type::ulong_long_type:\n    case detail::type::int128_type:\n    case detail::type::uint128_type:\n      detail::check_int_type_spec(specs_.type, eh);\n      break;\n    case detail::type::char_type:\n      detail::check_char_specs(specs_, eh);\n      break;\n    case detail::type::float_type:\n      if (detail::const_check(FMT_USE_FLOAT))\n        detail::parse_float_type_spec(specs_, eh);\n      else\n        FMT_ASSERT(false, \"float support disabled\");\n      break;\n    case detail::type::double_type:\n      if (detail::const_check(FMT_USE_DOUBLE))\n        detail::parse_float_type_spec(specs_, eh);\n      else\n        FMT_ASSERT(false, \"double support disabled\");\n      break;\n    case detail::type::long_double_type:\n      if (detail::const_check(FMT_USE_LONG_DOUBLE))\n        detail::parse_float_type_spec(specs_, eh);\n      else\n        FMT_ASSERT(false, \"long double support disabled\");\n      break;\n    case detail::type::cstring_type:\n      detail::check_cstring_type_spec(specs_.type, eh);\n      break;\n    case detail::type::string_type:\n      detail::check_string_type_spec(specs_.type, eh);\n      break;\n    case detail::type::pointer_type:\n      detail::check_pointer_type_spec(specs_.type, eh);\n      break;\n    case detail::type::custom_type:\n      // Custom format specifiers are checked in parse functions of\n      // formatter specializations.\n      break;\n    }\n    return it;\n  }\n\n  template <detail::type U = detail::type_constant<T, Char>::value,\n            enable_if_t<(U == detail::type::string_type ||\n                         U == detail::type::cstring_type ||\n                         U == detail::type::char_type),\n                        int> = 0>\n  FMT_CONSTEXPR void set_debug_format() {\n    specs_.type = presentation_type::debug;\n  }\n\n  template <typename FormatContext>\n  FMT_CONSTEXPR auto format(const T& val, FormatContext& ctx) const\n      -> decltype(ctx.out());\n};\n\n#define FMT_FORMAT_AS(Type, Base)                                        \\\n  template <typename Char>                                               \\\n  struct formatter<Type, Char> : formatter<Base, Char> {                 \\\n    template <typename FormatContext>                                    \\\n    auto format(Type const& val, FormatContext& ctx) const               \\\n        -> decltype(ctx.out()) {                                         \\\n      return formatter<Base, Char>::format(static_cast<Base>(val), ctx); \\\n    }                                                                    \\\n  }\n\nFMT_FORMAT_AS(signed char, int);\nFMT_FORMAT_AS(unsigned char, unsigned);\nFMT_FORMAT_AS(short, int);\nFMT_FORMAT_AS(unsigned short, unsigned);\nFMT_FORMAT_AS(long, long long);\nFMT_FORMAT_AS(unsigned long, unsigned long long);\nFMT_FORMAT_AS(Char*, const Char*);\nFMT_FORMAT_AS(std::basic_string<Char>, basic_string_view<Char>);\nFMT_FORMAT_AS(std::nullptr_t, const void*);\nFMT_FORMAT_AS(detail::std_string_view<Char>, basic_string_view<Char>);\n\ntemplate <typename Char> struct basic_runtime { basic_string_view<Char> str; };\n\n/** A compile-time format string. */\ntemplate <typename Char, typename... Args> class basic_format_string {\n private:\n  basic_string_view<Char> str_;\n\n public:\n  template <typename S,\n            FMT_ENABLE_IF(\n                std::is_convertible<const S&, basic_string_view<Char>>::value)>\n  FMT_CONSTEVAL FMT_INLINE basic_format_string(const S& s) : str_(s) {\n    static_assert(\n        detail::count<\n            (std::is_base_of<detail::view, remove_reference_t<Args>>::value &&\n             std::is_reference<Args>::value)...>() == 0,\n        \"passing views as lvalues is disallowed\");\n#ifdef FMT_HAS_CONSTEVAL\n    if constexpr (detail::count_named_args<Args...>() ==\n                  detail::count_statically_named_args<Args...>()) {\n      using checker = detail::format_string_checker<Char, detail::error_handler,\n                                                    remove_cvref_t<Args>...>;\n      detail::parse_format_string<true>(str_, checker(s, {}));\n    }\n#else\n    detail::check_format_string<Args...>(s);\n#endif\n  }\n  basic_format_string(basic_runtime<Char> r) : str_(r.str) {}\n\n  FMT_INLINE operator basic_string_view<Char>() const { return str_; }\n};\n\n#if FMT_GCC_VERSION && FMT_GCC_VERSION < 409\n// Workaround broken conversion on older gcc.\ntemplate <typename...> using format_string = string_view;\ninline auto runtime(string_view s) -> string_view { return s; }\n#else\ntemplate <typename... Args>\nusing format_string = basic_format_string<char, type_identity_t<Args>...>;\n/**\n  \\rst\n  Creates a runtime format string.\n\n  **Example**::\n\n    // Check format string at runtime instead of compile-time.\n    fmt::print(fmt::runtime(\"{:d}\"), \"I am not a number\");\n  \\endrst\n */\ninline auto runtime(string_view s) -> basic_runtime<char> { return {{s}}; }\n#endif\n\nFMT_API auto vformat(string_view fmt, format_args args) -> std::string;\n\n/**\n  \\rst\n  Formats ``args`` according to specifications in ``fmt`` and returns the result\n  as a string.\n\n  **Example**::\n\n    #include <fmt/core.h>\n    std::string message = fmt::format(\"The answer is {}.\", 42);\n  \\endrst\n*/\ntemplate <typename... T>\nFMT_NODISCARD FMT_INLINE auto format(format_string<T...> fmt, T&&... args)\n    -> std::string {\n  return vformat(fmt, fmt::make_format_args(args...));\n}\n\n/** Formats a string and writes the output to ``out``. */\ntemplate <typename OutputIt,\n          FMT_ENABLE_IF(detail::is_output_iterator<OutputIt, char>::value)>\nauto vformat_to(OutputIt out, string_view fmt, format_args args) -> OutputIt {\n  using detail::get_buffer;\n  auto&& buf = get_buffer<char>(out);\n  detail::vformat_to(buf, fmt, args, {});\n  return detail::get_iterator(buf);\n}\n\n/**\n \\rst\n Formats ``args`` according to specifications in ``fmt``, writes the result to\n the output iterator ``out`` and returns the iterator past the end of the output\n range. `format_to` does not append a terminating null character.\n\n **Example**::\n\n   auto out = std::vector<char>();\n   fmt::format_to(std::back_inserter(out), \"{}\", 42);\n \\endrst\n */\ntemplate <typename OutputIt, typename... T,\n          FMT_ENABLE_IF(detail::is_output_iterator<OutputIt, char>::value)>\nFMT_INLINE auto format_to(OutputIt out, format_string<T...> fmt, T&&... args)\n    -> OutputIt {\n  return vformat_to(out, fmt, fmt::make_format_args(args...));\n}\n\ntemplate <typename OutputIt> struct format_to_n_result {\n  /** Iterator past the end of the output range. */\n  OutputIt out;\n  /** Total (not truncated) output size. */\n  size_t size;\n};\n\ntemplate <typename OutputIt, typename... T,\n          FMT_ENABLE_IF(detail::is_output_iterator<OutputIt, char>::value)>\nauto vformat_to_n(OutputIt out, size_t n, string_view fmt, format_args args)\n    -> format_to_n_result<OutputIt> {\n  using traits = detail::fixed_buffer_traits;\n  auto buf = detail::iterator_buffer<OutputIt, char, traits>(out, n);\n  detail::vformat_to(buf, fmt, args, {});\n  return {buf.out(), buf.count()};\n}\n\n/**\n  \\rst\n  Formats ``args`` according to specifications in ``fmt``, writes up to ``n``\n  characters of the result to the output iterator ``out`` and returns the total\n  (not truncated) output size and the iterator past the end of the output range.\n  `format_to_n` does not append a terminating null character.\n  \\endrst\n */\ntemplate <typename OutputIt, typename... T,\n          FMT_ENABLE_IF(detail::is_output_iterator<OutputIt, char>::value)>\nFMT_INLINE auto format_to_n(OutputIt out, size_t n, format_string<T...> fmt,\n                            T&&... args) -> format_to_n_result<OutputIt> {\n  return vformat_to_n(out, n, fmt, fmt::make_format_args(args...));\n}\n\n/** Returns the number of chars in the output of ``format(fmt, args...)``. */\ntemplate <typename... T>\nFMT_NODISCARD FMT_INLINE auto formatted_size(format_string<T...> fmt,\n                                             T&&... args) -> size_t {\n  auto buf = detail::counting_buffer<>();\n  detail::vformat_to(buf, string_view(fmt), fmt::make_format_args(args...), {});\n  return buf.count();\n}\n\nFMT_API void vprint(string_view fmt, format_args args);\nFMT_API void vprint(std::FILE* f, string_view fmt, format_args args);\n\n/**\n  \\rst\n  Formats ``args`` according to specifications in ``fmt`` and writes the output\n  to ``stdout``.\n\n  **Example**::\n\n    fmt::print(\"Elapsed time: {0:.2f} seconds\", 1.23);\n  \\endrst\n */\ntemplate <typename... T>\nFMT_INLINE void print(format_string<T...> fmt, T&&... args) {\n  const auto& vargs = fmt::make_format_args(args...);\n  return detail::is_utf8() ? vprint(fmt, vargs)\n                           : detail::vprint_mojibake(stdout, fmt, vargs);\n}\n\n/**\n  \\rst\n  Formats ``args`` according to specifications in ``fmt`` and writes the\n  output to the file ``f``.\n\n  **Example**::\n\n    fmt::print(stderr, \"Don't {}!\", \"panic\");\n  \\endrst\n */\ntemplate <typename... T>\nFMT_INLINE void print(std::FILE* f, format_string<T...> fmt, T&&... args) {\n  const auto& vargs = fmt::make_format_args(args...);\n  return detail::is_utf8() ? vprint(f, fmt, vargs)\n                           : detail::vprint_mojibake(f, fmt, vargs);\n}\n\nFMT_MODULE_EXPORT_END\nFMT_GCC_PRAGMA(\"GCC pop_options\")\nFMT_END_NAMESPACE\n\n#ifdef FMT_HEADER_ONLY\n#  include \"format.h\"\n#endif\n#endif  // FMT_CORE_H_\n"
  },
  {
    "path": "native/iosTest/Pods/fmt/include/fmt/format-inl.h",
    "content": "// Formatting library for C++ - implementation\n//\n// Copyright (c) 2012 - 2016, Victor Zverovich\n// All rights reserved.\n//\n// For the license information refer to format.h.\n\n#ifndef FMT_FORMAT_INL_H_\n#define FMT_FORMAT_INL_H_\n\n#include <algorithm>\n#include <cctype>\n#include <cerrno>  // errno\n#include <climits>\n#include <cmath>\n#include <cstdarg>\n#include <cstring>  // std::memmove\n#include <cwchar>\n#include <exception>\n\n#ifndef FMT_STATIC_THOUSANDS_SEPARATOR\n#  include <locale>\n#endif\n\n#ifdef _WIN32\n#  include <io.h>  // _isatty\n#endif\n\n#include \"format.h\"\n\nFMT_BEGIN_NAMESPACE\nnamespace detail {\n\nFMT_FUNC void assert_fail(const char* file, int line, const char* message) {\n  // Use unchecked std::fprintf to avoid triggering another assertion when\n  // writing to stderr fails\n  std::fprintf(stderr, \"%s:%d: assertion failed: %s\", file, line, message);\n  // Chosen instead of std::abort to satisfy Clang in CUDA mode during device\n  // code pass.\n  std::terminate();\n}\n\nFMT_FUNC void throw_format_error(const char* message) {\n  FMT_THROW(format_error(message));\n}\n\nFMT_FUNC void format_error_code(detail::buffer<char>& out, int error_code,\n                                string_view message) noexcept {\n  // Report error code making sure that the output fits into\n  // inline_buffer_size to avoid dynamic memory allocation and potential\n  // bad_alloc.\n  out.try_resize(0);\n  static const char SEP[] = \": \";\n  static const char ERROR_STR[] = \"error \";\n  // Subtract 2 to account for terminating null characters in SEP and ERROR_STR.\n  size_t error_code_size = sizeof(SEP) + sizeof(ERROR_STR) - 2;\n  auto abs_value = static_cast<uint32_or_64_or_128_t<int>>(error_code);\n  if (detail::is_negative(error_code)) {\n    abs_value = 0 - abs_value;\n    ++error_code_size;\n  }\n  error_code_size += detail::to_unsigned(detail::count_digits(abs_value));\n  auto it = buffer_appender<char>(out);\n  if (message.size() <= inline_buffer_size - error_code_size)\n    format_to(it, FMT_STRING(\"{}{}\"), message, SEP);\n  format_to(it, FMT_STRING(\"{}{}\"), ERROR_STR, error_code);\n  FMT_ASSERT(out.size() <= inline_buffer_size, \"\");\n}\n\nFMT_FUNC void report_error(format_func func, int error_code,\n                           const char* message) noexcept {\n  memory_buffer full_message;\n  func(full_message, error_code, message);\n  // Don't use fwrite_fully because the latter may throw.\n  if (std::fwrite(full_message.data(), full_message.size(), 1, stderr) > 0)\n    std::fputc('\\n', stderr);\n}\n\n// A wrapper around fwrite that throws on error.\ninline void fwrite_fully(const void* ptr, size_t size, size_t count,\n                         FILE* stream) {\n  size_t written = std::fwrite(ptr, size, count, stream);\n  if (written < count)\n    FMT_THROW(system_error(errno, FMT_STRING(\"cannot write to file\")));\n}\n\n#ifndef FMT_STATIC_THOUSANDS_SEPARATOR\ntemplate <typename Locale>\nlocale_ref::locale_ref(const Locale& loc) : locale_(&loc) {\n  static_assert(std::is_same<Locale, std::locale>::value, \"\");\n}\n\ntemplate <typename Locale> Locale locale_ref::get() const {\n  static_assert(std::is_same<Locale, std::locale>::value, \"\");\n  return locale_ ? *static_cast<const std::locale*>(locale_) : std::locale();\n}\n\ntemplate <typename Char>\nFMT_FUNC auto thousands_sep_impl(locale_ref loc) -> thousands_sep_result<Char> {\n  auto& facet = std::use_facet<std::numpunct<Char>>(loc.get<std::locale>());\n  auto grouping = facet.grouping();\n  auto thousands_sep = grouping.empty() ? Char() : facet.thousands_sep();\n  return {std::move(grouping), thousands_sep};\n}\ntemplate <typename Char> FMT_FUNC Char decimal_point_impl(locale_ref loc) {\n  return std::use_facet<std::numpunct<Char>>(loc.get<std::locale>())\n      .decimal_point();\n}\n#else\ntemplate <typename Char>\nFMT_FUNC auto thousands_sep_impl(locale_ref) -> thousands_sep_result<Char> {\n  return {\"\\03\", FMT_STATIC_THOUSANDS_SEPARATOR};\n}\ntemplate <typename Char> FMT_FUNC Char decimal_point_impl(locale_ref) {\n  return '.';\n}\n#endif\n}  // namespace detail\n\n#if !FMT_MSC_VERSION\nFMT_API FMT_FUNC format_error::~format_error() noexcept = default;\n#endif\n\nFMT_FUNC std::system_error vsystem_error(int error_code, string_view format_str,\n                                         format_args args) {\n  auto ec = std::error_code(error_code, std::generic_category());\n  return std::system_error(ec, vformat(format_str, args));\n}\n\nnamespace detail {\n\ntemplate <typename F> inline bool operator==(basic_fp<F> x, basic_fp<F> y) {\n  return x.f == y.f && x.e == y.e;\n}\n\n// Compilers should be able to optimize this into the ror instruction.\nFMT_CONSTEXPR inline uint32_t rotr(uint32_t n, uint32_t r) noexcept {\n  r &= 31;\n  return (n >> r) | (n << (32 - r));\n}\nFMT_CONSTEXPR inline uint64_t rotr(uint64_t n, uint32_t r) noexcept {\n  r &= 63;\n  return (n >> r) | (n << (64 - r));\n}\n\n// Computes 128-bit result of multiplication of two 64-bit unsigned integers.\ninline uint128_fallback umul128(uint64_t x, uint64_t y) noexcept {\n#if FMT_USE_INT128\n  auto p = static_cast<uint128_opt>(x) * static_cast<uint128_opt>(y);\n  return {static_cast<uint64_t>(p >> 64), static_cast<uint64_t>(p)};\n#elif defined(_MSC_VER) && defined(_M_X64)\n  auto result = uint128_fallback();\n  result.lo_ = _umul128(x, y, &result.hi_);\n  return result;\n#else\n  const uint64_t mask = static_cast<uint64_t>(max_value<uint32_t>());\n\n  uint64_t a = x >> 32;\n  uint64_t b = x & mask;\n  uint64_t c = y >> 32;\n  uint64_t d = y & mask;\n\n  uint64_t ac = a * c;\n  uint64_t bc = b * c;\n  uint64_t ad = a * d;\n  uint64_t bd = b * d;\n\n  uint64_t intermediate = (bd >> 32) + (ad & mask) + (bc & mask);\n\n  return {ac + (intermediate >> 32) + (ad >> 32) + (bc >> 32),\n          (intermediate << 32) + (bd & mask)};\n#endif\n}\n\n// Implementation of Dragonbox algorithm: https://github.com/jk-jeon/dragonbox.\nnamespace dragonbox {\n// Computes upper 64 bits of multiplication of two 64-bit unsigned integers.\ninline uint64_t umul128_upper64(uint64_t x, uint64_t y) noexcept {\n#if FMT_USE_INT128\n  auto p = static_cast<uint128_opt>(x) * static_cast<uint128_opt>(y);\n  return static_cast<uint64_t>(p >> 64);\n#elif defined(_MSC_VER) && defined(_M_X64)\n  return __umulh(x, y);\n#else\n  return umul128(x, y).high();\n#endif\n}\n\n// Computes upper 128 bits of multiplication of a 64-bit unsigned integer and a\n// 128-bit unsigned integer.\ninline uint128_fallback umul192_upper128(uint64_t x,\n                                         uint128_fallback y) noexcept {\n  uint128_fallback r = umul128(x, y.high());\n  r += umul128_upper64(x, y.low());\n  return r;\n}\n\n// Computes upper 64 bits of multiplication of a 32-bit unsigned integer and a\n// 64-bit unsigned integer.\ninline uint64_t umul96_upper64(uint32_t x, uint64_t y) noexcept {\n  return umul128_upper64(static_cast<uint64_t>(x) << 32, y);\n}\n\n// Computes lower 128 bits of multiplication of a 64-bit unsigned integer and a\n// 128-bit unsigned integer.\ninline uint128_fallback umul192_lower128(uint64_t x,\n                                         uint128_fallback y) noexcept {\n  uint64_t high = x * y.high();\n  uint128_fallback high_low = umul128(x, y.low());\n  return {high + high_low.high(), high_low.low()};\n}\n\n// Computes lower 64 bits of multiplication of a 32-bit unsigned integer and a\n// 64-bit unsigned integer.\ninline uint64_t umul96_lower64(uint32_t x, uint64_t y) noexcept {\n  return x * y;\n}\n\n// Computes floor(log10(pow(2, e))) for e in [-2620, 2620] using the method from\n// https://fmt.dev/papers/Dragonbox.pdf#page=28, section 6.1.\ninline int floor_log10_pow2(int e) noexcept {\n  FMT_ASSERT(e <= 2620 && e >= -2620, \"too large exponent\");\n  static_assert((-1 >> 1) == -1, \"right shift is not arithmetic\");\n  return (e * 315653) >> 20;\n}\n\n// Various fast log computations.\ninline int floor_log2_pow10(int e) noexcept {\n  FMT_ASSERT(e <= 1233 && e >= -1233, \"too large exponent\");\n  return (e * 1741647) >> 19;\n}\ninline int floor_log10_pow2_minus_log10_4_over_3(int e) noexcept {\n  FMT_ASSERT(e <= 2936 && e >= -2985, \"too large exponent\");\n  return (e * 631305 - 261663) >> 21;\n}\n\nstatic constexpr struct {\n  uint32_t divisor;\n  int shift_amount;\n} div_small_pow10_infos[] = {{10, 16}, {100, 16}};\n\n// Replaces n by floor(n / pow(10, N)) returning true if and only if n is\n// divisible by pow(10, N).\n// Precondition: n <= pow(10, N + 1).\ntemplate <int N>\nbool check_divisibility_and_divide_by_pow10(uint32_t& n) noexcept {\n  // The numbers below are chosen such that:\n  //   1. floor(n/d) = floor(nm / 2^k) where d=10 or d=100,\n  //   2. nm mod 2^k < m if and only if n is divisible by d,\n  // where m is magic_number, k is shift_amount\n  // and d is divisor.\n  //\n  // Item 1 is a common technique of replacing division by a constant with\n  // multiplication, see e.g. \"Division by Invariant Integers Using\n  // Multiplication\" by Granlund and Montgomery (1994). magic_number (m) is set\n  // to ceil(2^k/d) for large enough k.\n  // The idea for item 2 originates from Schubfach.\n  constexpr auto info = div_small_pow10_infos[N - 1];\n  FMT_ASSERT(n <= info.divisor * 10, \"n is too large\");\n  constexpr uint32_t magic_number =\n      (1u << info.shift_amount) / info.divisor + 1;\n  n *= magic_number;\n  const uint32_t comparison_mask = (1u << info.shift_amount) - 1;\n  bool result = (n & comparison_mask) < magic_number;\n  n >>= info.shift_amount;\n  return result;\n}\n\n// Computes floor(n / pow(10, N)) for small n and N.\n// Precondition: n <= pow(10, N + 1).\ntemplate <int N> uint32_t small_division_by_pow10(uint32_t n) noexcept {\n  constexpr auto info = div_small_pow10_infos[N - 1];\n  FMT_ASSERT(n <= info.divisor * 10, \"n is too large\");\n  constexpr uint32_t magic_number =\n      (1u << info.shift_amount) / info.divisor + 1;\n  return (n * magic_number) >> info.shift_amount;\n}\n\n// Computes floor(n / 10^(kappa + 1)) (float)\ninline uint32_t divide_by_10_to_kappa_plus_1(uint32_t n) noexcept {\n  // 1374389535 = ceil(2^37/100)\n  return static_cast<uint32_t>((static_cast<uint64_t>(n) * 1374389535) >> 37);\n}\n// Computes floor(n / 10^(kappa + 1)) (double)\ninline uint64_t divide_by_10_to_kappa_plus_1(uint64_t n) noexcept {\n  // 2361183241434822607 = ceil(2^(64+7)/1000)\n  return umul128_upper64(n, 2361183241434822607ull) >> 7;\n}\n\n// Various subroutines using pow10 cache\ntemplate <class T> struct cache_accessor;\n\ntemplate <> struct cache_accessor<float> {\n  using carrier_uint = float_info<float>::carrier_uint;\n  using cache_entry_type = uint64_t;\n\n  static uint64_t get_cached_power(int k) noexcept {\n    FMT_ASSERT(k >= float_info<float>::min_k && k <= float_info<float>::max_k,\n               \"k is out of range\");\n    static constexpr const uint64_t pow10_significands[] = {\n        0x81ceb32c4b43fcf5, 0xa2425ff75e14fc32, 0xcad2f7f5359a3b3f,\n        0xfd87b5f28300ca0e, 0x9e74d1b791e07e49, 0xc612062576589ddb,\n        0xf79687aed3eec552, 0x9abe14cd44753b53, 0xc16d9a0095928a28,\n        0xf1c90080baf72cb2, 0x971da05074da7bef, 0xbce5086492111aeb,\n        0xec1e4a7db69561a6, 0x9392ee8e921d5d08, 0xb877aa3236a4b44a,\n        0xe69594bec44de15c, 0x901d7cf73ab0acda, 0xb424dc35095cd810,\n        0xe12e13424bb40e14, 0x8cbccc096f5088cc, 0xafebff0bcb24aaff,\n        0xdbe6fecebdedd5bf, 0x89705f4136b4a598, 0xabcc77118461cefd,\n        0xd6bf94d5e57a42bd, 0x8637bd05af6c69b6, 0xa7c5ac471b478424,\n        0xd1b71758e219652c, 0x83126e978d4fdf3c, 0xa3d70a3d70a3d70b,\n        0xcccccccccccccccd, 0x8000000000000000, 0xa000000000000000,\n        0xc800000000000000, 0xfa00000000000000, 0x9c40000000000000,\n        0xc350000000000000, 0xf424000000000000, 0x9896800000000000,\n        0xbebc200000000000, 0xee6b280000000000, 0x9502f90000000000,\n        0xba43b74000000000, 0xe8d4a51000000000, 0x9184e72a00000000,\n        0xb5e620f480000000, 0xe35fa931a0000000, 0x8e1bc9bf04000000,\n        0xb1a2bc2ec5000000, 0xde0b6b3a76400000, 0x8ac7230489e80000,\n        0xad78ebc5ac620000, 0xd8d726b7177a8000, 0x878678326eac9000,\n        0xa968163f0a57b400, 0xd3c21bcecceda100, 0x84595161401484a0,\n        0xa56fa5b99019a5c8, 0xcecb8f27f4200f3a, 0x813f3978f8940985,\n        0xa18f07d736b90be6, 0xc9f2c9cd04674edf, 0xfc6f7c4045812297,\n        0x9dc5ada82b70b59e, 0xc5371912364ce306, 0xf684df56c3e01bc7,\n        0x9a130b963a6c115d, 0xc097ce7bc90715b4, 0xf0bdc21abb48db21,\n        0x96769950b50d88f5, 0xbc143fa4e250eb32, 0xeb194f8e1ae525fe,\n        0x92efd1b8d0cf37bf, 0xb7abc627050305ae, 0xe596b7b0c643c71a,\n        0x8f7e32ce7bea5c70, 0xb35dbf821ae4f38c, 0xe0352f62a19e306f};\n    return pow10_significands[k - float_info<float>::min_k];\n  }\n\n  struct compute_mul_result {\n    carrier_uint result;\n    bool is_integer;\n  };\n  struct compute_mul_parity_result {\n    bool parity;\n    bool is_integer;\n  };\n\n  static compute_mul_result compute_mul(\n      carrier_uint u, const cache_entry_type& cache) noexcept {\n    auto r = umul96_upper64(u, cache);\n    return {static_cast<carrier_uint>(r >> 32),\n            static_cast<carrier_uint>(r) == 0};\n  }\n\n  static uint32_t compute_delta(const cache_entry_type& cache,\n                                int beta) noexcept {\n    return static_cast<uint32_t>(cache >> (64 - 1 - beta));\n  }\n\n  static compute_mul_parity_result compute_mul_parity(\n      carrier_uint two_f, const cache_entry_type& cache, int beta) noexcept {\n    FMT_ASSERT(beta >= 1, \"\");\n    FMT_ASSERT(beta < 64, \"\");\n\n    auto r = umul96_lower64(two_f, cache);\n    return {((r >> (64 - beta)) & 1) != 0,\n            static_cast<uint32_t>(r >> (32 - beta)) == 0};\n  }\n\n  static carrier_uint compute_left_endpoint_for_shorter_interval_case(\n      const cache_entry_type& cache, int beta) noexcept {\n    return static_cast<carrier_uint>(\n        (cache - (cache >> (num_significand_bits<float>() + 2))) >>\n        (64 - num_significand_bits<float>() - 1 - beta));\n  }\n\n  static carrier_uint compute_right_endpoint_for_shorter_interval_case(\n      const cache_entry_type& cache, int beta) noexcept {\n    return static_cast<carrier_uint>(\n        (cache + (cache >> (num_significand_bits<float>() + 1))) >>\n        (64 - num_significand_bits<float>() - 1 - beta));\n  }\n\n  static carrier_uint compute_round_up_for_shorter_interval_case(\n      const cache_entry_type& cache, int beta) noexcept {\n    return (static_cast<carrier_uint>(\n                cache >> (64 - num_significand_bits<float>() - 2 - beta)) +\n            1) /\n           2;\n  }\n};\n\ntemplate <> struct cache_accessor<double> {\n  using carrier_uint = float_info<double>::carrier_uint;\n  using cache_entry_type = uint128_fallback;\n\n  static uint128_fallback get_cached_power(int k) noexcept {\n    FMT_ASSERT(k >= float_info<double>::min_k && k <= float_info<double>::max_k,\n               \"k is out of range\");\n\n    static constexpr const uint128_fallback pow10_significands[] = {\n#if FMT_USE_FULL_CACHE_DRAGONBOX\n      {0xff77b1fcbebcdc4f, 0x25e8e89c13bb0f7b},\n      {0x9faacf3df73609b1, 0x77b191618c54e9ad},\n      {0xc795830d75038c1d, 0xd59df5b9ef6a2418},\n      {0xf97ae3d0d2446f25, 0x4b0573286b44ad1e},\n      {0x9becce62836ac577, 0x4ee367f9430aec33},\n      {0xc2e801fb244576d5, 0x229c41f793cda740},\n      {0xf3a20279ed56d48a, 0x6b43527578c11110},\n      {0x9845418c345644d6, 0x830a13896b78aaaa},\n      {0xbe5691ef416bd60c, 0x23cc986bc656d554},\n      {0xedec366b11c6cb8f, 0x2cbfbe86b7ec8aa9},\n      {0x94b3a202eb1c3f39, 0x7bf7d71432f3d6aa},\n      {0xb9e08a83a5e34f07, 0xdaf5ccd93fb0cc54},\n      {0xe858ad248f5c22c9, 0xd1b3400f8f9cff69},\n      {0x91376c36d99995be, 0x23100809b9c21fa2},\n      {0xb58547448ffffb2d, 0xabd40a0c2832a78b},\n      {0xe2e69915b3fff9f9, 0x16c90c8f323f516d},\n      {0x8dd01fad907ffc3b, 0xae3da7d97f6792e4},\n      {0xb1442798f49ffb4a, 0x99cd11cfdf41779d},\n      {0xdd95317f31c7fa1d, 0x40405643d711d584},\n      {0x8a7d3eef7f1cfc52, 0x482835ea666b2573},\n      {0xad1c8eab5ee43b66, 0xda3243650005eed0},\n      {0xd863b256369d4a40, 0x90bed43e40076a83},\n      {0x873e4f75e2224e68, 0x5a7744a6e804a292},\n      {0xa90de3535aaae202, 0x711515d0a205cb37},\n      {0xd3515c2831559a83, 0x0d5a5b44ca873e04},\n      {0x8412d9991ed58091, 0xe858790afe9486c3},\n      {0xa5178fff668ae0b6, 0x626e974dbe39a873},\n      {0xce5d73ff402d98e3, 0xfb0a3d212dc81290},\n      {0x80fa687f881c7f8e, 0x7ce66634bc9d0b9a},\n      {0xa139029f6a239f72, 0x1c1fffc1ebc44e81},\n      {0xc987434744ac874e, 0xa327ffb266b56221},\n      {0xfbe9141915d7a922, 0x4bf1ff9f0062baa9},\n      {0x9d71ac8fada6c9b5, 0x6f773fc3603db4aa},\n      {0xc4ce17b399107c22, 0xcb550fb4384d21d4},\n      {0xf6019da07f549b2b, 0x7e2a53a146606a49},\n      {0x99c102844f94e0fb, 0x2eda7444cbfc426e},\n      {0xc0314325637a1939, 0xfa911155fefb5309},\n      {0xf03d93eebc589f88, 0x793555ab7eba27cb},\n      {0x96267c7535b763b5, 0x4bc1558b2f3458df},\n      {0xbbb01b9283253ca2, 0x9eb1aaedfb016f17},\n      {0xea9c227723ee8bcb, 0x465e15a979c1cadd},\n      {0x92a1958a7675175f, 0x0bfacd89ec191eca},\n      {0xb749faed14125d36, 0xcef980ec671f667c},\n      {0xe51c79a85916f484, 0x82b7e12780e7401b},\n      {0x8f31cc0937ae58d2, 0xd1b2ecb8b0908811},\n      {0xb2fe3f0b8599ef07, 0x861fa7e6dcb4aa16},\n      {0xdfbdcece67006ac9, 0x67a791e093e1d49b},\n      {0x8bd6a141006042bd, 0xe0c8bb2c5c6d24e1},\n      {0xaecc49914078536d, 0x58fae9f773886e19},\n      {0xda7f5bf590966848, 0xaf39a475506a899f},\n      {0x888f99797a5e012d, 0x6d8406c952429604},\n      {0xaab37fd7d8f58178, 0xc8e5087ba6d33b84},\n      {0xd5605fcdcf32e1d6, 0xfb1e4a9a90880a65},\n      {0x855c3be0a17fcd26, 0x5cf2eea09a550680},\n      {0xa6b34ad8c9dfc06f, 0xf42faa48c0ea481f},\n      {0xd0601d8efc57b08b, 0xf13b94daf124da27},\n      {0x823c12795db6ce57, 0x76c53d08d6b70859},\n      {0xa2cb1717b52481ed, 0x54768c4b0c64ca6f},\n      {0xcb7ddcdda26da268, 0xa9942f5dcf7dfd0a},\n      {0xfe5d54150b090b02, 0xd3f93b35435d7c4d},\n      {0x9efa548d26e5a6e1, 0xc47bc5014a1a6db0},\n      {0xc6b8e9b0709f109a, 0x359ab6419ca1091c},\n      {0xf867241c8cc6d4c0, 0xc30163d203c94b63},\n      {0x9b407691d7fc44f8, 0x79e0de63425dcf1e},\n      {0xc21094364dfb5636, 0x985915fc12f542e5},\n      {0xf294b943e17a2bc4, 0x3e6f5b7b17b2939e},\n      {0x979cf3ca6cec5b5a, 0xa705992ceecf9c43},\n      {0xbd8430bd08277231, 0x50c6ff782a838354},\n      {0xece53cec4a314ebd, 0xa4f8bf5635246429},\n      {0x940f4613ae5ed136, 0x871b7795e136be9a},\n      {0xb913179899f68584, 0x28e2557b59846e40},\n      {0xe757dd7ec07426e5, 0x331aeada2fe589d0},\n      {0x9096ea6f3848984f, 0x3ff0d2c85def7622},\n      {0xb4bca50b065abe63, 0x0fed077a756b53aa},\n      {0xe1ebce4dc7f16dfb, 0xd3e8495912c62895},\n      {0x8d3360f09cf6e4bd, 0x64712dd7abbbd95d},\n      {0xb080392cc4349dec, 0xbd8d794d96aacfb4},\n      {0xdca04777f541c567, 0xecf0d7a0fc5583a1},\n      {0x89e42caaf9491b60, 0xf41686c49db57245},\n      {0xac5d37d5b79b6239, 0x311c2875c522ced6},\n      {0xd77485cb25823ac7, 0x7d633293366b828c},\n      {0x86a8d39ef77164bc, 0xae5dff9c02033198},\n      {0xa8530886b54dbdeb, 0xd9f57f830283fdfd},\n      {0xd267caa862a12d66, 0xd072df63c324fd7c},\n      {0x8380dea93da4bc60, 0x4247cb9e59f71e6e},\n      {0xa46116538d0deb78, 0x52d9be85f074e609},\n      {0xcd795be870516656, 0x67902e276c921f8c},\n      {0x806bd9714632dff6, 0x00ba1cd8a3db53b7},\n      {0xa086cfcd97bf97f3, 0x80e8a40eccd228a5},\n      {0xc8a883c0fdaf7df0, 0x6122cd128006b2ce},\n      {0xfad2a4b13d1b5d6c, 0x796b805720085f82},\n      {0x9cc3a6eec6311a63, 0xcbe3303674053bb1},\n      {0xc3f490aa77bd60fc, 0xbedbfc4411068a9d},\n      {0xf4f1b4d515acb93b, 0xee92fb5515482d45},\n      {0x991711052d8bf3c5, 0x751bdd152d4d1c4b},\n      {0xbf5cd54678eef0b6, 0xd262d45a78a0635e},\n      {0xef340a98172aace4, 0x86fb897116c87c35},\n      {0x9580869f0e7aac0e, 0xd45d35e6ae3d4da1},\n      {0xbae0a846d2195712, 0x8974836059cca10a},\n      {0xe998d258869facd7, 0x2bd1a438703fc94c},\n      {0x91ff83775423cc06, 0x7b6306a34627ddd0},\n      {0xb67f6455292cbf08, 0x1a3bc84c17b1d543},\n      {0xe41f3d6a7377eeca, 0x20caba5f1d9e4a94},\n      {0x8e938662882af53e, 0x547eb47b7282ee9d},\n      {0xb23867fb2a35b28d, 0xe99e619a4f23aa44},\n      {0xdec681f9f4c31f31, 0x6405fa00e2ec94d5},\n      {0x8b3c113c38f9f37e, 0xde83bc408dd3dd05},\n      {0xae0b158b4738705e, 0x9624ab50b148d446},\n      {0xd98ddaee19068c76, 0x3badd624dd9b0958},\n      {0x87f8a8d4cfa417c9, 0xe54ca5d70a80e5d7},\n      {0xa9f6d30a038d1dbc, 0x5e9fcf4ccd211f4d},\n      {0xd47487cc8470652b, 0x7647c32000696720},\n      {0x84c8d4dfd2c63f3b, 0x29ecd9f40041e074},\n      {0xa5fb0a17c777cf09, 0xf468107100525891},\n      {0xcf79cc9db955c2cc, 0x7182148d4066eeb5},\n      {0x81ac1fe293d599bf, 0xc6f14cd848405531},\n      {0xa21727db38cb002f, 0xb8ada00e5a506a7d},\n      {0xca9cf1d206fdc03b, 0xa6d90811f0e4851d},\n      {0xfd442e4688bd304a, 0x908f4a166d1da664},\n      {0x9e4a9cec15763e2e, 0x9a598e4e043287ff},\n      {0xc5dd44271ad3cdba, 0x40eff1e1853f29fe},\n      {0xf7549530e188c128, 0xd12bee59e68ef47d},\n      {0x9a94dd3e8cf578b9, 0x82bb74f8301958cf},\n      {0xc13a148e3032d6e7, 0xe36a52363c1faf02},\n      {0xf18899b1bc3f8ca1, 0xdc44e6c3cb279ac2},\n      {0x96f5600f15a7b7e5, 0x29ab103a5ef8c0ba},\n      {0xbcb2b812db11a5de, 0x7415d448f6b6f0e8},\n      {0xebdf661791d60f56, 0x111b495b3464ad22},\n      {0x936b9fcebb25c995, 0xcab10dd900beec35},\n      {0xb84687c269ef3bfb, 0x3d5d514f40eea743},\n      {0xe65829b3046b0afa, 0x0cb4a5a3112a5113},\n      {0x8ff71a0fe2c2e6dc, 0x47f0e785eaba72ac},\n      {0xb3f4e093db73a093, 0x59ed216765690f57},\n      {0xe0f218b8d25088b8, 0x306869c13ec3532d},\n      {0x8c974f7383725573, 0x1e414218c73a13fc},\n      {0xafbd2350644eeacf, 0xe5d1929ef90898fb},\n      {0xdbac6c247d62a583, 0xdf45f746b74abf3a},\n      {0x894bc396ce5da772, 0x6b8bba8c328eb784},\n      {0xab9eb47c81f5114f, 0x066ea92f3f326565},\n      {0xd686619ba27255a2, 0xc80a537b0efefebe},\n      {0x8613fd0145877585, 0xbd06742ce95f5f37},\n      {0xa798fc4196e952e7, 0x2c48113823b73705},\n      {0xd17f3b51fca3a7a0, 0xf75a15862ca504c6},\n      {0x82ef85133de648c4, 0x9a984d73dbe722fc},\n      {0xa3ab66580d5fdaf5, 0xc13e60d0d2e0ebbb},\n      {0xcc963fee10b7d1b3, 0x318df905079926a9},\n      {0xffbbcfe994e5c61f, 0xfdf17746497f7053},\n      {0x9fd561f1fd0f9bd3, 0xfeb6ea8bedefa634},\n      {0xc7caba6e7c5382c8, 0xfe64a52ee96b8fc1},\n      {0xf9bd690a1b68637b, 0x3dfdce7aa3c673b1},\n      {0x9c1661a651213e2d, 0x06bea10ca65c084f},\n      {0xc31bfa0fe5698db8, 0x486e494fcff30a63},\n      {0xf3e2f893dec3f126, 0x5a89dba3c3efccfb},\n      {0x986ddb5c6b3a76b7, 0xf89629465a75e01d},\n      {0xbe89523386091465, 0xf6bbb397f1135824},\n      {0xee2ba6c0678b597f, 0x746aa07ded582e2d},\n      {0x94db483840b717ef, 0xa8c2a44eb4571cdd},\n      {0xba121a4650e4ddeb, 0x92f34d62616ce414},\n      {0xe896a0d7e51e1566, 0x77b020baf9c81d18},\n      {0x915e2486ef32cd60, 0x0ace1474dc1d122f},\n      {0xb5b5ada8aaff80b8, 0x0d819992132456bb},\n      {0xe3231912d5bf60e6, 0x10e1fff697ed6c6a},\n      {0x8df5efabc5979c8f, 0xca8d3ffa1ef463c2},\n      {0xb1736b96b6fd83b3, 0xbd308ff8a6b17cb3},\n      {0xddd0467c64bce4a0, 0xac7cb3f6d05ddbdf},\n      {0x8aa22c0dbef60ee4, 0x6bcdf07a423aa96c},\n      {0xad4ab7112eb3929d, 0x86c16c98d2c953c7},\n      {0xd89d64d57a607744, 0xe871c7bf077ba8b8},\n      {0x87625f056c7c4a8b, 0x11471cd764ad4973},\n      {0xa93af6c6c79b5d2d, 0xd598e40d3dd89bd0},\n      {0xd389b47879823479, 0x4aff1d108d4ec2c4},\n      {0x843610cb4bf160cb, 0xcedf722a585139bb},\n      {0xa54394fe1eedb8fe, 0xc2974eb4ee658829},\n      {0xce947a3da6a9273e, 0x733d226229feea33},\n      {0x811ccc668829b887, 0x0806357d5a3f5260},\n      {0xa163ff802a3426a8, 0xca07c2dcb0cf26f8},\n      {0xc9bcff6034c13052, 0xfc89b393dd02f0b6},\n      {0xfc2c3f3841f17c67, 0xbbac2078d443ace3},\n      {0x9d9ba7832936edc0, 0xd54b944b84aa4c0e},\n      {0xc5029163f384a931, 0x0a9e795e65d4df12},\n      {0xf64335bcf065d37d, 0x4d4617b5ff4a16d6},\n      {0x99ea0196163fa42e, 0x504bced1bf8e4e46},\n      {0xc06481fb9bcf8d39, 0xe45ec2862f71e1d7},\n      {0xf07da27a82c37088, 0x5d767327bb4e5a4d},\n      {0x964e858c91ba2655, 0x3a6a07f8d510f870},\n      {0xbbe226efb628afea, 0x890489f70a55368c},\n      {0xeadab0aba3b2dbe5, 0x2b45ac74ccea842f},\n      {0x92c8ae6b464fc96f, 0x3b0b8bc90012929e},\n      {0xb77ada0617e3bbcb, 0x09ce6ebb40173745},\n      {0xe55990879ddcaabd, 0xcc420a6a101d0516},\n      {0x8f57fa54c2a9eab6, 0x9fa946824a12232e},\n      {0xb32df8e9f3546564, 0x47939822dc96abfa},\n      {0xdff9772470297ebd, 0x59787e2b93bc56f8},\n      {0x8bfbea76c619ef36, 0x57eb4edb3c55b65b},\n      {0xaefae51477a06b03, 0xede622920b6b23f2},\n      {0xdab99e59958885c4, 0xe95fab368e45ecee},\n      {0x88b402f7fd75539b, 0x11dbcb0218ebb415},\n      {0xaae103b5fcd2a881, 0xd652bdc29f26a11a},\n      {0xd59944a37c0752a2, 0x4be76d3346f04960},\n      {0x857fcae62d8493a5, 0x6f70a4400c562ddc},\n      {0xa6dfbd9fb8e5b88e, 0xcb4ccd500f6bb953},\n      {0xd097ad07a71f26b2, 0x7e2000a41346a7a8},\n      {0x825ecc24c873782f, 0x8ed400668c0c28c9},\n      {0xa2f67f2dfa90563b, 0x728900802f0f32fb},\n      {0xcbb41ef979346bca, 0x4f2b40a03ad2ffba},\n      {0xfea126b7d78186bc, 0xe2f610c84987bfa9},\n      {0x9f24b832e6b0f436, 0x0dd9ca7d2df4d7ca},\n      {0xc6ede63fa05d3143, 0x91503d1c79720dbc},\n      {0xf8a95fcf88747d94, 0x75a44c6397ce912b},\n      {0x9b69dbe1b548ce7c, 0xc986afbe3ee11abb},\n      {0xc24452da229b021b, 0xfbe85badce996169},\n      {0xf2d56790ab41c2a2, 0xfae27299423fb9c4},\n      {0x97c560ba6b0919a5, 0xdccd879fc967d41b},\n      {0xbdb6b8e905cb600f, 0x5400e987bbc1c921},\n      {0xed246723473e3813, 0x290123e9aab23b69},\n      {0x9436c0760c86e30b, 0xf9a0b6720aaf6522},\n      {0xb94470938fa89bce, 0xf808e40e8d5b3e6a},\n      {0xe7958cb87392c2c2, 0xb60b1d1230b20e05},\n      {0x90bd77f3483bb9b9, 0xb1c6f22b5e6f48c3},\n      {0xb4ecd5f01a4aa828, 0x1e38aeb6360b1af4},\n      {0xe2280b6c20dd5232, 0x25c6da63c38de1b1},\n      {0x8d590723948a535f, 0x579c487e5a38ad0f},\n      {0xb0af48ec79ace837, 0x2d835a9df0c6d852},\n      {0xdcdb1b2798182244, 0xf8e431456cf88e66},\n      {0x8a08f0f8bf0f156b, 0x1b8e9ecb641b5900},\n      {0xac8b2d36eed2dac5, 0xe272467e3d222f40},\n      {0xd7adf884aa879177, 0x5b0ed81dcc6abb10},\n      {0x86ccbb52ea94baea, 0x98e947129fc2b4ea},\n      {0xa87fea27a539e9a5, 0x3f2398d747b36225},\n      {0xd29fe4b18e88640e, 0x8eec7f0d19a03aae},\n      {0x83a3eeeef9153e89, 0x1953cf68300424ad},\n      {0xa48ceaaab75a8e2b, 0x5fa8c3423c052dd8},\n      {0xcdb02555653131b6, 0x3792f412cb06794e},\n      {0x808e17555f3ebf11, 0xe2bbd88bbee40bd1},\n      {0xa0b19d2ab70e6ed6, 0x5b6aceaeae9d0ec5},\n      {0xc8de047564d20a8b, 0xf245825a5a445276},\n      {0xfb158592be068d2e, 0xeed6e2f0f0d56713},\n      {0x9ced737bb6c4183d, 0x55464dd69685606c},\n      {0xc428d05aa4751e4c, 0xaa97e14c3c26b887},\n      {0xf53304714d9265df, 0xd53dd99f4b3066a9},\n      {0x993fe2c6d07b7fab, 0xe546a8038efe402a},\n      {0xbf8fdb78849a5f96, 0xde98520472bdd034},\n      {0xef73d256a5c0f77c, 0x963e66858f6d4441},\n      {0x95a8637627989aad, 0xdde7001379a44aa9},\n      {0xbb127c53b17ec159, 0x5560c018580d5d53},\n      {0xe9d71b689dde71af, 0xaab8f01e6e10b4a7},\n      {0x9226712162ab070d, 0xcab3961304ca70e9},\n      {0xb6b00d69bb55c8d1, 0x3d607b97c5fd0d23},\n      {0xe45c10c42a2b3b05, 0x8cb89a7db77c506b},\n      {0x8eb98a7a9a5b04e3, 0x77f3608e92adb243},\n      {0xb267ed1940f1c61c, 0x55f038b237591ed4},\n      {0xdf01e85f912e37a3, 0x6b6c46dec52f6689},\n      {0x8b61313bbabce2c6, 0x2323ac4b3b3da016},\n      {0xae397d8aa96c1b77, 0xabec975e0a0d081b},\n      {0xd9c7dced53c72255, 0x96e7bd358c904a22},\n      {0x881cea14545c7575, 0x7e50d64177da2e55},\n      {0xaa242499697392d2, 0xdde50bd1d5d0b9ea},\n      {0xd4ad2dbfc3d07787, 0x955e4ec64b44e865},\n      {0x84ec3c97da624ab4, 0xbd5af13bef0b113f},\n      {0xa6274bbdd0fadd61, 0xecb1ad8aeacdd58f},\n      {0xcfb11ead453994ba, 0x67de18eda5814af3},\n      {0x81ceb32c4b43fcf4, 0x80eacf948770ced8},\n      {0xa2425ff75e14fc31, 0xa1258379a94d028e},\n      {0xcad2f7f5359a3b3e, 0x096ee45813a04331},\n      {0xfd87b5f28300ca0d, 0x8bca9d6e188853fd},\n      {0x9e74d1b791e07e48, 0x775ea264cf55347e},\n      {0xc612062576589dda, 0x95364afe032a819e},\n      {0xf79687aed3eec551, 0x3a83ddbd83f52205},\n      {0x9abe14cd44753b52, 0xc4926a9672793543},\n      {0xc16d9a0095928a27, 0x75b7053c0f178294},\n      {0xf1c90080baf72cb1, 0x5324c68b12dd6339},\n      {0x971da05074da7bee, 0xd3f6fc16ebca5e04},\n      {0xbce5086492111aea, 0x88f4bb1ca6bcf585},\n      {0xec1e4a7db69561a5, 0x2b31e9e3d06c32e6},\n      {0x9392ee8e921d5d07, 0x3aff322e62439fd0},\n      {0xb877aa3236a4b449, 0x09befeb9fad487c3},\n      {0xe69594bec44de15b, 0x4c2ebe687989a9b4},\n      {0x901d7cf73ab0acd9, 0x0f9d37014bf60a11},\n      {0xb424dc35095cd80f, 0x538484c19ef38c95},\n      {0xe12e13424bb40e13, 0x2865a5f206b06fba},\n      {0x8cbccc096f5088cb, 0xf93f87b7442e45d4},\n      {0xafebff0bcb24aafe, 0xf78f69a51539d749},\n      {0xdbe6fecebdedd5be, 0xb573440e5a884d1c},\n      {0x89705f4136b4a597, 0x31680a88f8953031},\n      {0xabcc77118461cefc, 0xfdc20d2b36ba7c3e},\n      {0xd6bf94d5e57a42bc, 0x3d32907604691b4d},\n      {0x8637bd05af6c69b5, 0xa63f9a49c2c1b110},\n      {0xa7c5ac471b478423, 0x0fcf80dc33721d54},\n      {0xd1b71758e219652b, 0xd3c36113404ea4a9},\n      {0x83126e978d4fdf3b, 0x645a1cac083126ea},\n      {0xa3d70a3d70a3d70a, 0x3d70a3d70a3d70a4},\n      {0xcccccccccccccccc, 0xcccccccccccccccd},\n      {0x8000000000000000, 0x0000000000000000},\n      {0xa000000000000000, 0x0000000000000000},\n      {0xc800000000000000, 0x0000000000000000},\n      {0xfa00000000000000, 0x0000000000000000},\n      {0x9c40000000000000, 0x0000000000000000},\n      {0xc350000000000000, 0x0000000000000000},\n      {0xf424000000000000, 0x0000000000000000},\n      {0x9896800000000000, 0x0000000000000000},\n      {0xbebc200000000000, 0x0000000000000000},\n      {0xee6b280000000000, 0x0000000000000000},\n      {0x9502f90000000000, 0x0000000000000000},\n      {0xba43b74000000000, 0x0000000000000000},\n      {0xe8d4a51000000000, 0x0000000000000000},\n      {0x9184e72a00000000, 0x0000000000000000},\n      {0xb5e620f480000000, 0x0000000000000000},\n      {0xe35fa931a0000000, 0x0000000000000000},\n      {0x8e1bc9bf04000000, 0x0000000000000000},\n      {0xb1a2bc2ec5000000, 0x0000000000000000},\n      {0xde0b6b3a76400000, 0x0000000000000000},\n      {0x8ac7230489e80000, 0x0000000000000000},\n      {0xad78ebc5ac620000, 0x0000000000000000},\n      {0xd8d726b7177a8000, 0x0000000000000000},\n      {0x878678326eac9000, 0x0000000000000000},\n      {0xa968163f0a57b400, 0x0000000000000000},\n      {0xd3c21bcecceda100, 0x0000000000000000},\n      {0x84595161401484a0, 0x0000000000000000},\n      {0xa56fa5b99019a5c8, 0x0000000000000000},\n      {0xcecb8f27f4200f3a, 0x0000000000000000},\n      {0x813f3978f8940984, 0x4000000000000000},\n      {0xa18f07d736b90be5, 0x5000000000000000},\n      {0xc9f2c9cd04674ede, 0xa400000000000000},\n      {0xfc6f7c4045812296, 0x4d00000000000000},\n      {0x9dc5ada82b70b59d, 0xf020000000000000},\n      {0xc5371912364ce305, 0x6c28000000000000},\n      {0xf684df56c3e01bc6, 0xc732000000000000},\n      {0x9a130b963a6c115c, 0x3c7f400000000000},\n      {0xc097ce7bc90715b3, 0x4b9f100000000000},\n      {0xf0bdc21abb48db20, 0x1e86d40000000000},\n      {0x96769950b50d88f4, 0x1314448000000000},\n      {0xbc143fa4e250eb31, 0x17d955a000000000},\n      {0xeb194f8e1ae525fd, 0x5dcfab0800000000},\n      {0x92efd1b8d0cf37be, 0x5aa1cae500000000},\n      {0xb7abc627050305ad, 0xf14a3d9e40000000},\n      {0xe596b7b0c643c719, 0x6d9ccd05d0000000},\n      {0x8f7e32ce7bea5c6f, 0xe4820023a2000000},\n      {0xb35dbf821ae4f38b, 0xdda2802c8a800000},\n      {0xe0352f62a19e306e, 0xd50b2037ad200000},\n      {0x8c213d9da502de45, 0x4526f422cc340000},\n      {0xaf298d050e4395d6, 0x9670b12b7f410000},\n      {0xdaf3f04651d47b4c, 0x3c0cdd765f114000},\n      {0x88d8762bf324cd0f, 0xa5880a69fb6ac800},\n      {0xab0e93b6efee0053, 0x8eea0d047a457a00},\n      {0xd5d238a4abe98068, 0x72a4904598d6d880},\n      {0x85a36366eb71f041, 0x47a6da2b7f864750},\n      {0xa70c3c40a64e6c51, 0x999090b65f67d924},\n      {0xd0cf4b50cfe20765, 0xfff4b4e3f741cf6d},\n      {0x82818f1281ed449f, 0xbff8f10e7a8921a5},\n      {0xa321f2d7226895c7, 0xaff72d52192b6a0e},\n      {0xcbea6f8ceb02bb39, 0x9bf4f8a69f764491},\n      {0xfee50b7025c36a08, 0x02f236d04753d5b5},\n      {0x9f4f2726179a2245, 0x01d762422c946591},\n      {0xc722f0ef9d80aad6, 0x424d3ad2b7b97ef6},\n      {0xf8ebad2b84e0d58b, 0xd2e0898765a7deb3},\n      {0x9b934c3b330c8577, 0x63cc55f49f88eb30},\n      {0xc2781f49ffcfa6d5, 0x3cbf6b71c76b25fc},\n      {0xf316271c7fc3908a, 0x8bef464e3945ef7b},\n      {0x97edd871cfda3a56, 0x97758bf0e3cbb5ad},\n      {0xbde94e8e43d0c8ec, 0x3d52eeed1cbea318},\n      {0xed63a231d4c4fb27, 0x4ca7aaa863ee4bde},\n      {0x945e455f24fb1cf8, 0x8fe8caa93e74ef6b},\n      {0xb975d6b6ee39e436, 0xb3e2fd538e122b45},\n      {0xe7d34c64a9c85d44, 0x60dbbca87196b617},\n      {0x90e40fbeea1d3a4a, 0xbc8955e946fe31ce},\n      {0xb51d13aea4a488dd, 0x6babab6398bdbe42},\n      {0xe264589a4dcdab14, 0xc696963c7eed2dd2},\n      {0x8d7eb76070a08aec, 0xfc1e1de5cf543ca3},\n      {0xb0de65388cc8ada8, 0x3b25a55f43294bcc},\n      {0xdd15fe86affad912, 0x49ef0eb713f39ebf},\n      {0x8a2dbf142dfcc7ab, 0x6e3569326c784338},\n      {0xacb92ed9397bf996, 0x49c2c37f07965405},\n      {0xd7e77a8f87daf7fb, 0xdc33745ec97be907},\n      {0x86f0ac99b4e8dafd, 0x69a028bb3ded71a4},\n      {0xa8acd7c0222311bc, 0xc40832ea0d68ce0d},\n      {0xd2d80db02aabd62b, 0xf50a3fa490c30191},\n      {0x83c7088e1aab65db, 0x792667c6da79e0fb},\n      {0xa4b8cab1a1563f52, 0x577001b891185939},\n      {0xcde6fd5e09abcf26, 0xed4c0226b55e6f87},\n      {0x80b05e5ac60b6178, 0x544f8158315b05b5},\n      {0xa0dc75f1778e39d6, 0x696361ae3db1c722},\n      {0xc913936dd571c84c, 0x03bc3a19cd1e38ea},\n      {0xfb5878494ace3a5f, 0x04ab48a04065c724},\n      {0x9d174b2dcec0e47b, 0x62eb0d64283f9c77},\n      {0xc45d1df942711d9a, 0x3ba5d0bd324f8395},\n      {0xf5746577930d6500, 0xca8f44ec7ee3647a},\n      {0x9968bf6abbe85f20, 0x7e998b13cf4e1ecc},\n      {0xbfc2ef456ae276e8, 0x9e3fedd8c321a67f},\n      {0xefb3ab16c59b14a2, 0xc5cfe94ef3ea101f},\n      {0x95d04aee3b80ece5, 0xbba1f1d158724a13},\n      {0xbb445da9ca61281f, 0x2a8a6e45ae8edc98},\n      {0xea1575143cf97226, 0xf52d09d71a3293be},\n      {0x924d692ca61be758, 0x593c2626705f9c57},\n      {0xb6e0c377cfa2e12e, 0x6f8b2fb00c77836d},\n      {0xe498f455c38b997a, 0x0b6dfb9c0f956448},\n      {0x8edf98b59a373fec, 0x4724bd4189bd5ead},\n      {0xb2977ee300c50fe7, 0x58edec91ec2cb658},\n      {0xdf3d5e9bc0f653e1, 0x2f2967b66737e3ee},\n      {0x8b865b215899f46c, 0xbd79e0d20082ee75},\n      {0xae67f1e9aec07187, 0xecd8590680a3aa12},\n      {0xda01ee641a708de9, 0xe80e6f4820cc9496},\n      {0x884134fe908658b2, 0x3109058d147fdcde},\n      {0xaa51823e34a7eede, 0xbd4b46f0599fd416},\n      {0xd4e5e2cdc1d1ea96, 0x6c9e18ac7007c91b},\n      {0x850fadc09923329e, 0x03e2cf6bc604ddb1},\n      {0xa6539930bf6bff45, 0x84db8346b786151d},\n      {0xcfe87f7cef46ff16, 0xe612641865679a64},\n      {0x81f14fae158c5f6e, 0x4fcb7e8f3f60c07f},\n      {0xa26da3999aef7749, 0xe3be5e330f38f09e},\n      {0xcb090c8001ab551c, 0x5cadf5bfd3072cc6},\n      {0xfdcb4fa002162a63, 0x73d9732fc7c8f7f7},\n      {0x9e9f11c4014dda7e, 0x2867e7fddcdd9afb},\n      {0xc646d63501a1511d, 0xb281e1fd541501b9},\n      {0xf7d88bc24209a565, 0x1f225a7ca91a4227},\n      {0x9ae757596946075f, 0x3375788de9b06959},\n      {0xc1a12d2fc3978937, 0x0052d6b1641c83af},\n      {0xf209787bb47d6b84, 0xc0678c5dbd23a49b},\n      {0x9745eb4d50ce6332, 0xf840b7ba963646e1},\n      {0xbd176620a501fbff, 0xb650e5a93bc3d899},\n      {0xec5d3fa8ce427aff, 0xa3e51f138ab4cebf},\n      {0x93ba47c980e98cdf, 0xc66f336c36b10138},\n      {0xb8a8d9bbe123f017, 0xb80b0047445d4185},\n      {0xe6d3102ad96cec1d, 0xa60dc059157491e6},\n      {0x9043ea1ac7e41392, 0x87c89837ad68db30},\n      {0xb454e4a179dd1877, 0x29babe4598c311fc},\n      {0xe16a1dc9d8545e94, 0xf4296dd6fef3d67b},\n      {0x8ce2529e2734bb1d, 0x1899e4a65f58660d},\n      {0xb01ae745b101e9e4, 0x5ec05dcff72e7f90},\n      {0xdc21a1171d42645d, 0x76707543f4fa1f74},\n      {0x899504ae72497eba, 0x6a06494a791c53a9},\n      {0xabfa45da0edbde69, 0x0487db9d17636893},\n      {0xd6f8d7509292d603, 0x45a9d2845d3c42b7},\n      {0x865b86925b9bc5c2, 0x0b8a2392ba45a9b3},\n      {0xa7f26836f282b732, 0x8e6cac7768d7141f},\n      {0xd1ef0244af2364ff, 0x3207d795430cd927},\n      {0x8335616aed761f1f, 0x7f44e6bd49e807b9},\n      {0xa402b9c5a8d3a6e7, 0x5f16206c9c6209a7},\n      {0xcd036837130890a1, 0x36dba887c37a8c10},\n      {0x802221226be55a64, 0xc2494954da2c978a},\n      {0xa02aa96b06deb0fd, 0xf2db9baa10b7bd6d},\n      {0xc83553c5c8965d3d, 0x6f92829494e5acc8},\n      {0xfa42a8b73abbf48c, 0xcb772339ba1f17fa},\n      {0x9c69a97284b578d7, 0xff2a760414536efc},\n      {0xc38413cf25e2d70d, 0xfef5138519684abb},\n      {0xf46518c2ef5b8cd1, 0x7eb258665fc25d6a},\n      {0x98bf2f79d5993802, 0xef2f773ffbd97a62},\n      {0xbeeefb584aff8603, 0xaafb550ffacfd8fb},\n      {0xeeaaba2e5dbf6784, 0x95ba2a53f983cf39},\n      {0x952ab45cfa97a0b2, 0xdd945a747bf26184},\n      {0xba756174393d88df, 0x94f971119aeef9e5},\n      {0xe912b9d1478ceb17, 0x7a37cd5601aab85e},\n      {0x91abb422ccb812ee, 0xac62e055c10ab33b},\n      {0xb616a12b7fe617aa, 0x577b986b314d600a},\n      {0xe39c49765fdf9d94, 0xed5a7e85fda0b80c},\n      {0x8e41ade9fbebc27d, 0x14588f13be847308},\n      {0xb1d219647ae6b31c, 0x596eb2d8ae258fc9},\n      {0xde469fbd99a05fe3, 0x6fca5f8ed9aef3bc},\n      {0x8aec23d680043bee, 0x25de7bb9480d5855},\n      {0xada72ccc20054ae9, 0xaf561aa79a10ae6b},\n      {0xd910f7ff28069da4, 0x1b2ba1518094da05},\n      {0x87aa9aff79042286, 0x90fb44d2f05d0843},\n      {0xa99541bf57452b28, 0x353a1607ac744a54},\n      {0xd3fa922f2d1675f2, 0x42889b8997915ce9},\n      {0x847c9b5d7c2e09b7, 0x69956135febada12},\n      {0xa59bc234db398c25, 0x43fab9837e699096},\n      {0xcf02b2c21207ef2e, 0x94f967e45e03f4bc},\n      {0x8161afb94b44f57d, 0x1d1be0eebac278f6},\n      {0xa1ba1ba79e1632dc, 0x6462d92a69731733},\n      {0xca28a291859bbf93, 0x7d7b8f7503cfdcff},\n      {0xfcb2cb35e702af78, 0x5cda735244c3d43f},\n      {0x9defbf01b061adab, 0x3a0888136afa64a8},\n      {0xc56baec21c7a1916, 0x088aaa1845b8fdd1},\n      {0xf6c69a72a3989f5b, 0x8aad549e57273d46},\n      {0x9a3c2087a63f6399, 0x36ac54e2f678864c},\n      {0xc0cb28a98fcf3c7f, 0x84576a1bb416a7de},\n      {0xf0fdf2d3f3c30b9f, 0x656d44a2a11c51d6},\n      {0x969eb7c47859e743, 0x9f644ae5a4b1b326},\n      {0xbc4665b596706114, 0x873d5d9f0dde1fef},\n      {0xeb57ff22fc0c7959, 0xa90cb506d155a7eb},\n      {0x9316ff75dd87cbd8, 0x09a7f12442d588f3},\n      {0xb7dcbf5354e9bece, 0x0c11ed6d538aeb30},\n      {0xe5d3ef282a242e81, 0x8f1668c8a86da5fb},\n      {0x8fa475791a569d10, 0xf96e017d694487bd},\n      {0xb38d92d760ec4455, 0x37c981dcc395a9ad},\n      {0xe070f78d3927556a, 0x85bbe253f47b1418},\n      {0x8c469ab843b89562, 0x93956d7478ccec8f},\n      {0xaf58416654a6babb, 0x387ac8d1970027b3},\n      {0xdb2e51bfe9d0696a, 0x06997b05fcc0319f},\n      {0x88fcf317f22241e2, 0x441fece3bdf81f04},\n      {0xab3c2fddeeaad25a, 0xd527e81cad7626c4},\n      {0xd60b3bd56a5586f1, 0x8a71e223d8d3b075},\n      {0x85c7056562757456, 0xf6872d5667844e4a},\n      {0xa738c6bebb12d16c, 0xb428f8ac016561dc},\n      {0xd106f86e69d785c7, 0xe13336d701beba53},\n      {0x82a45b450226b39c, 0xecc0024661173474},\n      {0xa34d721642b06084, 0x27f002d7f95d0191},\n      {0xcc20ce9bd35c78a5, 0x31ec038df7b441f5},\n      {0xff290242c83396ce, 0x7e67047175a15272},\n      {0x9f79a169bd203e41, 0x0f0062c6e984d387},\n      {0xc75809c42c684dd1, 0x52c07b78a3e60869},\n      {0xf92e0c3537826145, 0xa7709a56ccdf8a83},\n      {0x9bbcc7a142b17ccb, 0x88a66076400bb692},\n      {0xc2abf989935ddbfe, 0x6acff893d00ea436},\n      {0xf356f7ebf83552fe, 0x0583f6b8c4124d44},\n      {0x98165af37b2153de, 0xc3727a337a8b704b},\n      {0xbe1bf1b059e9a8d6, 0x744f18c0592e4c5d},\n      {0xeda2ee1c7064130c, 0x1162def06f79df74},\n      {0x9485d4d1c63e8be7, 0x8addcb5645ac2ba9},\n      {0xb9a74a0637ce2ee1, 0x6d953e2bd7173693},\n      {0xe8111c87c5c1ba99, 0xc8fa8db6ccdd0438},\n      {0x910ab1d4db9914a0, 0x1d9c9892400a22a3},\n      {0xb54d5e4a127f59c8, 0x2503beb6d00cab4c},\n      {0xe2a0b5dc971f303a, 0x2e44ae64840fd61e},\n      {0x8da471a9de737e24, 0x5ceaecfed289e5d3},\n      {0xb10d8e1456105dad, 0x7425a83e872c5f48},\n      {0xdd50f1996b947518, 0xd12f124e28f7771a},\n      {0x8a5296ffe33cc92f, 0x82bd6b70d99aaa70},\n      {0xace73cbfdc0bfb7b, 0x636cc64d1001550c},\n      {0xd8210befd30efa5a, 0x3c47f7e05401aa4f},\n      {0x8714a775e3e95c78, 0x65acfaec34810a72},\n      {0xa8d9d1535ce3b396, 0x7f1839a741a14d0e},\n      {0xd31045a8341ca07c, 0x1ede48111209a051},\n      {0x83ea2b892091e44d, 0x934aed0aab460433},\n      {0xa4e4b66b68b65d60, 0xf81da84d56178540},\n      {0xce1de40642e3f4b9, 0x36251260ab9d668f},\n      {0x80d2ae83e9ce78f3, 0xc1d72b7c6b42601a},\n      {0xa1075a24e4421730, 0xb24cf65b8612f820},\n      {0xc94930ae1d529cfc, 0xdee033f26797b628},\n      {0xfb9b7cd9a4a7443c, 0x169840ef017da3b2},\n      {0x9d412e0806e88aa5, 0x8e1f289560ee864f},\n      {0xc491798a08a2ad4e, 0xf1a6f2bab92a27e3},\n      {0xf5b5d7ec8acb58a2, 0xae10af696774b1dc},\n      {0x9991a6f3d6bf1765, 0xacca6da1e0a8ef2a},\n      {0xbff610b0cc6edd3f, 0x17fd090a58d32af4},\n      {0xeff394dcff8a948e, 0xddfc4b4cef07f5b1},\n      {0x95f83d0a1fb69cd9, 0x4abdaf101564f98f},\n      {0xbb764c4ca7a4440f, 0x9d6d1ad41abe37f2},\n      {0xea53df5fd18d5513, 0x84c86189216dc5ee},\n      {0x92746b9be2f8552c, 0x32fd3cf5b4e49bb5},\n      {0xb7118682dbb66a77, 0x3fbc8c33221dc2a2},\n      {0xe4d5e82392a40515, 0x0fabaf3feaa5334b},\n      {0x8f05b1163ba6832d, 0x29cb4d87f2a7400f},\n      {0xb2c71d5bca9023f8, 0x743e20e9ef511013},\n      {0xdf78e4b2bd342cf6, 0x914da9246b255417},\n      {0x8bab8eefb6409c1a, 0x1ad089b6c2f7548f},\n      {0xae9672aba3d0c320, 0xa184ac2473b529b2},\n      {0xda3c0f568cc4f3e8, 0xc9e5d72d90a2741f},\n      {0x8865899617fb1871, 0x7e2fa67c7a658893},\n      {0xaa7eebfb9df9de8d, 0xddbb901b98feeab8},\n      {0xd51ea6fa85785631, 0x552a74227f3ea566},\n      {0x8533285c936b35de, 0xd53a88958f872760},\n      {0xa67ff273b8460356, 0x8a892abaf368f138},\n      {0xd01fef10a657842c, 0x2d2b7569b0432d86},\n      {0x8213f56a67f6b29b, 0x9c3b29620e29fc74},\n      {0xa298f2c501f45f42, 0x8349f3ba91b47b90},\n      {0xcb3f2f7642717713, 0x241c70a936219a74},\n      {0xfe0efb53d30dd4d7, 0xed238cd383aa0111},\n      {0x9ec95d1463e8a506, 0xf4363804324a40ab},\n      {0xc67bb4597ce2ce48, 0xb143c6053edcd0d6},\n      {0xf81aa16fdc1b81da, 0xdd94b7868e94050b},\n      {0x9b10a4e5e9913128, 0xca7cf2b4191c8327},\n      {0xc1d4ce1f63f57d72, 0xfd1c2f611f63a3f1},\n      {0xf24a01a73cf2dccf, 0xbc633b39673c8ced},\n      {0x976e41088617ca01, 0xd5be0503e085d814},\n      {0xbd49d14aa79dbc82, 0x4b2d8644d8a74e19},\n      {0xec9c459d51852ba2, 0xddf8e7d60ed1219f},\n      {0x93e1ab8252f33b45, 0xcabb90e5c942b504},\n      {0xb8da1662e7b00a17, 0x3d6a751f3b936244},\n      {0xe7109bfba19c0c9d, 0x0cc512670a783ad5},\n      {0x906a617d450187e2, 0x27fb2b80668b24c6},\n      {0xb484f9dc9641e9da, 0xb1f9f660802dedf7},\n      {0xe1a63853bbd26451, 0x5e7873f8a0396974},\n      {0x8d07e33455637eb2, 0xdb0b487b6423e1e9},\n      {0xb049dc016abc5e5f, 0x91ce1a9a3d2cda63},\n      {0xdc5c5301c56b75f7, 0x7641a140cc7810fc},\n      {0x89b9b3e11b6329ba, 0xa9e904c87fcb0a9e},\n      {0xac2820d9623bf429, 0x546345fa9fbdcd45},\n      {0xd732290fbacaf133, 0xa97c177947ad4096},\n      {0x867f59a9d4bed6c0, 0x49ed8eabcccc485e},\n      {0xa81f301449ee8c70, 0x5c68f256bfff5a75},\n      {0xd226fc195c6a2f8c, 0x73832eec6fff3112},\n      {0x83585d8fd9c25db7, 0xc831fd53c5ff7eac},\n      {0xa42e74f3d032f525, 0xba3e7ca8b77f5e56},\n      {0xcd3a1230c43fb26f, 0x28ce1bd2e55f35ec},\n      {0x80444b5e7aa7cf85, 0x7980d163cf5b81b4},\n      {0xa0555e361951c366, 0xd7e105bcc3326220},\n      {0xc86ab5c39fa63440, 0x8dd9472bf3fefaa8},\n      {0xfa856334878fc150, 0xb14f98f6f0feb952},\n      {0x9c935e00d4b9d8d2, 0x6ed1bf9a569f33d4},\n      {0xc3b8358109e84f07, 0x0a862f80ec4700c9},\n      {0xf4a642e14c6262c8, 0xcd27bb612758c0fb},\n      {0x98e7e9cccfbd7dbd, 0x8038d51cb897789d},\n      {0xbf21e44003acdd2c, 0xe0470a63e6bd56c4},\n      {0xeeea5d5004981478, 0x1858ccfce06cac75},\n      {0x95527a5202df0ccb, 0x0f37801e0c43ebc9},\n      {0xbaa718e68396cffd, 0xd30560258f54e6bb},\n      {0xe950df20247c83fd, 0x47c6b82ef32a206a},\n      {0x91d28b7416cdd27e, 0x4cdc331d57fa5442},\n      {0xb6472e511c81471d, 0xe0133fe4adf8e953},\n      {0xe3d8f9e563a198e5, 0x58180fddd97723a7},\n      {0x8e679c2f5e44ff8f, 0x570f09eaa7ea7649},\n      {0xb201833b35d63f73, 0x2cd2cc6551e513db},\n      {0xde81e40a034bcf4f, 0xf8077f7ea65e58d2},\n      {0x8b112e86420f6191, 0xfb04afaf27faf783},\n      {0xadd57a27d29339f6, 0x79c5db9af1f9b564},\n      {0xd94ad8b1c7380874, 0x18375281ae7822bd},\n      {0x87cec76f1c830548, 0x8f2293910d0b15b6},\n      {0xa9c2794ae3a3c69a, 0xb2eb3875504ddb23},\n      {0xd433179d9c8cb841, 0x5fa60692a46151ec},\n      {0x849feec281d7f328, 0xdbc7c41ba6bcd334},\n      {0xa5c7ea73224deff3, 0x12b9b522906c0801},\n      {0xcf39e50feae16bef, 0xd768226b34870a01},\n      {0x81842f29f2cce375, 0xe6a1158300d46641},\n      {0xa1e53af46f801c53, 0x60495ae3c1097fd1},\n      {0xca5e89b18b602368, 0x385bb19cb14bdfc5},\n      {0xfcf62c1dee382c42, 0x46729e03dd9ed7b6},\n      {0x9e19db92b4e31ba9, 0x6c07a2c26a8346d2},\n      {0xc5a05277621be293, 0xc7098b7305241886},\n      { 0xf70867153aa2db38,\n        0xb8cbee4fc66d1ea8 }\n#else\n      {0xff77b1fcbebcdc4f, 0x25e8e89c13bb0f7b},\n      {0xce5d73ff402d98e3, 0xfb0a3d212dc81290},\n      {0xa6b34ad8c9dfc06f, 0xf42faa48c0ea481f},\n      {0x86a8d39ef77164bc, 0xae5dff9c02033198},\n      {0xd98ddaee19068c76, 0x3badd624dd9b0958},\n      {0xafbd2350644eeacf, 0xe5d1929ef90898fb},\n      {0x8df5efabc5979c8f, 0xca8d3ffa1ef463c2},\n      {0xe55990879ddcaabd, 0xcc420a6a101d0516},\n      {0xb94470938fa89bce, 0xf808e40e8d5b3e6a},\n      {0x95a8637627989aad, 0xdde7001379a44aa9},\n      {0xf1c90080baf72cb1, 0x5324c68b12dd6339},\n      {0xc350000000000000, 0x0000000000000000},\n      {0x9dc5ada82b70b59d, 0xf020000000000000},\n      {0xfee50b7025c36a08, 0x02f236d04753d5b5},\n      {0xcde6fd5e09abcf26, 0xed4c0226b55e6f87},\n      {0xa6539930bf6bff45, 0x84db8346b786151d},\n      {0x865b86925b9bc5c2, 0x0b8a2392ba45a9b3},\n      {0xd910f7ff28069da4, 0x1b2ba1518094da05},\n      {0xaf58416654a6babb, 0x387ac8d1970027b3},\n      {0x8da471a9de737e24, 0x5ceaecfed289e5d3},\n      {0xe4d5e82392a40515, 0x0fabaf3feaa5334b},\n      {0xb8da1662e7b00a17, 0x3d6a751f3b936244},\n      { 0x95527a5202df0ccb,\n        0x0f37801e0c43ebc9 }\n#endif\n    };\n\n#if FMT_USE_FULL_CACHE_DRAGONBOX\n    return pow10_significands[k - float_info<double>::min_k];\n#else\n    static constexpr const uint64_t powers_of_5_64[] = {\n        0x0000000000000001, 0x0000000000000005, 0x0000000000000019,\n        0x000000000000007d, 0x0000000000000271, 0x0000000000000c35,\n        0x0000000000003d09, 0x000000000001312d, 0x000000000005f5e1,\n        0x00000000001dcd65, 0x00000000009502f9, 0x0000000002e90edd,\n        0x000000000e8d4a51, 0x0000000048c27395, 0x000000016bcc41e9,\n        0x000000071afd498d, 0x0000002386f26fc1, 0x000000b1a2bc2ec5,\n        0x000003782dace9d9, 0x00001158e460913d, 0x000056bc75e2d631,\n        0x0001b1ae4d6e2ef5, 0x000878678326eac9, 0x002a5a058fc295ed,\n        0x00d3c21bcecceda1, 0x0422ca8b0a00a425, 0x14adf4b7320334b9};\n\n    static const int compression_ratio = 27;\n\n    // Compute base index.\n    int cache_index = (k - float_info<double>::min_k) / compression_ratio;\n    int kb = cache_index * compression_ratio + float_info<double>::min_k;\n    int offset = k - kb;\n\n    // Get base cache.\n    uint128_fallback base_cache = pow10_significands[cache_index];\n    if (offset == 0) return base_cache;\n\n    // Compute the required amount of bit-shift.\n    int alpha = floor_log2_pow10(kb + offset) - floor_log2_pow10(kb) - offset;\n    FMT_ASSERT(alpha > 0 && alpha < 64, \"shifting error detected\");\n\n    // Try to recover the real cache.\n    uint64_t pow5 = powers_of_5_64[offset];\n    uint128_fallback recovered_cache = umul128(base_cache.high(), pow5);\n    uint128_fallback middle_low = umul128(base_cache.low(), pow5);\n\n    recovered_cache += middle_low.high();\n\n    uint64_t high_to_middle = recovered_cache.high() << (64 - alpha);\n    uint64_t middle_to_low = recovered_cache.low() << (64 - alpha);\n\n    recovered_cache =\n        uint128_fallback{(recovered_cache.low() >> alpha) | high_to_middle,\n                         ((middle_low.low() >> alpha) | middle_to_low)};\n    FMT_ASSERT(recovered_cache.low() + 1 != 0, \"\");\n    return {recovered_cache.high(), recovered_cache.low() + 1};\n#endif\n  }\n\n  struct compute_mul_result {\n    carrier_uint result;\n    bool is_integer;\n  };\n  struct compute_mul_parity_result {\n    bool parity;\n    bool is_integer;\n  };\n\n  static compute_mul_result compute_mul(\n      carrier_uint u, const cache_entry_type& cache) noexcept {\n    auto r = umul192_upper128(u, cache);\n    return {r.high(), r.low() == 0};\n  }\n\n  static uint32_t compute_delta(cache_entry_type const& cache,\n                                int beta) noexcept {\n    return static_cast<uint32_t>(cache.high() >> (64 - 1 - beta));\n  }\n\n  static compute_mul_parity_result compute_mul_parity(\n      carrier_uint two_f, const cache_entry_type& cache, int beta) noexcept {\n    FMT_ASSERT(beta >= 1, \"\");\n    FMT_ASSERT(beta < 64, \"\");\n\n    auto r = umul192_lower128(two_f, cache);\n    return {((r.high() >> (64 - beta)) & 1) != 0,\n            ((r.high() << beta) | (r.low() >> (64 - beta))) == 0};\n  }\n\n  static carrier_uint compute_left_endpoint_for_shorter_interval_case(\n      const cache_entry_type& cache, int beta) noexcept {\n    return (cache.high() -\n            (cache.high() >> (num_significand_bits<double>() + 2))) >>\n           (64 - num_significand_bits<double>() - 1 - beta);\n  }\n\n  static carrier_uint compute_right_endpoint_for_shorter_interval_case(\n      const cache_entry_type& cache, int beta) noexcept {\n    return (cache.high() +\n            (cache.high() >> (num_significand_bits<double>() + 1))) >>\n           (64 - num_significand_bits<double>() - 1 - beta);\n  }\n\n  static carrier_uint compute_round_up_for_shorter_interval_case(\n      const cache_entry_type& cache, int beta) noexcept {\n    return ((cache.high() >> (64 - num_significand_bits<double>() - 2 - beta)) +\n            1) /\n           2;\n  }\n};\n\n// Various integer checks\ntemplate <class T>\nbool is_left_endpoint_integer_shorter_interval(int exponent) noexcept {\n  const int case_shorter_interval_left_endpoint_lower_threshold = 2;\n  const int case_shorter_interval_left_endpoint_upper_threshold = 3;\n  return exponent >= case_shorter_interval_left_endpoint_lower_threshold &&\n         exponent <= case_shorter_interval_left_endpoint_upper_threshold;\n}\n\n// Remove trailing zeros from n and return the number of zeros removed (float)\nFMT_INLINE int remove_trailing_zeros(uint32_t& n) noexcept {\n  FMT_ASSERT(n != 0, \"\");\n  const uint32_t mod_inv_5 = 0xcccccccd;\n  const uint32_t mod_inv_25 = mod_inv_5 * mod_inv_5;\n\n  int s = 0;\n  while (true) {\n    auto q = rotr(n * mod_inv_25, 2);\n    if (q > max_value<uint32_t>() / 100) break;\n    n = q;\n    s += 2;\n  }\n  auto q = rotr(n * mod_inv_5, 1);\n  if (q <= max_value<uint32_t>() / 10) {\n    n = q;\n    s |= 1;\n  }\n\n  return s;\n}\n\n// Removes trailing zeros and returns the number of zeros removed (double)\nFMT_INLINE int remove_trailing_zeros(uint64_t& n) noexcept {\n  FMT_ASSERT(n != 0, \"\");\n\n  // This magic number is ceil(2^90 / 10^8).\n  constexpr uint64_t magic_number = 12379400392853802749ull;\n  auto nm = umul128(n, magic_number);\n\n  // Is n is divisible by 10^8?\n  if ((nm.high() & ((1ull << (90 - 64)) - 1)) == 0 && nm.low() < magic_number) {\n    // If yes, work with the quotient.\n    auto n32 = static_cast<uint32_t>(nm.high() >> (90 - 64));\n\n    const uint32_t mod_inv_5 = 0xcccccccd;\n    const uint32_t mod_inv_25 = mod_inv_5 * mod_inv_5;\n\n    int s = 8;\n    while (true) {\n      auto q = rotr(n32 * mod_inv_25, 2);\n      if (q > max_value<uint32_t>() / 100) break;\n      n32 = q;\n      s += 2;\n    }\n    auto q = rotr(n32 * mod_inv_5, 1);\n    if (q <= max_value<uint32_t>() / 10) {\n      n32 = q;\n      s |= 1;\n    }\n\n    n = n32;\n    return s;\n  }\n\n  // If n is not divisible by 10^8, work with n itself.\n  const uint64_t mod_inv_5 = 0xcccccccccccccccd;\n  const uint64_t mod_inv_25 = mod_inv_5 * mod_inv_5;\n\n  int s = 0;\n  while (true) {\n    auto q = rotr(n * mod_inv_25, 2);\n    if (q > max_value<uint64_t>() / 100) break;\n    n = q;\n    s += 2;\n  }\n  auto q = rotr(n * mod_inv_5, 1);\n  if (q <= max_value<uint64_t>() / 10) {\n    n = q;\n    s |= 1;\n  }\n\n  return s;\n}\n\n// The main algorithm for shorter interval case\ntemplate <class T>\nFMT_INLINE decimal_fp<T> shorter_interval_case(int exponent) noexcept {\n  decimal_fp<T> ret_value;\n  // Compute k and beta\n  const int minus_k = floor_log10_pow2_minus_log10_4_over_3(exponent);\n  const int beta = exponent + floor_log2_pow10(-minus_k);\n\n  // Compute xi and zi\n  using cache_entry_type = typename cache_accessor<T>::cache_entry_type;\n  const cache_entry_type cache = cache_accessor<T>::get_cached_power(-minus_k);\n\n  auto xi = cache_accessor<T>::compute_left_endpoint_for_shorter_interval_case(\n      cache, beta);\n  auto zi = cache_accessor<T>::compute_right_endpoint_for_shorter_interval_case(\n      cache, beta);\n\n  // If the left endpoint is not an integer, increase it\n  if (!is_left_endpoint_integer_shorter_interval<T>(exponent)) ++xi;\n\n  // Try bigger divisor\n  ret_value.significand = zi / 10;\n\n  // If succeed, remove trailing zeros if necessary and return\n  if (ret_value.significand * 10 >= xi) {\n    ret_value.exponent = minus_k + 1;\n    ret_value.exponent += remove_trailing_zeros(ret_value.significand);\n    return ret_value;\n  }\n\n  // Otherwise, compute the round-up of y\n  ret_value.significand =\n      cache_accessor<T>::compute_round_up_for_shorter_interval_case(cache,\n                                                                    beta);\n  ret_value.exponent = minus_k;\n\n  // When tie occurs, choose one of them according to the rule\n  if (exponent >= float_info<T>::shorter_interval_tie_lower_threshold &&\n      exponent <= float_info<T>::shorter_interval_tie_upper_threshold) {\n    ret_value.significand = ret_value.significand % 2 == 0\n                                ? ret_value.significand\n                                : ret_value.significand - 1;\n  } else if (ret_value.significand < xi) {\n    ++ret_value.significand;\n  }\n  return ret_value;\n}\n\ntemplate <typename T> decimal_fp<T> to_decimal(T x) noexcept {\n  // Step 1: integer promotion & Schubfach multiplier calculation.\n\n  using carrier_uint = typename float_info<T>::carrier_uint;\n  using cache_entry_type = typename cache_accessor<T>::cache_entry_type;\n  auto br = bit_cast<carrier_uint>(x);\n\n  // Extract significand bits and exponent bits.\n  const carrier_uint significand_mask =\n      (static_cast<carrier_uint>(1) << num_significand_bits<T>()) - 1;\n  carrier_uint significand = (br & significand_mask);\n  int exponent =\n      static_cast<int>((br & exponent_mask<T>()) >> num_significand_bits<T>());\n\n  if (exponent != 0) {  // Check if normal.\n    exponent -= exponent_bias<T>() + num_significand_bits<T>();\n\n    // Shorter interval case; proceed like Schubfach.\n    // In fact, when exponent == 1 and significand == 0, the interval is\n    // regular. However, it can be shown that the end-results are anyway same.\n    if (significand == 0) return shorter_interval_case<T>(exponent);\n\n    significand |= (static_cast<carrier_uint>(1) << num_significand_bits<T>());\n  } else {\n    // Subnormal case; the interval is always regular.\n    if (significand == 0) return {0, 0};\n    exponent =\n        std::numeric_limits<T>::min_exponent - num_significand_bits<T>() - 1;\n  }\n\n  const bool include_left_endpoint = (significand % 2 == 0);\n  const bool include_right_endpoint = include_left_endpoint;\n\n  // Compute k and beta.\n  const int minus_k = floor_log10_pow2(exponent) - float_info<T>::kappa;\n  const cache_entry_type cache = cache_accessor<T>::get_cached_power(-minus_k);\n  const int beta = exponent + floor_log2_pow10(-minus_k);\n\n  // Compute zi and deltai.\n  // 10^kappa <= deltai < 10^(kappa + 1)\n  const uint32_t deltai = cache_accessor<T>::compute_delta(cache, beta);\n  const carrier_uint two_fc = significand << 1;\n\n  // For the case of binary32, the result of integer check is not correct for\n  // 29711844 * 2^-82\n  // = 6.1442653300000000008655037797566933477355632930994033813476... * 10^-18\n  // and 29711844 * 2^-81\n  // = 1.2288530660000000001731007559513386695471126586198806762695... * 10^-17,\n  // and they are the unique counterexamples. However, since 29711844 is even,\n  // this does not cause any problem for the endpoints calculations; it can only\n  // cause a problem when we need to perform integer check for the center.\n  // Fortunately, with these inputs, that branch is never executed, so we are\n  // fine.\n  const typename cache_accessor<T>::compute_mul_result z_mul =\n      cache_accessor<T>::compute_mul((two_fc | 1) << beta, cache);\n\n  // Step 2: Try larger divisor; remove trailing zeros if necessary.\n\n  // Using an upper bound on zi, we might be able to optimize the division\n  // better than the compiler; we are computing zi / big_divisor here.\n  decimal_fp<T> ret_value;\n  ret_value.significand = divide_by_10_to_kappa_plus_1(z_mul.result);\n  uint32_t r = static_cast<uint32_t>(z_mul.result - float_info<T>::big_divisor *\n                                                        ret_value.significand);\n\n  if (r < deltai) {\n    // Exclude the right endpoint if necessary.\n    if (r == 0 && (z_mul.is_integer & !include_right_endpoint)) {\n      --ret_value.significand;\n      r = float_info<T>::big_divisor;\n      goto small_divisor_case_label;\n    }\n  } else if (r > deltai) {\n    goto small_divisor_case_label;\n  } else {\n    // r == deltai; compare fractional parts.\n    const typename cache_accessor<T>::compute_mul_parity_result x_mul =\n        cache_accessor<T>::compute_mul_parity(two_fc - 1, cache, beta);\n\n    if (!(x_mul.parity | (x_mul.is_integer & include_left_endpoint)))\n      goto small_divisor_case_label;\n  }\n  ret_value.exponent = minus_k + float_info<T>::kappa + 1;\n\n  // We may need to remove trailing zeros.\n  ret_value.exponent += remove_trailing_zeros(ret_value.significand);\n  return ret_value;\n\n  // Step 3: Find the significand with the smaller divisor.\n\nsmall_divisor_case_label:\n  ret_value.significand *= 10;\n  ret_value.exponent = minus_k + float_info<T>::kappa;\n\n  uint32_t dist = r - (deltai / 2) + (float_info<T>::small_divisor / 2);\n  const bool approx_y_parity =\n      ((dist ^ (float_info<T>::small_divisor / 2)) & 1) != 0;\n\n  // Is dist divisible by 10^kappa?\n  const bool divisible_by_small_divisor =\n      check_divisibility_and_divide_by_pow10<float_info<T>::kappa>(dist);\n\n  // Add dist / 10^kappa to the significand.\n  ret_value.significand += dist;\n\n  if (!divisible_by_small_divisor) return ret_value;\n\n  // Check z^(f) >= epsilon^(f).\n  // We have either yi == zi - epsiloni or yi == (zi - epsiloni) - 1,\n  // where yi == zi - epsiloni if and only if z^(f) >= epsilon^(f).\n  // Since there are only 2 possibilities, we only need to care about the\n  // parity. Also, zi and r should have the same parity since the divisor\n  // is an even number.\n  const auto y_mul = cache_accessor<T>::compute_mul_parity(two_fc, cache, beta);\n\n  // If z^(f) >= epsilon^(f), we might have a tie when z^(f) == epsilon^(f),\n  // or equivalently, when y is an integer.\n  if (y_mul.parity != approx_y_parity)\n    --ret_value.significand;\n  else if (y_mul.is_integer & (ret_value.significand % 2 != 0))\n    --ret_value.significand;\n  return ret_value;\n}\n}  // namespace dragonbox\n\n#ifdef _MSC_VER\nFMT_FUNC auto fmt_snprintf(char* buf, size_t size, const char* fmt, ...)\n    -> int {\n  auto args = va_list();\n  va_start(args, fmt);\n  int result = vsnprintf_s(buf, size, _TRUNCATE, fmt, args);\n  va_end(args);\n  return result;\n}\n#endif\n}  // namespace detail\n\ntemplate <> struct formatter<detail::bigint> {\n  FMT_CONSTEXPR auto parse(format_parse_context& ctx)\n      -> format_parse_context::iterator {\n    return ctx.begin();\n  }\n\n  template <typename FormatContext>\n  auto format(const detail::bigint& n, FormatContext& ctx) const ->\n      typename FormatContext::iterator {\n    auto out = ctx.out();\n    bool first = true;\n    for (auto i = n.bigits_.size(); i > 0; --i) {\n      auto value = n.bigits_[i - 1u];\n      if (first) {\n        out = format_to(out, FMT_STRING(\"{:x}\"), value);\n        first = false;\n        continue;\n      }\n      out = format_to(out, FMT_STRING(\"{:08x}\"), value);\n    }\n    if (n.exp_ > 0)\n      out = format_to(out, FMT_STRING(\"p{}\"),\n                      n.exp_ * detail::bigint::bigit_bits);\n    return out;\n  }\n};\n\nFMT_FUNC detail::utf8_to_utf16::utf8_to_utf16(string_view s) {\n  for_each_codepoint(s, [this](uint32_t cp, string_view) {\n    if (cp == invalid_code_point) FMT_THROW(std::runtime_error(\"invalid utf8\"));\n    if (cp <= 0xFFFF) {\n      buffer_.push_back(static_cast<wchar_t>(cp));\n    } else {\n      cp -= 0x10000;\n      buffer_.push_back(static_cast<wchar_t>(0xD800 + (cp >> 10)));\n      buffer_.push_back(static_cast<wchar_t>(0xDC00 + (cp & 0x3FF)));\n    }\n    return true;\n  });\n  buffer_.push_back(0);\n}\n\nFMT_FUNC void format_system_error(detail::buffer<char>& out, int error_code,\n                                  const char* message) noexcept {\n  FMT_TRY {\n    auto ec = std::error_code(error_code, std::generic_category());\n    write(std::back_inserter(out), std::system_error(ec, message).what());\n    return;\n  }\n  FMT_CATCH(...) {}\n  format_error_code(out, error_code, message);\n}\n\nFMT_FUNC void report_system_error(int error_code,\n                                  const char* message) noexcept {\n  report_error(format_system_error, error_code, message);\n}\n\nFMT_FUNC std::string vformat(string_view fmt, format_args args) {\n  // Don't optimize the \"{}\" case to keep the binary size small and because it\n  // can be better optimized in fmt::format anyway.\n  auto buffer = memory_buffer();\n  detail::vformat_to(buffer, fmt, args);\n  return to_string(buffer);\n}\n\nnamespace detail {\n#ifdef _WIN32\nusing dword = conditional_t<sizeof(long) == 4, unsigned long, unsigned>;\nextern \"C\" __declspec(dllimport) int __stdcall WriteConsoleW(  //\n    void*, const void*, dword, dword*, void*);\n\nFMT_FUNC bool write_console(std::FILE* f, string_view text) {\n  auto fd = _fileno(f);\n  if (_isatty(fd)) {\n    detail::utf8_to_utf16 u16(string_view(text.data(), text.size()));\n    auto written = detail::dword();\n    if (detail::WriteConsoleW(reinterpret_cast<void*>(_get_osfhandle(fd)),\n                              u16.c_str(), static_cast<uint32_t>(u16.size()),\n                              &written, nullptr)) {\n      return true;\n    }\n  }\n  // We return false if the file descriptor was not TTY, or it was but\n  // SetConsoleW failed which can happen if the output has been redirected to\n  // NUL. In both cases when we return false, we should attempt to do regular\n  // write via fwrite or std::ostream::write.\n  return false;\n}\n#endif\n\nFMT_FUNC void print(std::FILE* f, string_view text) {\n#ifdef _WIN32\n  if (write_console(f, text)) return;\n#endif\n  detail::fwrite_fully(text.data(), 1, text.size(), f);\n}\n}  // namespace detail\n\nFMT_FUNC void vprint(std::FILE* f, string_view format_str, format_args args) {\n  memory_buffer buffer;\n  detail::vformat_to(buffer, format_str, args);\n  detail::print(f, {buffer.data(), buffer.size()});\n}\n\n#ifdef _WIN32\n// Print assuming legacy (non-Unicode) encoding.\nFMT_FUNC void detail::vprint_mojibake(std::FILE* f, string_view format_str,\n                                      format_args args) {\n  memory_buffer buffer;\n  detail::vformat_to(buffer, format_str,\n                     basic_format_args<buffer_context<char>>(args));\n  fwrite_fully(buffer.data(), 1, buffer.size(), f);\n}\n#endif\n\nFMT_FUNC void vprint(string_view format_str, format_args args) {\n  vprint(stdout, format_str, args);\n}\n\nnamespace detail {\n\nstruct singleton {\n  unsigned char upper;\n  unsigned char lower_count;\n};\n\ninline auto is_printable(uint16_t x, const singleton* singletons,\n                         size_t singletons_size,\n                         const unsigned char* singleton_lowers,\n                         const unsigned char* normal, size_t normal_size)\n    -> bool {\n  auto upper = x >> 8;\n  auto lower_start = 0;\n  for (size_t i = 0; i < singletons_size; ++i) {\n    auto s = singletons[i];\n    auto lower_end = lower_start + s.lower_count;\n    if (upper < s.upper) break;\n    if (upper == s.upper) {\n      for (auto j = lower_start; j < lower_end; ++j) {\n        if (singleton_lowers[j] == (x & 0xff)) return false;\n      }\n    }\n    lower_start = lower_end;\n  }\n\n  auto xsigned = static_cast<int>(x);\n  auto current = true;\n  for (size_t i = 0; i < normal_size; ++i) {\n    auto v = static_cast<int>(normal[i]);\n    auto len = (v & 0x80) != 0 ? (v & 0x7f) << 8 | normal[++i] : v;\n    xsigned -= len;\n    if (xsigned < 0) break;\n    current = !current;\n  }\n  return current;\n}\n\n// This code is generated by support/printable.py.\nFMT_FUNC auto is_printable(uint32_t cp) -> bool {\n  static constexpr singleton singletons0[] = {\n      {0x00, 1},  {0x03, 5},  {0x05, 6},  {0x06, 3},  {0x07, 6},  {0x08, 8},\n      {0x09, 17}, {0x0a, 28}, {0x0b, 25}, {0x0c, 20}, {0x0d, 16}, {0x0e, 13},\n      {0x0f, 4},  {0x10, 3},  {0x12, 18}, {0x13, 9},  {0x16, 1},  {0x17, 5},\n      {0x18, 2},  {0x19, 3},  {0x1a, 7},  {0x1c, 2},  {0x1d, 1},  {0x1f, 22},\n      {0x20, 3},  {0x2b, 3},  {0x2c, 2},  {0x2d, 11}, {0x2e, 1},  {0x30, 3},\n      {0x31, 2},  {0x32, 1},  {0xa7, 2},  {0xa9, 2},  {0xaa, 4},  {0xab, 8},\n      {0xfa, 2},  {0xfb, 5},  {0xfd, 4},  {0xfe, 3},  {0xff, 9},\n  };\n  static constexpr unsigned char singletons0_lower[] = {\n      0xad, 0x78, 0x79, 0x8b, 0x8d, 0xa2, 0x30, 0x57, 0x58, 0x8b, 0x8c, 0x90,\n      0x1c, 0x1d, 0xdd, 0x0e, 0x0f, 0x4b, 0x4c, 0xfb, 0xfc, 0x2e, 0x2f, 0x3f,\n      0x5c, 0x5d, 0x5f, 0xb5, 0xe2, 0x84, 0x8d, 0x8e, 0x91, 0x92, 0xa9, 0xb1,\n      0xba, 0xbb, 0xc5, 0xc6, 0xc9, 0xca, 0xde, 0xe4, 0xe5, 0xff, 0x00, 0x04,\n      0x11, 0x12, 0x29, 0x31, 0x34, 0x37, 0x3a, 0x3b, 0x3d, 0x49, 0x4a, 0x5d,\n      0x84, 0x8e, 0x92, 0xa9, 0xb1, 0xb4, 0xba, 0xbb, 0xc6, 0xca, 0xce, 0xcf,\n      0xe4, 0xe5, 0x00, 0x04, 0x0d, 0x0e, 0x11, 0x12, 0x29, 0x31, 0x34, 0x3a,\n      0x3b, 0x45, 0x46, 0x49, 0x4a, 0x5e, 0x64, 0x65, 0x84, 0x91, 0x9b, 0x9d,\n      0xc9, 0xce, 0xcf, 0x0d, 0x11, 0x29, 0x45, 0x49, 0x57, 0x64, 0x65, 0x8d,\n      0x91, 0xa9, 0xb4, 0xba, 0xbb, 0xc5, 0xc9, 0xdf, 0xe4, 0xe5, 0xf0, 0x0d,\n      0x11, 0x45, 0x49, 0x64, 0x65, 0x80, 0x84, 0xb2, 0xbc, 0xbe, 0xbf, 0xd5,\n      0xd7, 0xf0, 0xf1, 0x83, 0x85, 0x8b, 0xa4, 0xa6, 0xbe, 0xbf, 0xc5, 0xc7,\n      0xce, 0xcf, 0xda, 0xdb, 0x48, 0x98, 0xbd, 0xcd, 0xc6, 0xce, 0xcf, 0x49,\n      0x4e, 0x4f, 0x57, 0x59, 0x5e, 0x5f, 0x89, 0x8e, 0x8f, 0xb1, 0xb6, 0xb7,\n      0xbf, 0xc1, 0xc6, 0xc7, 0xd7, 0x11, 0x16, 0x17, 0x5b, 0x5c, 0xf6, 0xf7,\n      0xfe, 0xff, 0x80, 0x0d, 0x6d, 0x71, 0xde, 0xdf, 0x0e, 0x0f, 0x1f, 0x6e,\n      0x6f, 0x1c, 0x1d, 0x5f, 0x7d, 0x7e, 0xae, 0xaf, 0xbb, 0xbc, 0xfa, 0x16,\n      0x17, 0x1e, 0x1f, 0x46, 0x47, 0x4e, 0x4f, 0x58, 0x5a, 0x5c, 0x5e, 0x7e,\n      0x7f, 0xb5, 0xc5, 0xd4, 0xd5, 0xdc, 0xf0, 0xf1, 0xf5, 0x72, 0x73, 0x8f,\n      0x74, 0x75, 0x96, 0x2f, 0x5f, 0x26, 0x2e, 0x2f, 0xa7, 0xaf, 0xb7, 0xbf,\n      0xc7, 0xcf, 0xd7, 0xdf, 0x9a, 0x40, 0x97, 0x98, 0x30, 0x8f, 0x1f, 0xc0,\n      0xc1, 0xce, 0xff, 0x4e, 0x4f, 0x5a, 0x5b, 0x07, 0x08, 0x0f, 0x10, 0x27,\n      0x2f, 0xee, 0xef, 0x6e, 0x6f, 0x37, 0x3d, 0x3f, 0x42, 0x45, 0x90, 0x91,\n      0xfe, 0xff, 0x53, 0x67, 0x75, 0xc8, 0xc9, 0xd0, 0xd1, 0xd8, 0xd9, 0xe7,\n      0xfe, 0xff,\n  };\n  static constexpr singleton singletons1[] = {\n      {0x00, 6},  {0x01, 1}, {0x03, 1},  {0x04, 2}, {0x08, 8},  {0x09, 2},\n      {0x0a, 5},  {0x0b, 2}, {0x0e, 4},  {0x10, 1}, {0x11, 2},  {0x12, 5},\n      {0x13, 17}, {0x14, 1}, {0x15, 2},  {0x17, 2}, {0x19, 13}, {0x1c, 5},\n      {0x1d, 8},  {0x24, 1}, {0x6a, 3},  {0x6b, 2}, {0xbc, 2},  {0xd1, 2},\n      {0xd4, 12}, {0xd5, 9}, {0xd6, 2},  {0xd7, 2}, {0xda, 1},  {0xe0, 5},\n      {0xe1, 2},  {0xe8, 2}, {0xee, 32}, {0xf0, 4}, {0xf8, 2},  {0xf9, 2},\n      {0xfa, 2},  {0xfb, 1},\n  };\n  static constexpr unsigned char singletons1_lower[] = {\n      0x0c, 0x27, 0x3b, 0x3e, 0x4e, 0x4f, 0x8f, 0x9e, 0x9e, 0x9f, 0x06, 0x07,\n      0x09, 0x36, 0x3d, 0x3e, 0x56, 0xf3, 0xd0, 0xd1, 0x04, 0x14, 0x18, 0x36,\n      0x37, 0x56, 0x57, 0x7f, 0xaa, 0xae, 0xaf, 0xbd, 0x35, 0xe0, 0x12, 0x87,\n      0x89, 0x8e, 0x9e, 0x04, 0x0d, 0x0e, 0x11, 0x12, 0x29, 0x31, 0x34, 0x3a,\n      0x45, 0x46, 0x49, 0x4a, 0x4e, 0x4f, 0x64, 0x65, 0x5c, 0xb6, 0xb7, 0x1b,\n      0x1c, 0x07, 0x08, 0x0a, 0x0b, 0x14, 0x17, 0x36, 0x39, 0x3a, 0xa8, 0xa9,\n      0xd8, 0xd9, 0x09, 0x37, 0x90, 0x91, 0xa8, 0x07, 0x0a, 0x3b, 0x3e, 0x66,\n      0x69, 0x8f, 0x92, 0x6f, 0x5f, 0xee, 0xef, 0x5a, 0x62, 0x9a, 0x9b, 0x27,\n      0x28, 0x55, 0x9d, 0xa0, 0xa1, 0xa3, 0xa4, 0xa7, 0xa8, 0xad, 0xba, 0xbc,\n      0xc4, 0x06, 0x0b, 0x0c, 0x15, 0x1d, 0x3a, 0x3f, 0x45, 0x51, 0xa6, 0xa7,\n      0xcc, 0xcd, 0xa0, 0x07, 0x19, 0x1a, 0x22, 0x25, 0x3e, 0x3f, 0xc5, 0xc6,\n      0x04, 0x20, 0x23, 0x25, 0x26, 0x28, 0x33, 0x38, 0x3a, 0x48, 0x4a, 0x4c,\n      0x50, 0x53, 0x55, 0x56, 0x58, 0x5a, 0x5c, 0x5e, 0x60, 0x63, 0x65, 0x66,\n      0x6b, 0x73, 0x78, 0x7d, 0x7f, 0x8a, 0xa4, 0xaa, 0xaf, 0xb0, 0xc0, 0xd0,\n      0xae, 0xaf, 0x79, 0xcc, 0x6e, 0x6f, 0x93,\n  };\n  static constexpr unsigned char normal0[] = {\n      0x00, 0x20, 0x5f, 0x22, 0x82, 0xdf, 0x04, 0x82, 0x44, 0x08, 0x1b, 0x04,\n      0x06, 0x11, 0x81, 0xac, 0x0e, 0x80, 0xab, 0x35, 0x28, 0x0b, 0x80, 0xe0,\n      0x03, 0x19, 0x08, 0x01, 0x04, 0x2f, 0x04, 0x34, 0x04, 0x07, 0x03, 0x01,\n      0x07, 0x06, 0x07, 0x11, 0x0a, 0x50, 0x0f, 0x12, 0x07, 0x55, 0x07, 0x03,\n      0x04, 0x1c, 0x0a, 0x09, 0x03, 0x08, 0x03, 0x07, 0x03, 0x02, 0x03, 0x03,\n      0x03, 0x0c, 0x04, 0x05, 0x03, 0x0b, 0x06, 0x01, 0x0e, 0x15, 0x05, 0x3a,\n      0x03, 0x11, 0x07, 0x06, 0x05, 0x10, 0x07, 0x57, 0x07, 0x02, 0x07, 0x15,\n      0x0d, 0x50, 0x04, 0x43, 0x03, 0x2d, 0x03, 0x01, 0x04, 0x11, 0x06, 0x0f,\n      0x0c, 0x3a, 0x04, 0x1d, 0x25, 0x5f, 0x20, 0x6d, 0x04, 0x6a, 0x25, 0x80,\n      0xc8, 0x05, 0x82, 0xb0, 0x03, 0x1a, 0x06, 0x82, 0xfd, 0x03, 0x59, 0x07,\n      0x15, 0x0b, 0x17, 0x09, 0x14, 0x0c, 0x14, 0x0c, 0x6a, 0x06, 0x0a, 0x06,\n      0x1a, 0x06, 0x59, 0x07, 0x2b, 0x05, 0x46, 0x0a, 0x2c, 0x04, 0x0c, 0x04,\n      0x01, 0x03, 0x31, 0x0b, 0x2c, 0x04, 0x1a, 0x06, 0x0b, 0x03, 0x80, 0xac,\n      0x06, 0x0a, 0x06, 0x21, 0x3f, 0x4c, 0x04, 0x2d, 0x03, 0x74, 0x08, 0x3c,\n      0x03, 0x0f, 0x03, 0x3c, 0x07, 0x38, 0x08, 0x2b, 0x05, 0x82, 0xff, 0x11,\n      0x18, 0x08, 0x2f, 0x11, 0x2d, 0x03, 0x20, 0x10, 0x21, 0x0f, 0x80, 0x8c,\n      0x04, 0x82, 0x97, 0x19, 0x0b, 0x15, 0x88, 0x94, 0x05, 0x2f, 0x05, 0x3b,\n      0x07, 0x02, 0x0e, 0x18, 0x09, 0x80, 0xb3, 0x2d, 0x74, 0x0c, 0x80, 0xd6,\n      0x1a, 0x0c, 0x05, 0x80, 0xff, 0x05, 0x80, 0xdf, 0x0c, 0xee, 0x0d, 0x03,\n      0x84, 0x8d, 0x03, 0x37, 0x09, 0x81, 0x5c, 0x14, 0x80, 0xb8, 0x08, 0x80,\n      0xcb, 0x2a, 0x38, 0x03, 0x0a, 0x06, 0x38, 0x08, 0x46, 0x08, 0x0c, 0x06,\n      0x74, 0x0b, 0x1e, 0x03, 0x5a, 0x04, 0x59, 0x09, 0x80, 0x83, 0x18, 0x1c,\n      0x0a, 0x16, 0x09, 0x4c, 0x04, 0x80, 0x8a, 0x06, 0xab, 0xa4, 0x0c, 0x17,\n      0x04, 0x31, 0xa1, 0x04, 0x81, 0xda, 0x26, 0x07, 0x0c, 0x05, 0x05, 0x80,\n      0xa5, 0x11, 0x81, 0x6d, 0x10, 0x78, 0x28, 0x2a, 0x06, 0x4c, 0x04, 0x80,\n      0x8d, 0x04, 0x80, 0xbe, 0x03, 0x1b, 0x03, 0x0f, 0x0d,\n  };\n  static constexpr unsigned char normal1[] = {\n      0x5e, 0x22, 0x7b, 0x05, 0x03, 0x04, 0x2d, 0x03, 0x66, 0x03, 0x01, 0x2f,\n      0x2e, 0x80, 0x82, 0x1d, 0x03, 0x31, 0x0f, 0x1c, 0x04, 0x24, 0x09, 0x1e,\n      0x05, 0x2b, 0x05, 0x44, 0x04, 0x0e, 0x2a, 0x80, 0xaa, 0x06, 0x24, 0x04,\n      0x24, 0x04, 0x28, 0x08, 0x34, 0x0b, 0x01, 0x80, 0x90, 0x81, 0x37, 0x09,\n      0x16, 0x0a, 0x08, 0x80, 0x98, 0x39, 0x03, 0x63, 0x08, 0x09, 0x30, 0x16,\n      0x05, 0x21, 0x03, 0x1b, 0x05, 0x01, 0x40, 0x38, 0x04, 0x4b, 0x05, 0x2f,\n      0x04, 0x0a, 0x07, 0x09, 0x07, 0x40, 0x20, 0x27, 0x04, 0x0c, 0x09, 0x36,\n      0x03, 0x3a, 0x05, 0x1a, 0x07, 0x04, 0x0c, 0x07, 0x50, 0x49, 0x37, 0x33,\n      0x0d, 0x33, 0x07, 0x2e, 0x08, 0x0a, 0x81, 0x26, 0x52, 0x4e, 0x28, 0x08,\n      0x2a, 0x56, 0x1c, 0x14, 0x17, 0x09, 0x4e, 0x04, 0x1e, 0x0f, 0x43, 0x0e,\n      0x19, 0x07, 0x0a, 0x06, 0x48, 0x08, 0x27, 0x09, 0x75, 0x0b, 0x3f, 0x41,\n      0x2a, 0x06, 0x3b, 0x05, 0x0a, 0x06, 0x51, 0x06, 0x01, 0x05, 0x10, 0x03,\n      0x05, 0x80, 0x8b, 0x62, 0x1e, 0x48, 0x08, 0x0a, 0x80, 0xa6, 0x5e, 0x22,\n      0x45, 0x0b, 0x0a, 0x06, 0x0d, 0x13, 0x39, 0x07, 0x0a, 0x36, 0x2c, 0x04,\n      0x10, 0x80, 0xc0, 0x3c, 0x64, 0x53, 0x0c, 0x48, 0x09, 0x0a, 0x46, 0x45,\n      0x1b, 0x48, 0x08, 0x53, 0x1d, 0x39, 0x81, 0x07, 0x46, 0x0a, 0x1d, 0x03,\n      0x47, 0x49, 0x37, 0x03, 0x0e, 0x08, 0x0a, 0x06, 0x39, 0x07, 0x0a, 0x81,\n      0x36, 0x19, 0x80, 0xb7, 0x01, 0x0f, 0x32, 0x0d, 0x83, 0x9b, 0x66, 0x75,\n      0x0b, 0x80, 0xc4, 0x8a, 0xbc, 0x84, 0x2f, 0x8f, 0xd1, 0x82, 0x47, 0xa1,\n      0xb9, 0x82, 0x39, 0x07, 0x2a, 0x04, 0x02, 0x60, 0x26, 0x0a, 0x46, 0x0a,\n      0x28, 0x05, 0x13, 0x82, 0xb0, 0x5b, 0x65, 0x4b, 0x04, 0x39, 0x07, 0x11,\n      0x40, 0x05, 0x0b, 0x02, 0x0e, 0x97, 0xf8, 0x08, 0x84, 0xd6, 0x2a, 0x09,\n      0xa2, 0xf7, 0x81, 0x1f, 0x31, 0x03, 0x11, 0x04, 0x08, 0x81, 0x8c, 0x89,\n      0x04, 0x6b, 0x05, 0x0d, 0x03, 0x09, 0x07, 0x10, 0x93, 0x60, 0x80, 0xf6,\n      0x0a, 0x73, 0x08, 0x6e, 0x17, 0x46, 0x80, 0x9a, 0x14, 0x0c, 0x57, 0x09,\n      0x19, 0x80, 0x87, 0x81, 0x47, 0x03, 0x85, 0x42, 0x0f, 0x15, 0x85, 0x50,\n      0x2b, 0x80, 0xd5, 0x2d, 0x03, 0x1a, 0x04, 0x02, 0x81, 0x70, 0x3a, 0x05,\n      0x01, 0x85, 0x00, 0x80, 0xd7, 0x29, 0x4c, 0x04, 0x0a, 0x04, 0x02, 0x83,\n      0x11, 0x44, 0x4c, 0x3d, 0x80, 0xc2, 0x3c, 0x06, 0x01, 0x04, 0x55, 0x05,\n      0x1b, 0x34, 0x02, 0x81, 0x0e, 0x2c, 0x04, 0x64, 0x0c, 0x56, 0x0a, 0x80,\n      0xae, 0x38, 0x1d, 0x0d, 0x2c, 0x04, 0x09, 0x07, 0x02, 0x0e, 0x06, 0x80,\n      0x9a, 0x83, 0xd8, 0x08, 0x0d, 0x03, 0x0d, 0x03, 0x74, 0x0c, 0x59, 0x07,\n      0x0c, 0x14, 0x0c, 0x04, 0x38, 0x08, 0x0a, 0x06, 0x28, 0x08, 0x22, 0x4e,\n      0x81, 0x54, 0x0c, 0x15, 0x03, 0x03, 0x05, 0x07, 0x09, 0x19, 0x07, 0x07,\n      0x09, 0x03, 0x0d, 0x07, 0x29, 0x80, 0xcb, 0x25, 0x0a, 0x84, 0x06,\n  };\n  auto lower = static_cast<uint16_t>(cp);\n  if (cp < 0x10000) {\n    return is_printable(lower, singletons0,\n                        sizeof(singletons0) / sizeof(*singletons0),\n                        singletons0_lower, normal0, sizeof(normal0));\n  }\n  if (cp < 0x20000) {\n    return is_printable(lower, singletons1,\n                        sizeof(singletons1) / sizeof(*singletons1),\n                        singletons1_lower, normal1, sizeof(normal1));\n  }\n  if (0x2a6de <= cp && cp < 0x2a700) return false;\n  if (0x2b735 <= cp && cp < 0x2b740) return false;\n  if (0x2b81e <= cp && cp < 0x2b820) return false;\n  if (0x2cea2 <= cp && cp < 0x2ceb0) return false;\n  if (0x2ebe1 <= cp && cp < 0x2f800) return false;\n  if (0x2fa1e <= cp && cp < 0x30000) return false;\n  if (0x3134b <= cp && cp < 0xe0100) return false;\n  if (0xe01f0 <= cp && cp < 0x110000) return false;\n  return cp < 0x110000;\n}\n\n}  // namespace detail\n\nFMT_END_NAMESPACE\n\n#endif  // FMT_FORMAT_INL_H_\n"
  },
  {
    "path": "native/iosTest/Pods/fmt/include/fmt/format.h",
    "content": "/*\n  Formatting library for C++\n\n  Copyright (c) 2012 - present, Victor Zverovich\n\n  Permission is hereby granted, free of charge, to any person obtaining\n  a copy of this software and associated documentation files (the\n  \"Software\"), to deal in the Software without restriction, including\n  without limitation the rights to use, copy, modify, merge, publish,\n  distribute, sublicense, and/or sell copies of the Software, and to\n  permit persons to whom the Software is furnished to do so, subject to\n  the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n  --- Optional exception to the license ---\n\n  As an exception, if, as a result of your compiling your source code, portions\n  of this Software are embedded into a machine-executable object form of such\n  source code, you may redistribute such embedded portions in such object form\n  without including the above copyright and permission notices.\n */\n\n#ifndef FMT_FORMAT_H_\n#define FMT_FORMAT_H_\n\n#include <cmath>         // std::signbit\n#include <cstdint>       // uint32_t\n#include <cstring>       // std::memcpy\n#include <limits>        // std::numeric_limits\n#include <memory>        // std::uninitialized_copy\n#include <stdexcept>     // std::runtime_error\n#include <system_error>  // std::system_error\n\n#ifdef __cpp_lib_bit_cast\n#  include <bit>  // std::bitcast\n#endif\n\n#include \"core.h\"\n\n#if FMT_GCC_VERSION\n#  define FMT_GCC_VISIBILITY_HIDDEN __attribute__((visibility(\"hidden\")))\n#else\n#  define FMT_GCC_VISIBILITY_HIDDEN\n#endif\n\n#ifdef __NVCC__\n#  define FMT_CUDA_VERSION (__CUDACC_VER_MAJOR__ * 100 + __CUDACC_VER_MINOR__)\n#else\n#  define FMT_CUDA_VERSION 0\n#endif\n\n#ifdef __has_builtin\n#  define FMT_HAS_BUILTIN(x) __has_builtin(x)\n#else\n#  define FMT_HAS_BUILTIN(x) 0\n#endif\n\n#if FMT_GCC_VERSION || FMT_CLANG_VERSION\n#  define FMT_NOINLINE __attribute__((noinline))\n#else\n#  define FMT_NOINLINE\n#endif\n\n#if FMT_MSC_VERSION\n#  define FMT_MSC_DEFAULT = default\n#else\n#  define FMT_MSC_DEFAULT\n#endif\n\n#ifndef FMT_THROW\n#  if FMT_EXCEPTIONS\n#    if FMT_MSC_VERSION || defined(__NVCC__)\nFMT_BEGIN_NAMESPACE\nnamespace detail {\ntemplate <typename Exception> inline void do_throw(const Exception& x) {\n  // Silence unreachable code warnings in MSVC and NVCC because these\n  // are nearly impossible to fix in a generic code.\n  volatile bool b = true;\n  if (b) throw x;\n}\n}  // namespace detail\nFMT_END_NAMESPACE\n#      define FMT_THROW(x) detail::do_throw(x)\n#    else\n#      define FMT_THROW(x) throw x\n#    endif\n#  else\n#    define FMT_THROW(x)               \\\n      do {                             \\\n        FMT_ASSERT(false, (x).what()); \\\n      } while (false)\n#  endif\n#endif\n\n#if FMT_EXCEPTIONS\n#  define FMT_TRY try\n#  define FMT_CATCH(x) catch (x)\n#else\n#  define FMT_TRY if (true)\n#  define FMT_CATCH(x) if (false)\n#endif\n\n#ifndef FMT_MAYBE_UNUSED\n#  if FMT_HAS_CPP17_ATTRIBUTE(maybe_unused)\n#    define FMT_MAYBE_UNUSED [[maybe_unused]]\n#  else\n#    define FMT_MAYBE_UNUSED\n#  endif\n#endif\n\n#ifndef FMT_USE_USER_DEFINED_LITERALS\n// EDG based compilers (Intel, NVIDIA, Elbrus, etc), GCC and MSVC support UDLs.\n#  if (FMT_HAS_FEATURE(cxx_user_literals) || FMT_GCC_VERSION >= 407 || \\\n       FMT_MSC_VERSION >= 1900) &&                                     \\\n      (!defined(__EDG_VERSION__) || __EDG_VERSION__ >= /* UDL feature */ 480)\n#    define FMT_USE_USER_DEFINED_LITERALS 1\n#  else\n#    define FMT_USE_USER_DEFINED_LITERALS 0\n#  endif\n#endif\n\n// Defining FMT_REDUCE_INT_INSTANTIATIONS to 1, will reduce the number of\n// integer formatter template instantiations to just one by only using the\n// largest integer type. This results in a reduction in binary size but will\n// cause a decrease in integer formatting performance.\n#if !defined(FMT_REDUCE_INT_INSTANTIATIONS)\n#  define FMT_REDUCE_INT_INSTANTIATIONS 0\n#endif\n\n// __builtin_clz is broken in clang with Microsoft CodeGen:\n// https://github.com/fmtlib/fmt/issues/519.\n#if !FMT_MSC_VERSION\n#  if FMT_HAS_BUILTIN(__builtin_clz) || FMT_GCC_VERSION || FMT_ICC_VERSION\n#    define FMT_BUILTIN_CLZ(n) __builtin_clz(n)\n#  endif\n#  if FMT_HAS_BUILTIN(__builtin_clzll) || FMT_GCC_VERSION || FMT_ICC_VERSION\n#    define FMT_BUILTIN_CLZLL(n) __builtin_clzll(n)\n#  endif\n#endif\n\n// __builtin_ctz is broken in Intel Compiler Classic on Windows:\n// https://github.com/fmtlib/fmt/issues/2510.\n#ifndef __ICL\n#  if FMT_HAS_BUILTIN(__builtin_ctz) || FMT_GCC_VERSION || FMT_ICC_VERSION || \\\n      defined(__NVCOMPILER)\n#    define FMT_BUILTIN_CTZ(n) __builtin_ctz(n)\n#  endif\n#  if FMT_HAS_BUILTIN(__builtin_ctzll) || FMT_GCC_VERSION || \\\n      FMT_ICC_VERSION || defined(__NVCOMPILER)\n#    define FMT_BUILTIN_CTZLL(n) __builtin_ctzll(n)\n#  endif\n#endif\n\n#if FMT_MSC_VERSION\n#  include <intrin.h>  // _BitScanReverse[64], _BitScanForward[64], _umul128\n#endif\n\n// Some compilers masquerade as both MSVC and GCC-likes or otherwise support\n// __builtin_clz and __builtin_clzll, so only define FMT_BUILTIN_CLZ using the\n// MSVC intrinsics if the clz and clzll builtins are not available.\n#if FMT_MSC_VERSION && !defined(FMT_BUILTIN_CLZLL) && \\\n    !defined(FMT_BUILTIN_CTZLL)\nFMT_BEGIN_NAMESPACE\nnamespace detail {\n// Avoid Clang with Microsoft CodeGen's -Wunknown-pragmas warning.\n#  if !defined(__clang__)\n#    pragma intrinsic(_BitScanForward)\n#    pragma intrinsic(_BitScanReverse)\n#    if defined(_WIN64)\n#      pragma intrinsic(_BitScanForward64)\n#      pragma intrinsic(_BitScanReverse64)\n#    endif\n#  endif\n\ninline auto clz(uint32_t x) -> int {\n  unsigned long r = 0;\n  _BitScanReverse(&r, x);\n  FMT_ASSERT(x != 0, \"\");\n  // Static analysis complains about using uninitialized data\n  // \"r\", but the only way that can happen is if \"x\" is 0,\n  // which the callers guarantee to not happen.\n  FMT_MSC_WARNING(suppress : 6102)\n  return 31 ^ static_cast<int>(r);\n}\n#  define FMT_BUILTIN_CLZ(n) detail::clz(n)\n\ninline auto clzll(uint64_t x) -> int {\n  unsigned long r = 0;\n#  ifdef _WIN64\n  _BitScanReverse64(&r, x);\n#  else\n  // Scan the high 32 bits.\n  if (_BitScanReverse(&r, static_cast<uint32_t>(x >> 32))) return 63 ^ (r + 32);\n  // Scan the low 32 bits.\n  _BitScanReverse(&r, static_cast<uint32_t>(x));\n#  endif\n  FMT_ASSERT(x != 0, \"\");\n  FMT_MSC_WARNING(suppress : 6102)  // Suppress a bogus static analysis warning.\n  return 63 ^ static_cast<int>(r);\n}\n#  define FMT_BUILTIN_CLZLL(n) detail::clzll(n)\n\ninline auto ctz(uint32_t x) -> int {\n  unsigned long r = 0;\n  _BitScanForward(&r, x);\n  FMT_ASSERT(x != 0, \"\");\n  FMT_MSC_WARNING(suppress : 6102)  // Suppress a bogus static analysis warning.\n  return static_cast<int>(r);\n}\n#  define FMT_BUILTIN_CTZ(n) detail::ctz(n)\n\ninline auto ctzll(uint64_t x) -> int {\n  unsigned long r = 0;\n  FMT_ASSERT(x != 0, \"\");\n  FMT_MSC_WARNING(suppress : 6102)  // Suppress a bogus static analysis warning.\n#  ifdef _WIN64\n  _BitScanForward64(&r, x);\n#  else\n  // Scan the low 32 bits.\n  if (_BitScanForward(&r, static_cast<uint32_t>(x))) return static_cast<int>(r);\n  // Scan the high 32 bits.\n  _BitScanForward(&r, static_cast<uint32_t>(x >> 32));\n  r += 32;\n#  endif\n  return static_cast<int>(r);\n}\n#  define FMT_BUILTIN_CTZLL(n) detail::ctzll(n)\n}  // namespace detail\nFMT_END_NAMESPACE\n#endif\n\nFMT_BEGIN_NAMESPACE\nnamespace detail {\n\nFMT_CONSTEXPR inline void abort_fuzzing_if(bool condition) {\n  ignore_unused(condition);\n#ifdef FMT_FUZZ\n  if (condition) throw std::runtime_error(\"fuzzing limit reached\");\n#endif\n}\n\ntemplate <typename CharT, CharT... C> struct string_literal {\n  static constexpr CharT value[sizeof...(C)] = {C...};\n  constexpr operator basic_string_view<CharT>() const {\n    return {value, sizeof...(C)};\n  }\n};\n\n#if FMT_CPLUSPLUS < 201703L\ntemplate <typename CharT, CharT... C>\nconstexpr CharT string_literal<CharT, C...>::value[sizeof...(C)];\n#endif\n\ntemplate <typename Streambuf> class formatbuf : public Streambuf {\n private:\n  using char_type = typename Streambuf::char_type;\n  using streamsize = decltype(std::declval<Streambuf>().sputn(nullptr, 0));\n  using int_type = typename Streambuf::int_type;\n  using traits_type = typename Streambuf::traits_type;\n\n  buffer<char_type>& buffer_;\n\n public:\n  explicit formatbuf(buffer<char_type>& buf) : buffer_(buf) {}\n\n protected:\n  // The put area is always empty. This makes the implementation simpler and has\n  // the advantage that the streambuf and the buffer are always in sync and\n  // sputc never writes into uninitialized memory. A disadvantage is that each\n  // call to sputc always results in a (virtual) call to overflow. There is no\n  // disadvantage here for sputn since this always results in a call to xsputn.\n\n  auto overflow(int_type ch) -> int_type override {\n    if (!traits_type::eq_int_type(ch, traits_type::eof()))\n      buffer_.push_back(static_cast<char_type>(ch));\n    return ch;\n  }\n\n  auto xsputn(const char_type* s, streamsize count) -> streamsize override {\n    buffer_.append(s, s + count);\n    return count;\n  }\n};\n\n// Implementation of std::bit_cast for pre-C++20.\ntemplate <typename To, typename From, FMT_ENABLE_IF(sizeof(To) == sizeof(From))>\nFMT_CONSTEXPR20 auto bit_cast(const From& from) -> To {\n#ifdef __cpp_lib_bit_cast\n  if (is_constant_evaluated()) return std::bit_cast<To>(from);\n#endif\n  auto to = To();\n  // The cast suppresses a bogus -Wclass-memaccess on GCC.\n  std::memcpy(static_cast<void*>(&to), &from, sizeof(to));\n  return to;\n}\n\ninline auto is_big_endian() -> bool {\n#ifdef _WIN32\n  return false;\n#elif defined(__BIG_ENDIAN__)\n  return true;\n#elif defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__)\n  return __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__;\n#else\n  struct bytes {\n    char data[sizeof(int)];\n  };\n  return bit_cast<bytes>(1).data[0] == 0;\n#endif\n}\n\nclass uint128_fallback {\n private:\n  uint64_t lo_, hi_;\n\n  friend uint128_fallback umul128(uint64_t x, uint64_t y) noexcept;\n\n public:\n  constexpr uint128_fallback(uint64_t hi, uint64_t lo) : lo_(lo), hi_(hi) {}\n  constexpr uint128_fallback(uint64_t value = 0) : lo_(value), hi_(0) {}\n\n  constexpr uint64_t high() const noexcept { return hi_; }\n  constexpr uint64_t low() const noexcept { return lo_; }\n\n  template <typename T, FMT_ENABLE_IF(std::is_integral<T>::value)>\n  constexpr explicit operator T() const {\n    return static_cast<T>(lo_);\n  }\n\n  friend constexpr auto operator==(const uint128_fallback& lhs,\n                                   const uint128_fallback& rhs) -> bool {\n    return lhs.hi_ == rhs.hi_ && lhs.lo_ == rhs.lo_;\n  }\n  friend constexpr auto operator!=(const uint128_fallback& lhs,\n                                   const uint128_fallback& rhs) -> bool {\n    return !(lhs == rhs);\n  }\n  friend constexpr auto operator>(const uint128_fallback& lhs,\n                                  const uint128_fallback& rhs) -> bool {\n    return lhs.hi_ != rhs.hi_ ? lhs.hi_ > rhs.hi_ : lhs.lo_ > rhs.lo_;\n  }\n  friend constexpr auto operator|(const uint128_fallback& lhs,\n                                  const uint128_fallback& rhs)\n      -> uint128_fallback {\n    return {lhs.hi_ | rhs.hi_, lhs.lo_ | rhs.lo_};\n  }\n  friend constexpr auto operator&(const uint128_fallback& lhs,\n                                  const uint128_fallback& rhs)\n      -> uint128_fallback {\n    return {lhs.hi_ & rhs.hi_, lhs.lo_ & rhs.lo_};\n  }\n  friend auto operator+(const uint128_fallback& lhs,\n                        const uint128_fallback& rhs) -> uint128_fallback {\n    auto result = uint128_fallback(lhs);\n    result += rhs;\n    return result;\n  }\n  friend auto operator*(const uint128_fallback& lhs, uint32_t rhs)\n      -> uint128_fallback {\n    FMT_ASSERT(lhs.hi_ == 0, \"\");\n    uint64_t hi = (lhs.lo_ >> 32) * rhs;\n    uint64_t lo = (lhs.lo_ & ~uint32_t()) * rhs;\n    uint64_t new_lo = (hi << 32) + lo;\n    return {(hi >> 32) + (new_lo < lo ? 1 : 0), new_lo};\n  }\n  friend auto operator-(const uint128_fallback& lhs, uint64_t rhs)\n      -> uint128_fallback {\n    return {lhs.hi_ - (lhs.lo_ < rhs ? 1 : 0), lhs.lo_ - rhs};\n  }\n  FMT_CONSTEXPR auto operator>>(int shift) const -> uint128_fallback {\n    if (shift == 64) return {0, hi_};\n    if (shift > 64) return uint128_fallback(0, hi_) >> (shift - 64);\n    return {hi_ >> shift, (hi_ << (64 - shift)) | (lo_ >> shift)};\n  }\n  FMT_CONSTEXPR auto operator<<(int shift) const -> uint128_fallback {\n    if (shift == 64) return {lo_, 0};\n    if (shift > 64) return uint128_fallback(lo_, 0) << (shift - 64);\n    return {hi_ << shift | (lo_ >> (64 - shift)), (lo_ << shift)};\n  }\n  FMT_CONSTEXPR auto operator>>=(int shift) -> uint128_fallback& {\n    return *this = *this >> shift;\n  }\n  FMT_CONSTEXPR void operator+=(uint128_fallback n) {\n    uint64_t new_lo = lo_ + n.lo_;\n    uint64_t new_hi = hi_ + n.hi_ + (new_lo < lo_ ? 1 : 0);\n    FMT_ASSERT(new_hi >= hi_, \"\");\n    lo_ = new_lo;\n    hi_ = new_hi;\n  }\n\n  FMT_CONSTEXPR20 uint128_fallback& operator+=(uint64_t n) noexcept {\n    if (is_constant_evaluated()) {\n      lo_ += n;\n      hi_ += (lo_ < n ? 1 : 0);\n      return *this;\n    }\n#if FMT_HAS_BUILTIN(__builtin_addcll) && !defined(__ibmxl__)\n    unsigned long long carry;\n    lo_ = __builtin_addcll(lo_, n, 0, &carry);\n    hi_ += carry;\n#elif FMT_HAS_BUILTIN(__builtin_ia32_addcarryx_u64) && !defined(__ibmxl__)\n    unsigned long long result;\n    auto carry = __builtin_ia32_addcarryx_u64(0, lo_, n, &result);\n    lo_ = result;\n    hi_ += carry;\n#elif defined(_MSC_VER) && defined(_M_X64)\n    auto carry = _addcarry_u64(0, lo_, n, &lo_);\n    _addcarry_u64(carry, hi_, 0, &hi_);\n#else\n    lo_ += n;\n    hi_ += (lo_ < n ? 1 : 0);\n#endif\n    return *this;\n  }\n};\n\nusing uint128_t = conditional_t<FMT_USE_INT128, uint128_opt, uint128_fallback>;\n\n#ifdef UINTPTR_MAX\nusing uintptr_t = ::uintptr_t;\n#else\nusing uintptr_t = uint128_t;\n#endif\n\n// Returns the largest possible value for type T. Same as\n// std::numeric_limits<T>::max() but shorter and not affected by the max macro.\ntemplate <typename T> constexpr auto max_value() -> T {\n  return (std::numeric_limits<T>::max)();\n}\ntemplate <typename T> constexpr auto num_bits() -> int {\n  return std::numeric_limits<T>::digits;\n}\n// std::numeric_limits<T>::digits may return 0 for 128-bit ints.\ntemplate <> constexpr auto num_bits<int128_opt>() -> int { return 128; }\ntemplate <> constexpr auto num_bits<uint128_t>() -> int { return 128; }\n\n// A heterogeneous bit_cast used for converting 96-bit long double to uint128_t\n// and 128-bit pointers to uint128_fallback.\ntemplate <typename To, typename From, FMT_ENABLE_IF(sizeof(To) > sizeof(From))>\ninline auto bit_cast(const From& from) -> To {\n  constexpr auto size = static_cast<int>(sizeof(From) / sizeof(unsigned));\n  struct data_t {\n    unsigned value[static_cast<unsigned>(size)];\n  } data = bit_cast<data_t>(from);\n  auto result = To();\n  if (const_check(is_big_endian())) {\n    for (int i = 0; i < size; ++i)\n      result = (result << num_bits<unsigned>()) | data.value[i];\n  } else {\n    for (int i = size - 1; i >= 0; --i)\n      result = (result << num_bits<unsigned>()) | data.value[i];\n  }\n  return result;\n}\n\nFMT_INLINE void assume(bool condition) {\n  (void)condition;\n#if FMT_HAS_BUILTIN(__builtin_assume) && !FMT_ICC_VERSION\n  __builtin_assume(condition);\n#endif\n}\n\n// An approximation of iterator_t for pre-C++20 systems.\ntemplate <typename T>\nusing iterator_t = decltype(std::begin(std::declval<T&>()));\ntemplate <typename T> using sentinel_t = decltype(std::end(std::declval<T&>()));\n\n// A workaround for std::string not having mutable data() until C++17.\ntemplate <typename Char>\ninline auto get_data(std::basic_string<Char>& s) -> Char* {\n  return &s[0];\n}\ntemplate <typename Container>\ninline auto get_data(Container& c) -> typename Container::value_type* {\n  return c.data();\n}\n\n#if defined(_SECURE_SCL) && _SECURE_SCL\n// Make a checked iterator to avoid MSVC warnings.\ntemplate <typename T> using checked_ptr = stdext::checked_array_iterator<T*>;\ntemplate <typename T>\nconstexpr auto make_checked(T* p, size_t size) -> checked_ptr<T> {\n  return {p, size};\n}\n#else\ntemplate <typename T> using checked_ptr = T*;\ntemplate <typename T> constexpr auto make_checked(T* p, size_t) -> T* {\n  return p;\n}\n#endif\n\n// Attempts to reserve space for n extra characters in the output range.\n// Returns a pointer to the reserved range or a reference to it.\ntemplate <typename Container, FMT_ENABLE_IF(is_contiguous<Container>::value)>\n#if FMT_CLANG_VERSION >= 307 && !FMT_ICC_VERSION\n__attribute__((no_sanitize(\"undefined\")))\n#endif\ninline auto\nreserve(std::back_insert_iterator<Container> it, size_t n)\n    -> checked_ptr<typename Container::value_type> {\n  Container& c = get_container(it);\n  size_t size = c.size();\n  c.resize(size + n);\n  return make_checked(get_data(c) + size, n);\n}\n\ntemplate <typename T>\ninline auto reserve(buffer_appender<T> it, size_t n) -> buffer_appender<T> {\n  buffer<T>& buf = get_container(it);\n  buf.try_reserve(buf.size() + n);\n  return it;\n}\n\ntemplate <typename Iterator>\nconstexpr auto reserve(Iterator& it, size_t) -> Iterator& {\n  return it;\n}\n\ntemplate <typename OutputIt>\nusing reserve_iterator =\n    remove_reference_t<decltype(reserve(std::declval<OutputIt&>(), 0))>;\n\ntemplate <typename T, typename OutputIt>\nconstexpr auto to_pointer(OutputIt, size_t) -> T* {\n  return nullptr;\n}\ntemplate <typename T> auto to_pointer(buffer_appender<T> it, size_t n) -> T* {\n  buffer<T>& buf = get_container(it);\n  auto size = buf.size();\n  if (buf.capacity() < size + n) return nullptr;\n  buf.try_resize(size + n);\n  return buf.data() + size;\n}\n\ntemplate <typename Container, FMT_ENABLE_IF(is_contiguous<Container>::value)>\ninline auto base_iterator(std::back_insert_iterator<Container>& it,\n                          checked_ptr<typename Container::value_type>)\n    -> std::back_insert_iterator<Container> {\n  return it;\n}\n\ntemplate <typename Iterator>\nconstexpr auto base_iterator(Iterator, Iterator it) -> Iterator {\n  return it;\n}\n\n// <algorithm> is spectacularly slow to compile in C++20 so use a simple fill_n\n// instead (#1998).\ntemplate <typename OutputIt, typename Size, typename T>\nFMT_CONSTEXPR auto fill_n(OutputIt out, Size count, const T& value)\n    -> OutputIt {\n  for (Size i = 0; i < count; ++i) *out++ = value;\n  return out;\n}\ntemplate <typename T, typename Size>\nFMT_CONSTEXPR20 auto fill_n(T* out, Size count, char value) -> T* {\n  if (is_constant_evaluated()) {\n    return fill_n<T*, Size, T>(out, count, value);\n  }\n  std::memset(out, value, to_unsigned(count));\n  return out + count;\n}\n\n#ifdef __cpp_char8_t\nusing char8_type = char8_t;\n#else\nenum char8_type : unsigned char {};\n#endif\n\ntemplate <typename OutChar, typename InputIt, typename OutputIt>\nFMT_CONSTEXPR FMT_NOINLINE auto copy_str_noinline(InputIt begin, InputIt end,\n                                                  OutputIt out) -> OutputIt {\n  return copy_str<OutChar>(begin, end, out);\n}\n\n// A public domain branchless UTF-8 decoder by Christopher Wellons:\n// https://github.com/skeeto/branchless-utf8\n/* Decode the next character, c, from s, reporting errors in e.\n *\n * Since this is a branchless decoder, four bytes will be read from the\n * buffer regardless of the actual length of the next character. This\n * means the buffer _must_ have at least three bytes of zero padding\n * following the end of the data stream.\n *\n * Errors are reported in e, which will be non-zero if the parsed\n * character was somehow invalid: invalid byte sequence, non-canonical\n * encoding, or a surrogate half.\n *\n * The function returns a pointer to the next character. When an error\n * occurs, this pointer will be a guess that depends on the particular\n * error, but it will always advance at least one byte.\n */\nFMT_CONSTEXPR inline auto utf8_decode(const char* s, uint32_t* c, int* e)\n    -> const char* {\n  constexpr const int masks[] = {0x00, 0x7f, 0x1f, 0x0f, 0x07};\n  constexpr const uint32_t mins[] = {4194304, 0, 128, 2048, 65536};\n  constexpr const int shiftc[] = {0, 18, 12, 6, 0};\n  constexpr const int shifte[] = {0, 6, 4, 2, 0};\n\n  int len = code_point_length_impl(*s);\n  // Compute the pointer to the next character early so that the next\n  // iteration can start working on the next character. Neither Clang\n  // nor GCC figure out this reordering on their own.\n  const char* next = s + len + !len;\n\n  using uchar = unsigned char;\n\n  // Assume a four-byte character and load four bytes. Unused bits are\n  // shifted out.\n  *c = uint32_t(uchar(s[0]) & masks[len]) << 18;\n  *c |= uint32_t(uchar(s[1]) & 0x3f) << 12;\n  *c |= uint32_t(uchar(s[2]) & 0x3f) << 6;\n  *c |= uint32_t(uchar(s[3]) & 0x3f) << 0;\n  *c >>= shiftc[len];\n\n  // Accumulate the various error conditions.\n  *e = (*c < mins[len]) << 6;       // non-canonical encoding\n  *e |= ((*c >> 11) == 0x1b) << 7;  // surrogate half?\n  *e |= (*c > 0x10FFFF) << 8;       // out of range?\n  *e |= (uchar(s[1]) & 0xc0) >> 2;\n  *e |= (uchar(s[2]) & 0xc0) >> 4;\n  *e |= uchar(s[3]) >> 6;\n  *e ^= 0x2a;  // top two bits of each tail byte correct?\n  *e >>= shifte[len];\n\n  return next;\n}\n\nconstexpr uint32_t invalid_code_point = ~uint32_t();\n\n// Invokes f(cp, sv) for every code point cp in s with sv being the string view\n// corresponding to the code point. cp is invalid_code_point on error.\ntemplate <typename F>\nFMT_CONSTEXPR void for_each_codepoint(string_view s, F f) {\n  auto decode = [f](const char* buf_ptr, const char* ptr) {\n    auto cp = uint32_t();\n    auto error = 0;\n    auto end = utf8_decode(buf_ptr, &cp, &error);\n    bool result = f(error ? invalid_code_point : cp,\n                    string_view(ptr, error ? 1 : to_unsigned(end - buf_ptr)));\n    return result ? (error ? buf_ptr + 1 : end) : nullptr;\n  };\n  auto p = s.data();\n  const size_t block_size = 4;  // utf8_decode always reads blocks of 4 chars.\n  if (s.size() >= block_size) {\n    for (auto end = p + s.size() - block_size + 1; p < end;) {\n      p = decode(p, p);\n      if (!p) return;\n    }\n  }\n  if (auto num_chars_left = s.data() + s.size() - p) {\n    char buf[2 * block_size - 1] = {};\n    copy_str<char>(p, p + num_chars_left, buf);\n    const char* buf_ptr = buf;\n    do {\n      auto end = decode(buf_ptr, p);\n      if (!end) return;\n      p += end - buf_ptr;\n      buf_ptr = end;\n    } while (buf_ptr - buf < num_chars_left);\n  }\n}\n\ntemplate <typename Char>\ninline auto compute_width(basic_string_view<Char> s) -> size_t {\n  return s.size();\n}\n\n// Computes approximate display width of a UTF-8 string.\nFMT_CONSTEXPR inline size_t compute_width(string_view s) {\n  size_t num_code_points = 0;\n  // It is not a lambda for compatibility with C++14.\n  struct count_code_points {\n    size_t* count;\n    FMT_CONSTEXPR auto operator()(uint32_t cp, string_view) const -> bool {\n      *count += detail::to_unsigned(\n          1 +\n          (cp >= 0x1100 &&\n           (cp <= 0x115f ||  // Hangul Jamo init. consonants\n            cp == 0x2329 ||  // LEFT-POINTING ANGLE BRACKET\n            cp == 0x232a ||  // RIGHT-POINTING ANGLE BRACKET\n            // CJK ... Yi except IDEOGRAPHIC HALF FILL SPACE:\n            (cp >= 0x2e80 && cp <= 0xa4cf && cp != 0x303f) ||\n            (cp >= 0xac00 && cp <= 0xd7a3) ||    // Hangul Syllables\n            (cp >= 0xf900 && cp <= 0xfaff) ||    // CJK Compatibility Ideographs\n            (cp >= 0xfe10 && cp <= 0xfe19) ||    // Vertical Forms\n            (cp >= 0xfe30 && cp <= 0xfe6f) ||    // CJK Compatibility Forms\n            (cp >= 0xff00 && cp <= 0xff60) ||    // Fullwidth Forms\n            (cp >= 0xffe0 && cp <= 0xffe6) ||    // Fullwidth Forms\n            (cp >= 0x20000 && cp <= 0x2fffd) ||  // CJK\n            (cp >= 0x30000 && cp <= 0x3fffd) ||\n            // Miscellaneous Symbols and Pictographs + Emoticons:\n            (cp >= 0x1f300 && cp <= 0x1f64f) ||\n            // Supplemental Symbols and Pictographs:\n            (cp >= 0x1f900 && cp <= 0x1f9ff))));\n      return true;\n    }\n  };\n  for_each_codepoint(s, count_code_points{&num_code_points});\n  return num_code_points;\n}\n\ninline auto compute_width(basic_string_view<char8_type> s) -> size_t {\n  return compute_width(\n      string_view(reinterpret_cast<const char*>(s.data()), s.size()));\n}\n\ntemplate <typename Char>\ninline auto code_point_index(basic_string_view<Char> s, size_t n) -> size_t {\n  size_t size = s.size();\n  return n < size ? n : size;\n}\n\n// Calculates the index of the nth code point in a UTF-8 string.\ninline auto code_point_index(string_view s, size_t n) -> size_t {\n  const char* data = s.data();\n  size_t num_code_points = 0;\n  for (size_t i = 0, size = s.size(); i != size; ++i) {\n    if ((data[i] & 0xc0) != 0x80 && ++num_code_points > n) return i;\n  }\n  return s.size();\n}\n\ninline auto code_point_index(basic_string_view<char8_type> s, size_t n)\n    -> size_t {\n  return code_point_index(\n      string_view(reinterpret_cast<const char*>(s.data()), s.size()), n);\n}\n\n#ifndef FMT_USE_FLOAT128\n#  ifdef __SIZEOF_FLOAT128__\n#    define FMT_USE_FLOAT128 1\n#  else\n#    define FMT_USE_FLOAT128 0\n#  endif\n#endif\n#if FMT_USE_FLOAT128\nusing float128 = __float128;\n#else\nusing float128 = void;\n#endif\ntemplate <typename T> using is_float128 = std::is_same<T, float128>;\n\ntemplate <typename T>\nusing is_floating_point =\n    bool_constant<std::is_floating_point<T>::value || is_float128<T>::value>;\n\ntemplate <typename T, bool = std::is_floating_point<T>::value>\nstruct is_fast_float : bool_constant<std::numeric_limits<T>::is_iec559 &&\n                                     sizeof(T) <= sizeof(double)> {};\ntemplate <typename T> struct is_fast_float<T, false> : std::false_type {};\n\ntemplate <typename T>\nusing is_double_double = bool_constant<std::numeric_limits<T>::digits == 106>;\n\n#ifndef FMT_USE_FULL_CACHE_DRAGONBOX\n#  define FMT_USE_FULL_CACHE_DRAGONBOX 0\n#endif\n\ntemplate <typename T>\ntemplate <typename U>\nvoid buffer<T>::append(const U* begin, const U* end) {\n  while (begin != end) {\n    auto count = to_unsigned(end - begin);\n    try_reserve(size_ + count);\n    auto free_cap = capacity_ - size_;\n    if (free_cap < count) count = free_cap;\n    std::uninitialized_copy_n(begin, count, make_checked(ptr_ + size_, count));\n    size_ += count;\n    begin += count;\n  }\n}\n\ntemplate <typename T, typename Enable = void>\nstruct is_locale : std::false_type {};\ntemplate <typename T>\nstruct is_locale<T, void_t<decltype(T::classic())>> : std::true_type {};\n}  // namespace detail\n\nFMT_MODULE_EXPORT_BEGIN\n\n// The number of characters to store in the basic_memory_buffer object itself\n// to avoid dynamic memory allocation.\nenum { inline_buffer_size = 500 };\n\n/**\n  \\rst\n  A dynamically growing memory buffer for trivially copyable/constructible types\n  with the first ``SIZE`` elements stored in the object itself.\n\n  You can use the ``memory_buffer`` type alias for ``char`` instead.\n\n  **Example**::\n\n     auto out = fmt::memory_buffer();\n     format_to(std::back_inserter(out), \"The answer is {}.\", 42);\n\n  This will append the following output to the ``out`` object:\n\n  .. code-block:: none\n\n     The answer is 42.\n\n  The output can be converted to an ``std::string`` with ``to_string(out)``.\n  \\endrst\n */\ntemplate <typename T, size_t SIZE = inline_buffer_size,\n          typename Allocator = std::allocator<T>>\nclass basic_memory_buffer final : public detail::buffer<T> {\n private:\n  T store_[SIZE];\n\n  // Don't inherit from Allocator avoid generating type_info for it.\n  Allocator alloc_;\n\n  // Deallocate memory allocated by the buffer.\n  FMT_CONSTEXPR20 void deallocate() {\n    T* data = this->data();\n    if (data != store_) alloc_.deallocate(data, this->capacity());\n  }\n\n protected:\n  FMT_CONSTEXPR20 void grow(size_t size) override;\n\n public:\n  using value_type = T;\n  using const_reference = const T&;\n\n  FMT_CONSTEXPR20 explicit basic_memory_buffer(\n      const Allocator& alloc = Allocator())\n      : alloc_(alloc) {\n    this->set(store_, SIZE);\n    if (detail::is_constant_evaluated()) detail::fill_n(store_, SIZE, T());\n  }\n  FMT_CONSTEXPR20 ~basic_memory_buffer() { deallocate(); }\n\n private:\n  // Move data from other to this buffer.\n  FMT_CONSTEXPR20 void move(basic_memory_buffer& other) {\n    alloc_ = std::move(other.alloc_);\n    T* data = other.data();\n    size_t size = other.size(), capacity = other.capacity();\n    if (data == other.store_) {\n      this->set(store_, capacity);\n      detail::copy_str<T>(other.store_, other.store_ + size,\n                          detail::make_checked(store_, capacity));\n    } else {\n      this->set(data, capacity);\n      // Set pointer to the inline array so that delete is not called\n      // when deallocating.\n      other.set(other.store_, 0);\n      other.clear();\n    }\n    this->resize(size);\n  }\n\n public:\n  /**\n    \\rst\n    Constructs a :class:`fmt::basic_memory_buffer` object moving the content\n    of the other object to it.\n    \\endrst\n   */\n  FMT_CONSTEXPR20 basic_memory_buffer(basic_memory_buffer&& other) noexcept {\n    move(other);\n  }\n\n  /**\n    \\rst\n    Moves the content of the other ``basic_memory_buffer`` object to this one.\n    \\endrst\n   */\n  auto operator=(basic_memory_buffer&& other) noexcept -> basic_memory_buffer& {\n    FMT_ASSERT(this != &other, \"\");\n    deallocate();\n    move(other);\n    return *this;\n  }\n\n  // Returns a copy of the allocator associated with this buffer.\n  auto get_allocator() const -> Allocator { return alloc_; }\n\n  /**\n    Resizes the buffer to contain *count* elements. If T is a POD type new\n    elements may not be initialized.\n   */\n  FMT_CONSTEXPR20 void resize(size_t count) { this->try_resize(count); }\n\n  /** Increases the buffer capacity to *new_capacity*. */\n  void reserve(size_t new_capacity) { this->try_reserve(new_capacity); }\n\n  // Directly append data into the buffer\n  using detail::buffer<T>::append;\n  template <typename ContiguousRange>\n  void append(const ContiguousRange& range) {\n    append(range.data(), range.data() + range.size());\n  }\n};\n\ntemplate <typename T, size_t SIZE, typename Allocator>\nFMT_CONSTEXPR20 void basic_memory_buffer<T, SIZE, Allocator>::grow(\n    size_t size) {\n  detail::abort_fuzzing_if(size > 5000);\n  const size_t max_size = std::allocator_traits<Allocator>::max_size(alloc_);\n  size_t old_capacity = this->capacity();\n  size_t new_capacity = old_capacity + old_capacity / 2;\n  if (size > new_capacity)\n    new_capacity = size;\n  else if (new_capacity > max_size)\n    new_capacity = size > max_size ? size : max_size;\n  T* old_data = this->data();\n  T* new_data =\n      std::allocator_traits<Allocator>::allocate(alloc_, new_capacity);\n  // The following code doesn't throw, so the raw pointer above doesn't leak.\n  std::uninitialized_copy(old_data, old_data + this->size(),\n                          detail::make_checked(new_data, new_capacity));\n  this->set(new_data, new_capacity);\n  // deallocate must not throw according to the standard, but even if it does,\n  // the buffer already uses the new storage and will deallocate it in\n  // destructor.\n  if (old_data != store_) alloc_.deallocate(old_data, old_capacity);\n}\n\nusing memory_buffer = basic_memory_buffer<char>;\n\ntemplate <typename T, size_t SIZE, typename Allocator>\nstruct is_contiguous<basic_memory_buffer<T, SIZE, Allocator>> : std::true_type {\n};\n\nnamespace detail {\n#ifdef _WIN32\nFMT_API bool write_console(std::FILE* f, string_view text);\n#endif\nFMT_API void print(std::FILE*, string_view);\n}  // namespace detail\n\n/** A formatting error such as invalid format string. */\nFMT_CLASS_API\nclass FMT_API format_error : public std::runtime_error {\n public:\n  explicit format_error(const char* message) : std::runtime_error(message) {}\n  explicit format_error(const std::string& message)\n      : std::runtime_error(message) {}\n  format_error(const format_error&) = default;\n  format_error& operator=(const format_error&) = default;\n  format_error(format_error&&) = default;\n  format_error& operator=(format_error&&) = default;\n  ~format_error() noexcept override FMT_MSC_DEFAULT;\n};\n\nnamespace detail_exported {\n#if FMT_USE_NONTYPE_TEMPLATE_ARGS\ntemplate <typename Char, size_t N> struct fixed_string {\n  constexpr fixed_string(const Char (&str)[N]) {\n    detail::copy_str<Char, const Char*, Char*>(static_cast<const Char*>(str),\n                                               str + N, data);\n  }\n  Char data[N] = {};\n};\n#endif\n\n// Converts a compile-time string to basic_string_view.\ntemplate <typename Char, size_t N>\nconstexpr auto compile_string_to_view(const Char (&s)[N])\n    -> basic_string_view<Char> {\n  // Remove trailing NUL character if needed. Won't be present if this is used\n  // with a raw character array (i.e. not defined as a string).\n  return {s, N - (std::char_traits<Char>::to_int_type(s[N - 1]) == 0 ? 1 : 0)};\n}\ntemplate <typename Char>\nconstexpr auto compile_string_to_view(detail::std_string_view<Char> s)\n    -> basic_string_view<Char> {\n  return {s.data(), s.size()};\n}\n}  // namespace detail_exported\n\nFMT_BEGIN_DETAIL_NAMESPACE\n\ntemplate <typename T> struct is_integral : std::is_integral<T> {};\ntemplate <> struct is_integral<int128_opt> : std::true_type {};\ntemplate <> struct is_integral<uint128_t> : std::true_type {};\n\ntemplate <typename T>\nusing is_signed =\n    std::integral_constant<bool, std::numeric_limits<T>::is_signed ||\n                                     std::is_same<T, int128_opt>::value>;\n\n// Returns true if value is negative, false otherwise.\n// Same as `value < 0` but doesn't produce warnings if T is an unsigned type.\ntemplate <typename T, FMT_ENABLE_IF(is_signed<T>::value)>\nconstexpr auto is_negative(T value) -> bool {\n  return value < 0;\n}\ntemplate <typename T, FMT_ENABLE_IF(!is_signed<T>::value)>\nconstexpr auto is_negative(T) -> bool {\n  return false;\n}\n\ntemplate <typename T>\nFMT_CONSTEXPR auto is_supported_floating_point(T) -> bool {\n  if (std::is_same<T, float>()) return FMT_USE_FLOAT;\n  if (std::is_same<T, double>()) return FMT_USE_DOUBLE;\n  if (std::is_same<T, long double>()) return FMT_USE_LONG_DOUBLE;\n  return true;\n}\n\n// Smallest of uint32_t, uint64_t, uint128_t that is large enough to\n// represent all values of an integral type T.\ntemplate <typename T>\nusing uint32_or_64_or_128_t =\n    conditional_t<num_bits<T>() <= 32 && !FMT_REDUCE_INT_INSTANTIATIONS,\n                  uint32_t,\n                  conditional_t<num_bits<T>() <= 64, uint64_t, uint128_t>>;\ntemplate <typename T>\nusing uint64_or_128_t = conditional_t<num_bits<T>() <= 64, uint64_t, uint128_t>;\n\n#define FMT_POWERS_OF_10(factor)                                             \\\n  factor * 10, (factor)*100, (factor)*1000, (factor)*10000, (factor)*100000, \\\n      (factor)*1000000, (factor)*10000000, (factor)*100000000,               \\\n      (factor)*1000000000\n\n// Converts value in the range [0, 100) to a string.\nconstexpr const char* digits2(size_t value) {\n  // GCC generates slightly better code when value is pointer-size.\n  return &\"0001020304050607080910111213141516171819\"\n         \"2021222324252627282930313233343536373839\"\n         \"4041424344454647484950515253545556575859\"\n         \"6061626364656667686970717273747576777879\"\n         \"8081828384858687888990919293949596979899\"[value * 2];\n}\n\n// Sign is a template parameter to workaround a bug in gcc 4.8.\ntemplate <typename Char, typename Sign> constexpr Char sign(Sign s) {\n#if !FMT_GCC_VERSION || FMT_GCC_VERSION >= 604\n  static_assert(std::is_same<Sign, sign_t>::value, \"\");\n#endif\n  return static_cast<Char>(\"\\0-+ \"[s]);\n}\n\ntemplate <typename T> FMT_CONSTEXPR auto count_digits_fallback(T n) -> int {\n  int count = 1;\n  for (;;) {\n    // Integer division is slow so do it for a group of four digits instead\n    // of for every digit. The idea comes from the talk by Alexandrescu\n    // \"Three Optimization Tips for C++\". See speed-test for a comparison.\n    if (n < 10) return count;\n    if (n < 100) return count + 1;\n    if (n < 1000) return count + 2;\n    if (n < 10000) return count + 3;\n    n /= 10000u;\n    count += 4;\n  }\n}\n#if FMT_USE_INT128\nFMT_CONSTEXPR inline auto count_digits(uint128_opt n) -> int {\n  return count_digits_fallback(n);\n}\n#endif\n\n#ifdef FMT_BUILTIN_CLZLL\n// It is a separate function rather than a part of count_digits to workaround\n// the lack of static constexpr in constexpr functions.\ninline auto do_count_digits(uint64_t n) -> int {\n  // This has comparable performance to the version by Kendall Willets\n  // (https://github.com/fmtlib/format-benchmark/blob/master/digits10)\n  // but uses smaller tables.\n  // Maps bsr(n) to ceil(log10(pow(2, bsr(n) + 1) - 1)).\n  static constexpr uint8_t bsr2log10[] = {\n      1,  1,  1,  2,  2,  2,  3,  3,  3,  4,  4,  4,  4,  5,  5,  5,\n      6,  6,  6,  7,  7,  7,  7,  8,  8,  8,  9,  9,  9,  10, 10, 10,\n      10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 15, 15,\n      15, 16, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 19, 20};\n  auto t = bsr2log10[FMT_BUILTIN_CLZLL(n | 1) ^ 63];\n  static constexpr const uint64_t zero_or_powers_of_10[] = {\n      0, 0, FMT_POWERS_OF_10(1U), FMT_POWERS_OF_10(1000000000ULL),\n      10000000000000000000ULL};\n  return t - (n < zero_or_powers_of_10[t]);\n}\n#endif\n\n// Returns the number of decimal digits in n. Leading zeros are not counted\n// except for n == 0 in which case count_digits returns 1.\nFMT_CONSTEXPR20 inline auto count_digits(uint64_t n) -> int {\n#ifdef FMT_BUILTIN_CLZLL\n  if (!is_constant_evaluated()) {\n    return do_count_digits(n);\n  }\n#endif\n  return count_digits_fallback(n);\n}\n\n// Counts the number of digits in n. BITS = log2(radix).\ntemplate <int BITS, typename UInt>\nFMT_CONSTEXPR auto count_digits(UInt n) -> int {\n#ifdef FMT_BUILTIN_CLZ\n  if (!is_constant_evaluated() && num_bits<UInt>() == 32)\n    return (FMT_BUILTIN_CLZ(static_cast<uint32_t>(n) | 1) ^ 31) / BITS + 1;\n#endif\n  // Lambda avoids unreachable code warnings from NVHPC.\n  return [](UInt m) {\n    int num_digits = 0;\n    do {\n      ++num_digits;\n    } while ((m >>= BITS) != 0);\n    return num_digits;\n  }(n);\n}\n\n#ifdef FMT_BUILTIN_CLZ\n// It is a separate function rather than a part of count_digits to workaround\n// the lack of static constexpr in constexpr functions.\nFMT_INLINE auto do_count_digits(uint32_t n) -> int {\n// An optimization by Kendall Willets from https://bit.ly/3uOIQrB.\n// This increments the upper 32 bits (log10(T) - 1) when >= T is added.\n#  define FMT_INC(T) (((sizeof(#  T) - 1ull) << 32) - T)\n  static constexpr uint64_t table[] = {\n      FMT_INC(0),          FMT_INC(0),          FMT_INC(0),           // 8\n      FMT_INC(10),         FMT_INC(10),         FMT_INC(10),          // 64\n      FMT_INC(100),        FMT_INC(100),        FMT_INC(100),         // 512\n      FMT_INC(1000),       FMT_INC(1000),       FMT_INC(1000),        // 4096\n      FMT_INC(10000),      FMT_INC(10000),      FMT_INC(10000),       // 32k\n      FMT_INC(100000),     FMT_INC(100000),     FMT_INC(100000),      // 256k\n      FMT_INC(1000000),    FMT_INC(1000000),    FMT_INC(1000000),     // 2048k\n      FMT_INC(10000000),   FMT_INC(10000000),   FMT_INC(10000000),    // 16M\n      FMT_INC(100000000),  FMT_INC(100000000),  FMT_INC(100000000),   // 128M\n      FMT_INC(1000000000), FMT_INC(1000000000), FMT_INC(1000000000),  // 1024M\n      FMT_INC(1000000000), FMT_INC(1000000000)                        // 4B\n  };\n  auto inc = table[FMT_BUILTIN_CLZ(n | 1) ^ 31];\n  return static_cast<int>((n + inc) >> 32);\n}\n#endif\n\n// Optional version of count_digits for better performance on 32-bit platforms.\nFMT_CONSTEXPR20 inline auto count_digits(uint32_t n) -> int {\n#ifdef FMT_BUILTIN_CLZ\n  if (!is_constant_evaluated()) {\n    return do_count_digits(n);\n  }\n#endif\n  return count_digits_fallback(n);\n}\n\ntemplate <typename Int> constexpr auto digits10() noexcept -> int {\n  return std::numeric_limits<Int>::digits10;\n}\ntemplate <> constexpr auto digits10<int128_opt>() noexcept -> int { return 38; }\ntemplate <> constexpr auto digits10<uint128_t>() noexcept -> int { return 38; }\n\ntemplate <typename Char> struct thousands_sep_result {\n  std::string grouping;\n  Char thousands_sep;\n};\n\ntemplate <typename Char>\nFMT_API auto thousands_sep_impl(locale_ref loc) -> thousands_sep_result<Char>;\ntemplate <typename Char>\ninline auto thousands_sep(locale_ref loc) -> thousands_sep_result<Char> {\n  auto result = thousands_sep_impl<char>(loc);\n  return {result.grouping, Char(result.thousands_sep)};\n}\ntemplate <>\ninline auto thousands_sep(locale_ref loc) -> thousands_sep_result<wchar_t> {\n  return thousands_sep_impl<wchar_t>(loc);\n}\n\ntemplate <typename Char>\nFMT_API auto decimal_point_impl(locale_ref loc) -> Char;\ntemplate <typename Char> inline auto decimal_point(locale_ref loc) -> Char {\n  return Char(decimal_point_impl<char>(loc));\n}\ntemplate <> inline auto decimal_point(locale_ref loc) -> wchar_t {\n  return decimal_point_impl<wchar_t>(loc);\n}\n\n// Compares two characters for equality.\ntemplate <typename Char> auto equal2(const Char* lhs, const char* rhs) -> bool {\n  return lhs[0] == Char(rhs[0]) && lhs[1] == Char(rhs[1]);\n}\ninline auto equal2(const char* lhs, const char* rhs) -> bool {\n  return memcmp(lhs, rhs, 2) == 0;\n}\n\n// Copies two characters from src to dst.\ntemplate <typename Char>\nFMT_CONSTEXPR20 FMT_INLINE void copy2(Char* dst, const char* src) {\n  if (!is_constant_evaluated() && sizeof(Char) == sizeof(char)) {\n    memcpy(dst, src, 2);\n    return;\n  }\n  *dst++ = static_cast<Char>(*src++);\n  *dst = static_cast<Char>(*src);\n}\n\ntemplate <typename Iterator> struct format_decimal_result {\n  Iterator begin;\n  Iterator end;\n};\n\n// Formats a decimal unsigned integer value writing into out pointing to a\n// buffer of specified size. The caller must ensure that the buffer is large\n// enough.\ntemplate <typename Char, typename UInt>\nFMT_CONSTEXPR20 auto format_decimal(Char* out, UInt value, int size)\n    -> format_decimal_result<Char*> {\n  FMT_ASSERT(size >= count_digits(value), \"invalid digit count\");\n  out += size;\n  Char* end = out;\n  while (value >= 100) {\n    // Integer division is slow so do it for a group of two digits instead\n    // of for every digit. The idea comes from the talk by Alexandrescu\n    // \"Three Optimization Tips for C++\". See speed-test for a comparison.\n    out -= 2;\n    copy2(out, digits2(static_cast<size_t>(value % 100)));\n    value /= 100;\n  }\n  if (value < 10) {\n    *--out = static_cast<Char>('0' + value);\n    return {out, end};\n  }\n  out -= 2;\n  copy2(out, digits2(static_cast<size_t>(value)));\n  return {out, end};\n}\n\ntemplate <typename Char, typename UInt, typename Iterator,\n          FMT_ENABLE_IF(!std::is_pointer<remove_cvref_t<Iterator>>::value)>\nFMT_CONSTEXPR inline auto format_decimal(Iterator out, UInt value, int size)\n    -> format_decimal_result<Iterator> {\n  // Buffer is large enough to hold all digits (digits10 + 1).\n  Char buffer[digits10<UInt>() + 1];\n  auto end = format_decimal(buffer, value, size).end;\n  return {out, detail::copy_str_noinline<Char>(buffer, end, out)};\n}\n\ntemplate <unsigned BASE_BITS, typename Char, typename UInt>\nFMT_CONSTEXPR auto format_uint(Char* buffer, UInt value, int num_digits,\n                               bool upper = false) -> Char* {\n  buffer += num_digits;\n  Char* end = buffer;\n  do {\n    const char* digits = upper ? \"0123456789ABCDEF\" : \"0123456789abcdef\";\n    unsigned digit = static_cast<unsigned>(value & ((1 << BASE_BITS) - 1));\n    *--buffer = static_cast<Char>(BASE_BITS < 4 ? static_cast<char>('0' + digit)\n                                                : digits[digit]);\n  } while ((value >>= BASE_BITS) != 0);\n  return end;\n}\n\ntemplate <unsigned BASE_BITS, typename Char, typename It, typename UInt>\ninline auto format_uint(It out, UInt value, int num_digits, bool upper = false)\n    -> It {\n  if (auto ptr = to_pointer<Char>(out, to_unsigned(num_digits))) {\n    format_uint<BASE_BITS>(ptr, value, num_digits, upper);\n    return out;\n  }\n  // Buffer should be large enough to hold all digits (digits / BASE_BITS + 1).\n  char buffer[num_bits<UInt>() / BASE_BITS + 1];\n  format_uint<BASE_BITS>(buffer, value, num_digits, upper);\n  return detail::copy_str_noinline<Char>(buffer, buffer + num_digits, out);\n}\n\n// A converter from UTF-8 to UTF-16.\nclass utf8_to_utf16 {\n private:\n  basic_memory_buffer<wchar_t> buffer_;\n\n public:\n  FMT_API explicit utf8_to_utf16(string_view s);\n  operator basic_string_view<wchar_t>() const { return {&buffer_[0], size()}; }\n  auto size() const -> size_t { return buffer_.size() - 1; }\n  auto c_str() const -> const wchar_t* { return &buffer_[0]; }\n  auto str() const -> std::wstring { return {&buffer_[0], size()}; }\n};\n\nnamespace dragonbox {\n\n// Type-specific information that Dragonbox uses.\ntemplate <typename T, typename Enable = void> struct float_info;\n\ntemplate <> struct float_info<float> {\n  using carrier_uint = uint32_t;\n  static const int exponent_bits = 8;\n  static const int kappa = 1;\n  static const int big_divisor = 100;\n  static const int small_divisor = 10;\n  static const int min_k = -31;\n  static const int max_k = 46;\n  static const int shorter_interval_tie_lower_threshold = -35;\n  static const int shorter_interval_tie_upper_threshold = -35;\n};\n\ntemplate <> struct float_info<double> {\n  using carrier_uint = uint64_t;\n  static const int exponent_bits = 11;\n  static const int kappa = 2;\n  static const int big_divisor = 1000;\n  static const int small_divisor = 100;\n  static const int min_k = -292;\n  static const int max_k = 326;\n  static const int shorter_interval_tie_lower_threshold = -77;\n  static const int shorter_interval_tie_upper_threshold = -77;\n};\n\n// An 80- or 128-bit floating point number.\ntemplate <typename T>\nstruct float_info<T, enable_if_t<std::numeric_limits<T>::digits == 64 ||\n                                 std::numeric_limits<T>::digits == 113 ||\n                                 is_float128<T>::value>> {\n  using carrier_uint = detail::uint128_t;\n  static const int exponent_bits = 15;\n};\n\n// A double-double floating point number.\ntemplate <typename T>\nstruct float_info<T, enable_if_t<is_double_double<T>::value>> {\n  using carrier_uint = detail::uint128_t;\n};\n\ntemplate <typename T> struct decimal_fp {\n  using significand_type = typename float_info<T>::carrier_uint;\n  significand_type significand;\n  int exponent;\n};\n\ntemplate <typename T> FMT_API auto to_decimal(T x) noexcept -> decimal_fp<T>;\n}  // namespace dragonbox\n\n// Returns true iff Float has the implicit bit which is not stored.\ntemplate <typename Float> constexpr bool has_implicit_bit() {\n  // An 80-bit FP number has a 64-bit significand an no implicit bit.\n  return std::numeric_limits<Float>::digits != 64;\n}\n\n// Returns the number of significand bits stored in Float. The implicit bit is\n// not counted since it is not stored.\ntemplate <typename Float> constexpr int num_significand_bits() {\n  // std::numeric_limits may not support __float128.\n  return is_float128<Float>() ? 112\n                              : (std::numeric_limits<Float>::digits -\n                                 (has_implicit_bit<Float>() ? 1 : 0));\n}\n\ntemplate <typename Float>\nconstexpr auto exponent_mask() ->\n    typename dragonbox::float_info<Float>::carrier_uint {\n  using uint = typename dragonbox::float_info<Float>::carrier_uint;\n  return ((uint(1) << dragonbox::float_info<Float>::exponent_bits) - 1)\n         << num_significand_bits<Float>();\n}\ntemplate <typename Float> constexpr auto exponent_bias() -> int {\n  // std::numeric_limits may not support __float128.\n  return is_float128<Float>() ? 16383\n                              : std::numeric_limits<Float>::max_exponent - 1;\n}\n\n// Writes the exponent exp in the form \"[+-]d{2,3}\" to buffer.\ntemplate <typename Char, typename It>\nFMT_CONSTEXPR auto write_exponent(int exp, It it) -> It {\n  FMT_ASSERT(-10000 < exp && exp < 10000, \"exponent out of range\");\n  if (exp < 0) {\n    *it++ = static_cast<Char>('-');\n    exp = -exp;\n  } else {\n    *it++ = static_cast<Char>('+');\n  }\n  if (exp >= 100) {\n    const char* top = digits2(to_unsigned(exp / 100));\n    if (exp >= 1000) *it++ = static_cast<Char>(top[0]);\n    *it++ = static_cast<Char>(top[1]);\n    exp %= 100;\n  }\n  const char* d = digits2(to_unsigned(exp));\n  *it++ = static_cast<Char>(d[0]);\n  *it++ = static_cast<Char>(d[1]);\n  return it;\n}\n\n// A floating-point number f * pow(2, e) where F is an unsigned type.\ntemplate <typename F> struct basic_fp {\n  F f;\n  int e;\n\n  static constexpr const int num_significand_bits =\n      static_cast<int>(sizeof(F) * num_bits<unsigned char>());\n\n  constexpr basic_fp() : f(0), e(0) {}\n  constexpr basic_fp(uint64_t f_val, int e_val) : f(f_val), e(e_val) {}\n\n  // Constructs fp from an IEEE754 floating-point number.\n  template <typename Float> FMT_CONSTEXPR basic_fp(Float n) { assign(n); }\n\n  // Assigns n to this and return true iff predecessor is closer than successor.\n  template <typename Float, FMT_ENABLE_IF(!is_double_double<Float>::value)>\n  FMT_CONSTEXPR auto assign(Float n) -> bool {\n    static_assert(std::numeric_limits<Float>::digits <= 113, \"unsupported FP\");\n    // Assume Float is in the format [sign][exponent][significand].\n    using carrier_uint = typename dragonbox::float_info<Float>::carrier_uint;\n    const auto num_float_significand_bits =\n        detail::num_significand_bits<Float>();\n    const auto implicit_bit = carrier_uint(1) << num_float_significand_bits;\n    const auto significand_mask = implicit_bit - 1;\n    auto u = bit_cast<carrier_uint>(n);\n    f = static_cast<F>(u & significand_mask);\n    auto biased_e = static_cast<int>((u & exponent_mask<Float>()) >>\n                                     num_float_significand_bits);\n    // The predecessor is closer if n is a normalized power of 2 (f == 0)\n    // other than the smallest normalized number (biased_e > 1).\n    auto is_predecessor_closer = f == 0 && biased_e > 1;\n    if (biased_e == 0)\n      biased_e = 1;  // Subnormals use biased exponent 1 (min exponent).\n    else if (has_implicit_bit<Float>())\n      f += static_cast<F>(implicit_bit);\n    e = biased_e - exponent_bias<Float>() - num_float_significand_bits;\n    if (!has_implicit_bit<Float>()) ++e;\n    return is_predecessor_closer;\n  }\n\n  template <typename Float, FMT_ENABLE_IF(is_double_double<Float>::value)>\n  FMT_CONSTEXPR auto assign(Float n) -> bool {\n    static_assert(std::numeric_limits<double>::is_iec559, \"unsupported FP\");\n    return assign(static_cast<double>(n));\n  }\n};\n\nusing fp = basic_fp<unsigned long long>;\n\n// Normalizes the value converted from double and multiplied by (1 << SHIFT).\ntemplate <int SHIFT = 0, typename F>\nFMT_CONSTEXPR basic_fp<F> normalize(basic_fp<F> value) {\n  // Handle subnormals.\n  const auto implicit_bit = F(1) << num_significand_bits<double>();\n  const auto shifted_implicit_bit = implicit_bit << SHIFT;\n  while ((value.f & shifted_implicit_bit) == 0) {\n    value.f <<= 1;\n    --value.e;\n  }\n  // Subtract 1 to account for hidden bit.\n  const auto offset = basic_fp<F>::num_significand_bits -\n                      num_significand_bits<double>() - SHIFT - 1;\n  value.f <<= offset;\n  value.e -= offset;\n  return value;\n}\n\n// Computes lhs * rhs / pow(2, 64) rounded to nearest with half-up tie breaking.\nFMT_CONSTEXPR inline uint64_t multiply(uint64_t lhs, uint64_t rhs) {\n#if FMT_USE_INT128\n  auto product = static_cast<__uint128_t>(lhs) * rhs;\n  auto f = static_cast<uint64_t>(product >> 64);\n  return (static_cast<uint64_t>(product) & (1ULL << 63)) != 0 ? f + 1 : f;\n#else\n  // Multiply 32-bit parts of significands.\n  uint64_t mask = (1ULL << 32) - 1;\n  uint64_t a = lhs >> 32, b = lhs & mask;\n  uint64_t c = rhs >> 32, d = rhs & mask;\n  uint64_t ac = a * c, bc = b * c, ad = a * d, bd = b * d;\n  // Compute mid 64-bit of result and round.\n  uint64_t mid = (bd >> 32) + (ad & mask) + (bc & mask) + (1U << 31);\n  return ac + (ad >> 32) + (bc >> 32) + (mid >> 32);\n#endif\n}\n\nFMT_CONSTEXPR inline fp operator*(fp x, fp y) {\n  return {multiply(x.f, y.f), x.e + y.e + 64};\n}\n\ntemplate <typename T = void> struct basic_data {\n  // Normalized 64-bit significands of pow(10, k), for k = -348, -340, ..., 340.\n  // These are generated by support/compute-powers.py.\n  static constexpr uint64_t pow10_significands[87] = {\n      0xfa8fd5a0081c0288, 0xbaaee17fa23ebf76, 0x8b16fb203055ac76,\n      0xcf42894a5dce35ea, 0x9a6bb0aa55653b2d, 0xe61acf033d1a45df,\n      0xab70fe17c79ac6ca, 0xff77b1fcbebcdc4f, 0xbe5691ef416bd60c,\n      0x8dd01fad907ffc3c, 0xd3515c2831559a83, 0x9d71ac8fada6c9b5,\n      0xea9c227723ee8bcb, 0xaecc49914078536d, 0x823c12795db6ce57,\n      0xc21094364dfb5637, 0x9096ea6f3848984f, 0xd77485cb25823ac7,\n      0xa086cfcd97bf97f4, 0xef340a98172aace5, 0xb23867fb2a35b28e,\n      0x84c8d4dfd2c63f3b, 0xc5dd44271ad3cdba, 0x936b9fcebb25c996,\n      0xdbac6c247d62a584, 0xa3ab66580d5fdaf6, 0xf3e2f893dec3f126,\n      0xb5b5ada8aaff80b8, 0x87625f056c7c4a8b, 0xc9bcff6034c13053,\n      0x964e858c91ba2655, 0xdff9772470297ebd, 0xa6dfbd9fb8e5b88f,\n      0xf8a95fcf88747d94, 0xb94470938fa89bcf, 0x8a08f0f8bf0f156b,\n      0xcdb02555653131b6, 0x993fe2c6d07b7fac, 0xe45c10c42a2b3b06,\n      0xaa242499697392d3, 0xfd87b5f28300ca0e, 0xbce5086492111aeb,\n      0x8cbccc096f5088cc, 0xd1b71758e219652c, 0x9c40000000000000,\n      0xe8d4a51000000000, 0xad78ebc5ac620000, 0x813f3978f8940984,\n      0xc097ce7bc90715b3, 0x8f7e32ce7bea5c70, 0xd5d238a4abe98068,\n      0x9f4f2726179a2245, 0xed63a231d4c4fb27, 0xb0de65388cc8ada8,\n      0x83c7088e1aab65db, 0xc45d1df942711d9a, 0x924d692ca61be758,\n      0xda01ee641a708dea, 0xa26da3999aef774a, 0xf209787bb47d6b85,\n      0xb454e4a179dd1877, 0x865b86925b9bc5c2, 0xc83553c5c8965d3d,\n      0x952ab45cfa97a0b3, 0xde469fbd99a05fe3, 0xa59bc234db398c25,\n      0xf6c69a72a3989f5c, 0xb7dcbf5354e9bece, 0x88fcf317f22241e2,\n      0xcc20ce9bd35c78a5, 0x98165af37b2153df, 0xe2a0b5dc971f303a,\n      0xa8d9d1535ce3b396, 0xfb9b7cd9a4a7443c, 0xbb764c4ca7a44410,\n      0x8bab8eefb6409c1a, 0xd01fef10a657842c, 0x9b10a4e5e9913129,\n      0xe7109bfba19c0c9d, 0xac2820d9623bf429, 0x80444b5e7aa7cf85,\n      0xbf21e44003acdd2d, 0x8e679c2f5e44ff8f, 0xd433179d9c8cb841,\n      0x9e19db92b4e31ba9, 0xeb96bf6ebadf77d9, 0xaf87023b9bf0ee6b,\n  };\n\n#if FMT_GCC_VERSION && FMT_GCC_VERSION < 409\n#  pragma GCC diagnostic push\n#  pragma GCC diagnostic ignored \"-Wnarrowing\"\n#endif\n  // Binary exponents of pow(10, k), for k = -348, -340, ..., 340, corresponding\n  // to significands above.\n  static constexpr int16_t pow10_exponents[87] = {\n      -1220, -1193, -1166, -1140, -1113, -1087, -1060, -1034, -1007, -980, -954,\n      -927,  -901,  -874,  -847,  -821,  -794,  -768,  -741,  -715,  -688, -661,\n      -635,  -608,  -582,  -555,  -529,  -502,  -475,  -449,  -422,  -396, -369,\n      -343,  -316,  -289,  -263,  -236,  -210,  -183,  -157,  -130,  -103, -77,\n      -50,   -24,   3,     30,    56,    83,    109,   136,   162,   189,  216,\n      242,   269,   295,   322,   348,   375,   402,   428,   455,   481,  508,\n      534,   561,   588,   614,   641,   667,   694,   720,   747,   774,  800,\n      827,   853,   880,   907,   933,   960,   986,   1013,  1039,  1066};\n#if FMT_GCC_VERSION && FMT_GCC_VERSION < 409\n#  pragma GCC diagnostic pop\n#endif\n\n  static constexpr uint64_t power_of_10_64[20] = {\n      1, FMT_POWERS_OF_10(1ULL), FMT_POWERS_OF_10(1000000000ULL),\n      10000000000000000000ULL};\n};\n\n#if FMT_CPLUSPLUS < 201703L\ntemplate <typename T> constexpr uint64_t basic_data<T>::pow10_significands[];\ntemplate <typename T> constexpr int16_t basic_data<T>::pow10_exponents[];\ntemplate <typename T> constexpr uint64_t basic_data<T>::power_of_10_64[];\n#endif\n\n// This is a struct rather than an alias to avoid shadowing warnings in gcc.\nstruct data : basic_data<> {};\n\n// Returns a cached power of 10 `c_k = c_k.f * pow(2, c_k.e)` such that its\n// (binary) exponent satisfies `min_exponent <= c_k.e <= min_exponent + 28`.\nFMT_CONSTEXPR inline fp get_cached_power(int min_exponent,\n                                         int& pow10_exponent) {\n  const int shift = 32;\n  // log10(2) = 0x0.4d104d427de7fbcc...\n  const int64_t significand = 0x4d104d427de7fbcc;\n  int index = static_cast<int>(\n      ((min_exponent + fp::num_significand_bits - 1) * (significand >> shift) +\n       ((int64_t(1) << shift) - 1))  // ceil\n      >> 32                          // arithmetic shift\n  );\n  // Decimal exponent of the first (smallest) cached power of 10.\n  const int first_dec_exp = -348;\n  // Difference between 2 consecutive decimal exponents in cached powers of 10.\n  const int dec_exp_step = 8;\n  index = (index - first_dec_exp - 1) / dec_exp_step + 1;\n  pow10_exponent = first_dec_exp + index * dec_exp_step;\n  // Using *(x + index) instead of x[index] avoids an issue with some compilers\n  // using the EDG frontend (e.g. nvhpc/22.3 in C++17 mode).\n  return {*(data::pow10_significands + index),\n          *(data::pow10_exponents + index)};\n}\n\n#ifndef _MSC_VER\n#  define FMT_SNPRINTF snprintf\n#else\nFMT_API auto fmt_snprintf(char* buf, size_t size, const char* fmt, ...) -> int;\n#  define FMT_SNPRINTF fmt_snprintf\n#endif  // _MSC_VER\n\n// Formats a floating-point number with snprintf using the hexfloat format.\ntemplate <typename T>\nauto snprintf_float(T value, int precision, float_specs specs,\n                    buffer<char>& buf) -> int {\n  // Buffer capacity must be non-zero, otherwise MSVC's vsnprintf_s will fail.\n  FMT_ASSERT(buf.capacity() > buf.size(), \"empty buffer\");\n  FMT_ASSERT(specs.format == float_format::hex, \"\");\n  static_assert(!std::is_same<T, float>::value, \"\");\n\n  // Build the format string.\n  char format[7];  // The longest format is \"%#.*Le\".\n  char* format_ptr = format;\n  *format_ptr++ = '%';\n  if (specs.showpoint) *format_ptr++ = '#';\n  if (precision >= 0) {\n    *format_ptr++ = '.';\n    *format_ptr++ = '*';\n  }\n  if (std::is_same<T, long double>()) *format_ptr++ = 'L';\n  *format_ptr++ = specs.upper ? 'A' : 'a';\n  *format_ptr = '\\0';\n\n  // Format using snprintf.\n  auto offset = buf.size();\n  for (;;) {\n    auto begin = buf.data() + offset;\n    auto capacity = buf.capacity() - offset;\n    abort_fuzzing_if(precision > 100000);\n    // Suppress the warning about a nonliteral format string.\n    // Cannot use auto because of a bug in MinGW (#1532).\n    int (*snprintf_ptr)(char*, size_t, const char*, ...) = FMT_SNPRINTF;\n    int result = precision >= 0\n                     ? snprintf_ptr(begin, capacity, format, precision, value)\n                     : snprintf_ptr(begin, capacity, format, value);\n    if (result < 0) {\n      // The buffer will grow exponentially.\n      buf.try_reserve(buf.capacity() + 1);\n      continue;\n    }\n    auto size = to_unsigned(result);\n    // Size equal to capacity means that the last character was truncated.\n    if (size < capacity) {\n      buf.try_resize(size + offset);\n      return 0;\n    }\n    buf.try_reserve(size + offset + 1);  // Add 1 for the terminating '\\0'.\n  }\n}\n\ntemplate <typename T>\nusing convert_float_result =\n    conditional_t<std::is_same<T, float>::value || sizeof(T) == sizeof(double),\n                  double, T>;\n\ntemplate <typename T>\nconstexpr auto convert_float(T value) -> convert_float_result<T> {\n  return static_cast<convert_float_result<T>>(value);\n}\n\ntemplate <typename OutputIt, typename Char>\nFMT_NOINLINE FMT_CONSTEXPR auto fill(OutputIt it, size_t n,\n                                     const fill_t<Char>& fill) -> OutputIt {\n  auto fill_size = fill.size();\n  if (fill_size == 1) return detail::fill_n(it, n, fill[0]);\n  auto data = fill.data();\n  for (size_t i = 0; i < n; ++i)\n    it = copy_str<Char>(data, data + fill_size, it);\n  return it;\n}\n\n// Writes the output of f, padded according to format specifications in specs.\n// size: output size in code units.\n// width: output display width in (terminal) column positions.\ntemplate <align::type align = align::left, typename OutputIt, typename Char,\n          typename F>\nFMT_CONSTEXPR auto write_padded(OutputIt out,\n                                const basic_format_specs<Char>& specs,\n                                size_t size, size_t width, F&& f) -> OutputIt {\n  static_assert(align == align::left || align == align::right, \"\");\n  unsigned spec_width = to_unsigned(specs.width);\n  size_t padding = spec_width > width ? spec_width - width : 0;\n  // Shifts are encoded as string literals because static constexpr is not\n  // supported in constexpr functions.\n  auto* shifts = align == align::left ? \"\\x1f\\x1f\\x00\\x01\" : \"\\x00\\x1f\\x00\\x01\";\n  size_t left_padding = padding >> shifts[specs.align];\n  size_t right_padding = padding - left_padding;\n  auto it = reserve(out, size + padding * specs.fill.size());\n  if (left_padding != 0) it = fill(it, left_padding, specs.fill);\n  it = f(it);\n  if (right_padding != 0) it = fill(it, right_padding, specs.fill);\n  return base_iterator(out, it);\n}\n\ntemplate <align::type align = align::left, typename OutputIt, typename Char,\n          typename F>\nconstexpr auto write_padded(OutputIt out, const basic_format_specs<Char>& specs,\n                            size_t size, F&& f) -> OutputIt {\n  return write_padded<align>(out, specs, size, size, f);\n}\n\ntemplate <align::type align = align::left, typename Char, typename OutputIt>\nFMT_CONSTEXPR auto write_bytes(OutputIt out, string_view bytes,\n                               const basic_format_specs<Char>& specs)\n    -> OutputIt {\n  return write_padded<align>(\n      out, specs, bytes.size(), [bytes](reserve_iterator<OutputIt> it) {\n        const char* data = bytes.data();\n        return copy_str<Char>(data, data + bytes.size(), it);\n      });\n}\n\ntemplate <typename Char, typename OutputIt, typename UIntPtr>\nauto write_ptr(OutputIt out, UIntPtr value,\n               const basic_format_specs<Char>* specs) -> OutputIt {\n  int num_digits = count_digits<4>(value);\n  auto size = to_unsigned(num_digits) + size_t(2);\n  auto write = [=](reserve_iterator<OutputIt> it) {\n    *it++ = static_cast<Char>('0');\n    *it++ = static_cast<Char>('x');\n    return format_uint<4, Char>(it, value, num_digits);\n  };\n  return specs ? write_padded<align::right>(out, *specs, size, write)\n               : base_iterator(out, write(reserve(out, size)));\n}\n\n// Returns true iff the code point cp is printable.\nFMT_API auto is_printable(uint32_t cp) -> bool;\n\ninline auto needs_escape(uint32_t cp) -> bool {\n  return cp < 0x20 || cp == 0x7f || cp == '\"' || cp == '\\\\' ||\n         !is_printable(cp);\n}\n\ntemplate <typename Char> struct find_escape_result {\n  const Char* begin;\n  const Char* end;\n  uint32_t cp;\n};\n\ntemplate <typename Char>\nusing make_unsigned_char =\n    typename conditional_t<std::is_integral<Char>::value,\n                           std::make_unsigned<Char>,\n                           type_identity<uint32_t>>::type;\n\ntemplate <typename Char>\nauto find_escape(const Char* begin, const Char* end)\n    -> find_escape_result<Char> {\n  for (; begin != end; ++begin) {\n    uint32_t cp = static_cast<make_unsigned_char<Char>>(*begin);\n    if (const_check(sizeof(Char) == 1) && cp >= 0x80) continue;\n    if (needs_escape(cp)) return {begin, begin + 1, cp};\n  }\n  return {begin, nullptr, 0};\n}\n\ninline auto find_escape(const char* begin, const char* end)\n    -> find_escape_result<char> {\n  if (!is_utf8()) return find_escape<char>(begin, end);\n  auto result = find_escape_result<char>{end, nullptr, 0};\n  for_each_codepoint(string_view(begin, to_unsigned(end - begin)),\n                     [&](uint32_t cp, string_view sv) {\n                       if (needs_escape(cp)) {\n                         result = {sv.begin(), sv.end(), cp};\n                         return false;\n                       }\n                       return true;\n                     });\n  return result;\n}\n\n#define FMT_STRING_IMPL(s, base, explicit)                                    \\\n  [] {                                                                        \\\n    /* Use the hidden visibility as a workaround for a GCC bug (#1973). */    \\\n    /* Use a macro-like name to avoid shadowing warnings. */                  \\\n    struct FMT_GCC_VISIBILITY_HIDDEN FMT_COMPILE_STRING : base {              \\\n      using char_type FMT_MAYBE_UNUSED = fmt::remove_cvref_t<decltype(s[0])>; \\\n      FMT_MAYBE_UNUSED FMT_CONSTEXPR explicit                                 \\\n      operator fmt::basic_string_view<char_type>() const {                    \\\n        return fmt::detail_exported::compile_string_to_view<char_type>(s);    \\\n      }                                                                       \\\n    };                                                                        \\\n    return FMT_COMPILE_STRING();                                              \\\n  }()\n\n/**\n  \\rst\n  Constructs a compile-time format string from a string literal *s*.\n\n  **Example**::\n\n    // A compile-time error because 'd' is an invalid specifier for strings.\n    std::string s = fmt::format(FMT_STRING(\"{:d}\"), \"foo\");\n  \\endrst\n */\n#define FMT_STRING(s) FMT_STRING_IMPL(s, fmt::detail::compile_string, )\n\ntemplate <size_t width, typename Char, typename OutputIt>\nauto write_codepoint(OutputIt out, char prefix, uint32_t cp) -> OutputIt {\n  *out++ = static_cast<Char>('\\\\');\n  *out++ = static_cast<Char>(prefix);\n  Char buf[width];\n  fill_n(buf, width, static_cast<Char>('0'));\n  format_uint<4>(buf, cp, width);\n  return copy_str<Char>(buf, buf + width, out);\n}\n\ntemplate <typename OutputIt, typename Char>\nauto write_escaped_cp(OutputIt out, const find_escape_result<Char>& escape)\n    -> OutputIt {\n  auto c = static_cast<Char>(escape.cp);\n  switch (escape.cp) {\n  case '\\n':\n    *out++ = static_cast<Char>('\\\\');\n    c = static_cast<Char>('n');\n    break;\n  case '\\r':\n    *out++ = static_cast<Char>('\\\\');\n    c = static_cast<Char>('r');\n    break;\n  case '\\t':\n    *out++ = static_cast<Char>('\\\\');\n    c = static_cast<Char>('t');\n    break;\n  case '\"':\n    FMT_FALLTHROUGH;\n  case '\\'':\n    FMT_FALLTHROUGH;\n  case '\\\\':\n    *out++ = static_cast<Char>('\\\\');\n    break;\n  default:\n    if (is_utf8()) {\n      if (escape.cp < 0x100) {\n        return write_codepoint<2, Char>(out, 'x', escape.cp);\n      }\n      if (escape.cp < 0x10000) {\n        return write_codepoint<4, Char>(out, 'u', escape.cp);\n      }\n      if (escape.cp < 0x110000) {\n        return write_codepoint<8, Char>(out, 'U', escape.cp);\n      }\n    }\n    for (Char escape_char : basic_string_view<Char>(\n             escape.begin, to_unsigned(escape.end - escape.begin))) {\n      out = write_codepoint<2, Char>(out, 'x',\n                                     static_cast<uint32_t>(escape_char) & 0xFF);\n    }\n    return out;\n  }\n  *out++ = c;\n  return out;\n}\n\ntemplate <typename Char, typename OutputIt>\nauto write_escaped_string(OutputIt out, basic_string_view<Char> str)\n    -> OutputIt {\n  *out++ = static_cast<Char>('\"');\n  auto begin = str.begin(), end = str.end();\n  do {\n    auto escape = find_escape(begin, end);\n    out = copy_str<Char>(begin, escape.begin, out);\n    begin = escape.end;\n    if (!begin) break;\n    out = write_escaped_cp<OutputIt, Char>(out, escape);\n  } while (begin != end);\n  *out++ = static_cast<Char>('\"');\n  return out;\n}\n\ntemplate <typename Char, typename OutputIt>\nauto write_escaped_char(OutputIt out, Char v) -> OutputIt {\n  *out++ = static_cast<Char>('\\'');\n  if ((needs_escape(static_cast<uint32_t>(v)) && v != static_cast<Char>('\"')) ||\n      v == static_cast<Char>('\\'')) {\n    out = write_escaped_cp(\n        out, find_escape_result<Char>{&v, &v + 1, static_cast<uint32_t>(v)});\n  } else {\n    *out++ = v;\n  }\n  *out++ = static_cast<Char>('\\'');\n  return out;\n}\n\ntemplate <typename Char, typename OutputIt>\nFMT_CONSTEXPR auto write_char(OutputIt out, Char value,\n                              const basic_format_specs<Char>& specs)\n    -> OutputIt {\n  bool is_debug = specs.type == presentation_type::debug;\n  return write_padded(out, specs, 1, [=](reserve_iterator<OutputIt> it) {\n    if (is_debug) return write_escaped_char(it, value);\n    *it++ = value;\n    return it;\n  });\n}\ntemplate <typename Char, typename OutputIt>\nFMT_CONSTEXPR auto write(OutputIt out, Char value,\n                         const basic_format_specs<Char>& specs,\n                         locale_ref loc = {}) -> OutputIt {\n  return check_char_specs(specs)\n             ? write_char(out, value, specs)\n             : write(out, static_cast<int>(value), specs, loc);\n}\n\n// Data for write_int that doesn't depend on output iterator type. It is used to\n// avoid template code bloat.\ntemplate <typename Char> struct write_int_data {\n  size_t size;\n  size_t padding;\n\n  FMT_CONSTEXPR write_int_data(int num_digits, unsigned prefix,\n                               const basic_format_specs<Char>& specs)\n      : size((prefix >> 24) + to_unsigned(num_digits)), padding(0) {\n    if (specs.align == align::numeric) {\n      auto width = to_unsigned(specs.width);\n      if (width > size) {\n        padding = width - size;\n        size = width;\n      }\n    } else if (specs.precision > num_digits) {\n      size = (prefix >> 24) + to_unsigned(specs.precision);\n      padding = to_unsigned(specs.precision - num_digits);\n    }\n  }\n};\n\n// Writes an integer in the format\n//   <left-padding><prefix><numeric-padding><digits><right-padding>\n// where <digits> are written by write_digits(it).\n// prefix contains chars in three lower bytes and the size in the fourth byte.\ntemplate <typename OutputIt, typename Char, typename W>\nFMT_CONSTEXPR FMT_INLINE auto write_int(OutputIt out, int num_digits,\n                                        unsigned prefix,\n                                        const basic_format_specs<Char>& specs,\n                                        W write_digits) -> OutputIt {\n  // Slightly faster check for specs.width == 0 && specs.precision == -1.\n  if ((specs.width | (specs.precision + 1)) == 0) {\n    auto it = reserve(out, to_unsigned(num_digits) + (prefix >> 24));\n    if (prefix != 0) {\n      for (unsigned p = prefix & 0xffffff; p != 0; p >>= 8)\n        *it++ = static_cast<Char>(p & 0xff);\n    }\n    return base_iterator(out, write_digits(it));\n  }\n  auto data = write_int_data<Char>(num_digits, prefix, specs);\n  return write_padded<align::right>(\n      out, specs, data.size, [=](reserve_iterator<OutputIt> it) {\n        for (unsigned p = prefix & 0xffffff; p != 0; p >>= 8)\n          *it++ = static_cast<Char>(p & 0xff);\n        it = detail::fill_n(it, data.padding, static_cast<Char>('0'));\n        return write_digits(it);\n      });\n}\n\ntemplate <typename Char> class digit_grouping {\n private:\n  thousands_sep_result<Char> sep_;\n\n  struct next_state {\n    std::string::const_iterator group;\n    int pos;\n  };\n  next_state initial_state() const { return {sep_.grouping.begin(), 0}; }\n\n  // Returns the next digit group separator position.\n  int next(next_state& state) const {\n    if (!sep_.thousands_sep) return max_value<int>();\n    if (state.group == sep_.grouping.end())\n      return state.pos += sep_.grouping.back();\n    if (*state.group <= 0 || *state.group == max_value<char>())\n      return max_value<int>();\n    state.pos += *state.group++;\n    return state.pos;\n  }\n\n public:\n  explicit digit_grouping(locale_ref loc, bool localized = true) {\n    if (localized)\n      sep_ = thousands_sep<Char>(loc);\n    else\n      sep_.thousands_sep = Char();\n  }\n  explicit digit_grouping(thousands_sep_result<Char> sep) : sep_(sep) {}\n\n  Char separator() const { return sep_.thousands_sep; }\n\n  int count_separators(int num_digits) const {\n    int count = 0;\n    auto state = initial_state();\n    while (num_digits > next(state)) ++count;\n    return count;\n  }\n\n  // Applies grouping to digits and write the output to out.\n  template <typename Out, typename C>\n  Out apply(Out out, basic_string_view<C> digits) const {\n    auto num_digits = static_cast<int>(digits.size());\n    auto separators = basic_memory_buffer<int>();\n    separators.push_back(0);\n    auto state = initial_state();\n    while (int i = next(state)) {\n      if (i >= num_digits) break;\n      separators.push_back(i);\n    }\n    for (int i = 0, sep_index = static_cast<int>(separators.size() - 1);\n         i < num_digits; ++i) {\n      if (num_digits - i == separators[sep_index]) {\n        *out++ = separator();\n        --sep_index;\n      }\n      *out++ = static_cast<Char>(digits[to_unsigned(i)]);\n    }\n    return out;\n  }\n};\n\ntemplate <typename OutputIt, typename UInt, typename Char>\nauto write_int_localized(OutputIt out, UInt value, unsigned prefix,\n                         const basic_format_specs<Char>& specs,\n                         const digit_grouping<Char>& grouping) -> OutputIt {\n  static_assert(std::is_same<uint64_or_128_t<UInt>, UInt>::value, \"\");\n  int num_digits = count_digits(value);\n  char digits[40];\n  format_decimal(digits, value, num_digits);\n  unsigned size = to_unsigned((prefix != 0 ? 1 : 0) + num_digits +\n                              grouping.count_separators(num_digits));\n  return write_padded<align::right>(\n      out, specs, size, size, [&](reserve_iterator<OutputIt> it) {\n        if (prefix != 0) {\n          char sign = static_cast<char>(prefix);\n          *it++ = static_cast<Char>(sign);\n        }\n        return grouping.apply(it, string_view(digits, to_unsigned(num_digits)));\n      });\n}\n\ntemplate <typename OutputIt, typename UInt, typename Char>\nauto write_int_localized(OutputIt& out, UInt value, unsigned prefix,\n                         const basic_format_specs<Char>& specs, locale_ref loc)\n    -> bool {\n  auto grouping = digit_grouping<Char>(loc);\n  out = write_int_localized(out, value, prefix, specs, grouping);\n  return true;\n}\n\nFMT_CONSTEXPR inline void prefix_append(unsigned& prefix, unsigned value) {\n  prefix |= prefix != 0 ? value << 8 : value;\n  prefix += (1u + (value > 0xff ? 1 : 0)) << 24;\n}\n\ntemplate <typename UInt> struct write_int_arg {\n  UInt abs_value;\n  unsigned prefix;\n};\n\ntemplate <typename T>\nFMT_CONSTEXPR auto make_write_int_arg(T value, sign_t sign)\n    -> write_int_arg<uint32_or_64_or_128_t<T>> {\n  auto prefix = 0u;\n  auto abs_value = static_cast<uint32_or_64_or_128_t<T>>(value);\n  if (is_negative(value)) {\n    prefix = 0x01000000 | '-';\n    abs_value = 0 - abs_value;\n  } else {\n    constexpr const unsigned prefixes[4] = {0, 0, 0x1000000u | '+',\n                                            0x1000000u | ' '};\n    prefix = prefixes[sign];\n  }\n  return {abs_value, prefix};\n}\n\ntemplate <typename Char, typename OutputIt, typename T>\nFMT_CONSTEXPR FMT_INLINE auto write_int(OutputIt out, write_int_arg<T> arg,\n                                        const basic_format_specs<Char>& specs,\n                                        locale_ref loc) -> OutputIt {\n  static_assert(std::is_same<T, uint32_or_64_or_128_t<T>>::value, \"\");\n  auto abs_value = arg.abs_value;\n  auto prefix = arg.prefix;\n  switch (specs.type) {\n  case presentation_type::none:\n  case presentation_type::dec: {\n    if (specs.localized &&\n        write_int_localized(out, static_cast<uint64_or_128_t<T>>(abs_value),\n                            prefix, specs, loc)) {\n      return out;\n    }\n    auto num_digits = count_digits(abs_value);\n    return write_int(\n        out, num_digits, prefix, specs, [=](reserve_iterator<OutputIt> it) {\n          return format_decimal<Char>(it, abs_value, num_digits).end;\n        });\n  }\n  case presentation_type::hex_lower:\n  case presentation_type::hex_upper: {\n    bool upper = specs.type == presentation_type::hex_upper;\n    if (specs.alt)\n      prefix_append(prefix, unsigned(upper ? 'X' : 'x') << 8 | '0');\n    int num_digits = count_digits<4>(abs_value);\n    return write_int(\n        out, num_digits, prefix, specs, [=](reserve_iterator<OutputIt> it) {\n          return format_uint<4, Char>(it, abs_value, num_digits, upper);\n        });\n  }\n  case presentation_type::bin_lower:\n  case presentation_type::bin_upper: {\n    bool upper = specs.type == presentation_type::bin_upper;\n    if (specs.alt)\n      prefix_append(prefix, unsigned(upper ? 'B' : 'b') << 8 | '0');\n    int num_digits = count_digits<1>(abs_value);\n    return write_int(out, num_digits, prefix, specs,\n                     [=](reserve_iterator<OutputIt> it) {\n                       return format_uint<1, Char>(it, abs_value, num_digits);\n                     });\n  }\n  case presentation_type::oct: {\n    int num_digits = count_digits<3>(abs_value);\n    // Octal prefix '0' is counted as a digit, so only add it if precision\n    // is not greater than the number of digits.\n    if (specs.alt && specs.precision <= num_digits && abs_value != 0)\n      prefix_append(prefix, '0');\n    return write_int(out, num_digits, prefix, specs,\n                     [=](reserve_iterator<OutputIt> it) {\n                       return format_uint<3, Char>(it, abs_value, num_digits);\n                     });\n  }\n  case presentation_type::chr:\n    return write_char(out, static_cast<Char>(abs_value), specs);\n  default:\n    throw_format_error(\"invalid type specifier\");\n  }\n  return out;\n}\ntemplate <typename Char, typename OutputIt, typename T>\nFMT_CONSTEXPR FMT_NOINLINE auto write_int_noinline(\n    OutputIt out, write_int_arg<T> arg, const basic_format_specs<Char>& specs,\n    locale_ref loc) -> OutputIt {\n  return write_int(out, arg, specs, loc);\n}\ntemplate <typename Char, typename OutputIt, typename T,\n          FMT_ENABLE_IF(is_integral<T>::value &&\n                        !std::is_same<T, bool>::value &&\n                        std::is_same<OutputIt, buffer_appender<Char>>::value)>\nFMT_CONSTEXPR FMT_INLINE auto write(OutputIt out, T value,\n                                    const basic_format_specs<Char>& specs,\n                                    locale_ref loc) -> OutputIt {\n  return write_int_noinline(out, make_write_int_arg(value, specs.sign), specs,\n                            loc);\n}\n// An inlined version of write used in format string compilation.\ntemplate <typename Char, typename OutputIt, typename T,\n          FMT_ENABLE_IF(is_integral<T>::value &&\n                        !std::is_same<T, bool>::value &&\n                        !std::is_same<OutputIt, buffer_appender<Char>>::value)>\nFMT_CONSTEXPR FMT_INLINE auto write(OutputIt out, T value,\n                                    const basic_format_specs<Char>& specs,\n                                    locale_ref loc) -> OutputIt {\n  return write_int(out, make_write_int_arg(value, specs.sign), specs, loc);\n}\n\n// An output iterator that counts the number of objects written to it and\n// discards them.\nclass counting_iterator {\n private:\n  size_t count_;\n\n public:\n  using iterator_category = std::output_iterator_tag;\n  using difference_type = std::ptrdiff_t;\n  using pointer = void;\n  using reference = void;\n  FMT_UNCHECKED_ITERATOR(counting_iterator);\n\n  struct value_type {\n    template <typename T> FMT_CONSTEXPR void operator=(const T&) {}\n  };\n\n  FMT_CONSTEXPR counting_iterator() : count_(0) {}\n\n  FMT_CONSTEXPR size_t count() const { return count_; }\n\n  FMT_CONSTEXPR counting_iterator& operator++() {\n    ++count_;\n    return *this;\n  }\n  FMT_CONSTEXPR counting_iterator operator++(int) {\n    auto it = *this;\n    ++*this;\n    return it;\n  }\n\n  FMT_CONSTEXPR friend counting_iterator operator+(counting_iterator it,\n                                                   difference_type n) {\n    it.count_ += static_cast<size_t>(n);\n    return it;\n  }\n\n  FMT_CONSTEXPR value_type operator*() const { return {}; }\n};\n\ntemplate <typename Char, typename OutputIt>\nFMT_CONSTEXPR auto write(OutputIt out, basic_string_view<Char> s,\n                         const basic_format_specs<Char>& specs) -> OutputIt {\n  auto data = s.data();\n  auto size = s.size();\n  if (specs.precision >= 0 && to_unsigned(specs.precision) < size)\n    size = code_point_index(s, to_unsigned(specs.precision));\n  bool is_debug = specs.type == presentation_type::debug;\n  size_t width = 0;\n  if (specs.width != 0) {\n    if (is_debug)\n      width = write_escaped_string(counting_iterator{}, s).count();\n    else\n      width = compute_width(basic_string_view<Char>(data, size));\n  }\n  return write_padded(out, specs, size, width,\n                      [=](reserve_iterator<OutputIt> it) {\n                        if (is_debug) return write_escaped_string(it, s);\n                        return copy_str<Char>(data, data + size, it);\n                      });\n}\ntemplate <typename Char, typename OutputIt>\nFMT_CONSTEXPR auto write(OutputIt out,\n                         basic_string_view<type_identity_t<Char>> s,\n                         const basic_format_specs<Char>& specs, locale_ref)\n    -> OutputIt {\n  check_string_type_spec(specs.type);\n  return write(out, s, specs);\n}\ntemplate <typename Char, typename OutputIt>\nFMT_CONSTEXPR auto write(OutputIt out, const Char* s,\n                         const basic_format_specs<Char>& specs, locale_ref)\n    -> OutputIt {\n  return check_cstring_type_spec(specs.type)\n             ? write(out, basic_string_view<Char>(s), specs, {})\n             : write_ptr<Char>(out, bit_cast<uintptr_t>(s), &specs);\n}\n\ntemplate <typename Char, typename OutputIt, typename T,\n          FMT_ENABLE_IF(is_integral<T>::value &&\n                        !std::is_same<T, bool>::value &&\n                        !std::is_same<T, Char>::value)>\nFMT_CONSTEXPR auto write(OutputIt out, T value) -> OutputIt {\n  auto abs_value = static_cast<uint32_or_64_or_128_t<T>>(value);\n  bool negative = is_negative(value);\n  // Don't do -abs_value since it trips unsigned-integer-overflow sanitizer.\n  if (negative) abs_value = ~abs_value + 1;\n  int num_digits = count_digits(abs_value);\n  auto size = (negative ? 1 : 0) + static_cast<size_t>(num_digits);\n  auto it = reserve(out, size);\n  if (auto ptr = to_pointer<Char>(it, size)) {\n    if (negative) *ptr++ = static_cast<Char>('-');\n    format_decimal<Char>(ptr, abs_value, num_digits);\n    return out;\n  }\n  if (negative) *it++ = static_cast<Char>('-');\n  it = format_decimal<Char>(it, abs_value, num_digits).end;\n  return base_iterator(out, it);\n}\n\ntemplate <typename Char, typename OutputIt>\nFMT_CONSTEXPR20 auto write_nonfinite(OutputIt out, bool isnan,\n                                     basic_format_specs<Char> specs,\n                                     const float_specs& fspecs) -> OutputIt {\n  auto str =\n      isnan ? (fspecs.upper ? \"NAN\" : \"nan\") : (fspecs.upper ? \"INF\" : \"inf\");\n  constexpr size_t str_size = 3;\n  auto sign = fspecs.sign;\n  auto size = str_size + (sign ? 1 : 0);\n  // Replace '0'-padding with space for non-finite values.\n  const bool is_zero_fill =\n      specs.fill.size() == 1 && *specs.fill.data() == static_cast<Char>('0');\n  if (is_zero_fill) specs.fill[0] = static_cast<Char>(' ');\n  return write_padded(out, specs, size, [=](reserve_iterator<OutputIt> it) {\n    if (sign) *it++ = detail::sign<Char>(sign);\n    return copy_str<Char>(str, str + str_size, it);\n  });\n}\n\n// A decimal floating-point number significand * pow(10, exp).\nstruct big_decimal_fp {\n  const char* significand;\n  int significand_size;\n  int exponent;\n};\n\nconstexpr auto get_significand_size(const big_decimal_fp& f) -> int {\n  return f.significand_size;\n}\ntemplate <typename T>\ninline auto get_significand_size(const dragonbox::decimal_fp<T>& f) -> int {\n  return count_digits(f.significand);\n}\n\ntemplate <typename Char, typename OutputIt>\nconstexpr auto write_significand(OutputIt out, const char* significand,\n                                 int significand_size) -> OutputIt {\n  return copy_str<Char>(significand, significand + significand_size, out);\n}\ntemplate <typename Char, typename OutputIt, typename UInt>\ninline auto write_significand(OutputIt out, UInt significand,\n                              int significand_size) -> OutputIt {\n  return format_decimal<Char>(out, significand, significand_size).end;\n}\ntemplate <typename Char, typename OutputIt, typename T, typename Grouping>\nFMT_CONSTEXPR20 auto write_significand(OutputIt out, T significand,\n                                       int significand_size, int exponent,\n                                       const Grouping& grouping) -> OutputIt {\n  if (!grouping.separator()) {\n    out = write_significand<Char>(out, significand, significand_size);\n    return detail::fill_n(out, exponent, static_cast<Char>('0'));\n  }\n  auto buffer = memory_buffer();\n  write_significand<char>(appender(buffer), significand, significand_size);\n  detail::fill_n(appender(buffer), exponent, '0');\n  return grouping.apply(out, string_view(buffer.data(), buffer.size()));\n}\n\ntemplate <typename Char, typename UInt,\n          FMT_ENABLE_IF(std::is_integral<UInt>::value)>\ninline auto write_significand(Char* out, UInt significand, int significand_size,\n                              int integral_size, Char decimal_point) -> Char* {\n  if (!decimal_point)\n    return format_decimal(out, significand, significand_size).end;\n  out += significand_size + 1;\n  Char* end = out;\n  int floating_size = significand_size - integral_size;\n  for (int i = floating_size / 2; i > 0; --i) {\n    out -= 2;\n    copy2(out, digits2(static_cast<std::size_t>(significand % 100)));\n    significand /= 100;\n  }\n  if (floating_size % 2 != 0) {\n    *--out = static_cast<Char>('0' + significand % 10);\n    significand /= 10;\n  }\n  *--out = decimal_point;\n  format_decimal(out - integral_size, significand, integral_size);\n  return end;\n}\n\ntemplate <typename OutputIt, typename UInt, typename Char,\n          FMT_ENABLE_IF(!std::is_pointer<remove_cvref_t<OutputIt>>::value)>\ninline auto write_significand(OutputIt out, UInt significand,\n                              int significand_size, int integral_size,\n                              Char decimal_point) -> OutputIt {\n  // Buffer is large enough to hold digits (digits10 + 1) and a decimal point.\n  Char buffer[digits10<UInt>() + 2];\n  auto end = write_significand(buffer, significand, significand_size,\n                               integral_size, decimal_point);\n  return detail::copy_str_noinline<Char>(buffer, end, out);\n}\n\ntemplate <typename OutputIt, typename Char>\nFMT_CONSTEXPR auto write_significand(OutputIt out, const char* significand,\n                                     int significand_size, int integral_size,\n                                     Char decimal_point) -> OutputIt {\n  out = detail::copy_str_noinline<Char>(significand,\n                                        significand + integral_size, out);\n  if (!decimal_point) return out;\n  *out++ = decimal_point;\n  return detail::copy_str_noinline<Char>(significand + integral_size,\n                                         significand + significand_size, out);\n}\n\ntemplate <typename OutputIt, typename Char, typename T, typename Grouping>\nFMT_CONSTEXPR20 auto write_significand(OutputIt out, T significand,\n                                       int significand_size, int integral_size,\n                                       Char decimal_point,\n                                       const Grouping& grouping) -> OutputIt {\n  if (!grouping.separator()) {\n    return write_significand(out, significand, significand_size, integral_size,\n                             decimal_point);\n  }\n  auto buffer = basic_memory_buffer<Char>();\n  write_significand(buffer_appender<Char>(buffer), significand,\n                    significand_size, integral_size, decimal_point);\n  grouping.apply(\n      out, basic_string_view<Char>(buffer.data(), to_unsigned(integral_size)));\n  return detail::copy_str_noinline<Char>(buffer.data() + integral_size,\n                                         buffer.end(), out);\n}\n\ntemplate <typename OutputIt, typename DecimalFP, typename Char,\n          typename Grouping = digit_grouping<Char>>\nFMT_CONSTEXPR20 auto do_write_float(OutputIt out, const DecimalFP& f,\n                                    const basic_format_specs<Char>& specs,\n                                    float_specs fspecs, locale_ref loc)\n    -> OutputIt {\n  auto significand = f.significand;\n  int significand_size = get_significand_size(f);\n  const Char zero = static_cast<Char>('0');\n  auto sign = fspecs.sign;\n  size_t size = to_unsigned(significand_size) + (sign ? 1 : 0);\n  using iterator = reserve_iterator<OutputIt>;\n\n  Char decimal_point =\n      fspecs.locale ? detail::decimal_point<Char>(loc) : static_cast<Char>('.');\n\n  int output_exp = f.exponent + significand_size - 1;\n  auto use_exp_format = [=]() {\n    if (fspecs.format == float_format::exp) return true;\n    if (fspecs.format != float_format::general) return false;\n    // Use the fixed notation if the exponent is in [exp_lower, exp_upper),\n    // e.g. 0.0001 instead of 1e-04. Otherwise use the exponent notation.\n    const int exp_lower = -4, exp_upper = 16;\n    return output_exp < exp_lower ||\n           output_exp >= (fspecs.precision > 0 ? fspecs.precision : exp_upper);\n  };\n  if (use_exp_format()) {\n    int num_zeros = 0;\n    if (fspecs.showpoint) {\n      num_zeros = fspecs.precision - significand_size;\n      if (num_zeros < 0) num_zeros = 0;\n      size += to_unsigned(num_zeros);\n    } else if (significand_size == 1) {\n      decimal_point = Char();\n    }\n    auto abs_output_exp = output_exp >= 0 ? output_exp : -output_exp;\n    int exp_digits = 2;\n    if (abs_output_exp >= 100) exp_digits = abs_output_exp >= 1000 ? 4 : 3;\n\n    size += to_unsigned((decimal_point ? 1 : 0) + 2 + exp_digits);\n    char exp_char = fspecs.upper ? 'E' : 'e';\n    auto write = [=](iterator it) {\n      if (sign) *it++ = detail::sign<Char>(sign);\n      // Insert a decimal point after the first digit and add an exponent.\n      it = write_significand(it, significand, significand_size, 1,\n                             decimal_point);\n      if (num_zeros > 0) it = detail::fill_n(it, num_zeros, zero);\n      *it++ = static_cast<Char>(exp_char);\n      return write_exponent<Char>(output_exp, it);\n    };\n    return specs.width > 0 ? write_padded<align::right>(out, specs, size, write)\n                           : base_iterator(out, write(reserve(out, size)));\n  }\n\n  int exp = f.exponent + significand_size;\n  if (f.exponent >= 0) {\n    // 1234e5 -> 123400000[.0+]\n    size += to_unsigned(f.exponent);\n    int num_zeros = fspecs.precision - exp;\n    abort_fuzzing_if(num_zeros > 5000);\n    if (fspecs.showpoint) {\n      ++size;\n      if (num_zeros <= 0 && fspecs.format != float_format::fixed) num_zeros = 1;\n      if (num_zeros > 0) size += to_unsigned(num_zeros);\n    }\n    auto grouping = Grouping(loc, fspecs.locale);\n    size += to_unsigned(grouping.count_separators(exp));\n    return write_padded<align::right>(out, specs, size, [&](iterator it) {\n      if (sign) *it++ = detail::sign<Char>(sign);\n      it = write_significand<Char>(it, significand, significand_size,\n                                   f.exponent, grouping);\n      if (!fspecs.showpoint) return it;\n      *it++ = decimal_point;\n      return num_zeros > 0 ? detail::fill_n(it, num_zeros, zero) : it;\n    });\n  } else if (exp > 0) {\n    // 1234e-2 -> 12.34[0+]\n    int num_zeros = fspecs.showpoint ? fspecs.precision - significand_size : 0;\n    size += 1 + to_unsigned(num_zeros > 0 ? num_zeros : 0);\n    auto grouping = Grouping(loc, fspecs.locale);\n    size += to_unsigned(grouping.count_separators(significand_size));\n    return write_padded<align::right>(out, specs, size, [&](iterator it) {\n      if (sign) *it++ = detail::sign<Char>(sign);\n      it = write_significand(it, significand, significand_size, exp,\n                             decimal_point, grouping);\n      return num_zeros > 0 ? detail::fill_n(it, num_zeros, zero) : it;\n    });\n  }\n  // 1234e-6 -> 0.001234\n  int num_zeros = -exp;\n  if (significand_size == 0 && fspecs.precision >= 0 &&\n      fspecs.precision < num_zeros) {\n    num_zeros = fspecs.precision;\n  }\n  bool pointy = num_zeros != 0 || significand_size != 0 || fspecs.showpoint;\n  size += 1 + (pointy ? 1 : 0) + to_unsigned(num_zeros);\n  return write_padded<align::right>(out, specs, size, [&](iterator it) {\n    if (sign) *it++ = detail::sign<Char>(sign);\n    *it++ = zero;\n    if (!pointy) return it;\n    *it++ = decimal_point;\n    it = detail::fill_n(it, num_zeros, zero);\n    return write_significand<Char>(it, significand, significand_size);\n  });\n}\n\ntemplate <typename Char> class fallback_digit_grouping {\n public:\n  constexpr fallback_digit_grouping(locale_ref, bool) {}\n\n  constexpr Char separator() const { return Char(); }\n\n  constexpr int count_separators(int) const { return 0; }\n\n  template <typename Out, typename C>\n  constexpr Out apply(Out out, basic_string_view<C>) const {\n    return out;\n  }\n};\n\ntemplate <typename OutputIt, typename DecimalFP, typename Char>\nFMT_CONSTEXPR20 auto write_float(OutputIt out, const DecimalFP& f,\n                                 const basic_format_specs<Char>& specs,\n                                 float_specs fspecs, locale_ref loc)\n    -> OutputIt {\n  if (is_constant_evaluated()) {\n    return do_write_float<OutputIt, DecimalFP, Char,\n                          fallback_digit_grouping<Char>>(out, f, specs, fspecs,\n                                                         loc);\n  } else {\n    return do_write_float(out, f, specs, fspecs, loc);\n  }\n}\n\ntemplate <typename T> constexpr bool isnan(T value) {\n  return !(value >= value);  // std::isnan doesn't support __float128.\n}\n\ntemplate <typename T, typename Enable = void>\nstruct has_isfinite : std::false_type {};\n\ntemplate <typename T>\nstruct has_isfinite<T, enable_if_t<sizeof(std::isfinite(T())) != 0>>\n    : std::true_type {};\n\ntemplate <typename T, FMT_ENABLE_IF(std::is_floating_point<T>::value&&\n                                        has_isfinite<T>::value)>\nFMT_CONSTEXPR20 bool isfinite(T value) {\n  constexpr T inf = T(std::numeric_limits<double>::infinity());\n  if (is_constant_evaluated())\n    return !detail::isnan(value) && value != inf && value != -inf;\n  return std::isfinite(value);\n}\ntemplate <typename T, FMT_ENABLE_IF(!has_isfinite<T>::value)>\nFMT_CONSTEXPR bool isfinite(T value) {\n  T inf = T(std::numeric_limits<double>::infinity());\n  // std::isfinite doesn't support __float128.\n  return !detail::isnan(value) && value != inf && value != -inf;\n}\n\ntemplate <typename T, FMT_ENABLE_IF(is_floating_point<T>::value)>\nFMT_INLINE FMT_CONSTEXPR bool signbit(T value) {\n  if (is_constant_evaluated()) {\n#ifdef __cpp_if_constexpr\n    if constexpr (std::numeric_limits<double>::is_iec559) {\n      auto bits = detail::bit_cast<uint64_t>(static_cast<double>(value));\n      return (bits >> (num_bits<uint64_t>() - 1)) != 0;\n    }\n#endif\n  }\n  return std::signbit(static_cast<double>(value));\n}\n\nenum class round_direction { unknown, up, down };\n\n// Given the divisor (normally a power of 10), the remainder = v % divisor for\n// some number v and the error, returns whether v should be rounded up, down, or\n// whether the rounding direction can't be determined due to error.\n// error should be less than divisor / 2.\nFMT_CONSTEXPR inline round_direction get_round_direction(uint64_t divisor,\n                                                         uint64_t remainder,\n                                                         uint64_t error) {\n  FMT_ASSERT(remainder < divisor, \"\");  // divisor - remainder won't overflow.\n  FMT_ASSERT(error < divisor, \"\");      // divisor - error won't overflow.\n  FMT_ASSERT(error < divisor - error, \"\");  // error * 2 won't overflow.\n  // Round down if (remainder + error) * 2 <= divisor.\n  if (remainder <= divisor - remainder && error * 2 <= divisor - remainder * 2)\n    return round_direction::down;\n  // Round up if (remainder - error) * 2 >= divisor.\n  if (remainder >= error &&\n      remainder - error >= divisor - (remainder - error)) {\n    return round_direction::up;\n  }\n  return round_direction::unknown;\n}\n\nnamespace digits {\nenum result {\n  more,  // Generate more digits.\n  done,  // Done generating digits.\n  error  // Digit generation cancelled due to an error.\n};\n}\n\nstruct gen_digits_handler {\n  char* buf;\n  int size;\n  int precision;\n  int exp10;\n  bool fixed;\n\n  FMT_CONSTEXPR digits::result on_digit(char digit, uint64_t divisor,\n                                        uint64_t remainder, uint64_t error,\n                                        bool integral) {\n    FMT_ASSERT(remainder < divisor, \"\");\n    buf[size++] = digit;\n    if (!integral && error >= remainder) return digits::error;\n    if (size < precision) return digits::more;\n    if (!integral) {\n      // Check if error * 2 < divisor with overflow prevention.\n      // The check is not needed for the integral part because error = 1\n      // and divisor > (1 << 32) there.\n      if (error >= divisor || error >= divisor - error) return digits::error;\n    } else {\n      FMT_ASSERT(error == 1 && divisor > 2, \"\");\n    }\n    auto dir = get_round_direction(divisor, remainder, error);\n    if (dir != round_direction::up)\n      return dir == round_direction::down ? digits::done : digits::error;\n    ++buf[size - 1];\n    for (int i = size - 1; i > 0 && buf[i] > '9'; --i) {\n      buf[i] = '0';\n      ++buf[i - 1];\n    }\n    if (buf[0] > '9') {\n      buf[0] = '1';\n      if (fixed)\n        buf[size++] = '0';\n      else\n        ++exp10;\n    }\n    return digits::done;\n  }\n};\n\ninline FMT_CONSTEXPR20 void adjust_precision(int& precision, int exp10) {\n  // Adjust fixed precision by exponent because it is relative to decimal\n  // point.\n  if (exp10 > 0 && precision > max_value<int>() - exp10)\n    FMT_THROW(format_error(\"number is too big\"));\n  precision += exp10;\n}\n\n// Generates output using the Grisu digit-gen algorithm.\n// error: the size of the region (lower, upper) outside of which numbers\n// definitely do not round to value (Delta in Grisu3).\nFMT_INLINE FMT_CONSTEXPR20 auto grisu_gen_digits(fp value, uint64_t error,\n                                                 int& exp,\n                                                 gen_digits_handler& handler)\n    -> digits::result {\n  const fp one(1ULL << -value.e, value.e);\n  // The integral part of scaled value (p1 in Grisu) = value / one. It cannot be\n  // zero because it contains a product of two 64-bit numbers with MSB set (due\n  // to normalization) - 1, shifted right by at most 60 bits.\n  auto integral = static_cast<uint32_t>(value.f >> -one.e);\n  FMT_ASSERT(integral != 0, \"\");\n  FMT_ASSERT(integral == value.f >> -one.e, \"\");\n  // The fractional part of scaled value (p2 in Grisu) c = value % one.\n  uint64_t fractional = value.f & (one.f - 1);\n  exp = count_digits(integral);  // kappa in Grisu.\n  // Non-fixed formats require at least one digit and no precision adjustment.\n  if (handler.fixed) {\n    adjust_precision(handler.precision, exp + handler.exp10);\n    // Check if precision is satisfied just by leading zeros, e.g.\n    // format(\"{:.2f}\", 0.001) gives \"0.00\" without generating any digits.\n    if (handler.precision <= 0) {\n      if (handler.precision < 0) return digits::done;\n      // Divide by 10 to prevent overflow.\n      uint64_t divisor = data::power_of_10_64[exp - 1] << -one.e;\n      auto dir = get_round_direction(divisor, value.f / 10, error * 10);\n      if (dir == round_direction::unknown) return digits::error;\n      handler.buf[handler.size++] = dir == round_direction::up ? '1' : '0';\n      return digits::done;\n    }\n  }\n  // Generate digits for the integral part. This can produce up to 10 digits.\n  do {\n    uint32_t digit = 0;\n    auto divmod_integral = [&](uint32_t divisor) {\n      digit = integral / divisor;\n      integral %= divisor;\n    };\n    // This optimization by Milo Yip reduces the number of integer divisions by\n    // one per iteration.\n    switch (exp) {\n    case 10:\n      divmod_integral(1000000000);\n      break;\n    case 9:\n      divmod_integral(100000000);\n      break;\n    case 8:\n      divmod_integral(10000000);\n      break;\n    case 7:\n      divmod_integral(1000000);\n      break;\n    case 6:\n      divmod_integral(100000);\n      break;\n    case 5:\n      divmod_integral(10000);\n      break;\n    case 4:\n      divmod_integral(1000);\n      break;\n    case 3:\n      divmod_integral(100);\n      break;\n    case 2:\n      divmod_integral(10);\n      break;\n    case 1:\n      digit = integral;\n      integral = 0;\n      break;\n    default:\n      FMT_ASSERT(false, \"invalid number of digits\");\n    }\n    --exp;\n    auto remainder = (static_cast<uint64_t>(integral) << -one.e) + fractional;\n    auto result = handler.on_digit(static_cast<char>('0' + digit),\n                                   data::power_of_10_64[exp] << -one.e,\n                                   remainder, error, true);\n    if (result != digits::more) return result;\n  } while (exp > 0);\n  // Generate digits for the fractional part.\n  for (;;) {\n    fractional *= 10;\n    error *= 10;\n    char digit = static_cast<char>('0' + (fractional >> -one.e));\n    fractional &= one.f - 1;\n    --exp;\n    auto result = handler.on_digit(digit, one.f, fractional, error, false);\n    if (result != digits::more) return result;\n  }\n}\n\nclass bigint {\n private:\n  // A bigint is stored as an array of bigits (big digits), with bigit at index\n  // 0 being the least significant one.\n  using bigit = uint32_t;\n  using double_bigit = uint64_t;\n  enum { bigits_capacity = 32 };\n  basic_memory_buffer<bigit, bigits_capacity> bigits_;\n  int exp_;\n\n  FMT_CONSTEXPR20 bigit operator[](int index) const {\n    return bigits_[to_unsigned(index)];\n  }\n  FMT_CONSTEXPR20 bigit& operator[](int index) {\n    return bigits_[to_unsigned(index)];\n  }\n\n  static constexpr const int bigit_bits = num_bits<bigit>();\n\n  friend struct formatter<bigint>;\n\n  FMT_CONSTEXPR20 void subtract_bigits(int index, bigit other, bigit& borrow) {\n    auto result = static_cast<double_bigit>((*this)[index]) - other - borrow;\n    (*this)[index] = static_cast<bigit>(result);\n    borrow = static_cast<bigit>(result >> (bigit_bits * 2 - 1));\n  }\n\n  FMT_CONSTEXPR20 void remove_leading_zeros() {\n    int num_bigits = static_cast<int>(bigits_.size()) - 1;\n    while (num_bigits > 0 && (*this)[num_bigits] == 0) --num_bigits;\n    bigits_.resize(to_unsigned(num_bigits + 1));\n  }\n\n  // Computes *this -= other assuming aligned bigints and *this >= other.\n  FMT_CONSTEXPR20 void subtract_aligned(const bigint& other) {\n    FMT_ASSERT(other.exp_ >= exp_, \"unaligned bigints\");\n    FMT_ASSERT(compare(*this, other) >= 0, \"\");\n    bigit borrow = 0;\n    int i = other.exp_ - exp_;\n    for (size_t j = 0, n = other.bigits_.size(); j != n; ++i, ++j)\n      subtract_bigits(i, other.bigits_[j], borrow);\n    while (borrow > 0) subtract_bigits(i, 0, borrow);\n    remove_leading_zeros();\n  }\n\n  FMT_CONSTEXPR20 void multiply(uint32_t value) {\n    const double_bigit wide_value = value;\n    bigit carry = 0;\n    for (size_t i = 0, n = bigits_.size(); i < n; ++i) {\n      double_bigit result = bigits_[i] * wide_value + carry;\n      bigits_[i] = static_cast<bigit>(result);\n      carry = static_cast<bigit>(result >> bigit_bits);\n    }\n    if (carry != 0) bigits_.push_back(carry);\n  }\n\n  template <typename UInt, FMT_ENABLE_IF(std::is_same<UInt, uint64_t>::value ||\n                                         std::is_same<UInt, uint128_t>::value)>\n  FMT_CONSTEXPR20 void multiply(UInt value) {\n    using half_uint =\n        conditional_t<std::is_same<UInt, uint128_t>::value, uint64_t, uint32_t>;\n    const int shift = num_bits<half_uint>() - bigit_bits;\n    const UInt lower = static_cast<half_uint>(value);\n    const UInt upper = value >> num_bits<half_uint>();\n    UInt carry = 0;\n    for (size_t i = 0, n = bigits_.size(); i < n; ++i) {\n      UInt result = lower * bigits_[i] + static_cast<bigit>(carry);\n      carry = (upper * bigits_[i] << shift) + (result >> bigit_bits) +\n              (carry >> bigit_bits);\n      bigits_[i] = static_cast<bigit>(result);\n    }\n    while (carry != 0) {\n      bigits_.push_back(static_cast<bigit>(carry));\n      carry >>= bigit_bits;\n    }\n  }\n\n  template <typename UInt, FMT_ENABLE_IF(std::is_same<UInt, uint64_t>::value ||\n                                         std::is_same<UInt, uint128_t>::value)>\n  FMT_CONSTEXPR20 void assign(UInt n) {\n    size_t num_bigits = 0;\n    do {\n      bigits_[num_bigits++] = static_cast<bigit>(n);\n      n >>= bigit_bits;\n    } while (n != 0);\n    bigits_.resize(num_bigits);\n    exp_ = 0;\n  }\n\n public:\n  FMT_CONSTEXPR20 bigint() : exp_(0) {}\n  explicit bigint(uint64_t n) { assign(n); }\n\n  bigint(const bigint&) = delete;\n  void operator=(const bigint&) = delete;\n\n  FMT_CONSTEXPR20 void assign(const bigint& other) {\n    auto size = other.bigits_.size();\n    bigits_.resize(size);\n    auto data = other.bigits_.data();\n    std::copy(data, data + size, make_checked(bigits_.data(), size));\n    exp_ = other.exp_;\n  }\n\n  template <typename Int> FMT_CONSTEXPR20 void operator=(Int n) {\n    FMT_ASSERT(n > 0, \"\");\n    assign(uint64_or_128_t<Int>(n));\n  }\n\n  FMT_CONSTEXPR20 int num_bigits() const {\n    return static_cast<int>(bigits_.size()) + exp_;\n  }\n\n  FMT_NOINLINE FMT_CONSTEXPR20 bigint& operator<<=(int shift) {\n    FMT_ASSERT(shift >= 0, \"\");\n    exp_ += shift / bigit_bits;\n    shift %= bigit_bits;\n    if (shift == 0) return *this;\n    bigit carry = 0;\n    for (size_t i = 0, n = bigits_.size(); i < n; ++i) {\n      bigit c = bigits_[i] >> (bigit_bits - shift);\n      bigits_[i] = (bigits_[i] << shift) + carry;\n      carry = c;\n    }\n    if (carry != 0) bigits_.push_back(carry);\n    return *this;\n  }\n\n  template <typename Int> FMT_CONSTEXPR20 bigint& operator*=(Int value) {\n    FMT_ASSERT(value > 0, \"\");\n    multiply(uint32_or_64_or_128_t<Int>(value));\n    return *this;\n  }\n\n  friend FMT_CONSTEXPR20 int compare(const bigint& lhs, const bigint& rhs) {\n    int num_lhs_bigits = lhs.num_bigits(), num_rhs_bigits = rhs.num_bigits();\n    if (num_lhs_bigits != num_rhs_bigits)\n      return num_lhs_bigits > num_rhs_bigits ? 1 : -1;\n    int i = static_cast<int>(lhs.bigits_.size()) - 1;\n    int j = static_cast<int>(rhs.bigits_.size()) - 1;\n    int end = i - j;\n    if (end < 0) end = 0;\n    for (; i >= end; --i, --j) {\n      bigit lhs_bigit = lhs[i], rhs_bigit = rhs[j];\n      if (lhs_bigit != rhs_bigit) return lhs_bigit > rhs_bigit ? 1 : -1;\n    }\n    if (i != j) return i > j ? 1 : -1;\n    return 0;\n  }\n\n  // Returns compare(lhs1 + lhs2, rhs).\n  friend FMT_CONSTEXPR20 int add_compare(const bigint& lhs1, const bigint& lhs2,\n                                         const bigint& rhs) {\n    auto minimum = [](int a, int b) { return a < b ? a : b; };\n    auto maximum = [](int a, int b) { return a > b ? a : b; };\n    int max_lhs_bigits = maximum(lhs1.num_bigits(), lhs2.num_bigits());\n    int num_rhs_bigits = rhs.num_bigits();\n    if (max_lhs_bigits + 1 < num_rhs_bigits) return -1;\n    if (max_lhs_bigits > num_rhs_bigits) return 1;\n    auto get_bigit = [](const bigint& n, int i) -> bigit {\n      return i >= n.exp_ && i < n.num_bigits() ? n[i - n.exp_] : 0;\n    };\n    double_bigit borrow = 0;\n    int min_exp = minimum(minimum(lhs1.exp_, lhs2.exp_), rhs.exp_);\n    for (int i = num_rhs_bigits - 1; i >= min_exp; --i) {\n      double_bigit sum =\n          static_cast<double_bigit>(get_bigit(lhs1, i)) + get_bigit(lhs2, i);\n      bigit rhs_bigit = get_bigit(rhs, i);\n      if (sum > rhs_bigit + borrow) return 1;\n      borrow = rhs_bigit + borrow - sum;\n      if (borrow > 1) return -1;\n      borrow <<= bigit_bits;\n    }\n    return borrow != 0 ? -1 : 0;\n  }\n\n  // Assigns pow(10, exp) to this bigint.\n  FMT_CONSTEXPR20 void assign_pow10(int exp) {\n    FMT_ASSERT(exp >= 0, \"\");\n    if (exp == 0) return *this = 1;\n    // Find the top bit.\n    int bitmask = 1;\n    while (exp >= bitmask) bitmask <<= 1;\n    bitmask >>= 1;\n    // pow(10, exp) = pow(5, exp) * pow(2, exp). First compute pow(5, exp) by\n    // repeated squaring and multiplication.\n    *this = 5;\n    bitmask >>= 1;\n    while (bitmask != 0) {\n      square();\n      if ((exp & bitmask) != 0) *this *= 5;\n      bitmask >>= 1;\n    }\n    *this <<= exp;  // Multiply by pow(2, exp) by shifting.\n  }\n\n  FMT_CONSTEXPR20 void square() {\n    int num_bigits = static_cast<int>(bigits_.size());\n    int num_result_bigits = 2 * num_bigits;\n    basic_memory_buffer<bigit, bigits_capacity> n(std::move(bigits_));\n    bigits_.resize(to_unsigned(num_result_bigits));\n    auto sum = uint128_t();\n    for (int bigit_index = 0; bigit_index < num_bigits; ++bigit_index) {\n      // Compute bigit at position bigit_index of the result by adding\n      // cross-product terms n[i] * n[j] such that i + j == bigit_index.\n      for (int i = 0, j = bigit_index; j >= 0; ++i, --j) {\n        // Most terms are multiplied twice which can be optimized in the future.\n        sum += static_cast<double_bigit>(n[i]) * n[j];\n      }\n      (*this)[bigit_index] = static_cast<bigit>(sum);\n      sum >>= num_bits<bigit>();  // Compute the carry.\n    }\n    // Do the same for the top half.\n    for (int bigit_index = num_bigits; bigit_index < num_result_bigits;\n         ++bigit_index) {\n      for (int j = num_bigits - 1, i = bigit_index - j; i < num_bigits;)\n        sum += static_cast<double_bigit>(n[i++]) * n[j--];\n      (*this)[bigit_index] = static_cast<bigit>(sum);\n      sum >>= num_bits<bigit>();\n    }\n    remove_leading_zeros();\n    exp_ *= 2;\n  }\n\n  // If this bigint has a bigger exponent than other, adds trailing zero to make\n  // exponents equal. This simplifies some operations such as subtraction.\n  FMT_CONSTEXPR20 void align(const bigint& other) {\n    int exp_difference = exp_ - other.exp_;\n    if (exp_difference <= 0) return;\n    int num_bigits = static_cast<int>(bigits_.size());\n    bigits_.resize(to_unsigned(num_bigits + exp_difference));\n    for (int i = num_bigits - 1, j = i + exp_difference; i >= 0; --i, --j)\n      bigits_[j] = bigits_[i];\n    std::uninitialized_fill_n(bigits_.data(), exp_difference, 0);\n    exp_ -= exp_difference;\n  }\n\n  // Divides this bignum by divisor, assigning the remainder to this and\n  // returning the quotient.\n  FMT_CONSTEXPR20 int divmod_assign(const bigint& divisor) {\n    FMT_ASSERT(this != &divisor, \"\");\n    if (compare(*this, divisor) < 0) return 0;\n    FMT_ASSERT(divisor.bigits_[divisor.bigits_.size() - 1u] != 0, \"\");\n    align(divisor);\n    int quotient = 0;\n    do {\n      subtract_aligned(divisor);\n      ++quotient;\n    } while (compare(*this, divisor) >= 0);\n    return quotient;\n  }\n};\n\n// format_dragon flags.\nenum dragon {\n  predecessor_closer = 1,\n  fixup = 2,  // Run fixup to correct exp10 which can be off by one.\n  fixed = 4,\n};\n\n// Formats a floating-point number using a variation of the Fixed-Precision\n// Positive Floating-Point Printout ((FPP)^2) algorithm by Steele & White:\n// https://fmt.dev/papers/p372-steele.pdf.\nFMT_CONSTEXPR20 inline void format_dragon(basic_fp<uint128_t> value,\n                                          unsigned flags, int num_digits,\n                                          buffer<char>& buf, int& exp10) {\n  bigint numerator;    // 2 * R in (FPP)^2.\n  bigint denominator;  // 2 * S in (FPP)^2.\n  // lower and upper are differences between value and corresponding boundaries.\n  bigint lower;             // (M^- in (FPP)^2).\n  bigint upper_store;       // upper's value if different from lower.\n  bigint* upper = nullptr;  // (M^+ in (FPP)^2).\n  // Shift numerator and denominator by an extra bit or two (if lower boundary\n  // is closer) to make lower and upper integers. This eliminates multiplication\n  // by 2 during later computations.\n  bool is_predecessor_closer = (flags & dragon::predecessor_closer) != 0;\n  int shift = is_predecessor_closer ? 2 : 1;\n  if (value.e >= 0) {\n    numerator = value.f;\n    numerator <<= value.e + shift;\n    lower = 1;\n    lower <<= value.e;\n    if (is_predecessor_closer) {\n      upper_store = 1;\n      upper_store <<= value.e + 1;\n      upper = &upper_store;\n    }\n    denominator.assign_pow10(exp10);\n    denominator <<= shift;\n  } else if (exp10 < 0) {\n    numerator.assign_pow10(-exp10);\n    lower.assign(numerator);\n    if (is_predecessor_closer) {\n      upper_store.assign(numerator);\n      upper_store <<= 1;\n      upper = &upper_store;\n    }\n    numerator *= value.f;\n    numerator <<= shift;\n    denominator = 1;\n    denominator <<= shift - value.e;\n  } else {\n    numerator = value.f;\n    numerator <<= shift;\n    denominator.assign_pow10(exp10);\n    denominator <<= shift - value.e;\n    lower = 1;\n    if (is_predecessor_closer) {\n      upper_store = 1ULL << 1;\n      upper = &upper_store;\n    }\n  }\n  int even = static_cast<int>((value.f & 1) == 0);\n  if (!upper) upper = &lower;\n  if ((flags & dragon::fixup) != 0) {\n    if (add_compare(numerator, *upper, denominator) + even <= 0) {\n      --exp10;\n      numerator *= 10;\n      if (num_digits < 0) {\n        lower *= 10;\n        if (upper != &lower) *upper *= 10;\n      }\n    }\n    if ((flags & dragon::fixed) != 0) adjust_precision(num_digits, exp10 + 1);\n  }\n  // Invariant: value == (numerator / denominator) * pow(10, exp10).\n  if (num_digits < 0) {\n    // Generate the shortest representation.\n    num_digits = 0;\n    char* data = buf.data();\n    for (;;) {\n      int digit = numerator.divmod_assign(denominator);\n      bool low = compare(numerator, lower) - even < 0;  // numerator <[=] lower.\n      // numerator + upper >[=] pow10:\n      bool high = add_compare(numerator, *upper, denominator) + even > 0;\n      data[num_digits++] = static_cast<char>('0' + digit);\n      if (low || high) {\n        if (!low) {\n          ++data[num_digits - 1];\n        } else if (high) {\n          int result = add_compare(numerator, numerator, denominator);\n          // Round half to even.\n          if (result > 0 || (result == 0 && (digit % 2) != 0))\n            ++data[num_digits - 1];\n        }\n        buf.try_resize(to_unsigned(num_digits));\n        exp10 -= num_digits - 1;\n        return;\n      }\n      numerator *= 10;\n      lower *= 10;\n      if (upper != &lower) *upper *= 10;\n    }\n  }\n  // Generate the given number of digits.\n  exp10 -= num_digits - 1;\n  if (num_digits == 0) {\n    denominator *= 10;\n    auto digit = add_compare(numerator, numerator, denominator) > 0 ? '1' : '0';\n    buf.push_back(digit);\n    return;\n  }\n  buf.try_resize(to_unsigned(num_digits));\n  for (int i = 0; i < num_digits - 1; ++i) {\n    int digit = numerator.divmod_assign(denominator);\n    buf[i] = static_cast<char>('0' + digit);\n    numerator *= 10;\n  }\n  int digit = numerator.divmod_assign(denominator);\n  auto result = add_compare(numerator, numerator, denominator);\n  if (result > 0 || (result == 0 && (digit % 2) != 0)) {\n    if (digit == 9) {\n      const auto overflow = '0' + 10;\n      buf[num_digits - 1] = overflow;\n      // Propagate the carry.\n      for (int i = num_digits - 1; i > 0 && buf[i] == overflow; --i) {\n        buf[i] = '0';\n        ++buf[i - 1];\n      }\n      if (buf[0] == overflow) {\n        buf[0] = '1';\n        ++exp10;\n      }\n      return;\n    }\n    ++digit;\n  }\n  buf[num_digits - 1] = static_cast<char>('0' + digit);\n}\n\ntemplate <typename Float>\nFMT_CONSTEXPR20 auto format_float(Float value, int precision, float_specs specs,\n                                  buffer<char>& buf) -> int {\n  // float is passed as double to reduce the number of instantiations.\n  static_assert(!std::is_same<Float, float>::value, \"\");\n  FMT_ASSERT(value >= 0, \"value is negative\");\n  auto converted_value = convert_float(value);\n\n  const bool fixed = specs.format == float_format::fixed;\n  if (value <= 0) {  // <= instead of == to silence a warning.\n    if (precision <= 0 || !fixed) {\n      buf.push_back('0');\n      return 0;\n    }\n    buf.try_resize(to_unsigned(precision));\n    fill_n(buf.data(), precision, '0');\n    return -precision;\n  }\n\n  int exp = 0;\n  bool use_dragon = true;\n  unsigned dragon_flags = 0;\n  if (!is_fast_float<Float>()) {\n    const auto inv_log2_10 = 0.3010299956639812;  // 1 / log2(10)\n    using info = dragonbox::float_info<decltype(converted_value)>;\n    const auto f = basic_fp<typename info::carrier_uint>(converted_value);\n    // Compute exp, an approximate power of 10, such that\n    //   10^(exp - 1) <= value < 10^exp or 10^exp <= value < 10^(exp + 1).\n    // This is based on log10(value) == log2(value) / log2(10) and approximation\n    // of log2(value) by e + num_fraction_bits idea from double-conversion.\n    exp = static_cast<int>(\n        std::ceil((f.e + count_digits<1>(f.f) - 1) * inv_log2_10 - 1e-10));\n    dragon_flags = dragon::fixup;\n  } else if (!is_constant_evaluated() && precision < 0) {\n    // Use Dragonbox for the shortest format.\n    if (specs.binary32) {\n      auto dec = dragonbox::to_decimal(static_cast<float>(value));\n      write<char>(buffer_appender<char>(buf), dec.significand);\n      return dec.exponent;\n    }\n    auto dec = dragonbox::to_decimal(static_cast<double>(value));\n    write<char>(buffer_appender<char>(buf), dec.significand);\n    return dec.exponent;\n  } else {\n    // Use Grisu + Dragon4 for the given precision:\n    // https://www.cs.tufts.edu/~nr/cs257/archive/florian-loitsch/printf.pdf.\n    const int min_exp = -60;  // alpha in Grisu.\n    int cached_exp10 = 0;     // K in Grisu.\n    fp normalized = normalize(fp(converted_value));\n    const auto cached_pow = get_cached_power(\n        min_exp - (normalized.e + fp::num_significand_bits), cached_exp10);\n    normalized = normalized * cached_pow;\n    gen_digits_handler handler{buf.data(), 0, precision, -cached_exp10, fixed};\n    if (grisu_gen_digits(normalized, 1, exp, handler) != digits::error &&\n        !is_constant_evaluated()) {\n      exp += handler.exp10;\n      buf.try_resize(to_unsigned(handler.size));\n      use_dragon = false;\n    } else {\n      exp += handler.size - cached_exp10 - 1;\n      precision = handler.precision;\n    }\n  }\n  if (use_dragon) {\n    auto f = basic_fp<uint128_t>();\n    bool is_predecessor_closer = specs.binary32\n                                     ? f.assign(static_cast<float>(value))\n                                     : f.assign(converted_value);\n    if (is_predecessor_closer) dragon_flags |= dragon::predecessor_closer;\n    if (fixed) dragon_flags |= dragon::fixed;\n    // Limit precision to the maximum possible number of significant digits in\n    // an IEEE754 double because we don't need to generate zeros.\n    const int max_double_digits = 767;\n    if (precision > max_double_digits) precision = max_double_digits;\n    format_dragon(f, dragon_flags, precision, buf, exp);\n  }\n  if (!fixed && !specs.showpoint) {\n    // Remove trailing zeros.\n    auto num_digits = buf.size();\n    while (num_digits > 0 && buf[num_digits - 1] == '0') {\n      --num_digits;\n      ++exp;\n    }\n    buf.try_resize(num_digits);\n  }\n  return exp;\n}\n\ntemplate <typename Char, typename OutputIt, typename T,\n          FMT_ENABLE_IF(is_floating_point<T>::value)>\nFMT_CONSTEXPR20 auto write(OutputIt out, T value,\n                           basic_format_specs<Char> specs, locale_ref loc = {})\n    -> OutputIt {\n  if (const_check(!is_supported_floating_point(value))) return out;\n  float_specs fspecs = parse_float_type_spec(specs);\n  fspecs.sign = specs.sign;\n  if (detail::signbit(value)) {  // value < 0 is false for NaN so use signbit.\n    fspecs.sign = sign::minus;\n    value = -value;\n  } else if (fspecs.sign == sign::minus) {\n    fspecs.sign = sign::none;\n  }\n\n  if (!detail::isfinite(value))\n    return write_nonfinite(out, detail::isnan(value), specs, fspecs);\n\n  if (specs.align == align::numeric && fspecs.sign) {\n    auto it = reserve(out, 1);\n    *it++ = detail::sign<Char>(fspecs.sign);\n    out = base_iterator(out, it);\n    fspecs.sign = sign::none;\n    if (specs.width != 0) --specs.width;\n  }\n\n  memory_buffer buffer;\n  if (fspecs.format == float_format::hex) {\n    if (fspecs.sign) buffer.push_back(detail::sign<char>(fspecs.sign));\n    snprintf_float(convert_float(value), specs.precision, fspecs, buffer);\n    return write_bytes<align::right>(out, {buffer.data(), buffer.size()},\n                                     specs);\n  }\n  int precision = specs.precision >= 0 || specs.type == presentation_type::none\n                      ? specs.precision\n                      : 6;\n  if (fspecs.format == float_format::exp) {\n    if (precision == max_value<int>())\n      throw_format_error(\"number is too big\");\n    else\n      ++precision;\n  } else if (fspecs.format != float_format::fixed && precision == 0) {\n    precision = 1;\n  }\n  if (const_check(std::is_same<T, float>())) fspecs.binary32 = true;\n  int exp = format_float(convert_float(value), precision, fspecs, buffer);\n  fspecs.precision = precision;\n  auto f = big_decimal_fp{buffer.data(), static_cast<int>(buffer.size()), exp};\n  return write_float(out, f, specs, fspecs, loc);\n}\n\ntemplate <typename Char, typename OutputIt, typename T,\n          FMT_ENABLE_IF(is_fast_float<T>::value)>\nFMT_CONSTEXPR20 auto write(OutputIt out, T value) -> OutputIt {\n  if (is_constant_evaluated())\n    return write(out, value, basic_format_specs<Char>());\n  if (const_check(!is_supported_floating_point(value))) return out;\n\n  auto fspecs = float_specs();\n  if (detail::signbit(value)) {\n    fspecs.sign = sign::minus;\n    value = -value;\n  }\n\n  constexpr auto specs = basic_format_specs<Char>();\n  using floaty = conditional_t<std::is_same<T, long double>::value, double, T>;\n  using uint = typename dragonbox::float_info<floaty>::carrier_uint;\n  uint mask = exponent_mask<floaty>();\n  if ((bit_cast<uint>(value) & mask) == mask)\n    return write_nonfinite(out, std::isnan(value), specs, fspecs);\n\n  auto dec = dragonbox::to_decimal(static_cast<floaty>(value));\n  return write_float(out, dec, specs, fspecs, {});\n}\n\ntemplate <typename Char, typename OutputIt, typename T,\n          FMT_ENABLE_IF(is_floating_point<T>::value &&\n                        !is_fast_float<T>::value)>\ninline auto write(OutputIt out, T value) -> OutputIt {\n  return write(out, value, basic_format_specs<Char>());\n}\n\ntemplate <typename Char, typename OutputIt>\nauto write(OutputIt out, monostate, basic_format_specs<Char> = {},\n           locale_ref = {}) -> OutputIt {\n  FMT_ASSERT(false, \"\");\n  return out;\n}\n\ntemplate <typename Char, typename OutputIt>\nFMT_CONSTEXPR auto write(OutputIt out, basic_string_view<Char> value)\n    -> OutputIt {\n  auto it = reserve(out, value.size());\n  it = copy_str_noinline<Char>(value.begin(), value.end(), it);\n  return base_iterator(out, it);\n}\n\ntemplate <typename Char, typename OutputIt, typename T,\n          FMT_ENABLE_IF(is_string<T>::value)>\nconstexpr auto write(OutputIt out, const T& value) -> OutputIt {\n  return write<Char>(out, to_string_view(value));\n}\n\n// FMT_ENABLE_IF() condition separated to workaround an MSVC bug.\ntemplate <\n    typename Char, typename OutputIt, typename T,\n    bool check =\n        std::is_enum<T>::value && !std::is_same<T, Char>::value &&\n        mapped_type_constant<T, basic_format_context<OutputIt, Char>>::value !=\n            type::custom_type,\n    FMT_ENABLE_IF(check)>\nFMT_CONSTEXPR auto write(OutputIt out, T value) -> OutputIt {\n  return write<Char>(out, static_cast<underlying_t<T>>(value));\n}\n\ntemplate <typename Char, typename OutputIt, typename T,\n          FMT_ENABLE_IF(std::is_same<T, bool>::value)>\nFMT_CONSTEXPR auto write(OutputIt out, T value,\n                         const basic_format_specs<Char>& specs = {},\n                         locale_ref = {}) -> OutputIt {\n  return specs.type != presentation_type::none &&\n                 specs.type != presentation_type::string\n             ? write(out, value ? 1 : 0, specs, {})\n             : write_bytes(out, value ? \"true\" : \"false\", specs);\n}\n\ntemplate <typename Char, typename OutputIt>\nFMT_CONSTEXPR auto write(OutputIt out, Char value) -> OutputIt {\n  auto it = reserve(out, 1);\n  *it++ = value;\n  return base_iterator(out, it);\n}\n\ntemplate <typename Char, typename OutputIt>\nFMT_CONSTEXPR_CHAR_TRAITS auto write(OutputIt out, const Char* value)\n    -> OutputIt {\n  if (!value) {\n    throw_format_error(\"string pointer is null\");\n  } else {\n    out = write(out, basic_string_view<Char>(value));\n  }\n  return out;\n}\n\ntemplate <typename Char, typename OutputIt, typename T,\n          FMT_ENABLE_IF(std::is_same<T, void>::value)>\nauto write(OutputIt out, const T* value,\n           const basic_format_specs<Char>& specs = {}, locale_ref = {})\n    -> OutputIt {\n  check_pointer_type_spec(specs.type, error_handler());\n  return write_ptr<Char>(out, bit_cast<uintptr_t>(value), &specs);\n}\n\n// A write overload that handles implicit conversions.\ntemplate <typename Char, typename OutputIt, typename T,\n          typename Context = basic_format_context<OutputIt, Char>>\nFMT_CONSTEXPR auto write(OutputIt out, const T& value) -> enable_if_t<\n    std::is_class<T>::value && !is_string<T>::value &&\n        !is_floating_point<T>::value && !std::is_same<T, Char>::value &&\n        !std::is_same<const T&,\n                      decltype(arg_mapper<Context>().map(value))>::value,\n    OutputIt> {\n  return write<Char>(out, arg_mapper<Context>().map(value));\n}\n\ntemplate <typename Char, typename OutputIt, typename T,\n          typename Context = basic_format_context<OutputIt, Char>>\nFMT_CONSTEXPR auto write(OutputIt out, const T& value)\n    -> enable_if_t<mapped_type_constant<T, Context>::value == type::custom_type,\n                   OutputIt> {\n  using formatter_type =\n      conditional_t<has_formatter<T, Context>::value,\n                    typename Context::template formatter_type<T>,\n                    fallback_formatter<T, Char>>;\n  auto ctx = Context(out, {}, {});\n  return formatter_type().format(value, ctx);\n}\n\n// An argument visitor that formats the argument and writes it via the output\n// iterator. It's a class and not a generic lambda for compatibility with C++11.\ntemplate <typename Char> struct default_arg_formatter {\n  using iterator = buffer_appender<Char>;\n  using context = buffer_context<Char>;\n\n  iterator out;\n  basic_format_args<context> args;\n  locale_ref loc;\n\n  template <typename T> auto operator()(T value) -> iterator {\n    return write<Char>(out, value);\n  }\n  auto operator()(typename basic_format_arg<context>::handle h) -> iterator {\n    basic_format_parse_context<Char> parse_ctx({});\n    context format_ctx(out, args, loc);\n    h.format(parse_ctx, format_ctx);\n    return format_ctx.out();\n  }\n};\n\ntemplate <typename Char> struct arg_formatter {\n  using iterator = buffer_appender<Char>;\n  using context = buffer_context<Char>;\n\n  iterator out;\n  const basic_format_specs<Char>& specs;\n  locale_ref locale;\n\n  template <typename T>\n  FMT_CONSTEXPR FMT_INLINE auto operator()(T value) -> iterator {\n    return detail::write(out, value, specs, locale);\n  }\n  auto operator()(typename basic_format_arg<context>::handle) -> iterator {\n    // User-defined types are handled separately because they require access\n    // to the parse context.\n    return out;\n  }\n};\n\ntemplate <typename Char> struct custom_formatter {\n  basic_format_parse_context<Char>& parse_ctx;\n  buffer_context<Char>& ctx;\n\n  void operator()(\n      typename basic_format_arg<buffer_context<Char>>::handle h) const {\n    h.format(parse_ctx, ctx);\n  }\n  template <typename T> void operator()(T) const {}\n};\n\ntemplate <typename T>\nusing is_integer =\n    bool_constant<is_integral<T>::value && !std::is_same<T, bool>::value &&\n                  !std::is_same<T, char>::value &&\n                  !std::is_same<T, wchar_t>::value>;\n\ntemplate <typename ErrorHandler> class width_checker {\n public:\n  explicit FMT_CONSTEXPR width_checker(ErrorHandler& eh) : handler_(eh) {}\n\n  template <typename T, FMT_ENABLE_IF(is_integer<T>::value)>\n  FMT_CONSTEXPR auto operator()(T value) -> unsigned long long {\n    if (is_negative(value)) handler_.on_error(\"negative width\");\n    return static_cast<unsigned long long>(value);\n  }\n\n  template <typename T, FMT_ENABLE_IF(!is_integer<T>::value)>\n  FMT_CONSTEXPR auto operator()(T) -> unsigned long long {\n    handler_.on_error(\"width is not integer\");\n    return 0;\n  }\n\n private:\n  ErrorHandler& handler_;\n};\n\ntemplate <typename ErrorHandler> class precision_checker {\n public:\n  explicit FMT_CONSTEXPR precision_checker(ErrorHandler& eh) : handler_(eh) {}\n\n  template <typename T, FMT_ENABLE_IF(is_integer<T>::value)>\n  FMT_CONSTEXPR auto operator()(T value) -> unsigned long long {\n    if (is_negative(value)) handler_.on_error(\"negative precision\");\n    return static_cast<unsigned long long>(value);\n  }\n\n  template <typename T, FMT_ENABLE_IF(!is_integer<T>::value)>\n  FMT_CONSTEXPR auto operator()(T) -> unsigned long long {\n    handler_.on_error(\"precision is not integer\");\n    return 0;\n  }\n\n private:\n  ErrorHandler& handler_;\n};\n\ntemplate <template <typename> class Handler, typename FormatArg,\n          typename ErrorHandler>\nFMT_CONSTEXPR auto get_dynamic_spec(FormatArg arg, ErrorHandler eh) -> int {\n  unsigned long long value = visit_format_arg(Handler<ErrorHandler>(eh), arg);\n  if (value > to_unsigned(max_value<int>())) eh.on_error(\"number is too big\");\n  return static_cast<int>(value);\n}\n\ntemplate <typename Context, typename ID>\nFMT_CONSTEXPR auto get_arg(Context& ctx, ID id) ->\n    typename Context::format_arg {\n  auto arg = ctx.arg(id);\n  if (!arg) ctx.on_error(\"argument not found\");\n  return arg;\n}\n\n// The standard format specifier handler with checking.\ntemplate <typename Char> class specs_handler : public specs_setter<Char> {\n private:\n  basic_format_parse_context<Char>& parse_context_;\n  buffer_context<Char>& context_;\n\n  // This is only needed for compatibility with gcc 4.4.\n  using format_arg = basic_format_arg<buffer_context<Char>>;\n\n  FMT_CONSTEXPR auto get_arg(auto_id) -> format_arg {\n    return detail::get_arg(context_, parse_context_.next_arg_id());\n  }\n\n  FMT_CONSTEXPR auto get_arg(int arg_id) -> format_arg {\n    parse_context_.check_arg_id(arg_id);\n    return detail::get_arg(context_, arg_id);\n  }\n\n  FMT_CONSTEXPR auto get_arg(basic_string_view<Char> arg_id) -> format_arg {\n    parse_context_.check_arg_id(arg_id);\n    return detail::get_arg(context_, arg_id);\n  }\n\n public:\n  FMT_CONSTEXPR specs_handler(basic_format_specs<Char>& specs,\n                              basic_format_parse_context<Char>& parse_ctx,\n                              buffer_context<Char>& ctx)\n      : specs_setter<Char>(specs), parse_context_(parse_ctx), context_(ctx) {}\n\n  template <typename Id> FMT_CONSTEXPR void on_dynamic_width(Id arg_id) {\n    this->specs_.width = get_dynamic_spec<width_checker>(\n        get_arg(arg_id), context_.error_handler());\n  }\n\n  template <typename Id> FMT_CONSTEXPR void on_dynamic_precision(Id arg_id) {\n    this->specs_.precision = get_dynamic_spec<precision_checker>(\n        get_arg(arg_id), context_.error_handler());\n  }\n\n  void on_error(const char* message) { context_.on_error(message); }\n};\n\ntemplate <template <typename> class Handler, typename Context>\nFMT_CONSTEXPR void handle_dynamic_spec(int& value,\n                                       arg_ref<typename Context::char_type> ref,\n                                       Context& ctx) {\n  switch (ref.kind) {\n  case arg_id_kind::none:\n    break;\n  case arg_id_kind::index:\n    value = detail::get_dynamic_spec<Handler>(ctx.arg(ref.val.index),\n                                              ctx.error_handler());\n    break;\n  case arg_id_kind::name:\n    value = detail::get_dynamic_spec<Handler>(ctx.arg(ref.val.name),\n                                              ctx.error_handler());\n    break;\n  }\n}\n\n#if FMT_USE_USER_DEFINED_LITERALS\ntemplate <typename Char> struct udl_formatter {\n  basic_string_view<Char> str;\n\n  template <typename... T>\n  auto operator()(T&&... args) const -> std::basic_string<Char> {\n    return vformat(str, fmt::make_format_args<buffer_context<Char>>(args...));\n  }\n};\n\n#  if FMT_USE_NONTYPE_TEMPLATE_ARGS\ntemplate <typename T, typename Char, size_t N,\n          fmt::detail_exported::fixed_string<Char, N> Str>\nstruct statically_named_arg : view {\n  static constexpr auto name = Str.data;\n\n  const T& value;\n  statically_named_arg(const T& v) : value(v) {}\n};\n\ntemplate <typename T, typename Char, size_t N,\n          fmt::detail_exported::fixed_string<Char, N> Str>\nstruct is_named_arg<statically_named_arg<T, Char, N, Str>> : std::true_type {};\n\ntemplate <typename T, typename Char, size_t N,\n          fmt::detail_exported::fixed_string<Char, N> Str>\nstruct is_statically_named_arg<statically_named_arg<T, Char, N, Str>>\n    : std::true_type {};\n\ntemplate <typename Char, size_t N,\n          fmt::detail_exported::fixed_string<Char, N> Str>\nstruct udl_arg {\n  template <typename T> auto operator=(T&& value) const {\n    return statically_named_arg<T, Char, N, Str>(std::forward<T>(value));\n  }\n};\n#  else\ntemplate <typename Char> struct udl_arg {\n  const Char* str;\n\n  template <typename T> auto operator=(T&& value) const -> named_arg<Char, T> {\n    return {str, std::forward<T>(value)};\n  }\n};\n#  endif\n#endif  // FMT_USE_USER_DEFINED_LITERALS\n\ntemplate <typename Locale, typename Char>\nauto vformat(const Locale& loc, basic_string_view<Char> format_str,\n             basic_format_args<buffer_context<type_identity_t<Char>>> args)\n    -> std::basic_string<Char> {\n  basic_memory_buffer<Char> buffer;\n  detail::vformat_to(buffer, format_str, args, detail::locale_ref(loc));\n  return {buffer.data(), buffer.size()};\n}\n\nusing format_func = void (*)(detail::buffer<char>&, int, const char*);\n\nFMT_API void format_error_code(buffer<char>& out, int error_code,\n                               string_view message) noexcept;\n\nFMT_API void report_error(format_func func, int error_code,\n                          const char* message) noexcept;\nFMT_END_DETAIL_NAMESPACE\n\nFMT_API auto vsystem_error(int error_code, string_view format_str,\n                           format_args args) -> std::system_error;\n\n/**\n \\rst\n Constructs :class:`std::system_error` with a message formatted with\n ``fmt::format(fmt, args...)``.\n  *error_code* is a system error code as given by ``errno``.\n\n **Example**::\n\n   // This throws std::system_error with the description\n   //   cannot open file 'madeup': No such file or directory\n   // or similar (system message may vary).\n   const char* filename = \"madeup\";\n   std::FILE* file = std::fopen(filename, \"r\");\n   if (!file)\n     throw fmt::system_error(errno, \"cannot open file '{}'\", filename);\n \\endrst\n*/\ntemplate <typename... T>\nauto system_error(int error_code, format_string<T...> fmt, T&&... args)\n    -> std::system_error {\n  return vsystem_error(error_code, fmt, fmt::make_format_args(args...));\n}\n\n/**\n  \\rst\n  Formats an error message for an error returned by an operating system or a\n  language runtime, for example a file opening error, and writes it to *out*.\n  The format is the same as the one used by ``std::system_error(ec, message)``\n  where ``ec`` is ``std::error_code(error_code, std::generic_category()})``.\n  It is implementation-defined but normally looks like:\n\n  .. parsed-literal::\n     *<message>*: *<system-message>*\n\n  where *<message>* is the passed message and *<system-message>* is the system\n  message corresponding to the error code.\n  *error_code* is a system error code as given by ``errno``.\n  \\endrst\n */\nFMT_API void format_system_error(detail::buffer<char>& out, int error_code,\n                                 const char* message) noexcept;\n\n// Reports a system error without throwing an exception.\n// Can be used to report errors from destructors.\nFMT_API void report_system_error(int error_code, const char* message) noexcept;\n\n/** Fast integer formatter. */\nclass format_int {\n private:\n  // Buffer should be large enough to hold all digits (digits10 + 1),\n  // a sign and a null character.\n  enum { buffer_size = std::numeric_limits<unsigned long long>::digits10 + 3 };\n  mutable char buffer_[buffer_size];\n  char* str_;\n\n  template <typename UInt> auto format_unsigned(UInt value) -> char* {\n    auto n = static_cast<detail::uint32_or_64_or_128_t<UInt>>(value);\n    return detail::format_decimal(buffer_, n, buffer_size - 1).begin;\n  }\n\n  template <typename Int> auto format_signed(Int value) -> char* {\n    auto abs_value = static_cast<detail::uint32_or_64_or_128_t<Int>>(value);\n    bool negative = value < 0;\n    if (negative) abs_value = 0 - abs_value;\n    auto begin = format_unsigned(abs_value);\n    if (negative) *--begin = '-';\n    return begin;\n  }\n\n public:\n  explicit format_int(int value) : str_(format_signed(value)) {}\n  explicit format_int(long value) : str_(format_signed(value)) {}\n  explicit format_int(long long value) : str_(format_signed(value)) {}\n  explicit format_int(unsigned value) : str_(format_unsigned(value)) {}\n  explicit format_int(unsigned long value) : str_(format_unsigned(value)) {}\n  explicit format_int(unsigned long long value)\n      : str_(format_unsigned(value)) {}\n\n  /** Returns the number of characters written to the output buffer. */\n  auto size() const -> size_t {\n    return detail::to_unsigned(buffer_ - str_ + buffer_size - 1);\n  }\n\n  /**\n    Returns a pointer to the output buffer content. No terminating null\n    character is appended.\n   */\n  auto data() const -> const char* { return str_; }\n\n  /**\n    Returns a pointer to the output buffer content with terminating null\n    character appended.\n   */\n  auto c_str() const -> const char* {\n    buffer_[buffer_size - 1] = '\\0';\n    return str_;\n  }\n\n  /**\n    \\rst\n    Returns the content of the output buffer as an ``std::string``.\n    \\endrst\n   */\n  auto str() const -> std::string { return std::string(str_, size()); }\n};\n\ntemplate <typename T, typename Char>\ntemplate <typename FormatContext>\nFMT_CONSTEXPR FMT_INLINE auto\nformatter<T, Char,\n          enable_if_t<detail::type_constant<T, Char>::value !=\n                      detail::type::custom_type>>::format(const T& val,\n                                                          FormatContext& ctx)\n    const -> decltype(ctx.out()) {\n  if (specs_.width_ref.kind != detail::arg_id_kind::none ||\n      specs_.precision_ref.kind != detail::arg_id_kind::none) {\n    auto specs = specs_;\n    detail::handle_dynamic_spec<detail::width_checker>(specs.width,\n                                                       specs.width_ref, ctx);\n    detail::handle_dynamic_spec<detail::precision_checker>(\n        specs.precision, specs.precision_ref, ctx);\n    return detail::write<Char>(ctx.out(), val, specs, ctx.locale());\n  }\n  return detail::write<Char>(ctx.out(), val, specs_, ctx.locale());\n}\n\ntemplate <typename Char>\nstruct formatter<void*, Char> : formatter<const void*, Char> {\n  template <typename FormatContext>\n  auto format(void* val, FormatContext& ctx) const -> decltype(ctx.out()) {\n    return formatter<const void*, Char>::format(val, ctx);\n  }\n};\n\ntemplate <typename Char, size_t N>\nstruct formatter<Char[N], Char> : formatter<basic_string_view<Char>, Char> {\n  template <typename FormatContext>\n  FMT_CONSTEXPR auto format(const Char* val, FormatContext& ctx) const\n      -> decltype(ctx.out()) {\n    return formatter<basic_string_view<Char>, Char>::format(val, ctx);\n  }\n};\n\n// A formatter for types known only at run time such as variant alternatives.\n//\n// Usage:\n//   using variant = std::variant<int, std::string>;\n//   template <>\n//   struct formatter<variant>: dynamic_formatter<> {\n//     auto format(const variant& v, format_context& ctx) {\n//       return visit([&](const auto& val) {\n//           return dynamic_formatter<>::format(val, ctx);\n//       }, v);\n//     }\n//   };\ntemplate <typename Char = char> class dynamic_formatter {\n private:\n  detail::dynamic_format_specs<Char> specs_;\n  const Char* format_str_;\n\n  struct null_handler : detail::error_handler {\n    void on_align(align_t) {}\n    void on_sign(sign_t) {}\n    void on_hash() {}\n  };\n\n  template <typename Context> void handle_specs(Context& ctx) {\n    detail::handle_dynamic_spec<detail::width_checker>(specs_.width,\n                                                       specs_.width_ref, ctx);\n    detail::handle_dynamic_spec<detail::precision_checker>(\n        specs_.precision, specs_.precision_ref, ctx);\n  }\n\n public:\n  template <typename ParseContext>\n  FMT_CONSTEXPR auto parse(ParseContext& ctx) -> decltype(ctx.begin()) {\n    format_str_ = ctx.begin();\n    // Checks are deferred to formatting time when the argument type is known.\n    detail::dynamic_specs_handler<ParseContext> handler(specs_, ctx);\n    return detail::parse_format_specs(ctx.begin(), ctx.end(), handler);\n  }\n\n  template <typename T, typename FormatContext>\n  auto format(const T& val, FormatContext& ctx) -> decltype(ctx.out()) {\n    handle_specs(ctx);\n    detail::specs_checker<null_handler> checker(\n        null_handler(), detail::mapped_type_constant<T, FormatContext>::value);\n    checker.on_align(specs_.align);\n    if (specs_.sign != sign::none) checker.on_sign(specs_.sign);\n    if (specs_.alt) checker.on_hash();\n    if (specs_.precision >= 0) checker.end_precision();\n    return detail::write<Char>(ctx.out(), val, specs_, ctx.locale());\n  }\n};\n\n/**\n  \\rst\n  Converts ``p`` to ``const void*`` for pointer formatting.\n\n  **Example**::\n\n    auto s = fmt::format(\"{}\", fmt::ptr(p));\n  \\endrst\n */\ntemplate <typename T> auto ptr(T p) -> const void* {\n  static_assert(std::is_pointer<T>::value, \"\");\n  return detail::bit_cast<const void*>(p);\n}\ntemplate <typename T> auto ptr(const std::unique_ptr<T>& p) -> const void* {\n  return p.get();\n}\ntemplate <typename T> auto ptr(const std::shared_ptr<T>& p) -> const void* {\n  return p.get();\n}\n\n/**\n  \\rst\n  Converts ``e`` to the underlying type.\n\n  **Example**::\n\n    enum class color { red, green, blue };\n    auto s = fmt::format(\"{}\", fmt::underlying(color::red));\n  \\endrst\n */\ntemplate <typename Enum>\nconstexpr auto underlying(Enum e) noexcept -> underlying_t<Enum> {\n  return static_cast<underlying_t<Enum>>(e);\n}\n\nnamespace enums {\ntemplate <typename Enum, FMT_ENABLE_IF(std::is_enum<Enum>::value)>\nconstexpr auto format_as(Enum e) noexcept -> underlying_t<Enum> {\n  return static_cast<underlying_t<Enum>>(e);\n}\n}  // namespace enums\n\nclass bytes {\n private:\n  string_view data_;\n  friend struct formatter<bytes>;\n\n public:\n  explicit bytes(string_view data) : data_(data) {}\n};\n\ntemplate <> struct formatter<bytes> {\n private:\n  detail::dynamic_format_specs<char> specs_;\n\n public:\n  template <typename ParseContext>\n  FMT_CONSTEXPR auto parse(ParseContext& ctx) -> decltype(ctx.begin()) {\n    using handler_type = detail::dynamic_specs_handler<ParseContext>;\n    detail::specs_checker<handler_type> handler(handler_type(specs_, ctx),\n                                                detail::type::string_type);\n    auto it = parse_format_specs(ctx.begin(), ctx.end(), handler);\n    detail::check_string_type_spec(specs_.type, ctx.error_handler());\n    return it;\n  }\n\n  template <typename FormatContext>\n  auto format(bytes b, FormatContext& ctx) -> decltype(ctx.out()) {\n    detail::handle_dynamic_spec<detail::width_checker>(specs_.width,\n                                                       specs_.width_ref, ctx);\n    detail::handle_dynamic_spec<detail::precision_checker>(\n        specs_.precision, specs_.precision_ref, ctx);\n    return detail::write_bytes(ctx.out(), b.data_, specs_);\n  }\n};\n\n// group_digits_view is not derived from view because it copies the argument.\ntemplate <typename T> struct group_digits_view { T value; };\n\n/**\n  \\rst\n  Returns a view that formats an integer value using ',' as a locale-independent\n  thousands separator.\n\n  **Example**::\n\n    fmt::print(\"{}\", fmt::group_digits(12345));\n    // Output: \"12,345\"\n  \\endrst\n */\ntemplate <typename T> auto group_digits(T value) -> group_digits_view<T> {\n  return {value};\n}\n\ntemplate <typename T> struct formatter<group_digits_view<T>> : formatter<T> {\n private:\n  detail::dynamic_format_specs<char> specs_;\n\n public:\n  template <typename ParseContext>\n  FMT_CONSTEXPR auto parse(ParseContext& ctx) -> decltype(ctx.begin()) {\n    using handler_type = detail::dynamic_specs_handler<ParseContext>;\n    detail::specs_checker<handler_type> handler(handler_type(specs_, ctx),\n                                                detail::type::int_type);\n    auto it = parse_format_specs(ctx.begin(), ctx.end(), handler);\n    detail::check_string_type_spec(specs_.type, ctx.error_handler());\n    return it;\n  }\n\n  template <typename FormatContext>\n  auto format(group_digits_view<T> t, FormatContext& ctx)\n      -> decltype(ctx.out()) {\n    detail::handle_dynamic_spec<detail::width_checker>(specs_.width,\n                                                       specs_.width_ref, ctx);\n    detail::handle_dynamic_spec<detail::precision_checker>(\n        specs_.precision, specs_.precision_ref, ctx);\n    return detail::write_int_localized(\n        ctx.out(), static_cast<detail::uint64_or_128_t<T>>(t.value), 0, specs_,\n        detail::digit_grouping<char>({\"\\3\", ','}));\n  }\n};\n\ntemplate <typename It, typename Sentinel, typename Char = char>\nstruct join_view : detail::view {\n  It begin;\n  Sentinel end;\n  basic_string_view<Char> sep;\n\n  join_view(It b, Sentinel e, basic_string_view<Char> s)\n      : begin(b), end(e), sep(s) {}\n};\n\ntemplate <typename It, typename Sentinel, typename Char>\nstruct formatter<join_view<It, Sentinel, Char>, Char> {\n private:\n  using value_type =\n#ifdef __cpp_lib_ranges\n      std::iter_value_t<It>;\n#else\n      typename std::iterator_traits<It>::value_type;\n#endif\n  using context = buffer_context<Char>;\n  using mapper = detail::arg_mapper<context>;\n\n  template <typename T, FMT_ENABLE_IF(has_formatter<T, context>::value)>\n  static auto map(const T& value) -> const T& {\n    return value;\n  }\n  template <typename T, FMT_ENABLE_IF(!has_formatter<T, context>::value)>\n  static auto map(const T& value) -> decltype(mapper().map(value)) {\n    return mapper().map(value);\n  }\n\n  using formatter_type =\n      conditional_t<is_formattable<value_type, Char>::value,\n                    formatter<remove_cvref_t<decltype(map(\n                                  std::declval<const value_type&>()))>,\n                              Char>,\n                    detail::fallback_formatter<value_type, Char>>;\n\n  formatter_type value_formatter_;\n\n public:\n  template <typename ParseContext>\n  FMT_CONSTEXPR auto parse(ParseContext& ctx) -> decltype(ctx.begin()) {\n    return value_formatter_.parse(ctx);\n  }\n\n  template <typename FormatContext>\n  auto format(const join_view<It, Sentinel, Char>& value,\n              FormatContext& ctx) const -> decltype(ctx.out()) {\n    auto it = value.begin;\n    auto out = ctx.out();\n    if (it != value.end) {\n      out = value_formatter_.format(map(*it), ctx);\n      ++it;\n      while (it != value.end) {\n        out = detail::copy_str<Char>(value.sep.begin(), value.sep.end(), out);\n        ctx.advance_to(out);\n        out = value_formatter_.format(map(*it), ctx);\n        ++it;\n      }\n    }\n    return out;\n  }\n};\n\n/**\n  Returns a view that formats the iterator range `[begin, end)` with elements\n  separated by `sep`.\n */\ntemplate <typename It, typename Sentinel>\nauto join(It begin, Sentinel end, string_view sep) -> join_view<It, Sentinel> {\n  return {begin, end, sep};\n}\n\n/**\n  \\rst\n  Returns a view that formats `range` with elements separated by `sep`.\n\n  **Example**::\n\n    std::vector<int> v = {1, 2, 3};\n    fmt::print(\"{}\", fmt::join(v, \", \"));\n    // Output: \"1, 2, 3\"\n\n  ``fmt::join`` applies passed format specifiers to the range elements::\n\n    fmt::print(\"{:02}\", fmt::join(v, \", \"));\n    // Output: \"01, 02, 03\"\n  \\endrst\n */\ntemplate <typename Range>\nauto join(Range&& range, string_view sep)\n    -> join_view<detail::iterator_t<Range>, detail::sentinel_t<Range>> {\n  return join(std::begin(range), std::end(range), sep);\n}\n\n/**\n  \\rst\n  Converts *value* to ``std::string`` using the default format for type *T*.\n\n  **Example**::\n\n    #include <fmt/format.h>\n\n    std::string answer = fmt::to_string(42);\n  \\endrst\n */\ntemplate <typename T, FMT_ENABLE_IF(!std::is_integral<T>::value)>\ninline auto to_string(const T& value) -> std::string {\n  auto result = std::string();\n  detail::write<char>(std::back_inserter(result), value);\n  return result;\n}\n\ntemplate <typename T, FMT_ENABLE_IF(std::is_integral<T>::value)>\nFMT_NODISCARD inline auto to_string(T value) -> std::string {\n  // The buffer should be large enough to store the number including the sign\n  // or \"false\" for bool.\n  constexpr int max_size = detail::digits10<T>() + 2;\n  char buffer[max_size > 5 ? static_cast<unsigned>(max_size) : 5];\n  char* begin = buffer;\n  return std::string(begin, detail::write<char>(begin, value));\n}\n\ntemplate <typename Char, size_t SIZE>\nFMT_NODISCARD auto to_string(const basic_memory_buffer<Char, SIZE>& buf)\n    -> std::basic_string<Char> {\n  auto size = buf.size();\n  detail::assume(size < std::basic_string<Char>().max_size());\n  return std::basic_string<Char>(buf.data(), size);\n}\n\nFMT_BEGIN_DETAIL_NAMESPACE\n\ntemplate <typename Char>\nvoid vformat_to(\n    buffer<Char>& buf, basic_string_view<Char> fmt,\n    basic_format_args<FMT_BUFFER_CONTEXT(type_identity_t<Char>)> args,\n    locale_ref loc) {\n  // workaround for msvc bug regarding name-lookup in module\n  // link names into function scope\n  using detail::arg_formatter;\n  using detail::buffer_appender;\n  using detail::custom_formatter;\n  using detail::default_arg_formatter;\n  using detail::get_arg;\n  using detail::locale_ref;\n  using detail::parse_format_specs;\n  using detail::specs_checker;\n  using detail::specs_handler;\n  using detail::to_unsigned;\n  using detail::type;\n  using detail::write;\n  auto out = buffer_appender<Char>(buf);\n  if (fmt.size() == 2 && equal2(fmt.data(), \"{}\")) {\n    auto arg = args.get(0);\n    if (!arg) error_handler().on_error(\"argument not found\");\n    visit_format_arg(default_arg_formatter<Char>{out, args, loc}, arg);\n    return;\n  }\n\n  struct format_handler : error_handler {\n    basic_format_parse_context<Char> parse_context;\n    buffer_context<Char> context;\n\n    format_handler(buffer_appender<Char> p_out, basic_string_view<Char> str,\n                   basic_format_args<buffer_context<Char>> p_args,\n                   locale_ref p_loc)\n        : parse_context(str), context(p_out, p_args, p_loc) {}\n\n    void on_text(const Char* begin, const Char* end) {\n      auto text = basic_string_view<Char>(begin, to_unsigned(end - begin));\n      context.advance_to(write<Char>(context.out(), text));\n    }\n\n    FMT_CONSTEXPR auto on_arg_id() -> int {\n      return parse_context.next_arg_id();\n    }\n    FMT_CONSTEXPR auto on_arg_id(int id) -> int {\n      return parse_context.check_arg_id(id), id;\n    }\n    FMT_CONSTEXPR auto on_arg_id(basic_string_view<Char> id) -> int {\n      int arg_id = context.arg_id(id);\n      if (arg_id < 0) on_error(\"argument not found\");\n      return arg_id;\n    }\n\n    FMT_INLINE void on_replacement_field(int id, const Char*) {\n      auto arg = get_arg(context, id);\n      context.advance_to(visit_format_arg(\n          default_arg_formatter<Char>{context.out(), context.args(),\n                                      context.locale()},\n          arg));\n    }\n\n    auto on_format_specs(int id, const Char* begin, const Char* end)\n        -> const Char* {\n      auto arg = get_arg(context, id);\n      if (arg.type() == type::custom_type) {\n        parse_context.advance_to(parse_context.begin() +\n                                 (begin - &*parse_context.begin()));\n        visit_format_arg(custom_formatter<Char>{parse_context, context}, arg);\n        return parse_context.begin();\n      }\n      auto specs = basic_format_specs<Char>();\n      specs_checker<specs_handler<Char>> handler(\n          specs_handler<Char>(specs, parse_context, context), arg.type());\n      begin = parse_format_specs(begin, end, handler);\n      if (begin == end || *begin != '}')\n        on_error(\"missing '}' in format string\");\n      auto f = arg_formatter<Char>{context.out(), specs, context.locale()};\n      context.advance_to(visit_format_arg(f, arg));\n      return begin;\n    }\n  };\n  detail::parse_format_string<false>(fmt, format_handler(out, fmt, args, loc));\n}\n\n#ifndef FMT_HEADER_ONLY\nextern template FMT_API auto thousands_sep_impl<char>(locale_ref)\n    -> thousands_sep_result<char>;\nextern template FMT_API auto thousands_sep_impl<wchar_t>(locale_ref)\n    -> thousands_sep_result<wchar_t>;\nextern template FMT_API auto decimal_point_impl(locale_ref) -> char;\nextern template FMT_API auto decimal_point_impl(locale_ref) -> wchar_t;\n#endif  // FMT_HEADER_ONLY\n\nFMT_END_DETAIL_NAMESPACE\n\n#if FMT_USE_USER_DEFINED_LITERALS\ninline namespace literals {\n/**\n  \\rst\n  User-defined literal equivalent of :func:`fmt::arg`.\n\n  **Example**::\n\n    using namespace fmt::literals;\n    fmt::print(\"Elapsed time: {s:.2f} seconds\", \"s\"_a=1.23);\n  \\endrst\n */\n#  if FMT_USE_NONTYPE_TEMPLATE_ARGS\ntemplate <detail_exported::fixed_string Str> constexpr auto operator\"\"_a() {\n  using char_t = remove_cvref_t<decltype(Str.data[0])>;\n  return detail::udl_arg<char_t, sizeof(Str.data) / sizeof(char_t), Str>();\n}\n#  else\nconstexpr auto operator\"\" _a(const char* s, size_t) -> detail::udl_arg<char> {\n  return {s};\n}\n#  endif\n}  // namespace literals\n#endif  // FMT_USE_USER_DEFINED_LITERALS\n\ntemplate <typename Locale, FMT_ENABLE_IF(detail::is_locale<Locale>::value)>\ninline auto vformat(const Locale& loc, string_view fmt, format_args args)\n    -> std::string {\n  return detail::vformat(loc, fmt, args);\n}\n\ntemplate <typename Locale, typename... T,\n          FMT_ENABLE_IF(detail::is_locale<Locale>::value)>\ninline auto format(const Locale& loc, format_string<T...> fmt, T&&... args)\n    -> std::string {\n  return vformat(loc, string_view(fmt), fmt::make_format_args(args...));\n}\n\ntemplate <typename OutputIt, typename Locale,\n          FMT_ENABLE_IF(detail::is_output_iterator<OutputIt, char>::value&&\n                            detail::is_locale<Locale>::value)>\nauto vformat_to(OutputIt out, const Locale& loc, string_view fmt,\n                format_args args) -> OutputIt {\n  using detail::get_buffer;\n  auto&& buf = get_buffer<char>(out);\n  detail::vformat_to(buf, fmt, args, detail::locale_ref(loc));\n  return detail::get_iterator(buf);\n}\n\ntemplate <typename OutputIt, typename Locale, typename... T,\n          FMT_ENABLE_IF(detail::is_output_iterator<OutputIt, char>::value&&\n                            detail::is_locale<Locale>::value)>\nFMT_INLINE auto format_to(OutputIt out, const Locale& loc,\n                          format_string<T...> fmt, T&&... args) -> OutputIt {\n  return vformat_to(out, loc, fmt, fmt::make_format_args(args...));\n}\n\nFMT_MODULE_EXPORT_END\nFMT_END_NAMESPACE\n\n#ifdef FMT_HEADER_ONLY\n#  define FMT_FUNC inline\n#  include \"format-inl.h\"\n#else\n#  define FMT_FUNC\n#endif\n\n#endif  // FMT_FORMAT_H_\n"
  },
  {
    "path": "native/iosTest/Pods/fmt/include/fmt/os.h",
    "content": "// Formatting library for C++ - optional OS-specific functionality\n//\n// Copyright (c) 2012 - present, Victor Zverovich\n// All rights reserved.\n//\n// For the license information refer to format.h.\n\n#ifndef FMT_OS_H_\n#define FMT_OS_H_\n\n#include <cerrno>\n#include <cstddef>\n#include <cstdio>\n#include <system_error>  // std::system_error\n\n#if defined __APPLE__ || defined(__FreeBSD__)\n#  include <xlocale.h>  // for LC_NUMERIC_MASK on OS X\n#endif\n\n#include \"format.h\"\n\n#ifndef FMT_USE_FCNTL\n// UWP doesn't provide _pipe.\n#  if FMT_HAS_INCLUDE(\"winapifamily.h\")\n#    include <winapifamily.h>\n#  endif\n#  if (FMT_HAS_INCLUDE(<fcntl.h>) || defined(__APPLE__) || \\\n       defined(__linux__)) &&                              \\\n      (!defined(WINAPI_FAMILY) ||                          \\\n       (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP))\n#    include <fcntl.h>  // for O_RDONLY\n#    define FMT_USE_FCNTL 1\n#  else\n#    define FMT_USE_FCNTL 0\n#  endif\n#endif\n\n#ifndef FMT_POSIX\n#  if defined(_WIN32) && !defined(__MINGW32__)\n// Fix warnings about deprecated symbols.\n#    define FMT_POSIX(call) _##call\n#  else\n#    define FMT_POSIX(call) call\n#  endif\n#endif\n\n// Calls to system functions are wrapped in FMT_SYSTEM for testability.\n#ifdef FMT_SYSTEM\n#  define FMT_POSIX_CALL(call) FMT_SYSTEM(call)\n#else\n#  define FMT_SYSTEM(call) ::call\n#  ifdef _WIN32\n// Fix warnings about deprecated symbols.\n#    define FMT_POSIX_CALL(call) ::_##call\n#  else\n#    define FMT_POSIX_CALL(call) ::call\n#  endif\n#endif\n\n// Retries the expression while it evaluates to error_result and errno\n// equals to EINTR.\n#ifndef _WIN32\n#  define FMT_RETRY_VAL(result, expression, error_result) \\\n    do {                                                  \\\n      (result) = (expression);                            \\\n    } while ((result) == (error_result) && errno == EINTR)\n#else\n#  define FMT_RETRY_VAL(result, expression, error_result) result = (expression)\n#endif\n\n#define FMT_RETRY(result, expression) FMT_RETRY_VAL(result, expression, -1)\n\nFMT_BEGIN_NAMESPACE\nFMT_MODULE_EXPORT_BEGIN\n\n/**\n  \\rst\n  A reference to a null-terminated string. It can be constructed from a C\n  string or ``std::string``.\n\n  You can use one of the following type aliases for common character types:\n\n  +---------------+-----------------------------+\n  | Type          | Definition                  |\n  +===============+=============================+\n  | cstring_view  | basic_cstring_view<char>    |\n  +---------------+-----------------------------+\n  | wcstring_view | basic_cstring_view<wchar_t> |\n  +---------------+-----------------------------+\n\n  This class is most useful as a parameter type to allow passing\n  different types of strings to a function, for example::\n\n    template <typename... Args>\n    std::string format(cstring_view format_str, const Args & ... args);\n\n    format(\"{}\", 42);\n    format(std::string(\"{}\"), 42);\n  \\endrst\n */\ntemplate <typename Char> class basic_cstring_view {\n private:\n  const Char* data_;\n\n public:\n  /** Constructs a string reference object from a C string. */\n  basic_cstring_view(const Char* s) : data_(s) {}\n\n  /**\n    \\rst\n    Constructs a string reference from an ``std::string`` object.\n    \\endrst\n   */\n  basic_cstring_view(const std::basic_string<Char>& s) : data_(s.c_str()) {}\n\n  /** Returns the pointer to a C string. */\n  const Char* c_str() const { return data_; }\n};\n\nusing cstring_view = basic_cstring_view<char>;\nusing wcstring_view = basic_cstring_view<wchar_t>;\n\ntemplate <typename Char> struct formatter<std::error_code, Char> {\n  template <typename ParseContext>\n  FMT_CONSTEXPR auto parse(ParseContext& ctx) -> decltype(ctx.begin()) {\n    return ctx.begin();\n  }\n\n  template <typename FormatContext>\n  FMT_CONSTEXPR auto format(const std::error_code& ec, FormatContext& ctx) const\n      -> decltype(ctx.out()) {\n    auto out = ctx.out();\n    out = detail::write_bytes(out, ec.category().name(),\n                              basic_format_specs<Char>());\n    out = detail::write<Char>(out, Char(':'));\n    out = detail::write<Char>(out, ec.value());\n    return out;\n  }\n};\n\n#ifdef _WIN32\nFMT_API const std::error_category& system_category() noexcept;\n\nFMT_BEGIN_DETAIL_NAMESPACE\n// A converter from UTF-16 to UTF-8.\n// It is only provided for Windows since other systems support UTF-8 natively.\nclass utf16_to_utf8 {\n private:\n  memory_buffer buffer_;\n\n public:\n  utf16_to_utf8() {}\n  FMT_API explicit utf16_to_utf8(basic_string_view<wchar_t> s);\n  operator string_view() const { return string_view(&buffer_[0], size()); }\n  size_t size() const { return buffer_.size() - 1; }\n  const char* c_str() const { return &buffer_[0]; }\n  std::string str() const { return std::string(&buffer_[0], size()); }\n\n  // Performs conversion returning a system error code instead of\n  // throwing exception on conversion error. This method may still throw\n  // in case of memory allocation error.\n  FMT_API int convert(basic_string_view<wchar_t> s);\n};\n\nFMT_API void format_windows_error(buffer<char>& out, int error_code,\n                                  const char* message) noexcept;\nFMT_END_DETAIL_NAMESPACE\n\nFMT_API std::system_error vwindows_error(int error_code, string_view format_str,\n                                         format_args args);\n\n/**\n \\rst\n Constructs a :class:`std::system_error` object with the description\n of the form\n\n .. parsed-literal::\n   *<message>*: *<system-message>*\n\n where *<message>* is the formatted message and *<system-message>* is the\n system message corresponding to the error code.\n *error_code* is a Windows error code as given by ``GetLastError``.\n If *error_code* is not a valid error code such as -1, the system message\n will look like \"error -1\".\n\n **Example**::\n\n   // This throws a system_error with the description\n   //   cannot open file 'madeup': The system cannot find the file specified.\n   // or similar (system message may vary).\n   const char *filename = \"madeup\";\n   LPOFSTRUCT of = LPOFSTRUCT();\n   HFILE file = OpenFile(filename, &of, OF_READ);\n   if (file == HFILE_ERROR) {\n     throw fmt::windows_error(GetLastError(),\n                              \"cannot open file '{}'\", filename);\n   }\n \\endrst\n*/\ntemplate <typename... Args>\nstd::system_error windows_error(int error_code, string_view message,\n                                const Args&... args) {\n  return vwindows_error(error_code, message, fmt::make_format_args(args...));\n}\n\n// Reports a Windows error without throwing an exception.\n// Can be used to report errors from destructors.\nFMT_API void report_windows_error(int error_code, const char* message) noexcept;\n#else\ninline const std::error_category& system_category() noexcept {\n  return std::system_category();\n}\n#endif  // _WIN32\n\n// std::system is not available on some platforms such as iOS (#2248).\n#ifdef __OSX__\ntemplate <typename S, typename... Args, typename Char = char_t<S>>\nvoid say(const S& format_str, Args&&... args) {\n  std::system(format(\"say \\\"{}\\\"\", format(format_str, args...)).c_str());\n}\n#endif\n\n// A buffered file.\nclass buffered_file {\n private:\n  FILE* file_;\n\n  friend class file;\n\n  explicit buffered_file(FILE* f) : file_(f) {}\n\n public:\n  buffered_file(const buffered_file&) = delete;\n  void operator=(const buffered_file&) = delete;\n\n  // Constructs a buffered_file object which doesn't represent any file.\n  buffered_file() noexcept : file_(nullptr) {}\n\n  // Destroys the object closing the file it represents if any.\n  FMT_API ~buffered_file() noexcept;\n\n public:\n  buffered_file(buffered_file&& other) noexcept : file_(other.file_) {\n    other.file_ = nullptr;\n  }\n\n  buffered_file& operator=(buffered_file&& other) {\n    close();\n    file_ = other.file_;\n    other.file_ = nullptr;\n    return *this;\n  }\n\n  // Opens a file.\n  FMT_API buffered_file(cstring_view filename, cstring_view mode);\n\n  // Closes the file.\n  FMT_API void close();\n\n  // Returns the pointer to a FILE object representing this file.\n  FILE* get() const noexcept { return file_; }\n\n  FMT_API int descriptor() const;\n\n  void vprint(string_view format_str, format_args args) {\n    fmt::vprint(file_, format_str, args);\n  }\n\n  template <typename... Args>\n  inline void print(string_view format_str, const Args&... args) {\n    vprint(format_str, fmt::make_format_args(args...));\n  }\n};\n\n#if FMT_USE_FCNTL\n// A file. Closed file is represented by a file object with descriptor -1.\n// Methods that are not declared with noexcept may throw\n// fmt::system_error in case of failure. Note that some errors such as\n// closing the file multiple times will cause a crash on Windows rather\n// than an exception. You can get standard behavior by overriding the\n// invalid parameter handler with _set_invalid_parameter_handler.\nclass FMT_API file {\n private:\n  int fd_;  // File descriptor.\n\n  // Constructs a file object with a given descriptor.\n  explicit file(int fd) : fd_(fd) {}\n\n public:\n  // Possible values for the oflag argument to the constructor.\n  enum {\n    RDONLY = FMT_POSIX(O_RDONLY),  // Open for reading only.\n    WRONLY = FMT_POSIX(O_WRONLY),  // Open for writing only.\n    RDWR = FMT_POSIX(O_RDWR),      // Open for reading and writing.\n    CREATE = FMT_POSIX(O_CREAT),   // Create if the file doesn't exist.\n    APPEND = FMT_POSIX(O_APPEND),  // Open in append mode.\n    TRUNC = FMT_POSIX(O_TRUNC)     // Truncate the content of the file.\n  };\n\n  // Constructs a file object which doesn't represent any file.\n  file() noexcept : fd_(-1) {}\n\n  // Opens a file and constructs a file object representing this file.\n  file(cstring_view path, int oflag);\n\n public:\n  file(const file&) = delete;\n  void operator=(const file&) = delete;\n\n  file(file&& other) noexcept : fd_(other.fd_) { other.fd_ = -1; }\n\n  // Move assignment is not noexcept because close may throw.\n  file& operator=(file&& other) {\n    close();\n    fd_ = other.fd_;\n    other.fd_ = -1;\n    return *this;\n  }\n\n  // Destroys the object closing the file it represents if any.\n  ~file() noexcept;\n\n  // Returns the file descriptor.\n  int descriptor() const noexcept { return fd_; }\n\n  // Closes the file.\n  void close();\n\n  // Returns the file size. The size has signed type for consistency with\n  // stat::st_size.\n  long long size() const;\n\n  // Attempts to read count bytes from the file into the specified buffer.\n  size_t read(void* buffer, size_t count);\n\n  // Attempts to write count bytes from the specified buffer to the file.\n  size_t write(const void* buffer, size_t count);\n\n  // Duplicates a file descriptor with the dup function and returns\n  // the duplicate as a file object.\n  static file dup(int fd);\n\n  // Makes fd be the copy of this file descriptor, closing fd first if\n  // necessary.\n  void dup2(int fd);\n\n  // Makes fd be the copy of this file descriptor, closing fd first if\n  // necessary.\n  void dup2(int fd, std::error_code& ec) noexcept;\n\n  // Creates a pipe setting up read_end and write_end file objects for reading\n  // and writing respectively.\n  static void pipe(file& read_end, file& write_end);\n\n  // Creates a buffered_file object associated with this file and detaches\n  // this file object from the file.\n  buffered_file fdopen(const char* mode);\n};\n\n// Returns the memory page size.\nlong getpagesize();\n\nFMT_BEGIN_DETAIL_NAMESPACE\n\nstruct buffer_size {\n  buffer_size() = default;\n  size_t value = 0;\n  buffer_size operator=(size_t val) const {\n    auto bs = buffer_size();\n    bs.value = val;\n    return bs;\n  }\n};\n\nstruct ostream_params {\n  int oflag = file::WRONLY | file::CREATE | file::TRUNC;\n  size_t buffer_size = BUFSIZ > 32768 ? BUFSIZ : 32768;\n\n  ostream_params() {}\n\n  template <typename... T>\n  ostream_params(T... params, int new_oflag) : ostream_params(params...) {\n    oflag = new_oflag;\n  }\n\n  template <typename... T>\n  ostream_params(T... params, detail::buffer_size bs)\n      : ostream_params(params...) {\n    this->buffer_size = bs.value;\n  }\n\n// Intel has a bug that results in failure to deduce a constructor\n// for empty parameter packs.\n#  if defined(__INTEL_COMPILER) && __INTEL_COMPILER < 2000\n  ostream_params(int new_oflag) : oflag(new_oflag) {}\n  ostream_params(detail::buffer_size bs) : buffer_size(bs.value) {}\n#  endif\n};\n\nFMT_END_DETAIL_NAMESPACE\n\n// Added {} below to work around default constructor error known to\n// occur in Xcode versions 7.2.1 and 8.2.1.\nconstexpr detail::buffer_size buffer_size{};\n\n/** A fast output stream which is not thread-safe. */\nclass FMT_API ostream final : private detail::buffer<char> {\n private:\n  file file_;\n\n  void grow(size_t) override;\n\n  ostream(cstring_view path, const detail::ostream_params& params)\n      : file_(path, params.oflag) {\n    set(new char[params.buffer_size], params.buffer_size);\n  }\n\n public:\n  ostream(ostream&& other)\n      : detail::buffer<char>(other.data(), other.size(), other.capacity()),\n        file_(std::move(other.file_)) {\n    other.clear();\n    other.set(nullptr, 0);\n  }\n  ~ostream() {\n    flush();\n    delete[] data();\n  }\n\n  void flush() {\n    if (size() == 0) return;\n    file_.write(data(), size());\n    clear();\n  }\n\n  template <typename... T>\n  friend ostream output_file(cstring_view path, T... params);\n\n  void close() {\n    flush();\n    file_.close();\n  }\n\n  /**\n    Formats ``args`` according to specifications in ``fmt`` and writes the\n    output to the file.\n   */\n  template <typename... T> void print(format_string<T...> fmt, T&&... args) {\n    vformat_to(detail::buffer_appender<char>(*this), fmt,\n               fmt::make_format_args(args...));\n  }\n};\n\n/**\n  \\rst\n  Opens a file for writing. Supported parameters passed in *params*:\n\n  * ``<integer>``: Flags passed to `open\n    <https://pubs.opengroup.org/onlinepubs/007904875/functions/open.html>`_\n    (``file::WRONLY | file::CREATE | file::TRUNC`` by default)\n  * ``buffer_size=<integer>``: Output buffer size\n\n  **Example**::\n\n    auto out = fmt::output_file(\"guide.txt\");\n    out.print(\"Don't {}\", \"Panic\");\n  \\endrst\n */\ntemplate <typename... T>\ninline ostream output_file(cstring_view path, T... params) {\n  return {path, detail::ostream_params(params...)};\n}\n#endif  // FMT_USE_FCNTL\n\nFMT_MODULE_EXPORT_END\nFMT_END_NAMESPACE\n\n#endif  // FMT_OS_H_\n"
  },
  {
    "path": "native/iosTest/Pods/fmt/include/fmt/ostream.h",
    "content": "// Formatting library for C++ - std::ostream support\n//\n// Copyright (c) 2012 - present, Victor Zverovich\n// All rights reserved.\n//\n// For the license information refer to format.h.\n\n#ifndef FMT_OSTREAM_H_\n#define FMT_OSTREAM_H_\n\n#include <fstream>\n#include <ostream>\n#if defined(_WIN32) && defined(__GLIBCXX__)\n#  include <ext/stdio_filebuf.h>\n#  include <ext/stdio_sync_filebuf.h>\n#elif defined(_WIN32) && defined(_LIBCPP_VERSION)\n#  include <__std_stream>\n#endif\n\n#include \"format.h\"\n\nFMT_BEGIN_NAMESPACE\n\ntemplate <typename OutputIt, typename Char> class basic_printf_context;\n\nnamespace detail {\n\n// Checks if T has a user-defined operator<<.\ntemplate <typename T, typename Char, typename Enable = void>\nclass is_streamable {\n private:\n  template <typename U>\n  static auto test(int)\n      -> bool_constant<sizeof(std::declval<std::basic_ostream<Char>&>()\n                              << std::declval<U>()) != 0>;\n\n  template <typename> static auto test(...) -> std::false_type;\n\n  using result = decltype(test<T>(0));\n\n public:\n  is_streamable() = default;\n\n  static const bool value = result::value;\n};\n\n// Formatting of built-in types and arrays is intentionally disabled because\n// it's handled by standard (non-ostream) formatters.\ntemplate <typename T, typename Char>\nstruct is_streamable<\n    T, Char,\n    enable_if_t<\n        std::is_arithmetic<T>::value || std::is_array<T>::value ||\n        std::is_pointer<T>::value || std::is_same<T, char8_type>::value ||\n        std::is_convertible<T, fmt::basic_string_view<Char>>::value ||\n        std::is_same<T, std_string_view<Char>>::value ||\n        (std::is_convertible<T, int>::value && !std::is_enum<T>::value)>>\n    : std::false_type {};\n\n// Generate a unique explicit instantion in every translation unit using a tag\n// type in an anonymous namespace.\nnamespace {\nstruct file_access_tag {};\n}  // namespace\ntemplate <class Tag, class BufType, FILE* BufType::*FileMemberPtr>\nclass file_access {\n  friend auto get_file(BufType& obj) -> FILE* { return obj.*FileMemberPtr; }\n};\n\n#if FMT_MSC_VERSION\ntemplate class file_access<file_access_tag, std::filebuf,\n                           &std::filebuf::_Myfile>;\nauto get_file(std::filebuf&) -> FILE*;\n#elif defined(_WIN32) && defined(_LIBCPP_VERSION)\ntemplate class file_access<file_access_tag, std::__stdoutbuf<char>,\n                           &std::__stdoutbuf<char>::__file_>;\nauto get_file(std::__stdoutbuf<char>&) -> FILE*;\n#endif\n\ninline bool write_ostream_unicode(std::ostream& os, fmt::string_view data) {\n#if FMT_MSC_VERSION\n  if (auto* buf = dynamic_cast<std::filebuf*>(os.rdbuf()))\n    if (FILE* f = get_file(*buf)) return write_console(f, data);\n#elif defined(_WIN32) && defined(__GLIBCXX__)\n  auto* rdbuf = os.rdbuf();\n  FILE* c_file;\n  if (auto* fbuf = dynamic_cast<__gnu_cxx::stdio_sync_filebuf<char>*>(rdbuf))\n    c_file = fbuf->file();\n  else if (auto* fbuf = dynamic_cast<__gnu_cxx::stdio_filebuf<char>*>(rdbuf))\n    c_file = fbuf->file();\n  else\n    return false;\n  if (c_file) return write_console(c_file, data);\n#elif defined(_WIN32) && defined(_LIBCPP_VERSION)\n  if (auto* buf = dynamic_cast<std::__stdoutbuf<char>*>(os.rdbuf()))\n    if (FILE* f = get_file(*buf)) return write_console(f, data);\n#else\n  ignore_unused(os, data);\n#endif\n  return false;\n}\ninline bool write_ostream_unicode(std::wostream&,\n                                  fmt::basic_string_view<wchar_t>) {\n  return false;\n}\n\n// Write the content of buf to os.\n// It is a separate function rather than a part of vprint to simplify testing.\ntemplate <typename Char>\nvoid write_buffer(std::basic_ostream<Char>& os, buffer<Char>& buf) {\n  const Char* buf_data = buf.data();\n  using unsigned_streamsize = std::make_unsigned<std::streamsize>::type;\n  unsigned_streamsize size = buf.size();\n  unsigned_streamsize max_size = to_unsigned(max_value<std::streamsize>());\n  do {\n    unsigned_streamsize n = size <= max_size ? size : max_size;\n    os.write(buf_data, static_cast<std::streamsize>(n));\n    buf_data += n;\n    size -= n;\n  } while (size != 0);\n}\n\ntemplate <typename Char, typename T>\nvoid format_value(buffer<Char>& buf, const T& value,\n                  locale_ref loc = locale_ref()) {\n  auto&& format_buf = formatbuf<std::basic_streambuf<Char>>(buf);\n  auto&& output = std::basic_ostream<Char>(&format_buf);\n#if !defined(FMT_STATIC_THOUSANDS_SEPARATOR)\n  if (loc) output.imbue(loc.get<std::locale>());\n#endif\n  output << value;\n  output.exceptions(std::ios_base::failbit | std::ios_base::badbit);\n}\n\ntemplate <typename T> struct streamed_view { const T& value; };\n\n}  // namespace detail\n\n// Formats an object of type T that has an overloaded ostream operator<<.\ntemplate <typename Char>\nstruct basic_ostream_formatter : formatter<basic_string_view<Char>, Char> {\n  void set_debug_format() = delete;\n\n  template <typename T, typename OutputIt>\n  auto format(const T& value, basic_format_context<OutputIt, Char>& ctx) const\n      -> OutputIt {\n    auto buffer = basic_memory_buffer<Char>();\n    format_value(buffer, value, ctx.locale());\n    return formatter<basic_string_view<Char>, Char>::format(\n        {buffer.data(), buffer.size()}, ctx);\n  }\n};\n\nusing ostream_formatter = basic_ostream_formatter<char>;\n\ntemplate <typename T, typename Char>\nstruct formatter<detail::streamed_view<T>, Char>\n    : basic_ostream_formatter<Char> {\n  template <typename OutputIt>\n  auto format(detail::streamed_view<T> view,\n              basic_format_context<OutputIt, Char>& ctx) const -> OutputIt {\n    return basic_ostream_formatter<Char>::format(view.value, ctx);\n  }\n};\n\n/**\n  \\rst\n  Returns a view that formats `value` via an ostream ``operator<<``.\n\n  **Example**::\n\n    fmt::print(\"Current thread id: {}\\n\",\n               fmt::streamed(std::this_thread::get_id()));\n  \\endrst\n */\ntemplate <typename T>\nauto streamed(const T& value) -> detail::streamed_view<T> {\n  return {value};\n}\n\nnamespace detail {\n\n// Formats an object of type T that has an overloaded ostream operator<<.\ntemplate <typename T, typename Char>\nstruct fallback_formatter<T, Char, enable_if_t<is_streamable<T, Char>::value>>\n    : basic_ostream_formatter<Char> {\n  using basic_ostream_formatter<Char>::format;\n};\n\ninline void vprint_directly(std::ostream& os, string_view format_str,\n                            format_args args) {\n  auto buffer = memory_buffer();\n  detail::vformat_to(buffer, format_str, args);\n  detail::write_buffer(os, buffer);\n}\n\n}  // namespace detail\n\nFMT_MODULE_EXPORT template <typename Char>\nvoid vprint(std::basic_ostream<Char>& os,\n            basic_string_view<type_identity_t<Char>> format_str,\n            basic_format_args<buffer_context<type_identity_t<Char>>> args) {\n  auto buffer = basic_memory_buffer<Char>();\n  detail::vformat_to(buffer, format_str, args);\n  if (detail::write_ostream_unicode(os, {buffer.data(), buffer.size()})) return;\n  detail::write_buffer(os, buffer);\n}\n\n/**\n  \\rst\n  Prints formatted data to the stream *os*.\n\n  **Example**::\n\n    fmt::print(cerr, \"Don't {}!\", \"panic\");\n  \\endrst\n */\nFMT_MODULE_EXPORT template <typename... T>\nvoid print(std::ostream& os, format_string<T...> fmt, T&&... args) {\n  const auto& vargs = fmt::make_format_args(args...);\n  if (detail::is_utf8())\n    vprint(os, fmt, vargs);\n  else\n    detail::vprint_directly(os, fmt, vargs);\n}\n\nFMT_MODULE_EXPORT\ntemplate <typename... Args>\nvoid print(std::wostream& os,\n           basic_format_string<wchar_t, type_identity_t<Args>...> fmt,\n           Args&&... args) {\n  vprint(os, fmt, fmt::make_format_args<buffer_context<wchar_t>>(args...));\n}\n\nFMT_END_NAMESPACE\n\n#endif  // FMT_OSTREAM_H_\n"
  },
  {
    "path": "native/iosTest/Pods/fmt/include/fmt/printf.h",
    "content": "// Formatting library for C++ - legacy printf implementation\n//\n// Copyright (c) 2012 - 2016, Victor Zverovich\n// All rights reserved.\n//\n// For the license information refer to format.h.\n\n#ifndef FMT_PRINTF_H_\n#define FMT_PRINTF_H_\n\n#include <algorithm>  // std::max\n#include <limits>     // std::numeric_limits\n\n#include \"format.h\"\n\nFMT_BEGIN_NAMESPACE\nFMT_MODULE_EXPORT_BEGIN\n\ntemplate <typename T> struct printf_formatter { printf_formatter() = delete; };\n\ntemplate <typename Char>\nclass basic_printf_parse_context : public basic_format_parse_context<Char> {\n  using basic_format_parse_context<Char>::basic_format_parse_context;\n};\n\ntemplate <typename OutputIt, typename Char> class basic_printf_context {\n private:\n  OutputIt out_;\n  basic_format_args<basic_printf_context> args_;\n\n public:\n  using char_type = Char;\n  using format_arg = basic_format_arg<basic_printf_context>;\n  using parse_context_type = basic_printf_parse_context<Char>;\n  template <typename T> using formatter_type = printf_formatter<T>;\n\n  /**\n    \\rst\n    Constructs a ``printf_context`` object. References to the arguments are\n    stored in the context object so make sure they have appropriate lifetimes.\n    \\endrst\n   */\n  basic_printf_context(OutputIt out,\n                       basic_format_args<basic_printf_context> args)\n      : out_(out), args_(args) {}\n\n  OutputIt out() { return out_; }\n  void advance_to(OutputIt it) { out_ = it; }\n\n  detail::locale_ref locale() { return {}; }\n\n  format_arg arg(int id) const { return args_.get(id); }\n\n  FMT_CONSTEXPR void on_error(const char* message) {\n    detail::error_handler().on_error(message);\n  }\n};\n\nFMT_BEGIN_DETAIL_NAMESPACE\n\n// Checks if a value fits in int - used to avoid warnings about comparing\n// signed and unsigned integers.\ntemplate <bool IsSigned> struct int_checker {\n  template <typename T> static bool fits_in_int(T value) {\n    unsigned max = max_value<int>();\n    return value <= max;\n  }\n  static bool fits_in_int(bool) { return true; }\n};\n\ntemplate <> struct int_checker<true> {\n  template <typename T> static bool fits_in_int(T value) {\n    return value >= (std::numeric_limits<int>::min)() &&\n           value <= max_value<int>();\n  }\n  static bool fits_in_int(int) { return true; }\n};\n\nclass printf_precision_handler {\n public:\n  template <typename T, FMT_ENABLE_IF(std::is_integral<T>::value)>\n  int operator()(T value) {\n    if (!int_checker<std::numeric_limits<T>::is_signed>::fits_in_int(value))\n      FMT_THROW(format_error(\"number is too big\"));\n    return (std::max)(static_cast<int>(value), 0);\n  }\n\n  template <typename T, FMT_ENABLE_IF(!std::is_integral<T>::value)>\n  int operator()(T) {\n    FMT_THROW(format_error(\"precision is not integer\"));\n    return 0;\n  }\n};\n\n// An argument visitor that returns true iff arg is a zero integer.\nclass is_zero_int {\n public:\n  template <typename T, FMT_ENABLE_IF(std::is_integral<T>::value)>\n  bool operator()(T value) {\n    return value == 0;\n  }\n\n  template <typename T, FMT_ENABLE_IF(!std::is_integral<T>::value)>\n  bool operator()(T) {\n    return false;\n  }\n};\n\ntemplate <typename T> struct make_unsigned_or_bool : std::make_unsigned<T> {};\n\ntemplate <> struct make_unsigned_or_bool<bool> { using type = bool; };\n\ntemplate <typename T, typename Context> class arg_converter {\n private:\n  using char_type = typename Context::char_type;\n\n  basic_format_arg<Context>& arg_;\n  char_type type_;\n\n public:\n  arg_converter(basic_format_arg<Context>& arg, char_type type)\n      : arg_(arg), type_(type) {}\n\n  void operator()(bool value) {\n    if (type_ != 's') operator()<bool>(value);\n  }\n\n  template <typename U, FMT_ENABLE_IF(std::is_integral<U>::value)>\n  void operator()(U value) {\n    bool is_signed = type_ == 'd' || type_ == 'i';\n    using target_type = conditional_t<std::is_same<T, void>::value, U, T>;\n    if (const_check(sizeof(target_type) <= sizeof(int))) {\n      // Extra casts are used to silence warnings.\n      if (is_signed) {\n        arg_ = detail::make_arg<Context>(\n            static_cast<int>(static_cast<target_type>(value)));\n      } else {\n        using unsigned_type = typename make_unsigned_or_bool<target_type>::type;\n        arg_ = detail::make_arg<Context>(\n            static_cast<unsigned>(static_cast<unsigned_type>(value)));\n      }\n    } else {\n      if (is_signed) {\n        // glibc's printf doesn't sign extend arguments of smaller types:\n        //   std::printf(\"%lld\", -42);  // prints \"4294967254\"\n        // but we don't have to do the same because it's a UB.\n        arg_ = detail::make_arg<Context>(static_cast<long long>(value));\n      } else {\n        arg_ = detail::make_arg<Context>(\n            static_cast<typename make_unsigned_or_bool<U>::type>(value));\n      }\n    }\n  }\n\n  template <typename U, FMT_ENABLE_IF(!std::is_integral<U>::value)>\n  void operator()(U) {}  // No conversion needed for non-integral types.\n};\n\n// Converts an integer argument to T for printf, if T is an integral type.\n// If T is void, the argument is converted to corresponding signed or unsigned\n// type depending on the type specifier: 'd' and 'i' - signed, other -\n// unsigned).\ntemplate <typename T, typename Context, typename Char>\nvoid convert_arg(basic_format_arg<Context>& arg, Char type) {\n  visit_format_arg(arg_converter<T, Context>(arg, type), arg);\n}\n\n// Converts an integer argument to char for printf.\ntemplate <typename Context> class char_converter {\n private:\n  basic_format_arg<Context>& arg_;\n\n public:\n  explicit char_converter(basic_format_arg<Context>& arg) : arg_(arg) {}\n\n  template <typename T, FMT_ENABLE_IF(std::is_integral<T>::value)>\n  void operator()(T value) {\n    arg_ = detail::make_arg<Context>(\n        static_cast<typename Context::char_type>(value));\n  }\n\n  template <typename T, FMT_ENABLE_IF(!std::is_integral<T>::value)>\n  void operator()(T) {}  // No conversion needed for non-integral types.\n};\n\n// An argument visitor that return a pointer to a C string if argument is a\n// string or null otherwise.\ntemplate <typename Char> struct get_cstring {\n  template <typename T> const Char* operator()(T) { return nullptr; }\n  const Char* operator()(const Char* s) { return s; }\n};\n\n// Checks if an argument is a valid printf width specifier and sets\n// left alignment if it is negative.\ntemplate <typename Char> class printf_width_handler {\n private:\n  using format_specs = basic_format_specs<Char>;\n\n  format_specs& specs_;\n\n public:\n  explicit printf_width_handler(format_specs& specs) : specs_(specs) {}\n\n  template <typename T, FMT_ENABLE_IF(std::is_integral<T>::value)>\n  unsigned operator()(T value) {\n    auto width = static_cast<uint32_or_64_or_128_t<T>>(value);\n    if (detail::is_negative(value)) {\n      specs_.align = align::left;\n      width = 0 - width;\n    }\n    unsigned int_max = max_value<int>();\n    if (width > int_max) FMT_THROW(format_error(\"number is too big\"));\n    return static_cast<unsigned>(width);\n  }\n\n  template <typename T, FMT_ENABLE_IF(!std::is_integral<T>::value)>\n  unsigned operator()(T) {\n    FMT_THROW(format_error(\"width is not integer\"));\n    return 0;\n  }\n};\n\n// The ``printf`` argument formatter.\ntemplate <typename OutputIt, typename Char>\nclass printf_arg_formatter : public arg_formatter<Char> {\n private:\n  using base = arg_formatter<Char>;\n  using context_type = basic_printf_context<OutputIt, Char>;\n  using format_specs = basic_format_specs<Char>;\n\n  context_type& context_;\n\n  OutputIt write_null_pointer(bool is_string = false) {\n    auto s = this->specs;\n    s.type = presentation_type::none;\n    return write_bytes(this->out, is_string ? \"(null)\" : \"(nil)\", s);\n  }\n\n public:\n  printf_arg_formatter(OutputIt iter, format_specs& s, context_type& ctx)\n      : base{iter, s, locale_ref()}, context_(ctx) {}\n\n  OutputIt operator()(monostate value) { return base::operator()(value); }\n\n  template <typename T, FMT_ENABLE_IF(detail::is_integral<T>::value)>\n  OutputIt operator()(T value) {\n    // MSVC2013 fails to compile separate overloads for bool and Char so use\n    // std::is_same instead.\n    if (std::is_same<T, Char>::value) {\n      format_specs fmt_specs = this->specs;\n      if (fmt_specs.type != presentation_type::none &&\n          fmt_specs.type != presentation_type::chr) {\n        return (*this)(static_cast<int>(value));\n      }\n      fmt_specs.sign = sign::none;\n      fmt_specs.alt = false;\n      fmt_specs.fill[0] = ' ';  // Ignore '0' flag for char types.\n      // align::numeric needs to be overwritten here since the '0' flag is\n      // ignored for non-numeric types\n      if (fmt_specs.align == align::none || fmt_specs.align == align::numeric)\n        fmt_specs.align = align::right;\n      return write<Char>(this->out, static_cast<Char>(value), fmt_specs);\n    }\n    return base::operator()(value);\n  }\n\n  template <typename T, FMT_ENABLE_IF(std::is_floating_point<T>::value)>\n  OutputIt operator()(T value) {\n    return base::operator()(value);\n  }\n\n  /** Formats a null-terminated C string. */\n  OutputIt operator()(const char* value) {\n    if (value) return base::operator()(value);\n    return write_null_pointer(this->specs.type != presentation_type::pointer);\n  }\n\n  /** Formats a null-terminated wide C string. */\n  OutputIt operator()(const wchar_t* value) {\n    if (value) return base::operator()(value);\n    return write_null_pointer(this->specs.type != presentation_type::pointer);\n  }\n\n  OutputIt operator()(basic_string_view<Char> value) {\n    return base::operator()(value);\n  }\n\n  /** Formats a pointer. */\n  OutputIt operator()(const void* value) {\n    return value ? base::operator()(value) : write_null_pointer();\n  }\n\n  /** Formats an argument of a custom (user-defined) type. */\n  OutputIt operator()(typename basic_format_arg<context_type>::handle handle) {\n    auto parse_ctx =\n        basic_printf_parse_context<Char>(basic_string_view<Char>());\n    handle.format(parse_ctx, context_);\n    return this->out;\n  }\n};\n\ntemplate <typename Char>\nvoid parse_flags(basic_format_specs<Char>& specs, const Char*& it,\n                 const Char* end) {\n  for (; it != end; ++it) {\n    switch (*it) {\n    case '-':\n      specs.align = align::left;\n      break;\n    case '+':\n      specs.sign = sign::plus;\n      break;\n    case '0':\n      specs.fill[0] = '0';\n      break;\n    case ' ':\n      if (specs.sign != sign::plus) {\n        specs.sign = sign::space;\n      }\n      break;\n    case '#':\n      specs.alt = true;\n      break;\n    default:\n      return;\n    }\n  }\n}\n\ntemplate <typename Char, typename GetArg>\nint parse_header(const Char*& it, const Char* end,\n                 basic_format_specs<Char>& specs, GetArg get_arg) {\n  int arg_index = -1;\n  Char c = *it;\n  if (c >= '0' && c <= '9') {\n    // Parse an argument index (if followed by '$') or a width possibly\n    // preceded with '0' flag(s).\n    int value = parse_nonnegative_int(it, end, -1);\n    if (it != end && *it == '$') {  // value is an argument index\n      ++it;\n      arg_index = value != -1 ? value : max_value<int>();\n    } else {\n      if (c == '0') specs.fill[0] = '0';\n      if (value != 0) {\n        // Nonzero value means that we parsed width and don't need to\n        // parse it or flags again, so return now.\n        if (value == -1) FMT_THROW(format_error(\"number is too big\"));\n        specs.width = value;\n        return arg_index;\n      }\n    }\n  }\n  parse_flags(specs, it, end);\n  // Parse width.\n  if (it != end) {\n    if (*it >= '0' && *it <= '9') {\n      specs.width = parse_nonnegative_int(it, end, -1);\n      if (specs.width == -1) FMT_THROW(format_error(\"number is too big\"));\n    } else if (*it == '*') {\n      ++it;\n      specs.width = static_cast<int>(visit_format_arg(\n          detail::printf_width_handler<Char>(specs), get_arg(-1)));\n    }\n  }\n  return arg_index;\n}\n\ntemplate <typename Char, typename Context>\nvoid vprintf(buffer<Char>& buf, basic_string_view<Char> format,\n             basic_format_args<Context> args) {\n  using OutputIt = buffer_appender<Char>;\n  auto out = OutputIt(buf);\n  auto context = basic_printf_context<OutputIt, Char>(out, args);\n  auto parse_ctx = basic_printf_parse_context<Char>(format);\n\n  // Returns the argument with specified index or, if arg_index is -1, the next\n  // argument.\n  auto get_arg = [&](int arg_index) {\n    if (arg_index < 0)\n      arg_index = parse_ctx.next_arg_id();\n    else\n      parse_ctx.check_arg_id(--arg_index);\n    return detail::get_arg(context, arg_index);\n  };\n\n  const Char* start = parse_ctx.begin();\n  const Char* end = parse_ctx.end();\n  auto it = start;\n  while (it != end) {\n    if (!detail::find<false, Char>(it, end, '%', it)) {\n      it = end;  // detail::find leaves it == nullptr if it doesn't find '%'\n      break;\n    }\n    Char c = *it++;\n    if (it != end && *it == c) {\n      out = detail::write(\n          out, basic_string_view<Char>(start, detail::to_unsigned(it - start)));\n      start = ++it;\n      continue;\n    }\n    out = detail::write(out, basic_string_view<Char>(\n                                 start, detail::to_unsigned(it - 1 - start)));\n\n    basic_format_specs<Char> specs;\n    specs.align = align::right;\n\n    // Parse argument index, flags and width.\n    int arg_index = parse_header(it, end, specs, get_arg);\n    if (arg_index == 0) parse_ctx.on_error(\"argument not found\");\n\n    // Parse precision.\n    if (it != end && *it == '.') {\n      ++it;\n      c = it != end ? *it : 0;\n      if ('0' <= c && c <= '9') {\n        specs.precision = parse_nonnegative_int(it, end, 0);\n      } else if (c == '*') {\n        ++it;\n        specs.precision = static_cast<int>(\n            visit_format_arg(detail::printf_precision_handler(), get_arg(-1)));\n      } else {\n        specs.precision = 0;\n      }\n    }\n\n    auto arg = get_arg(arg_index);\n    // For d, i, o, u, x, and X conversion specifiers, if a precision is\n    // specified, the '0' flag is ignored\n    if (specs.precision >= 0 && arg.is_integral())\n      specs.fill[0] =\n          ' ';  // Ignore '0' flag for non-numeric types or if '-' present.\n    if (specs.precision >= 0 && arg.type() == detail::type::cstring_type) {\n      auto str = visit_format_arg(detail::get_cstring<Char>(), arg);\n      auto str_end = str + specs.precision;\n      auto nul = std::find(str, str_end, Char());\n      arg = detail::make_arg<basic_printf_context<OutputIt, Char>>(\n          basic_string_view<Char>(\n              str, detail::to_unsigned(nul != str_end ? nul - str\n                                                      : specs.precision)));\n    }\n    if (specs.alt && visit_format_arg(detail::is_zero_int(), arg))\n      specs.alt = false;\n    if (specs.fill[0] == '0') {\n      if (arg.is_arithmetic() && specs.align != align::left)\n        specs.align = align::numeric;\n      else\n        specs.fill[0] = ' ';  // Ignore '0' flag for non-numeric types or if '-'\n                              // flag is also present.\n    }\n\n    // Parse length and convert the argument to the required type.\n    c = it != end ? *it++ : 0;\n    Char t = it != end ? *it : 0;\n    using detail::convert_arg;\n    switch (c) {\n    case 'h':\n      if (t == 'h') {\n        ++it;\n        t = it != end ? *it : 0;\n        convert_arg<signed char>(arg, t);\n      } else {\n        convert_arg<short>(arg, t);\n      }\n      break;\n    case 'l':\n      if (t == 'l') {\n        ++it;\n        t = it != end ? *it : 0;\n        convert_arg<long long>(arg, t);\n      } else {\n        convert_arg<long>(arg, t);\n      }\n      break;\n    case 'j':\n      convert_arg<intmax_t>(arg, t);\n      break;\n    case 'z':\n      convert_arg<size_t>(arg, t);\n      break;\n    case 't':\n      convert_arg<std::ptrdiff_t>(arg, t);\n      break;\n    case 'L':\n      // printf produces garbage when 'L' is omitted for long double, no\n      // need to do the same.\n      break;\n    default:\n      --it;\n      convert_arg<void>(arg, c);\n    }\n\n    // Parse type.\n    if (it == end) FMT_THROW(format_error(\"invalid format string\"));\n    char type = static_cast<char>(*it++);\n    if (arg.is_integral()) {\n      // Normalize type.\n      switch (type) {\n      case 'i':\n      case 'u':\n        type = 'd';\n        break;\n      case 'c':\n        visit_format_arg(\n            detail::char_converter<basic_printf_context<OutputIt, Char>>(arg),\n            arg);\n        break;\n      }\n    }\n    specs.type = parse_presentation_type(type);\n    if (specs.type == presentation_type::none)\n      parse_ctx.on_error(\"invalid type specifier\");\n\n    start = it;\n\n    // Format argument.\n    out = visit_format_arg(\n        detail::printf_arg_formatter<OutputIt, Char>(out, specs, context), arg);\n  }\n  detail::write(out, basic_string_view<Char>(start, to_unsigned(it - start)));\n}\nFMT_END_DETAIL_NAMESPACE\n\ntemplate <typename Char>\nusing basic_printf_context_t =\n    basic_printf_context<detail::buffer_appender<Char>, Char>;\n\nusing printf_context = basic_printf_context_t<char>;\nusing wprintf_context = basic_printf_context_t<wchar_t>;\n\nusing printf_args = basic_format_args<printf_context>;\nusing wprintf_args = basic_format_args<wprintf_context>;\n\n/**\n  \\rst\n  Constructs an `~fmt::format_arg_store` object that contains references to\n  arguments and can be implicitly converted to `~fmt::printf_args`.\n  \\endrst\n */\ntemplate <typename... T>\ninline auto make_printf_args(const T&... args)\n    -> format_arg_store<printf_context, T...> {\n  return {args...};\n}\n\n/**\n  \\rst\n  Constructs an `~fmt::format_arg_store` object that contains references to\n  arguments and can be implicitly converted to `~fmt::wprintf_args`.\n  \\endrst\n */\ntemplate <typename... T>\ninline auto make_wprintf_args(const T&... args)\n    -> format_arg_store<wprintf_context, T...> {\n  return {args...};\n}\n\ntemplate <typename S, typename Char = char_t<S>>\ninline auto vsprintf(\n    const S& fmt,\n    basic_format_args<basic_printf_context_t<type_identity_t<Char>>> args)\n    -> std::basic_string<Char> {\n  basic_memory_buffer<Char> buffer;\n  vprintf(buffer, detail::to_string_view(fmt), args);\n  return to_string(buffer);\n}\n\n/**\n  \\rst\n  Formats arguments and returns the result as a string.\n\n  **Example**::\n\n    std::string message = fmt::sprintf(\"The answer is %d\", 42);\n  \\endrst\n*/\ntemplate <typename S, typename... T,\n          typename Char = enable_if_t<detail::is_string<S>::value, char_t<S>>>\ninline auto sprintf(const S& fmt, const T&... args) -> std::basic_string<Char> {\n  using context = basic_printf_context_t<Char>;\n  return vsprintf(detail::to_string_view(fmt),\n                  fmt::make_format_args<context>(args...));\n}\n\ntemplate <typename S, typename Char = char_t<S>>\ninline auto vfprintf(\n    std::FILE* f, const S& fmt,\n    basic_format_args<basic_printf_context_t<type_identity_t<Char>>> args)\n    -> int {\n  basic_memory_buffer<Char> buffer;\n  vprintf(buffer, detail::to_string_view(fmt), args);\n  size_t size = buffer.size();\n  return std::fwrite(buffer.data(), sizeof(Char), size, f) < size\n             ? -1\n             : static_cast<int>(size);\n}\n\n/**\n  \\rst\n  Prints formatted data to the file *f*.\n\n  **Example**::\n\n    fmt::fprintf(stderr, \"Don't %s!\", \"panic\");\n  \\endrst\n */\ntemplate <typename S, typename... T, typename Char = char_t<S>>\ninline auto fprintf(std::FILE* f, const S& fmt, const T&... args) -> int {\n  using context = basic_printf_context_t<Char>;\n  return vfprintf(f, detail::to_string_view(fmt),\n                  fmt::make_format_args<context>(args...));\n}\n\ntemplate <typename S, typename Char = char_t<S>>\ninline auto vprintf(\n    const S& fmt,\n    basic_format_args<basic_printf_context_t<type_identity_t<Char>>> args)\n    -> int {\n  return vfprintf(stdout, detail::to_string_view(fmt), args);\n}\n\n/**\n  \\rst\n  Prints formatted data to ``stdout``.\n\n  **Example**::\n\n    fmt::printf(\"Elapsed time: %.2f seconds\", 1.23);\n  \\endrst\n */\ntemplate <typename S, typename... T, FMT_ENABLE_IF(detail::is_string<S>::value)>\ninline auto printf(const S& fmt, const T&... args) -> int {\n  return vprintf(\n      detail::to_string_view(fmt),\n      fmt::make_format_args<basic_printf_context_t<char_t<S>>>(args...));\n}\n\nFMT_MODULE_EXPORT_END\nFMT_END_NAMESPACE\n\n#endif  // FMT_PRINTF_H_\n"
  },
  {
    "path": "native/iosTest/Pods/fmt/include/fmt/ranges.h",
    "content": "// Formatting library for C++ - experimental range support\n//\n// Copyright (c) 2012 - present, Victor Zverovich\n// All rights reserved.\n//\n// For the license information refer to format.h.\n//\n// Copyright (c) 2018 - present, Remotion (Igor Schulz)\n// All Rights Reserved\n// {fmt} support for ranges, containers and types tuple interface.\n\n#ifndef FMT_RANGES_H_\n#define FMT_RANGES_H_\n\n#include <initializer_list>\n#include <tuple>\n#include <type_traits>\n\n#include \"format.h\"\n\nFMT_BEGIN_NAMESPACE\n\nnamespace detail {\n\ntemplate <typename RangeT, typename OutputIterator>\nOutputIterator copy(const RangeT& range, OutputIterator out) {\n  for (auto it = range.begin(), end = range.end(); it != end; ++it)\n    *out++ = *it;\n  return out;\n}\n\ntemplate <typename OutputIterator>\nOutputIterator copy(const char* str, OutputIterator out) {\n  while (*str) *out++ = *str++;\n  return out;\n}\n\ntemplate <typename OutputIterator>\nOutputIterator copy(char ch, OutputIterator out) {\n  *out++ = ch;\n  return out;\n}\n\ntemplate <typename OutputIterator>\nOutputIterator copy(wchar_t ch, OutputIterator out) {\n  *out++ = ch;\n  return out;\n}\n\n// Returns true if T has a std::string-like interface, like std::string_view.\ntemplate <typename T> class is_std_string_like {\n  template <typename U>\n  static auto check(U* p)\n      -> decltype((void)p->find('a'), p->length(), (void)p->data(), int());\n  template <typename> static void check(...);\n\n public:\n  static constexpr const bool value =\n      is_string<T>::value ||\n      std::is_convertible<T, std_string_view<char>>::value ||\n      !std::is_void<decltype(check<T>(nullptr))>::value;\n};\n\ntemplate <typename Char>\nstruct is_std_string_like<fmt::basic_string_view<Char>> : std::true_type {};\n\ntemplate <typename T> class is_map {\n  template <typename U> static auto check(U*) -> typename U::mapped_type;\n  template <typename> static void check(...);\n\n public:\n#ifdef FMT_FORMAT_MAP_AS_LIST\n  static constexpr const bool value = false;\n#else\n  static constexpr const bool value =\n      !std::is_void<decltype(check<T>(nullptr))>::value;\n#endif\n};\n\ntemplate <typename T> class is_set {\n  template <typename U> static auto check(U*) -> typename U::key_type;\n  template <typename> static void check(...);\n\n public:\n#ifdef FMT_FORMAT_SET_AS_LIST\n  static constexpr const bool value = false;\n#else\n  static constexpr const bool value =\n      !std::is_void<decltype(check<T>(nullptr))>::value && !is_map<T>::value;\n#endif\n};\n\ntemplate <typename... Ts> struct conditional_helper {};\n\ntemplate <typename T, typename _ = void> struct is_range_ : std::false_type {};\n\n#if !FMT_MSC_VERSION || FMT_MSC_VERSION > 1800\n\n#  define FMT_DECLTYPE_RETURN(val)  \\\n    ->decltype(val) { return val; } \\\n    static_assert(                  \\\n        true, \"\")  // This makes it so that a semicolon is required after the\n                   // macro, which helps clang-format handle the formatting.\n\n// C array overload\ntemplate <typename T, std::size_t N>\nauto range_begin(const T (&arr)[N]) -> const T* {\n  return arr;\n}\ntemplate <typename T, std::size_t N>\nauto range_end(const T (&arr)[N]) -> const T* {\n  return arr + N;\n}\n\ntemplate <typename T, typename Enable = void>\nstruct has_member_fn_begin_end_t : std::false_type {};\n\ntemplate <typename T>\nstruct has_member_fn_begin_end_t<T, void_t<decltype(std::declval<T>().begin()),\n                                           decltype(std::declval<T>().end())>>\n    : std::true_type {};\n\n// Member function overload\ntemplate <typename T>\nauto range_begin(T&& rng) FMT_DECLTYPE_RETURN(static_cast<T&&>(rng).begin());\ntemplate <typename T>\nauto range_end(T&& rng) FMT_DECLTYPE_RETURN(static_cast<T&&>(rng).end());\n\n// ADL overload. Only participates in overload resolution if member functions\n// are not found.\ntemplate <typename T>\nauto range_begin(T&& rng)\n    -> enable_if_t<!has_member_fn_begin_end_t<T&&>::value,\n                   decltype(begin(static_cast<T&&>(rng)))> {\n  return begin(static_cast<T&&>(rng));\n}\ntemplate <typename T>\nauto range_end(T&& rng) -> enable_if_t<!has_member_fn_begin_end_t<T&&>::value,\n                                       decltype(end(static_cast<T&&>(rng)))> {\n  return end(static_cast<T&&>(rng));\n}\n\ntemplate <typename T, typename Enable = void>\nstruct has_const_begin_end : std::false_type {};\ntemplate <typename T, typename Enable = void>\nstruct has_mutable_begin_end : std::false_type {};\n\ntemplate <typename T>\nstruct has_const_begin_end<\n    T,\n    void_t<\n        decltype(detail::range_begin(std::declval<const remove_cvref_t<T>&>())),\n        decltype(detail::range_end(std::declval<const remove_cvref_t<T>&>()))>>\n    : std::true_type {};\n\ntemplate <typename T>\nstruct has_mutable_begin_end<\n    T, void_t<decltype(detail::range_begin(std::declval<T>())),\n              decltype(detail::range_end(std::declval<T>())),\n              enable_if_t<std::is_copy_constructible<T>::value>>>\n    : std::true_type {};\n\ntemplate <typename T>\nstruct is_range_<T, void>\n    : std::integral_constant<bool, (has_const_begin_end<T>::value ||\n                                    has_mutable_begin_end<T>::value)> {};\n#  undef FMT_DECLTYPE_RETURN\n#endif\n\n// tuple_size and tuple_element check.\ntemplate <typename T> class is_tuple_like_ {\n  template <typename U>\n  static auto check(U* p) -> decltype(std::tuple_size<U>::value, int());\n  template <typename> static void check(...);\n\n public:\n  static constexpr const bool value =\n      !std::is_void<decltype(check<T>(nullptr))>::value;\n};\n\n// Check for integer_sequence\n#if defined(__cpp_lib_integer_sequence) || FMT_MSC_VERSION >= 1900\ntemplate <typename T, T... N>\nusing integer_sequence = std::integer_sequence<T, N...>;\ntemplate <size_t... N> using index_sequence = std::index_sequence<N...>;\ntemplate <size_t N> using make_index_sequence = std::make_index_sequence<N>;\n#else\ntemplate <typename T, T... N> struct integer_sequence {\n  using value_type = T;\n\n  static FMT_CONSTEXPR size_t size() { return sizeof...(N); }\n};\n\ntemplate <size_t... N> using index_sequence = integer_sequence<size_t, N...>;\n\ntemplate <typename T, size_t N, T... Ns>\nstruct make_integer_sequence : make_integer_sequence<T, N - 1, N - 1, Ns...> {};\ntemplate <typename T, T... Ns>\nstruct make_integer_sequence<T, 0, Ns...> : integer_sequence<T, Ns...> {};\n\ntemplate <size_t N>\nusing make_index_sequence = make_integer_sequence<size_t, N>;\n#endif\n\ntemplate <typename T>\nusing tuple_index_sequence = make_index_sequence<std::tuple_size<T>::value>;\n\ntemplate <typename T, typename C, bool = is_tuple_like_<T>::value>\nclass is_tuple_formattable_ {\n public:\n  static constexpr const bool value = false;\n};\ntemplate <typename T, typename C> class is_tuple_formattable_<T, C, true> {\n  template <std::size_t... I>\n  static std::true_type check2(index_sequence<I...>,\n                               integer_sequence<bool, (I == I)...>);\n  static std::false_type check2(...);\n  template <std::size_t... I>\n  static decltype(check2(\n      index_sequence<I...>{},\n      integer_sequence<\n          bool, (is_formattable<typename std::tuple_element<I, T>::type,\n                                C>::value)...>{})) check(index_sequence<I...>);\n\n public:\n  static constexpr const bool value =\n      decltype(check(tuple_index_sequence<T>{}))::value;\n};\n\ntemplate <class Tuple, class F, size_t... Is>\nvoid for_each(index_sequence<Is...>, Tuple&& tup, F&& f) noexcept {\n  using std::get;\n  // using free function get<I>(T) now.\n  const int _[] = {0, ((void)f(get<Is>(tup)), 0)...};\n  (void)_;  // blocks warnings\n}\n\ntemplate <class T>\nFMT_CONSTEXPR make_index_sequence<std::tuple_size<T>::value> get_indexes(\n    T const&) {\n  return {};\n}\n\ntemplate <class Tuple, class F> void for_each(Tuple&& tup, F&& f) {\n  const auto indexes = get_indexes(tup);\n  for_each(indexes, std::forward<Tuple>(tup), std::forward<F>(f));\n}\n\n#if FMT_MSC_VERSION && FMT_MSC_VERSION < 1920\n// Older MSVC doesn't get the reference type correctly for arrays.\ntemplate <typename R> struct range_reference_type_impl {\n  using type = decltype(*detail::range_begin(std::declval<R&>()));\n};\n\ntemplate <typename T, std::size_t N> struct range_reference_type_impl<T[N]> {\n  using type = T&;\n};\n\ntemplate <typename T>\nusing range_reference_type = typename range_reference_type_impl<T>::type;\n#else\ntemplate <typename Range>\nusing range_reference_type =\n    decltype(*detail::range_begin(std::declval<Range&>()));\n#endif\n\n// We don't use the Range's value_type for anything, but we do need the Range's\n// reference type, with cv-ref stripped.\ntemplate <typename Range>\nusing uncvref_type = remove_cvref_t<range_reference_type<Range>>;\n\ntemplate <typename Range>\nusing uncvref_first_type =\n    remove_cvref_t<decltype(std::declval<range_reference_type<Range>>().first)>;\n\ntemplate <typename Range>\nusing uncvref_second_type = remove_cvref_t<\n    decltype(std::declval<range_reference_type<Range>>().second)>;\n\ntemplate <typename OutputIt> OutputIt write_delimiter(OutputIt out) {\n  *out++ = ',';\n  *out++ = ' ';\n  return out;\n}\n\ntemplate <typename Char, typename OutputIt>\nauto write_range_entry(OutputIt out, basic_string_view<Char> str) -> OutputIt {\n  return write_escaped_string(out, str);\n}\n\ntemplate <typename Char, typename OutputIt, typename T,\n          FMT_ENABLE_IF(std::is_convertible<T, std_string_view<char>>::value)>\ninline auto write_range_entry(OutputIt out, const T& str) -> OutputIt {\n  auto sv = std_string_view<Char>(str);\n  return write_range_entry<Char>(out, basic_string_view<Char>(sv));\n}\n\ntemplate <typename Char, typename OutputIt, typename Arg,\n          FMT_ENABLE_IF(std::is_same<Arg, Char>::value)>\nOutputIt write_range_entry(OutputIt out, const Arg v) {\n  return write_escaped_char(out, v);\n}\n\ntemplate <\n    typename Char, typename OutputIt, typename Arg,\n    FMT_ENABLE_IF(!is_std_string_like<typename std::decay<Arg>::type>::value &&\n                  !std::is_same<Arg, Char>::value)>\nOutputIt write_range_entry(OutputIt out, const Arg& v) {\n  return write<Char>(out, v);\n}\n\n}  // namespace detail\n\ntemplate <typename T> struct is_tuple_like {\n  static constexpr const bool value =\n      detail::is_tuple_like_<T>::value && !detail::is_range_<T>::value;\n};\n\ntemplate <typename T, typename C> struct is_tuple_formattable {\n  static constexpr const bool value =\n      detail::is_tuple_formattable_<T, C>::value;\n};\n\ntemplate <typename TupleT, typename Char>\nstruct formatter<TupleT, Char,\n                 enable_if_t<fmt::is_tuple_like<TupleT>::value &&\n                             fmt::is_tuple_formattable<TupleT, Char>::value>> {\n private:\n  basic_string_view<Char> separator_ = detail::string_literal<Char, ',', ' '>{};\n  basic_string_view<Char> opening_bracket_ =\n      detail::string_literal<Char, '('>{};\n  basic_string_view<Char> closing_bracket_ =\n      detail::string_literal<Char, ')'>{};\n\n  // C++11 generic lambda for format().\n  template <typename FormatContext> struct format_each {\n    template <typename T> void operator()(const T& v) {\n      if (i > 0) out = detail::copy_str<Char>(separator, out);\n      out = detail::write_range_entry<Char>(out, v);\n      ++i;\n    }\n    int i;\n    typename FormatContext::iterator& out;\n    basic_string_view<Char> separator;\n  };\n\n public:\n  FMT_CONSTEXPR formatter() {}\n\n  FMT_CONSTEXPR void set_separator(basic_string_view<Char> sep) {\n    separator_ = sep;\n  }\n\n  FMT_CONSTEXPR void set_brackets(basic_string_view<Char> open,\n                                  basic_string_view<Char> close) {\n    opening_bracket_ = open;\n    closing_bracket_ = close;\n  }\n\n  template <typename ParseContext>\n  FMT_CONSTEXPR auto parse(ParseContext& ctx) -> decltype(ctx.begin()) {\n    return ctx.begin();\n  }\n\n  template <typename FormatContext = format_context>\n  auto format(const TupleT& values, FormatContext& ctx) const\n      -> decltype(ctx.out()) {\n    auto out = ctx.out();\n    out = detail::copy_str<Char>(opening_bracket_, out);\n    detail::for_each(values, format_each<FormatContext>{0, out, separator_});\n    out = detail::copy_str<Char>(closing_bracket_, out);\n    return out;\n  }\n};\n\ntemplate <typename T, typename Char> struct is_range {\n  static constexpr const bool value =\n      detail::is_range_<T>::value && !detail::is_std_string_like<T>::value &&\n      !std::is_convertible<T, std::basic_string<Char>>::value &&\n      !std::is_convertible<T, detail::std_string_view<Char>>::value;\n};\n\nnamespace detail {\ntemplate <typename Context> struct range_mapper {\n  using mapper = arg_mapper<Context>;\n\n  template <typename T,\n            FMT_ENABLE_IF(has_formatter<remove_cvref_t<T>, Context>::value)>\n  static auto map(T&& value) -> T&& {\n    return static_cast<T&&>(value);\n  }\n  template <typename T,\n            FMT_ENABLE_IF(!has_formatter<remove_cvref_t<T>, Context>::value)>\n  static auto map(T&& value)\n      -> decltype(mapper().map(static_cast<T&&>(value))) {\n    return mapper().map(static_cast<T&&>(value));\n  }\n};\n\ntemplate <typename Char, typename Element>\nusing range_formatter_type = conditional_t<\n    is_formattable<Element, Char>::value,\n    formatter<remove_cvref_t<decltype(range_mapper<buffer_context<Char>>{}.map(\n                  std::declval<Element>()))>,\n              Char>,\n    fallback_formatter<Element, Char>>;\n\ntemplate <typename R>\nusing maybe_const_range =\n    conditional_t<has_const_begin_end<R>::value, const R, R>;\n\n// Workaround a bug in MSVC 2015 and earlier.\n#if !FMT_MSC_VERSION || FMT_MSC_VERSION >= 1910\ntemplate <typename R, typename Char>\nstruct is_formattable_delayed\n    : disjunction<\n          is_formattable<uncvref_type<maybe_const_range<R>>, Char>,\n          has_fallback_formatter<uncvref_type<maybe_const_range<R>>, Char>> {};\n#endif\n\n}  // namespace detail\n\ntemplate <typename T, typename Char, typename Enable = void>\nstruct range_formatter;\n\ntemplate <typename T, typename Char>\nstruct range_formatter<\n    T, Char,\n    enable_if_t<conjunction<\n        std::is_same<T, remove_cvref_t<T>>,\n        disjunction<is_formattable<T, Char>,\n                    detail::has_fallback_formatter<T, Char>>>::value>> {\n private:\n  detail::range_formatter_type<Char, T> underlying_;\n  bool custom_specs_ = false;\n  basic_string_view<Char> separator_ = detail::string_literal<Char, ',', ' '>{};\n  basic_string_view<Char> opening_bracket_ =\n      detail::string_literal<Char, '['>{};\n  basic_string_view<Char> closing_bracket_ =\n      detail::string_literal<Char, ']'>{};\n\n  template <class U>\n  FMT_CONSTEXPR static auto maybe_set_debug_format(U& u, int)\n      -> decltype(u.set_debug_format()) {\n    u.set_debug_format();\n  }\n\n  template <class U>\n  FMT_CONSTEXPR static void maybe_set_debug_format(U&, ...) {}\n\n  FMT_CONSTEXPR void maybe_set_debug_format() {\n    maybe_set_debug_format(underlying_, 0);\n  }\n\n public:\n  FMT_CONSTEXPR range_formatter() {}\n\n  FMT_CONSTEXPR auto underlying() -> detail::range_formatter_type<Char, T>& {\n    return underlying_;\n  }\n\n  FMT_CONSTEXPR void set_separator(basic_string_view<Char> sep) {\n    separator_ = sep;\n  }\n\n  FMT_CONSTEXPR void set_brackets(basic_string_view<Char> open,\n                                  basic_string_view<Char> close) {\n    opening_bracket_ = open;\n    closing_bracket_ = close;\n  }\n\n  template <typename ParseContext>\n  FMT_CONSTEXPR auto parse(ParseContext& ctx) -> decltype(ctx.begin()) {\n    auto it = ctx.begin();\n    auto end = ctx.end();\n    if (it == end || *it == '}') {\n      maybe_set_debug_format();\n      return it;\n    }\n\n    if (*it == 'n') {\n      set_brackets({}, {});\n      ++it;\n    }\n\n    if (*it == '}') {\n      maybe_set_debug_format();\n      return it;\n    }\n\n    if (*it != ':')\n      FMT_THROW(format_error(\"no other top-level range formatters supported\"));\n\n    custom_specs_ = true;\n    ++it;\n    ctx.advance_to(it);\n    return underlying_.parse(ctx);\n  }\n\n  template <typename R, class FormatContext>\n  auto format(R&& range, FormatContext& ctx) const -> decltype(ctx.out()) {\n    detail::range_mapper<buffer_context<Char>> mapper;\n    auto out = ctx.out();\n    out = detail::copy_str<Char>(opening_bracket_, out);\n    int i = 0;\n    auto it = detail::range_begin(range);\n    auto end = detail::range_end(range);\n    for (; it != end; ++it) {\n      if (i > 0) out = detail::copy_str<Char>(separator_, out);\n      ;\n      ctx.advance_to(out);\n      out = underlying_.format(mapper.map(*it), ctx);\n      ++i;\n    }\n    out = detail::copy_str<Char>(closing_bracket_, out);\n    return out;\n  }\n};\n\nenum class range_format { disabled, map, set, sequence, string, debug_string };\n\nnamespace detail {\ntemplate <typename T> struct range_format_kind_ {\n  static constexpr auto value = std::is_same<range_reference_type<T>, T>::value\n                                    ? range_format::disabled\n                                : is_map<T>::value ? range_format::map\n                                : is_set<T>::value ? range_format::set\n                                                   : range_format::sequence;\n};\n\ntemplate <range_format K, typename R, typename Char, typename Enable = void>\nstruct range_default_formatter;\n\ntemplate <range_format K>\nusing range_format_constant = std::integral_constant<range_format, K>;\n\ntemplate <range_format K, typename R, typename Char>\nstruct range_default_formatter<\n    K, R, Char,\n    enable_if_t<(K == range_format::sequence || K == range_format::map ||\n                 K == range_format::set)>> {\n  using range_type = detail::maybe_const_range<R>;\n  range_formatter<detail::uncvref_type<range_type>, Char> underlying_;\n\n  FMT_CONSTEXPR range_default_formatter() { init(range_format_constant<K>()); }\n\n  FMT_CONSTEXPR void init(range_format_constant<range_format::set>) {\n    underlying_.set_brackets(detail::string_literal<Char, '{'>{},\n                             detail::string_literal<Char, '}'>{});\n  }\n\n  FMT_CONSTEXPR void init(range_format_constant<range_format::map>) {\n    underlying_.set_brackets(detail::string_literal<Char, '{'>{},\n                             detail::string_literal<Char, '}'>{});\n    underlying_.underlying().set_brackets({}, {});\n    underlying_.underlying().set_separator(\n        detail::string_literal<Char, ':', ' '>{});\n  }\n\n  FMT_CONSTEXPR void init(range_format_constant<range_format::sequence>) {}\n\n  template <typename ParseContext>\n  FMT_CONSTEXPR auto parse(ParseContext& ctx) -> decltype(ctx.begin()) {\n    return underlying_.parse(ctx);\n  }\n\n  template <typename FormatContext>\n  auto format(range_type& range, FormatContext& ctx) const\n      -> decltype(ctx.out()) {\n    return underlying_.format(range, ctx);\n  }\n};\n}  // namespace detail\n\ntemplate <typename T, typename Char, typename Enable = void>\nstruct range_format_kind\n    : conditional_t<\n          is_range<T, Char>::value, detail::range_format_kind_<T>,\n          std::integral_constant<range_format, range_format::disabled>> {};\n\ntemplate <typename R, typename Char>\nstruct formatter<\n    R, Char,\n    enable_if_t<conjunction<bool_constant<range_format_kind<R, Char>::value !=\n                                          range_format::disabled>\n// Workaround a bug in MSVC 2015 and earlier.\n#if !FMT_MSC_VERSION || FMT_MSC_VERSION >= 1910\n                            ,\n                            detail::is_formattable_delayed<R, Char>\n#endif\n                            >::value>>\n    : detail::range_default_formatter<range_format_kind<R, Char>::value, R,\n                                      Char> {\n};\n\ntemplate <typename Char, typename... T> struct tuple_join_view : detail::view {\n  const std::tuple<T...>& tuple;\n  basic_string_view<Char> sep;\n\n  tuple_join_view(const std::tuple<T...>& t, basic_string_view<Char> s)\n      : tuple(t), sep{s} {}\n};\n\ntemplate <typename Char, typename... T>\nusing tuple_arg_join = tuple_join_view<Char, T...>;\n\n// Define FMT_TUPLE_JOIN_SPECIFIERS to enable experimental format specifiers\n// support in tuple_join. It is disabled by default because of issues with\n// the dynamic width and precision.\n#ifndef FMT_TUPLE_JOIN_SPECIFIERS\n#  define FMT_TUPLE_JOIN_SPECIFIERS 0\n#endif\n\ntemplate <typename Char, typename... T>\nstruct formatter<tuple_join_view<Char, T...>, Char> {\n  template <typename ParseContext>\n  FMT_CONSTEXPR auto parse(ParseContext& ctx) -> decltype(ctx.begin()) {\n    return do_parse(ctx, std::integral_constant<size_t, sizeof...(T)>());\n  }\n\n  template <typename FormatContext>\n  auto format(const tuple_join_view<Char, T...>& value,\n              FormatContext& ctx) const -> typename FormatContext::iterator {\n    return do_format(value, ctx,\n                     std::integral_constant<size_t, sizeof...(T)>());\n  }\n\n private:\n  std::tuple<formatter<typename std::decay<T>::type, Char>...> formatters_;\n\n  template <typename ParseContext>\n  FMT_CONSTEXPR auto do_parse(ParseContext& ctx,\n                              std::integral_constant<size_t, 0>)\n      -> decltype(ctx.begin()) {\n    return ctx.begin();\n  }\n\n  template <typename ParseContext, size_t N>\n  FMT_CONSTEXPR auto do_parse(ParseContext& ctx,\n                              std::integral_constant<size_t, N>)\n      -> decltype(ctx.begin()) {\n    auto end = ctx.begin();\n#if FMT_TUPLE_JOIN_SPECIFIERS\n    end = std::get<sizeof...(T) - N>(formatters_).parse(ctx);\n    if (N > 1) {\n      auto end1 = do_parse(ctx, std::integral_constant<size_t, N - 1>());\n      if (end != end1)\n        FMT_THROW(format_error(\"incompatible format specs for tuple elements\"));\n    }\n#endif\n    return end;\n  }\n\n  template <typename FormatContext>\n  auto do_format(const tuple_join_view<Char, T...>&, FormatContext& ctx,\n                 std::integral_constant<size_t, 0>) const ->\n      typename FormatContext::iterator {\n    return ctx.out();\n  }\n\n  template <typename FormatContext, size_t N>\n  auto do_format(const tuple_join_view<Char, T...>& value, FormatContext& ctx,\n                 std::integral_constant<size_t, N>) const ->\n      typename FormatContext::iterator {\n    auto out = std::get<sizeof...(T) - N>(formatters_)\n                   .format(std::get<sizeof...(T) - N>(value.tuple), ctx);\n    if (N > 1) {\n      out = std::copy(value.sep.begin(), value.sep.end(), out);\n      ctx.advance_to(out);\n      return do_format(value, ctx, std::integral_constant<size_t, N - 1>());\n    }\n    return out;\n  }\n};\n\nFMT_MODULE_EXPORT_BEGIN\n\n/**\n  \\rst\n  Returns an object that formats `tuple` with elements separated by `sep`.\n\n  **Example**::\n\n    std::tuple<int, char> t = {1, 'a'};\n    fmt::print(\"{}\", fmt::join(t, \", \"));\n    // Output: \"1, a\"\n  \\endrst\n */\ntemplate <typename... T>\nFMT_CONSTEXPR auto join(const std::tuple<T...>& tuple, string_view sep)\n    -> tuple_join_view<char, T...> {\n  return {tuple, sep};\n}\n\ntemplate <typename... T>\nFMT_CONSTEXPR auto join(const std::tuple<T...>& tuple,\n                        basic_string_view<wchar_t> sep)\n    -> tuple_join_view<wchar_t, T...> {\n  return {tuple, sep};\n}\n\n/**\n  \\rst\n  Returns an object that formats `initializer_list` with elements separated by\n  `sep`.\n\n  **Example**::\n\n    fmt::print(\"{}\", fmt::join({1, 2, 3}, \", \"));\n    // Output: \"1, 2, 3\"\n  \\endrst\n */\ntemplate <typename T>\nauto join(std::initializer_list<T> list, string_view sep)\n    -> join_view<const T*, const T*> {\n  return join(std::begin(list), std::end(list), sep);\n}\n\nFMT_MODULE_EXPORT_END\nFMT_END_NAMESPACE\n\n#endif  // FMT_RANGES_H_\n"
  },
  {
    "path": "native/iosTest/Pods/fmt/include/fmt/std.h",
    "content": "// Formatting library for C++ - formatters for standard library types\n//\n// Copyright (c) 2012 - present, Victor Zverovich\n// All rights reserved.\n//\n// For the license information refer to format.h.\n\n#ifndef FMT_STD_H_\n#define FMT_STD_H_\n\n#include <thread>\n#include <type_traits>\n#include <utility>\n\n#include \"ostream.h\"\n\n#if FMT_HAS_INCLUDE(<version>)\n#  include <version>\n#endif\n// Checking FMT_CPLUSPLUS for warning suppression in MSVC.\n#if FMT_CPLUSPLUS >= 201703L\n#  if FMT_HAS_INCLUDE(<filesystem>)\n#    include <filesystem>\n#  endif\n#  if FMT_HAS_INCLUDE(<variant>)\n#    include <variant>\n#  endif\n#endif\n\n#ifdef __cpp_lib_filesystem\nFMT_BEGIN_NAMESPACE\n\nnamespace detail {\n\ntemplate <typename Char>\nvoid write_escaped_path(basic_memory_buffer<Char>& quoted,\n                        const std::filesystem::path& p) {\n  write_escaped_string<Char>(std::back_inserter(quoted), p.string<Char>());\n}\n#  ifdef _WIN32\ntemplate <>\ninline void write_escaped_path<char>(basic_memory_buffer<char>& quoted,\n                                     const std::filesystem::path& p) {\n  auto s = p.u8string();\n  write_escaped_string<char>(\n      std::back_inserter(quoted),\n      string_view(reinterpret_cast<const char*>(s.c_str()), s.size()));\n}\n#  endif\ntemplate <>\ninline void write_escaped_path<std::filesystem::path::value_type>(\n    basic_memory_buffer<std::filesystem::path::value_type>& quoted,\n    const std::filesystem::path& p) {\n  write_escaped_string<std::filesystem::path::value_type>(\n      std::back_inserter(quoted), p.native());\n}\n\n}  // namespace detail\n\ntemplate <typename Char>\nstruct formatter<std::filesystem::path, Char>\n    : formatter<basic_string_view<Char>> {\n  template <typename FormatContext>\n  auto format(const std::filesystem::path& p, FormatContext& ctx) const ->\n      typename FormatContext::iterator {\n    basic_memory_buffer<Char> quoted;\n    detail::write_escaped_path(quoted, p);\n    return formatter<basic_string_view<Char>>::format(\n        basic_string_view<Char>(quoted.data(), quoted.size()), ctx);\n  }\n};\nFMT_END_NAMESPACE\n#endif\n\nFMT_BEGIN_NAMESPACE\ntemplate <typename Char>\nstruct formatter<std::thread::id, Char> : basic_ostream_formatter<Char> {};\nFMT_END_NAMESPACE\n\n#ifdef __cpp_lib_variant\nFMT_BEGIN_NAMESPACE\ntemplate <typename Char> struct formatter<std::monostate, Char> {\n  template <typename ParseContext>\n  FMT_CONSTEXPR auto parse(ParseContext& ctx) -> decltype(ctx.begin()) {\n    return ctx.begin();\n  }\n\n  template <typename FormatContext>\n  auto format(const std::monostate&, FormatContext& ctx) const\n      -> decltype(ctx.out()) {\n    auto out = ctx.out();\n    out = detail::write<Char>(out, \"monostate\");\n    return out;\n  }\n};\n\nnamespace detail {\n\ntemplate <typename T>\nusing variant_index_sequence =\n    std::make_index_sequence<std::variant_size<T>::value>;\n\n// variant_size and variant_alternative check.\ntemplate <typename T, typename U = void>\nstruct is_variant_like_ : std::false_type {};\ntemplate <typename T>\nstruct is_variant_like_<T, std::void_t<decltype(std::variant_size<T>::value)>>\n    : std::true_type {};\n\n// formattable element check\ntemplate <typename T, typename C> class is_variant_formattable_ {\n  template <std::size_t... I>\n  static std::conjunction<\n      is_formattable<std::variant_alternative_t<I, T>, C>...>\n      check(std::index_sequence<I...>);\n\n public:\n  static constexpr const bool value =\n      decltype(check(variant_index_sequence<T>{}))::value;\n};\n\ntemplate <typename Char, typename OutputIt, typename T>\nauto write_variant_alternative(OutputIt out, const T& v) -> OutputIt {\n  if constexpr (is_string<T>::value)\n    return write_escaped_string<Char>(out, detail::to_string_view(v));\n  else if constexpr (std::is_same_v<T, Char>)\n    return write_escaped_char(out, v);\n  else\n    return write<Char>(out, v);\n}\n\n}  // namespace detail\n\ntemplate <typename T> struct is_variant_like {\n  static constexpr const bool value = detail::is_variant_like_<T>::value;\n};\n\ntemplate <typename T, typename C> struct is_variant_formattable {\n  static constexpr const bool value =\n      detail::is_variant_formattable_<T, C>::value;\n};\n\ntemplate <typename Variant, typename Char>\nstruct formatter<\n    Variant, Char,\n    std::enable_if_t<std::conjunction_v<\n        is_variant_like<Variant>, is_variant_formattable<Variant, Char>>>> {\n  template <typename ParseContext>\n  FMT_CONSTEXPR auto parse(ParseContext& ctx) -> decltype(ctx.begin()) {\n    return ctx.begin();\n  }\n\n  template <typename FormatContext>\n  auto format(const Variant& value, FormatContext& ctx) const\n      -> decltype(ctx.out()) {\n    auto out = ctx.out();\n\n    out = detail::write<Char>(out, \"variant(\");\n    std::visit(\n        [&](const auto& v) {\n          out = detail::write_variant_alternative<Char>(out, v);\n        },\n        value);\n    *out++ = ')';\n    return out;\n  }\n};\nFMT_END_NAMESPACE\n#endif\n\n#endif  // FMT_STD_H_\n"
  },
  {
    "path": "native/iosTest/Pods/fmt/include/fmt/xchar.h",
    "content": "// Formatting library for C++ - optional wchar_t and exotic character support\n//\n// Copyright (c) 2012 - present, Victor Zverovich\n// All rights reserved.\n//\n// For the license information refer to format.h.\n\n#ifndef FMT_XCHAR_H_\n#define FMT_XCHAR_H_\n\n#include <cwchar>\n\n#include \"format.h\"\n\nFMT_BEGIN_NAMESPACE\nnamespace detail {\ntemplate <typename T>\nusing is_exotic_char = bool_constant<!std::is_same<T, char>::value>;\n}\n\nFMT_MODULE_EXPORT_BEGIN\n\nusing wstring_view = basic_string_view<wchar_t>;\nusing wformat_parse_context = basic_format_parse_context<wchar_t>;\nusing wformat_context = buffer_context<wchar_t>;\nusing wformat_args = basic_format_args<wformat_context>;\nusing wmemory_buffer = basic_memory_buffer<wchar_t>;\n\n#if FMT_GCC_VERSION && FMT_GCC_VERSION < 409\n// Workaround broken conversion on older gcc.\ntemplate <typename... Args> using wformat_string = wstring_view;\ninline auto runtime(wstring_view s) -> wstring_view { return s; }\n#else\ntemplate <typename... Args>\nusing wformat_string = basic_format_string<wchar_t, type_identity_t<Args>...>;\ninline auto runtime(wstring_view s) -> basic_runtime<wchar_t> { return {{s}}; }\n#endif\n\ntemplate <> struct is_char<wchar_t> : std::true_type {};\ntemplate <> struct is_char<detail::char8_type> : std::true_type {};\ntemplate <> struct is_char<char16_t> : std::true_type {};\ntemplate <> struct is_char<char32_t> : std::true_type {};\n\ntemplate <typename... Args>\nconstexpr format_arg_store<wformat_context, Args...> make_wformat_args(\n    const Args&... args) {\n  return {args...};\n}\n\ninline namespace literals {\n#if FMT_USE_USER_DEFINED_LITERALS && !FMT_USE_NONTYPE_TEMPLATE_ARGS\nconstexpr detail::udl_arg<wchar_t> operator\"\" _a(const wchar_t* s, size_t) {\n  return {s};\n}\n#endif\n}  // namespace literals\n\ntemplate <typename It, typename Sentinel>\nauto join(It begin, Sentinel end, wstring_view sep)\n    -> join_view<It, Sentinel, wchar_t> {\n  return {begin, end, sep};\n}\n\ntemplate <typename Range>\nauto join(Range&& range, wstring_view sep)\n    -> join_view<detail::iterator_t<Range>, detail::sentinel_t<Range>,\n                 wchar_t> {\n  return join(std::begin(range), std::end(range), sep);\n}\n\ntemplate <typename T>\nauto join(std::initializer_list<T> list, wstring_view sep)\n    -> join_view<const T*, const T*, wchar_t> {\n  return join(std::begin(list), std::end(list), sep);\n}\n\ntemplate <typename Char, FMT_ENABLE_IF(!std::is_same<Char, char>::value)>\nauto vformat(basic_string_view<Char> format_str,\n             basic_format_args<buffer_context<type_identity_t<Char>>> args)\n    -> std::basic_string<Char> {\n  basic_memory_buffer<Char> buffer;\n  detail::vformat_to(buffer, format_str, args);\n  return to_string(buffer);\n}\n\ntemplate <typename... T>\nauto format(wformat_string<T...> fmt, T&&... args) -> std::wstring {\n  return vformat(fmt::wstring_view(fmt), fmt::make_wformat_args(args...));\n}\n\n// Pass char_t as a default template parameter instead of using\n// std::basic_string<char_t<S>> to reduce the symbol size.\ntemplate <typename S, typename... Args, typename Char = char_t<S>,\n          FMT_ENABLE_IF(!std::is_same<Char, char>::value &&\n                        !std::is_same<Char, wchar_t>::value)>\nauto format(const S& format_str, Args&&... args) -> std::basic_string<Char> {\n  return vformat(detail::to_string_view(format_str),\n                 fmt::make_format_args<buffer_context<Char>>(args...));\n}\n\ntemplate <typename Locale, typename S, typename Char = char_t<S>,\n          FMT_ENABLE_IF(detail::is_locale<Locale>::value&&\n                            detail::is_exotic_char<Char>::value)>\ninline auto vformat(\n    const Locale& loc, const S& format_str,\n    basic_format_args<buffer_context<type_identity_t<Char>>> args)\n    -> std::basic_string<Char> {\n  return detail::vformat(loc, detail::to_string_view(format_str), args);\n}\n\ntemplate <typename Locale, typename S, typename... Args,\n          typename Char = char_t<S>,\n          FMT_ENABLE_IF(detail::is_locale<Locale>::value&&\n                            detail::is_exotic_char<Char>::value)>\ninline auto format(const Locale& loc, const S& format_str, Args&&... args)\n    -> std::basic_string<Char> {\n  return detail::vformat(loc, detail::to_string_view(format_str),\n                         fmt::make_format_args<buffer_context<Char>>(args...));\n}\n\ntemplate <typename OutputIt, typename S, typename Char = char_t<S>,\n          FMT_ENABLE_IF(detail::is_output_iterator<OutputIt, Char>::value&&\n                            detail::is_exotic_char<Char>::value)>\nauto vformat_to(OutputIt out, const S& format_str,\n                basic_format_args<buffer_context<type_identity_t<Char>>> args)\n    -> OutputIt {\n  auto&& buf = detail::get_buffer<Char>(out);\n  detail::vformat_to(buf, detail::to_string_view(format_str), args);\n  return detail::get_iterator(buf);\n}\n\ntemplate <typename OutputIt, typename S, typename... Args,\n          typename Char = char_t<S>,\n          FMT_ENABLE_IF(detail::is_output_iterator<OutputIt, Char>::value&&\n                            detail::is_exotic_char<Char>::value)>\ninline auto format_to(OutputIt out, const S& fmt, Args&&... args) -> OutputIt {\n  return vformat_to(out, detail::to_string_view(fmt),\n                    fmt::make_format_args<buffer_context<Char>>(args...));\n}\n\ntemplate <typename Locale, typename S, typename OutputIt, typename... Args,\n          typename Char = char_t<S>,\n          FMT_ENABLE_IF(detail::is_output_iterator<OutputIt, Char>::value&&\n                            detail::is_locale<Locale>::value&&\n                                detail::is_exotic_char<Char>::value)>\ninline auto vformat_to(\n    OutputIt out, const Locale& loc, const S& format_str,\n    basic_format_args<buffer_context<type_identity_t<Char>>> args) -> OutputIt {\n  auto&& buf = detail::get_buffer<Char>(out);\n  vformat_to(buf, detail::to_string_view(format_str), args,\n             detail::locale_ref(loc));\n  return detail::get_iterator(buf);\n}\n\ntemplate <\n    typename OutputIt, typename Locale, typename S, typename... Args,\n    typename Char = char_t<S>,\n    bool enable = detail::is_output_iterator<OutputIt, Char>::value&&\n        detail::is_locale<Locale>::value&& detail::is_exotic_char<Char>::value>\ninline auto format_to(OutputIt out, const Locale& loc, const S& format_str,\n                      Args&&... args) ->\n    typename std::enable_if<enable, OutputIt>::type {\n  return vformat_to(out, loc, to_string_view(format_str),\n                    fmt::make_format_args<buffer_context<Char>>(args...));\n}\n\ntemplate <typename OutputIt, typename Char, typename... Args,\n          FMT_ENABLE_IF(detail::is_output_iterator<OutputIt, Char>::value&&\n                            detail::is_exotic_char<Char>::value)>\ninline auto vformat_to_n(\n    OutputIt out, size_t n, basic_string_view<Char> format_str,\n    basic_format_args<buffer_context<type_identity_t<Char>>> args)\n    -> format_to_n_result<OutputIt> {\n  detail::iterator_buffer<OutputIt, Char, detail::fixed_buffer_traits> buf(out,\n                                                                           n);\n  detail::vformat_to(buf, format_str, args);\n  return {buf.out(), buf.count()};\n}\n\ntemplate <typename OutputIt, typename S, typename... Args,\n          typename Char = char_t<S>,\n          FMT_ENABLE_IF(detail::is_output_iterator<OutputIt, Char>::value&&\n                            detail::is_exotic_char<Char>::value)>\ninline auto format_to_n(OutputIt out, size_t n, const S& fmt,\n                        const Args&... args) -> format_to_n_result<OutputIt> {\n  return vformat_to_n(out, n, detail::to_string_view(fmt),\n                      fmt::make_format_args<buffer_context<Char>>(args...));\n}\n\ntemplate <typename S, typename... Args, typename Char = char_t<S>,\n          FMT_ENABLE_IF(detail::is_exotic_char<Char>::value)>\ninline auto formatted_size(const S& fmt, Args&&... args) -> size_t {\n  detail::counting_buffer<Char> buf;\n  detail::vformat_to(buf, detail::to_string_view(fmt),\n                     fmt::make_format_args<buffer_context<Char>>(args...));\n  return buf.count();\n}\n\ninline void vprint(std::FILE* f, wstring_view fmt, wformat_args args) {\n  wmemory_buffer buffer;\n  detail::vformat_to(buffer, fmt, args);\n  buffer.push_back(L'\\0');\n  if (std::fputws(buffer.data(), f) == -1)\n    FMT_THROW(system_error(errno, FMT_STRING(\"cannot write to file\")));\n}\n\ninline void vprint(wstring_view fmt, wformat_args args) {\n  vprint(stdout, fmt, args);\n}\n\ntemplate <typename... T>\nvoid print(std::FILE* f, wformat_string<T...> fmt, T&&... args) {\n  return vprint(f, wstring_view(fmt), fmt::make_wformat_args(args...));\n}\n\ntemplate <typename... T> void print(wformat_string<T...> fmt, T&&... args) {\n  return vprint(wstring_view(fmt), fmt::make_wformat_args(args...));\n}\n\n/**\n  Converts *value* to ``std::wstring`` using the default format for type *T*.\n */\ntemplate <typename T> inline auto to_wstring(const T& value) -> std::wstring {\n  return format(FMT_STRING(L\"{}\"), value);\n}\nFMT_MODULE_EXPORT_END\nFMT_END_NAMESPACE\n\n#endif  // FMT_XCHAR_H_\n"
  },
  {
    "path": "native/iosTest/Pods/fmt/src/format.cc",
    "content": "// Formatting library for C++\n//\n// Copyright (c) 2012 - 2016, Victor Zverovich\n// All rights reserved.\n//\n// For the license information refer to format.h.\n\n#include \"fmt/format-inl.h\"\n\nFMT_BEGIN_NAMESPACE\nnamespace detail {\n\ntemplate FMT_API auto dragonbox::to_decimal(float x) noexcept\n    -> dragonbox::decimal_fp<float>;\ntemplate FMT_API auto dragonbox::to_decimal(double x) noexcept\n    -> dragonbox::decimal_fp<double>;\n\n#ifndef FMT_STATIC_THOUSANDS_SEPARATOR\ntemplate FMT_API locale_ref::locale_ref(const std::locale& loc);\ntemplate FMT_API auto locale_ref::get<std::locale>() const -> std::locale;\n#endif\n\n// Explicit instantiations for char.\n\ntemplate FMT_API auto thousands_sep_impl(locale_ref)\n    -> thousands_sep_result<char>;\ntemplate FMT_API auto decimal_point_impl(locale_ref) -> char;\n\ntemplate FMT_API void buffer<char>::append(const char*, const char*);\n\n// DEPRECATED!\n// There is no correspondent extern template in format.h because of\n// incompatibility between clang and gcc (#2377).\ntemplate FMT_API void vformat_to(buffer<char>&, string_view,\n                                 basic_format_args<FMT_BUFFER_CONTEXT(char)>,\n                                 locale_ref);\n\n// Explicit instantiations for wchar_t.\n\ntemplate FMT_API auto thousands_sep_impl(locale_ref)\n    -> thousands_sep_result<wchar_t>;\ntemplate FMT_API auto decimal_point_impl(locale_ref) -> wchar_t;\n\ntemplate FMT_API void buffer<wchar_t>::append(const wchar_t*, const wchar_t*);\n\n}  // namespace detail\nFMT_END_NAMESPACE\n"
  },
  {
    "path": "native/iosTest/Pods/glog/COPYING",
    "content": "Copyright (c) 2008, Google Inc.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n    * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\nA function gettimeofday in utilities.cc is based on\n\nhttp://www.google.com/codesearch/p?hl=en#dR3YEbitojA/COPYING&q=GetSystemTimeAsFileTime%20license:bsd\n\nThe license of this code is:\n\nCopyright (c) 2003-2008, Jouni Malinen <j@w1.fi> and contributors\nAll Rights Reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in the\n   documentation and/or other materials provided with the distribution.\n\n3. Neither the name(s) of the above-listed copyright holder(s) nor the\n   names of its contributors may be used to endorse or promote products\n   derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "native/iosTest/Pods/glog/README",
    "content": "This repository contains a C++ implementation of the Google logging\nmodule.  Documentation for the implementation is in doc/.\n\nSee INSTALL for (generic) installation instructions for C++: basically\n   ./configure && make && make install\n"
  },
  {
    "path": "native/iosTest/Pods/glog/README.windows",
    "content": "This project has begun being ported to Windows.  A working solution\nfile exists in this directory:\n    google-glog.sln\n\nYou can load this solution file into VC++ 9.0 (Visual Studio\n2008).  You may also be able to use this solution file with older\nVisual Studios by converting the solution file.\n\nNote that stack tracing and some unittests are not ported\nyet.\n\nYou can also link glog code in statically -- see the example project\nlibglog_static and logging_unittest_static, which does this.  For this\nto work, you'll need to add \"/D GOOGLE_GLOG_DLL_DECL=\" to the compile\nline of every glog's .cc file.\n\nI have little experience with Windows programming, so there may be\nbetter ways to set this up than I've done!  If you run across any\nproblems, please post to the google-glog Google Group, or report\nthem on the google-glog Google Code site:\n   http://groups.google.com/group/google-glog\n   https://github.com/google/glog/issues\n\n-- Shinichiro Hamaji\n\nLast modified: 23 January 2009\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/base/commandlineflags.h",
    "content": "// Copyright (c) 2008, Google Inc.\n// All rights reserved.\n// \n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n// \n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n// \n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// ---\n// This file is a compatibility layer that defines Google's version of\n// command line flags that are used for configuration.\n//\n// We put flags into their own namespace.  It is purposefully\n// named in an opaque way that people should have trouble typing\n// directly.  The idea is that DEFINE puts the flag in the weird\n// namespace, and DECLARE imports the flag from there into the\n// current namespace.  The net result is to force people to use\n// DECLARE to get access to a flag, rather than saying\n//   extern bool FLAGS_logtostderr;\n// or some such instead.  We want this so we can put extra\n// functionality (like sanity-checking) in DECLARE if we want,\n// and make sure it is picked up everywhere.\n//\n// We also put the type of the variable in the namespace, so that\n// people can't DECLARE_int32 something that they DEFINE_bool'd\n// elsewhere.\n#ifndef BASE_COMMANDLINEFLAGS_H__\n#define BASE_COMMANDLINEFLAGS_H__\n\n#include \"config.h\"\n#include <string>\n#include <string.h>               // for memchr\n#include <stdlib.h>               // for getenv\n\n#ifdef HAVE_LIB_GFLAGS\n\n#include <gflags/gflags.h>\n\n#else\n\n#include \"glog/logging.h\"\n\n#define DECLARE_VARIABLE(type, shorttype, name, tn)                     \\\n  namespace fL##shorttype {                                             \\\n    extern GOOGLE_GLOG_DLL_DECL type FLAGS_##name;                      \\\n  }                                                                     \\\n  using fL##shorttype::FLAGS_##name\n#define DEFINE_VARIABLE(type, shorttype, name, value, meaning, tn)      \\\n  namespace fL##shorttype {                                             \\\n    GOOGLE_GLOG_DLL_DECL type FLAGS_##name(value);                      \\\n    char FLAGS_no##name;                                                \\\n  }                                                                     \\\n  using fL##shorttype::FLAGS_##name\n\n// bool specialization\n#define DECLARE_bool(name) \\\n  DECLARE_VARIABLE(bool, B, name, bool)\n#define DEFINE_bool(name, value, meaning) \\\n  DEFINE_VARIABLE(bool, B, name, value, meaning, bool)\n\n// int32 specialization\n#define DECLARE_int32(name) \\\n  DECLARE_VARIABLE(GOOGLE_NAMESPACE::int32, I, name, int32)\n#define DEFINE_int32(name, value, meaning) \\\n  DEFINE_VARIABLE(GOOGLE_NAMESPACE::int32, I, name, value, meaning, int32)\n\n// Special case for string, because we have to specify the namespace\n// std::string, which doesn't play nicely with our FLAG__namespace hackery.\n#define DECLARE_string(name)                                            \\\n  namespace fLS {                                                       \\\n    extern GOOGLE_GLOG_DLL_DECL std::string& FLAGS_##name;              \\\n  }                                                                     \\\n  using fLS::FLAGS_##name\n#define DEFINE_string(name, value, meaning)                             \\\n  namespace fLS {                                                       \\\n    std::string FLAGS_##name##_buf(value);                              \\\n    GOOGLE_GLOG_DLL_DECL std::string& FLAGS_##name = FLAGS_##name##_buf; \\\n    char FLAGS_no##name;                                                \\\n  }                                                                     \\\n  using fLS::FLAGS_##name\n\n#endif  // HAVE_LIB_GFLAGS\n\n// Define GLOG_DEFINE_* using DEFINE_* . By using these macros, we\n// have GLOG_* environ variables even if we have gflags installed.\n//\n// If both an environment variable and a flag are specified, the value\n// specified by a flag wins. E.g., if GLOG_v=0 and --v=1, the\n// verbosity will be 1, not 0.\n\n#define GLOG_DEFINE_bool(name, value, meaning) \\\n  DEFINE_bool(name, EnvToBool(\"GLOG_\" #name, value), meaning)\n\n#define GLOG_DEFINE_int32(name, value, meaning) \\\n  DEFINE_int32(name, EnvToInt(\"GLOG_\" #name, value), meaning)\n\n#define GLOG_DEFINE_string(name, value, meaning) \\\n  DEFINE_string(name, EnvToString(\"GLOG_\" #name, value), meaning)\n\n// These macros (could be functions, but I don't want to bother with a .cc\n// file), make it easier to initialize flags from the environment.\n\n#define EnvToString(envname, dflt)   \\\n  (!getenv(envname) ? (dflt) : getenv(envname))\n\n#define EnvToBool(envname, dflt)   \\\n  (!getenv(envname) ? (dflt) : memchr(\"tTyY1\\0\", getenv(envname)[0], 6) != NULL)\n\n#define EnvToInt(envname, dflt)  \\\n  (!getenv(envname) ? (dflt) : strtol(getenv(envname), NULL, 10))\n\n#endif  // BASE_COMMANDLINEFLAGS_H__\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/base/googleinit.h",
    "content": "// Copyright (c) 2008, Google Inc.\n// All rights reserved.\n// \n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n// \n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n// \n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// ---\n// Author: Jacob Hoffman-Andrews\n\n#ifndef _GOOGLEINIT_H\n#define _GOOGLEINIT_H\n\nclass GoogleInitializer {\n public:\n  typedef void (*void_function)(void);\n  GoogleInitializer(const char*, void_function f) {\n    f();\n  }\n};\n\n#define REGISTER_MODULE_INITIALIZER(name, body)                 \\\n  namespace {                                                   \\\n    static void google_init_module_##name () { body; }          \\\n    GoogleInitializer google_initializer_module_##name(#name,   \\\n            google_init_module_##name);                         \\\n  }\n\n#endif /* _GOOGLEINIT_H */\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/base/mutex.h",
    "content": "// Copyright (c) 2007, Google Inc.\n// All rights reserved.\n// \n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n// \n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n// \n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// \n// ---\n// Author: Craig Silverstein.\n//\n// A simple mutex wrapper, supporting locks and read-write locks.\n// You should assume the locks are *not* re-entrant.\n//\n// To use: you should define the following macros in your configure.ac:\n//   ACX_PTHREAD\n//   AC_RWLOCK\n// The latter is defined in ../autoconf.\n//\n// This class is meant to be internal-only and should be wrapped by an\n// internal namespace.  Before you use this module, please give the\n// name of your internal namespace for this module.  Or, if you want\n// to expose it, you'll want to move it to the Google namespace.  We\n// cannot put this class in global namespace because there can be some\n// problems when we have multiple versions of Mutex in each shared object.\n//\n// NOTE: by default, we have #ifdef'ed out the TryLock() method.\n//       This is for two reasons:\n// 1) TryLock() under Windows is a bit annoying (it requires a\n//    #define to be defined very early).\n// 2) TryLock() is broken for NO_THREADS mode, at least in NDEBUG\n//    mode.\n// If you need TryLock(), and either these two caveats are not a\n// problem for you, or you're willing to work around them, then\n// feel free to #define GMUTEX_TRYLOCK, or to remove the #ifdefs\n// in the code below.\n//\n// CYGWIN NOTE: Cygwin support for rwlock seems to be buggy:\n//    http://www.cygwin.com/ml/cygwin/2008-12/msg00017.html\n// Because of that, we might as well use windows locks for\n// cygwin.  They seem to be more reliable than the cygwin pthreads layer.\n//\n// TRICKY IMPLEMENTATION NOTE:\n// This class is designed to be safe to use during\n// dynamic-initialization -- that is, by global constructors that are\n// run before main() starts.  The issue in this case is that\n// dynamic-initialization happens in an unpredictable order, and it\n// could be that someone else's dynamic initializer could call a\n// function that tries to acquire this mutex -- but that all happens\n// before this mutex's constructor has run.  (This can happen even if\n// the mutex and the function that uses the mutex are in the same .cc\n// file.)  Basically, because Mutex does non-trivial work in its\n// constructor, it's not, in the naive implementation, safe to use\n// before dynamic initialization has run on it.\n//\n// The solution used here is to pair the actual mutex primitive with a\n// bool that is set to true when the mutex is dynamically initialized.\n// (Before that it's false.)  Then we modify all mutex routines to\n// look at the bool, and not try to lock/unlock until the bool makes\n// it to true (which happens after the Mutex constructor has run.)\n//\n// This works because before main() starts -- particularly, during\n// dynamic initialization -- there are no threads, so a) it's ok that\n// the mutex operations are a no-op, since we don't need locking then\n// anyway; and b) we can be quite confident our bool won't change\n// state between a call to Lock() and a call to Unlock() (that would\n// require a global constructor in one translation unit to call Lock()\n// and another global constructor in another translation unit to call\n// Unlock() later, which is pretty perverse).\n//\n// That said, it's tricky, and can conceivably fail; it's safest to\n// avoid trying to acquire a mutex in a global constructor, if you\n// can.  One way it can fail is that a really smart compiler might\n// initialize the bool to true at static-initialization time (too\n// early) rather than at dynamic-initialization time.  To discourage\n// that, we set is_safe_ to true in code (not the constructor\n// colon-initializer) and set it to true via a function that always\n// evaluates to true, but that the compiler can't know always\n// evaluates to true.  This should be good enough.\n\n#ifndef GOOGLE_MUTEX_H_\n#define GOOGLE_MUTEX_H_\n\n#include \"config.h\"           // to figure out pthreads support\n\n#if defined(NO_THREADS)\n  typedef int MutexType;      // to keep a lock-count\n#elif defined(_WIN32) || defined(__CYGWIN32__) || defined(__CYGWIN64__)\n# ifndef WIN32_LEAN_AND_MEAN\n#  define WIN32_LEAN_AND_MEAN  // We only need minimal includes\n# endif\n# ifdef GMUTEX_TRYLOCK\n  // We need Windows NT or later for TryEnterCriticalSection().  If you\n  // don't need that functionality, you can remove these _WIN32_WINNT\n  // lines, and change TryLock() to assert(0) or something.\n#   ifndef _WIN32_WINNT\n#     define _WIN32_WINNT 0x0400\n#   endif\n# endif\n// To avoid macro definition of ERROR.\n# ifndef NOGDI\n#  define NOGDI\n# endif\n// To avoid macro definition of min/max.\n# ifndef NOMINMAX\n#  define NOMINMAX\n# endif\n# include <windows.h>\n  typedef CRITICAL_SECTION MutexType;\n#elif defined(HAVE_PTHREAD) && defined(HAVE_RWLOCK)\n  // Needed for pthread_rwlock_*.  If it causes problems, you could take it\n  // out, but then you'd have to unset HAVE_RWLOCK (at least on linux -- it\n  // *does* cause problems for FreeBSD, or MacOSX, but isn't needed\n  // for locking there.)\n# ifdef __linux__\n#   ifndef _XOPEN_SOURCE  // Some other header might have already set it for us.\n#     define _XOPEN_SOURCE 500  // may be needed to get the rwlock calls\n#   endif\n# endif\n# include <pthread.h>\n  typedef pthread_rwlock_t MutexType;\n#elif defined(HAVE_PTHREAD)\n# include <pthread.h>\n  typedef pthread_mutex_t MutexType;\n#else\n# error Need to implement mutex.h for your architecture, or #define NO_THREADS\n#endif\n\n// We need to include these header files after defining _XOPEN_SOURCE\n// as they may define the _XOPEN_SOURCE macro.\n#include <assert.h>\n#include <stdlib.h>      // for abort()\n\n#define MUTEX_NAMESPACE glog_internal_namespace_\n\nnamespace MUTEX_NAMESPACE {\n\nclass Mutex {\n public:\n  // Create a Mutex that is not held by anybody.  This constructor is\n  // typically used for Mutexes allocated on the heap or the stack.\n  // See below for a recommendation for constructing global Mutex\n  // objects.\n  inline Mutex();\n\n  // Destructor\n  inline ~Mutex();\n\n  inline void Lock();    // Block if needed until free then acquire exclusively\n  inline void Unlock();  // Release a lock acquired via Lock()\n#ifdef GMUTEX_TRYLOCK\n  inline bool TryLock(); // If free, Lock() and return true, else return false\n#endif\n  // Note that on systems that don't support read-write locks, these may\n  // be implemented as synonyms to Lock() and Unlock().  So you can use\n  // these for efficiency, but don't use them anyplace where being able\n  // to do shared reads is necessary to avoid deadlock.\n  inline void ReaderLock();   // Block until free or shared then acquire a share\n  inline void ReaderUnlock(); // Release a read share of this Mutex\n  inline void WriterLock() { Lock(); }     // Acquire an exclusive lock\n  inline void WriterUnlock() { Unlock(); } // Release a lock from WriterLock()\n\n  // TODO(hamaji): Do nothing, implement correctly.\n  inline void AssertHeld() {}\n\n private:\n  MutexType mutex_;\n  // We want to make sure that the compiler sets is_safe_ to true only\n  // when we tell it to, and never makes assumptions is_safe_ is\n  // always true.  volatile is the most reliable way to do that.\n  volatile bool is_safe_;\n\n  inline void SetIsSafe() { is_safe_ = true; }\n\n  // Catch the error of writing Mutex when intending MutexLock.\n  Mutex(Mutex* /*ignored*/) {}\n  // Disallow \"evil\" constructors\n  Mutex(const Mutex&);\n  void operator=(const Mutex&);\n};\n\n// Now the implementation of Mutex for various systems\n#if defined(NO_THREADS)\n\n// When we don't have threads, we can be either reading or writing,\n// but not both.  We can have lots of readers at once (in no-threads\n// mode, that's most likely to happen in recursive function calls),\n// but only one writer.  We represent this by having mutex_ be -1 when\n// writing and a number > 0 when reading (and 0 when no lock is held).\n//\n// In debug mode, we assert these invariants, while in non-debug mode\n// we do nothing, for efficiency.  That's why everything is in an\n// assert.\n\nMutex::Mutex() : mutex_(0) { }\nMutex::~Mutex()            { assert(mutex_ == 0); }\nvoid Mutex::Lock()         { assert(--mutex_ == -1); }\nvoid Mutex::Unlock()       { assert(mutex_++ == -1); }\n#ifdef GMUTEX_TRYLOCK\nbool Mutex::TryLock()      { if (mutex_) return false; Lock(); return true; }\n#endif\nvoid Mutex::ReaderLock()   { assert(++mutex_ > 0); }\nvoid Mutex::ReaderUnlock() { assert(mutex_-- > 0); }\n\n#elif defined(_WIN32) || defined(__CYGWIN32__) || defined(__CYGWIN64__)\n\nMutex::Mutex()             { InitializeCriticalSection(&mutex_); SetIsSafe(); }\nMutex::~Mutex()            { DeleteCriticalSection(&mutex_); }\nvoid Mutex::Lock()         { if (is_safe_) EnterCriticalSection(&mutex_); }\nvoid Mutex::Unlock()       { if (is_safe_) LeaveCriticalSection(&mutex_); }\n#ifdef GMUTEX_TRYLOCK\nbool Mutex::TryLock()      { return is_safe_ ?\n                                 TryEnterCriticalSection(&mutex_) != 0 : true; }\n#endif\nvoid Mutex::ReaderLock()   { Lock(); }      // we don't have read-write locks\nvoid Mutex::ReaderUnlock() { Unlock(); }\n\n#elif defined(HAVE_PTHREAD) && defined(HAVE_RWLOCK)\n\n#define SAFE_PTHREAD(fncall)  do {   /* run fncall if is_safe_ is true */  \\\n  if (is_safe_ && fncall(&mutex_) != 0) abort();                           \\\n} while (0)\n\nMutex::Mutex() {\n  SetIsSafe();\n  if (is_safe_ && pthread_rwlock_init(&mutex_, NULL) != 0) abort();\n}\nMutex::~Mutex()            { SAFE_PTHREAD(pthread_rwlock_destroy); }\nvoid Mutex::Lock()         { SAFE_PTHREAD(pthread_rwlock_wrlock); }\nvoid Mutex::Unlock()       { SAFE_PTHREAD(pthread_rwlock_unlock); }\n#ifdef GMUTEX_TRYLOCK\nbool Mutex::TryLock()      { return is_safe_ ?\n                                    pthread_rwlock_trywrlock(&mutex_) == 0 :\n                                    true; }\n#endif\nvoid Mutex::ReaderLock()   { SAFE_PTHREAD(pthread_rwlock_rdlock); }\nvoid Mutex::ReaderUnlock() { SAFE_PTHREAD(pthread_rwlock_unlock); }\n#undef SAFE_PTHREAD\n\n#elif defined(HAVE_PTHREAD)\n\n#define SAFE_PTHREAD(fncall)  do {   /* run fncall if is_safe_ is true */  \\\n  if (is_safe_ && fncall(&mutex_) != 0) abort();                           \\\n} while (0)\n\nMutex::Mutex()             {\n  SetIsSafe();\n  if (is_safe_ && pthread_mutex_init(&mutex_, NULL) != 0) abort();\n}\nMutex::~Mutex()            { SAFE_PTHREAD(pthread_mutex_destroy); }\nvoid Mutex::Lock()         { SAFE_PTHREAD(pthread_mutex_lock); }\nvoid Mutex::Unlock()       { SAFE_PTHREAD(pthread_mutex_unlock); }\n#ifdef GMUTEX_TRYLOCK\nbool Mutex::TryLock()      { return is_safe_ ?\n                                 pthread_mutex_trylock(&mutex_) == 0 : true; }\n#endif\nvoid Mutex::ReaderLock()   { Lock(); }\nvoid Mutex::ReaderUnlock() { Unlock(); }\n#undef SAFE_PTHREAD\n\n#endif\n\n// --------------------------------------------------------------------------\n// Some helper classes\n\n// MutexLock(mu) acquires mu when constructed and releases it when destroyed.\nclass MutexLock {\n public:\n  explicit MutexLock(Mutex *mu) : mu_(mu) { mu_->Lock(); }\n  ~MutexLock() { mu_->Unlock(); }\n private:\n  Mutex * const mu_;\n  // Disallow \"evil\" constructors\n  MutexLock(const MutexLock&);\n  void operator=(const MutexLock&);\n};\n\n// ReaderMutexLock and WriterMutexLock do the same, for rwlocks\nclass ReaderMutexLock {\n public:\n  explicit ReaderMutexLock(Mutex *mu) : mu_(mu) { mu_->ReaderLock(); }\n  ~ReaderMutexLock() { mu_->ReaderUnlock(); }\n private:\n  Mutex * const mu_;\n  // Disallow \"evil\" constructors\n  ReaderMutexLock(const ReaderMutexLock&);\n  void operator=(const ReaderMutexLock&);\n};\n\nclass WriterMutexLock {\n public:\n  explicit WriterMutexLock(Mutex *mu) : mu_(mu) { mu_->WriterLock(); }\n  ~WriterMutexLock() { mu_->WriterUnlock(); }\n private:\n  Mutex * const mu_;\n  // Disallow \"evil\" constructors\n  WriterMutexLock(const WriterMutexLock&);\n  void operator=(const WriterMutexLock&);\n};\n\n// Catch bug where variable name is omitted, e.g. MutexLock (&mu);\n#define MutexLock(x) COMPILE_ASSERT(0, mutex_lock_decl_missing_var_name)\n#define ReaderMutexLock(x) COMPILE_ASSERT(0, rmutex_lock_decl_missing_var_name)\n#define WriterMutexLock(x) COMPILE_ASSERT(0, wmutex_lock_decl_missing_var_name)\n\n}  // namespace MUTEX_NAMESPACE\n\nusing namespace MUTEX_NAMESPACE;\n\n#undef MUTEX_NAMESPACE\n\n#endif  /* #define GOOGLE_MUTEX_H__ */\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/config.h",
    "content": "/* src/config.h.  Generated from config.h.in by configure.  */\n/* src/config.h.in.  Generated from configure.ac by autoheader.  */\n\n/* define if glog doesn't use RTTI */\n/* #undef DISABLE_RTTI */\n\n/* Namespace for Google classes */\n#define GOOGLE_NAMESPACE google\n\n/* Define if you have the `dladdr' function */\n#define HAVE_DLADDR 1\n\n/* Define to 1 if you have the <dlfcn.h> header file. */\n#define HAVE_DLFCN_H 1\n\n/* Define to 1 if you have the <execinfo.h> header file. */\n#define HAVE_EXECINFO_H 1\n\n/* Define if you have the `fcntl' function */\n#define HAVE_FCNTL 1\n\n/* Define to 1 if you have the <glob.h> header file. */\n#define HAVE_GLOB_H 1\n\n/* Define to 1 if you have the <inttypes.h> header file. */\n#define HAVE_INTTYPES_H 1\n\n/* Define to 1 if you have the `pthread' library (-lpthread). */\n#define HAVE_LIBPTHREAD 1\n\n/* Define to 1 if you have the <libunwind.h> header file. */\n#define HAVE_LIBUNWIND_H 1\n\n/* define if you have google gflags library */\n/* #undef HAVE_LIB_GFLAGS_DISABLED */\n\n/* define if you have google gmock library */\n/* #undef HAVE_LIB_GMOCK */\n\n/* define if you have google gtest library */\n/* #undef HAVE_LIB_GTEST */\n\n/* define if you have libunwind */\n/* #undef HAVE_LIB_UNWIND */\n\n/* Define to 1 if you have the <memory.h> header file. */\n#define HAVE_MEMORY_H 1\n\n/* define if the compiler implements namespaces */\n#define HAVE_NAMESPACES 1\n\n/* Define if you have the 'pread' function */\n#define HAVE_PREAD 1\n\n/* Define if you have POSIX threads libraries and header files. */\n#define HAVE_PTHREAD 1\n\n/* Define to 1 if you have the <pwd.h> header file. */\n#define HAVE_PWD_H 1\n\n/* Define if you have the 'pwrite' function */\n#define HAVE_PWRITE 1\n\n/* define if the compiler implements pthread_rwlock_* */\n#define HAVE_RWLOCK 1\n\n/* Define if you have the 'sigaction' function */\n#define HAVE_SIGACTION 1\n\n/* Define if you have the `sigaltstack' function */\n#define HAVE_SIGALTSTACK 1\n\n/* Define to 1 if you have the <stdint.h> header file. */\n#define HAVE_STDINT_H 1\n\n/* Define to 1 if you have the <stdlib.h> header file. */\n#define HAVE_STDLIB_H 1\n\n/* Define to 1 if you have the <strings.h> header file. */\n#define HAVE_STRINGS_H 1\n\n/* Define to 1 if you have the <string.h> header file. */\n#define HAVE_STRING_H 1\n\n/* Define to 1 if you have the <syscall.h> header file. */\n/* #undef HAVE_SYSCALL_H */\n\n/* Define to 1 if you have the <syslog.h> header file. */\n#define HAVE_SYSLOG_H 1\n\n/* Define to 1 if you have the <sys/stat.h> header file. */\n#define HAVE_SYS_STAT_H 1\n\n/* Define to 1 if you have the <sys/syscall.h> header file. */\n#define HAVE_SYS_SYSCALL_H 1\n\n/* Define to 1 if you have the <sys/time.h> header file. */\n#define HAVE_SYS_TIME_H 1\n\n/* Define to 1 if you have the <sys/types.h> header file. */\n#define HAVE_SYS_TYPES_H 1\n\n/* Define to 1 if you have the <sys/ucontext.h> header file. */\n#define HAVE_SYS_UCONTEXT_H 1\n\n/* Define to 1 if you have the <sys/utsname.h> header file. */\n#define HAVE_SYS_UTSNAME_H 1\n\n/* Define to 1 if you have the <ucontext.h> header file. */\n/* #undef HAVE_UCONTEXT_H */\n\n/* Define to 1 if you have the <unistd.h> header file. */\n#define HAVE_UNISTD_H 1\n\n/* Define to 1 if you have the <unwind.h> header file. */\n#define HAVE_UNWIND_H 1\n\n/* define if the compiler supports using expression for operator */\n#define HAVE_USING_OPERATOR 1\n\n/* define if your compiler has __attribute__ */\n#define HAVE___ATTRIBUTE__ 1\n\n/* define if your compiler has __builtin_expect */\n#define HAVE___BUILTIN_EXPECT 1\n\n/* define if your compiler has __sync_val_compare_and_swap */\n#define HAVE___SYNC_VAL_COMPARE_AND_SWAP 1\n\n/* Define to the sub-directory in which libtool stores uninstalled libraries.\n   */\n#define LT_OBJDIR \".libs/\"\n\n/* Name of package */\n#define PACKAGE \"glog\"\n\n/* Define to the address where bug reports for this package should be sent. */\n#define PACKAGE_BUGREPORT \"opensource@google.com\"\n\n/* Define to the full name of this package. */\n#define PACKAGE_NAME \"glog\"\n\n/* Define to the full name and version of this package. */\n#define PACKAGE_STRING \"glog 0.3.5\"\n\n/* Define to the one symbol short name of this package. */\n#define PACKAGE_TARNAME \"glog\"\n\n/* Define to the home page for this package. */\n#define PACKAGE_URL \"\"\n\n/* Define to the version of this package. */\n#define PACKAGE_VERSION \"0.3.5\"\n\n/* How to access the PC from a struct ucontext */\n/* #undef PC_FROM_UCONTEXT */\n\n/* Define to necessary symbol if this constant uses a non-standard name on\n   your system. */\n/* #undef PTHREAD_CREATE_JOINABLE */\n\n/* The size of `void *', as computed by sizeof. */\n#define SIZEOF_VOID_P 8\n\n/* Define to 1 if you have the ANSI C header files. */\n/* #undef STDC_HEADERS */\n\n/* the namespace where STL code like vector<> is defined */\n#define STL_NAMESPACE std\n\n/* location of source code */\n#define TEST_SRC_DIR \".\"\n\n/* Version number of package */\n#define VERSION \"0.3.5\"\n\n/* Stops putting the code inside the Google namespace */\n#define _END_GOOGLE_NAMESPACE_ }\n\n/* Puts following code inside the Google namespace */\n#define _START_GOOGLE_NAMESPACE_ namespace google {\n/* Add in so we have Apple Target Conditionals */\n#ifdef __APPLE__\n#include <TargetConditionals.h>\n#include <Availability.h>\n#endif\n\n/* Special configuration for ucontext */\n#undef HAVE_UCONTEXT_H\n#undef PC_FROM_UCONTEXT\n#if defined(__x86_64__)\n#define PC_FROM_UCONTEXT uc_mcontext->__ss.__rip\n#elif defined(__i386__)\n#define PC_FROM_UCONTEXT uc_mcontext->__ss.__eip\n#endif\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/config.h.cmake.in",
    "content": "/* define if glog doesn't use RTTI */\n#cmakedefine DISABLE_RTTI\n\n/* Namespace for Google classes */\n#cmakedefine GOOGLE_NAMESPACE ${GOOGLE_NAMESPACE}\n\n/* Define if you have the `dladdr' function */\n#cmakedefine HAVE_DLADDR\n\n/* Define if you have the `snprintf' function */\n#cmakedefine HAVE_SNPRINTF\n\n/* Define to 1 if you have the <dlfcn.h> header file. */\n#cmakedefine HAVE_DLFCN_H\n\n/* Define to 1 if you have the <execinfo.h> header file. */\n#cmakedefine HAVE_EXECINFO_H\n\n/* Define if you have the `fcntl' function */\n#cmakedefine HAVE_FCNTL\n\n/* Define to 1 if you have the <glob.h> header file. */\n#cmakedefine HAVE_GLOB_H\n\n/* Define to 1 if you have the <inttypes.h> header file. */\n#cmakedefine HAVE_INTTYPES_H ${HAVE_INTTYPES_H}\n\n/* Define to 1 if you have the `pthread' library (-lpthread). */\n#cmakedefine HAVE_LIBPTHREAD\n\n/* Define to 1 if you have the <libunwind.h> header file. */\n#cmakedefine HAVE_LIBUNWIND_H\n\n/* define if you have google gflags library */\n#cmakedefine HAVE_LIB_GFLAGS\n\n/* define if you have google gmock library */\n#cmakedefine HAVE_LIB_GMOCK\n\n/* define if you have google gtest library */\n#cmakedefine HAVE_LIB_GTEST\n\n/* define if you have libunwind */\n#cmakedefine HAVE_LIB_UNWIND\n\n/* Define to 1 if you have the <memory.h> header file. */\n#cmakedefine HAVE_MEMORY_H\n\n/* define to disable multithreading support. */\n#cmakedefine NO_THREADS\n\n/* define if the compiler implements namespaces */\n#cmakedefine HAVE_NAMESPACES\n\n/* Define if you have the 'pread' function */\n#cmakedefine HAVE_PREAD\n\n/* Define if you have POSIX threads libraries and header files. */\n#cmakedefine HAVE_PTHREAD\n\n/* Define to 1 if you have the <pwd.h> header file. */\n#cmakedefine HAVE_PWD_H\n\n/* Define if you have the 'pwrite' function */\n#cmakedefine HAVE_PWRITE\n\n/* define if the compiler implements pthread_rwlock_* */\n#cmakedefine HAVE_RWLOCK\n\n/* Define if you have the 'sigaction' function */\n#cmakedefine HAVE_SIGACTION\n\n/* Define if you have the `sigaltstack' function */\n#cmakedefine HAVE_SIGALTSTACK\n\n/* Define to 1 if you have the <stdint.h> header file. */\n#cmakedefine HAVE_STDINT_H ${HAVE_STDINT_H}\n\n/* Define to 1 if you have the <stdlib.h> header file. */\n#cmakedefine HAVE_STDLIB_H\n\n/* Define to 1 if you have the <strings.h> header file. */\n#cmakedefine HAVE_STRINGS_H\n\n/* Define to 1 if you have the <string.h> header file. */\n#cmakedefine HAVE_STRING_H\n\n/* Define to 1 if you have the <syscall.h> header file. */\n#cmakedefine HAVE_SYSCALL_H\n\n/* Define to 1 if you have the <syslog.h> header file. */\n#cmakedefine HAVE_SYSLOG_H\n\n/* Define to 1 if you have the <sys/stat.h> header file. */\n#cmakedefine HAVE_SYS_STAT_H\n\n/* Define to 1 if you have the <sys/syscall.h> header file. */\n#cmakedefine HAVE_SYS_SYSCALL_H\n\n/* Define to 1 if you have the <sys/time.h> header file. */\n#cmakedefine HAVE_SYS_TIME_H\n\n/* Define to 1 if you have the <sys/types.h> header file. */\n#cmakedefine HAVE_SYS_TYPES_H ${HAVE_SYS_TYPES_H}\n\n/* Define to 1 if you have the <sys/ucontext.h> header file. */\n#cmakedefine HAVE_SYS_UCONTEXT_H\n\n/* Define to 1 if you have the <sys/utsname.h> header file. */\n#cmakedefine HAVE_SYS_UTSNAME_H\n\n/* Define to 1 if you have the <ucontext.h> header file. */\n#cmakedefine HAVE_UCONTEXT_H\n\n/* Define to 1 if you have the <unistd.h> header file. */\n#cmakedefine HAVE_UNISTD_H ${HAVE_UNISTD_H}\n\n/* Define to 1 if you have the <unwind.h> header file. */\n#cmakedefine HAVE_UNWIND_H ${HAVE_UNWIND_H}\n\n/* define if the compiler supports using expression for operator */\n#cmakedefine HAVE_USING_OPERATOR\n\n/* define if your compiler has __attribute__ */\n#cmakedefine HAVE___ATTRIBUTE__\n\n/* define if your compiler has __builtin_expect */\n#cmakedefine HAVE___BUILTIN_EXPECT ${HAVE___BUILTIN_EXPECT}\n\n/* define if your compiler has __sync_val_compare_and_swap */\n#cmakedefine HAVE___SYNC_VAL_COMPARE_AND_SWAP\n\n/* Define to the sub-directory in which libtool stores uninstalled libraries.\n   */\n#cmakedefine LT_OBJDIR\n\n/* Name of package */\n#cmakedefine PACKAGE\n\n/* Define to the address where bug reports for this package should be sent. */\n#cmakedefine PACKAGE_BUGREPORT\n\n/* Define to the full name of this package. */\n#cmakedefine PACKAGE_NAME\n\n/* Define to the full name and version of this package. */\n#cmakedefine PACKAGE_STRING\n\n/* Define to the one symbol short name of this package. */\n#cmakedefine PACKAGE_TARNAME\n\n/* Define to the home page for this package. */\n#cmakedefine PACKAGE_URL\n\n/* Define to the version of this package. */\n#cmakedefine PACKAGE_VERSION\n\n/* How to access the PC from a struct ucontext */\n#cmakedefine PC_FROM_UCONTEXT\n\n/* Define to necessary symbol if this constant uses a non-standard name on\n   your system. */\n#cmakedefine PTHREAD_CREATE_JOINABLE\n\n/* The size of `void *', as computed by sizeof. */\n#cmakedefine SIZEOF_VOID_P ${SIZEOF_VOID_P}\n\n/* Define to 1 if you have the ANSI C header files. */\n#cmakedefine STDC_HEADERS\n\n/* the namespace where STL code like vector<> is defined */\n#cmakedefine STL_NAMESPACE ${STL_NAMESPACE}\n\n/* location of source code */\n#cmakedefine TEST_SRC_DIR ${TEST_SRC_DIR}\n\n/* Version number of package */\n#cmakedefine VERSION\n\n/* Stops putting the code inside the Google namespace */\n#cmakedefine _END_GOOGLE_NAMESPACE_ ${_END_GOOGLE_NAMESPACE_}\n\n/* Puts following code inside the Google namespace */\n#cmakedefine _START_GOOGLE_NAMESPACE_ ${_START_GOOGLE_NAMESPACE_}\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/config.h.in",
    "content": "/* src/config.h.in.  Generated from configure.ac by autoheader.  */\n\n/* define if glog doesn't use RTTI */\n#undef DISABLE_RTTI\n\n/* Namespace for Google classes */\n#undef GOOGLE_NAMESPACE\n\n/* Define if you have the `dladdr' function */\n#undef HAVE_DLADDR\n\n/* Define to 1 if you have the <dlfcn.h> header file. */\n#undef HAVE_DLFCN_H\n\n/* Define to 1 if you have the <execinfo.h> header file. */\n#undef HAVE_EXECINFO_H\n\n/* Define if you have the `fcntl' function */\n#undef HAVE_FCNTL\n\n/* Define to 1 if you have the <glob.h> header file. */\n#undef HAVE_GLOB_H\n\n/* Define to 1 if you have the <inttypes.h> header file. */\n#undef HAVE_INTTYPES_H\n\n/* Define to 1 if you have the `pthread' library (-lpthread). */\n#undef HAVE_LIBPTHREAD\n\n/* Define to 1 if you have the <libunwind.h> header file. */\n#undef HAVE_LIBUNWIND_H\n\n/* define if you have google gflags library */\n#undef HAVE_LIB_GFLAGS_DISABLED\n\n/* define if you have google gmock library */\n#undef HAVE_LIB_GMOCK\n\n/* define if you have google gtest library */\n#undef HAVE_LIB_GTEST\n\n/* define if you have libunwind */\n#undef HAVE_LIB_UNWIND\n\n/* Define to 1 if you have the <memory.h> header file. */\n#undef HAVE_MEMORY_H\n\n/* define if the compiler implements namespaces */\n#undef HAVE_NAMESPACES\n\n/* Define if you have the 'pread' function */\n#undef HAVE_PREAD\n\n/* Define if you have POSIX threads libraries and header files. */\n#undef HAVE_PTHREAD\n\n/* Define to 1 if you have the <pwd.h> header file. */\n#undef HAVE_PWD_H\n\n/* Define if you have the 'pwrite' function */\n#undef HAVE_PWRITE\n\n/* define if the compiler implements pthread_rwlock_* */\n#undef HAVE_RWLOCK\n\n/* Define if you have the 'sigaction' function */\n#undef HAVE_SIGACTION\n\n/* Define if you have the `sigaltstack' function */\n#undef HAVE_SIGALTSTACK\n\n/* Define to 1 if you have the <stdint.h> header file. */\n#undef HAVE_STDINT_H\n\n/* Define to 1 if you have the <stdlib.h> header file. */\n#undef HAVE_STDLIB_H\n\n/* Define to 1 if you have the <strings.h> header file. */\n#undef HAVE_STRINGS_H\n\n/* Define to 1 if you have the <string.h> header file. */\n#undef HAVE_STRING_H\n\n/* Define to 1 if you have the <syscall.h> header file. */\n#undef HAVE_SYSCALL_H\n\n/* Define to 1 if you have the <syslog.h> header file. */\n#undef HAVE_SYSLOG_H\n\n/* Define to 1 if you have the <sys/stat.h> header file. */\n#undef HAVE_SYS_STAT_H\n\n/* Define to 1 if you have the <sys/syscall.h> header file. */\n#undef HAVE_SYS_SYSCALL_H\n\n/* Define to 1 if you have the <sys/time.h> header file. */\n#undef HAVE_SYS_TIME_H\n\n/* Define to 1 if you have the <sys/types.h> header file. */\n#undef HAVE_SYS_TYPES_H\n\n/* Define to 1 if you have the <sys/ucontext.h> header file. */\n#undef HAVE_SYS_UCONTEXT_H\n\n/* Define to 1 if you have the <sys/utsname.h> header file. */\n#undef HAVE_SYS_UTSNAME_H\n\n/* Define to 1 if you have the <ucontext.h> header file. */\n#undef HAVE_UCONTEXT_H\n\n/* Define to 1 if you have the <unistd.h> header file. */\n#undef HAVE_UNISTD_H\n\n/* Define to 1 if you have the <unwind.h> header file. */\n#undef HAVE_UNWIND_H\n\n/* define if the compiler supports using expression for operator */\n#undef HAVE_USING_OPERATOR\n\n/* define if your compiler has __attribute__ */\n#undef HAVE___ATTRIBUTE__\n\n/* define if your compiler has __builtin_expect */\n#undef HAVE___BUILTIN_EXPECT\n\n/* define if your compiler has __sync_val_compare_and_swap */\n#undef HAVE___SYNC_VAL_COMPARE_AND_SWAP\n\n/* Define to the sub-directory in which libtool stores uninstalled libraries.\n   */\n#undef LT_OBJDIR\n\n/* Name of package */\n#undef PACKAGE\n\n/* Define to the address where bug reports for this package should be sent. */\n#undef PACKAGE_BUGREPORT\n\n/* Define to the full name of this package. */\n#undef PACKAGE_NAME\n\n/* Define to the full name and version of this package. */\n#undef PACKAGE_STRING\n\n/* Define to the one symbol short name of this package. */\n#undef PACKAGE_TARNAME\n\n/* Define to the home page for this package. */\n#undef PACKAGE_URL\n\n/* Define to the version of this package. */\n#undef PACKAGE_VERSION\n\n/* How to access the PC from a struct ucontext */\n#undef PC_FROM_UCONTEXT\n\n/* Define to necessary symbol if this constant uses a non-standard name on\n   your system. */\n#undef PTHREAD_CREATE_JOINABLE\n\n/* The size of `void *', as computed by sizeof. */\n#undef SIZEOF_VOID_P\n\n/* Define to 1 if you have the ANSI C header files. */\n#undef STDC_HEADERS\n\n/* the namespace where STL code like vector<> is defined */\n#undef STL_NAMESPACE\n\n/* location of source code */\n#undef TEST_SRC_DIR\n\n/* Version number of package */\n#undef VERSION\n\n/* Stops putting the code inside the Google namespace */\n#undef _END_GOOGLE_NAMESPACE_\n\n/* Puts following code inside the Google namespace */\n#undef _START_GOOGLE_NAMESPACE_\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/config_for_unittests.h",
    "content": "// Copyright (c) 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// ---\n// All Rights Reserved.\n//\n// Author: Craig Silverstein\n// Copied from google-perftools and modified by Shinichiro Hamaji\n//\n// This file is needed for windows -- unittests are not part of the\n// glog dll, but still want to include config.h just like the\n// dll does, so they can use internal tools and APIs for testing.\n//\n// The problem is that config.h declares GOOGLE_GLOG_DLL_DECL to be\n// for exporting symbols, but the unittest needs to *import* symbols\n// (since it's not the dll).\n//\n// The solution is to have this file, which is just like config.h but\n// sets GOOGLE_GLOG_DLL_DECL to do a dllimport instead of a dllexport.\n//\n// The reason we need this extra GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS\n// variable is in case people want to set GOOGLE_GLOG_DLL_DECL explicitly\n// to something other than __declspec(dllexport).  In that case, they\n// may want to use something other than __declspec(dllimport) for the\n// unittest case.  For that, we allow folks to define both\n// GOOGLE_GLOG_DLL_DECL and GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS explicitly.\n//\n// NOTE: This file is equivalent to config.h on non-windows systems,\n// which never defined GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS and always\n// define GOOGLE_GLOG_DLL_DECL to the empty string.\n\n#include \"config.h\"\n\n#undef GOOGLE_GLOG_DLL_DECL\n#ifdef GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS\n# define GOOGLE_GLOG_DLL_DECL  GOOGLE_GLOG_DLL_DECL_FOR_UNITTESTS\n#else\n// if DLL_DECL_FOR_UNITTESTS isn't defined, use \"\"\n# define GOOGLE_GLOG_DLL_DECL\n#endif\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/demangle.cc",
    "content": "// Copyright (c) 2006, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: Satoru Takabayashi\n//\n// For reference check out:\n// http://www.codesourcery.com/public/cxx-abi/abi.html#mangling\n//\n// Note that we only have partial C++0x support yet.\n\n#include <stdio.h>  // for NULL\n#include \"demangle.h\"\n\n_START_GOOGLE_NAMESPACE_\n\ntypedef struct {\n  const char *abbrev;\n  const char *real_name;\n} AbbrevPair;\n\n// List of operators from Itanium C++ ABI.\nstatic const AbbrevPair kOperatorList[] = {\n  { \"nw\", \"new\" },\n  { \"na\", \"new[]\" },\n  { \"dl\", \"delete\" },\n  { \"da\", \"delete[]\" },\n  { \"ps\", \"+\" },\n  { \"ng\", \"-\" },\n  { \"ad\", \"&\" },\n  { \"de\", \"*\" },\n  { \"co\", \"~\" },\n  { \"pl\", \"+\" },\n  { \"mi\", \"-\" },\n  { \"ml\", \"*\" },\n  { \"dv\", \"/\" },\n  { \"rm\", \"%\" },\n  { \"an\", \"&\" },\n  { \"or\", \"|\" },\n  { \"eo\", \"^\" },\n  { \"aS\", \"=\" },\n  { \"pL\", \"+=\" },\n  { \"mI\", \"-=\" },\n  { \"mL\", \"*=\" },\n  { \"dV\", \"/=\" },\n  { \"rM\", \"%=\" },\n  { \"aN\", \"&=\" },\n  { \"oR\", \"|=\" },\n  { \"eO\", \"^=\" },\n  { \"ls\", \"<<\" },\n  { \"rs\", \">>\" },\n  { \"lS\", \"<<=\" },\n  { \"rS\", \">>=\" },\n  { \"eq\", \"==\" },\n  { \"ne\", \"!=\" },\n  { \"lt\", \"<\" },\n  { \"gt\", \">\" },\n  { \"le\", \"<=\" },\n  { \"ge\", \">=\" },\n  { \"nt\", \"!\" },\n  { \"aa\", \"&&\" },\n  { \"oo\", \"||\" },\n  { \"pp\", \"++\" },\n  { \"mm\", \"--\" },\n  { \"cm\", \",\" },\n  { \"pm\", \"->*\" },\n  { \"pt\", \"->\" },\n  { \"cl\", \"()\" },\n  { \"ix\", \"[]\" },\n  { \"qu\", \"?\" },\n  { \"st\", \"sizeof\" },\n  { \"sz\", \"sizeof\" },\n  { NULL, NULL },\n};\n\n// List of builtin types from Itanium C++ ABI.\nstatic const AbbrevPair kBuiltinTypeList[] = {\n  { \"v\", \"void\" },\n  { \"w\", \"wchar_t\" },\n  { \"b\", \"bool\" },\n  { \"c\", \"char\" },\n  { \"a\", \"signed char\" },\n  { \"h\", \"unsigned char\" },\n  { \"s\", \"short\" },\n  { \"t\", \"unsigned short\" },\n  { \"i\", \"int\" },\n  { \"j\", \"unsigned int\" },\n  { \"l\", \"long\" },\n  { \"m\", \"unsigned long\" },\n  { \"x\", \"long long\" },\n  { \"y\", \"unsigned long long\" },\n  { \"n\", \"__int128\" },\n  { \"o\", \"unsigned __int128\" },\n  { \"f\", \"float\" },\n  { \"d\", \"double\" },\n  { \"e\", \"long double\" },\n  { \"g\", \"__float128\" },\n  { \"z\", \"ellipsis\" },\n  { NULL, NULL }\n};\n\n// List of substitutions Itanium C++ ABI.\nstatic const AbbrevPair kSubstitutionList[] = {\n  { \"St\", \"\" },\n  { \"Sa\", \"allocator\" },\n  { \"Sb\", \"basic_string\" },\n  // std::basic_string<char, std::char_traits<char>,std::allocator<char> >\n  { \"Ss\", \"string\"},\n  // std::basic_istream<char, std::char_traits<char> >\n  { \"Si\", \"istream\" },\n  // std::basic_ostream<char, std::char_traits<char> >\n  { \"So\", \"ostream\" },\n  // std::basic_iostream<char, std::char_traits<char> >\n  { \"Sd\", \"iostream\" },\n  { NULL, NULL }\n};\n\n// State needed for demangling.\ntypedef struct {\n  const char *mangled_cur;  // Cursor of mangled name.\n  char *out_cur;            // Cursor of output string.\n  const char *out_begin;    // Beginning of output string.\n  const char *out_end;      // End of output string.\n  const char *prev_name;    // For constructors/destructors.\n  int prev_name_length;     // For constructors/destructors.\n  short nest_level;         // For nested names.\n  bool append;              // Append flag.\n  bool overflowed;          // True if output gets overflowed.\n} State;\n\n// We don't use strlen() in libc since it's not guaranteed to be async\n// signal safe.\nstatic size_t StrLen(const char *str) {\n  size_t len = 0;\n  while (*str != '\\0') {\n    ++str;\n    ++len;\n  }\n  return len;\n}\n\n// Returns true if \"str\" has at least \"n\" characters remaining.\nstatic bool AtLeastNumCharsRemaining(const char *str, int n) {\n  for (int i = 0; i < n; ++i) {\n    if (str[i] == '\\0') {\n      return false;\n    }\n  }\n  return true;\n}\n\n// Returns true if \"str\" has \"prefix\" as a prefix.\nstatic bool StrPrefix(const char *str, const char *prefix) {\n  size_t i = 0;\n  while (str[i] != '\\0' && prefix[i] != '\\0' &&\n         str[i] == prefix[i]) {\n    ++i;\n  }\n  return prefix[i] == '\\0';  // Consumed everything in \"prefix\".\n}\n\nstatic void InitState(State *state, const char *mangled,\n                      char *out, int out_size) {\n  state->mangled_cur = mangled;\n  state->out_cur = out;\n  state->out_begin = out;\n  state->out_end = out + out_size;\n  state->prev_name  = NULL;\n  state->prev_name_length = -1;\n  state->nest_level = -1;\n  state->append = true;\n  state->overflowed = false;\n}\n\n// Returns true and advances \"mangled_cur\" if we find \"one_char_token\"\n// at \"mangled_cur\" position.  It is assumed that \"one_char_token\" does\n// not contain '\\0'.\nstatic bool ParseOneCharToken(State *state, const char one_char_token) {\n  if (state->mangled_cur[0] == one_char_token) {\n    ++state->mangled_cur;\n    return true;\n  }\n  return false;\n}\n\n// Returns true and advances \"mangled_cur\" if we find \"two_char_token\"\n// at \"mangled_cur\" position.  It is assumed that \"two_char_token\" does\n// not contain '\\0'.\nstatic bool ParseTwoCharToken(State *state, const char *two_char_token) {\n  if (state->mangled_cur[0] == two_char_token[0] &&\n      state->mangled_cur[1] == two_char_token[1]) {\n    state->mangled_cur += 2;\n    return true;\n  }\n  return false;\n}\n\n// Returns true and advances \"mangled_cur\" if we find any character in\n// \"char_class\" at \"mangled_cur\" position.\nstatic bool ParseCharClass(State *state, const char *char_class) {\n  const char *p = char_class;\n  for (; *p != '\\0'; ++p) {\n    if (state->mangled_cur[0] == *p) {\n      ++state->mangled_cur;\n      return true;\n    }\n  }\n  return false;\n}\n\n// This function is used for handling an optional non-terminal.\nstatic bool Optional(bool) {\n  return true;\n}\n\n// This function is used for handling <non-terminal>+ syntax.\ntypedef bool (*ParseFunc)(State *);\nstatic bool OneOrMore(ParseFunc parse_func, State *state) {\n  if (parse_func(state)) {\n    while (parse_func(state)) {\n    }\n    return true;\n  }\n  return false;\n}\n\n// This function is used for handling <non-terminal>* syntax. The function\n// always returns true and must be followed by a termination token or a\n// terminating sequence not handled by parse_func (e.g.\n// ParseOneCharToken(state, 'E')).\nstatic bool ZeroOrMore(ParseFunc parse_func, State *state) {\n  while (parse_func(state)) {\n  }\n  return true;\n}\n\n// Append \"str\" at \"out_cur\".  If there is an overflow, \"overflowed\"\n// is set to true for later use.  The output string is ensured to\n// always terminate with '\\0' as long as there is no overflow.\nstatic void Append(State *state, const char * const str, const int length) {\n  int i;\n  for (i = 0; i < length; ++i) {\n    if (state->out_cur + 1 < state->out_end) {  // +1 for '\\0'\n      *state->out_cur = str[i];\n      ++state->out_cur;\n    } else {\n      state->overflowed = true;\n      break;\n    }\n  }\n  if (!state->overflowed) {\n    *state->out_cur = '\\0';  // Terminate it with '\\0'\n  }\n}\n\n// We don't use equivalents in libc to avoid locale issues.\nstatic bool IsLower(char c) {\n  return c >= 'a' && c <= 'z';\n}\n\nstatic bool IsAlpha(char c) {\n  return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');\n}\n\nstatic bool IsDigit(char c) {\n  return c >= '0' && c <= '9';\n}\n\n// Returns true if \"str\" is a function clone suffix.  These suffixes are used\n// by GCC 4.5.x and later versions to indicate functions which have been\n// cloned during optimization.  We treat any sequence (.<alpha>+.<digit>+)+ as\n// a function clone suffix.\nstatic bool IsFunctionCloneSuffix(const char *str) {\n  size_t i = 0;\n  while (str[i] != '\\0') {\n    // Consume a single .<alpha>+.<digit>+ sequence.\n    if (str[i] != '.' || !IsAlpha(str[i + 1])) {\n      return false;\n    }\n    i += 2;\n    while (IsAlpha(str[i])) {\n      ++i;\n    }\n    if (str[i] != '.' || !IsDigit(str[i + 1])) {\n      return false;\n    }\n    i += 2;\n    while (IsDigit(str[i])) {\n      ++i;\n    }\n  }\n  return true;  // Consumed everything in \"str\".\n}\n\n// Append \"str\" with some tweaks, iff \"append\" state is true.\n// Returns true so that it can be placed in \"if\" conditions.\nstatic void MaybeAppendWithLength(State *state, const char * const str,\n                                  const int length) {\n  if (state->append && length > 0) {\n    // Append a space if the output buffer ends with '<' and \"str\"\n    // starts with '<' to avoid <<<.\n    if (str[0] == '<' && state->out_begin < state->out_cur  &&\n        state->out_cur[-1] == '<') {\n      Append(state, \" \", 1);\n    }\n    // Remember the last identifier name for ctors/dtors.\n    if (IsAlpha(str[0]) || str[0] == '_') {\n      state->prev_name = state->out_cur;\n      state->prev_name_length = length;\n    }\n    Append(state, str, length);\n  }\n}\n\n// A convenient wrapper arount MaybeAppendWithLength().\nstatic bool MaybeAppend(State *state, const char * const str) {\n  if (state->append) {\n    int length = StrLen(str);\n    MaybeAppendWithLength(state, str, length);\n  }\n  return true;\n}\n\n// This function is used for handling nested names.\nstatic bool EnterNestedName(State *state) {\n  state->nest_level = 0;\n  return true;\n}\n\n// This function is used for handling nested names.\nstatic bool LeaveNestedName(State *state, short prev_value) {\n  state->nest_level = prev_value;\n  return true;\n}\n\n// Disable the append mode not to print function parameters, etc.\nstatic bool DisableAppend(State *state) {\n  state->append = false;\n  return true;\n}\n\n// Restore the append mode to the previous state.\nstatic bool RestoreAppend(State *state, bool prev_value) {\n  state->append = prev_value;\n  return true;\n}\n\n// Increase the nest level for nested names.\nstatic void MaybeIncreaseNestLevel(State *state) {\n  if (state->nest_level > -1) {\n    ++state->nest_level;\n  }\n}\n\n// Appends :: for nested names if necessary.\nstatic void MaybeAppendSeparator(State *state) {\n  if (state->nest_level >= 1) {\n    MaybeAppend(state, \"::\");\n  }\n}\n\n// Cancel the last separator if necessary.\nstatic void MaybeCancelLastSeparator(State *state) {\n  if (state->nest_level >= 1 && state->append &&\n      state->out_begin <= state->out_cur - 2) {\n    state->out_cur -= 2;\n    *state->out_cur = '\\0';\n  }\n}\n\n// Returns true if the identifier of the given length pointed to by\n// \"mangled_cur\" is anonymous namespace.\nstatic bool IdentifierIsAnonymousNamespace(State *state, int length) {\n  static const char anon_prefix[] = \"_GLOBAL__N_\";\n  return (length > (int)sizeof(anon_prefix) - 1 &&  // Should be longer.\n          StrPrefix(state->mangled_cur, anon_prefix));\n}\n\n// Forward declarations of our parsing functions.\nstatic bool ParseMangledName(State *state);\nstatic bool ParseEncoding(State *state);\nstatic bool ParseName(State *state);\nstatic bool ParseUnscopedName(State *state);\nstatic bool ParseUnscopedTemplateName(State *state);\nstatic bool ParseNestedName(State *state);\nstatic bool ParsePrefix(State *state);\nstatic bool ParseUnqualifiedName(State *state);\nstatic bool ParseSourceName(State *state);\nstatic bool ParseLocalSourceName(State *state);\nstatic bool ParseNumber(State *state, int *number_out);\nstatic bool ParseFloatNumber(State *state);\nstatic bool ParseSeqId(State *state);\nstatic bool ParseIdentifier(State *state, int length);\nstatic bool ParseOperatorName(State *state);\nstatic bool ParseSpecialName(State *state);\nstatic bool ParseCallOffset(State *state);\nstatic bool ParseNVOffset(State *state);\nstatic bool ParseVOffset(State *state);\nstatic bool ParseCtorDtorName(State *state);\nstatic bool ParseType(State *state);\nstatic bool ParseCVQualifiers(State *state);\nstatic bool ParseBuiltinType(State *state);\nstatic bool ParseFunctionType(State *state);\nstatic bool ParseBareFunctionType(State *state);\nstatic bool ParseClassEnumType(State *state);\nstatic bool ParseArrayType(State *state);\nstatic bool ParsePointerToMemberType(State *state);\nstatic bool ParseTemplateParam(State *state);\nstatic bool ParseTemplateTemplateParam(State *state);\nstatic bool ParseTemplateArgs(State *state);\nstatic bool ParseTemplateArg(State *state);\nstatic bool ParseExpression(State *state);\nstatic bool ParseExprPrimary(State *state);\nstatic bool ParseLocalName(State *state);\nstatic bool ParseDiscriminator(State *state);\nstatic bool ParseSubstitution(State *state);\n\n// Implementation note: the following code is a straightforward\n// translation of the Itanium C++ ABI defined in BNF with a couple of\n// exceptions.\n//\n// - Support GNU extensions not defined in the Itanium C++ ABI\n// - <prefix> and <template-prefix> are combined to avoid infinite loop\n// - Reorder patterns to shorten the code\n// - Reorder patterns to give greedier functions precedence\n//   We'll mark \"Less greedy than\" for these cases in the code\n//\n// Each parsing function changes the state and returns true on\n// success.  Otherwise, don't change the state and returns false.  To\n// ensure that the state isn't changed in the latter case, we save the\n// original state before we call more than one parsing functions\n// consecutively with &&, and restore the state if unsuccessful.  See\n// ParseEncoding() as an example of this convention.  We follow the\n// convention throughout the code.\n//\n// Originally we tried to do demangling without following the full ABI\n// syntax but it turned out we needed to follow the full syntax to\n// parse complicated cases like nested template arguments.  Note that\n// implementing a full-fledged demangler isn't trivial (libiberty's\n// cp-demangle.c has +4300 lines).\n//\n// Note that (foo) in <(foo) ...> is a modifier to be ignored.\n//\n// Reference:\n// - Itanium C++ ABI\n//   <http://www.codesourcery.com/cxx-abi/abi.html#mangling>\n\n// <mangled-name> ::= _Z <encoding>\nstatic bool ParseMangledName(State *state) {\n  return ParseTwoCharToken(state, \"_Z\") && ParseEncoding(state);\n}\n\n// <encoding> ::= <(function) name> <bare-function-type>\n//            ::= <(data) name>\n//            ::= <special-name>\nstatic bool ParseEncoding(State *state) {\n  State copy = *state;\n  if (ParseName(state) && ParseBareFunctionType(state)) {\n    return true;\n  }\n  *state = copy;\n\n  if (ParseName(state) || ParseSpecialName(state)) {\n    return true;\n  }\n  return false;\n}\n\n// <name> ::= <nested-name>\n//        ::= <unscoped-template-name> <template-args>\n//        ::= <unscoped-name>\n//        ::= <local-name>\nstatic bool ParseName(State *state) {\n  if (ParseNestedName(state) || ParseLocalName(state)) {\n    return true;\n  }\n\n  State copy = *state;\n  if (ParseUnscopedTemplateName(state) &&\n      ParseTemplateArgs(state)) {\n    return true;\n  }\n  *state = copy;\n\n  // Less greedy than <unscoped-template-name> <template-args>.\n  if (ParseUnscopedName(state)) {\n    return true;\n  }\n  return false;\n}\n\n// <unscoped-name> ::= <unqualified-name>\n//                 ::= St <unqualified-name>\nstatic bool ParseUnscopedName(State *state) {\n  if (ParseUnqualifiedName(state)) {\n    return true;\n  }\n\n  State copy = *state;\n  if (ParseTwoCharToken(state, \"St\") &&\n      MaybeAppend(state, \"std::\") &&\n      ParseUnqualifiedName(state)) {\n    return true;\n  }\n  *state = copy;\n  return false;\n}\n\n// <unscoped-template-name> ::= <unscoped-name>\n//                          ::= <substitution>\nstatic bool ParseUnscopedTemplateName(State *state) {\n  return ParseUnscopedName(state) || ParseSubstitution(state);\n}\n\n// <nested-name> ::= N [<CV-qualifiers>] <prefix> <unqualified-name> E\n//               ::= N [<CV-qualifiers>] <template-prefix> <template-args> E\nstatic bool ParseNestedName(State *state) {\n  State copy = *state;\n  if (ParseOneCharToken(state, 'N') &&\n      EnterNestedName(state) &&\n      Optional(ParseCVQualifiers(state)) &&\n      ParsePrefix(state) &&\n      LeaveNestedName(state, copy.nest_level) &&\n      ParseOneCharToken(state, 'E')) {\n    return true;\n  }\n  *state = copy;\n  return false;\n}\n\n// This part is tricky.  If we literally translate them to code, we'll\n// end up infinite loop.  Hence we merge them to avoid the case.\n//\n// <prefix> ::= <prefix> <unqualified-name>\n//          ::= <template-prefix> <template-args>\n//          ::= <template-param>\n//          ::= <substitution>\n//          ::= # empty\n// <template-prefix> ::= <prefix> <(template) unqualified-name>\n//                   ::= <template-param>\n//                   ::= <substitution>\nstatic bool ParsePrefix(State *state) {\n  bool has_something = false;\n  while (true) {\n    MaybeAppendSeparator(state);\n    if (ParseTemplateParam(state) ||\n        ParseSubstitution(state) ||\n        ParseUnscopedName(state)) {\n      has_something = true;\n      MaybeIncreaseNestLevel(state);\n      continue;\n    }\n    MaybeCancelLastSeparator(state);\n    if (has_something && ParseTemplateArgs(state)) {\n      return ParsePrefix(state);\n    } else {\n      break;\n    }\n  }\n  return true;\n}\n\n// <unqualified-name> ::= <operator-name>\n//                    ::= <ctor-dtor-name>\n//                    ::= <source-name>\n//                    ::= <local-source-name>\nstatic bool ParseUnqualifiedName(State *state) {\n  return (ParseOperatorName(state) ||\n          ParseCtorDtorName(state) ||\n          ParseSourceName(state) ||\n          ParseLocalSourceName(state));\n}\n\n// <source-name> ::= <positive length number> <identifier>\nstatic bool ParseSourceName(State *state) {\n  State copy = *state;\n  int length = -1;\n  if (ParseNumber(state, &length) && ParseIdentifier(state, length)) {\n    return true;\n  }\n  *state = copy;\n  return false;\n}\n\n// <local-source-name> ::= L <source-name> [<discriminator>]\n//\n// References:\n//   http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31775\n//   http://gcc.gnu.org/viewcvs?view=rev&revision=124467\nstatic bool ParseLocalSourceName(State *state) {\n  State copy = *state;\n  if (ParseOneCharToken(state, 'L') && ParseSourceName(state) &&\n      Optional(ParseDiscriminator(state))) {\n    return true;\n  }\n  *state = copy;\n  return false;\n}\n\n// <number> ::= [n] <non-negative decimal integer>\n// If \"number_out\" is non-null, then *number_out is set to the value of the\n// parsed number on success.\nstatic bool ParseNumber(State *state, int *number_out) {\n  int sign = 1;\n  if (ParseOneCharToken(state, 'n')) {\n    sign = -1;\n  }\n  const char *p = state->mangled_cur;\n  int number = 0;\n  for (;*p != '\\0'; ++p) {\n    if (IsDigit(*p)) {\n      number = number * 10 + (*p - '0');\n    } else {\n      break;\n    }\n  }\n  if (p != state->mangled_cur) {  // Conversion succeeded.\n    state->mangled_cur = p;\n    if (number_out != NULL) {\n      *number_out = number * sign;\n    }\n    return true;\n  }\n  return false;\n}\n\n// Floating-point literals are encoded using a fixed-length lowercase\n// hexadecimal string.\nstatic bool ParseFloatNumber(State *state) {\n  const char *p = state->mangled_cur;\n  for (;*p != '\\0'; ++p) {\n    if (!IsDigit(*p) && !(*p >= 'a' && *p <= 'f')) {\n      break;\n    }\n  }\n  if (p != state->mangled_cur) {  // Conversion succeeded.\n    state->mangled_cur = p;\n    return true;\n  }\n  return false;\n}\n\n// The <seq-id> is a sequence number in base 36,\n// using digits and upper case letters\nstatic bool ParseSeqId(State *state) {\n  const char *p = state->mangled_cur;\n  for (;*p != '\\0'; ++p) {\n    if (!IsDigit(*p) && !(*p >= 'A' && *p <= 'Z')) {\n      break;\n    }\n  }\n  if (p != state->mangled_cur) {  // Conversion succeeded.\n    state->mangled_cur = p;\n    return true;\n  }\n  return false;\n}\n\n// <identifier> ::= <unqualified source code identifier> (of given length)\nstatic bool ParseIdentifier(State *state, int length) {\n  if (length == -1 ||\n      !AtLeastNumCharsRemaining(state->mangled_cur, length)) {\n    return false;\n  }\n  if (IdentifierIsAnonymousNamespace(state, length)) {\n    MaybeAppend(state, \"(anonymous namespace)\");\n  } else {\n    MaybeAppendWithLength(state, state->mangled_cur, length);\n  }\n  state->mangled_cur += length;\n  return true;\n}\n\n// <operator-name> ::= nw, and other two letters cases\n//                 ::= cv <type>  # (cast)\n//                 ::= v  <digit> <source-name> # vendor extended operator\nstatic bool ParseOperatorName(State *state) {\n  if (!AtLeastNumCharsRemaining(state->mangled_cur, 2)) {\n    return false;\n  }\n  // First check with \"cv\" (cast) case.\n  State copy = *state;\n  if (ParseTwoCharToken(state, \"cv\") &&\n      MaybeAppend(state, \"operator \") &&\n      EnterNestedName(state) &&\n      ParseType(state) &&\n      LeaveNestedName(state, copy.nest_level)) {\n    return true;\n  }\n  *state = copy;\n\n  // Then vendor extended operators.\n  if (ParseOneCharToken(state, 'v') && ParseCharClass(state, \"0123456789\") &&\n      ParseSourceName(state)) {\n    return true;\n  }\n  *state = copy;\n\n  // Other operator names should start with a lower alphabet followed\n  // by a lower/upper alphabet.\n  if (!(IsLower(state->mangled_cur[0]) &&\n        IsAlpha(state->mangled_cur[1]))) {\n    return false;\n  }\n  // We may want to perform a binary search if we really need speed.\n  const AbbrevPair *p;\n  for (p = kOperatorList; p->abbrev != NULL; ++p) {\n    if (state->mangled_cur[0] == p->abbrev[0] &&\n        state->mangled_cur[1] == p->abbrev[1]) {\n      MaybeAppend(state, \"operator\");\n      if (IsLower(*p->real_name)) {  // new, delete, etc.\n        MaybeAppend(state, \" \");\n      }\n      MaybeAppend(state, p->real_name);\n      state->mangled_cur += 2;\n      return true;\n    }\n  }\n  return false;\n}\n\n// <special-name> ::= TV <type>\n//                ::= TT <type>\n//                ::= TI <type>\n//                ::= TS <type>\n//                ::= Tc <call-offset> <call-offset> <(base) encoding>\n//                ::= GV <(object) name>\n//                ::= T <call-offset> <(base) encoding>\n// G++ extensions:\n//                ::= TC <type> <(offset) number> _ <(base) type>\n//                ::= TF <type>\n//                ::= TJ <type>\n//                ::= GR <name>\n//                ::= GA <encoding>\n//                ::= Th <call-offset> <(base) encoding>\n//                ::= Tv <call-offset> <(base) encoding>\n//\n// Note: we don't care much about them since they don't appear in\n// stack traces.  The are special data.\nstatic bool ParseSpecialName(State *state) {\n  State copy = *state;\n  if (ParseOneCharToken(state, 'T') &&\n      ParseCharClass(state, \"VTIS\") &&\n      ParseType(state)) {\n    return true;\n  }\n  *state = copy;\n\n  if (ParseTwoCharToken(state, \"Tc\") && ParseCallOffset(state) &&\n      ParseCallOffset(state) && ParseEncoding(state)) {\n    return true;\n  }\n  *state = copy;\n\n  if (ParseTwoCharToken(state, \"GV\") &&\n      ParseName(state)) {\n    return true;\n  }\n  *state = copy;\n\n  if (ParseOneCharToken(state, 'T') && ParseCallOffset(state) &&\n      ParseEncoding(state)) {\n    return true;\n  }\n  *state = copy;\n\n  // G++ extensions\n  if (ParseTwoCharToken(state, \"TC\") && ParseType(state) &&\n      ParseNumber(state, NULL) && ParseOneCharToken(state, '_') &&\n      DisableAppend(state) &&\n      ParseType(state)) {\n    RestoreAppend(state, copy.append);\n    return true;\n  }\n  *state = copy;\n\n  if (ParseOneCharToken(state, 'T') && ParseCharClass(state, \"FJ\") &&\n      ParseType(state)) {\n    return true;\n  }\n  *state = copy;\n\n  if (ParseTwoCharToken(state, \"GR\") && ParseName(state)) {\n    return true;\n  }\n  *state = copy;\n\n  if (ParseTwoCharToken(state, \"GA\") && ParseEncoding(state)) {\n    return true;\n  }\n  *state = copy;\n\n  if (ParseOneCharToken(state, 'T') && ParseCharClass(state, \"hv\") &&\n      ParseCallOffset(state) && ParseEncoding(state)) {\n    return true;\n  }\n  *state = copy;\n  return false;\n}\n\n// <call-offset> ::= h <nv-offset> _\n//               ::= v <v-offset> _\nstatic bool ParseCallOffset(State *state) {\n  State copy = *state;\n  if (ParseOneCharToken(state, 'h') &&\n      ParseNVOffset(state) && ParseOneCharToken(state, '_')) {\n    return true;\n  }\n  *state = copy;\n\n  if (ParseOneCharToken(state, 'v') &&\n      ParseVOffset(state) && ParseOneCharToken(state, '_')) {\n    return true;\n  }\n  *state = copy;\n\n  return false;\n}\n\n// <nv-offset> ::= <(offset) number>\nstatic bool ParseNVOffset(State *state) {\n  return ParseNumber(state, NULL);\n}\n\n// <v-offset>  ::= <(offset) number> _ <(virtual offset) number>\nstatic bool ParseVOffset(State *state) {\n  State copy = *state;\n  if (ParseNumber(state, NULL) && ParseOneCharToken(state, '_') &&\n      ParseNumber(state, NULL)) {\n    return true;\n  }\n  *state = copy;\n  return false;\n}\n\n// <ctor-dtor-name> ::= C1 | C2 | C3\n//                  ::= D0 | D1 | D2\nstatic bool ParseCtorDtorName(State *state) {\n  State copy = *state;\n  if (ParseOneCharToken(state, 'C') &&\n      ParseCharClass(state, \"123\")) {\n    const char * const prev_name = state->prev_name;\n    const int prev_name_length = state->prev_name_length;\n    MaybeAppendWithLength(state, prev_name, prev_name_length);\n    return true;\n  }\n  *state = copy;\n\n  if (ParseOneCharToken(state, 'D') &&\n      ParseCharClass(state, \"012\")) {\n    const char * const prev_name = state->prev_name;\n    const int prev_name_length = state->prev_name_length;\n    MaybeAppend(state, \"~\");\n    MaybeAppendWithLength(state, prev_name, prev_name_length);\n    return true;\n  }\n  *state = copy;\n  return false;\n}\n\n// <type> ::= <CV-qualifiers> <type>\n//        ::= P <type>   # pointer-to\n//        ::= R <type>   # reference-to\n//        ::= O <type>   # rvalue reference-to (C++0x)\n//        ::= C <type>   # complex pair (C 2000)\n//        ::= G <type>   # imaginary (C 2000)\n//        ::= U <source-name> <type>  # vendor extended type qualifier\n//        ::= <builtin-type>\n//        ::= <function-type>\n//        ::= <class-enum-type>\n//        ::= <array-type>\n//        ::= <pointer-to-member-type>\n//        ::= <template-template-param> <template-args>\n//        ::= <template-param>\n//        ::= <substitution>\n//        ::= Dp <type>          # pack expansion of (C++0x)\n//        ::= Dt <expression> E  # decltype of an id-expression or class\n//                               # member access (C++0x)\n//        ::= DT <expression> E  # decltype of an expression (C++0x)\n//\nstatic bool ParseType(State *state) {\n  // We should check CV-qualifers, and PRGC things first.\n  State copy = *state;\n  if (ParseCVQualifiers(state) && ParseType(state)) {\n    return true;\n  }\n  *state = copy;\n\n  if (ParseCharClass(state, \"OPRCG\") && ParseType(state)) {\n    return true;\n  }\n  *state = copy;\n\n  if (ParseTwoCharToken(state, \"Dp\") && ParseType(state)) {\n    return true;\n  }\n  *state = copy;\n\n  if (ParseOneCharToken(state, 'D') && ParseCharClass(state, \"tT\") &&\n      ParseExpression(state) && ParseOneCharToken(state, 'E')) {\n    return true;\n  }\n  *state = copy;\n\n  if (ParseOneCharToken(state, 'U') && ParseSourceName(state) &&\n      ParseType(state)) {\n    return true;\n  }\n  *state = copy;\n\n  if (ParseBuiltinType(state) ||\n      ParseFunctionType(state) ||\n      ParseClassEnumType(state) ||\n      ParseArrayType(state) ||\n      ParsePointerToMemberType(state) ||\n      ParseSubstitution(state)) {\n    return true;\n  }\n\n  if (ParseTemplateTemplateParam(state) &&\n      ParseTemplateArgs(state)) {\n    return true;\n  }\n  *state = copy;\n\n  // Less greedy than <template-template-param> <template-args>.\n  if (ParseTemplateParam(state)) {\n    return true;\n  }\n\n  return false;\n}\n\n// <CV-qualifiers> ::= [r] [V] [K]\n// We don't allow empty <CV-qualifiers> to avoid infinite loop in\n// ParseType().\nstatic bool ParseCVQualifiers(State *state) {\n  int num_cv_qualifiers = 0;\n  num_cv_qualifiers += ParseOneCharToken(state, 'r');\n  num_cv_qualifiers += ParseOneCharToken(state, 'V');\n  num_cv_qualifiers += ParseOneCharToken(state, 'K');\n  return num_cv_qualifiers > 0;\n}\n\n// <builtin-type> ::= v, etc.\n//                ::= u <source-name>\nstatic bool ParseBuiltinType(State *state) {\n  const AbbrevPair *p;\n  for (p = kBuiltinTypeList; p->abbrev != NULL; ++p) {\n    if (state->mangled_cur[0] == p->abbrev[0]) {\n      MaybeAppend(state, p->real_name);\n      ++state->mangled_cur;\n      return true;\n    }\n  }\n\n  State copy = *state;\n  if (ParseOneCharToken(state, 'u') && ParseSourceName(state)) {\n    return true;\n  }\n  *state = copy;\n  return false;\n}\n\n// <function-type> ::= F [Y] <bare-function-type> E\nstatic bool ParseFunctionType(State *state) {\n  State copy = *state;\n  if (ParseOneCharToken(state, 'F') &&\n      Optional(ParseOneCharToken(state, 'Y')) &&\n      ParseBareFunctionType(state) && ParseOneCharToken(state, 'E')) {\n    return true;\n  }\n  *state = copy;\n  return false;\n}\n\n// <bare-function-type> ::= <(signature) type>+\nstatic bool ParseBareFunctionType(State *state) {\n  State copy = *state;\n  DisableAppend(state);\n  if (OneOrMore(ParseType, state)) {\n    RestoreAppend(state, copy.append);\n    MaybeAppend(state, \"()\");\n    return true;\n  }\n  *state = copy;\n  return false;\n}\n\n// <class-enum-type> ::= <name>\nstatic bool ParseClassEnumType(State *state) {\n  return ParseName(state);\n}\n\n// <array-type> ::= A <(positive dimension) number> _ <(element) type>\n//              ::= A [<(dimension) expression>] _ <(element) type>\nstatic bool ParseArrayType(State *state) {\n  State copy = *state;\n  if (ParseOneCharToken(state, 'A') && ParseNumber(state, NULL) &&\n      ParseOneCharToken(state, '_') && ParseType(state)) {\n    return true;\n  }\n  *state = copy;\n\n  if (ParseOneCharToken(state, 'A') && Optional(ParseExpression(state)) &&\n      ParseOneCharToken(state, '_') && ParseType(state)) {\n    return true;\n  }\n  *state = copy;\n  return false;\n}\n\n// <pointer-to-member-type> ::= M <(class) type> <(member) type>\nstatic bool ParsePointerToMemberType(State *state) {\n  State copy = *state;\n  if (ParseOneCharToken(state, 'M') && ParseType(state) &&\n      ParseType(state)) {\n    return true;\n  }\n  *state = copy;\n  return false;\n}\n\n// <template-param> ::= T_\n//                  ::= T <parameter-2 non-negative number> _\nstatic bool ParseTemplateParam(State *state) {\n  if (ParseTwoCharToken(state, \"T_\")) {\n    MaybeAppend(state, \"?\");  // We don't support template substitutions.\n    return true;\n  }\n\n  State copy = *state;\n  if (ParseOneCharToken(state, 'T') && ParseNumber(state, NULL) &&\n      ParseOneCharToken(state, '_')) {\n    MaybeAppend(state, \"?\");  // We don't support template substitutions.\n    return true;\n  }\n  *state = copy;\n  return false;\n}\n\n\n// <template-template-param> ::= <template-param>\n//                           ::= <substitution>\nstatic bool ParseTemplateTemplateParam(State *state) {\n  return (ParseTemplateParam(state) ||\n          ParseSubstitution(state));\n}\n\n// <template-args> ::= I <template-arg>+ E\nstatic bool ParseTemplateArgs(State *state) {\n  State copy = *state;\n  DisableAppend(state);\n  if (ParseOneCharToken(state, 'I') &&\n      OneOrMore(ParseTemplateArg, state) &&\n      ParseOneCharToken(state, 'E')) {\n    RestoreAppend(state, copy.append);\n    MaybeAppend(state, \"<>\");\n    return true;\n  }\n  *state = copy;\n  return false;\n}\n\n// <template-arg>  ::= <type>\n//                 ::= <expr-primary>\n//                 ::= I <template-arg>* E        # argument pack\n//                 ::= X <expression> E\nstatic bool ParseTemplateArg(State *state) {\n  State copy = *state;\n  if (ParseOneCharToken(state, 'I') &&\n      ZeroOrMore(ParseTemplateArg, state) &&\n      ParseOneCharToken(state, 'E')) {\n    return true;\n  }\n  *state = copy;\n\n  if (ParseType(state) ||\n      ParseExprPrimary(state)) {\n    return true;\n  }\n  *state = copy;\n\n  if (ParseOneCharToken(state, 'X') && ParseExpression(state) &&\n      ParseOneCharToken(state, 'E')) {\n    return true;\n  }\n  *state = copy;\n  return false;\n}\n\n// <expression> ::= <template-param>\n//              ::= <expr-primary>\n//              ::= <unary operator-name> <expression>\n//              ::= <binary operator-name> <expression> <expression>\n//              ::= <trinary operator-name> <expression> <expression>\n//                  <expression>\n//              ::= st <type>\n//              ::= sr <type> <unqualified-name> <template-args>\n//              ::= sr <type> <unqualified-name>\nstatic bool ParseExpression(State *state) {\n  if (ParseTemplateParam(state) || ParseExprPrimary(state)) {\n    return true;\n  }\n\n  State copy = *state;\n  if (ParseOperatorName(state) &&\n      ParseExpression(state) &&\n      ParseExpression(state) &&\n      ParseExpression(state)) {\n    return true;\n  }\n  *state = copy;\n\n  if (ParseOperatorName(state) &&\n      ParseExpression(state) &&\n      ParseExpression(state)) {\n    return true;\n  }\n  *state = copy;\n\n  if (ParseOperatorName(state) &&\n      ParseExpression(state)) {\n    return true;\n  }\n  *state = copy;\n\n  if (ParseTwoCharToken(state, \"st\") && ParseType(state)) {\n    return true;\n  }\n  *state = copy;\n\n  if (ParseTwoCharToken(state, \"sr\") && ParseType(state) &&\n      ParseUnqualifiedName(state) &&\n      ParseTemplateArgs(state)) {\n    return true;\n  }\n  *state = copy;\n\n  if (ParseTwoCharToken(state, \"sr\") && ParseType(state) &&\n      ParseUnqualifiedName(state)) {\n    return true;\n  }\n  *state = copy;\n  return false;\n}\n\n// <expr-primary> ::= L <type> <(value) number> E\n//                ::= L <type> <(value) float> E\n//                ::= L <mangled-name> E\n//                // A bug in g++'s C++ ABI version 2 (-fabi-version=2).\n//                ::= LZ <encoding> E\nstatic bool ParseExprPrimary(State *state) {\n  State copy = *state;\n  if (ParseOneCharToken(state, 'L') && ParseType(state) &&\n      ParseNumber(state, NULL) &&\n      ParseOneCharToken(state, 'E')) {\n    return true;\n  }\n  *state = copy;\n\n  if (ParseOneCharToken(state, 'L') && ParseType(state) &&\n      ParseFloatNumber(state) &&\n      ParseOneCharToken(state, 'E')) {\n    return true;\n  }\n  *state = copy;\n\n  if (ParseOneCharToken(state, 'L') && ParseMangledName(state) &&\n      ParseOneCharToken(state, 'E')) {\n    return true;\n  }\n  *state = copy;\n\n  if (ParseTwoCharToken(state, \"LZ\") && ParseEncoding(state) &&\n      ParseOneCharToken(state, 'E')) {\n    return true;\n  }\n  *state = copy;\n\n  return false;\n}\n\n// <local-name> := Z <(function) encoding> E <(entity) name>\n//                 [<discriminator>]\n//              := Z <(function) encoding> E s [<discriminator>]\nstatic bool ParseLocalName(State *state) {\n  State copy = *state;\n  if (ParseOneCharToken(state, 'Z') && ParseEncoding(state) &&\n      ParseOneCharToken(state, 'E') && MaybeAppend(state, \"::\") &&\n      ParseName(state) && Optional(ParseDiscriminator(state))) {\n    return true;\n  }\n  *state = copy;\n\n  if (ParseOneCharToken(state, 'Z') && ParseEncoding(state) &&\n      ParseTwoCharToken(state, \"Es\") && Optional(ParseDiscriminator(state))) {\n    return true;\n  }\n  *state = copy;\n  return false;\n}\n\n// <discriminator> := _ <(non-negative) number>\nstatic bool ParseDiscriminator(State *state) {\n  State copy = *state;\n  if (ParseOneCharToken(state, '_') && ParseNumber(state, NULL)) {\n    return true;\n  }\n  *state = copy;\n  return false;\n}\n\n// <substitution> ::= S_\n//                ::= S <seq-id> _\n//                ::= St, etc.\nstatic bool ParseSubstitution(State *state) {\n  if (ParseTwoCharToken(state, \"S_\")) {\n    MaybeAppend(state, \"?\");  // We don't support substitutions.\n    return true;\n  }\n\n  State copy = *state;\n  if (ParseOneCharToken(state, 'S') && ParseSeqId(state) &&\n      ParseOneCharToken(state, '_')) {\n    MaybeAppend(state, \"?\");  // We don't support substitutions.\n    return true;\n  }\n  *state = copy;\n\n  // Expand abbreviations like \"St\" => \"std\".\n  if (ParseOneCharToken(state, 'S')) {\n    const AbbrevPair *p;\n    for (p = kSubstitutionList; p->abbrev != NULL; ++p) {\n      if (state->mangled_cur[0] == p->abbrev[1]) {\n        MaybeAppend(state, \"std\");\n        if (p->real_name[0] != '\\0') {\n          MaybeAppend(state, \"::\");\n          MaybeAppend(state, p->real_name);\n        }\n        ++state->mangled_cur;\n        return true;\n      }\n    }\n  }\n  *state = copy;\n  return false;\n}\n\n// Parse <mangled-name>, optionally followed by either a function-clone suffix\n// or version suffix.  Returns true only if all of \"mangled_cur\" was consumed.\nstatic bool ParseTopLevelMangledName(State *state) {\n  if (ParseMangledName(state)) {\n    if (state->mangled_cur[0] != '\\0') {\n      // Drop trailing function clone suffix, if any.\n      if (IsFunctionCloneSuffix(state->mangled_cur)) {\n        return true;\n      }\n      // Append trailing version suffix if any.\n      // ex. _Z3foo@@GLIBCXX_3.4\n      if (state->mangled_cur[0] == '@') {\n        MaybeAppend(state, state->mangled_cur);\n        return true;\n      }\n      return false;  // Unconsumed suffix.\n    }\n    return true;\n  }\n  return false;\n}\n\n// The demangler entry point.\nbool Demangle(const char *mangled, char *out, int out_size) {\n  State state;\n  InitState(&state, mangled, out, out_size);\n  return ParseTopLevelMangledName(&state) && !state.overflowed;\n}\n\n_END_GOOGLE_NAMESPACE_\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/demangle.h",
    "content": "// Copyright (c) 2006, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: Satoru Takabayashi\n//\n// An async-signal-safe and thread-safe demangler for Itanium C++ ABI\n// (aka G++ V3 ABI).\n\n// The demangler is implemented to be used in async signal handlers to\n// symbolize stack traces.  We cannot use libstdc++'s\n// abi::__cxa_demangle() in such signal handlers since it's not async\n// signal safe (it uses malloc() internally).\n//\n// Note that this demangler doesn't support full demangling.  More\n// specifically, it doesn't print types of function parameters and\n// types of template arguments.  It just skips them.  However, it's\n// still very useful to extract basic information such as class,\n// function, constructor, destructor, and operator names.\n//\n// See the implementation note in demangle.cc if you are interested.\n//\n// Example:\n//\n// | Mangled Name  | The Demangler | abi::__cxa_demangle()\n// |---------------|---------------|-----------------------\n// | _Z1fv         | f()           | f()\n// | _Z1fi         | f()           | f(int)\n// | _Z3foo3bar    | foo()         | foo(bar)\n// | _Z1fIiEvi     | f<>()         | void f<int>(int)\n// | _ZN1N1fE      | N::f          | N::f\n// | _ZN3Foo3BarEv | Foo::Bar()    | Foo::Bar()\n// | _Zrm1XS_\"     | operator%()   | operator%(X, X)\n// | _ZN3FooC1Ev   | Foo::Foo()    | Foo::Foo()\n// | _Z1fSs        | f()           | f(std::basic_string<char,\n// |               |               |   std::char_traits<char>,\n// |               |               |   std::allocator<char> >)\n//\n// See the unit test for more examples.\n//\n// Note: we might want to write demanglers for ABIs other than Itanium\n// C++ ABI in the future.\n//\n\n#ifndef BASE_DEMANGLE_H_\n#define BASE_DEMANGLE_H_\n\n#include \"config.h\"\n#include \"glog/logging.h\"\n\n_START_GOOGLE_NAMESPACE_\n\n// Demangle \"mangled\".  On success, return true and write the\n// demangled symbol name to \"out\".  Otherwise, return false.\n// \"out\" is modified even if demangling is unsuccessful.\nbool GOOGLE_GLOG_DLL_DECL Demangle(const char *mangled, char *out, int out_size);\n\n_END_GOOGLE_NAMESPACE_\n\n#endif  // BASE_DEMANGLE_H_\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/glog/log_severity.h",
    "content": "// Copyright (c) 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n#ifndef BASE_LOG_SEVERITY_H__\n#define BASE_LOG_SEVERITY_H__\n\n// Annoying stuff for windows -- makes sure clients can import these functions\n#ifndef GOOGLE_GLOG_DLL_DECL\n# if defined(_WIN32) && !defined(__CYGWIN__)\n#   define GOOGLE_GLOG_DLL_DECL  __declspec(dllimport)\n# else\n#   define GOOGLE_GLOG_DLL_DECL\n# endif\n#endif\n\n// Variables of type LogSeverity are widely taken to lie in the range\n// [0, NUM_SEVERITIES-1].  Be careful to preserve this assumption if\n// you ever need to change their values or add a new severity.\ntypedef int LogSeverity;\n\nconst int GLOG_INFO = 0, GLOG_WARNING = 1, GLOG_ERROR = 2, GLOG_FATAL = 3,\n  NUM_SEVERITIES = 4;\n#ifndef GLOG_NO_ABBREVIATED_SEVERITIES\n# ifdef ERROR\n#  error ERROR macro is defined. Define GLOG_NO_ABBREVIATED_SEVERITIES before including logging.h. See the document for detail.\n# endif\nconst int INFO = GLOG_INFO, WARNING = GLOG_WARNING,\n  ERROR = GLOG_ERROR, FATAL = GLOG_FATAL;\n#endif\n\n// DFATAL is FATAL in debug mode, ERROR in normal mode\n#ifdef NDEBUG\n#define DFATAL_LEVEL ERROR\n#else\n#define DFATAL_LEVEL FATAL\n#endif\n\nextern GOOGLE_GLOG_DLL_DECL const char* const LogSeverityNames[NUM_SEVERITIES];\n\n// NDEBUG usage helpers related to (RAW_)DCHECK:\n//\n// DEBUG_MODE is for small !NDEBUG uses like\n//   if (DEBUG_MODE) foo.CheckThatFoo();\n// instead of substantially more verbose\n//   #ifndef NDEBUG\n//     foo.CheckThatFoo();\n//   #endif\n//\n// IF_DEBUG_MODE is for small !NDEBUG uses like\n//   IF_DEBUG_MODE( string error; )\n//   DCHECK(Foo(&error)) << error;\n// instead of substantially more verbose\n//   #ifndef NDEBUG\n//     string error;\n//     DCHECK(Foo(&error)) << error;\n//   #endif\n//\n#ifdef NDEBUG\nenum { DEBUG_MODE = 0 };\n#define IF_DEBUG_MODE(x)\n#else\nenum { DEBUG_MODE = 1 };\n#define IF_DEBUG_MODE(x) x\n#endif\n\n#endif  // BASE_LOG_SEVERITY_H__\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/glog/logging.h",
    "content": "// Copyright (c) 1999, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: Ray Sidney\n//\n// This file contains #include information about logging-related stuff.\n// Pretty much everybody needs to #include this file so that they can\n// log various happenings.\n//\n#ifndef _LOGGING_H_\n#define _LOGGING_H_\n\n#include <errno.h>\n#include <string.h>\n#include <time.h>\n#include <iosfwd>\n#include <ostream>\n#include <sstream>\n#include <string>\n#if 1\n# include <unistd.h>\n#endif\n#include <vector>\n\n#if defined(_MSC_VER)\n#define GLOG_MSVC_PUSH_DISABLE_WARNING(n) __pragma(warning(push)) \\\n                                     __pragma(warning(disable:n))\n#define GLOG_MSVC_POP_WARNING() __pragma(warning(pop))\n#else\n#define GLOG_MSVC_PUSH_DISABLE_WARNING(n)\n#define GLOG_MSVC_POP_WARNING()\n#endif\n\n// Annoying stuff for windows -- makes sure clients can import these functions\n#ifndef GOOGLE_GLOG_DLL_DECL\n# if defined(_WIN32) && !defined(__CYGWIN__)\n#   define GOOGLE_GLOG_DLL_DECL  __declspec(dllimport)\n# else\n#   define GOOGLE_GLOG_DLL_DECL\n# endif\n#endif\n\n// We care a lot about number of bits things take up.  Unfortunately,\n// systems define their bit-specific ints in a lot of different ways.\n// We use our own way, and have a typedef to get there.\n// Note: these commands below may look like \"#if 1\" or \"#if 0\", but\n// that's because they were constructed that way at ./configure time.\n// Look at logging.h.in to see how they're calculated (based on your config).\n#if 1\n#include <stdint.h>             // the normal place uint16_t is defined\n#endif\n#if 1\n#include <sys/types.h>          // the normal place u_int16_t is defined\n#endif\n#if 1\n#include <inttypes.h>           // a third place for uint16_t or u_int16_t\n#endif\n\n#if 0\n#include <gflags/gflags.h>\n#endif\n\nnamespace google {\n\n#if 1      // the C99 format\ntypedef int32_t int32;\ntypedef uint32_t uint32;\ntypedef int64_t int64;\ntypedef uint64_t uint64;\n#elif 1   // the BSD format\ntypedef int32_t int32;\ntypedef u_int32_t uint32;\ntypedef int64_t int64;\ntypedef u_int64_t uint64;\n#elif 0    // the windows (vc7) format\ntypedef __int32 int32;\ntypedef unsigned __int32 uint32;\ntypedef __int64 int64;\ntypedef unsigned __int64 uint64;\n#else\n#error Do not know how to define a 32-bit integer quantity on your system\n#endif\n\n}\n\n// The global value of GOOGLE_STRIP_LOG. All the messages logged to\n// LOG(XXX) with severity less than GOOGLE_STRIP_LOG will not be displayed.\n// If it can be determined at compile time that the message will not be\n// printed, the statement will be compiled out.\n//\n// Example: to strip out all INFO and WARNING messages, use the value\n// of 2 below. To make an exception for WARNING messages from a single\n// file, add \"#define GOOGLE_STRIP_LOG 1\" to that file _before_ including\n// base/logging.h\n#ifndef GOOGLE_STRIP_LOG\n#define GOOGLE_STRIP_LOG 0\n#endif\n\n// GCC can be told that a certain branch is not likely to be taken (for\n// instance, a CHECK failure), and use that information in static analysis.\n// Giving it this information can help it optimize for the common case in\n// the absence of better information (ie. -fprofile-arcs).\n//\n#ifndef GOOGLE_PREDICT_BRANCH_NOT_TAKEN\n#if 1\n#define GOOGLE_PREDICT_BRANCH_NOT_TAKEN(x) (__builtin_expect(x, 0))\n#else\n#define GOOGLE_PREDICT_BRANCH_NOT_TAKEN(x) x\n#endif\n#endif\n\n#ifndef GOOGLE_PREDICT_FALSE\n#if 1\n#define GOOGLE_PREDICT_FALSE(x) (__builtin_expect(x, 0))\n#else\n#define GOOGLE_PREDICT_FALSE(x) x\n#endif\n#endif\n\n#ifndef GOOGLE_PREDICT_TRUE\n#if 1\n#define GOOGLE_PREDICT_TRUE(x) (__builtin_expect(!!(x), 1))\n#else\n#define GOOGLE_PREDICT_TRUE(x) x\n#endif\n#endif\n\n\n// Make a bunch of macros for logging.  The way to log things is to stream\n// things to LOG(<a particular severity level>).  E.g.,\n//\n//   LOG(INFO) << \"Found \" << num_cookies << \" cookies\";\n//\n// You can capture log messages in a string, rather than reporting them\n// immediately:\n//\n//   vector<string> errors;\n//   LOG_STRING(ERROR, &errors) << \"Couldn't parse cookie #\" << cookie_num;\n//\n// This pushes back the new error onto 'errors'; if given a NULL pointer,\n// it reports the error via LOG(ERROR).\n//\n// You can also do conditional logging:\n//\n//   LOG_IF(INFO, num_cookies > 10) << \"Got lots of cookies\";\n//\n// You can also do occasional logging (log every n'th occurrence of an\n// event):\n//\n//   LOG_EVERY_N(INFO, 10) << \"Got the \" << google::COUNTER << \"th cookie\";\n//\n// The above will cause log messages to be output on the 1st, 11th, 21st, ...\n// times it is executed.  Note that the special google::COUNTER value is used\n// to identify which repetition is happening.\n//\n// You can also do occasional conditional logging (log every n'th\n// occurrence of an event, when condition is satisfied):\n//\n//   LOG_IF_EVERY_N(INFO, (size > 1024), 10) << \"Got the \" << google::COUNTER\n//                                           << \"th big cookie\";\n//\n// You can log messages the first N times your code executes a line. E.g.\n//\n//   LOG_FIRST_N(INFO, 20) << \"Got the \" << google::COUNTER << \"th cookie\";\n//\n// Outputs log messages for the first 20 times it is executed.\n//\n// Analogous SYSLOG, SYSLOG_IF, and SYSLOG_EVERY_N macros are available.\n// These log to syslog as well as to the normal logs.  If you use these at\n// all, you need to be aware that syslog can drastically reduce performance,\n// especially if it is configured for remote logging!  Don't use these\n// unless you fully understand this and have a concrete need to use them.\n// Even then, try to minimize your use of them.\n//\n// There are also \"debug mode\" logging macros like the ones above:\n//\n//   DLOG(INFO) << \"Found cookies\";\n//\n//   DLOG_IF(INFO, num_cookies > 10) << \"Got lots of cookies\";\n//\n//   DLOG_EVERY_N(INFO, 10) << \"Got the \" << google::COUNTER << \"th cookie\";\n//\n// All \"debug mode\" logging is compiled away to nothing for non-debug mode\n// compiles.\n//\n// We also have\n//\n//   LOG_ASSERT(assertion);\n//   DLOG_ASSERT(assertion);\n//\n// which is syntactic sugar for {,D}LOG_IF(FATAL, assert fails) << assertion;\n//\n// There are \"verbose level\" logging macros.  They look like\n//\n//   VLOG(1) << \"I'm printed when you run the program with --v=1 or more\";\n//   VLOG(2) << \"I'm printed when you run the program with --v=2 or more\";\n//\n// These always log at the INFO log level (when they log at all).\n// The verbose logging can also be turned on module-by-module.  For instance,\n//    --vmodule=mapreduce=2,file=1,gfs*=3 --v=0\n// will cause:\n//   a. VLOG(2) and lower messages to be printed from mapreduce.{h,cc}\n//   b. VLOG(1) and lower messages to be printed from file.{h,cc}\n//   c. VLOG(3) and lower messages to be printed from files prefixed with \"gfs\"\n//   d. VLOG(0) and lower messages to be printed from elsewhere\n//\n// The wildcarding functionality shown by (c) supports both '*' (match\n// 0 or more characters) and '?' (match any single character) wildcards.\n//\n// There's also VLOG_IS_ON(n) \"verbose level\" condition macro. To be used as\n//\n//   if (VLOG_IS_ON(2)) {\n//     // do some logging preparation and logging\n//     // that can't be accomplished with just VLOG(2) << ...;\n//   }\n//\n// There are also VLOG_IF, VLOG_EVERY_N and VLOG_IF_EVERY_N \"verbose level\"\n// condition macros for sample cases, when some extra computation and\n// preparation for logs is not needed.\n//   VLOG_IF(1, (size > 1024))\n//      << \"I'm printed when size is more than 1024 and when you run the \"\n//         \"program with --v=1 or more\";\n//   VLOG_EVERY_N(1, 10)\n//      << \"I'm printed every 10th occurrence, and when you run the program \"\n//         \"with --v=1 or more. Present occurence is \" << google::COUNTER;\n//   VLOG_IF_EVERY_N(1, (size > 1024), 10)\n//      << \"I'm printed on every 10th occurence of case when size is more \"\n//         \" than 1024, when you run the program with --v=1 or more. \";\n//         \"Present occurence is \" << google::COUNTER;\n//\n// The supported severity levels for macros that allow you to specify one\n// are (in increasing order of severity) INFO, WARNING, ERROR, and FATAL.\n// Note that messages of a given severity are logged not only in the\n// logfile for that severity, but also in all logfiles of lower severity.\n// E.g., a message of severity FATAL will be logged to the logfiles of\n// severity FATAL, ERROR, WARNING, and INFO.\n//\n// There is also the special severity of DFATAL, which logs FATAL in\n// debug mode, ERROR in normal mode.\n//\n// Very important: logging a message at the FATAL severity level causes\n// the program to terminate (after the message is logged).\n//\n// Unless otherwise specified, logs will be written to the filename\n// \"<program name>.<hostname>.<user name>.log.<severity level>.\", followed\n// by the date, time, and pid (you can't prevent the date, time, and pid\n// from being in the filename).\n//\n// The logging code takes two flags:\n//     --v=#           set the verbose level\n//     --logtostderr   log all the messages to stderr instead of to logfiles\n\n// LOG LINE PREFIX FORMAT\n//\n// Log lines have this form:\n//\n//     Lmmdd hh:mm:ss.uuuuuu threadid file:line] msg...\n//\n// where the fields are defined as follows:\n//\n//   L                A single character, representing the log level\n//                    (eg 'I' for INFO)\n//   mm               The month (zero padded; ie May is '05')\n//   dd               The day (zero padded)\n//   hh:mm:ss.uuuuuu  Time in hours, minutes and fractional seconds\n//   threadid         The space-padded thread ID as returned by GetTID()\n//                    (this matches the PID on Linux)\n//   file             The file name\n//   line             The line number\n//   msg              The user-supplied message\n//\n// Example:\n//\n//   I1103 11:57:31.739339 24395 google.cc:2341] Command line: ./some_prog\n//   I1103 11:57:31.739403 24395 google.cc:2342] Process id 24395\n//\n// NOTE: although the microseconds are useful for comparing events on\n// a single machine, clocks on different machines may not be well\n// synchronized.  Hence, use caution when comparing the low bits of\n// timestamps from different machines.\n\n#ifndef DECLARE_VARIABLE\n#define MUST_UNDEF_GFLAGS_DECLARE_MACROS\n#define DECLARE_VARIABLE(type, shorttype, name, tn)                     \\\n  namespace fL##shorttype {                                             \\\n    extern GOOGLE_GLOG_DLL_DECL type FLAGS_##name;                      \\\n  }                                                                     \\\n  using fL##shorttype::FLAGS_##name\n\n// bool specialization\n#define DECLARE_bool(name) \\\n  DECLARE_VARIABLE(bool, B, name, bool)\n\n// int32 specialization\n#define DECLARE_int32(name) \\\n  DECLARE_VARIABLE(google::int32, I, name, int32)\n\n// Special case for string, because we have to specify the namespace\n// std::string, which doesn't play nicely with our FLAG__namespace hackery.\n#define DECLARE_string(name)                                            \\\n  namespace fLS {                                                       \\\n    extern GOOGLE_GLOG_DLL_DECL std::string& FLAGS_##name;              \\\n  }                                                                     \\\n  using fLS::FLAGS_##name\n#endif\n\n// Set whether log messages go to stderr instead of logfiles\nDECLARE_bool(logtostderr);\n\n// Set whether log messages go to stderr in addition to logfiles.\nDECLARE_bool(alsologtostderr);\n\n// Set color messages logged to stderr (if supported by terminal).\nDECLARE_bool(colorlogtostderr);\n\n// Log messages at a level >= this flag are automatically sent to\n// stderr in addition to log files.\nDECLARE_int32(stderrthreshold);\n\n// Set whether the log prefix should be prepended to each line of output.\nDECLARE_bool(log_prefix);\n\n// Log messages at a level <= this flag are buffered.\n// Log messages at a higher level are flushed immediately.\nDECLARE_int32(logbuflevel);\n\n// Sets the maximum number of seconds which logs may be buffered for.\nDECLARE_int32(logbufsecs);\n\n// Log suppression level: messages logged at a lower level than this\n// are suppressed.\nDECLARE_int32(minloglevel);\n\n// If specified, logfiles are written into this directory instead of the\n// default logging directory.\nDECLARE_string(log_dir);\n\n// Set the log file mode.\nDECLARE_int32(logfile_mode);\n\n// Sets the path of the directory into which to put additional links\n// to the log files.\nDECLARE_string(log_link);\n\nDECLARE_int32(v);  // in vlog_is_on.cc\n\n// Sets the maximum log file size (in MB).\nDECLARE_int32(max_log_size);\n\n// Sets whether to avoid logging to the disk if the disk is full.\nDECLARE_bool(stop_logging_if_full_disk);\n\n#ifdef MUST_UNDEF_GFLAGS_DECLARE_MACROS\n#undef MUST_UNDEF_GFLAGS_DECLARE_MACROS\n#undef DECLARE_VARIABLE\n#undef DECLARE_bool\n#undef DECLARE_int32\n#undef DECLARE_string\n#endif\n\n// Log messages below the GOOGLE_STRIP_LOG level will be compiled away for\n// security reasons. See LOG(severtiy) below.\n\n// A few definitions of macros that don't generate much code.  Since\n// LOG(INFO) and its ilk are used all over our code, it's\n// better to have compact code for these operations.\n\n#if GOOGLE_STRIP_LOG == 0\n#define COMPACT_GOOGLE_LOG_INFO google::LogMessage( \\\n      __FILE__, __LINE__)\n#define LOG_TO_STRING_INFO(message) google::LogMessage( \\\n      __FILE__, __LINE__, google::GLOG_INFO, message)\n#else\n#define COMPACT_GOOGLE_LOG_INFO google::NullStream()\n#define LOG_TO_STRING_INFO(message) google::NullStream()\n#endif\n\n#if GOOGLE_STRIP_LOG <= 1\n#define COMPACT_GOOGLE_LOG_WARNING google::LogMessage( \\\n      __FILE__, __LINE__, google::GLOG_WARNING)\n#define LOG_TO_STRING_WARNING(message) google::LogMessage( \\\n      __FILE__, __LINE__, google::GLOG_WARNING, message)\n#else\n#define COMPACT_GOOGLE_LOG_WARNING google::NullStream()\n#define LOG_TO_STRING_WARNING(message) google::NullStream()\n#endif\n\n#if GOOGLE_STRIP_LOG <= 2\n#define COMPACT_GOOGLE_LOG_ERROR google::LogMessage( \\\n      __FILE__, __LINE__, google::GLOG_ERROR)\n#define LOG_TO_STRING_ERROR(message) google::LogMessage( \\\n      __FILE__, __LINE__, google::GLOG_ERROR, message)\n#else\n#define COMPACT_GOOGLE_LOG_ERROR google::NullStream()\n#define LOG_TO_STRING_ERROR(message) google::NullStream()\n#endif\n\n#if GOOGLE_STRIP_LOG <= 3\n#define COMPACT_GOOGLE_LOG_FATAL google::LogMessageFatal( \\\n      __FILE__, __LINE__)\n#define LOG_TO_STRING_FATAL(message) google::LogMessage( \\\n      __FILE__, __LINE__, google::GLOG_FATAL, message)\n#else\n#define COMPACT_GOOGLE_LOG_FATAL google::NullStreamFatal()\n#define LOG_TO_STRING_FATAL(message) google::NullStreamFatal()\n#endif\n\n#if defined(NDEBUG) && !defined(DCHECK_ALWAYS_ON)\n#define DCHECK_IS_ON() 0\n#else\n#define DCHECK_IS_ON() 1\n#endif\n\n// For DFATAL, we want to use LogMessage (as opposed to\n// LogMessageFatal), to be consistent with the original behavior.\n#if !DCHECK_IS_ON()\n#define COMPACT_GOOGLE_LOG_DFATAL COMPACT_GOOGLE_LOG_ERROR\n#elif GOOGLE_STRIP_LOG <= 3\n#define COMPACT_GOOGLE_LOG_DFATAL google::LogMessage( \\\n      __FILE__, __LINE__, google::GLOG_FATAL)\n#else\n#define COMPACT_GOOGLE_LOG_DFATAL google::NullStreamFatal()\n#endif\n\n#define GOOGLE_LOG_INFO(counter) google::LogMessage(__FILE__, __LINE__, google::GLOG_INFO, counter, &google::LogMessage::SendToLog)\n#define SYSLOG_INFO(counter) \\\n  google::LogMessage(__FILE__, __LINE__, google::GLOG_INFO, counter, \\\n  &google::LogMessage::SendToSyslogAndLog)\n#define GOOGLE_LOG_WARNING(counter)  \\\n  google::LogMessage(__FILE__, __LINE__, google::GLOG_WARNING, counter, \\\n  &google::LogMessage::SendToLog)\n#define SYSLOG_WARNING(counter)  \\\n  google::LogMessage(__FILE__, __LINE__, google::GLOG_WARNING, counter, \\\n  &google::LogMessage::SendToSyslogAndLog)\n#define GOOGLE_LOG_ERROR(counter)  \\\n  google::LogMessage(__FILE__, __LINE__, google::GLOG_ERROR, counter, \\\n  &google::LogMessage::SendToLog)\n#define SYSLOG_ERROR(counter)  \\\n  google::LogMessage(__FILE__, __LINE__, google::GLOG_ERROR, counter, \\\n  &google::LogMessage::SendToSyslogAndLog)\n#define GOOGLE_LOG_FATAL(counter) \\\n  google::LogMessage(__FILE__, __LINE__, google::GLOG_FATAL, counter, \\\n  &google::LogMessage::SendToLog)\n#define SYSLOG_FATAL(counter) \\\n  google::LogMessage(__FILE__, __LINE__, google::GLOG_FATAL, counter, \\\n  &google::LogMessage::SendToSyslogAndLog)\n#define GOOGLE_LOG_DFATAL(counter) \\\n  google::LogMessage(__FILE__, __LINE__, google::DFATAL_LEVEL, counter, \\\n  &google::LogMessage::SendToLog)\n#define SYSLOG_DFATAL(counter) \\\n  google::LogMessage(__FILE__, __LINE__, google::DFATAL_LEVEL, counter, \\\n  &google::LogMessage::SendToSyslogAndLog)\n\n#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) || defined(__CYGWIN32__)\n// A very useful logging macro to log windows errors:\n#define LOG_SYSRESULT(result) \\\n  if (FAILED(HRESULT_FROM_WIN32(result))) { \\\n    LPSTR message = NULL; \\\n    LPSTR msg = reinterpret_cast<LPSTR>(&message); \\\n    DWORD message_length = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | \\\n                         FORMAT_MESSAGE_FROM_SYSTEM, \\\n                         0, result, 0, msg, 100, NULL); \\\n    if (message_length > 0) { \\\n      google::LogMessage(__FILE__, __LINE__, google::GLOG_ERROR, 0, \\\n          &google::LogMessage::SendToLog).stream() \\\n          << reinterpret_cast<const char*>(message); \\\n      LocalFree(message); \\\n    } \\\n  }\n#endif\n\n// We use the preprocessor's merging operator, \"##\", so that, e.g.,\n// LOG(INFO) becomes the token GOOGLE_LOG_INFO.  There's some funny\n// subtle difference between ostream member streaming functions (e.g.,\n// ostream::operator<<(int) and ostream non-member streaming functions\n// (e.g., ::operator<<(ostream&, string&): it turns out that it's\n// impossible to stream something like a string directly to an unnamed\n// ostream. We employ a neat hack by calling the stream() member\n// function of LogMessage which seems to avoid the problem.\n#define LOG(severity) COMPACT_GOOGLE_LOG_ ## severity.stream()\n#define SYSLOG(severity) SYSLOG_ ## severity(0).stream()\n\nnamespace google {\n\n// They need the definitions of integer types.\n#include \"glog/log_severity.h\"\n#include \"glog/vlog_is_on.h\"\n\n// Initialize google's logging library. You will see the program name\n// specified by argv0 in log outputs.\nGOOGLE_GLOG_DLL_DECL void InitGoogleLogging(const char* argv0);\n\n// Shutdown google's logging library.\nGOOGLE_GLOG_DLL_DECL void ShutdownGoogleLogging();\n\n// Install a function which will be called after LOG(FATAL).\nGOOGLE_GLOG_DLL_DECL void InstallFailureFunction(void (*fail_func)());\n\nclass LogSink;  // defined below\n\n// If a non-NULL sink pointer is given, we push this message to that sink.\n// For LOG_TO_SINK we then do normal LOG(severity) logging as well.\n// This is useful for capturing messages and passing/storing them\n// somewhere more specific than the global log of the process.\n// Argument types:\n//   LogSink* sink;\n//   LogSeverity severity;\n// The cast is to disambiguate NULL arguments.\n#define LOG_TO_SINK(sink, severity) \\\n  google::LogMessage(                                    \\\n      __FILE__, __LINE__,                                               \\\n      google::GLOG_ ## severity,                         \\\n      static_cast<google::LogSink*>(sink), true).stream()\n#define LOG_TO_SINK_BUT_NOT_TO_LOGFILE(sink, severity)                  \\\n  google::LogMessage(                                    \\\n      __FILE__, __LINE__,                                               \\\n      google::GLOG_ ## severity,                         \\\n      static_cast<google::LogSink*>(sink), false).stream()\n\n// If a non-NULL string pointer is given, we write this message to that string.\n// We then do normal LOG(severity) logging as well.\n// This is useful for capturing messages and storing them somewhere more\n// specific than the global log of the process.\n// Argument types:\n//   string* message;\n//   LogSeverity severity;\n// The cast is to disambiguate NULL arguments.\n// NOTE: LOG(severity) expands to LogMessage().stream() for the specified\n// severity.\n#define LOG_TO_STRING(severity, message) \\\n  LOG_TO_STRING_##severity(static_cast<string*>(message)).stream()\n\n// If a non-NULL pointer is given, we push the message onto the end\n// of a vector of strings; otherwise, we report it with LOG(severity).\n// This is handy for capturing messages and perhaps passing them back\n// to the caller, rather than reporting them immediately.\n// Argument types:\n//   LogSeverity severity;\n//   vector<string> *outvec;\n// The cast is to disambiguate NULL arguments.\n#define LOG_STRING(severity, outvec) \\\n  LOG_TO_STRING_##severity(static_cast<std::vector<std::string>*>(outvec)).stream()\n\n#define LOG_IF(severity, condition) \\\n  !(condition) ? (void) 0 : google::LogMessageVoidify() & LOG(severity)\n#define SYSLOG_IF(severity, condition) \\\n  !(condition) ? (void) 0 : google::LogMessageVoidify() & SYSLOG(severity)\n\n#define LOG_ASSERT(condition)  \\\n  LOG_IF(FATAL, !(condition)) << \"Assert failed: \" #condition\n#define SYSLOG_ASSERT(condition) \\\n  SYSLOG_IF(FATAL, !(condition)) << \"Assert failed: \" #condition\n\n// CHECK dies with a fatal error if condition is not true.  It is *not*\n// controlled by DCHECK_IS_ON(), so the check will be executed regardless of\n// compilation mode.  Therefore, it is safe to do things like:\n//    CHECK(fp->Write(x) == 4)\n#define CHECK(condition)  \\\n      LOG_IF(FATAL, GOOGLE_PREDICT_BRANCH_NOT_TAKEN(!(condition))) \\\n             << \"Check failed: \" #condition \" \"\n\n// A container for a string pointer which can be evaluated to a bool -\n// true iff the pointer is NULL.\nstruct CheckOpString {\n  CheckOpString(std::string* str) : str_(str) { }\n  // No destructor: if str_ is non-NULL, we're about to LOG(FATAL),\n  // so there's no point in cleaning up str_.\n  operator bool() const {\n    return GOOGLE_PREDICT_BRANCH_NOT_TAKEN(str_ != NULL);\n  }\n  std::string* str_;\n};\n\n// Function is overloaded for integral types to allow static const\n// integrals declared in classes and not defined to be used as arguments to\n// CHECK* macros. It's not encouraged though.\ntemplate <class T>\ninline const T&       GetReferenceableValue(const T&           t) { return t; }\ninline char           GetReferenceableValue(char               t) { return t; }\ninline unsigned char  GetReferenceableValue(unsigned char      t) { return t; }\ninline signed char    GetReferenceableValue(signed char        t) { return t; }\ninline short          GetReferenceableValue(short              t) { return t; }\ninline unsigned short GetReferenceableValue(unsigned short     t) { return t; }\ninline int            GetReferenceableValue(int                t) { return t; }\ninline unsigned int   GetReferenceableValue(unsigned int       t) { return t; }\ninline long           GetReferenceableValue(long               t) { return t; }\ninline unsigned long  GetReferenceableValue(unsigned long      t) { return t; }\ninline long long      GetReferenceableValue(long long          t) { return t; }\ninline unsigned long long GetReferenceableValue(unsigned long long t) {\n  return t;\n}\n\n// This is a dummy class to define the following operator.\nstruct DummyClassToDefineOperator {};\n\n}\n\n// Define global operator<< to declare using ::operator<<.\n// This declaration will allow use to use CHECK macros for user\n// defined classes which have operator<< (e.g., stl_logging.h).\ninline std::ostream& operator<<(\n    std::ostream& out, const google::DummyClassToDefineOperator&) {\n  return out;\n}\n\nnamespace google {\n\n// This formats a value for a failing CHECK_XX statement.  Ordinarily,\n// it uses the definition for operator<<, with a few special cases below.\ntemplate <typename T>\ninline void MakeCheckOpValueString(std::ostream* os, const T& v) {\n  (*os) << v;\n}\n\n// Overrides for char types provide readable values for unprintable\n// characters.\ntemplate <> GOOGLE_GLOG_DLL_DECL\nvoid MakeCheckOpValueString(std::ostream* os, const char& v);\ntemplate <> GOOGLE_GLOG_DLL_DECL\nvoid MakeCheckOpValueString(std::ostream* os, const signed char& v);\ntemplate <> GOOGLE_GLOG_DLL_DECL\nvoid MakeCheckOpValueString(std::ostream* os, const unsigned char& v);\n\n// Build the error message string. Specify no inlining for code size.\ntemplate <typename T1, typename T2>\nstd::string* MakeCheckOpString(const T1& v1, const T2& v2, const char* exprtext)\n    __attribute__ ((noinline));\n\nnamespace base {\nnamespace internal {\n\n// If \"s\" is less than base_logging::INFO, returns base_logging::INFO.\n// If \"s\" is greater than base_logging::FATAL, returns\n// base_logging::ERROR.  Otherwise, returns \"s\".\nLogSeverity NormalizeSeverity(LogSeverity s);\n\n}  // namespace internal\n\n// A helper class for formatting \"expr (V1 vs. V2)\" in a CHECK_XX\n// statement.  See MakeCheckOpString for sample usage.  Other\n// approaches were considered: use of a template method (e.g.,\n// base::BuildCheckOpString(exprtext, base::Print<T1>, &v1,\n// base::Print<T2>, &v2), however this approach has complications\n// related to volatile arguments and function-pointer arguments).\nclass GOOGLE_GLOG_DLL_DECL CheckOpMessageBuilder {\n public:\n  // Inserts \"exprtext\" and \" (\" to the stream.\n  explicit CheckOpMessageBuilder(const char *exprtext);\n  // Deletes \"stream_\".\n  ~CheckOpMessageBuilder();\n  // For inserting the first variable.\n  std::ostream* ForVar1() { return stream_; }\n  // For inserting the second variable (adds an intermediate \" vs. \").\n  std::ostream* ForVar2();\n  // Get the result (inserts the closing \")\").\n  std::string* NewString();\n\n private:\n  std::ostringstream *stream_;\n};\n\n}  // namespace base\n\ntemplate <typename T1, typename T2>\nstd::string* MakeCheckOpString(const T1& v1, const T2& v2, const char* exprtext) {\n  base::CheckOpMessageBuilder comb(exprtext);\n  MakeCheckOpValueString(comb.ForVar1(), v1);\n  MakeCheckOpValueString(comb.ForVar2(), v2);\n  return comb.NewString();\n}\n\n// Helper functions for CHECK_OP macro.\n// The (int, int) specialization works around the issue that the compiler\n// will not instantiate the template version of the function on values of\n// unnamed enum type - see comment below.\n#define DEFINE_CHECK_OP_IMPL(name, op) \\\n  template <typename T1, typename T2> \\\n  inline std::string* name##Impl(const T1& v1, const T2& v2,    \\\n                            const char* exprtext) { \\\n    if (GOOGLE_PREDICT_TRUE(v1 op v2)) return NULL; \\\n    else return MakeCheckOpString(v1, v2, exprtext); \\\n  } \\\n  inline std::string* name##Impl(int v1, int v2, const char* exprtext) { \\\n    return name##Impl<int, int>(v1, v2, exprtext); \\\n  }\n\n// We use the full name Check_EQ, Check_NE, etc. in case the file including\n// base/logging.h provides its own #defines for the simpler names EQ, NE, etc.\n// This happens if, for example, those are used as token names in a\n// yacc grammar.\nDEFINE_CHECK_OP_IMPL(Check_EQ, ==)  // Compilation error with CHECK_EQ(NULL, x)?\nDEFINE_CHECK_OP_IMPL(Check_NE, !=)  // Use CHECK(x == NULL) instead.\nDEFINE_CHECK_OP_IMPL(Check_LE, <=)\nDEFINE_CHECK_OP_IMPL(Check_LT, < )\nDEFINE_CHECK_OP_IMPL(Check_GE, >=)\nDEFINE_CHECK_OP_IMPL(Check_GT, > )\n#undef DEFINE_CHECK_OP_IMPL\n\n// Helper macro for binary operators.\n// Don't use this macro directly in your code, use CHECK_EQ et al below.\n\n#if defined(STATIC_ANALYSIS)\n// Only for static analysis tool to know that it is equivalent to assert\n#define CHECK_OP_LOG(name, op, val1, val2, log) CHECK((val1) op (val2))\n#elif DCHECK_IS_ON()\n// In debug mode, avoid constructing CheckOpStrings if possible,\n// to reduce the overhead of CHECK statments by 2x.\n// Real DCHECK-heavy tests have seen 1.5x speedups.\n\n// The meaning of \"string\" might be different between now and\n// when this macro gets invoked (e.g., if someone is experimenting\n// with other string implementations that get defined after this\n// file is included).  Save the current meaning now and use it\n// in the macro.\ntypedef std::string _Check_string;\n#define CHECK_OP_LOG(name, op, val1, val2, log)                         \\\n  while (google::_Check_string* _result =                \\\n         google::Check##name##Impl(                      \\\n             google::GetReferenceableValue(val1),        \\\n             google::GetReferenceableValue(val2),        \\\n             #val1 \" \" #op \" \" #val2))                                  \\\n    log(__FILE__, __LINE__,                                             \\\n        google::CheckOpString(_result)).stream()\n#else\n// In optimized mode, use CheckOpString to hint to compiler that\n// the while condition is unlikely.\n#define CHECK_OP_LOG(name, op, val1, val2, log)                         \\\n  while (google::CheckOpString _result =                 \\\n         google::Check##name##Impl(                      \\\n             google::GetReferenceableValue(val1),        \\\n             google::GetReferenceableValue(val2),        \\\n             #val1 \" \" #op \" \" #val2))                                  \\\n    log(__FILE__, __LINE__, _result).stream()\n#endif  // STATIC_ANALYSIS, DCHECK_IS_ON()\n\n#if GOOGLE_STRIP_LOG <= 3\n#define CHECK_OP(name, op, val1, val2) \\\n  CHECK_OP_LOG(name, op, val1, val2, google::LogMessageFatal)\n#else\n#define CHECK_OP(name, op, val1, val2) \\\n  CHECK_OP_LOG(name, op, val1, val2, google::NullStreamFatal)\n#endif // STRIP_LOG <= 3\n\n// Equality/Inequality checks - compare two values, and log a FATAL message\n// including the two values when the result is not as expected.  The values\n// must have operator<<(ostream, ...) defined.\n//\n// You may append to the error message like so:\n//   CHECK_NE(1, 2) << \": The world must be ending!\";\n//\n// We are very careful to ensure that each argument is evaluated exactly\n// once, and that anything which is legal to pass as a function argument is\n// legal here.  In particular, the arguments may be temporary expressions\n// which will end up being destroyed at the end of the apparent statement,\n// for example:\n//   CHECK_EQ(string(\"abc\")[1], 'b');\n//\n// WARNING: These don't compile correctly if one of the arguments is a pointer\n// and the other is NULL. To work around this, simply static_cast NULL to the\n// type of the desired pointer.\n\n#define CHECK_EQ(val1, val2) CHECK_OP(_EQ, ==, val1, val2)\n#define CHECK_NE(val1, val2) CHECK_OP(_NE, !=, val1, val2)\n#define CHECK_LE(val1, val2) CHECK_OP(_LE, <=, val1, val2)\n#define CHECK_LT(val1, val2) CHECK_OP(_LT, < , val1, val2)\n#define CHECK_GE(val1, val2) CHECK_OP(_GE, >=, val1, val2)\n#define CHECK_GT(val1, val2) CHECK_OP(_GT, > , val1, val2)\n\n// Check that the input is non NULL.  This very useful in constructor\n// initializer lists.\n\n#define CHECK_NOTNULL(val) \\\n  google::CheckNotNull(__FILE__, __LINE__, \"'\" #val \"' Must be non NULL\", (val))\n\n// Helper functions for string comparisons.\n// To avoid bloat, the definitions are in logging.cc.\n#define DECLARE_CHECK_STROP_IMPL(func, expected) \\\n  GOOGLE_GLOG_DLL_DECL std::string* Check##func##expected##Impl( \\\n      const char* s1, const char* s2, const char* names);\nDECLARE_CHECK_STROP_IMPL(strcmp, true)\nDECLARE_CHECK_STROP_IMPL(strcmp, false)\nDECLARE_CHECK_STROP_IMPL(strcasecmp, true)\nDECLARE_CHECK_STROP_IMPL(strcasecmp, false)\n#undef DECLARE_CHECK_STROP_IMPL\n\n// Helper macro for string comparisons.\n// Don't use this macro directly in your code, use CHECK_STREQ et al below.\n#define CHECK_STROP(func, op, expected, s1, s2) \\\n  while (google::CheckOpString _result = \\\n         google::Check##func##expected##Impl((s1), (s2), \\\n                                     #s1 \" \" #op \" \" #s2)) \\\n    LOG(FATAL) << *_result.str_\n\n\n// String (char*) equality/inequality checks.\n// CASE versions are case-insensitive.\n//\n// Note that \"s1\" and \"s2\" may be temporary strings which are destroyed\n// by the compiler at the end of the current \"full expression\"\n// (e.g. CHECK_STREQ(Foo().c_str(), Bar().c_str())).\n\n#define CHECK_STREQ(s1, s2) CHECK_STROP(strcmp, ==, true, s1, s2)\n#define CHECK_STRNE(s1, s2) CHECK_STROP(strcmp, !=, false, s1, s2)\n#define CHECK_STRCASEEQ(s1, s2) CHECK_STROP(strcasecmp, ==, true, s1, s2)\n#define CHECK_STRCASENE(s1, s2) CHECK_STROP(strcasecmp, !=, false, s1, s2)\n\n#define CHECK_INDEX(I,A) CHECK(I < (sizeof(A)/sizeof(A[0])))\n#define CHECK_BOUND(B,A) CHECK(B <= (sizeof(A)/sizeof(A[0])))\n\n#define CHECK_DOUBLE_EQ(val1, val2)              \\\n  do {                                           \\\n    CHECK_LE((val1), (val2)+0.000000000000001L); \\\n    CHECK_GE((val1), (val2)-0.000000000000001L); \\\n  } while (0)\n\n#define CHECK_NEAR(val1, val2, margin)           \\\n  do {                                           \\\n    CHECK_LE((val1), (val2)+(margin));           \\\n    CHECK_GE((val1), (val2)-(margin));           \\\n  } while (0)\n\n// perror()..googly style!\n//\n// PLOG() and PLOG_IF() and PCHECK() behave exactly like their LOG* and\n// CHECK equivalents with the addition that they postpend a description\n// of the current state of errno to their output lines.\n\n#define PLOG(severity) GOOGLE_PLOG(severity, 0).stream()\n\n#define GOOGLE_PLOG(severity, counter)  \\\n  google::ErrnoLogMessage( \\\n      __FILE__, __LINE__, google::GLOG_ ## severity, counter, \\\n      &google::LogMessage::SendToLog)\n\n#define PLOG_IF(severity, condition) \\\n  !(condition) ? (void) 0 : google::LogMessageVoidify() & PLOG(severity)\n\n// A CHECK() macro that postpends errno if the condition is false. E.g.\n//\n// if (poll(fds, nfds, timeout) == -1) { PCHECK(errno == EINTR); ... }\n#define PCHECK(condition)  \\\n      PLOG_IF(FATAL, GOOGLE_PREDICT_BRANCH_NOT_TAKEN(!(condition))) \\\n              << \"Check failed: \" #condition \" \"\n\n// A CHECK() macro that lets you assert the success of a function that\n// returns -1 and sets errno in case of an error. E.g.\n//\n// CHECK_ERR(mkdir(path, 0700));\n//\n// or\n//\n// int fd = open(filename, flags); CHECK_ERR(fd) << \": open \" << filename;\n#define CHECK_ERR(invocation)                                          \\\nPLOG_IF(FATAL, GOOGLE_PREDICT_BRANCH_NOT_TAKEN((invocation) == -1))    \\\n        << #invocation\n\n// Use macro expansion to create, for each use of LOG_EVERY_N(), static\n// variables with the __LINE__ expansion as part of the variable name.\n#define LOG_EVERY_N_VARNAME(base, line) LOG_EVERY_N_VARNAME_CONCAT(base, line)\n#define LOG_EVERY_N_VARNAME_CONCAT(base, line) base ## line\n\n#define LOG_OCCURRENCES LOG_EVERY_N_VARNAME(occurrences_, __LINE__)\n#define LOG_OCCURRENCES_MOD_N LOG_EVERY_N_VARNAME(occurrences_mod_n_, __LINE__)\n\n#define SOME_KIND_OF_LOG_EVERY_N(severity, n, what_to_do) \\\n  static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \\\n  ++LOG_OCCURRENCES; \\\n  if (++LOG_OCCURRENCES_MOD_N > n) LOG_OCCURRENCES_MOD_N -= n; \\\n  if (LOG_OCCURRENCES_MOD_N == 1) \\\n    google::LogMessage( \\\n        __FILE__, __LINE__, google::GLOG_ ## severity, LOG_OCCURRENCES, \\\n        &what_to_do).stream()\n\n#define SOME_KIND_OF_LOG_IF_EVERY_N(severity, condition, n, what_to_do) \\\n  static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \\\n  ++LOG_OCCURRENCES; \\\n  if (condition && \\\n      ((LOG_OCCURRENCES_MOD_N=(LOG_OCCURRENCES_MOD_N + 1) % n) == (1 % n))) \\\n    google::LogMessage( \\\n        __FILE__, __LINE__, google::GLOG_ ## severity, LOG_OCCURRENCES, \\\n                 &what_to_do).stream()\n\n#define SOME_KIND_OF_PLOG_EVERY_N(severity, n, what_to_do) \\\n  static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \\\n  ++LOG_OCCURRENCES; \\\n  if (++LOG_OCCURRENCES_MOD_N > n) LOG_OCCURRENCES_MOD_N -= n; \\\n  if (LOG_OCCURRENCES_MOD_N == 1) \\\n    google::ErrnoLogMessage( \\\n        __FILE__, __LINE__, google::GLOG_ ## severity, LOG_OCCURRENCES, \\\n        &what_to_do).stream()\n\n#define SOME_KIND_OF_LOG_FIRST_N(severity, n, what_to_do) \\\n  static int LOG_OCCURRENCES = 0; \\\n  if (LOG_OCCURRENCES <= n) \\\n    ++LOG_OCCURRENCES; \\\n  if (LOG_OCCURRENCES <= n) \\\n    google::LogMessage( \\\n        __FILE__, __LINE__, google::GLOG_ ## severity, LOG_OCCURRENCES, \\\n        &what_to_do).stream()\n\nnamespace glog_internal_namespace_ {\ntemplate <bool>\nstruct CompileAssert {\n};\nstruct CrashReason;\n\n// Returns true if FailureSignalHandler is installed.\nbool IsFailureSignalHandlerInstalled();\n}  // namespace glog_internal_namespace_\n\n#define GOOGLE_GLOG_COMPILE_ASSERT(expr, msg) \\\n  typedef google::glog_internal_namespace_::CompileAssert<(bool(expr))> msg[bool(expr) ? 1 : -1]\n\n#define LOG_EVERY_N(severity, n)                                        \\\n  GOOGLE_GLOG_COMPILE_ASSERT(google::GLOG_ ## severity < \\\n                             google::NUM_SEVERITIES,     \\\n                             INVALID_REQUESTED_LOG_SEVERITY);           \\\n  SOME_KIND_OF_LOG_EVERY_N(severity, (n), google::LogMessage::SendToLog)\n\n#define SYSLOG_EVERY_N(severity, n) \\\n  SOME_KIND_OF_LOG_EVERY_N(severity, (n), google::LogMessage::SendToSyslogAndLog)\n\n#define PLOG_EVERY_N(severity, n) \\\n  SOME_KIND_OF_PLOG_EVERY_N(severity, (n), google::LogMessage::SendToLog)\n\n#define LOG_FIRST_N(severity, n) \\\n  SOME_KIND_OF_LOG_FIRST_N(severity, (n), google::LogMessage::SendToLog)\n\n#define LOG_IF_EVERY_N(severity, condition, n) \\\n  SOME_KIND_OF_LOG_IF_EVERY_N(severity, (condition), (n), google::LogMessage::SendToLog)\n\n// We want the special COUNTER value available for LOG_EVERY_X()'ed messages\nenum PRIVATE_Counter {COUNTER};\n\n#ifdef GLOG_NO_ABBREVIATED_SEVERITIES\n// wingdi.h defines ERROR to be 0. When we call LOG(ERROR), it gets\n// substituted with 0, and it expands to COMPACT_GOOGLE_LOG_0. To allow us\n// to keep using this syntax, we define this macro to do the same thing\n// as COMPACT_GOOGLE_LOG_ERROR.\n#define COMPACT_GOOGLE_LOG_0 COMPACT_GOOGLE_LOG_ERROR\n#define SYSLOG_0 SYSLOG_ERROR\n#define LOG_TO_STRING_0 LOG_TO_STRING_ERROR\n// Needed for LOG_IS_ON(ERROR).\nconst LogSeverity GLOG_0 = GLOG_ERROR;\n#else\n// Users may include windows.h after logging.h without\n// GLOG_NO_ABBREVIATED_SEVERITIES nor WIN32_LEAN_AND_MEAN.\n// For this case, we cannot detect if ERROR is defined before users\n// actually use ERROR. Let's make an undefined symbol to warn users.\n# define GLOG_ERROR_MSG ERROR_macro_is_defined_Define_GLOG_NO_ABBREVIATED_SEVERITIES_before_including_logging_h_See_the_document_for_detail\n# define COMPACT_GOOGLE_LOG_0 GLOG_ERROR_MSG\n# define SYSLOG_0 GLOG_ERROR_MSG\n# define LOG_TO_STRING_0 GLOG_ERROR_MSG\n# define GLOG_0 GLOG_ERROR_MSG\n#endif\n\n// Plus some debug-logging macros that get compiled to nothing for production\n\n#if DCHECK_IS_ON()\n\n#define DLOG(severity) LOG(severity)\n#define DVLOG(verboselevel) VLOG(verboselevel)\n#define DLOG_IF(severity, condition) LOG_IF(severity, condition)\n#define DLOG_EVERY_N(severity, n) LOG_EVERY_N(severity, n)\n#define DLOG_IF_EVERY_N(severity, condition, n) \\\n  LOG_IF_EVERY_N(severity, condition, n)\n#define DLOG_ASSERT(condition) LOG_ASSERT(condition)\n\n// debug-only checking.  executed if DCHECK_IS_ON().\n#define DCHECK(condition) CHECK(condition)\n#define DCHECK_EQ(val1, val2) CHECK_EQ(val1, val2)\n#define DCHECK_NE(val1, val2) CHECK_NE(val1, val2)\n#define DCHECK_LE(val1, val2) CHECK_LE(val1, val2)\n#define DCHECK_LT(val1, val2) CHECK_LT(val1, val2)\n#define DCHECK_GE(val1, val2) CHECK_GE(val1, val2)\n#define DCHECK_GT(val1, val2) CHECK_GT(val1, val2)\n#define DCHECK_NOTNULL(val) CHECK_NOTNULL(val)\n#define DCHECK_STREQ(str1, str2) CHECK_STREQ(str1, str2)\n#define DCHECK_STRCASEEQ(str1, str2) CHECK_STRCASEEQ(str1, str2)\n#define DCHECK_STRNE(str1, str2) CHECK_STRNE(str1, str2)\n#define DCHECK_STRCASENE(str1, str2) CHECK_STRCASENE(str1, str2)\n\n#else  // !DCHECK_IS_ON()\n\n#define DLOG(severity) \\\n  true ? (void) 0 : google::LogMessageVoidify() & LOG(severity)\n\n#define DVLOG(verboselevel) \\\n  (true || !VLOG_IS_ON(verboselevel)) ?\\\n    (void) 0 : google::LogMessageVoidify() & LOG(INFO)\n\n#define DLOG_IF(severity, condition) \\\n  (true || !(condition)) ? (void) 0 : google::LogMessageVoidify() & LOG(severity)\n\n#define DLOG_EVERY_N(severity, n) \\\n  true ? (void) 0 : google::LogMessageVoidify() & LOG(severity)\n\n#define DLOG_IF_EVERY_N(severity, condition, n) \\\n  (true || !(condition))? (void) 0 : google::LogMessageVoidify() & LOG(severity)\n\n#define DLOG_ASSERT(condition) \\\n  true ? (void) 0 : LOG_ASSERT(condition)\n\n// MSVC warning C4127: conditional expression is constant\n#define DCHECK(condition) \\\n  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \\\n  while (false) \\\n    GLOG_MSVC_POP_WARNING() CHECK(condition)\n\n#define DCHECK_EQ(val1, val2) \\\n  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \\\n  while (false) \\\n    GLOG_MSVC_POP_WARNING() CHECK_EQ(val1, val2)\n\n#define DCHECK_NE(val1, val2) \\\n  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \\\n  while (false) \\\n    GLOG_MSVC_POP_WARNING() CHECK_NE(val1, val2)\n\n#define DCHECK_LE(val1, val2) \\\n  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \\\n  while (false) \\\n    GLOG_MSVC_POP_WARNING() CHECK_LE(val1, val2)\n\n#define DCHECK_LT(val1, val2) \\\n  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \\\n  while (false) \\\n    GLOG_MSVC_POP_WARNING() CHECK_LT(val1, val2)\n\n#define DCHECK_GE(val1, val2) \\\n  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \\\n  while (false) \\\n    GLOG_MSVC_POP_WARNING() CHECK_GE(val1, val2)\n\n#define DCHECK_GT(val1, val2) \\\n  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \\\n  while (false) \\\n    GLOG_MSVC_POP_WARNING() CHECK_GT(val1, val2)\n\n// You may see warnings in release mode if you don't use the return\n// value of DCHECK_NOTNULL. Please just use DCHECK for such cases.\n#define DCHECK_NOTNULL(val) (val)\n\n#define DCHECK_STREQ(str1, str2) \\\n  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \\\n  while (false) \\\n    GLOG_MSVC_POP_WARNING() CHECK_STREQ(str1, str2)\n\n#define DCHECK_STRCASEEQ(str1, str2) \\\n  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \\\n  while (false) \\\n    GLOG_MSVC_POP_WARNING() CHECK_STRCASEEQ(str1, str2)\n\n#define DCHECK_STRNE(str1, str2) \\\n  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \\\n  while (false) \\\n    GLOG_MSVC_POP_WARNING() CHECK_STRNE(str1, str2)\n\n#define DCHECK_STRCASENE(str1, str2) \\\n  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \\\n  while (false) \\\n    GLOG_MSVC_POP_WARNING() CHECK_STRCASENE(str1, str2)\n\n#endif  // DCHECK_IS_ON()\n\n// Log only in verbose mode.\n\n#define VLOG(verboselevel) LOG_IF(INFO, VLOG_IS_ON(verboselevel))\n\n#define VLOG_IF(verboselevel, condition) \\\n  LOG_IF(INFO, (condition) && VLOG_IS_ON(verboselevel))\n\n#define VLOG_EVERY_N(verboselevel, n) \\\n  LOG_IF_EVERY_N(INFO, VLOG_IS_ON(verboselevel), n)\n\n#define VLOG_IF_EVERY_N(verboselevel, condition, n) \\\n  LOG_IF_EVERY_N(INFO, (condition) && VLOG_IS_ON(verboselevel), n)\n\nnamespace base_logging {\n\n// LogMessage::LogStream is a std::ostream backed by this streambuf.\n// This class ignores overflow and leaves two bytes at the end of the\n// buffer to allow for a '\\n' and '\\0'.\nclass GOOGLE_GLOG_DLL_DECL LogStreamBuf : public std::streambuf {\n public:\n  // REQUIREMENTS: \"len\" must be >= 2 to account for the '\\n' and '\\n'.\n  LogStreamBuf(char *buf, int len) {\n    setp(buf, buf + len - 2);\n  }\n  // This effectively ignores overflow.\n  virtual int_type overflow(int_type ch) {\n    return ch;\n  }\n\n  // Legacy public ostrstream method.\n  size_t pcount() const { return pptr() - pbase(); }\n  char* pbase() const { return std::streambuf::pbase(); }\n};\n\n}  // namespace base_logging\n\n//\n// This class more or less represents a particular log message.  You\n// create an instance of LogMessage and then stream stuff to it.\n// When you finish streaming to it, ~LogMessage is called and the\n// full message gets streamed to the appropriate destination.\n//\n// You shouldn't actually use LogMessage's constructor to log things,\n// though.  You should use the LOG() macro (and variants thereof)\n// above.\nclass GOOGLE_GLOG_DLL_DECL LogMessage {\npublic:\n  enum {\n    // Passing kNoLogPrefix for the line number disables the\n    // log-message prefix. Useful for using the LogMessage\n    // infrastructure as a printing utility. See also the --log_prefix\n    // flag for controlling the log-message prefix on an\n    // application-wide basis.\n    kNoLogPrefix = -1\n  };\n\n  // LogStream inherit from non-DLL-exported class (std::ostrstream)\n  // and VC++ produces a warning for this situation.\n  // However, MSDN says \"C4275 can be ignored in Microsoft Visual C++\n  // 2005 if you are deriving from a type in the Standard C++ Library\"\n  // http://msdn.microsoft.com/en-us/library/3tdb471s(VS.80).aspx\n  // Let's just ignore the warning.\n#ifdef _MSC_VER\n# pragma warning(disable: 4275)\n#endif\n  class GOOGLE_GLOG_DLL_DECL LogStream : public std::ostream {\n#ifdef _MSC_VER\n# pragma warning(default: 4275)\n#endif\n  public:\n    LogStream(char *buf, int len, int ctr)\n        : std::ostream(NULL),\n          streambuf_(buf, len),\n          ctr_(ctr),\n          self_(this) {\n      rdbuf(&streambuf_);\n    }\n\n    int ctr() const { return ctr_; }\n    void set_ctr(int ctr) { ctr_ = ctr; }\n    LogStream* self() const { return self_; }\n\n    // Legacy std::streambuf methods.\n    size_t pcount() const { return streambuf_.pcount(); }\n    char* pbase() const { return streambuf_.pbase(); }\n    char* str() const { return pbase(); }\n\n  private:\n    LogStream(const LogStream&);\n    LogStream& operator=(const LogStream&);\n    base_logging::LogStreamBuf streambuf_;\n    int ctr_;  // Counter hack (for the LOG_EVERY_X() macro)\n    LogStream *self_;  // Consistency check hack\n  };\n\npublic:\n  // icc 8 requires this typedef to avoid an internal compiler error.\n  typedef void (LogMessage::*SendMethod)();\n\n  LogMessage(const char* file, int line, LogSeverity severity, int ctr,\n             SendMethod send_method);\n\n  // Two special constructors that generate reduced amounts of code at\n  // LOG call sites for common cases.\n\n  // Used for LOG(INFO): Implied are:\n  // severity = INFO, ctr = 0, send_method = &LogMessage::SendToLog.\n  //\n  // Using this constructor instead of the more complex constructor above\n  // saves 19 bytes per call site.\n  LogMessage(const char* file, int line);\n\n  // Used for LOG(severity) where severity != INFO.  Implied\n  // are: ctr = 0, send_method = &LogMessage::SendToLog\n  //\n  // Using this constructor instead of the more complex constructor above\n  // saves 17 bytes per call site.\n  LogMessage(const char* file, int line, LogSeverity severity);\n\n  // Constructor to log this message to a specified sink (if not NULL).\n  // Implied are: ctr = 0, send_method = &LogMessage::SendToSinkAndLog if\n  // also_send_to_log is true, send_method = &LogMessage::SendToSink otherwise.\n  LogMessage(const char* file, int line, LogSeverity severity, LogSink* sink,\n             bool also_send_to_log);\n\n  // Constructor where we also give a vector<string> pointer\n  // for storing the messages (if the pointer is not NULL).\n  // Implied are: ctr = 0, send_method = &LogMessage::SaveOrSendToLog.\n  LogMessage(const char* file, int line, LogSeverity severity,\n             std::vector<std::string>* outvec);\n\n  // Constructor where we also give a string pointer for storing the\n  // message (if the pointer is not NULL).  Implied are: ctr = 0,\n  // send_method = &LogMessage::WriteToStringAndLog.\n  LogMessage(const char* file, int line, LogSeverity severity,\n             std::string* message);\n\n  // A special constructor used for check failures\n  LogMessage(const char* file, int line, const CheckOpString& result);\n\n  ~LogMessage();\n\n  // Flush a buffered message to the sink set in the constructor.  Always\n  // called by the destructor, it may also be called from elsewhere if\n  // needed.  Only the first call is actioned; any later ones are ignored.\n  void Flush();\n\n  // An arbitrary limit on the length of a single log message.  This\n  // is so that streaming can be done more efficiently.\n  static const size_t kMaxLogMessageLen;\n\n  // Theses should not be called directly outside of logging.*,\n  // only passed as SendMethod arguments to other LogMessage methods:\n  void SendToLog();  // Actually dispatch to the logs\n  void SendToSyslogAndLog();  // Actually dispatch to syslog and the logs\n\n  // Call abort() or similar to perform LOG(FATAL) crash.\n  static void __attribute__ ((noreturn)) Fail();\n\n  std::ostream& stream();\n\n  int preserved_errno() const;\n\n  // Must be called without the log_mutex held.  (L < log_mutex)\n  static int64 num_messages(int severity);\n\n  struct LogMessageData;\n\nprivate:\n  // Fully internal SendMethod cases:\n  void SendToSinkAndLog();  // Send to sink if provided and dispatch to the logs\n  void SendToSink();  // Send to sink if provided, do nothing otherwise.\n\n  // Write to string if provided and dispatch to the logs.\n  void WriteToStringAndLog();\n\n  void SaveOrSendToLog();  // Save to stringvec if provided, else to logs\n\n  void Init(const char* file, int line, LogSeverity severity,\n            void (LogMessage::*send_method)());\n\n  // Used to fill in crash information during LOG(FATAL) failures.\n  void RecordCrashReason(glog_internal_namespace_::CrashReason* reason);\n\n  // Counts of messages sent at each priority:\n  static int64 num_messages_[NUM_SEVERITIES];  // under log_mutex\n\n  // We keep the data in a separate struct so that each instance of\n  // LogMessage uses less stack space.\n  LogMessageData* allocated_;\n  LogMessageData* data_;\n\n  friend class LogDestination;\n\n  LogMessage(const LogMessage&);\n  void operator=(const LogMessage&);\n};\n\n// This class happens to be thread-hostile because all instances share\n// a single data buffer, but since it can only be created just before\n// the process dies, we don't worry so much.\nclass GOOGLE_GLOG_DLL_DECL LogMessageFatal : public LogMessage {\n public:\n  LogMessageFatal(const char* file, int line);\n  LogMessageFatal(const char* file, int line, const CheckOpString& result);\n  __attribute__ ((noreturn)) ~LogMessageFatal();\n};\n\n// A non-macro interface to the log facility; (useful\n// when the logging level is not a compile-time constant).\ninline void LogAtLevel(int const severity, std::string const &msg) {\n  LogMessage(__FILE__, __LINE__, severity).stream() << msg;\n}\n\n// A macro alternative of LogAtLevel. New code may want to use this\n// version since there are two advantages: 1. this version outputs the\n// file name and the line number where this macro is put like other\n// LOG macros, 2. this macro can be used as C++ stream.\n#define LOG_AT_LEVEL(severity) google::LogMessage(__FILE__, __LINE__, severity).stream()\n\n// Check if it's compiled in C++11 mode.\n//\n// GXX_EXPERIMENTAL_CXX0X is defined by gcc and clang up to at least\n// gcc-4.7 and clang-3.1 (2011-12-13).  __cplusplus was defined to 1\n// in gcc before 4.7 (Crosstool 16) and clang before 3.1, but is\n// defined according to the language version in effect thereafter.\n// Microsoft Visual Studio 14 (2015) sets __cplusplus==199711 despite\n// reasonably good C++11 support, so we set LANG_CXX for it and\n// newer versions (_MSC_VER >= 1900).\n#if (defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L || \\\n     (defined(_MSC_VER) && _MSC_VER >= 1900))\n// Helper for CHECK_NOTNULL().\n//\n// In C++11, all cases can be handled by a single function. Since the value\n// category of the argument is preserved (also for rvalue references),\n// member initializer lists like the one below will compile correctly:\n//\n//   Foo()\n//     : x_(CHECK_NOTNULL(MethodReturningUniquePtr())) {}\ntemplate <typename T>\nT CheckNotNull(const char* file, int line, const char* names, T&& t) {\n if (t == nullptr) {\n   LogMessageFatal(file, line, new std::string(names));\n }\n return std::forward<T>(t);\n}\n\n#else\n\n// A small helper for CHECK_NOTNULL().\ntemplate <typename T>\nT* CheckNotNull(const char *file, int line, const char *names, T* t) {\n  if (t == NULL) {\n    LogMessageFatal(file, line, new std::string(names));\n  }\n  return t;\n}\n#endif\n\n// Allow folks to put a counter in the LOG_EVERY_X()'ed messages. This\n// only works if ostream is a LogStream. If the ostream is not a\n// LogStream you'll get an assert saying as much at runtime.\nGOOGLE_GLOG_DLL_DECL std::ostream& operator<<(std::ostream &os,\n                                              const PRIVATE_Counter&);\n\n\n// Derived class for PLOG*() above.\nclass GOOGLE_GLOG_DLL_DECL ErrnoLogMessage : public LogMessage {\n public:\n\n  ErrnoLogMessage(const char* file, int line, LogSeverity severity, int ctr,\n                  void (LogMessage::*send_method)());\n\n  // Postpends \": strerror(errno) [errno]\".\n  ~ErrnoLogMessage();\n\n private:\n  ErrnoLogMessage(const ErrnoLogMessage&);\n  void operator=(const ErrnoLogMessage&);\n};\n\n\n// This class is used to explicitly ignore values in the conditional\n// logging macros.  This avoids compiler warnings like \"value computed\n// is not used\" and \"statement has no effect\".\n\nclass GOOGLE_GLOG_DLL_DECL LogMessageVoidify {\n public:\n  LogMessageVoidify() { }\n  // This has to be an operator with a precedence lower than << but\n  // higher than ?:\n  void operator&(std::ostream&) { }\n};\n\n\n// Flushes all log files that contains messages that are at least of\n// the specified severity level.  Thread-safe.\nGOOGLE_GLOG_DLL_DECL void FlushLogFiles(LogSeverity min_severity);\n\n// Flushes all log files that contains messages that are at least of\n// the specified severity level. Thread-hostile because it ignores\n// locking -- used for catastrophic failures.\nGOOGLE_GLOG_DLL_DECL void FlushLogFilesUnsafe(LogSeverity min_severity);\n\n//\n// Set the destination to which a particular severity level of log\n// messages is sent.  If base_filename is \"\", it means \"don't log this\n// severity\".  Thread-safe.\n//\nGOOGLE_GLOG_DLL_DECL void SetLogDestination(LogSeverity severity,\n                                            const char* base_filename);\n\n//\n// Set the basename of the symlink to the latest log file at a given\n// severity.  If symlink_basename is empty, do not make a symlink.  If\n// you don't call this function, the symlink basename is the\n// invocation name of the program.  Thread-safe.\n//\nGOOGLE_GLOG_DLL_DECL void SetLogSymlink(LogSeverity severity,\n                                        const char* symlink_basename);\n\n//\n// Used to send logs to some other kind of destination\n// Users should subclass LogSink and override send to do whatever they want.\n// Implementations must be thread-safe because a shared instance will\n// be called from whichever thread ran the LOG(XXX) line.\nclass GOOGLE_GLOG_DLL_DECL LogSink {\n public:\n  virtual ~LogSink();\n\n  // Sink's logging logic (message_len is such as to exclude '\\n' at the end).\n  // This method can't use LOG() or CHECK() as logging system mutex(s) are held\n  // during this call.\n  virtual void send(LogSeverity severity, const char* full_filename,\n                    const char* base_filename, int line,\n                    const struct ::tm* tm_time,\n                    const char* message, size_t message_len) = 0;\n\n  // Redefine this to implement waiting for\n  // the sink's logging logic to complete.\n  // It will be called after each send() returns,\n  // but before that LogMessage exits or crashes.\n  // By default this function does nothing.\n  // Using this function one can implement complex logic for send()\n  // that itself involves logging; and do all this w/o causing deadlocks and\n  // inconsistent rearrangement of log messages.\n  // E.g. if a LogSink has thread-specific actions, the send() method\n  // can simply add the message to a queue and wake up another thread that\n  // handles real logging while itself making some LOG() calls;\n  // WaitTillSent() can be implemented to wait for that logic to complete.\n  // See our unittest for an example.\n  virtual void WaitTillSent();\n\n  // Returns the normal text output of the log message.\n  // Can be useful to implement send().\n  static std::string ToString(LogSeverity severity, const char* file, int line,\n                              const struct ::tm* tm_time,\n                              const char* message, size_t message_len);\n};\n\n// Add or remove a LogSink as a consumer of logging data.  Thread-safe.\nGOOGLE_GLOG_DLL_DECL void AddLogSink(LogSink *destination);\nGOOGLE_GLOG_DLL_DECL void RemoveLogSink(LogSink *destination);\n\n//\n// Specify an \"extension\" added to the filename specified via\n// SetLogDestination.  This applies to all severity levels.  It's\n// often used to append the port we're listening on to the logfile\n// name.  Thread-safe.\n//\nGOOGLE_GLOG_DLL_DECL void SetLogFilenameExtension(\n    const char* filename_extension);\n\n//\n// Make it so that all log messages of at least a particular severity\n// are logged to stderr (in addition to logging to the usual log\n// file(s)).  Thread-safe.\n//\nGOOGLE_GLOG_DLL_DECL void SetStderrLogging(LogSeverity min_severity);\n\n//\n// Make it so that all log messages go only to stderr.  Thread-safe.\n//\nGOOGLE_GLOG_DLL_DECL void LogToStderr();\n\n//\n// Make it so that all log messages of at least a particular severity are\n// logged via email to a list of addresses (in addition to logging to the\n// usual log file(s)).  The list of addresses is just a string containing\n// the email addresses to send to (separated by spaces, say).  Thread-safe.\n//\nGOOGLE_GLOG_DLL_DECL void SetEmailLogging(LogSeverity min_severity,\n                                          const char* addresses);\n\n// A simple function that sends email. dest is a commma-separated\n// list of addressess.  Thread-safe.\nGOOGLE_GLOG_DLL_DECL bool SendEmail(const char *dest,\n                                    const char *subject, const char *body);\n\nGOOGLE_GLOG_DLL_DECL const std::vector<std::string>& GetLoggingDirectories();\n\n// For tests only:  Clear the internal [cached] list of logging directories to\n// force a refresh the next time GetLoggingDirectories is called.\n// Thread-hostile.\nvoid TestOnly_ClearLoggingDirectoriesList();\n\n// Returns a set of existing temporary directories, which will be a\n// subset of the directories returned by GetLogginDirectories().\n// Thread-safe.\nGOOGLE_GLOG_DLL_DECL void GetExistingTempDirectories(\n    std::vector<std::string>* list);\n\n// Print any fatal message again -- useful to call from signal handler\n// so that the last thing in the output is the fatal message.\n// Thread-hostile, but a race is unlikely.\nGOOGLE_GLOG_DLL_DECL void ReprintFatalMessage();\n\n// Truncate a log file that may be the append-only output of multiple\n// processes and hence can't simply be renamed/reopened (typically a\n// stdout/stderr).  If the file \"path\" is > \"limit\" bytes, copy the\n// last \"keep\" bytes to offset 0 and truncate the rest. Since we could\n// be racing with other writers, this approach has the potential to\n// lose very small amounts of data. For security, only follow symlinks\n// if the path is /proc/self/fd/*\nGOOGLE_GLOG_DLL_DECL void TruncateLogFile(const char *path,\n                                          int64 limit, int64 keep);\n\n// Truncate stdout and stderr if they are over the value specified by\n// --max_log_size; keep the final 1MB.  This function has the same\n// race condition as TruncateLogFile.\nGOOGLE_GLOG_DLL_DECL void TruncateStdoutStderr();\n\n// Return the string representation of the provided LogSeverity level.\n// Thread-safe.\nGOOGLE_GLOG_DLL_DECL const char* GetLogSeverityName(LogSeverity severity);\n\n// ---------------------------------------------------------------------\n// Implementation details that are not useful to most clients\n// ---------------------------------------------------------------------\n\n// A Logger is the interface used by logging modules to emit entries\n// to a log.  A typical implementation will dump formatted data to a\n// sequence of files.  We also provide interfaces that will forward\n// the data to another thread so that the invoker never blocks.\n// Implementations should be thread-safe since the logging system\n// will write to them from multiple threads.\n\nnamespace base {\n\nclass GOOGLE_GLOG_DLL_DECL Logger {\n public:\n  virtual ~Logger();\n\n  // Writes \"message[0,message_len-1]\" corresponding to an event that\n  // occurred at \"timestamp\".  If \"force_flush\" is true, the log file\n  // is flushed immediately.\n  //\n  // The input message has already been formatted as deemed\n  // appropriate by the higher level logging facility.  For example,\n  // textual log messages already contain timestamps, and the\n  // file:linenumber header.\n  virtual void Write(bool force_flush,\n                     time_t timestamp,\n                     const char* message,\n                     int message_len) = 0;\n\n  // Flush any buffered messages\n  virtual void Flush() = 0;\n\n  // Get the current LOG file size.\n  // The returned value is approximate since some\n  // logged data may not have been flushed to disk yet.\n  virtual uint32 LogSize() = 0;\n};\n\n// Get the logger for the specified severity level.  The logger\n// remains the property of the logging module and should not be\n// deleted by the caller.  Thread-safe.\nextern GOOGLE_GLOG_DLL_DECL Logger* GetLogger(LogSeverity level);\n\n// Set the logger for the specified severity level.  The logger\n// becomes the property of the logging module and should not\n// be deleted by the caller.  Thread-safe.\nextern GOOGLE_GLOG_DLL_DECL void SetLogger(LogSeverity level, Logger* logger);\n\n}\n\n// glibc has traditionally implemented two incompatible versions of\n// strerror_r(). There is a poorly defined convention for picking the\n// version that we want, but it is not clear whether it even works with\n// all versions of glibc.\n// So, instead, we provide this wrapper that automatically detects the\n// version that is in use, and then implements POSIX semantics.\n// N.B. In addition to what POSIX says, we also guarantee that \"buf\" will\n// be set to an empty string, if this function failed. This means, in most\n// cases, you do not need to check the error code and you can directly\n// use the value of \"buf\". It will never have an undefined value.\n// DEPRECATED: Use StrError(int) instead.\nGOOGLE_GLOG_DLL_DECL int posix_strerror_r(int err, char *buf, size_t len);\n\n// A thread-safe replacement for strerror(). Returns a string describing the\n// given POSIX error code.\nGOOGLE_GLOG_DLL_DECL std::string StrError(int err);\n\n// A class for which we define operator<<, which does nothing.\nclass GOOGLE_GLOG_DLL_DECL NullStream : public LogMessage::LogStream {\n public:\n  // Initialize the LogStream so the messages can be written somewhere\n  // (they'll never be actually displayed). This will be needed if a\n  // NullStream& is implicitly converted to LogStream&, in which case\n  // the overloaded NullStream::operator<< will not be invoked.\n  NullStream() : LogMessage::LogStream(message_buffer_, 1, 0) { }\n  NullStream(const char* /*file*/, int /*line*/,\n             const CheckOpString& /*result*/) :\n      LogMessage::LogStream(message_buffer_, 1, 0) { }\n  NullStream &stream() { return *this; }\n private:\n  // A very short buffer for messages (which we discard anyway). This\n  // will be needed if NullStream& converted to LogStream& (e.g. as a\n  // result of a conditional expression).\n  char message_buffer_[2];\n};\n\n// Do nothing. This operator is inline, allowing the message to be\n// compiled away. The message will not be compiled away if we do\n// something like (flag ? LOG(INFO) : LOG(ERROR)) << message; when\n// SKIP_LOG=WARNING. In those cases, NullStream will be implicitly\n// converted to LogStream and the message will be computed and then\n// quietly discarded.\ntemplate<class T>\ninline NullStream& operator<<(NullStream &str, const T &) { return str; }\n\n// Similar to NullStream, but aborts the program (without stack\n// trace), like LogMessageFatal.\nclass GOOGLE_GLOG_DLL_DECL NullStreamFatal : public NullStream {\n public:\n  NullStreamFatal() { }\n  NullStreamFatal(const char* file, int line, const CheckOpString& result) :\n      NullStream(file, line, result) { }\n  __attribute__ ((noreturn)) ~NullStreamFatal() throw () { _exit(1); }\n};\n\n// Install a signal handler that will dump signal information and a stack\n// trace when the program crashes on certain signals.  We'll install the\n// signal handler for the following signals.\n//\n// SIGSEGV, SIGILL, SIGFPE, SIGABRT, SIGBUS, and SIGTERM.\n//\n// By default, the signal handler will write the failure dump to the\n// standard error.  You can customize the destination by installing your\n// own writer function by InstallFailureWriter() below.\n//\n// Note on threading:\n//\n// The function should be called before threads are created, if you want\n// to use the failure signal handler for all threads.  The stack trace\n// will be shown only for the thread that receives the signal.  In other\n// words, stack traces of other threads won't be shown.\nGOOGLE_GLOG_DLL_DECL void InstallFailureSignalHandler();\n\n// Installs a function that is used for writing the failure dump.  \"data\"\n// is the pointer to the beginning of a message to be written, and \"size\"\n// is the size of the message.  You should not expect the data is\n// terminated with '\\0'.\nGOOGLE_GLOG_DLL_DECL void InstallFailureWriter(\n    void (*writer)(const char* data, int size));\n\n}\n\n#endif // _LOGGING_H_\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/glog/logging.h.in",
    "content": "// Copyright (c) 1999, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: Ray Sidney\n//\n// This file contains #include information about logging-related stuff.\n// Pretty much everybody needs to #include this file so that they can\n// log various happenings.\n//\n#ifndef _LOGGING_H_\n#define _LOGGING_H_\n\n#include <errno.h>\n#include <string.h>\n#include <time.h>\n#include <iosfwd>\n#include <ostream>\n#include <sstream>\n#include <string>\n#if @ac_cv_have_unistd_h@\n# include <unistd.h>\n#endif\n#include <vector>\n\n#if defined(_MSC_VER)\n#define GLOG_MSVC_PUSH_DISABLE_WARNING(n) __pragma(warning(push)) \\\n                                     __pragma(warning(disable:n))\n#define GLOG_MSVC_POP_WARNING() __pragma(warning(pop))\n#else\n#define GLOG_MSVC_PUSH_DISABLE_WARNING(n)\n#define GLOG_MSVC_POP_WARNING()\n#endif\n\n// Annoying stuff for windows -- makes sure clients can import these functions\n#ifndef GOOGLE_GLOG_DLL_DECL\n# if defined(_WIN32) && !defined(__CYGWIN__)\n#   define GOOGLE_GLOG_DLL_DECL  __declspec(dllimport)\n# else\n#   define GOOGLE_GLOG_DLL_DECL\n# endif\n#endif\n\n// We care a lot about number of bits things take up.  Unfortunately,\n// systems define their bit-specific ints in a lot of different ways.\n// We use our own way, and have a typedef to get there.\n// Note: these commands below may look like \"#if 1\" or \"#if 0\", but\n// that's because they were constructed that way at ./configure time.\n// Look at logging.h.in to see how they're calculated (based on your config).\n#if @ac_cv_have_stdint_h@\n#include <stdint.h>             // the normal place uint16_t is defined\n#endif\n#if @ac_cv_have_systypes_h@\n#include <sys/types.h>          // the normal place u_int16_t is defined\n#endif\n#if @ac_cv_have_inttypes_h@\n#include <inttypes.h>           // a third place for uint16_t or u_int16_t\n#endif\n\n#if 0\n#include <gflags/gflags.h>\n#endif\n\n@ac_google_start_namespace@\n\n#if @ac_cv_have_uint16_t@      // the C99 format\ntypedef int32_t int32;\ntypedef uint32_t uint32;\ntypedef int64_t int64;\ntypedef uint64_t uint64;\n#elif @ac_cv_have_u_int16_t@   // the BSD format\ntypedef int32_t int32;\ntypedef u_int32_t uint32;\ntypedef int64_t int64;\ntypedef u_int64_t uint64;\n#elif @ac_cv_have___uint16@    // the windows (vc7) format\ntypedef __int32 int32;\ntypedef unsigned __int32 uint32;\ntypedef __int64 int64;\ntypedef unsigned __int64 uint64;\n#else\n#error Do not know how to define a 32-bit integer quantity on your system\n#endif\n\n@ac_google_end_namespace@\n\n// The global value of GOOGLE_STRIP_LOG. All the messages logged to\n// LOG(XXX) with severity less than GOOGLE_STRIP_LOG will not be displayed.\n// If it can be determined at compile time that the message will not be\n// printed, the statement will be compiled out.\n//\n// Example: to strip out all INFO and WARNING messages, use the value\n// of 2 below. To make an exception for WARNING messages from a single\n// file, add \"#define GOOGLE_STRIP_LOG 1\" to that file _before_ including\n// base/logging.h\n#ifndef GOOGLE_STRIP_LOG\n#define GOOGLE_STRIP_LOG 0\n#endif\n\n// GCC can be told that a certain branch is not likely to be taken (for\n// instance, a CHECK failure), and use that information in static analysis.\n// Giving it this information can help it optimize for the common case in\n// the absence of better information (ie. -fprofile-arcs).\n//\n#ifndef GOOGLE_PREDICT_BRANCH_NOT_TAKEN\n#if @ac_cv_have___builtin_expect@\n#define GOOGLE_PREDICT_BRANCH_NOT_TAKEN(x) (__builtin_expect(x, 0))\n#else\n#define GOOGLE_PREDICT_BRANCH_NOT_TAKEN(x) x\n#endif\n#endif\n\n#ifndef GOOGLE_PREDICT_FALSE\n#if @ac_cv_have___builtin_expect@\n#define GOOGLE_PREDICT_FALSE(x) (__builtin_expect(x, 0))\n#else\n#define GOOGLE_PREDICT_FALSE(x) x\n#endif\n#endif\n\n#ifndef GOOGLE_PREDICT_TRUE\n#if @ac_cv_have___builtin_expect@\n#define GOOGLE_PREDICT_TRUE(x) (__builtin_expect(!!(x), 1))\n#else\n#define GOOGLE_PREDICT_TRUE(x) x\n#endif\n#endif\n\n\n// Make a bunch of macros for logging.  The way to log things is to stream\n// things to LOG(<a particular severity level>).  E.g.,\n//\n//   LOG(INFO) << \"Found \" << num_cookies << \" cookies\";\n//\n// You can capture log messages in a string, rather than reporting them\n// immediately:\n//\n//   vector<string> errors;\n//   LOG_STRING(ERROR, &errors) << \"Couldn't parse cookie #\" << cookie_num;\n//\n// This pushes back the new error onto 'errors'; if given a NULL pointer,\n// it reports the error via LOG(ERROR).\n//\n// You can also do conditional logging:\n//\n//   LOG_IF(INFO, num_cookies > 10) << \"Got lots of cookies\";\n//\n// You can also do occasional logging (log every n'th occurrence of an\n// event):\n//\n//   LOG_EVERY_N(INFO, 10) << \"Got the \" << google::COUNTER << \"th cookie\";\n//\n// The above will cause log messages to be output on the 1st, 11th, 21st, ...\n// times it is executed.  Note that the special google::COUNTER value is used\n// to identify which repetition is happening.\n//\n// You can also do occasional conditional logging (log every n'th\n// occurrence of an event, when condition is satisfied):\n//\n//   LOG_IF_EVERY_N(INFO, (size > 1024), 10) << \"Got the \" << google::COUNTER\n//                                           << \"th big cookie\";\n//\n// You can log messages the first N times your code executes a line. E.g.\n//\n//   LOG_FIRST_N(INFO, 20) << \"Got the \" << google::COUNTER << \"th cookie\";\n//\n// Outputs log messages for the first 20 times it is executed.\n//\n// Analogous SYSLOG, SYSLOG_IF, and SYSLOG_EVERY_N macros are available.\n// These log to syslog as well as to the normal logs.  If you use these at\n// all, you need to be aware that syslog can drastically reduce performance,\n// especially if it is configured for remote logging!  Don't use these\n// unless you fully understand this and have a concrete need to use them.\n// Even then, try to minimize your use of them.\n//\n// There are also \"debug mode\" logging macros like the ones above:\n//\n//   DLOG(INFO) << \"Found cookies\";\n//\n//   DLOG_IF(INFO, num_cookies > 10) << \"Got lots of cookies\";\n//\n//   DLOG_EVERY_N(INFO, 10) << \"Got the \" << google::COUNTER << \"th cookie\";\n//\n// All \"debug mode\" logging is compiled away to nothing for non-debug mode\n// compiles.\n//\n// We also have\n//\n//   LOG_ASSERT(assertion);\n//   DLOG_ASSERT(assertion);\n//\n// which is syntactic sugar for {,D}LOG_IF(FATAL, assert fails) << assertion;\n//\n// There are \"verbose level\" logging macros.  They look like\n//\n//   VLOG(1) << \"I'm printed when you run the program with --v=1 or more\";\n//   VLOG(2) << \"I'm printed when you run the program with --v=2 or more\";\n//\n// These always log at the INFO log level (when they log at all).\n// The verbose logging can also be turned on module-by-module.  For instance,\n//    --vmodule=mapreduce=2,file=1,gfs*=3 --v=0\n// will cause:\n//   a. VLOG(2) and lower messages to be printed from mapreduce.{h,cc}\n//   b. VLOG(1) and lower messages to be printed from file.{h,cc}\n//   c. VLOG(3) and lower messages to be printed from files prefixed with \"gfs\"\n//   d. VLOG(0) and lower messages to be printed from elsewhere\n//\n// The wildcarding functionality shown by (c) supports both '*' (match\n// 0 or more characters) and '?' (match any single character) wildcards.\n//\n// There's also VLOG_IS_ON(n) \"verbose level\" condition macro. To be used as\n//\n//   if (VLOG_IS_ON(2)) {\n//     // do some logging preparation and logging\n//     // that can't be accomplished with just VLOG(2) << ...;\n//   }\n//\n// There are also VLOG_IF, VLOG_EVERY_N and VLOG_IF_EVERY_N \"verbose level\"\n// condition macros for sample cases, when some extra computation and\n// preparation for logs is not needed.\n//   VLOG_IF(1, (size > 1024))\n//      << \"I'm printed when size is more than 1024 and when you run the \"\n//         \"program with --v=1 or more\";\n//   VLOG_EVERY_N(1, 10)\n//      << \"I'm printed every 10th occurrence, and when you run the program \"\n//         \"with --v=1 or more. Present occurence is \" << google::COUNTER;\n//   VLOG_IF_EVERY_N(1, (size > 1024), 10)\n//      << \"I'm printed on every 10th occurence of case when size is more \"\n//         \" than 1024, when you run the program with --v=1 or more. \";\n//         \"Present occurence is \" << google::COUNTER;\n//\n// The supported severity levels for macros that allow you to specify one\n// are (in increasing order of severity) INFO, WARNING, ERROR, and FATAL.\n// Note that messages of a given severity are logged not only in the\n// logfile for that severity, but also in all logfiles of lower severity.\n// E.g., a message of severity FATAL will be logged to the logfiles of\n// severity FATAL, ERROR, WARNING, and INFO.\n//\n// There is also the special severity of DFATAL, which logs FATAL in\n// debug mode, ERROR in normal mode.\n//\n// Very important: logging a message at the FATAL severity level causes\n// the program to terminate (after the message is logged).\n//\n// Unless otherwise specified, logs will be written to the filename\n// \"<program name>.<hostname>.<user name>.log.<severity level>.\", followed\n// by the date, time, and pid (you can't prevent the date, time, and pid\n// from being in the filename).\n//\n// The logging code takes two flags:\n//     --v=#           set the verbose level\n//     --logtostderr   log all the messages to stderr instead of to logfiles\n\n// LOG LINE PREFIX FORMAT\n//\n// Log lines have this form:\n//\n//     Lmmdd hh:mm:ss.uuuuuu threadid file:line] msg...\n//\n// where the fields are defined as follows:\n//\n//   L                A single character, representing the log level\n//                    (eg 'I' for INFO)\n//   mm               The month (zero padded; ie May is '05')\n//   dd               The day (zero padded)\n//   hh:mm:ss.uuuuuu  Time in hours, minutes and fractional seconds\n//   threadid         The space-padded thread ID as returned by GetTID()\n//                    (this matches the PID on Linux)\n//   file             The file name\n//   line             The line number\n//   msg              The user-supplied message\n//\n// Example:\n//\n//   I1103 11:57:31.739339 24395 google.cc:2341] Command line: ./some_prog\n//   I1103 11:57:31.739403 24395 google.cc:2342] Process id 24395\n//\n// NOTE: although the microseconds are useful for comparing events on\n// a single machine, clocks on different machines may not be well\n// synchronized.  Hence, use caution when comparing the low bits of\n// timestamps from different machines.\n\n#ifndef DECLARE_VARIABLE\n#define MUST_UNDEF_GFLAGS_DECLARE_MACROS\n#define DECLARE_VARIABLE(type, shorttype, name, tn)                     \\\n  namespace fL##shorttype {                                             \\\n    extern GOOGLE_GLOG_DLL_DECL type FLAGS_##name;                      \\\n  }                                                                     \\\n  using fL##shorttype::FLAGS_##name\n\n// bool specialization\n#define DECLARE_bool(name) \\\n  DECLARE_VARIABLE(bool, B, name, bool)\n\n// int32 specialization\n#define DECLARE_int32(name) \\\n  DECLARE_VARIABLE(@ac_google_namespace@::int32, I, name, int32)\n\n// Special case for string, because we have to specify the namespace\n// std::string, which doesn't play nicely with our FLAG__namespace hackery.\n#define DECLARE_string(name)                                            \\\n  namespace fLS {                                                       \\\n    extern GOOGLE_GLOG_DLL_DECL std::string& FLAGS_##name;              \\\n  }                                                                     \\\n  using fLS::FLAGS_##name\n#endif\n\n// Set whether log messages go to stderr instead of logfiles\nDECLARE_bool(logtostderr);\n\n// Set whether log messages go to stderr in addition to logfiles.\nDECLARE_bool(alsologtostderr);\n\n// Set color messages logged to stderr (if supported by terminal).\nDECLARE_bool(colorlogtostderr);\n\n// Log messages at a level >= this flag are automatically sent to\n// stderr in addition to log files.\nDECLARE_int32(stderrthreshold);\n\n// Set whether the log prefix should be prepended to each line of output.\nDECLARE_bool(log_prefix);\n\n// Log messages at a level <= this flag are buffered.\n// Log messages at a higher level are flushed immediately.\nDECLARE_int32(logbuflevel);\n\n// Sets the maximum number of seconds which logs may be buffered for.\nDECLARE_int32(logbufsecs);\n\n// Log suppression level: messages logged at a lower level than this\n// are suppressed.\nDECLARE_int32(minloglevel);\n\n// If specified, logfiles are written into this directory instead of the\n// default logging directory.\nDECLARE_string(log_dir);\n\n// Set the log file mode.\nDECLARE_int32(logfile_mode);\n\n// Sets the path of the directory into which to put additional links\n// to the log files.\nDECLARE_string(log_link);\n\nDECLARE_int32(v);  // in vlog_is_on.cc\n\n// Sets the maximum log file size (in MB).\nDECLARE_int32(max_log_size);\n\n// Sets whether to avoid logging to the disk if the disk is full.\nDECLARE_bool(stop_logging_if_full_disk);\n\n#ifdef MUST_UNDEF_GFLAGS_DECLARE_MACROS\n#undef MUST_UNDEF_GFLAGS_DECLARE_MACROS\n#undef DECLARE_VARIABLE\n#undef DECLARE_bool\n#undef DECLARE_int32\n#undef DECLARE_string\n#endif\n\n// Log messages below the GOOGLE_STRIP_LOG level will be compiled away for\n// security reasons. See LOG(severtiy) below.\n\n// A few definitions of macros that don't generate much code.  Since\n// LOG(INFO) and its ilk are used all over our code, it's\n// better to have compact code for these operations.\n\n#if GOOGLE_STRIP_LOG == 0\n#define COMPACT_GOOGLE_LOG_INFO @ac_google_namespace@::LogMessage( \\\n      __FILE__, __LINE__)\n#define LOG_TO_STRING_INFO(message) @ac_google_namespace@::LogMessage( \\\n      __FILE__, __LINE__, @ac_google_namespace@::GLOG_INFO, message)\n#else\n#define COMPACT_GOOGLE_LOG_INFO @ac_google_namespace@::NullStream()\n#define LOG_TO_STRING_INFO(message) @ac_google_namespace@::NullStream()\n#endif\n\n#if GOOGLE_STRIP_LOG <= 1\n#define COMPACT_GOOGLE_LOG_WARNING @ac_google_namespace@::LogMessage( \\\n      __FILE__, __LINE__, @ac_google_namespace@::GLOG_WARNING)\n#define LOG_TO_STRING_WARNING(message) @ac_google_namespace@::LogMessage( \\\n      __FILE__, __LINE__, @ac_google_namespace@::GLOG_WARNING, message)\n#else\n#define COMPACT_GOOGLE_LOG_WARNING @ac_google_namespace@::NullStream()\n#define LOG_TO_STRING_WARNING(message) @ac_google_namespace@::NullStream()\n#endif\n\n#if GOOGLE_STRIP_LOG <= 2\n#define COMPACT_GOOGLE_LOG_ERROR @ac_google_namespace@::LogMessage( \\\n      __FILE__, __LINE__, @ac_google_namespace@::GLOG_ERROR)\n#define LOG_TO_STRING_ERROR(message) @ac_google_namespace@::LogMessage( \\\n      __FILE__, __LINE__, @ac_google_namespace@::GLOG_ERROR, message)\n#else\n#define COMPACT_GOOGLE_LOG_ERROR @ac_google_namespace@::NullStream()\n#define LOG_TO_STRING_ERROR(message) @ac_google_namespace@::NullStream()\n#endif\n\n#if GOOGLE_STRIP_LOG <= 3\n#define COMPACT_GOOGLE_LOG_FATAL @ac_google_namespace@::LogMessageFatal( \\\n      __FILE__, __LINE__)\n#define LOG_TO_STRING_FATAL(message) @ac_google_namespace@::LogMessage( \\\n      __FILE__, __LINE__, @ac_google_namespace@::GLOG_FATAL, message)\n#else\n#define COMPACT_GOOGLE_LOG_FATAL @ac_google_namespace@::NullStreamFatal()\n#define LOG_TO_STRING_FATAL(message) @ac_google_namespace@::NullStreamFatal()\n#endif\n\n#if defined(NDEBUG) && !defined(DCHECK_ALWAYS_ON)\n#define DCHECK_IS_ON() 0\n#else\n#define DCHECK_IS_ON() 1\n#endif\n\n// For DFATAL, we want to use LogMessage (as opposed to\n// LogMessageFatal), to be consistent with the original behavior.\n#if !DCHECK_IS_ON()\n#define COMPACT_GOOGLE_LOG_DFATAL COMPACT_GOOGLE_LOG_ERROR\n#elif GOOGLE_STRIP_LOG <= 3\n#define COMPACT_GOOGLE_LOG_DFATAL @ac_google_namespace@::LogMessage( \\\n      __FILE__, __LINE__, @ac_google_namespace@::GLOG_FATAL)\n#else\n#define COMPACT_GOOGLE_LOG_DFATAL @ac_google_namespace@::NullStreamFatal()\n#endif\n\n#define GOOGLE_LOG_INFO(counter) @ac_google_namespace@::LogMessage(__FILE__, __LINE__, @ac_google_namespace@::GLOG_INFO, counter, &@ac_google_namespace@::LogMessage::SendToLog)\n#define SYSLOG_INFO(counter) \\\n  @ac_google_namespace@::LogMessage(__FILE__, __LINE__, @ac_google_namespace@::GLOG_INFO, counter, \\\n  &@ac_google_namespace@::LogMessage::SendToSyslogAndLog)\n#define GOOGLE_LOG_WARNING(counter)  \\\n  @ac_google_namespace@::LogMessage(__FILE__, __LINE__, @ac_google_namespace@::GLOG_WARNING, counter, \\\n  &@ac_google_namespace@::LogMessage::SendToLog)\n#define SYSLOG_WARNING(counter)  \\\n  @ac_google_namespace@::LogMessage(__FILE__, __LINE__, @ac_google_namespace@::GLOG_WARNING, counter, \\\n  &@ac_google_namespace@::LogMessage::SendToSyslogAndLog)\n#define GOOGLE_LOG_ERROR(counter)  \\\n  @ac_google_namespace@::LogMessage(__FILE__, __LINE__, @ac_google_namespace@::GLOG_ERROR, counter, \\\n  &@ac_google_namespace@::LogMessage::SendToLog)\n#define SYSLOG_ERROR(counter)  \\\n  @ac_google_namespace@::LogMessage(__FILE__, __LINE__, @ac_google_namespace@::GLOG_ERROR, counter, \\\n  &@ac_google_namespace@::LogMessage::SendToSyslogAndLog)\n#define GOOGLE_LOG_FATAL(counter) \\\n  @ac_google_namespace@::LogMessage(__FILE__, __LINE__, @ac_google_namespace@::GLOG_FATAL, counter, \\\n  &@ac_google_namespace@::LogMessage::SendToLog)\n#define SYSLOG_FATAL(counter) \\\n  @ac_google_namespace@::LogMessage(__FILE__, __LINE__, @ac_google_namespace@::GLOG_FATAL, counter, \\\n  &@ac_google_namespace@::LogMessage::SendToSyslogAndLog)\n#define GOOGLE_LOG_DFATAL(counter) \\\n  @ac_google_namespace@::LogMessage(__FILE__, __LINE__, @ac_google_namespace@::DFATAL_LEVEL, counter, \\\n  &@ac_google_namespace@::LogMessage::SendToLog)\n#define SYSLOG_DFATAL(counter) \\\n  @ac_google_namespace@::LogMessage(__FILE__, __LINE__, @ac_google_namespace@::DFATAL_LEVEL, counter, \\\n  &@ac_google_namespace@::LogMessage::SendToSyslogAndLog)\n\n#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) || defined(__CYGWIN32__)\n// A very useful logging macro to log windows errors:\n#define LOG_SYSRESULT(result) \\\n  if (FAILED(HRESULT_FROM_WIN32(result))) { \\\n    LPSTR message = NULL; \\\n    LPSTR msg = reinterpret_cast<LPSTR>(&message); \\\n    DWORD message_length = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | \\\n                         FORMAT_MESSAGE_FROM_SYSTEM, \\\n                         0, result, 0, msg, 100, NULL); \\\n    if (message_length > 0) { \\\n      @ac_google_namespace@::LogMessage(__FILE__, __LINE__, @ac_google_namespace@::GLOG_ERROR, 0, \\\n          &@ac_google_namespace@::LogMessage::SendToLog).stream() \\\n          << reinterpret_cast<const char*>(message); \\\n      LocalFree(message); \\\n    } \\\n  }\n#endif\n\n// We use the preprocessor's merging operator, \"##\", so that, e.g.,\n// LOG(INFO) becomes the token GOOGLE_LOG_INFO.  There's some funny\n// subtle difference between ostream member streaming functions (e.g.,\n// ostream::operator<<(int) and ostream non-member streaming functions\n// (e.g., ::operator<<(ostream&, string&): it turns out that it's\n// impossible to stream something like a string directly to an unnamed\n// ostream. We employ a neat hack by calling the stream() member\n// function of LogMessage which seems to avoid the problem.\n#define LOG(severity) COMPACT_GOOGLE_LOG_ ## severity.stream()\n#define SYSLOG(severity) SYSLOG_ ## severity(0).stream()\n\n@ac_google_start_namespace@\n\n// They need the definitions of integer types.\n#include \"glog/log_severity.h\"\n#include \"glog/vlog_is_on.h\"\n\n// Initialize google's logging library. You will see the program name\n// specified by argv0 in log outputs.\nGOOGLE_GLOG_DLL_DECL void InitGoogleLogging(const char* argv0);\n\n// Shutdown google's logging library.\nGOOGLE_GLOG_DLL_DECL void ShutdownGoogleLogging();\n\n// Install a function which will be called after LOG(FATAL).\nGOOGLE_GLOG_DLL_DECL void InstallFailureFunction(void (*fail_func)());\n\nclass LogSink;  // defined below\n\n// If a non-NULL sink pointer is given, we push this message to that sink.\n// For LOG_TO_SINK we then do normal LOG(severity) logging as well.\n// This is useful for capturing messages and passing/storing them\n// somewhere more specific than the global log of the process.\n// Argument types:\n//   LogSink* sink;\n//   LogSeverity severity;\n// The cast is to disambiguate NULL arguments.\n#define LOG_TO_SINK(sink, severity) \\\n  @ac_google_namespace@::LogMessage(                                    \\\n      __FILE__, __LINE__,                                               \\\n      @ac_google_namespace@::GLOG_ ## severity,                         \\\n      static_cast<@ac_google_namespace@::LogSink*>(sink), true).stream()\n#define LOG_TO_SINK_BUT_NOT_TO_LOGFILE(sink, severity)                  \\\n  @ac_google_namespace@::LogMessage(                                    \\\n      __FILE__, __LINE__,                                               \\\n      @ac_google_namespace@::GLOG_ ## severity,                         \\\n      static_cast<@ac_google_namespace@::LogSink*>(sink), false).stream()\n\n// If a non-NULL string pointer is given, we write this message to that string.\n// We then do normal LOG(severity) logging as well.\n// This is useful for capturing messages and storing them somewhere more\n// specific than the global log of the process.\n// Argument types:\n//   string* message;\n//   LogSeverity severity;\n// The cast is to disambiguate NULL arguments.\n// NOTE: LOG(severity) expands to LogMessage().stream() for the specified\n// severity.\n#define LOG_TO_STRING(severity, message) \\\n  LOG_TO_STRING_##severity(static_cast<string*>(message)).stream()\n\n// If a non-NULL pointer is given, we push the message onto the end\n// of a vector of strings; otherwise, we report it with LOG(severity).\n// This is handy for capturing messages and perhaps passing them back\n// to the caller, rather than reporting them immediately.\n// Argument types:\n//   LogSeverity severity;\n//   vector<string> *outvec;\n// The cast is to disambiguate NULL arguments.\n#define LOG_STRING(severity, outvec) \\\n  LOG_TO_STRING_##severity(static_cast<std::vector<std::string>*>(outvec)).stream()\n\n#define LOG_IF(severity, condition) \\\n  !(condition) ? (void) 0 : @ac_google_namespace@::LogMessageVoidify() & LOG(severity)\n#define SYSLOG_IF(severity, condition) \\\n  !(condition) ? (void) 0 : @ac_google_namespace@::LogMessageVoidify() & SYSLOG(severity)\n\n#define LOG_ASSERT(condition)  \\\n  LOG_IF(FATAL, !(condition)) << \"Assert failed: \" #condition\n#define SYSLOG_ASSERT(condition) \\\n  SYSLOG_IF(FATAL, !(condition)) << \"Assert failed: \" #condition\n\n// CHECK dies with a fatal error if condition is not true.  It is *not*\n// controlled by DCHECK_IS_ON(), so the check will be executed regardless of\n// compilation mode.  Therefore, it is safe to do things like:\n//    CHECK(fp->Write(x) == 4)\n#define CHECK(condition)  \\\n      LOG_IF(FATAL, GOOGLE_PREDICT_BRANCH_NOT_TAKEN(!(condition))) \\\n             << \"Check failed: \" #condition \" \"\n\n// A container for a string pointer which can be evaluated to a bool -\n// true iff the pointer is NULL.\nstruct CheckOpString {\n  CheckOpString(std::string* str) : str_(str) { }\n  // No destructor: if str_ is non-NULL, we're about to LOG(FATAL),\n  // so there's no point in cleaning up str_.\n  operator bool() const {\n    return GOOGLE_PREDICT_BRANCH_NOT_TAKEN(str_ != NULL);\n  }\n  std::string* str_;\n};\n\n// Function is overloaded for integral types to allow static const\n// integrals declared in classes and not defined to be used as arguments to\n// CHECK* macros. It's not encouraged though.\ntemplate <class T>\ninline const T&       GetReferenceableValue(const T&           t) { return t; }\ninline char           GetReferenceableValue(char               t) { return t; }\ninline unsigned char  GetReferenceableValue(unsigned char      t) { return t; }\ninline signed char    GetReferenceableValue(signed char        t) { return t; }\ninline short          GetReferenceableValue(short              t) { return t; }\ninline unsigned short GetReferenceableValue(unsigned short     t) { return t; }\ninline int            GetReferenceableValue(int                t) { return t; }\ninline unsigned int   GetReferenceableValue(unsigned int       t) { return t; }\ninline long           GetReferenceableValue(long               t) { return t; }\ninline unsigned long  GetReferenceableValue(unsigned long      t) { return t; }\ninline long long      GetReferenceableValue(long long          t) { return t; }\ninline unsigned long long GetReferenceableValue(unsigned long long t) {\n  return t;\n}\n\n// This is a dummy class to define the following operator.\nstruct DummyClassToDefineOperator {};\n\n@ac_google_end_namespace@\n\n// Define global operator<< to declare using ::operator<<.\n// This declaration will allow use to use CHECK macros for user\n// defined classes which have operator<< (e.g., stl_logging.h).\ninline std::ostream& operator<<(\n    std::ostream& out, const google::DummyClassToDefineOperator&) {\n  return out;\n}\n\n@ac_google_start_namespace@\n\n// This formats a value for a failing CHECK_XX statement.  Ordinarily,\n// it uses the definition for operator<<, with a few special cases below.\ntemplate <typename T>\ninline void MakeCheckOpValueString(std::ostream* os, const T& v) {\n  (*os) << v;\n}\n\n// Overrides for char types provide readable values for unprintable\n// characters.\ntemplate <> GOOGLE_GLOG_DLL_DECL\nvoid MakeCheckOpValueString(std::ostream* os, const char& v);\ntemplate <> GOOGLE_GLOG_DLL_DECL\nvoid MakeCheckOpValueString(std::ostream* os, const signed char& v);\ntemplate <> GOOGLE_GLOG_DLL_DECL\nvoid MakeCheckOpValueString(std::ostream* os, const unsigned char& v);\n\n// Build the error message string. Specify no inlining for code size.\ntemplate <typename T1, typename T2>\nstd::string* MakeCheckOpString(const T1& v1, const T2& v2, const char* exprtext)\n    @ac_cv___attribute___noinline@;\n\nnamespace base {\nnamespace internal {\n\n// If \"s\" is less than base_logging::INFO, returns base_logging::INFO.\n// If \"s\" is greater than base_logging::FATAL, returns\n// base_logging::ERROR.  Otherwise, returns \"s\".\nLogSeverity NormalizeSeverity(LogSeverity s);\n\n}  // namespace internal\n\n// A helper class for formatting \"expr (V1 vs. V2)\" in a CHECK_XX\n// statement.  See MakeCheckOpString for sample usage.  Other\n// approaches were considered: use of a template method (e.g.,\n// base::BuildCheckOpString(exprtext, base::Print<T1>, &v1,\n// base::Print<T2>, &v2), however this approach has complications\n// related to volatile arguments and function-pointer arguments).\nclass GOOGLE_GLOG_DLL_DECL CheckOpMessageBuilder {\n public:\n  // Inserts \"exprtext\" and \" (\" to the stream.\n  explicit CheckOpMessageBuilder(const char *exprtext);\n  // Deletes \"stream_\".\n  ~CheckOpMessageBuilder();\n  // For inserting the first variable.\n  std::ostream* ForVar1() { return stream_; }\n  // For inserting the second variable (adds an intermediate \" vs. \").\n  std::ostream* ForVar2();\n  // Get the result (inserts the closing \")\").\n  std::string* NewString();\n\n private:\n  std::ostringstream *stream_;\n};\n\n}  // namespace base\n\ntemplate <typename T1, typename T2>\nstd::string* MakeCheckOpString(const T1& v1, const T2& v2, const char* exprtext) {\n  base::CheckOpMessageBuilder comb(exprtext);\n  MakeCheckOpValueString(comb.ForVar1(), v1);\n  MakeCheckOpValueString(comb.ForVar2(), v2);\n  return comb.NewString();\n}\n\n// Helper functions for CHECK_OP macro.\n// The (int, int) specialization works around the issue that the compiler\n// will not instantiate the template version of the function on values of\n// unnamed enum type - see comment below.\n#define DEFINE_CHECK_OP_IMPL(name, op) \\\n  template <typename T1, typename T2> \\\n  inline std::string* name##Impl(const T1& v1, const T2& v2,    \\\n                            const char* exprtext) { \\\n    if (GOOGLE_PREDICT_TRUE(v1 op v2)) return NULL; \\\n    else return MakeCheckOpString(v1, v2, exprtext); \\\n  } \\\n  inline std::string* name##Impl(int v1, int v2, const char* exprtext) { \\\n    return name##Impl<int, int>(v1, v2, exprtext); \\\n  }\n\n// We use the full name Check_EQ, Check_NE, etc. in case the file including\n// base/logging.h provides its own #defines for the simpler names EQ, NE, etc.\n// This happens if, for example, those are used as token names in a\n// yacc grammar.\nDEFINE_CHECK_OP_IMPL(Check_EQ, ==)  // Compilation error with CHECK_EQ(NULL, x)?\nDEFINE_CHECK_OP_IMPL(Check_NE, !=)  // Use CHECK(x == NULL) instead.\nDEFINE_CHECK_OP_IMPL(Check_LE, <=)\nDEFINE_CHECK_OP_IMPL(Check_LT, < )\nDEFINE_CHECK_OP_IMPL(Check_GE, >=)\nDEFINE_CHECK_OP_IMPL(Check_GT, > )\n#undef DEFINE_CHECK_OP_IMPL\n\n// Helper macro for binary operators.\n// Don't use this macro directly in your code, use CHECK_EQ et al below.\n\n#if defined(STATIC_ANALYSIS)\n// Only for static analysis tool to know that it is equivalent to assert\n#define CHECK_OP_LOG(name, op, val1, val2, log) CHECK((val1) op (val2))\n#elif DCHECK_IS_ON()\n// In debug mode, avoid constructing CheckOpStrings if possible,\n// to reduce the overhead of CHECK statments by 2x.\n// Real DCHECK-heavy tests have seen 1.5x speedups.\n\n// The meaning of \"string\" might be different between now and\n// when this macro gets invoked (e.g., if someone is experimenting\n// with other string implementations that get defined after this\n// file is included).  Save the current meaning now and use it\n// in the macro.\ntypedef std::string _Check_string;\n#define CHECK_OP_LOG(name, op, val1, val2, log)                         \\\n  while (@ac_google_namespace@::_Check_string* _result =                \\\n         @ac_google_namespace@::Check##name##Impl(                      \\\n             @ac_google_namespace@::GetReferenceableValue(val1),        \\\n             @ac_google_namespace@::GetReferenceableValue(val2),        \\\n             #val1 \" \" #op \" \" #val2))                                  \\\n    log(__FILE__, __LINE__,                                             \\\n        @ac_google_namespace@::CheckOpString(_result)).stream()\n#else\n// In optimized mode, use CheckOpString to hint to compiler that\n// the while condition is unlikely.\n#define CHECK_OP_LOG(name, op, val1, val2, log)                         \\\n  while (@ac_google_namespace@::CheckOpString _result =                 \\\n         @ac_google_namespace@::Check##name##Impl(                      \\\n             @ac_google_namespace@::GetReferenceableValue(val1),        \\\n             @ac_google_namespace@::GetReferenceableValue(val2),        \\\n             #val1 \" \" #op \" \" #val2))                                  \\\n    log(__FILE__, __LINE__, _result).stream()\n#endif  // STATIC_ANALYSIS, DCHECK_IS_ON()\n\n#if GOOGLE_STRIP_LOG <= 3\n#define CHECK_OP(name, op, val1, val2) \\\n  CHECK_OP_LOG(name, op, val1, val2, @ac_google_namespace@::LogMessageFatal)\n#else\n#define CHECK_OP(name, op, val1, val2) \\\n  CHECK_OP_LOG(name, op, val1, val2, @ac_google_namespace@::NullStreamFatal)\n#endif // STRIP_LOG <= 3\n\n// Equality/Inequality checks - compare two values, and log a FATAL message\n// including the two values when the result is not as expected.  The values\n// must have operator<<(ostream, ...) defined.\n//\n// You may append to the error message like so:\n//   CHECK_NE(1, 2) << \": The world must be ending!\";\n//\n// We are very careful to ensure that each argument is evaluated exactly\n// once, and that anything which is legal to pass as a function argument is\n// legal here.  In particular, the arguments may be temporary expressions\n// which will end up being destroyed at the end of the apparent statement,\n// for example:\n//   CHECK_EQ(string(\"abc\")[1], 'b');\n//\n// WARNING: These don't compile correctly if one of the arguments is a pointer\n// and the other is NULL. To work around this, simply static_cast NULL to the\n// type of the desired pointer.\n\n#define CHECK_EQ(val1, val2) CHECK_OP(_EQ, ==, val1, val2)\n#define CHECK_NE(val1, val2) CHECK_OP(_NE, !=, val1, val2)\n#define CHECK_LE(val1, val2) CHECK_OP(_LE, <=, val1, val2)\n#define CHECK_LT(val1, val2) CHECK_OP(_LT, < , val1, val2)\n#define CHECK_GE(val1, val2) CHECK_OP(_GE, >=, val1, val2)\n#define CHECK_GT(val1, val2) CHECK_OP(_GT, > , val1, val2)\n\n// Check that the input is non NULL.  This very useful in constructor\n// initializer lists.\n\n#define CHECK_NOTNULL(val) \\\n  @ac_google_namespace@::CheckNotNull(__FILE__, __LINE__, \"'\" #val \"' Must be non NULL\", (val))\n\n// Helper functions for string comparisons.\n// To avoid bloat, the definitions are in logging.cc.\n#define DECLARE_CHECK_STROP_IMPL(func, expected) \\\n  GOOGLE_GLOG_DLL_DECL std::string* Check##func##expected##Impl( \\\n      const char* s1, const char* s2, const char* names);\nDECLARE_CHECK_STROP_IMPL(strcmp, true)\nDECLARE_CHECK_STROP_IMPL(strcmp, false)\nDECLARE_CHECK_STROP_IMPL(strcasecmp, true)\nDECLARE_CHECK_STROP_IMPL(strcasecmp, false)\n#undef DECLARE_CHECK_STROP_IMPL\n\n// Helper macro for string comparisons.\n// Don't use this macro directly in your code, use CHECK_STREQ et al below.\n#define CHECK_STROP(func, op, expected, s1, s2) \\\n  while (@ac_google_namespace@::CheckOpString _result = \\\n         @ac_google_namespace@::Check##func##expected##Impl((s1), (s2), \\\n                                     #s1 \" \" #op \" \" #s2)) \\\n    LOG(FATAL) << *_result.str_\n\n\n// String (char*) equality/inequality checks.\n// CASE versions are case-insensitive.\n//\n// Note that \"s1\" and \"s2\" may be temporary strings which are destroyed\n// by the compiler at the end of the current \"full expression\"\n// (e.g. CHECK_STREQ(Foo().c_str(), Bar().c_str())).\n\n#define CHECK_STREQ(s1, s2) CHECK_STROP(strcmp, ==, true, s1, s2)\n#define CHECK_STRNE(s1, s2) CHECK_STROP(strcmp, !=, false, s1, s2)\n#define CHECK_STRCASEEQ(s1, s2) CHECK_STROP(strcasecmp, ==, true, s1, s2)\n#define CHECK_STRCASENE(s1, s2) CHECK_STROP(strcasecmp, !=, false, s1, s2)\n\n#define CHECK_INDEX(I,A) CHECK(I < (sizeof(A)/sizeof(A[0])))\n#define CHECK_BOUND(B,A) CHECK(B <= (sizeof(A)/sizeof(A[0])))\n\n#define CHECK_DOUBLE_EQ(val1, val2)              \\\n  do {                                           \\\n    CHECK_LE((val1), (val2)+0.000000000000001L); \\\n    CHECK_GE((val1), (val2)-0.000000000000001L); \\\n  } while (0)\n\n#define CHECK_NEAR(val1, val2, margin)           \\\n  do {                                           \\\n    CHECK_LE((val1), (val2)+(margin));           \\\n    CHECK_GE((val1), (val2)-(margin));           \\\n  } while (0)\n\n// perror()..googly style!\n//\n// PLOG() and PLOG_IF() and PCHECK() behave exactly like their LOG* and\n// CHECK equivalents with the addition that they postpend a description\n// of the current state of errno to their output lines.\n\n#define PLOG(severity) GOOGLE_PLOG(severity, 0).stream()\n\n#define GOOGLE_PLOG(severity, counter)  \\\n  @ac_google_namespace@::ErrnoLogMessage( \\\n      __FILE__, __LINE__, @ac_google_namespace@::GLOG_ ## severity, counter, \\\n      &@ac_google_namespace@::LogMessage::SendToLog)\n\n#define PLOG_IF(severity, condition) \\\n  !(condition) ? (void) 0 : @ac_google_namespace@::LogMessageVoidify() & PLOG(severity)\n\n// A CHECK() macro that postpends errno if the condition is false. E.g.\n//\n// if (poll(fds, nfds, timeout) == -1) { PCHECK(errno == EINTR); ... }\n#define PCHECK(condition)  \\\n      PLOG_IF(FATAL, GOOGLE_PREDICT_BRANCH_NOT_TAKEN(!(condition))) \\\n              << \"Check failed: \" #condition \" \"\n\n// A CHECK() macro that lets you assert the success of a function that\n// returns -1 and sets errno in case of an error. E.g.\n//\n// CHECK_ERR(mkdir(path, 0700));\n//\n// or\n//\n// int fd = open(filename, flags); CHECK_ERR(fd) << \": open \" << filename;\n#define CHECK_ERR(invocation)                                          \\\nPLOG_IF(FATAL, GOOGLE_PREDICT_BRANCH_NOT_TAKEN((invocation) == -1))    \\\n        << #invocation\n\n// Use macro expansion to create, for each use of LOG_EVERY_N(), static\n// variables with the __LINE__ expansion as part of the variable name.\n#define LOG_EVERY_N_VARNAME(base, line) LOG_EVERY_N_VARNAME_CONCAT(base, line)\n#define LOG_EVERY_N_VARNAME_CONCAT(base, line) base ## line\n\n#define LOG_OCCURRENCES LOG_EVERY_N_VARNAME(occurrences_, __LINE__)\n#define LOG_OCCURRENCES_MOD_N LOG_EVERY_N_VARNAME(occurrences_mod_n_, __LINE__)\n\n#define SOME_KIND_OF_LOG_EVERY_N(severity, n, what_to_do) \\\n  static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \\\n  ++LOG_OCCURRENCES; \\\n  if (++LOG_OCCURRENCES_MOD_N > n) LOG_OCCURRENCES_MOD_N -= n; \\\n  if (LOG_OCCURRENCES_MOD_N == 1) \\\n    @ac_google_namespace@::LogMessage( \\\n        __FILE__, __LINE__, @ac_google_namespace@::GLOG_ ## severity, LOG_OCCURRENCES, \\\n        &what_to_do).stream()\n\n#define SOME_KIND_OF_LOG_IF_EVERY_N(severity, condition, n, what_to_do) \\\n  static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \\\n  ++LOG_OCCURRENCES; \\\n  if (condition && \\\n      ((LOG_OCCURRENCES_MOD_N=(LOG_OCCURRENCES_MOD_N + 1) % n) == (1 % n))) \\\n    @ac_google_namespace@::LogMessage( \\\n        __FILE__, __LINE__, @ac_google_namespace@::GLOG_ ## severity, LOG_OCCURRENCES, \\\n                 &what_to_do).stream()\n\n#define SOME_KIND_OF_PLOG_EVERY_N(severity, n, what_to_do) \\\n  static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \\\n  ++LOG_OCCURRENCES; \\\n  if (++LOG_OCCURRENCES_MOD_N > n) LOG_OCCURRENCES_MOD_N -= n; \\\n  if (LOG_OCCURRENCES_MOD_N == 1) \\\n    @ac_google_namespace@::ErrnoLogMessage( \\\n        __FILE__, __LINE__, @ac_google_namespace@::GLOG_ ## severity, LOG_OCCURRENCES, \\\n        &what_to_do).stream()\n\n#define SOME_KIND_OF_LOG_FIRST_N(severity, n, what_to_do) \\\n  static int LOG_OCCURRENCES = 0; \\\n  if (LOG_OCCURRENCES <= n) \\\n    ++LOG_OCCURRENCES; \\\n  if (LOG_OCCURRENCES <= n) \\\n    @ac_google_namespace@::LogMessage( \\\n        __FILE__, __LINE__, @ac_google_namespace@::GLOG_ ## severity, LOG_OCCURRENCES, \\\n        &what_to_do).stream()\n\nnamespace glog_internal_namespace_ {\ntemplate <bool>\nstruct CompileAssert {\n};\nstruct CrashReason;\n\n// Returns true if FailureSignalHandler is installed.\nbool IsFailureSignalHandlerInstalled();\n}  // namespace glog_internal_namespace_\n\n#define GOOGLE_GLOG_COMPILE_ASSERT(expr, msg) \\\n  typedef @ac_google_namespace@::glog_internal_namespace_::CompileAssert<(bool(expr))> msg[bool(expr) ? 1 : -1]\n\n#define LOG_EVERY_N(severity, n)                                        \\\n  GOOGLE_GLOG_COMPILE_ASSERT(@ac_google_namespace@::GLOG_ ## severity < \\\n                             @ac_google_namespace@::NUM_SEVERITIES,     \\\n                             INVALID_REQUESTED_LOG_SEVERITY);           \\\n  SOME_KIND_OF_LOG_EVERY_N(severity, (n), @ac_google_namespace@::LogMessage::SendToLog)\n\n#define SYSLOG_EVERY_N(severity, n) \\\n  SOME_KIND_OF_LOG_EVERY_N(severity, (n), @ac_google_namespace@::LogMessage::SendToSyslogAndLog)\n\n#define PLOG_EVERY_N(severity, n) \\\n  SOME_KIND_OF_PLOG_EVERY_N(severity, (n), @ac_google_namespace@::LogMessage::SendToLog)\n\n#define LOG_FIRST_N(severity, n) \\\n  SOME_KIND_OF_LOG_FIRST_N(severity, (n), @ac_google_namespace@::LogMessage::SendToLog)\n\n#define LOG_IF_EVERY_N(severity, condition, n) \\\n  SOME_KIND_OF_LOG_IF_EVERY_N(severity, (condition), (n), @ac_google_namespace@::LogMessage::SendToLog)\n\n// We want the special COUNTER value available for LOG_EVERY_X()'ed messages\nenum PRIVATE_Counter {COUNTER};\n\n#ifdef GLOG_NO_ABBREVIATED_SEVERITIES\n// wingdi.h defines ERROR to be 0. When we call LOG(ERROR), it gets\n// substituted with 0, and it expands to COMPACT_GOOGLE_LOG_0. To allow us\n// to keep using this syntax, we define this macro to do the same thing\n// as COMPACT_GOOGLE_LOG_ERROR.\n#define COMPACT_GOOGLE_LOG_0 COMPACT_GOOGLE_LOG_ERROR\n#define SYSLOG_0 SYSLOG_ERROR\n#define LOG_TO_STRING_0 LOG_TO_STRING_ERROR\n// Needed for LOG_IS_ON(ERROR).\nconst LogSeverity GLOG_0 = GLOG_ERROR;\n#else\n// Users may include windows.h after logging.h without\n// GLOG_NO_ABBREVIATED_SEVERITIES nor WIN32_LEAN_AND_MEAN.\n// For this case, we cannot detect if ERROR is defined before users\n// actually use ERROR. Let's make an undefined symbol to warn users.\n# define GLOG_ERROR_MSG ERROR_macro_is_defined_Define_GLOG_NO_ABBREVIATED_SEVERITIES_before_including_logging_h_See_the_document_for_detail\n# define COMPACT_GOOGLE_LOG_0 GLOG_ERROR_MSG\n# define SYSLOG_0 GLOG_ERROR_MSG\n# define LOG_TO_STRING_0 GLOG_ERROR_MSG\n# define GLOG_0 GLOG_ERROR_MSG\n#endif\n\n// Plus some debug-logging macros that get compiled to nothing for production\n\n#if DCHECK_IS_ON()\n\n#define DLOG(severity) LOG(severity)\n#define DVLOG(verboselevel) VLOG(verboselevel)\n#define DLOG_IF(severity, condition) LOG_IF(severity, condition)\n#define DLOG_EVERY_N(severity, n) LOG_EVERY_N(severity, n)\n#define DLOG_IF_EVERY_N(severity, condition, n) \\\n  LOG_IF_EVERY_N(severity, condition, n)\n#define DLOG_ASSERT(condition) LOG_ASSERT(condition)\n\n// debug-only checking.  executed if DCHECK_IS_ON().\n#define DCHECK(condition) CHECK(condition)\n#define DCHECK_EQ(val1, val2) CHECK_EQ(val1, val2)\n#define DCHECK_NE(val1, val2) CHECK_NE(val1, val2)\n#define DCHECK_LE(val1, val2) CHECK_LE(val1, val2)\n#define DCHECK_LT(val1, val2) CHECK_LT(val1, val2)\n#define DCHECK_GE(val1, val2) CHECK_GE(val1, val2)\n#define DCHECK_GT(val1, val2) CHECK_GT(val1, val2)\n#define DCHECK_NOTNULL(val) CHECK_NOTNULL(val)\n#define DCHECK_STREQ(str1, str2) CHECK_STREQ(str1, str2)\n#define DCHECK_STRCASEEQ(str1, str2) CHECK_STRCASEEQ(str1, str2)\n#define DCHECK_STRNE(str1, str2) CHECK_STRNE(str1, str2)\n#define DCHECK_STRCASENE(str1, str2) CHECK_STRCASENE(str1, str2)\n\n#else  // !DCHECK_IS_ON()\n\n#define DLOG(severity) \\\n  true ? (void) 0 : @ac_google_namespace@::LogMessageVoidify() & LOG(severity)\n\n#define DVLOG(verboselevel) \\\n  (true || !VLOG_IS_ON(verboselevel)) ?\\\n    (void) 0 : @ac_google_namespace@::LogMessageVoidify() & LOG(INFO)\n\n#define DLOG_IF(severity, condition) \\\n  (true || !(condition)) ? (void) 0 : @ac_google_namespace@::LogMessageVoidify() & LOG(severity)\n\n#define DLOG_EVERY_N(severity, n) \\\n  true ? (void) 0 : @ac_google_namespace@::LogMessageVoidify() & LOG(severity)\n\n#define DLOG_IF_EVERY_N(severity, condition, n) \\\n  (true || !(condition))? (void) 0 : @ac_google_namespace@::LogMessageVoidify() & LOG(severity)\n\n#define DLOG_ASSERT(condition) \\\n  true ? (void) 0 : LOG_ASSERT(condition)\n\n// MSVC warning C4127: conditional expression is constant\n#define DCHECK(condition) \\\n  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \\\n  while (false) \\\n    GLOG_MSVC_POP_WARNING() CHECK(condition)\n\n#define DCHECK_EQ(val1, val2) \\\n  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \\\n  while (false) \\\n    GLOG_MSVC_POP_WARNING() CHECK_EQ(val1, val2)\n\n#define DCHECK_NE(val1, val2) \\\n  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \\\n  while (false) \\\n    GLOG_MSVC_POP_WARNING() CHECK_NE(val1, val2)\n\n#define DCHECK_LE(val1, val2) \\\n  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \\\n  while (false) \\\n    GLOG_MSVC_POP_WARNING() CHECK_LE(val1, val2)\n\n#define DCHECK_LT(val1, val2) \\\n  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \\\n  while (false) \\\n    GLOG_MSVC_POP_WARNING() CHECK_LT(val1, val2)\n\n#define DCHECK_GE(val1, val2) \\\n  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \\\n  while (false) \\\n    GLOG_MSVC_POP_WARNING() CHECK_GE(val1, val2)\n\n#define DCHECK_GT(val1, val2) \\\n  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \\\n  while (false) \\\n    GLOG_MSVC_POP_WARNING() CHECK_GT(val1, val2)\n\n// You may see warnings in release mode if you don't use the return\n// value of DCHECK_NOTNULL. Please just use DCHECK for such cases.\n#define DCHECK_NOTNULL(val) (val)\n\n#define DCHECK_STREQ(str1, str2) \\\n  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \\\n  while (false) \\\n    GLOG_MSVC_POP_WARNING() CHECK_STREQ(str1, str2)\n\n#define DCHECK_STRCASEEQ(str1, str2) \\\n  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \\\n  while (false) \\\n    GLOG_MSVC_POP_WARNING() CHECK_STRCASEEQ(str1, str2)\n\n#define DCHECK_STRNE(str1, str2) \\\n  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \\\n  while (false) \\\n    GLOG_MSVC_POP_WARNING() CHECK_STRNE(str1, str2)\n\n#define DCHECK_STRCASENE(str1, str2) \\\n  GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \\\n  while (false) \\\n    GLOG_MSVC_POP_WARNING() CHECK_STRCASENE(str1, str2)\n\n#endif  // DCHECK_IS_ON()\n\n// Log only in verbose mode.\n\n#define VLOG(verboselevel) LOG_IF(INFO, VLOG_IS_ON(verboselevel))\n\n#define VLOG_IF(verboselevel, condition) \\\n  LOG_IF(INFO, (condition) && VLOG_IS_ON(verboselevel))\n\n#define VLOG_EVERY_N(verboselevel, n) \\\n  LOG_IF_EVERY_N(INFO, VLOG_IS_ON(verboselevel), n)\n\n#define VLOG_IF_EVERY_N(verboselevel, condition, n) \\\n  LOG_IF_EVERY_N(INFO, (condition) && VLOG_IS_ON(verboselevel), n)\n\nnamespace base_logging {\n\n// LogMessage::LogStream is a std::ostream backed by this streambuf.\n// This class ignores overflow and leaves two bytes at the end of the\n// buffer to allow for a '\\n' and '\\0'.\nclass GOOGLE_GLOG_DLL_DECL LogStreamBuf : public std::streambuf {\n public:\n  // REQUIREMENTS: \"len\" must be >= 2 to account for the '\\n' and '\\n'.\n  LogStreamBuf(char *buf, int len) {\n    setp(buf, buf + len - 2);\n  }\n  // This effectively ignores overflow.\n  virtual int_type overflow(int_type ch) {\n    return ch;\n  }\n\n  // Legacy public ostrstream method.\n  size_t pcount() const { return pptr() - pbase(); }\n  char* pbase() const { return std::streambuf::pbase(); }\n};\n\n}  // namespace base_logging\n\n//\n// This class more or less represents a particular log message.  You\n// create an instance of LogMessage and then stream stuff to it.\n// When you finish streaming to it, ~LogMessage is called and the\n// full message gets streamed to the appropriate destination.\n//\n// You shouldn't actually use LogMessage's constructor to log things,\n// though.  You should use the LOG() macro (and variants thereof)\n// above.\nclass GOOGLE_GLOG_DLL_DECL LogMessage {\npublic:\n  enum {\n    // Passing kNoLogPrefix for the line number disables the\n    // log-message prefix. Useful for using the LogMessage\n    // infrastructure as a printing utility. See also the --log_prefix\n    // flag for controlling the log-message prefix on an\n    // application-wide basis.\n    kNoLogPrefix = -1\n  };\n\n  // LogStream inherit from non-DLL-exported class (std::ostrstream)\n  // and VC++ produces a warning for this situation.\n  // However, MSDN says \"C4275 can be ignored in Microsoft Visual C++\n  // 2005 if you are deriving from a type in the Standard C++ Library\"\n  // http://msdn.microsoft.com/en-us/library/3tdb471s(VS.80).aspx\n  // Let's just ignore the warning.\n#ifdef _MSC_VER\n# pragma warning(disable: 4275)\n#endif\n  class GOOGLE_GLOG_DLL_DECL LogStream : public std::ostream {\n#ifdef _MSC_VER\n# pragma warning(default: 4275)\n#endif\n  public:\n    LogStream(char *buf, int len, int ctr)\n        : std::ostream(NULL),\n          streambuf_(buf, len),\n          ctr_(ctr),\n          self_(this) {\n      rdbuf(&streambuf_);\n    }\n\n    int ctr() const { return ctr_; }\n    void set_ctr(int ctr) { ctr_ = ctr; }\n    LogStream* self() const { return self_; }\n\n    // Legacy std::streambuf methods.\n    size_t pcount() const { return streambuf_.pcount(); }\n    char* pbase() const { return streambuf_.pbase(); }\n    char* str() const { return pbase(); }\n\n  private:\n    LogStream(const LogStream&);\n    LogStream& operator=(const LogStream&);\n    base_logging::LogStreamBuf streambuf_;\n    int ctr_;  // Counter hack (for the LOG_EVERY_X() macro)\n    LogStream *self_;  // Consistency check hack\n  };\n\npublic:\n  // icc 8 requires this typedef to avoid an internal compiler error.\n  typedef void (LogMessage::*SendMethod)();\n\n  LogMessage(const char* file, int line, LogSeverity severity, int ctr,\n             SendMethod send_method);\n\n  // Two special constructors that generate reduced amounts of code at\n  // LOG call sites for common cases.\n\n  // Used for LOG(INFO): Implied are:\n  // severity = INFO, ctr = 0, send_method = &LogMessage::SendToLog.\n  //\n  // Using this constructor instead of the more complex constructor above\n  // saves 19 bytes per call site.\n  LogMessage(const char* file, int line);\n\n  // Used for LOG(severity) where severity != INFO.  Implied\n  // are: ctr = 0, send_method = &LogMessage::SendToLog\n  //\n  // Using this constructor instead of the more complex constructor above\n  // saves 17 bytes per call site.\n  LogMessage(const char* file, int line, LogSeverity severity);\n\n  // Constructor to log this message to a specified sink (if not NULL).\n  // Implied are: ctr = 0, send_method = &LogMessage::SendToSinkAndLog if\n  // also_send_to_log is true, send_method = &LogMessage::SendToSink otherwise.\n  LogMessage(const char* file, int line, LogSeverity severity, LogSink* sink,\n             bool also_send_to_log);\n\n  // Constructor where we also give a vector<string> pointer\n  // for storing the messages (if the pointer is not NULL).\n  // Implied are: ctr = 0, send_method = &LogMessage::SaveOrSendToLog.\n  LogMessage(const char* file, int line, LogSeverity severity,\n             std::vector<std::string>* outvec);\n\n  // Constructor where we also give a string pointer for storing the\n  // message (if the pointer is not NULL).  Implied are: ctr = 0,\n  // send_method = &LogMessage::WriteToStringAndLog.\n  LogMessage(const char* file, int line, LogSeverity severity,\n             std::string* message);\n\n  // A special constructor used for check failures\n  LogMessage(const char* file, int line, const CheckOpString& result);\n\n  ~LogMessage();\n\n  // Flush a buffered message to the sink set in the constructor.  Always\n  // called by the destructor, it may also be called from elsewhere if\n  // needed.  Only the first call is actioned; any later ones are ignored.\n  void Flush();\n\n  // An arbitrary limit on the length of a single log message.  This\n  // is so that streaming can be done more efficiently.\n  static const size_t kMaxLogMessageLen;\n\n  // Theses should not be called directly outside of logging.*,\n  // only passed as SendMethod arguments to other LogMessage methods:\n  void SendToLog();  // Actually dispatch to the logs\n  void SendToSyslogAndLog();  // Actually dispatch to syslog and the logs\n\n  // Call abort() or similar to perform LOG(FATAL) crash.\n  static void @ac_cv___attribute___noreturn@ Fail();\n\n  std::ostream& stream();\n\n  int preserved_errno() const;\n\n  // Must be called without the log_mutex held.  (L < log_mutex)\n  static int64 num_messages(int severity);\n\n  struct LogMessageData;\n\nprivate:\n  // Fully internal SendMethod cases:\n  void SendToSinkAndLog();  // Send to sink if provided and dispatch to the logs\n  void SendToSink();  // Send to sink if provided, do nothing otherwise.\n\n  // Write to string if provided and dispatch to the logs.\n  void WriteToStringAndLog();\n\n  void SaveOrSendToLog();  // Save to stringvec if provided, else to logs\n\n  void Init(const char* file, int line, LogSeverity severity,\n            void (LogMessage::*send_method)());\n\n  // Used to fill in crash information during LOG(FATAL) failures.\n  void RecordCrashReason(glog_internal_namespace_::CrashReason* reason);\n\n  // Counts of messages sent at each priority:\n  static int64 num_messages_[NUM_SEVERITIES];  // under log_mutex\n\n  // We keep the data in a separate struct so that each instance of\n  // LogMessage uses less stack space.\n  LogMessageData* allocated_;\n  LogMessageData* data_;\n\n  friend class LogDestination;\n\n  LogMessage(const LogMessage&);\n  void operator=(const LogMessage&);\n};\n\n// This class happens to be thread-hostile because all instances share\n// a single data buffer, but since it can only be created just before\n// the process dies, we don't worry so much.\nclass GOOGLE_GLOG_DLL_DECL LogMessageFatal : public LogMessage {\n public:\n  LogMessageFatal(const char* file, int line);\n  LogMessageFatal(const char* file, int line, const CheckOpString& result);\n  @ac_cv___attribute___noreturn@ ~LogMessageFatal();\n};\n\n// A non-macro interface to the log facility; (useful\n// when the logging level is not a compile-time constant).\ninline void LogAtLevel(int const severity, std::string const &msg) {\n  LogMessage(__FILE__, __LINE__, severity).stream() << msg;\n}\n\n// A macro alternative of LogAtLevel. New code may want to use this\n// version since there are two advantages: 1. this version outputs the\n// file name and the line number where this macro is put like other\n// LOG macros, 2. this macro can be used as C++ stream.\n#define LOG_AT_LEVEL(severity) @ac_google_namespace@::LogMessage(__FILE__, __LINE__, severity).stream()\n\n// Check if it's compiled in C++11 mode.\n//\n// GXX_EXPERIMENTAL_CXX0X is defined by gcc and clang up to at least\n// gcc-4.7 and clang-3.1 (2011-12-13).  __cplusplus was defined to 1\n// in gcc before 4.7 (Crosstool 16) and clang before 3.1, but is\n// defined according to the language version in effect thereafter.\n// Microsoft Visual Studio 14 (2015) sets __cplusplus==199711 despite\n// reasonably good C++11 support, so we set LANG_CXX for it and\n// newer versions (_MSC_VER >= 1900).\n#if (defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L || \\\n     (defined(_MSC_VER) && _MSC_VER >= 1900))\n// Helper for CHECK_NOTNULL().\n//\n// In C++11, all cases can be handled by a single function. Since the value\n// category of the argument is preserved (also for rvalue references),\n// member initializer lists like the one below will compile correctly:\n//\n//   Foo()\n//     : x_(CHECK_NOTNULL(MethodReturningUniquePtr())) {}\ntemplate <typename T>\nT CheckNotNull(const char* file, int line, const char* names, T&& t) {\n if (t == nullptr) {\n   LogMessageFatal(file, line, new std::string(names));\n }\n return std::forward<T>(t);\n}\n\n#else\n\n// A small helper for CHECK_NOTNULL().\ntemplate <typename T>\nT* CheckNotNull(const char *file, int line, const char *names, T* t) {\n  if (t == NULL) {\n    LogMessageFatal(file, line, new std::string(names));\n  }\n  return t;\n}\n#endif\n\n// Allow folks to put a counter in the LOG_EVERY_X()'ed messages. This\n// only works if ostream is a LogStream. If the ostream is not a\n// LogStream you'll get an assert saying as much at runtime.\nGOOGLE_GLOG_DLL_DECL std::ostream& operator<<(std::ostream &os,\n                                              const PRIVATE_Counter&);\n\n\n// Derived class for PLOG*() above.\nclass GOOGLE_GLOG_DLL_DECL ErrnoLogMessage : public LogMessage {\n public:\n\n  ErrnoLogMessage(const char* file, int line, LogSeverity severity, int ctr,\n                  void (LogMessage::*send_method)());\n\n  // Postpends \": strerror(errno) [errno]\".\n  ~ErrnoLogMessage();\n\n private:\n  ErrnoLogMessage(const ErrnoLogMessage&);\n  void operator=(const ErrnoLogMessage&);\n};\n\n\n// This class is used to explicitly ignore values in the conditional\n// logging macros.  This avoids compiler warnings like \"value computed\n// is not used\" and \"statement has no effect\".\n\nclass GOOGLE_GLOG_DLL_DECL LogMessageVoidify {\n public:\n  LogMessageVoidify() { }\n  // This has to be an operator with a precedence lower than << but\n  // higher than ?:\n  void operator&(std::ostream&) { }\n};\n\n\n// Flushes all log files that contains messages that are at least of\n// the specified severity level.  Thread-safe.\nGOOGLE_GLOG_DLL_DECL void FlushLogFiles(LogSeverity min_severity);\n\n// Flushes all log files that contains messages that are at least of\n// the specified severity level. Thread-hostile because it ignores\n// locking -- used for catastrophic failures.\nGOOGLE_GLOG_DLL_DECL void FlushLogFilesUnsafe(LogSeverity min_severity);\n\n//\n// Set the destination to which a particular severity level of log\n// messages is sent.  If base_filename is \"\", it means \"don't log this\n// severity\".  Thread-safe.\n//\nGOOGLE_GLOG_DLL_DECL void SetLogDestination(LogSeverity severity,\n                                            const char* base_filename);\n\n//\n// Set the basename of the symlink to the latest log file at a given\n// severity.  If symlink_basename is empty, do not make a symlink.  If\n// you don't call this function, the symlink basename is the\n// invocation name of the program.  Thread-safe.\n//\nGOOGLE_GLOG_DLL_DECL void SetLogSymlink(LogSeverity severity,\n                                        const char* symlink_basename);\n\n//\n// Used to send logs to some other kind of destination\n// Users should subclass LogSink and override send to do whatever they want.\n// Implementations must be thread-safe because a shared instance will\n// be called from whichever thread ran the LOG(XXX) line.\nclass GOOGLE_GLOG_DLL_DECL LogSink {\n public:\n  virtual ~LogSink();\n\n  // Sink's logging logic (message_len is such as to exclude '\\n' at the end).\n  // This method can't use LOG() or CHECK() as logging system mutex(s) are held\n  // during this call.\n  virtual void send(LogSeverity severity, const char* full_filename,\n                    const char* base_filename, int line,\n                    const struct ::tm* tm_time,\n                    const char* message, size_t message_len) = 0;\n\n  // Redefine this to implement waiting for\n  // the sink's logging logic to complete.\n  // It will be called after each send() returns,\n  // but before that LogMessage exits or crashes.\n  // By default this function does nothing.\n  // Using this function one can implement complex logic for send()\n  // that itself involves logging; and do all this w/o causing deadlocks and\n  // inconsistent rearrangement of log messages.\n  // E.g. if a LogSink has thread-specific actions, the send() method\n  // can simply add the message to a queue and wake up another thread that\n  // handles real logging while itself making some LOG() calls;\n  // WaitTillSent() can be implemented to wait for that logic to complete.\n  // See our unittest for an example.\n  virtual void WaitTillSent();\n\n  // Returns the normal text output of the log message.\n  // Can be useful to implement send().\n  static std::string ToString(LogSeverity severity, const char* file, int line,\n                              const struct ::tm* tm_time,\n                              const char* message, size_t message_len);\n};\n\n// Add or remove a LogSink as a consumer of logging data.  Thread-safe.\nGOOGLE_GLOG_DLL_DECL void AddLogSink(LogSink *destination);\nGOOGLE_GLOG_DLL_DECL void RemoveLogSink(LogSink *destination);\n\n//\n// Specify an \"extension\" added to the filename specified via\n// SetLogDestination.  This applies to all severity levels.  It's\n// often used to append the port we're listening on to the logfile\n// name.  Thread-safe.\n//\nGOOGLE_GLOG_DLL_DECL void SetLogFilenameExtension(\n    const char* filename_extension);\n\n//\n// Make it so that all log messages of at least a particular severity\n// are logged to stderr (in addition to logging to the usual log\n// file(s)).  Thread-safe.\n//\nGOOGLE_GLOG_DLL_DECL void SetStderrLogging(LogSeverity min_severity);\n\n//\n// Make it so that all log messages go only to stderr.  Thread-safe.\n//\nGOOGLE_GLOG_DLL_DECL void LogToStderr();\n\n//\n// Make it so that all log messages of at least a particular severity are\n// logged via email to a list of addresses (in addition to logging to the\n// usual log file(s)).  The list of addresses is just a string containing\n// the email addresses to send to (separated by spaces, say).  Thread-safe.\n//\nGOOGLE_GLOG_DLL_DECL void SetEmailLogging(LogSeverity min_severity,\n                                          const char* addresses);\n\n// A simple function that sends email. dest is a commma-separated\n// list of addressess.  Thread-safe.\nGOOGLE_GLOG_DLL_DECL bool SendEmail(const char *dest,\n                                    const char *subject, const char *body);\n\nGOOGLE_GLOG_DLL_DECL const std::vector<std::string>& GetLoggingDirectories();\n\n// For tests only:  Clear the internal [cached] list of logging directories to\n// force a refresh the next time GetLoggingDirectories is called.\n// Thread-hostile.\nvoid TestOnly_ClearLoggingDirectoriesList();\n\n// Returns a set of existing temporary directories, which will be a\n// subset of the directories returned by GetLogginDirectories().\n// Thread-safe.\nGOOGLE_GLOG_DLL_DECL void GetExistingTempDirectories(\n    std::vector<std::string>* list);\n\n// Print any fatal message again -- useful to call from signal handler\n// so that the last thing in the output is the fatal message.\n// Thread-hostile, but a race is unlikely.\nGOOGLE_GLOG_DLL_DECL void ReprintFatalMessage();\n\n// Truncate a log file that may be the append-only output of multiple\n// processes and hence can't simply be renamed/reopened (typically a\n// stdout/stderr).  If the file \"path\" is > \"limit\" bytes, copy the\n// last \"keep\" bytes to offset 0 and truncate the rest. Since we could\n// be racing with other writers, this approach has the potential to\n// lose very small amounts of data. For security, only follow symlinks\n// if the path is /proc/self/fd/*\nGOOGLE_GLOG_DLL_DECL void TruncateLogFile(const char *path,\n                                          int64 limit, int64 keep);\n\n// Truncate stdout and stderr if they are over the value specified by\n// --max_log_size; keep the final 1MB.  This function has the same\n// race condition as TruncateLogFile.\nGOOGLE_GLOG_DLL_DECL void TruncateStdoutStderr();\n\n// Return the string representation of the provided LogSeverity level.\n// Thread-safe.\nGOOGLE_GLOG_DLL_DECL const char* GetLogSeverityName(LogSeverity severity);\n\n// ---------------------------------------------------------------------\n// Implementation details that are not useful to most clients\n// ---------------------------------------------------------------------\n\n// A Logger is the interface used by logging modules to emit entries\n// to a log.  A typical implementation will dump formatted data to a\n// sequence of files.  We also provide interfaces that will forward\n// the data to another thread so that the invoker never blocks.\n// Implementations should be thread-safe since the logging system\n// will write to them from multiple threads.\n\nnamespace base {\n\nclass GOOGLE_GLOG_DLL_DECL Logger {\n public:\n  virtual ~Logger();\n\n  // Writes \"message[0,message_len-1]\" corresponding to an event that\n  // occurred at \"timestamp\".  If \"force_flush\" is true, the log file\n  // is flushed immediately.\n  //\n  // The input message has already been formatted as deemed\n  // appropriate by the higher level logging facility.  For example,\n  // textual log messages already contain timestamps, and the\n  // file:linenumber header.\n  virtual void Write(bool force_flush,\n                     time_t timestamp,\n                     const char* message,\n                     int message_len) = 0;\n\n  // Flush any buffered messages\n  virtual void Flush() = 0;\n\n  // Get the current LOG file size.\n  // The returned value is approximate since some\n  // logged data may not have been flushed to disk yet.\n  virtual uint32 LogSize() = 0;\n};\n\n// Get the logger for the specified severity level.  The logger\n// remains the property of the logging module and should not be\n// deleted by the caller.  Thread-safe.\nextern GOOGLE_GLOG_DLL_DECL Logger* GetLogger(LogSeverity level);\n\n// Set the logger for the specified severity level.  The logger\n// becomes the property of the logging module and should not\n// be deleted by the caller.  Thread-safe.\nextern GOOGLE_GLOG_DLL_DECL void SetLogger(LogSeverity level, Logger* logger);\n\n}\n\n// glibc has traditionally implemented two incompatible versions of\n// strerror_r(). There is a poorly defined convention for picking the\n// version that we want, but it is not clear whether it even works with\n// all versions of glibc.\n// So, instead, we provide this wrapper that automatically detects the\n// version that is in use, and then implements POSIX semantics.\n// N.B. In addition to what POSIX says, we also guarantee that \"buf\" will\n// be set to an empty string, if this function failed. This means, in most\n// cases, you do not need to check the error code and you can directly\n// use the value of \"buf\". It will never have an undefined value.\n// DEPRECATED: Use StrError(int) instead.\nGOOGLE_GLOG_DLL_DECL int posix_strerror_r(int err, char *buf, size_t len);\n\n// A thread-safe replacement for strerror(). Returns a string describing the\n// given POSIX error code.\nGOOGLE_GLOG_DLL_DECL std::string StrError(int err);\n\n// A class for which we define operator<<, which does nothing.\nclass GOOGLE_GLOG_DLL_DECL NullStream : public LogMessage::LogStream {\n public:\n  // Initialize the LogStream so the messages can be written somewhere\n  // (they'll never be actually displayed). This will be needed if a\n  // NullStream& is implicitly converted to LogStream&, in which case\n  // the overloaded NullStream::operator<< will not be invoked.\n  NullStream() : LogMessage::LogStream(message_buffer_, 1, 0) { }\n  NullStream(const char* /*file*/, int /*line*/,\n             const CheckOpString& /*result*/) :\n      LogMessage::LogStream(message_buffer_, 1, 0) { }\n  NullStream &stream() { return *this; }\n private:\n  // A very short buffer for messages (which we discard anyway). This\n  // will be needed if NullStream& converted to LogStream& (e.g. as a\n  // result of a conditional expression).\n  char message_buffer_[2];\n};\n\n// Do nothing. This operator is inline, allowing the message to be\n// compiled away. The message will not be compiled away if we do\n// something like (flag ? LOG(INFO) : LOG(ERROR)) << message; when\n// SKIP_LOG=WARNING. In those cases, NullStream will be implicitly\n// converted to LogStream and the message will be computed and then\n// quietly discarded.\ntemplate<class T>\ninline NullStream& operator<<(NullStream &str, const T &) { return str; }\n\n// Similar to NullStream, but aborts the program (without stack\n// trace), like LogMessageFatal.\nclass GOOGLE_GLOG_DLL_DECL NullStreamFatal : public NullStream {\n public:\n  NullStreamFatal() { }\n  NullStreamFatal(const char* file, int line, const CheckOpString& result) :\n      NullStream(file, line, result) { }\n  @ac_cv___attribute___noreturn@ ~NullStreamFatal() throw () { _exit(1); }\n};\n\n// Install a signal handler that will dump signal information and a stack\n// trace when the program crashes on certain signals.  We'll install the\n// signal handler for the following signals.\n//\n// SIGSEGV, SIGILL, SIGFPE, SIGABRT, SIGBUS, and SIGTERM.\n//\n// By default, the signal handler will write the failure dump to the\n// standard error.  You can customize the destination by installing your\n// own writer function by InstallFailureWriter() below.\n//\n// Note on threading:\n//\n// The function should be called before threads are created, if you want\n// to use the failure signal handler for all threads.  The stack trace\n// will be shown only for the thread that receives the signal.  In other\n// words, stack traces of other threads won't be shown.\nGOOGLE_GLOG_DLL_DECL void InstallFailureSignalHandler();\n\n// Installs a function that is used for writing the failure dump.  \"data\"\n// is the pointer to the beginning of a message to be written, and \"size\"\n// is the size of the message.  You should not expect the data is\n// terminated with '\\0'.\nGOOGLE_GLOG_DLL_DECL void InstallFailureWriter(\n    void (*writer)(const char* data, int size));\n\n@ac_google_end_namespace@\n\n#endif // _LOGGING_H_\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/glog/raw_logging.h",
    "content": "// Copyright (c) 2006, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: Maxim Lifantsev\n//\n// Thread-safe logging routines that do not allocate any memory or\n// acquire any locks, and can therefore be used by low-level memory\n// allocation and synchronization code.\n\n#ifndef BASE_RAW_LOGGING_H_\n#define BASE_RAW_LOGGING_H_\n\n#include <time.h>\n\nnamespace google {\n\n#include \"glog/log_severity.h\"\n#include \"glog/vlog_is_on.h\"\n\n// Annoying stuff for windows -- makes sure clients can import these functions\n#ifndef GOOGLE_GLOG_DLL_DECL\n# if defined(_WIN32) && !defined(__CYGWIN__)\n#   define GOOGLE_GLOG_DLL_DECL  __declspec(dllimport)\n# else\n#   define GOOGLE_GLOG_DLL_DECL\n# endif\n#endif\n\n// This is similar to LOG(severity) << format... and VLOG(level) << format..,\n// but\n// * it is to be used ONLY by low-level modules that can't use normal LOG()\n// * it is desiged to be a low-level logger that does not allocate any\n//   memory and does not need any locks, hence:\n// * it logs straight and ONLY to STDERR w/o buffering\n// * it uses an explicit format and arguments list\n// * it will silently chop off really long message strings\n// Usage example:\n//   RAW_LOG(ERROR, \"Failed foo with %i: %s\", status, error);\n//   RAW_VLOG(3, \"status is %i\", status);\n// These will print an almost standard log lines like this to stderr only:\n//   E0821 211317 file.cc:123] RAW: Failed foo with 22: bad_file\n//   I0821 211317 file.cc:142] RAW: status is 20\n#define RAW_LOG(severity, ...) \\\n  do { \\\n    switch (google::GLOG_ ## severity) {  \\\n      case 0: \\\n        RAW_LOG_INFO(__VA_ARGS__); \\\n        break; \\\n      case 1: \\\n        RAW_LOG_WARNING(__VA_ARGS__); \\\n        break; \\\n      case 2: \\\n        RAW_LOG_ERROR(__VA_ARGS__); \\\n        break; \\\n      case 3: \\\n        RAW_LOG_FATAL(__VA_ARGS__); \\\n        break; \\\n      default: \\\n        break; \\\n    } \\\n  } while (0)\n\n// The following STRIP_LOG testing is performed in the header file so that it's\n// possible to completely compile out the logging code and the log messages.\n#if STRIP_LOG == 0\n#define RAW_VLOG(verboselevel, ...) \\\n  do { \\\n    if (VLOG_IS_ON(verboselevel)) { \\\n      RAW_LOG_INFO(__VA_ARGS__); \\\n    } \\\n  } while (0)\n#else\n#define RAW_VLOG(verboselevel, ...) RawLogStub__(0, __VA_ARGS__)\n#endif // STRIP_LOG == 0\n\n#if STRIP_LOG == 0\n#define RAW_LOG_INFO(...) google::RawLog__(google::GLOG_INFO, \\\n                                   __FILE__, __LINE__, __VA_ARGS__)\n#else\n#define RAW_LOG_INFO(...) google::RawLogStub__(0, __VA_ARGS__)\n#endif // STRIP_LOG == 0\n\n#if STRIP_LOG <= 1\n#define RAW_LOG_WARNING(...) google::RawLog__(google::GLOG_WARNING,   \\\n                                      __FILE__, __LINE__, __VA_ARGS__)\n#else\n#define RAW_LOG_WARNING(...) google::RawLogStub__(0, __VA_ARGS__)\n#endif // STRIP_LOG <= 1\n\n#if STRIP_LOG <= 2\n#define RAW_LOG_ERROR(...) google::RawLog__(google::GLOG_ERROR,       \\\n                                    __FILE__, __LINE__, __VA_ARGS__)\n#else\n#define RAW_LOG_ERROR(...) google::RawLogStub__(0, __VA_ARGS__)\n#endif // STRIP_LOG <= 2\n\n#if STRIP_LOG <= 3\n#define RAW_LOG_FATAL(...) google::RawLog__(google::GLOG_FATAL,       \\\n                                    __FILE__, __LINE__, __VA_ARGS__)\n#else\n#define RAW_LOG_FATAL(...) \\\n  do { \\\n    google::RawLogStub__(0, __VA_ARGS__);        \\\n    exit(1); \\\n  } while (0)\n#endif // STRIP_LOG <= 3\n\n// Similar to CHECK(condition) << message,\n// but for low-level modules: we use only RAW_LOG that does not allocate memory.\n// We do not want to provide args list here to encourage this usage:\n//   if (!cond)  RAW_LOG(FATAL, \"foo ...\", hard_to_compute_args);\n// so that the args are not computed when not needed.\n#define RAW_CHECK(condition, message)                                   \\\n  do {                                                                  \\\n    if (!(condition)) {                                                 \\\n      RAW_LOG(FATAL, \"Check %s failed: %s\", #condition, message);       \\\n    }                                                                   \\\n  } while (0)\n\n// Debug versions of RAW_LOG and RAW_CHECK\n#ifndef NDEBUG\n\n#define RAW_DLOG(severity, ...) RAW_LOG(severity, __VA_ARGS__)\n#define RAW_DCHECK(condition, message) RAW_CHECK(condition, message)\n\n#else  // NDEBUG\n\n#define RAW_DLOG(severity, ...)                                 \\\n  while (false)                                                 \\\n    RAW_LOG(severity, __VA_ARGS__)\n#define RAW_DCHECK(condition, message) \\\n  while (false) \\\n    RAW_CHECK(condition, message)\n\n#endif  // NDEBUG\n\n// Stub log function used to work around for unused variable warnings when\n// building with STRIP_LOG > 0.\nstatic inline void RawLogStub__(int /* ignored */, ...) {\n}\n\n// Helper function to implement RAW_LOG and RAW_VLOG\n// Logs format... at \"severity\" level, reporting it\n// as called from file:line.\n// This does not allocate memory or acquire locks.\nGOOGLE_GLOG_DLL_DECL void RawLog__(LogSeverity severity,\n                                   const char* file,\n                                   int line,\n                                   const char* format, ...)\n   __attribute__((__format__ (__printf__, 4, 5)));\n\n// Hack to propagate time information into this module so that\n// this module does not have to directly call localtime_r(),\n// which could allocate memory.\nGOOGLE_GLOG_DLL_DECL void RawLog__SetLastTime(const struct tm& t, int usecs);\n\n}\n\n#endif  // BASE_RAW_LOGGING_H_\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/glog/raw_logging.h.in",
    "content": "// Copyright (c) 2006, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: Maxim Lifantsev\n//\n// Thread-safe logging routines that do not allocate any memory or\n// acquire any locks, and can therefore be used by low-level memory\n// allocation and synchronization code.\n\n#ifndef BASE_RAW_LOGGING_H_\n#define BASE_RAW_LOGGING_H_\n\n#include <time.h>\n\n@ac_google_start_namespace@\n\n#include \"glog/log_severity.h\"\n#include \"glog/vlog_is_on.h\"\n\n// Annoying stuff for windows -- makes sure clients can import these functions\n#ifndef GOOGLE_GLOG_DLL_DECL\n# if defined(_WIN32) && !defined(__CYGWIN__)\n#   define GOOGLE_GLOG_DLL_DECL  __declspec(dllimport)\n# else\n#   define GOOGLE_GLOG_DLL_DECL\n# endif\n#endif\n\n// This is similar to LOG(severity) << format... and VLOG(level) << format..,\n// but\n// * it is to be used ONLY by low-level modules that can't use normal LOG()\n// * it is desiged to be a low-level logger that does not allocate any\n//   memory and does not need any locks, hence:\n// * it logs straight and ONLY to STDERR w/o buffering\n// * it uses an explicit format and arguments list\n// * it will silently chop off really long message strings\n// Usage example:\n//   RAW_LOG(ERROR, \"Failed foo with %i: %s\", status, error);\n//   RAW_VLOG(3, \"status is %i\", status);\n// These will print an almost standard log lines like this to stderr only:\n//   E0821 211317 file.cc:123] RAW: Failed foo with 22: bad_file\n//   I0821 211317 file.cc:142] RAW: status is 20\n#define RAW_LOG(severity, ...) \\\n  do { \\\n    switch (@ac_google_namespace@::GLOG_ ## severity) {  \\\n      case 0: \\\n        RAW_LOG_INFO(__VA_ARGS__); \\\n        break; \\\n      case 1: \\\n        RAW_LOG_WARNING(__VA_ARGS__); \\\n        break; \\\n      case 2: \\\n        RAW_LOG_ERROR(__VA_ARGS__); \\\n        break; \\\n      case 3: \\\n        RAW_LOG_FATAL(__VA_ARGS__); \\\n        break; \\\n      default: \\\n        break; \\\n    } \\\n  } while (0)\n\n// The following STRIP_LOG testing is performed in the header file so that it's\n// possible to completely compile out the logging code and the log messages.\n#if STRIP_LOG == 0\n#define RAW_VLOG(verboselevel, ...) \\\n  do { \\\n    if (VLOG_IS_ON(verboselevel)) { \\\n      RAW_LOG_INFO(__VA_ARGS__); \\\n    } \\\n  } while (0)\n#else\n#define RAW_VLOG(verboselevel, ...) RawLogStub__(0, __VA_ARGS__)\n#endif // STRIP_LOG == 0\n\n#if STRIP_LOG == 0\n#define RAW_LOG_INFO(...) @ac_google_namespace@::RawLog__(@ac_google_namespace@::GLOG_INFO, \\\n                                   __FILE__, __LINE__, __VA_ARGS__)\n#else\n#define RAW_LOG_INFO(...) @ac_google_namespace@::RawLogStub__(0, __VA_ARGS__)\n#endif // STRIP_LOG == 0\n\n#if STRIP_LOG <= 1\n#define RAW_LOG_WARNING(...) @ac_google_namespace@::RawLog__(@ac_google_namespace@::GLOG_WARNING,   \\\n                                      __FILE__, __LINE__, __VA_ARGS__)\n#else\n#define RAW_LOG_WARNING(...) @ac_google_namespace@::RawLogStub__(0, __VA_ARGS__)\n#endif // STRIP_LOG <= 1\n\n#if STRIP_LOG <= 2\n#define RAW_LOG_ERROR(...) @ac_google_namespace@::RawLog__(@ac_google_namespace@::GLOG_ERROR,       \\\n                                    __FILE__, __LINE__, __VA_ARGS__)\n#else\n#define RAW_LOG_ERROR(...) @ac_google_namespace@::RawLogStub__(0, __VA_ARGS__)\n#endif // STRIP_LOG <= 2\n\n#if STRIP_LOG <= 3\n#define RAW_LOG_FATAL(...) @ac_google_namespace@::RawLog__(@ac_google_namespace@::GLOG_FATAL,       \\\n                                    __FILE__, __LINE__, __VA_ARGS__)\n#else\n#define RAW_LOG_FATAL(...) \\\n  do { \\\n    @ac_google_namespace@::RawLogStub__(0, __VA_ARGS__);        \\\n    exit(1); \\\n  } while (0)\n#endif // STRIP_LOG <= 3\n\n// Similar to CHECK(condition) << message,\n// but for low-level modules: we use only RAW_LOG that does not allocate memory.\n// We do not want to provide args list here to encourage this usage:\n//   if (!cond)  RAW_LOG(FATAL, \"foo ...\", hard_to_compute_args);\n// so that the args are not computed when not needed.\n#define RAW_CHECK(condition, message)                                   \\\n  do {                                                                  \\\n    if (!(condition)) {                                                 \\\n      RAW_LOG(FATAL, \"Check %s failed: %s\", #condition, message);       \\\n    }                                                                   \\\n  } while (0)\n\n// Debug versions of RAW_LOG and RAW_CHECK\n#ifndef NDEBUG\n\n#define RAW_DLOG(severity, ...) RAW_LOG(severity, __VA_ARGS__)\n#define RAW_DCHECK(condition, message) RAW_CHECK(condition, message)\n\n#else  // NDEBUG\n\n#define RAW_DLOG(severity, ...)                                 \\\n  while (false)                                                 \\\n    RAW_LOG(severity, __VA_ARGS__)\n#define RAW_DCHECK(condition, message) \\\n  while (false) \\\n    RAW_CHECK(condition, message)\n\n#endif  // NDEBUG\n\n// Stub log function used to work around for unused variable warnings when\n// building with STRIP_LOG > 0.\nstatic inline void RawLogStub__(int /* ignored */, ...) {\n}\n\n// Helper function to implement RAW_LOG and RAW_VLOG\n// Logs format... at \"severity\" level, reporting it\n// as called from file:line.\n// This does not allocate memory or acquire locks.\nGOOGLE_GLOG_DLL_DECL void RawLog__(LogSeverity severity,\n                                   const char* file,\n                                   int line,\n                                   const char* format, ...)\n   @ac_cv___attribute___printf_4_5@;\n\n// Hack to propagate time information into this module so that\n// this module does not have to directly call localtime_r(),\n// which could allocate memory.\nGOOGLE_GLOG_DLL_DECL void RawLog__SetLastTime(const struct tm& t, int usecs);\n\n@ac_google_end_namespace@\n\n#endif  // BASE_RAW_LOGGING_H_\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/glog/stl_logging.h",
    "content": "// Copyright (c) 2003, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Stream output operators for STL containers; to be used for logging *only*.\n// Inclusion of this file lets you do:\n//\n// list<string> x;\n// LOG(INFO) << \"data: \" << x;\n// vector<int> v1, v2;\n// CHECK_EQ(v1, v2);\n//\n// If you want to use this header file with hash maps or slist, you\n// need to define macros before including this file:\n//\n// - GLOG_STL_LOGGING_FOR_UNORDERED     - <unordered_map> and <unordered_set>\n// - GLOG_STL_LOGGING_FOR_TR1_UNORDERED - <tr1/unordered_(map|set)>\n// - GLOG_STL_LOGGING_FOR_EXT_HASH      - <ext/hash_(map|set)>\n// - GLOG_STL_LOGGING_FOR_EXT_SLIST     - <ext/slist>\n//\n\n#ifndef UTIL_GTL_STL_LOGGING_INL_H_\n#define UTIL_GTL_STL_LOGGING_INL_H_\n\n#if !1\n# error We do not support stl_logging for this compiler\n#endif\n\n#include <deque>\n#include <list>\n#include <map>\n#include <ostream>\n#include <set>\n#include <utility>\n#include <vector>\n\n#ifdef GLOG_STL_LOGGING_FOR_UNORDERED\n# include <unordered_map>\n# include <unordered_set>\n#endif\n\n#ifdef GLOG_STL_LOGGING_FOR_TR1_UNORDERED\n# include <tr1/unordered_map>\n# include <tr1/unordered_set>\n#endif\n\n#ifdef GLOG_STL_LOGGING_FOR_EXT_HASH\n# include <ext/hash_set>\n# include <ext/hash_map>\n#endif\n#ifdef GLOG_STL_LOGGING_FOR_EXT_SLIST\n# include <ext/slist>\n#endif\n\n// Forward declare these two, and define them after all the container streams\n// operators so that we can recurse from pair -> container -> container -> pair\n// properly.\ntemplate<class First, class Second>\nstd::ostream& operator<<(std::ostream& out, const std::pair<First, Second>& p);\n\nnamespace google {\n\ntemplate<class Iter>\nvoid PrintSequence(std::ostream& out, Iter begin, Iter end);\n\n}\n\n#define OUTPUT_TWO_ARG_CONTAINER(Sequence) \\\ntemplate<class T1, class T2> \\\ninline std::ostream& operator<<(std::ostream& out, \\\n                                const Sequence<T1, T2>& seq) { \\\n  google::PrintSequence(out, seq.begin(), seq.end()); \\\n  return out; \\\n}\n\nOUTPUT_TWO_ARG_CONTAINER(std::vector)\nOUTPUT_TWO_ARG_CONTAINER(std::deque)\nOUTPUT_TWO_ARG_CONTAINER(std::list)\n#ifdef GLOG_STL_LOGGING_FOR_EXT_SLIST\nOUTPUT_TWO_ARG_CONTAINER(__gnu_cxx::slist)\n#endif\n\n#undef OUTPUT_TWO_ARG_CONTAINER\n\n#define OUTPUT_THREE_ARG_CONTAINER(Sequence) \\\ntemplate<class T1, class T2, class T3> \\\ninline std::ostream& operator<<(std::ostream& out, \\\n                                const Sequence<T1, T2, T3>& seq) { \\\n  google::PrintSequence(out, seq.begin(), seq.end()); \\\n  return out; \\\n}\n\nOUTPUT_THREE_ARG_CONTAINER(std::set)\nOUTPUT_THREE_ARG_CONTAINER(std::multiset)\n\n#undef OUTPUT_THREE_ARG_CONTAINER\n\n#define OUTPUT_FOUR_ARG_CONTAINER(Sequence) \\\ntemplate<class T1, class T2, class T3, class T4> \\\ninline std::ostream& operator<<(std::ostream& out, \\\n                                const Sequence<T1, T2, T3, T4>& seq) { \\\n  google::PrintSequence(out, seq.begin(), seq.end()); \\\n  return out; \\\n}\n\nOUTPUT_FOUR_ARG_CONTAINER(std::map)\nOUTPUT_FOUR_ARG_CONTAINER(std::multimap)\n#ifdef GLOG_STL_LOGGING_FOR_UNORDERED\nOUTPUT_FOUR_ARG_CONTAINER(std::unordered_set)\nOUTPUT_FOUR_ARG_CONTAINER(std::unordered_multiset)\n#endif\n#ifdef GLOG_STL_LOGGING_FOR_TR1_UNORDERED\nOUTPUT_FOUR_ARG_CONTAINER(std::tr1::unordered_set)\nOUTPUT_FOUR_ARG_CONTAINER(std::tr1::unordered_multiset)\n#endif\n#ifdef GLOG_STL_LOGGING_FOR_EXT_HASH\nOUTPUT_FOUR_ARG_CONTAINER(__gnu_cxx::hash_set)\nOUTPUT_FOUR_ARG_CONTAINER(__gnu_cxx::hash_multiset)\n#endif\n\n#undef OUTPUT_FOUR_ARG_CONTAINER\n\n#define OUTPUT_FIVE_ARG_CONTAINER(Sequence) \\\ntemplate<class T1, class T2, class T3, class T4, class T5> \\\ninline std::ostream& operator<<(std::ostream& out, \\\n                                const Sequence<T1, T2, T3, T4, T5>& seq) { \\\n  google::PrintSequence(out, seq.begin(), seq.end()); \\\n  return out; \\\n}\n\n#ifdef GLOG_STL_LOGGING_FOR_UNORDERED\nOUTPUT_FIVE_ARG_CONTAINER(std::unordered_map)\nOUTPUT_FIVE_ARG_CONTAINER(std::unordered_multimap)\n#endif\n#ifdef GLOG_STL_LOGGING_FOR_TR1_UNORDERED\nOUTPUT_FIVE_ARG_CONTAINER(std::tr1::unordered_map)\nOUTPUT_FIVE_ARG_CONTAINER(std::tr1::unordered_multimap)\n#endif\n#ifdef GLOG_STL_LOGGING_FOR_EXT_HASH\nOUTPUT_FIVE_ARG_CONTAINER(__gnu_cxx::hash_map)\nOUTPUT_FIVE_ARG_CONTAINER(__gnu_cxx::hash_multimap)\n#endif\n\n#undef OUTPUT_FIVE_ARG_CONTAINER\n\ntemplate<class First, class Second>\ninline std::ostream& operator<<(std::ostream& out,\n                                const std::pair<First, Second>& p) {\n  out << '(' << p.first << \", \" << p.second << ')';\n  return out;\n}\n\nnamespace google {\n\ntemplate<class Iter>\ninline void PrintSequence(std::ostream& out, Iter begin, Iter end) {\n  // Output at most 100 elements -- appropriate if used for logging.\n  for (int i = 0; begin != end && i < 100; ++i, ++begin) {\n    if (i > 0) out << ' ';\n    out << *begin;\n  }\n  if (begin != end) {\n    out << \" ...\";\n  }\n}\n\n}\n\n// Note that this is technically undefined behavior! We are adding things into\n// the std namespace for a reason though -- we are providing new operations on\n// types which are themselves defined with this namespace. Without this, these\n// operator overloads cannot be found via ADL. If these definitions are not\n// found via ADL, they must be #included before they're used, which requires\n// this header to be included before apparently independent other headers.\n//\n// For example, base/logging.h defines various template functions to implement\n// CHECK_EQ(x, y) and stream x and y into the log in the event the check fails.\n// It does so via the function template MakeCheckOpValueString:\n//   template<class T>\n//   void MakeCheckOpValueString(strstream* ss, const T& v) {\n//     (*ss) << v;\n//   }\n// Because 'glog/logging.h' is included before 'glog/stl_logging.h',\n// subsequent CHECK_EQ(v1, v2) for vector<...> typed variable v1 and v2 can only\n// find these operator definitions via ADL.\n//\n// Even this solution has problems -- it may pull unintended operators into the\n// namespace as well, allowing them to also be found via ADL, and creating code\n// that only works with a particular order of includes. Long term, we need to\n// move all of the *definitions* into namespace std, bet we need to ensure no\n// one references them first. This lets us take that step. We cannot define them\n// in both because that would create ambiguous overloads when both are found.\nnamespace std { using ::operator<<; }\n\n#endif  // UTIL_GTL_STL_LOGGING_INL_H_\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/glog/stl_logging.h.in",
    "content": "// Copyright (c) 2003, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Stream output operators for STL containers; to be used for logging *only*.\n// Inclusion of this file lets you do:\n//\n// list<string> x;\n// LOG(INFO) << \"data: \" << x;\n// vector<int> v1, v2;\n// CHECK_EQ(v1, v2);\n//\n// If you want to use this header file with hash maps or slist, you\n// need to define macros before including this file:\n//\n// - GLOG_STL_LOGGING_FOR_UNORDERED     - <unordered_map> and <unordered_set>\n// - GLOG_STL_LOGGING_FOR_TR1_UNORDERED - <tr1/unordered_(map|set)>\n// - GLOG_STL_LOGGING_FOR_EXT_HASH      - <ext/hash_(map|set)>\n// - GLOG_STL_LOGGING_FOR_EXT_SLIST     - <ext/slist>\n//\n\n#ifndef UTIL_GTL_STL_LOGGING_INL_H_\n#define UTIL_GTL_STL_LOGGING_INL_H_\n\n#if !@ac_cv_cxx_using_operator@\n# error We do not support stl_logging for this compiler\n#endif\n\n#include <deque>\n#include <list>\n#include <map>\n#include <ostream>\n#include <set>\n#include <utility>\n#include <vector>\n\n#ifdef GLOG_STL_LOGGING_FOR_UNORDERED\n# include <unordered_map>\n# include <unordered_set>\n#endif\n\n#ifdef GLOG_STL_LOGGING_FOR_TR1_UNORDERED\n# include <tr1/unordered_map>\n# include <tr1/unordered_set>\n#endif\n\n#ifdef GLOG_STL_LOGGING_FOR_EXT_HASH\n# include <ext/hash_set>\n# include <ext/hash_map>\n#endif\n#ifdef GLOG_STL_LOGGING_FOR_EXT_SLIST\n# include <ext/slist>\n#endif\n\n// Forward declare these two, and define them after all the container streams\n// operators so that we can recurse from pair -> container -> container -> pair\n// properly.\ntemplate<class First, class Second>\nstd::ostream& operator<<(std::ostream& out, const std::pair<First, Second>& p);\n\n@ac_google_start_namespace@\n\ntemplate<class Iter>\nvoid PrintSequence(std::ostream& out, Iter begin, Iter end);\n\n@ac_google_end_namespace@\n\n#define OUTPUT_TWO_ARG_CONTAINER(Sequence) \\\ntemplate<class T1, class T2> \\\ninline std::ostream& operator<<(std::ostream& out, \\\n                                const Sequence<T1, T2>& seq) { \\\n  @ac_google_namespace@::PrintSequence(out, seq.begin(), seq.end()); \\\n  return out; \\\n}\n\nOUTPUT_TWO_ARG_CONTAINER(std::vector)\nOUTPUT_TWO_ARG_CONTAINER(std::deque)\nOUTPUT_TWO_ARG_CONTAINER(std::list)\n#ifdef GLOG_STL_LOGGING_FOR_EXT_SLIST\nOUTPUT_TWO_ARG_CONTAINER(__gnu_cxx::slist)\n#endif\n\n#undef OUTPUT_TWO_ARG_CONTAINER\n\n#define OUTPUT_THREE_ARG_CONTAINER(Sequence) \\\ntemplate<class T1, class T2, class T3> \\\ninline std::ostream& operator<<(std::ostream& out, \\\n                                const Sequence<T1, T2, T3>& seq) { \\\n  @ac_google_namespace@::PrintSequence(out, seq.begin(), seq.end()); \\\n  return out; \\\n}\n\nOUTPUT_THREE_ARG_CONTAINER(std::set)\nOUTPUT_THREE_ARG_CONTAINER(std::multiset)\n\n#undef OUTPUT_THREE_ARG_CONTAINER\n\n#define OUTPUT_FOUR_ARG_CONTAINER(Sequence) \\\ntemplate<class T1, class T2, class T3, class T4> \\\ninline std::ostream& operator<<(std::ostream& out, \\\n                                const Sequence<T1, T2, T3, T4>& seq) { \\\n  @ac_google_namespace@::PrintSequence(out, seq.begin(), seq.end()); \\\n  return out; \\\n}\n\nOUTPUT_FOUR_ARG_CONTAINER(std::map)\nOUTPUT_FOUR_ARG_CONTAINER(std::multimap)\n#ifdef GLOG_STL_LOGGING_FOR_UNORDERED\nOUTPUT_FOUR_ARG_CONTAINER(std::unordered_set)\nOUTPUT_FOUR_ARG_CONTAINER(std::unordered_multiset)\n#endif\n#ifdef GLOG_STL_LOGGING_FOR_TR1_UNORDERED\nOUTPUT_FOUR_ARG_CONTAINER(std::tr1::unordered_set)\nOUTPUT_FOUR_ARG_CONTAINER(std::tr1::unordered_multiset)\n#endif\n#ifdef GLOG_STL_LOGGING_FOR_EXT_HASH\nOUTPUT_FOUR_ARG_CONTAINER(__gnu_cxx::hash_set)\nOUTPUT_FOUR_ARG_CONTAINER(__gnu_cxx::hash_multiset)\n#endif\n\n#undef OUTPUT_FOUR_ARG_CONTAINER\n\n#define OUTPUT_FIVE_ARG_CONTAINER(Sequence) \\\ntemplate<class T1, class T2, class T3, class T4, class T5> \\\ninline std::ostream& operator<<(std::ostream& out, \\\n                                const Sequence<T1, T2, T3, T4, T5>& seq) { \\\n  @ac_google_namespace@::PrintSequence(out, seq.begin(), seq.end()); \\\n  return out; \\\n}\n\n#ifdef GLOG_STL_LOGGING_FOR_UNORDERED\nOUTPUT_FIVE_ARG_CONTAINER(std::unordered_map)\nOUTPUT_FIVE_ARG_CONTAINER(std::unordered_multimap)\n#endif\n#ifdef GLOG_STL_LOGGING_FOR_TR1_UNORDERED\nOUTPUT_FIVE_ARG_CONTAINER(std::tr1::unordered_map)\nOUTPUT_FIVE_ARG_CONTAINER(std::tr1::unordered_multimap)\n#endif\n#ifdef GLOG_STL_LOGGING_FOR_EXT_HASH\nOUTPUT_FIVE_ARG_CONTAINER(__gnu_cxx::hash_map)\nOUTPUT_FIVE_ARG_CONTAINER(__gnu_cxx::hash_multimap)\n#endif\n\n#undef OUTPUT_FIVE_ARG_CONTAINER\n\ntemplate<class First, class Second>\ninline std::ostream& operator<<(std::ostream& out,\n                                const std::pair<First, Second>& p) {\n  out << '(' << p.first << \", \" << p.second << ')';\n  return out;\n}\n\n@ac_google_start_namespace@\n\ntemplate<class Iter>\ninline void PrintSequence(std::ostream& out, Iter begin, Iter end) {\n  // Output at most 100 elements -- appropriate if used for logging.\n  for (int i = 0; begin != end && i < 100; ++i, ++begin) {\n    if (i > 0) out << ' ';\n    out << *begin;\n  }\n  if (begin != end) {\n    out << \" ...\";\n  }\n}\n\n@ac_google_end_namespace@\n\n// Note that this is technically undefined behavior! We are adding things into\n// the std namespace for a reason though -- we are providing new operations on\n// types which are themselves defined with this namespace. Without this, these\n// operator overloads cannot be found via ADL. If these definitions are not\n// found via ADL, they must be #included before they're used, which requires\n// this header to be included before apparently independent other headers.\n//\n// For example, base/logging.h defines various template functions to implement\n// CHECK_EQ(x, y) and stream x and y into the log in the event the check fails.\n// It does so via the function template MakeCheckOpValueString:\n//   template<class T>\n//   void MakeCheckOpValueString(strstream* ss, const T& v) {\n//     (*ss) << v;\n//   }\n// Because 'glog/logging.h' is included before 'glog/stl_logging.h',\n// subsequent CHECK_EQ(v1, v2) for vector<...> typed variable v1 and v2 can only\n// find these operator definitions via ADL.\n//\n// Even this solution has problems -- it may pull unintended operators into the\n// namespace as well, allowing them to also be found via ADL, and creating code\n// that only works with a particular order of includes. Long term, we need to\n// move all of the *definitions* into namespace std, bet we need to ensure no\n// one references them first. This lets us take that step. We cannot define them\n// in both because that would create ambiguous overloads when both are found.\nnamespace std { using ::operator<<; }\n\n#endif  // UTIL_GTL_STL_LOGGING_INL_H_\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/glog/vlog_is_on.h",
    "content": "// Copyright (c) 1999, 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: Ray Sidney and many others\n//\n// Defines the VLOG_IS_ON macro that controls the variable-verbosity\n// conditional logging.\n//\n// It's used by VLOG and VLOG_IF in logging.h\n// and by RAW_VLOG in raw_logging.h to trigger the logging.\n//\n// It can also be used directly e.g. like this:\n//   if (VLOG_IS_ON(2)) {\n//     // do some logging preparation and logging\n//     // that can't be accomplished e.g. via just VLOG(2) << ...;\n//   }\n//\n// The truth value that VLOG_IS_ON(level) returns is determined by \n// the three verbosity level flags:\n//   --v=<n>  Gives the default maximal active V-logging level;\n//            0 is the default.\n//            Normally positive values are used for V-logging levels.\n//   --vmodule=<str>  Gives the per-module maximal V-logging levels to override\n//                    the value given by --v.\n//                    E.g. \"my_module=2,foo*=3\" would change the logging level\n//                    for all code in source files \"my_module.*\" and \"foo*.*\"\n//                    (\"-inl\" suffixes are also disregarded for this matching).\n//\n// SetVLOGLevel helper function is provided to do limited dynamic control over\n// V-logging by overriding the per-module settings given via --vmodule flag.\n//\n// CAVEAT: --vmodule functionality is not available in non gcc compilers.\n//\n\n#ifndef BASE_VLOG_IS_ON_H_\n#define BASE_VLOG_IS_ON_H_\n\n#include \"glog/log_severity.h\"\n\n// Annoying stuff for windows -- makes sure clients can import these functions\n#ifndef GOOGLE_GLOG_DLL_DECL\n# if defined(_WIN32) && !defined(__CYGWIN__)\n#   define GOOGLE_GLOG_DLL_DECL  __declspec(dllimport)\n# else\n#   define GOOGLE_GLOG_DLL_DECL\n# endif\n#endif\n\n#if defined(__GNUC__)\n// We emit an anonymous static int* variable at every VLOG_IS_ON(n) site.\n// (Normally) the first time every VLOG_IS_ON(n) site is hit,\n// we determine what variable will dynamically control logging at this site:\n// it's either FLAGS_v or an appropriate internal variable\n// matching the current source file that represents results of\n// parsing of --vmodule flag and/or SetVLOGLevel calls.\n#define VLOG_IS_ON(verboselevel)                                \\\n  __extension__  \\\n  ({ static google::int32* vlocal__ = &google::kLogSiteUninitialized;           \\\n     google::int32 verbose_level__ = (verboselevel);                    \\\n     (*vlocal__ >= verbose_level__) &&                          \\\n     ((vlocal__ != &google::kLogSiteUninitialized) ||                   \\\n      (google::InitVLOG3__(&vlocal__, &FLAGS_v,                         \\\n                   __FILE__, verbose_level__))); })\n#else\n// GNU extensions not available, so we do not support --vmodule.\n// Dynamic value of FLAGS_v always controls the logging level.\n#define VLOG_IS_ON(verboselevel) (FLAGS_v >= (verboselevel))\n#endif\n\n// Set VLOG(_IS_ON) level for module_pattern to log_level.\n// This lets us dynamically control what is normally set by the --vmodule flag.\n// Returns the level that previously applied to module_pattern.\n// NOTE: To change the log level for VLOG(_IS_ON) sites\n//\t that have already executed after/during InitGoogleLogging,\n//\t one needs to supply the exact --vmodule pattern that applied to them.\n//       (If no --vmodule pattern applied to them\n//       the value of FLAGS_v will continue to control them.)\nextern GOOGLE_GLOG_DLL_DECL int SetVLOGLevel(const char* module_pattern,\n                                             int log_level);\n\n// Various declarations needed for VLOG_IS_ON above: =========================\n\n// Special value used to indicate that a VLOG_IS_ON site has not been\n// initialized.  We make this a large value, so the common-case check\n// of \"*vlocal__ >= verbose_level__\" in VLOG_IS_ON definition\n// passes in such cases and InitVLOG3__ is then triggered.\nextern google::int32 kLogSiteUninitialized;\n\n// Helper routine which determines the logging info for a particalur VLOG site.\n//   site_flag     is the address of the site-local pointer to the controlling\n//                 verbosity level\n//   site_default  is the default to use for *site_flag\n//   fname         is the current source file name\n//   verbose_level is the argument to VLOG_IS_ON\n// We will return the return value for VLOG_IS_ON\n// and if possible set *site_flag appropriately.\nextern GOOGLE_GLOG_DLL_DECL bool InitVLOG3__(\n    google::int32** site_flag,\n    google::int32* site_default,\n    const char* fname,\n    google::int32 verbose_level);\n\n#endif  // BASE_VLOG_IS_ON_H_\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/glog/vlog_is_on.h.in",
    "content": "// Copyright (c) 1999, 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: Ray Sidney and many others\n//\n// Defines the VLOG_IS_ON macro that controls the variable-verbosity\n// conditional logging.\n//\n// It's used by VLOG and VLOG_IF in logging.h\n// and by RAW_VLOG in raw_logging.h to trigger the logging.\n//\n// It can also be used directly e.g. like this:\n//   if (VLOG_IS_ON(2)) {\n//     // do some logging preparation and logging\n//     // that can't be accomplished e.g. via just VLOG(2) << ...;\n//   }\n//\n// The truth value that VLOG_IS_ON(level) returns is determined by \n// the three verbosity level flags:\n//   --v=<n>  Gives the default maximal active V-logging level;\n//            0 is the default.\n//            Normally positive values are used for V-logging levels.\n//   --vmodule=<str>  Gives the per-module maximal V-logging levels to override\n//                    the value given by --v.\n//                    E.g. \"my_module=2,foo*=3\" would change the logging level\n//                    for all code in source files \"my_module.*\" and \"foo*.*\"\n//                    (\"-inl\" suffixes are also disregarded for this matching).\n//\n// SetVLOGLevel helper function is provided to do limited dynamic control over\n// V-logging by overriding the per-module settings given via --vmodule flag.\n//\n// CAVEAT: --vmodule functionality is not available in non gcc compilers.\n//\n\n#ifndef BASE_VLOG_IS_ON_H_\n#define BASE_VLOG_IS_ON_H_\n\n#include \"glog/log_severity.h\"\n\n// Annoying stuff for windows -- makes sure clients can import these functions\n#ifndef GOOGLE_GLOG_DLL_DECL\n# if defined(_WIN32) && !defined(__CYGWIN__)\n#   define GOOGLE_GLOG_DLL_DECL  __declspec(dllimport)\n# else\n#   define GOOGLE_GLOG_DLL_DECL\n# endif\n#endif\n\n#if defined(__GNUC__)\n// We emit an anonymous static int* variable at every VLOG_IS_ON(n) site.\n// (Normally) the first time every VLOG_IS_ON(n) site is hit,\n// we determine what variable will dynamically control logging at this site:\n// it's either FLAGS_v or an appropriate internal variable\n// matching the current source file that represents results of\n// parsing of --vmodule flag and/or SetVLOGLevel calls.\n#define VLOG_IS_ON(verboselevel)                                \\\n  __extension__  \\\n  ({ static @ac_google_namespace@::int32* vlocal__ = &@ac_google_namespace@::kLogSiteUninitialized;           \\\n     @ac_google_namespace@::int32 verbose_level__ = (verboselevel);                    \\\n     (*vlocal__ >= verbose_level__) &&                          \\\n     ((vlocal__ != &@ac_google_namespace@::kLogSiteUninitialized) ||                   \\\n      (@ac_google_namespace@::InitVLOG3__(&vlocal__, &FLAGS_v,                         \\\n                   __FILE__, verbose_level__))); })\n#else\n// GNU extensions not available, so we do not support --vmodule.\n// Dynamic value of FLAGS_v always controls the logging level.\n#define VLOG_IS_ON(verboselevel) (FLAGS_v >= (verboselevel))\n#endif\n\n// Set VLOG(_IS_ON) level for module_pattern to log_level.\n// This lets us dynamically control what is normally set by the --vmodule flag.\n// Returns the level that previously applied to module_pattern.\n// NOTE: To change the log level for VLOG(_IS_ON) sites\n//\t that have already executed after/during InitGoogleLogging,\n//\t one needs to supply the exact --vmodule pattern that applied to them.\n//       (If no --vmodule pattern applied to them\n//       the value of FLAGS_v will continue to control them.)\nextern GOOGLE_GLOG_DLL_DECL int SetVLOGLevel(const char* module_pattern,\n                                             int log_level);\n\n// Various declarations needed for VLOG_IS_ON above: =========================\n\n// Special value used to indicate that a VLOG_IS_ON site has not been\n// initialized.  We make this a large value, so the common-case check\n// of \"*vlocal__ >= verbose_level__\" in VLOG_IS_ON definition\n// passes in such cases and InitVLOG3__ is then triggered.\nextern @ac_google_namespace@::int32 kLogSiteUninitialized;\n\n// Helper routine which determines the logging info for a particalur VLOG site.\n//   site_flag     is the address of the site-local pointer to the controlling\n//                 verbosity level\n//   site_default  is the default to use for *site_flag\n//   fname         is the current source file name\n//   verbose_level is the argument to VLOG_IS_ON\n// We will return the return value for VLOG_IS_ON\n// and if possible set *site_flag appropriately.\nextern GOOGLE_GLOG_DLL_DECL bool InitVLOG3__(\n    @ac_google_namespace@::int32** site_flag,\n    @ac_google_namespace@::int32* site_default,\n    const char* fname,\n    @ac_google_namespace@::int32 verbose_level);\n\n#endif  // BASE_VLOG_IS_ON_H_\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/googletest.h",
    "content": "// Copyright (c) 2009, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: Shinichiro Hamaji\n//   (based on googletest: http://code.google.com/p/googletest/)\n\n#ifdef GOOGLETEST_H__\n#error You must not include this file twice.\n#endif\n#define GOOGLETEST_H__\n\n#include \"utilities.h\"\n\n#include <ctype.h>\n#include <setjmp.h>\n#include <time.h>\n\n#include <map>\n#include <sstream>\n#include <string>\n#include <vector>\n\n#include <stdio.h>\n#include <stdlib.h>\n\n#include <sys/types.h>\n#include <sys/stat.h>\n#include <fcntl.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n\n#include \"base/commandlineflags.h\"\n\nusing std::map;\nusing std::string;\nusing std::vector;\n\n_START_GOOGLE_NAMESPACE_\n\nextern GOOGLE_GLOG_DLL_DECL void (*g_logging_fail_func)();\n\n_END_GOOGLE_NAMESPACE_\n\n#undef GOOGLE_GLOG_DLL_DECL\n#define GOOGLE_GLOG_DLL_DECL\n\nstatic inline string GetTempDir() {\n#ifndef OS_WINDOWS\n  return \"/tmp\";\n#else\n  char tmp[MAX_PATH];\n  GetTempPathA(MAX_PATH, tmp);\n  return tmp;\n#endif\n}\n\n#if defined(OS_WINDOWS) && defined(_MSC_VER) && !defined(TEST_SRC_DIR)\n// The test will run in glog/vsproject/<project name>\n// (e.g., glog/vsproject/logging_unittest).\nstatic const char TEST_SRC_DIR[] = \"../..\";\n#elif !defined(TEST_SRC_DIR)\n# warning TEST_SRC_DIR should be defined in config.h\nstatic const char TEST_SRC_DIR[] = \".\";\n#endif\n\nDEFINE_string(test_tmpdir, GetTempDir(), \"Dir we use for temp files\");\nDEFINE_string(test_srcdir, TEST_SRC_DIR,\n              \"Source-dir root, needed to find glog_unittest_flagfile\");\nDEFINE_bool(run_benchmark, false, \"If true, run benchmarks\");\n#ifdef NDEBUG\nDEFINE_int32(benchmark_iters, 100000000, \"Number of iterations per benchmark\");\n#else\nDEFINE_int32(benchmark_iters, 100000, \"Number of iterations per benchmark\");\n#endif\n\n#ifdef HAVE_LIB_GTEST\n# include <gtest/gtest.h>\n// Use our ASSERT_DEATH implementation.\n# undef ASSERT_DEATH\n# undef ASSERT_DEBUG_DEATH\nusing testing::InitGoogleTest;\n#else\n\n_START_GOOGLE_NAMESPACE_\n\nvoid InitGoogleTest(int*, char**) {}\n\n// The following is some bare-bones testing infrastructure\n\n#define EXPECT_TRUE(cond)                               \\\n  do {                                                  \\\n    if (!(cond)) {                                      \\\n      fprintf(stderr, \"Check failed: %s\\n\", #cond);     \\\n      exit(1);                                          \\\n    }                                                   \\\n  } while (0)\n\n#define EXPECT_FALSE(cond)  EXPECT_TRUE(!(cond))\n\n#define EXPECT_OP(op, val1, val2)                                       \\\n  do {                                                                  \\\n    if (!((val1) op (val2))) {                                          \\\n      fprintf(stderr, \"Check failed: %s %s %s\\n\", #val1, #op, #val2);   \\\n      exit(1);                                                          \\\n    }                                                                   \\\n  } while (0)\n\n#define EXPECT_EQ(val1, val2)  EXPECT_OP(==, val1, val2)\n#define EXPECT_NE(val1, val2)  EXPECT_OP(!=, val1, val2)\n#define EXPECT_GT(val1, val2)  EXPECT_OP(>, val1, val2)\n#define EXPECT_LT(val1, val2)  EXPECT_OP(<, val1, val2)\n\n#define EXPECT_NAN(arg)                                         \\\n  do {                                                          \\\n    if (!isnan(arg)) {                                          \\\n      fprintf(stderr, \"Check failed: isnan(%s)\\n\", #arg);       \\\n      exit(1);                                                  \\\n    }                                                           \\\n  } while (0)\n\n#define EXPECT_INF(arg)                                         \\\n  do {                                                          \\\n    if (!isinf(arg)) {                                          \\\n      fprintf(stderr, \"Check failed: isinf(%s)\\n\", #arg);       \\\n      exit(1);                                                  \\\n    }                                                           \\\n  } while (0)\n\n#define EXPECT_DOUBLE_EQ(val1, val2)                                    \\\n  do {                                                                  \\\n    if (((val1) < (val2) - 0.001 || (val1) > (val2) + 0.001)) {         \\\n      fprintf(stderr, \"Check failed: %s == %s\\n\", #val1, #val2);        \\\n      exit(1);                                                          \\\n    }                                                                   \\\n  } while (0)\n\n#define EXPECT_STREQ(val1, val2)                                        \\\n  do {                                                                  \\\n    if (strcmp((val1), (val2)) != 0) {                                  \\\n      fprintf(stderr, \"Check failed: streq(%s, %s)\\n\", #val1, #val2);   \\\n      exit(1);                                                          \\\n    }                                                                   \\\n  } while (0)\n\nvector<void (*)()> g_testlist;  // the tests to run\n\n#define TEST(a, b)                                      \\\n  struct Test_##a##_##b {                               \\\n    Test_##a##_##b() { g_testlist.push_back(&Run); }    \\\n    static void Run() { FlagSaver fs; RunTest(); }      \\\n    static void RunTest();                              \\\n  };                                                    \\\n  static Test_##a##_##b g_test_##a##_##b;               \\\n  void Test_##a##_##b::RunTest()\n\n\nstatic inline int RUN_ALL_TESTS() {\n  vector<void (*)()>::const_iterator it;\n  for (it = g_testlist.begin(); it != g_testlist.end(); ++it) {\n    (*it)();\n  }\n  fprintf(stderr, \"Passed %d tests\\n\\nPASS\\n\", (int)g_testlist.size());\n  return 0;\n}\n\n_END_GOOGLE_NAMESPACE_\n\n#endif  // ! HAVE_LIB_GTEST\n\n_START_GOOGLE_NAMESPACE_\n\nstatic bool g_called_abort;\nstatic jmp_buf g_jmp_buf;\nstatic inline void CalledAbort() {\n  g_called_abort = true;\n  longjmp(g_jmp_buf, 1);\n}\n\n#ifdef OS_WINDOWS\n// TODO(hamaji): Death test somehow doesn't work in Windows.\n#define ASSERT_DEATH(fn, msg)\n#else\n#define ASSERT_DEATH(fn, msg)                                           \\\n  do {                                                                  \\\n    g_called_abort = false;                                             \\\n    /* in logging.cc */                                                 \\\n    void (*original_logging_fail_func)() = g_logging_fail_func;         \\\n    g_logging_fail_func = &CalledAbort;                                 \\\n    if (!setjmp(g_jmp_buf)) fn;                                         \\\n    /* set back to their default */                                     \\\n    g_logging_fail_func = original_logging_fail_func;                   \\\n    if (!g_called_abort) {                                              \\\n      fprintf(stderr, \"Function didn't die (%s): %s\\n\", msg, #fn);      \\\n      exit(1);                                                          \\\n    }                                                                   \\\n  } while (0)\n#endif\n\n#ifdef NDEBUG\n#define ASSERT_DEBUG_DEATH(fn, msg)\n#else\n#define ASSERT_DEBUG_DEATH(fn, msg) ASSERT_DEATH(fn, msg)\n#endif  // NDEBUG\n\n// Benchmark tools.\n\n#define BENCHMARK(n) static BenchmarkRegisterer __benchmark_ ## n (#n, &n);\n\nmap<string, void (*)(int)> g_benchlist;  // the benchmarks to run\n\nclass BenchmarkRegisterer {\n public:\n  BenchmarkRegisterer(const char* name, void (*function)(int iters)) {\n    EXPECT_TRUE(g_benchlist.insert(std::make_pair(name, function)).second);\n  }\n};\n\nstatic inline void RunSpecifiedBenchmarks() {\n  if (!FLAGS_run_benchmark) {\n    return;\n  }\n\n  int iter_cnt = FLAGS_benchmark_iters;\n  puts(\"Benchmark\\tTime(ns)\\tIterations\");\n  for (map<string, void (*)(int)>::const_iterator iter = g_benchlist.begin();\n       iter != g_benchlist.end();\n       ++iter) {\n    clock_t start = clock();\n    iter->second(iter_cnt);\n    double elapsed_ns =\n        ((double)clock() - start) / CLOCKS_PER_SEC * 1000*1000*1000;\n    printf(\"%s\\t%8.2lf\\t%10d\\n\",\n           iter->first.c_str(), elapsed_ns / iter_cnt, iter_cnt);\n  }\n  puts(\"\");\n}\n\n// ----------------------------------------------------------------------\n// Golden file functions\n// ----------------------------------------------------------------------\n\nclass CapturedStream {\n public:\n  CapturedStream(int fd, const string & filename) :\n    fd_(fd),\n    uncaptured_fd_(-1),\n    filename_(filename) {\n    Capture();\n  }\n\n  ~CapturedStream() {\n    if (uncaptured_fd_ != -1) {\n      CHECK(close(uncaptured_fd_) != -1);\n    }\n  }\n\n  // Start redirecting output to a file\n  void Capture() {\n    // Keep original stream for later\n    CHECK(uncaptured_fd_ == -1) << \", Stream \" << fd_ << \" already captured!\";\n    uncaptured_fd_ = dup(fd_);\n    CHECK(uncaptured_fd_ != -1);\n\n    // Open file to save stream to\n    int cap_fd = open(filename_.c_str(),\n                      O_CREAT | O_TRUNC | O_WRONLY,\n                      S_IRUSR | S_IWUSR);\n    CHECK(cap_fd != -1);\n\n    // Send stdout/stderr to this file\n    fflush(NULL);\n    CHECK(dup2(cap_fd, fd_) != -1);\n    CHECK(close(cap_fd) != -1);\n  }\n\n  // Remove output redirection\n  void StopCapture() {\n    // Restore original stream\n    if (uncaptured_fd_ != -1) {\n      fflush(NULL);\n      CHECK(dup2(uncaptured_fd_, fd_) != -1);\n    }\n  }\n\n  const string & filename() const { return filename_; }\n\n private:\n  int fd_;             // file descriptor being captured\n  int uncaptured_fd_;  // where the stream was originally being sent to\n  string filename_;    // file where stream is being saved\n};\nstatic CapturedStream * s_captured_streams[STDERR_FILENO+1];\n// Redirect a file descriptor to a file.\n//   fd       - Should be STDOUT_FILENO or STDERR_FILENO\n//   filename - File where output should be stored\nstatic inline void CaptureTestOutput(int fd, const string & filename) {\n  CHECK((fd == STDOUT_FILENO) || (fd == STDERR_FILENO));\n  CHECK(s_captured_streams[fd] == NULL);\n  s_captured_streams[fd] = new CapturedStream(fd, filename);\n}\nstatic inline void CaptureTestStderr() {\n  CaptureTestOutput(STDERR_FILENO, FLAGS_test_tmpdir + \"/captured.err\");\n}\n// Return the size (in bytes) of a file\nstatic inline size_t GetFileSize(FILE * file) {\n  fseek(file, 0, SEEK_END);\n  return static_cast<size_t>(ftell(file));\n}\n// Read the entire content of a file as a string\nstatic inline string ReadEntireFile(FILE * file) {\n  const size_t file_size = GetFileSize(file);\n  char * const buffer = new char[file_size];\n\n  size_t bytes_last_read = 0;  // # of bytes read in the last fread()\n  size_t bytes_read = 0;       // # of bytes read so far\n\n  fseek(file, 0, SEEK_SET);\n\n  // Keep reading the file until we cannot read further or the\n  // pre-determined file size is reached.\n  do {\n    bytes_last_read = fread(buffer+bytes_read, 1, file_size-bytes_read, file);\n    bytes_read += bytes_last_read;\n  } while (bytes_last_read > 0 && bytes_read < file_size);\n\n  const string content = string(buffer, buffer+bytes_read);\n  delete[] buffer;\n\n  return content;\n}\n// Get the captured stdout (when fd is STDOUT_FILENO) or stderr (when\n// fd is STDERR_FILENO) as a string\nstatic inline string GetCapturedTestOutput(int fd) {\n  CHECK(fd == STDOUT_FILENO || fd == STDERR_FILENO);\n  CapturedStream * const cap = s_captured_streams[fd];\n  CHECK(cap)\n    << \": did you forget CaptureTestStdout() or CaptureTestStderr()?\";\n\n  // Make sure everything is flushed.\n  cap->StopCapture();\n\n  // Read the captured file.\n  FILE * const file = fopen(cap->filename().c_str(), \"r\");\n  const string content = ReadEntireFile(file);\n  fclose(file);\n\n  delete cap;\n  s_captured_streams[fd] = NULL;\n\n  return content;\n}\n// Get the captured stderr of a test as a string.\nstatic inline string GetCapturedTestStderr() {\n  return GetCapturedTestOutput(STDERR_FILENO);\n}\n\n// Check if the string is [IWEF](\\d{4}|DATE)\nstatic inline bool IsLoggingPrefix(const string& s) {\n  if (s.size() != 5) return false;\n  if (!strchr(\"IWEF\", s[0])) return false;\n  for (int i = 1; i <= 4; ++i) {\n    if (!isdigit(s[i]) && s[i] != \"DATE\"[i-1]) return false;\n  }\n  return true;\n}\n\n// Convert log output into normalized form.\n//\n// Example:\n//     I0102 030405 logging_unittest.cc:345] RAW: vlog -1\n//  => IDATE TIME__ logging_unittest.cc:LINE] RAW: vlog -1\nstatic inline string MungeLine(const string& line) {\n  std::istringstream iss(line);\n  string before, logcode_date, time, thread_lineinfo;\n  iss >> logcode_date;\n  while (!IsLoggingPrefix(logcode_date)) {\n    before += \" \" + logcode_date;\n    if (!(iss >> logcode_date)) {\n      // We cannot find the header of log output.\n      return before;\n    }\n  }\n  if (!before.empty()) before += \" \";\n  iss >> time;\n  iss >> thread_lineinfo;\n  CHECK(!thread_lineinfo.empty());\n  if (thread_lineinfo[thread_lineinfo.size() - 1] != ']') {\n    // We found thread ID.\n    string tmp;\n    iss >> tmp;\n    CHECK(!tmp.empty());\n    CHECK_EQ(']', tmp[tmp.size() - 1]);\n    thread_lineinfo = \"THREADID \" + tmp;\n  }\n  size_t index = thread_lineinfo.find(':');\n  CHECK_NE(string::npos, index);\n  thread_lineinfo = thread_lineinfo.substr(0, index+1) + \"LINE]\";\n  string rest;\n  std::getline(iss, rest);\n  return (before + logcode_date[0] + \"DATE TIME__ \" + thread_lineinfo +\n          MungeLine(rest));\n}\n\nstatic inline void StringReplace(string* str,\n                          const string& oldsub,\n                          const string& newsub) {\n  size_t pos = str->find(oldsub);\n  if (pos != string::npos) {\n    str->replace(pos, oldsub.size(), newsub.c_str());\n  }\n}\n\nstatic inline string Munge(const string& filename) {\n  FILE* fp = fopen(filename.c_str(), \"rb\");\n  CHECK(fp != NULL) << filename << \": couldn't open\";\n  char buf[4096];\n  string result;\n  while (fgets(buf, 4095, fp)) {\n    string line = MungeLine(buf);\n    char null_str[256];\n    sprintf(null_str, \"%p\", static_cast<void*>(NULL));\n    StringReplace(&line, \"__NULLP__\", null_str);\n    // Remove 0x prefix produced by %p. VC++ doesn't put the prefix.\n    StringReplace(&line, \" 0x\", \" \");\n\n    StringReplace(&line, \"__SUCCESS__\", StrError(0));\n    StringReplace(&line, \"__ENOENT__\", StrError(ENOENT));\n    StringReplace(&line, \"__EINTR__\", StrError(EINTR));\n    StringReplace(&line, \"__ENXIO__\", StrError(ENXIO));\n    StringReplace(&line, \"__ENOEXEC__\", StrError(ENOEXEC));\n    result += line + \"\\n\";\n  }\n  fclose(fp);\n  return result;\n}\n\nstatic inline void WriteToFile(const string& body, const string& file) {\n  FILE* fp = fopen(file.c_str(), \"wb\");\n  fwrite(body.data(), 1, body.size(), fp);\n  fclose(fp);\n}\n\nstatic inline bool MungeAndDiffTestStderr(const string& golden_filename) {\n  CapturedStream* cap = s_captured_streams[STDERR_FILENO];\n  CHECK(cap) << \": did you forget CaptureTestStderr()?\";\n\n  cap->StopCapture();\n\n  // Run munge\n  const string captured = Munge(cap->filename());\n  const string golden = Munge(golden_filename);\n  if (captured != golden) {\n    fprintf(stderr,\n            \"Test with golden file failed. We'll try to show the diff:\\n\");\n    string munged_golden = golden_filename + \".munged\";\n    WriteToFile(golden, munged_golden);\n    string munged_captured = cap->filename() + \".munged\";\n    WriteToFile(captured, munged_captured);\n    string diffcmd(\"diff -u \" + munged_golden + \" \" + munged_captured);\n    if (system(diffcmd.c_str()) != 0) {\n      fprintf(stderr, \"diff command was failed.\\n\");\n    }\n    unlink(munged_golden.c_str());\n    unlink(munged_captured.c_str());\n    return false;\n  }\n  LOG(INFO) << \"Diff was successful\";\n  return true;\n}\n\n// Save flags used from logging_unittest.cc.\n#ifndef HAVE_LIB_GFLAGS\nstruct FlagSaver {\n  FlagSaver()\n      : v_(FLAGS_v),\n        stderrthreshold_(FLAGS_stderrthreshold),\n        logtostderr_(FLAGS_logtostderr),\n        alsologtostderr_(FLAGS_alsologtostderr) {}\n  ~FlagSaver() {\n    FLAGS_v = v_;\n    FLAGS_stderrthreshold = stderrthreshold_;\n    FLAGS_logtostderr = logtostderr_;\n    FLAGS_alsologtostderr = alsologtostderr_;\n  }\n  int v_;\n  int stderrthreshold_;\n  bool logtostderr_;\n  bool alsologtostderr_;\n};\n#endif\n\nclass Thread {\n public:\n  virtual ~Thread() {}\n\n  void SetJoinable(bool) {}\n#if defined(OS_WINDOWS) || defined(OS_CYGWIN)\n  void Start() {\n    handle_ = CreateThread(NULL,\n                           0,\n                           (LPTHREAD_START_ROUTINE)&Thread::InvokeThread,\n                           (LPVOID)this,\n                           0,\n                           &th_);\n    CHECK(handle_) << \"CreateThread\";\n  }\n  void Join() {\n    WaitForSingleObject(handle_, INFINITE);\n  }\n#elif defined(HAVE_PTHREAD)\n  void Start() {\n    pthread_create(&th_, NULL, &Thread::InvokeThread, this);\n  }\n  void Join() {\n    pthread_join(th_, NULL);\n  }\n#else\n# error No thread implementation.\n#endif\n\n protected:\n  virtual void Run() = 0;\n\n private:\n  static void* InvokeThread(void* self) {\n    ((Thread*)self)->Run();\n    return NULL;\n  }\n\n#if defined(OS_WINDOWS) || defined(OS_CYGWIN)\n  HANDLE handle_;\n  DWORD th_;\n#else\n  pthread_t th_;\n#endif\n};\n\nstatic inline void SleepForMilliseconds(int t) {\n#ifndef OS_WINDOWS\n  usleep(t * 1000);\n#else\n  Sleep(t);\n#endif\n}\n\n// Add hook for operator new to ensure there are no memory allocation.\n\nvoid (*g_new_hook)() = NULL;\n\n_END_GOOGLE_NAMESPACE_\n\nvoid* operator new(size_t size) throw(std::bad_alloc) {\n  if (GOOGLE_NAMESPACE::g_new_hook) {\n    GOOGLE_NAMESPACE::g_new_hook();\n  }\n  return malloc(size);\n}\n\nvoid* operator new[](size_t size) throw(std::bad_alloc) {\n  return ::operator new(size);\n}\n\nvoid operator delete(void* p) throw() {\n  free(p);\n}\n\nvoid operator delete[](void* p) throw() {\n  ::operator delete(p);\n}\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/logging.cc",
    "content": "// Copyright (c) 1999, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n#define _GNU_SOURCE 1 // needed for O_NOFOLLOW and pread()/pwrite()\n\n#include \"utilities.h\"\n\n#include <algorithm>\n#include <assert.h>\n#include <iomanip>\n#include <string>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>  // For _exit.\n#endif\n#include <climits>\n#include <sys/types.h>\n#include <sys/stat.h>\n#ifdef HAVE_SYS_UTSNAME_H\n# include <sys/utsname.h>  // For uname.\n#endif\n#include <fcntl.h>\n#include <cstdio>\n#include <iostream>\n#include <stdarg.h>\n#include <stdlib.h>\n#ifdef HAVE_PWD_H\n# include <pwd.h>\n#endif\n#ifdef HAVE_SYSLOG_H\n# include <syslog.h>\n#endif\n#include <vector>\n#include <errno.h>                   // for errno\n#include <sstream>\n#include \"base/commandlineflags.h\"        // to get the program name\n#include \"glog/logging.h\"\n#include \"glog/raw_logging.h\"\n#include \"base/googleinit.h\"\n\n#ifdef HAVE_STACKTRACE\n# include \"stacktrace.h\"\n#endif\n\nusing std::string;\nusing std::vector;\nusing std::setw;\nusing std::setfill;\nusing std::hex;\nusing std::dec;\nusing std::min;\nusing std::ostream;\nusing std::ostringstream;\n\nusing std::FILE;\nusing std::fwrite;\nusing std::fclose;\nusing std::fflush;\nusing std::fprintf;\nusing std::perror;\n\n#ifdef __QNX__\nusing std::fdopen;\n#endif\n\n#ifdef _WIN32\n#define fdopen _fdopen\n#endif\n\n// There is no thread annotation support.\n#define EXCLUSIVE_LOCKS_REQUIRED(mu)\n\nstatic bool BoolFromEnv(const char *varname, bool defval) {\n  const char* const valstr = getenv(varname);\n  if (!valstr) {\n    return defval;\n  }\n  return memchr(\"tTyY1\\0\", valstr[0], 6) != NULL;\n}\n\nGLOG_DEFINE_bool(logtostderr, BoolFromEnv(\"GOOGLE_LOGTOSTDERR\", false),\n                 \"log messages go to stderr instead of logfiles\");\nGLOG_DEFINE_bool(alsologtostderr, BoolFromEnv(\"GOOGLE_ALSOLOGTOSTDERR\", false),\n                 \"log messages go to stderr in addition to logfiles\");\nGLOG_DEFINE_bool(colorlogtostderr, false,\n                 \"color messages logged to stderr (if supported by terminal)\");\n#ifdef OS_LINUX\nGLOG_DEFINE_bool(drop_log_memory, true, \"Drop in-memory buffers of log contents. \"\n                 \"Logs can grow very quickly and they are rarely read before they \"\n                 \"need to be evicted from memory. Instead, drop them from memory \"\n                 \"as soon as they are flushed to disk.\");\n_START_GOOGLE_NAMESPACE_\nnamespace logging {\nstatic const int64 kPageSize = getpagesize();\n}\n_END_GOOGLE_NAMESPACE_\n#endif\n\n// By default, errors (including fatal errors) get logged to stderr as\n// well as the file.\n//\n// The default is ERROR instead of FATAL so that users can see problems\n// when they run a program without having to look in another file.\nDEFINE_int32(stderrthreshold,\n             GOOGLE_NAMESPACE::GLOG_ERROR,\n             \"log messages at or above this level are copied to stderr in \"\n             \"addition to logfiles.  This flag obsoletes --alsologtostderr.\");\n\nGLOG_DEFINE_string(alsologtoemail, \"\",\n                   \"log messages go to these email addresses \"\n                   \"in addition to logfiles\");\nGLOG_DEFINE_bool(log_prefix, true,\n                 \"Prepend the log prefix to the start of each log line\");\nGLOG_DEFINE_int32(minloglevel, 0, \"Messages logged at a lower level than this don't \"\n                  \"actually get logged anywhere\");\nGLOG_DEFINE_int32(logbuflevel, 0,\n                  \"Buffer log messages logged at this level or lower\"\n                  \" (-1 means don't buffer; 0 means buffer INFO only;\"\n                  \" ...)\");\nGLOG_DEFINE_int32(logbufsecs, 30,\n                  \"Buffer log messages for at most this many seconds\");\nGLOG_DEFINE_int32(logemaillevel, 999,\n                  \"Email log messages logged at this level or higher\"\n                  \" (0 means email all; 3 means email FATAL only;\"\n                  \" ...)\");\nGLOG_DEFINE_string(logmailer, \"/bin/mail\",\n                   \"Mailer used to send logging email\");\n\n// Compute the default value for --log_dir\nstatic const char* DefaultLogDir() {\n  const char* env;\n  env = getenv(\"GOOGLE_LOG_DIR\");\n  if (env != NULL && env[0] != '\\0') {\n    return env;\n  }\n  env = getenv(\"TEST_TMPDIR\");\n  if (env != NULL && env[0] != '\\0') {\n    return env;\n  }\n  return \"\";\n}\n\nGLOG_DEFINE_int32(logfile_mode, 0664, \"Log file mode/permissions.\");\n\nGLOG_DEFINE_string(log_dir, DefaultLogDir(),\n                   \"If specified, logfiles are written into this directory instead \"\n                   \"of the default logging directory.\");\nGLOG_DEFINE_string(log_link, \"\", \"Put additional links to the log \"\n                   \"files in this directory\");\n\nGLOG_DEFINE_int32(max_log_size, 1800,\n                  \"approx. maximum log file size (in MB). A value of 0 will \"\n                  \"be silently overridden to 1.\");\n\nGLOG_DEFINE_bool(stop_logging_if_full_disk, false,\n                 \"Stop attempting to log to disk if the disk is full.\");\n\nGLOG_DEFINE_string(log_backtrace_at, \"\",\n                   \"Emit a backtrace when logging at file:linenum.\");\n\n// TODO(hamaji): consider windows\n#define PATH_SEPARATOR '/'\n\n#ifndef HAVE_PREAD\n#if defined(OS_WINDOWS)\n#include <BaseTsd.h>\n#define ssize_t SSIZE_T\n#endif\nstatic ssize_t pread(int fd, void* buf, size_t count, off_t offset) {\n  off_t orig_offset = lseek(fd, 0, SEEK_CUR);\n  if (orig_offset == (off_t)-1)\n    return -1;\n  if (lseek(fd, offset, SEEK_CUR) == (off_t)-1)\n    return -1;\n  ssize_t len = read(fd, buf, count);\n  if (len < 0)\n    return len;\n  if (lseek(fd, orig_offset, SEEK_SET) == (off_t)-1)\n    return -1;\n  return len;\n}\n#endif  // !HAVE_PREAD\n\n#ifndef HAVE_PWRITE\nstatic ssize_t pwrite(int fd, void* buf, size_t count, off_t offset) {\n  off_t orig_offset = lseek(fd, 0, SEEK_CUR);\n  if (orig_offset == (off_t)-1)\n    return -1;\n  if (lseek(fd, offset, SEEK_CUR) == (off_t)-1)\n    return -1;\n  ssize_t len = write(fd, buf, count);\n  if (len < 0)\n    return len;\n  if (lseek(fd, orig_offset, SEEK_SET) == (off_t)-1)\n    return -1;\n  return len;\n}\n#endif  // !HAVE_PWRITE\n\nstatic void GetHostName(string* hostname) {\n#if defined(HAVE_SYS_UTSNAME_H)\n  struct utsname buf;\n  if (0 != uname(&buf)) {\n    // ensure null termination on failure\n    *buf.nodename = '\\0';\n  }\n  *hostname = buf.nodename;\n#elif defined(OS_WINDOWS)\n  char buf[MAX_COMPUTERNAME_LENGTH + 1];\n  DWORD len = MAX_COMPUTERNAME_LENGTH + 1;\n  if (GetComputerNameA(buf, &len)) {\n    *hostname = buf;\n  } else {\n    hostname->clear();\n  }\n#else\n# warning There is no way to retrieve the host name.\n  *hostname = \"(unknown)\";\n#endif\n}\n\n// Returns true iff terminal supports using colors in output.\nstatic bool TerminalSupportsColor() {\n  bool term_supports_color = false;\n#ifdef OS_WINDOWS\n  // on Windows TERM variable is usually not set, but the console does\n  // support colors.\n  term_supports_color = true;\n#else\n  // On non-Windows platforms, we rely on the TERM variable.\n  const char* const term = getenv(\"TERM\");\n  if (term != NULL && term[0] != '\\0') {\n    term_supports_color =\n      !strcmp(term, \"xterm\") ||\n      !strcmp(term, \"xterm-color\") ||\n      !strcmp(term, \"xterm-256color\") ||\n      !strcmp(term, \"screen-256color\") ||\n      !strcmp(term, \"screen\") ||\n      !strcmp(term, \"linux\") ||\n      !strcmp(term, \"cygwin\");\n  }\n#endif\n  return term_supports_color;\n}\n\n_START_GOOGLE_NAMESPACE_\n\nenum GLogColor {\n  COLOR_DEFAULT,\n  COLOR_RED,\n  COLOR_GREEN,\n  COLOR_YELLOW\n};\n\nstatic GLogColor SeverityToColor(LogSeverity severity) {\n  assert(severity >= 0 && severity < NUM_SEVERITIES);\n  GLogColor color = COLOR_DEFAULT;\n  switch (severity) {\n  case GLOG_INFO:\n    color = COLOR_DEFAULT;\n    break;\n  case GLOG_WARNING:\n    color = COLOR_YELLOW;\n    break;\n  case GLOG_ERROR:\n  case GLOG_FATAL:\n    color = COLOR_RED;\n    break;\n  default:\n    // should never get here.\n    assert(false);\n  }\n  return color;\n}\n\n#ifdef OS_WINDOWS\n\n// Returns the character attribute for the given color.\nWORD GetColorAttribute(GLogColor color) {\n  switch (color) {\n    case COLOR_RED:    return FOREGROUND_RED;\n    case COLOR_GREEN:  return FOREGROUND_GREEN;\n    case COLOR_YELLOW: return FOREGROUND_RED | FOREGROUND_GREEN;\n    default:           return 0;\n  }\n}\n\n#else\n\n// Returns the ANSI color code for the given color.\nconst char* GetAnsiColorCode(GLogColor color) {\n  switch (color) {\n  case COLOR_RED:     return \"1\";\n  case COLOR_GREEN:   return \"2\";\n  case COLOR_YELLOW:  return \"3\";\n  case COLOR_DEFAULT:  return \"\";\n  };\n  return NULL; // stop warning about return type.\n}\n\n#endif  // OS_WINDOWS\n\n// Safely get max_log_size, overriding to 1 if it somehow gets defined as 0\nstatic int32 MaxLogSize() {\n  return (FLAGS_max_log_size > 0 ? FLAGS_max_log_size : 1);\n}\n\n// An arbitrary limit on the length of a single log message.  This\n// is so that streaming can be done more efficiently.\nconst size_t LogMessage::kMaxLogMessageLen = 30000;\n\nstruct LogMessage::LogMessageData  {\n  LogMessageData();\n\n  int preserved_errno_;      // preserved errno\n  // Buffer space; contains complete message text.\n  char message_text_[LogMessage::kMaxLogMessageLen+1];\n  LogStream stream_;\n  char severity_;      // What level is this LogMessage logged at?\n  int line_;                 // line number where logging call is.\n  void (LogMessage::*send_method_)();  // Call this in destructor to send\n  union {  // At most one of these is used: union to keep the size low.\n    LogSink* sink_;             // NULL or sink to send message to\n    std::vector<std::string>* outvec_; // NULL or vector to push message onto\n    std::string* message_;             // NULL or string to write message into\n  };\n  time_t timestamp_;            // Time of creation of LogMessage\n  struct ::tm tm_time_;         // Time of creation of LogMessage\n  size_t num_prefix_chars_;     // # of chars of prefix in this message\n  size_t num_chars_to_log_;     // # of chars of msg to send to log\n  size_t num_chars_to_syslog_;  // # of chars of msg to send to syslog\n  const char* basename_;        // basename of file that called LOG\n  const char* fullname_;        // fullname of file that called LOG\n  bool has_been_flushed_;       // false => data has not been flushed\n  bool first_fatal_;            // true => this was first fatal msg\n\n private:\n  LogMessageData(const LogMessageData&);\n  void operator=(const LogMessageData&);\n};\n\n// A mutex that allows only one thread to log at a time, to keep things from\n// getting jumbled.  Some other very uncommon logging operations (like\n// changing the destination file for log messages of a given severity) also\n// lock this mutex.  Please be sure that anybody who might possibly need to\n// lock it does so.\nstatic Mutex log_mutex;\n\n// Number of messages sent at each severity.  Under log_mutex.\nint64 LogMessage::num_messages_[NUM_SEVERITIES] = {0, 0, 0, 0};\n\n// Globally disable log writing (if disk is full)\nstatic bool stop_writing = false;\n\nconst char*const LogSeverityNames[NUM_SEVERITIES] = {\n  \"INFO\", \"WARNING\", \"ERROR\", \"FATAL\"\n};\n\n// Has the user called SetExitOnDFatal(true)?\nstatic bool exit_on_dfatal = true;\n\nconst char* GetLogSeverityName(LogSeverity severity) {\n  return LogSeverityNames[severity];\n}\n\nstatic bool SendEmailInternal(const char*dest, const char *subject,\n                              const char*body, bool use_logging);\n\nbase::Logger::~Logger() {\n}\n\nnamespace {\n\n// Encapsulates all file-system related state\nclass LogFileObject : public base::Logger {\n public:\n  LogFileObject(LogSeverity severity, const char* base_filename);\n  ~LogFileObject();\n\n  virtual void Write(bool force_flush, // Should we force a flush here?\n                     time_t timestamp,  // Timestamp for this entry\n                     const char* message,\n                     int message_len);\n\n  // Configuration options\n  void SetBasename(const char* basename);\n  void SetExtension(const char* ext);\n  void SetSymlinkBasename(const char* symlink_basename);\n\n  // Normal flushing routine\n  virtual void Flush();\n\n  // It is the actual file length for the system loggers,\n  // i.e., INFO, ERROR, etc.\n  virtual uint32 LogSize() {\n    MutexLock l(&lock_);\n    return file_length_;\n  }\n\n  // Internal flush routine.  Exposed so that FlushLogFilesUnsafe()\n  // can avoid grabbing a lock.  Usually Flush() calls it after\n  // acquiring lock_.\n  void FlushUnlocked();\n\n private:\n  static const uint32 kRolloverAttemptFrequency = 0x20;\n\n  Mutex lock_;\n  bool base_filename_selected_;\n  string base_filename_;\n  string symlink_basename_;\n  string filename_extension_;     // option users can specify (eg to add port#)\n  FILE* file_;\n  LogSeverity severity_;\n  uint32 bytes_since_flush_;\n  uint32 file_length_;\n  unsigned int rollover_attempt_;\n  int64 next_flush_time_;         // cycle count at which to flush log\n\n  // Actually create a logfile using the value of base_filename_ and the\n  // supplied argument time_pid_string\n  // REQUIRES: lock_ is held\n  bool CreateLogfile(const string& time_pid_string);\n};\n\n}  // namespace\n\nclass LogDestination {\n public:\n  friend class LogMessage;\n  friend void ReprintFatalMessage();\n  friend base::Logger* base::GetLogger(LogSeverity);\n  friend void base::SetLogger(LogSeverity, base::Logger*);\n\n  // These methods are just forwarded to by their global versions.\n  static void SetLogDestination(LogSeverity severity,\n\t\t\t\tconst char* base_filename);\n  static void SetLogSymlink(LogSeverity severity,\n                            const char* symlink_basename);\n  static void AddLogSink(LogSink *destination);\n  static void RemoveLogSink(LogSink *destination);\n  static void SetLogFilenameExtension(const char* filename_extension);\n  static void SetStderrLogging(LogSeverity min_severity);\n  static void SetEmailLogging(LogSeverity min_severity, const char* addresses);\n  static void LogToStderr();\n  // Flush all log files that are at least at the given severity level\n  static void FlushLogFiles(int min_severity);\n  static void FlushLogFilesUnsafe(int min_severity);\n\n  // we set the maximum size of our packet to be 1400, the logic being\n  // to prevent fragmentation.\n  // Really this number is arbitrary.\n  static const int kNetworkBytes = 1400;\n\n  static const string& hostname();\n  static const bool& terminal_supports_color() {\n    return terminal_supports_color_;\n  }\n\n  static void DeleteLogDestinations();\n\n private:\n  LogDestination(LogSeverity severity, const char* base_filename);\n  ~LogDestination() { }\n\n  // Take a log message of a particular severity and log it to stderr\n  // iff it's of a high enough severity to deserve it.\n  static void MaybeLogToStderr(LogSeverity severity, const char* message,\n\t\t\t       size_t len);\n\n  // Take a log message of a particular severity and log it to email\n  // iff it's of a high enough severity to deserve it.\n  static void MaybeLogToEmail(LogSeverity severity, const char* message,\n\t\t\t      size_t len);\n  // Take a log message of a particular severity and log it to a file\n  // iff the base filename is not \"\" (which means \"don't log to me\")\n  static void MaybeLogToLogfile(LogSeverity severity,\n                                time_t timestamp,\n\t\t\t\tconst char* message, size_t len);\n  // Take a log message of a particular severity and log it to the file\n  // for that severity and also for all files with severity less than\n  // this severity.\n  static void LogToAllLogfiles(LogSeverity severity,\n                               time_t timestamp,\n                               const char* message, size_t len);\n\n  // Send logging info to all registered sinks.\n  static void LogToSinks(LogSeverity severity,\n                         const char *full_filename,\n                         const char *base_filename,\n                         int line,\n                         const struct ::tm* tm_time,\n                         const char* message,\n                         size_t message_len);\n\n  // Wait for all registered sinks via WaitTillSent\n  // including the optional one in \"data\".\n  static void WaitForSinks(LogMessage::LogMessageData* data);\n\n  static LogDestination* log_destination(LogSeverity severity);\n\n  LogFileObject fileobject_;\n  base::Logger* logger_;      // Either &fileobject_, or wrapper around it\n\n  static LogDestination* log_destinations_[NUM_SEVERITIES];\n  static LogSeverity email_logging_severity_;\n  static string addresses_;\n  static string hostname_;\n  static bool terminal_supports_color_;\n\n  // arbitrary global logging destinations.\n  static vector<LogSink*>* sinks_;\n\n  // Protects the vector sinks_,\n  // but not the LogSink objects its elements reference.\n  static Mutex sink_mutex_;\n\n  // Disallow\n  LogDestination(const LogDestination&);\n  LogDestination& operator=(const LogDestination&);\n};\n\n// Errors do not get logged to email by default.\nLogSeverity LogDestination::email_logging_severity_ = 99999;\n\nstring LogDestination::addresses_;\nstring LogDestination::hostname_;\n\nvector<LogSink*>* LogDestination::sinks_ = NULL;\nMutex LogDestination::sink_mutex_;\nbool LogDestination::terminal_supports_color_ = TerminalSupportsColor();\n\n/* static */\nconst string& LogDestination::hostname() {\n  if (hostname_.empty()) {\n    GetHostName(&hostname_);\n    if (hostname_.empty()) {\n      hostname_ = \"(unknown)\";\n    }\n  }\n  return hostname_;\n}\n\nLogDestination::LogDestination(LogSeverity severity,\n                               const char* base_filename)\n  : fileobject_(severity, base_filename),\n    logger_(&fileobject_) {\n}\n\ninline void LogDestination::FlushLogFilesUnsafe(int min_severity) {\n  // assume we have the log_mutex or we simply don't care\n  // about it\n  for (int i = min_severity; i < NUM_SEVERITIES; i++) {\n    LogDestination* log = log_destinations_[i];\n    if (log != NULL) {\n      // Flush the base fileobject_ logger directly instead of going\n      // through any wrappers to reduce chance of deadlock.\n      log->fileobject_.FlushUnlocked();\n    }\n  }\n}\n\ninline void LogDestination::FlushLogFiles(int min_severity) {\n  // Prevent any subtle race conditions by wrapping a mutex lock around\n  // all this stuff.\n  MutexLock l(&log_mutex);\n  for (int i = min_severity; i < NUM_SEVERITIES; i++) {\n    LogDestination* log = log_destination(i);\n    if (log != NULL) {\n      log->logger_->Flush();\n    }\n  }\n}\n\ninline void LogDestination::SetLogDestination(LogSeverity severity,\n\t\t\t\t\t      const char* base_filename) {\n  assert(severity >= 0 && severity < NUM_SEVERITIES);\n  // Prevent any subtle race conditions by wrapping a mutex lock around\n  // all this stuff.\n  MutexLock l(&log_mutex);\n  log_destination(severity)->fileobject_.SetBasename(base_filename);\n}\n\ninline void LogDestination::SetLogSymlink(LogSeverity severity,\n                                          const char* symlink_basename) {\n  CHECK_GE(severity, 0);\n  CHECK_LT(severity, NUM_SEVERITIES);\n  MutexLock l(&log_mutex);\n  log_destination(severity)->fileobject_.SetSymlinkBasename(symlink_basename);\n}\n\ninline void LogDestination::AddLogSink(LogSink *destination) {\n  // Prevent any subtle race conditions by wrapping a mutex lock around\n  // all this stuff.\n  MutexLock l(&sink_mutex_);\n  if (!sinks_)  sinks_ = new vector<LogSink*>;\n  sinks_->push_back(destination);\n}\n\ninline void LogDestination::RemoveLogSink(LogSink *destination) {\n  // Prevent any subtle race conditions by wrapping a mutex lock around\n  // all this stuff.\n  MutexLock l(&sink_mutex_);\n  // This doesn't keep the sinks in order, but who cares?\n  if (sinks_) {\n    for (int i = sinks_->size() - 1; i >= 0; i--) {\n      if ((*sinks_)[i] == destination) {\n        (*sinks_)[i] = (*sinks_)[sinks_->size() - 1];\n        sinks_->pop_back();\n        break;\n      }\n    }\n  }\n}\n\ninline void LogDestination::SetLogFilenameExtension(const char* ext) {\n  // Prevent any subtle race conditions by wrapping a mutex lock around\n  // all this stuff.\n  MutexLock l(&log_mutex);\n  for ( int severity = 0; severity < NUM_SEVERITIES; ++severity ) {\n    log_destination(severity)->fileobject_.SetExtension(ext);\n  }\n}\n\ninline void LogDestination::SetStderrLogging(LogSeverity min_severity) {\n  assert(min_severity >= 0 && min_severity < NUM_SEVERITIES);\n  // Prevent any subtle race conditions by wrapping a mutex lock around\n  // all this stuff.\n  MutexLock l(&log_mutex);\n  FLAGS_stderrthreshold = min_severity;\n}\n\ninline void LogDestination::LogToStderr() {\n  // *Don't* put this stuff in a mutex lock, since SetStderrLogging &\n  // SetLogDestination already do the locking!\n  SetStderrLogging(0);            // thus everything is \"also\" logged to stderr\n  for ( int i = 0; i < NUM_SEVERITIES; ++i ) {\n    SetLogDestination(i, \"\");     // \"\" turns off logging to a logfile\n  }\n}\n\ninline void LogDestination::SetEmailLogging(LogSeverity min_severity,\n\t\t\t\t\t    const char* addresses) {\n  assert(min_severity >= 0 && min_severity < NUM_SEVERITIES);\n  // Prevent any subtle race conditions by wrapping a mutex lock around\n  // all this stuff.\n  MutexLock l(&log_mutex);\n  LogDestination::email_logging_severity_ = min_severity;\n  LogDestination::addresses_ = addresses;\n}\n\nstatic void ColoredWriteToStderr(LogSeverity severity,\n                                 const char* message, size_t len) {\n  const GLogColor color =\n      (LogDestination::terminal_supports_color() && FLAGS_colorlogtostderr) ?\n      SeverityToColor(severity) : COLOR_DEFAULT;\n\n  // Avoid using cerr from this module since we may get called during\n  // exit code, and cerr may be partially or fully destroyed by then.\n  if (COLOR_DEFAULT == color) {\n    fwrite(message, len, 1, stderr);\n    return;\n  }\n#ifdef OS_WINDOWS\n  const HANDLE stderr_handle = GetStdHandle(STD_ERROR_HANDLE);\n\n  // Gets the current text color.\n  CONSOLE_SCREEN_BUFFER_INFO buffer_info;\n  GetConsoleScreenBufferInfo(stderr_handle, &buffer_info);\n  const WORD old_color_attrs = buffer_info.wAttributes;\n\n  // We need to flush the stream buffers into the console before each\n  // SetConsoleTextAttribute call lest it affect the text that is already\n  // printed but has not yet reached the console.\n  fflush(stderr);\n  SetConsoleTextAttribute(stderr_handle,\n                          GetColorAttribute(color) | FOREGROUND_INTENSITY);\n  fwrite(message, len, 1, stderr);\n  fflush(stderr);\n  // Restores the text color.\n  SetConsoleTextAttribute(stderr_handle, old_color_attrs);\n#else\n  fprintf(stderr, \"\\033[0;3%sm\", GetAnsiColorCode(color));\n  fwrite(message, len, 1, stderr);\n  fprintf(stderr, \"\\033[m\");  // Resets the terminal to default.\n#endif  // OS_WINDOWS\n}\n\nstatic void WriteToStderr(const char* message, size_t len) {\n  // Avoid using cerr from this module since we may get called during\n  // exit code, and cerr may be partially or fully destroyed by then.\n  fwrite(message, len, 1, stderr);\n}\n\ninline void LogDestination::MaybeLogToStderr(LogSeverity severity,\n\t\t\t\t\t     const char* message, size_t len) {\n  if ((severity >= FLAGS_stderrthreshold) || FLAGS_alsologtostderr) {\n    ColoredWriteToStderr(severity, message, len);\n#ifdef OS_WINDOWS\n    // On Windows, also output to the debugger\n    ::OutputDebugStringA(string(message,len).c_str());\n#endif\n  }\n}\n\n\ninline void LogDestination::MaybeLogToEmail(LogSeverity severity,\n\t\t\t\t\t    const char* message, size_t len) {\n  if (severity >= email_logging_severity_ ||\n      severity >= FLAGS_logemaillevel) {\n    string to(FLAGS_alsologtoemail);\n    if (!addresses_.empty()) {\n      if (!to.empty()) {\n        to += \",\";\n      }\n      to += addresses_;\n    }\n    const string subject(string(\"[LOG] \") + LogSeverityNames[severity] + \": \" +\n                         glog_internal_namespace_::ProgramInvocationShortName());\n    string body(hostname());\n    body += \"\\n\\n\";\n    body.append(message, len);\n\n    // should NOT use SendEmail().  The caller of this function holds the\n    // log_mutex and SendEmail() calls LOG/VLOG which will block trying to\n    // acquire the log_mutex object.  Use SendEmailInternal() and set\n    // use_logging to false.\n    SendEmailInternal(to.c_str(), subject.c_str(), body.c_str(), false);\n  }\n}\n\n\ninline void LogDestination::MaybeLogToLogfile(LogSeverity severity,\n                                              time_t timestamp,\n\t\t\t\t\t      const char* message,\n\t\t\t\t\t      size_t len) {\n  const bool should_flush = severity > FLAGS_logbuflevel;\n  LogDestination* destination = log_destination(severity);\n  destination->logger_->Write(should_flush, timestamp, message, len);\n}\n\ninline void LogDestination::LogToAllLogfiles(LogSeverity severity,\n                                             time_t timestamp,\n                                             const char* message,\n                                             size_t len) {\n\n  if ( FLAGS_logtostderr ) {           // global flag: never log to file\n    ColoredWriteToStderr(severity, message, len);\n  } else {\n    for (int i = severity; i >= 0; --i)\n      LogDestination::MaybeLogToLogfile(i, timestamp, message, len);\n  }\n}\n\ninline void LogDestination::LogToSinks(LogSeverity severity,\n                                       const char *full_filename,\n                                       const char *base_filename,\n                                       int line,\n                                       const struct ::tm* tm_time,\n                                       const char* message,\n                                       size_t message_len) {\n  ReaderMutexLock l(&sink_mutex_);\n  if (sinks_) {\n    for (int i = sinks_->size() - 1; i >= 0; i--) {\n      (*sinks_)[i]->send(severity, full_filename, base_filename,\n                         line, tm_time, message, message_len);\n    }\n  }\n}\n\ninline void LogDestination::WaitForSinks(LogMessage::LogMessageData* data) {\n  ReaderMutexLock l(&sink_mutex_);\n  if (sinks_) {\n    for (int i = sinks_->size() - 1; i >= 0; i--) {\n      (*sinks_)[i]->WaitTillSent();\n    }\n  }\n  const bool send_to_sink =\n      (data->send_method_ == &LogMessage::SendToSink) ||\n      (data->send_method_ == &LogMessage::SendToSinkAndLog);\n  if (send_to_sink && data->sink_ != NULL) {\n    data->sink_->WaitTillSent();\n  }\n}\n\nLogDestination* LogDestination::log_destinations_[NUM_SEVERITIES];\n\ninline LogDestination* LogDestination::log_destination(LogSeverity severity) {\n  assert(severity >=0 && severity < NUM_SEVERITIES);\n  if (!log_destinations_[severity]) {\n    log_destinations_[severity] = new LogDestination(severity, NULL);\n  }\n  return log_destinations_[severity];\n}\n\nvoid LogDestination::DeleteLogDestinations() {\n  for (int severity = 0; severity < NUM_SEVERITIES; ++severity) {\n    delete log_destinations_[severity];\n    log_destinations_[severity] = NULL;\n  }\n  MutexLock l(&sink_mutex_);\n  delete sinks_;\n  sinks_ = NULL;\n}\n\nnamespace {\n\nLogFileObject::LogFileObject(LogSeverity severity,\n                             const char* base_filename)\n  : base_filename_selected_(base_filename != NULL),\n    base_filename_((base_filename != NULL) ? base_filename : \"\"),\n    symlink_basename_(glog_internal_namespace_::ProgramInvocationShortName()),\n    filename_extension_(),\n    file_(NULL),\n    severity_(severity),\n    bytes_since_flush_(0),\n    file_length_(0),\n    rollover_attempt_(kRolloverAttemptFrequency-1),\n    next_flush_time_(0) {\n  assert(severity >= 0);\n  assert(severity < NUM_SEVERITIES);\n}\n\nLogFileObject::~LogFileObject() {\n  MutexLock l(&lock_);\n  if (file_ != NULL) {\n    fclose(file_);\n    file_ = NULL;\n  }\n}\n\nvoid LogFileObject::SetBasename(const char* basename) {\n  MutexLock l(&lock_);\n  base_filename_selected_ = true;\n  if (base_filename_ != basename) {\n    // Get rid of old log file since we are changing names\n    if (file_ != NULL) {\n      fclose(file_);\n      file_ = NULL;\n      rollover_attempt_ = kRolloverAttemptFrequency-1;\n    }\n    base_filename_ = basename;\n  }\n}\n\nvoid LogFileObject::SetExtension(const char* ext) {\n  MutexLock l(&lock_);\n  if (filename_extension_ != ext) {\n    // Get rid of old log file since we are changing names\n    if (file_ != NULL) {\n      fclose(file_);\n      file_ = NULL;\n      rollover_attempt_ = kRolloverAttemptFrequency-1;\n    }\n    filename_extension_ = ext;\n  }\n}\n\nvoid LogFileObject::SetSymlinkBasename(const char* symlink_basename) {\n  MutexLock l(&lock_);\n  symlink_basename_ = symlink_basename;\n}\n\nvoid LogFileObject::Flush() {\n  MutexLock l(&lock_);\n  FlushUnlocked();\n}\n\nvoid LogFileObject::FlushUnlocked(){\n  if (file_ != NULL) {\n    fflush(file_);\n    bytes_since_flush_ = 0;\n  }\n  // Figure out when we are due for another flush.\n  const int64 next = (FLAGS_logbufsecs\n                      * static_cast<int64>(1000000));  // in usec\n  next_flush_time_ = CycleClock_Now() + UsecToCycles(next);\n}\n\nbool LogFileObject::CreateLogfile(const string& time_pid_string) {\n  string string_filename = base_filename_+filename_extension_+\n                           time_pid_string;\n  const char* filename = string_filename.c_str();\n  int fd = open(filename, O_WRONLY | O_CREAT | O_EXCL, FLAGS_logfile_mode);\n  if (fd == -1) return false;\n#ifdef HAVE_FCNTL\n  // Mark the file close-on-exec. We don't really care if this fails\n  fcntl(fd, F_SETFD, FD_CLOEXEC);\n#endif\n\n  file_ = fdopen(fd, \"a\");  // Make a FILE*.\n  if (file_ == NULL) {  // Man, we're screwed!\n    close(fd);\n    unlink(filename);  // Erase the half-baked evidence: an unusable log file\n    return false;\n  }\n\n  // We try to create a symlink called <program_name>.<severity>,\n  // which is easier to use.  (Every time we create a new logfile,\n  // we destroy the old symlink and create a new one, so it always\n  // points to the latest logfile.)  If it fails, we're sad but it's\n  // no error.\n  if (!symlink_basename_.empty()) {\n    // take directory from filename\n    const char* slash = strrchr(filename, PATH_SEPARATOR);\n    const string linkname =\n      symlink_basename_ + '.' + LogSeverityNames[severity_];\n    string linkpath;\n    if ( slash ) linkpath = string(filename, slash-filename+1);  // get dirname\n    linkpath += linkname;\n    unlink(linkpath.c_str());                    // delete old one if it exists\n\n#if defined(OS_WINDOWS)\n    // TODO(hamaji): Create lnk file on Windows?\n#elif defined(HAVE_UNISTD_H)\n    // We must have unistd.h.\n    // Make the symlink be relative (in the same dir) so that if the\n    // entire log directory gets relocated the link is still valid.\n    const char *linkdest = slash ? (slash + 1) : filename;\n    if (symlink(linkdest, linkpath.c_str()) != 0) {\n      // silently ignore failures\n    }\n\n    // Make an additional link to the log file in a place specified by\n    // FLAGS_log_link, if indicated\n    if (!FLAGS_log_link.empty()) {\n      linkpath = FLAGS_log_link + \"/\" + linkname;\n      unlink(linkpath.c_str());                  // delete old one if it exists\n      if (symlink(filename, linkpath.c_str()) != 0) {\n        // silently ignore failures\n      }\n    }\n#endif\n  }\n\n  return true;  // Everything worked\n}\n\nvoid LogFileObject::Write(bool force_flush,\n                          time_t timestamp,\n                          const char* message,\n                          int message_len) {\n  MutexLock l(&lock_);\n\n  // We don't log if the base_name_ is \"\" (which means \"don't write\")\n  if (base_filename_selected_ && base_filename_.empty()) {\n    return;\n  }\n\n  if (static_cast<int>(file_length_ >> 20) >= MaxLogSize() ||\n      PidHasChanged()) {\n    if (file_ != NULL) fclose(file_);\n    file_ = NULL;\n    file_length_ = bytes_since_flush_ = 0;\n    rollover_attempt_ = kRolloverAttemptFrequency-1;\n  }\n\n  // If there's no destination file, make one before outputting\n  if (file_ == NULL) {\n    // Try to rollover the log file every 32 log messages.  The only time\n    // this could matter would be when we have trouble creating the log\n    // file.  If that happens, we'll lose lots of log messages, of course!\n    if (++rollover_attempt_ != kRolloverAttemptFrequency) return;\n    rollover_attempt_ = 0;\n\n    struct ::tm tm_time;\n    localtime_r(&timestamp, &tm_time);\n\n    // The logfile's filename will have the date/time & pid in it\n    ostringstream time_pid_stream;\n    time_pid_stream.fill('0');\n    time_pid_stream << 1900+tm_time.tm_year\n                    << setw(2) << 1+tm_time.tm_mon\n                    << setw(2) << tm_time.tm_mday\n                    << '-'\n                    << setw(2) << tm_time.tm_hour\n                    << setw(2) << tm_time.tm_min\n                    << setw(2) << tm_time.tm_sec\n                    << '.'\n                    << GetMainThreadPid();\n    const string& time_pid_string = time_pid_stream.str();\n\n    if (base_filename_selected_) {\n      if (!CreateLogfile(time_pid_string)) {\n        perror(\"Could not create log file\");\n        fprintf(stderr, \"COULD NOT CREATE LOGFILE '%s'!\\n\",\n                time_pid_string.c_str());\n        return;\n      }\n    } else {\n      // If no base filename for logs of this severity has been set, use a\n      // default base filename of\n      // \"<program name>.<hostname>.<user name>.log.<severity level>.\".  So\n      // logfiles will have names like\n      // webserver.examplehost.root.log.INFO.19990817-150000.4354, where\n      // 19990817 is a date (1999 August 17), 150000 is a time (15:00:00),\n      // and 4354 is the pid of the logging process.  The date & time reflect\n      // when the file was created for output.\n      //\n      // Where does the file get put?  Successively try the directories\n      // \"/tmp\", and \".\"\n      string stripped_filename(\n          glog_internal_namespace_::ProgramInvocationShortName());\n      string hostname;\n      GetHostName(&hostname);\n\n      string uidname = MyUserName();\n      // We should not call CHECK() here because this function can be\n      // called after holding on to log_mutex. We don't want to\n      // attempt to hold on to the same mutex, and get into a\n      // deadlock. Simply use a name like invalid-user.\n      if (uidname.empty()) uidname = \"invalid-user\";\n\n      stripped_filename = stripped_filename+'.'+hostname+'.'\n                          +uidname+\".log.\"\n                          +LogSeverityNames[severity_]+'.';\n      // We're going to (potentially) try to put logs in several different dirs\n      const vector<string> & log_dirs = GetLoggingDirectories();\n\n      // Go through the list of dirs, and try to create the log file in each\n      // until we succeed or run out of options\n      bool success = false;\n      for (vector<string>::const_iterator dir = log_dirs.begin();\n           dir != log_dirs.end();\n           ++dir) {\n        base_filename_ = *dir + \"/\" + stripped_filename;\n        if ( CreateLogfile(time_pid_string) ) {\n          success = true;\n          break;\n        }\n      }\n      // If we never succeeded, we have to give up\n      if ( success == false ) {\n        perror(\"Could not create logging file\");\n        fprintf(stderr, \"COULD NOT CREATE A LOGGINGFILE %s!\",\n                time_pid_string.c_str());\n        return;\n      }\n    }\n\n    // Write a header message into the log file\n    ostringstream file_header_stream;\n    file_header_stream.fill('0');\n    file_header_stream << \"Log file created at: \"\n                       << 1900+tm_time.tm_year << '/'\n                       << setw(2) << 1+tm_time.tm_mon << '/'\n                       << setw(2) << tm_time.tm_mday\n                       << ' '\n                       << setw(2) << tm_time.tm_hour << ':'\n                       << setw(2) << tm_time.tm_min << ':'\n                       << setw(2) << tm_time.tm_sec << '\\n'\n                       << \"Running on machine: \"\n                       << LogDestination::hostname() << '\\n'\n                       << \"Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu \"\n                       << \"threadid file:line] msg\" << '\\n';\n    const string& file_header_string = file_header_stream.str();\n\n    const int header_len = file_header_string.size();\n    fwrite(file_header_string.data(), 1, header_len, file_);\n    file_length_ += header_len;\n    bytes_since_flush_ += header_len;\n  }\n\n  // Write to LOG file\n  if ( !stop_writing ) {\n    // fwrite() doesn't return an error when the disk is full, for\n    // messages that are less than 4096 bytes. When the disk is full,\n    // it returns the message length for messages that are less than\n    // 4096 bytes. fwrite() returns 4096 for message lengths that are\n    // greater than 4096, thereby indicating an error.\n    errno = 0;\n    fwrite(message, 1, message_len, file_);\n    if ( FLAGS_stop_logging_if_full_disk &&\n         errno == ENOSPC ) {  // disk full, stop writing to disk\n      stop_writing = true;  // until the disk is\n      return;\n    } else {\n      file_length_ += message_len;\n      bytes_since_flush_ += message_len;\n    }\n  } else {\n    if ( CycleClock_Now() >= next_flush_time_ )\n      stop_writing = false;  // check to see if disk has free space.\n    return;  // no need to flush\n  }\n\n  // See important msgs *now*.  Also, flush logs at least every 10^6 chars,\n  // or every \"FLAGS_logbufsecs\" seconds.\n  if ( force_flush ||\n       (bytes_since_flush_ >= 1000000) ||\n       (CycleClock_Now() >= next_flush_time_) ) {\n    FlushUnlocked();\n#ifdef OS_LINUX\n    if (FLAGS_drop_log_memory) {\n      if (file_length_ >= logging::kPageSize) {\n        // don't evict the most recent page\n        uint32 len = file_length_ & ~(logging::kPageSize - 1);\n        posix_fadvise(fileno(file_), 0, len, POSIX_FADV_DONTNEED);\n      }\n    }\n#endif\n  }\n}\n\n}  // namespace\n\n\n// Static log data space to avoid alloc failures in a LOG(FATAL)\n//\n// Since multiple threads may call LOG(FATAL), and we want to preserve\n// the data from the first call, we allocate two sets of space.  One\n// for exclusive use by the first thread, and one for shared use by\n// all other threads.\nstatic Mutex fatal_msg_lock;\nstatic CrashReason crash_reason;\nstatic bool fatal_msg_exclusive = true;\nstatic LogMessage::LogMessageData fatal_msg_data_exclusive;\nstatic LogMessage::LogMessageData fatal_msg_data_shared;\n\nLogMessage::LogMessageData::LogMessageData()\n  : stream_(message_text_, LogMessage::kMaxLogMessageLen, 0) {\n}\n\nLogMessage::LogMessage(const char* file, int line, LogSeverity severity,\n                       int ctr, void (LogMessage::*send_method)())\n    : allocated_(NULL) {\n  Init(file, line, severity, send_method);\n  data_->stream_.set_ctr(ctr);\n}\n\nLogMessage::LogMessage(const char* file, int line,\n                       const CheckOpString& result)\n    : allocated_(NULL) {\n  Init(file, line, GLOG_FATAL, &LogMessage::SendToLog);\n  stream() << \"Check failed: \" << (*result.str_) << \" \";\n}\n\nLogMessage::LogMessage(const char* file, int line)\n    : allocated_(NULL) {\n  Init(file, line, GLOG_INFO, &LogMessage::SendToLog);\n}\n\nLogMessage::LogMessage(const char* file, int line, LogSeverity severity)\n    : allocated_(NULL) {\n  Init(file, line, severity, &LogMessage::SendToLog);\n}\n\nLogMessage::LogMessage(const char* file, int line, LogSeverity severity,\n                       LogSink* sink, bool also_send_to_log)\n    : allocated_(NULL) {\n  Init(file, line, severity, also_send_to_log ? &LogMessage::SendToSinkAndLog :\n                                                &LogMessage::SendToSink);\n  data_->sink_ = sink;  // override Init()'s setting to NULL\n}\n\nLogMessage::LogMessage(const char* file, int line, LogSeverity severity,\n                       vector<string> *outvec)\n    : allocated_(NULL) {\n  Init(file, line, severity, &LogMessage::SaveOrSendToLog);\n  data_->outvec_ = outvec; // override Init()'s setting to NULL\n}\n\nLogMessage::LogMessage(const char* file, int line, LogSeverity severity,\n                       string *message)\n    : allocated_(NULL) {\n  Init(file, line, severity, &LogMessage::WriteToStringAndLog);\n  data_->message_ = message;  // override Init()'s setting to NULL\n}\n\nvoid LogMessage::Init(const char* file,\n                      int line,\n                      LogSeverity severity,\n                      void (LogMessage::*send_method)()) {\n  allocated_ = NULL;\n  if (severity != GLOG_FATAL || !exit_on_dfatal) {\n    allocated_ = new LogMessageData();\n    data_ = allocated_;\n    data_->first_fatal_ = false;\n  } else {\n    MutexLock l(&fatal_msg_lock);\n    if (fatal_msg_exclusive) {\n      fatal_msg_exclusive = false;\n      data_ = &fatal_msg_data_exclusive;\n      data_->first_fatal_ = true;\n    } else {\n      data_ = &fatal_msg_data_shared;\n      data_->first_fatal_ = false;\n    }\n  }\n\n  stream().fill('0');\n  data_->preserved_errno_ = errno;\n  data_->severity_ = severity;\n  data_->line_ = line;\n  data_->send_method_ = send_method;\n  data_->sink_ = NULL;\n  data_->outvec_ = NULL;\n  WallTime now = WallTime_Now();\n  data_->timestamp_ = static_cast<time_t>(now);\n  localtime_r(&data_->timestamp_, &data_->tm_time_);\n  int usecs = static_cast<int>((now - data_->timestamp_) * 1000000);\n  RawLog__SetLastTime(data_->tm_time_, usecs);\n\n  data_->num_chars_to_log_ = 0;\n  data_->num_chars_to_syslog_ = 0;\n  data_->basename_ = const_basename(file);\n  data_->fullname_ = file;\n  data_->has_been_flushed_ = false;\n\n  // If specified, prepend a prefix to each line.  For example:\n  //    I1018 160715 f5d4fbb0 logging.cc:1153]\n  //    (log level, GMT month, date, time, thread_id, file basename, line)\n  // We exclude the thread_id for the default thread.\n  if (FLAGS_log_prefix && (line != kNoLogPrefix)) {\n    stream() << LogSeverityNames[severity][0]\n             << setw(2) << 1+data_->tm_time_.tm_mon\n             << setw(2) << data_->tm_time_.tm_mday\n             << ' '\n             << setw(2) << data_->tm_time_.tm_hour  << ':'\n             << setw(2) << data_->tm_time_.tm_min   << ':'\n             << setw(2) << data_->tm_time_.tm_sec   << \".\"\n             << setw(6) << usecs\n             << ' '\n             << setfill(' ') << setw(5)\n             << static_cast<unsigned int>(GetTID()) << setfill('0')\n             << ' '\n             << data_->basename_ << ':' << data_->line_ << \"] \";\n  }\n  data_->num_prefix_chars_ = data_->stream_.pcount();\n\n  if (!FLAGS_log_backtrace_at.empty()) {\n    char fileline[128];\n    snprintf(fileline, sizeof(fileline), \"%s:%d\", data_->basename_, line);\n#ifdef HAVE_STACKTRACE\n    if (!strcmp(FLAGS_log_backtrace_at.c_str(), fileline)) {\n      string stacktrace;\n      DumpStackTraceToString(&stacktrace);\n      stream() << \" (stacktrace:\\n\" << stacktrace << \") \";\n    }\n#endif\n  }\n}\n\nLogMessage::~LogMessage() {\n  Flush();\n  delete allocated_;\n}\n\nint LogMessage::preserved_errno() const {\n  return data_->preserved_errno_;\n}\n\nostream& LogMessage::stream() {\n  return data_->stream_;\n}\n\n// Flush buffered message, called by the destructor, or any other function\n// that needs to synchronize the log.\nvoid LogMessage::Flush() {\n  if (data_->has_been_flushed_ || data_->severity_ < FLAGS_minloglevel)\n    return;\n\n  data_->num_chars_to_log_ = data_->stream_.pcount();\n  data_->num_chars_to_syslog_ =\n    data_->num_chars_to_log_ - data_->num_prefix_chars_;\n\n  // Do we need to add a \\n to the end of this message?\n  bool append_newline =\n      (data_->message_text_[data_->num_chars_to_log_-1] != '\\n');\n  char original_final_char = '\\0';\n\n  // If we do need to add a \\n, we'll do it by violating the memory of the\n  // ostrstream buffer.  This is quick, and we'll make sure to undo our\n  // modification before anything else is done with the ostrstream.  It\n  // would be preferable not to do things this way, but it seems to be\n  // the best way to deal with this.\n  if (append_newline) {\n    original_final_char = data_->message_text_[data_->num_chars_to_log_];\n    data_->message_text_[data_->num_chars_to_log_++] = '\\n';\n  }\n\n  // Prevent any subtle race conditions by wrapping a mutex lock around\n  // the actual logging action per se.\n  {\n    MutexLock l(&log_mutex);\n    (this->*(data_->send_method_))();\n    ++num_messages_[static_cast<int>(data_->severity_)];\n  }\n  LogDestination::WaitForSinks(data_);\n\n  if (append_newline) {\n    // Fix the ostrstream back how it was before we screwed with it.\n    // It's 99.44% certain that we don't need to worry about doing this.\n    data_->message_text_[data_->num_chars_to_log_-1] = original_final_char;\n  }\n\n  // If errno was already set before we enter the logging call, we'll\n  // set it back to that value when we return from the logging call.\n  // It happens often that we log an error message after a syscall\n  // failure, which can potentially set the errno to some other\n  // values.  We would like to preserve the original errno.\n  if (data_->preserved_errno_ != 0) {\n    errno = data_->preserved_errno_;\n  }\n\n  // Note that this message is now safely logged.  If we're asked to flush\n  // again, as a result of destruction, say, we'll do nothing on future calls.\n  data_->has_been_flushed_ = true;\n}\n\n// Copy of first FATAL log message so that we can print it out again\n// after all the stack traces.  To preserve legacy behavior, we don't\n// use fatal_msg_data_exclusive.\nstatic time_t fatal_time;\nstatic char fatal_message[256];\n\nvoid ReprintFatalMessage() {\n  if (fatal_message[0]) {\n    const int n = strlen(fatal_message);\n    if (!FLAGS_logtostderr) {\n      // Also write to stderr (don't color to avoid terminal checks)\n      WriteToStderr(fatal_message, n);\n    }\n    LogDestination::LogToAllLogfiles(GLOG_ERROR, fatal_time, fatal_message, n);\n  }\n}\n\n// L >= log_mutex (callers must hold the log_mutex).\nvoid LogMessage::SendToLog() EXCLUSIVE_LOCKS_REQUIRED(log_mutex) {\n  static bool already_warned_before_initgoogle = false;\n\n  log_mutex.AssertHeld();\n\n  RAW_DCHECK(data_->num_chars_to_log_ > 0 &&\n             data_->message_text_[data_->num_chars_to_log_-1] == '\\n', \"\");\n\n  // Messages of a given severity get logged to lower severity logs, too\n\n  if (!already_warned_before_initgoogle && !IsGoogleLoggingInitialized()) {\n    const char w[] = \"WARNING: Logging before InitGoogleLogging() is \"\n                     \"written to STDERR\\n\";\n    WriteToStderr(w, strlen(w));\n    already_warned_before_initgoogle = true;\n  }\n\n  // global flag: never log to file if set.  Also -- don't log to a\n  // file if we haven't parsed the command line flags to get the\n  // program name.\n  if (FLAGS_logtostderr || !IsGoogleLoggingInitialized()) {\n    ColoredWriteToStderr(data_->severity_,\n                         data_->message_text_, data_->num_chars_to_log_);\n\n    // this could be protected by a flag if necessary.\n    LogDestination::LogToSinks(data_->severity_,\n                               data_->fullname_, data_->basename_,\n                               data_->line_, &data_->tm_time_,\n                               data_->message_text_ + data_->num_prefix_chars_,\n                               (data_->num_chars_to_log_ -\n                                data_->num_prefix_chars_ - 1));\n  } else {\n\n    // log this message to all log files of severity <= severity_\n    LogDestination::LogToAllLogfiles(data_->severity_, data_->timestamp_,\n                                     data_->message_text_,\n                                     data_->num_chars_to_log_);\n\n    LogDestination::MaybeLogToStderr(data_->severity_, data_->message_text_,\n                                     data_->num_chars_to_log_);\n    LogDestination::MaybeLogToEmail(data_->severity_, data_->message_text_,\n                                    data_->num_chars_to_log_);\n    LogDestination::LogToSinks(data_->severity_,\n                               data_->fullname_, data_->basename_,\n                               data_->line_, &data_->tm_time_,\n                               data_->message_text_ + data_->num_prefix_chars_,\n                               (data_->num_chars_to_log_\n                                - data_->num_prefix_chars_ - 1));\n    // NOTE: -1 removes trailing \\n\n  }\n\n  // If we log a FATAL message, flush all the log destinations, then toss\n  // a signal for others to catch. We leave the logs in a state that\n  // someone else can use them (as long as they flush afterwards)\n  if (data_->severity_ == GLOG_FATAL && exit_on_dfatal) {\n    if (data_->first_fatal_) {\n      // Store crash information so that it is accessible from within signal\n      // handlers that may be invoked later.\n      RecordCrashReason(&crash_reason);\n      SetCrashReason(&crash_reason);\n\n      // Store shortened fatal message for other logs and GWQ status\n      const int copy = min<int>(data_->num_chars_to_log_,\n                                sizeof(fatal_message)-1);\n      memcpy(fatal_message, data_->message_text_, copy);\n      fatal_message[copy] = '\\0';\n      fatal_time = data_->timestamp_;\n    }\n\n    if (!FLAGS_logtostderr) {\n      for (int i = 0; i < NUM_SEVERITIES; ++i) {\n        if ( LogDestination::log_destinations_[i] )\n          LogDestination::log_destinations_[i]->logger_->Write(true, 0, \"\", 0);\n      }\n    }\n\n    // release the lock that our caller (directly or indirectly)\n    // LogMessage::~LogMessage() grabbed so that signal handlers\n    // can use the logging facility. Alternately, we could add\n    // an entire unsafe logging interface to bypass locking\n    // for signal handlers but this seems simpler.\n    log_mutex.Unlock();\n    LogDestination::WaitForSinks(data_);\n\n    const char* message = \"*** Check failure stack trace: ***\\n\";\n    if (write(STDERR_FILENO, message, strlen(message)) < 0) {\n      // Ignore errors.\n    }\n    Fail();\n  }\n}\n\nvoid LogMessage::RecordCrashReason(\n    glog_internal_namespace_::CrashReason* reason) {\n  reason->filename = fatal_msg_data_exclusive.fullname_;\n  reason->line_number = fatal_msg_data_exclusive.line_;\n  reason->message = fatal_msg_data_exclusive.message_text_ +\n                    fatal_msg_data_exclusive.num_prefix_chars_;\n#ifdef HAVE_STACKTRACE\n  // Retrieve the stack trace, omitting the logging frames that got us here.\n  reason->depth = GetStackTrace(reason->stack, ARRAYSIZE(reason->stack), 4);\n#else\n  reason->depth = 0;\n#endif\n}\n\n#ifdef HAVE___ATTRIBUTE__\n# define ATTRIBUTE_NORETURN __attribute__((noreturn))\n#else\n# define ATTRIBUTE_NORETURN\n#endif\n\nstatic void logging_fail() ATTRIBUTE_NORETURN;\n\nstatic void logging_fail() {\n#if defined(_DEBUG) && defined(_MSC_VER)\n  // When debugging on windows, avoid the obnoxious dialog and make\n  // it possible to continue past a LOG(FATAL) in the debugger\n  __debugbreak();\n#else\n  abort();\n#endif\n}\n\ntypedef void (*logging_fail_func_t)() ATTRIBUTE_NORETURN;\n\nGOOGLE_GLOG_DLL_DECL\nlogging_fail_func_t g_logging_fail_func = &logging_fail;\n\nvoid InstallFailureFunction(void (*fail_func)()) {\n  g_logging_fail_func = (logging_fail_func_t)fail_func;\n}\n\nvoid LogMessage::Fail() {\n  g_logging_fail_func();\n}\n\n// L >= log_mutex (callers must hold the log_mutex).\nvoid LogMessage::SendToSink() EXCLUSIVE_LOCKS_REQUIRED(log_mutex) {\n  if (data_->sink_ != NULL) {\n    RAW_DCHECK(data_->num_chars_to_log_ > 0 &&\n               data_->message_text_[data_->num_chars_to_log_-1] == '\\n', \"\");\n    data_->sink_->send(data_->severity_, data_->fullname_, data_->basename_,\n                       data_->line_, &data_->tm_time_,\n                       data_->message_text_ + data_->num_prefix_chars_,\n                       (data_->num_chars_to_log_ -\n                        data_->num_prefix_chars_ - 1));\n  }\n}\n\n// L >= log_mutex (callers must hold the log_mutex).\nvoid LogMessage::SendToSinkAndLog() EXCLUSIVE_LOCKS_REQUIRED(log_mutex) {\n  SendToSink();\n  SendToLog();\n}\n\n// L >= log_mutex (callers must hold the log_mutex).\nvoid LogMessage::SaveOrSendToLog() EXCLUSIVE_LOCKS_REQUIRED(log_mutex) {\n  if (data_->outvec_ != NULL) {\n    RAW_DCHECK(data_->num_chars_to_log_ > 0 &&\n               data_->message_text_[data_->num_chars_to_log_-1] == '\\n', \"\");\n    // Omit prefix of message and trailing newline when recording in outvec_.\n    const char *start = data_->message_text_ + data_->num_prefix_chars_;\n    int len = data_->num_chars_to_log_ - data_->num_prefix_chars_ - 1;\n    data_->outvec_->push_back(string(start, len));\n  } else {\n    SendToLog();\n  }\n}\n\nvoid LogMessage::WriteToStringAndLog() EXCLUSIVE_LOCKS_REQUIRED(log_mutex) {\n  if (data_->message_ != NULL) {\n    RAW_DCHECK(data_->num_chars_to_log_ > 0 &&\n               data_->message_text_[data_->num_chars_to_log_-1] == '\\n', \"\");\n    // Omit prefix of message and trailing newline when writing to message_.\n    const char *start = data_->message_text_ + data_->num_prefix_chars_;\n    int len = data_->num_chars_to_log_ - data_->num_prefix_chars_ - 1;\n    data_->message_->assign(start, len);\n  }\n  SendToLog();\n}\n\n// L >= log_mutex (callers must hold the log_mutex).\nvoid LogMessage::SendToSyslogAndLog() {\n#ifdef HAVE_SYSLOG_H\n  // Before any calls to syslog(), make a single call to openlog()\n  static bool openlog_already_called = false;\n  if (!openlog_already_called) {\n    openlog(glog_internal_namespace_::ProgramInvocationShortName(),\n            LOG_CONS | LOG_NDELAY | LOG_PID,\n            LOG_USER);\n    openlog_already_called = true;\n  }\n\n  // This array maps Google severity levels to syslog levels\n  const int SEVERITY_TO_LEVEL[] = { LOG_INFO, LOG_WARNING, LOG_ERR, LOG_EMERG };\n  syslog(LOG_USER | SEVERITY_TO_LEVEL[static_cast<int>(data_->severity_)], \"%.*s\",\n         int(data_->num_chars_to_syslog_),\n         data_->message_text_ + data_->num_prefix_chars_);\n  SendToLog();\n#else\n  LOG(ERROR) << \"No syslog support: message=\" << data_->message_text_;\n#endif\n}\n\nbase::Logger* base::GetLogger(LogSeverity severity) {\n  MutexLock l(&log_mutex);\n  return LogDestination::log_destination(severity)->logger_;\n}\n\nvoid base::SetLogger(LogSeverity severity, base::Logger* logger) {\n  MutexLock l(&log_mutex);\n  LogDestination::log_destination(severity)->logger_ = logger;\n}\n\n// L < log_mutex.  Acquires and releases mutex_.\nint64 LogMessage::num_messages(int severity) {\n  MutexLock l(&log_mutex);\n  return num_messages_[severity];\n}\n\n// Output the COUNTER value. This is only valid if ostream is a\n// LogStream.\nostream& operator<<(ostream &os, const PRIVATE_Counter&) {\n#ifdef DISABLE_RTTI\n  LogMessage::LogStream *log = static_cast<LogMessage::LogStream*>(&os);\n#else\n  LogMessage::LogStream *log = dynamic_cast<LogMessage::LogStream*>(&os);\n#endif\n  CHECK(log && log == log->self())\n      << \"You must not use COUNTER with non-glog ostream\";\n  os << log->ctr();\n  return os;\n}\n\nErrnoLogMessage::ErrnoLogMessage(const char* file, int line,\n                                 LogSeverity severity, int ctr,\n                                 void (LogMessage::*send_method)())\n    : LogMessage(file, line, severity, ctr, send_method) {\n}\n\nErrnoLogMessage::~ErrnoLogMessage() {\n  // Don't access errno directly because it may have been altered\n  // while streaming the message.\n  stream() << \": \" << StrError(preserved_errno()) << \" [\"\n           << preserved_errno() << \"]\";\n}\n\nvoid FlushLogFiles(LogSeverity min_severity) {\n  LogDestination::FlushLogFiles(min_severity);\n}\n\nvoid FlushLogFilesUnsafe(LogSeverity min_severity) {\n  LogDestination::FlushLogFilesUnsafe(min_severity);\n}\n\nvoid SetLogDestination(LogSeverity severity, const char* base_filename) {\n  LogDestination::SetLogDestination(severity, base_filename);\n}\n\nvoid SetLogSymlink(LogSeverity severity, const char* symlink_basename) {\n  LogDestination::SetLogSymlink(severity, symlink_basename);\n}\n\nLogSink::~LogSink() {\n}\n\nvoid LogSink::WaitTillSent() {\n  // noop default\n}\n\nstring LogSink::ToString(LogSeverity severity, const char* file, int line,\n                         const struct ::tm* tm_time,\n                         const char* message, size_t message_len) {\n  ostringstream stream(string(message, message_len));\n  stream.fill('0');\n\n  // FIXME(jrvb): Updating this to use the correct value for usecs\n  // requires changing the signature for both this method and\n  // LogSink::send().  This change needs to be done in a separate CL\n  // so subclasses of LogSink can be updated at the same time.\n  int usecs = 0;\n\n  stream << LogSeverityNames[severity][0]\n         << setw(2) << 1+tm_time->tm_mon\n         << setw(2) << tm_time->tm_mday\n         << ' '\n         << setw(2) << tm_time->tm_hour << ':'\n         << setw(2) << tm_time->tm_min << ':'\n         << setw(2) << tm_time->tm_sec << '.'\n         << setw(6) << usecs\n         << ' '\n         << setfill(' ') << setw(5) << GetTID() << setfill('0')\n         << ' '\n         << file << ':' << line << \"] \";\n\n  stream << string(message, message_len);\n  return stream.str();\n}\n\nvoid AddLogSink(LogSink *destination) {\n  LogDestination::AddLogSink(destination);\n}\n\nvoid RemoveLogSink(LogSink *destination) {\n  LogDestination::RemoveLogSink(destination);\n}\n\nvoid SetLogFilenameExtension(const char* ext) {\n  LogDestination::SetLogFilenameExtension(ext);\n}\n\nvoid SetStderrLogging(LogSeverity min_severity) {\n  LogDestination::SetStderrLogging(min_severity);\n}\n\nvoid SetEmailLogging(LogSeverity min_severity, const char* addresses) {\n  LogDestination::SetEmailLogging(min_severity, addresses);\n}\n\nvoid LogToStderr() {\n  LogDestination::LogToStderr();\n}\n\nnamespace base {\nnamespace internal {\n\nbool GetExitOnDFatal() {\n  MutexLock l(&log_mutex);\n  return exit_on_dfatal;\n}\n\n// Determines whether we exit the program for a LOG(DFATAL) message in\n// debug mode.  It does this by skipping the call to Fail/FailQuietly.\n// This is intended for testing only.\n//\n// This can have some effects on LOG(FATAL) as well.  Failure messages\n// are always allocated (rather than sharing a buffer), the crash\n// reason is not recorded, the \"gwq\" status message is not updated,\n// and the stack trace is not recorded.  The LOG(FATAL) *will* still\n// exit the program.  Since this function is used only in testing,\n// these differences are acceptable.\nvoid SetExitOnDFatal(bool value) {\n  MutexLock l(&log_mutex);\n  exit_on_dfatal = value;\n}\n\n}  // namespace internal\n}  // namespace base\n\n// use_logging controls whether the logging functions LOG/VLOG are used\n// to log errors.  It should be set to false when the caller holds the\n// log_mutex.\nstatic bool SendEmailInternal(const char*dest, const char *subject,\n                              const char*body, bool use_logging) {\n  if (dest && *dest) {\n    if ( use_logging ) {\n      VLOG(1) << \"Trying to send TITLE:\" << subject\n              << \" BODY:\" << body << \" to \" << dest;\n    } else {\n      fprintf(stderr, \"Trying to send TITLE: %s BODY: %s to %s\\n\",\n              subject, body, dest);\n    }\n\n    string cmd =\n        FLAGS_logmailer + \" -s\\\"\" + subject + \"\\\" \" + dest;\n    FILE* pipe = popen(cmd.c_str(), \"w\");\n    if (pipe != NULL) {\n      // Add the body if we have one\n      if (body)\n        fwrite(body, sizeof(char), strlen(body), pipe);\n      bool ok = pclose(pipe) != -1;\n      if ( !ok ) {\n        if ( use_logging ) {\n          LOG(ERROR) << \"Problems sending mail to \" << dest << \": \"\n                     << StrError(errno);\n        } else {\n          fprintf(stderr, \"Problems sending mail to %s: %s\\n\",\n                  dest, StrError(errno).c_str());\n        }\n      }\n      return ok;\n    } else {\n      if ( use_logging ) {\n        LOG(ERROR) << \"Unable to send mail to \" << dest;\n      } else {\n        fprintf(stderr, \"Unable to send mail to %s\\n\", dest);\n      }\n    }\n  }\n  return false;\n}\n\nbool SendEmail(const char*dest, const char *subject, const char*body){\n  return SendEmailInternal(dest, subject, body, true);\n}\n\nstatic void GetTempDirectories(vector<string>* list) {\n  list->clear();\n#ifdef OS_WINDOWS\n  // On windows we'll try to find a directory in this order:\n  //   C:/Documents & Settings/whomever/TEMP (or whatever GetTempPath() is)\n  //   C:/TMP/\n  //   C:/TEMP/\n  //   C:/WINDOWS/ or C:/WINNT/\n  //   .\n  char tmp[MAX_PATH];\n  if (GetTempPathA(MAX_PATH, tmp))\n    list->push_back(tmp);\n  list->push_back(\"C:\\\\tmp\\\\\");\n  list->push_back(\"C:\\\\temp\\\\\");\n#else\n  // Directories, in order of preference. If we find a dir that\n  // exists, we stop adding other less-preferred dirs\n  const char * candidates[] = {\n    // Non-null only during unittest/regtest\n    getenv(\"TEST_TMPDIR\"),\n\n    // Explicitly-supplied temp dirs\n    getenv(\"TMPDIR\"), getenv(\"TMP\"),\n\n    // If all else fails\n    \"/tmp\",\n  };\n\n  for (size_t i = 0; i < ARRAYSIZE(candidates); i++) {\n    const char *d = candidates[i];\n    if (!d) continue;  // Empty env var\n\n    // Make sure we don't surprise anyone who's expecting a '/'\n    string dstr = d;\n    if (dstr[dstr.size() - 1] != '/') {\n      dstr += \"/\";\n    }\n    list->push_back(dstr);\n\n    struct stat statbuf;\n    if (!stat(d, &statbuf) && S_ISDIR(statbuf.st_mode)) {\n      // We found a dir that exists - we're done.\n      return;\n    }\n  }\n\n#endif\n}\n\nstatic vector<string>* logging_directories_list;\n\nconst vector<string>& GetLoggingDirectories() {\n  // Not strictly thread-safe but we're called early in InitGoogle().\n  if (logging_directories_list == NULL) {\n    logging_directories_list = new vector<string>;\n\n    if ( !FLAGS_log_dir.empty() ) {\n      // A dir was specified, we should use it\n      logging_directories_list->push_back(FLAGS_log_dir.c_str());\n    } else {\n      GetTempDirectories(logging_directories_list);\n#ifdef OS_WINDOWS\n      char tmp[MAX_PATH];\n      if (GetWindowsDirectoryA(tmp, MAX_PATH))\n        logging_directories_list->push_back(tmp);\n      logging_directories_list->push_back(\".\\\\\");\n#else\n      logging_directories_list->push_back(\"./\");\n#endif\n    }\n  }\n  return *logging_directories_list;\n}\n\nvoid TestOnly_ClearLoggingDirectoriesList() {\n  fprintf(stderr, \"TestOnly_ClearLoggingDirectoriesList should only be \"\n          \"called from test code.\\n\");\n  delete logging_directories_list;\n  logging_directories_list = NULL;\n}\n\nvoid GetExistingTempDirectories(vector<string>* list) {\n  GetTempDirectories(list);\n  vector<string>::iterator i_dir = list->begin();\n  while( i_dir != list->end() ) {\n    // zero arg to access means test for existence; no constant\n    // defined on windows\n    if ( access(i_dir->c_str(), 0) ) {\n      i_dir = list->erase(i_dir);\n    } else {\n      ++i_dir;\n    }\n  }\n}\n\nvoid TruncateLogFile(const char *path, int64 limit, int64 keep) {\n#ifdef HAVE_UNISTD_H\n  struct stat statbuf;\n  const int kCopyBlockSize = 8 << 10;\n  char copybuf[kCopyBlockSize];\n  int64 read_offset, write_offset;\n  // Don't follow symlinks unless they're our own fd symlinks in /proc\n  int flags = O_RDWR;\n  // TODO(hamaji): Support other environments.\n#ifdef OS_LINUX\n  const char *procfd_prefix = \"/proc/self/fd/\";\n  if (strncmp(procfd_prefix, path, strlen(procfd_prefix))) flags |= O_NOFOLLOW;\n#endif\n\n  int fd = open(path, flags);\n  if (fd == -1) {\n    if (errno == EFBIG) {\n      // The log file in question has got too big for us to open. The\n      // real fix for this would be to compile logging.cc (or probably\n      // all of base/...) with -D_FILE_OFFSET_BITS=64 but that's\n      // rather scary.\n      // Instead just truncate the file to something we can manage\n      if (truncate(path, 0) == -1) {\n        PLOG(ERROR) << \"Unable to truncate \" << path;\n      } else {\n        LOG(ERROR) << \"Truncated \" << path << \" due to EFBIG error\";\n      }\n    } else {\n      PLOG(ERROR) << \"Unable to open \" << path;\n    }\n    return;\n  }\n\n  if (fstat(fd, &statbuf) == -1) {\n    PLOG(ERROR) << \"Unable to fstat()\";\n    goto out_close_fd;\n  }\n\n  // See if the path refers to a regular file bigger than the\n  // specified limit\n  if (!S_ISREG(statbuf.st_mode)) goto out_close_fd;\n  if (statbuf.st_size <= limit)  goto out_close_fd;\n  if (statbuf.st_size <= keep) goto out_close_fd;\n\n  // This log file is too large - we need to truncate it\n  LOG(INFO) << \"Truncating \" << path << \" to \" << keep << \" bytes\";\n\n  // Copy the last \"keep\" bytes of the file to the beginning of the file\n  read_offset = statbuf.st_size - keep;\n  write_offset = 0;\n  int bytesin, bytesout;\n  while ((bytesin = pread(fd, copybuf, sizeof(copybuf), read_offset)) > 0) {\n    bytesout = pwrite(fd, copybuf, bytesin, write_offset);\n    if (bytesout == -1) {\n      PLOG(ERROR) << \"Unable to write to \" << path;\n      break;\n    } else if (bytesout != bytesin) {\n      LOG(ERROR) << \"Expected to write \" << bytesin << \", wrote \" << bytesout;\n    }\n    read_offset += bytesin;\n    write_offset += bytesout;\n  }\n  if (bytesin == -1) PLOG(ERROR) << \"Unable to read from \" << path;\n\n  // Truncate the remainder of the file. If someone else writes to the\n  // end of the file after our last read() above, we lose their latest\n  // data. Too bad ...\n  if (ftruncate(fd, write_offset) == -1) {\n    PLOG(ERROR) << \"Unable to truncate \" << path;\n  }\n\n out_close_fd:\n  close(fd);\n#else\n  LOG(ERROR) << \"No log truncation support.\";\n#endif\n}\n\nvoid TruncateStdoutStderr() {\n#ifdef HAVE_UNISTD_H\n  int64 limit = MaxLogSize() << 20;\n  int64 keep = 1 << 20;\n  TruncateLogFile(\"/proc/self/fd/1\", limit, keep);\n  TruncateLogFile(\"/proc/self/fd/2\", limit, keep);\n#else\n  LOG(ERROR) << \"No log truncation support.\";\n#endif\n}\n\n\n// Helper functions for string comparisons.\n#define DEFINE_CHECK_STROP_IMPL(name, func, expected)                   \\\n  string* Check##func##expected##Impl(const char* s1, const char* s2,   \\\n                                      const char* names) {              \\\n    bool equal = s1 == s2 || (s1 && s2 && !func(s1, s2));               \\\n    if (equal == expected) return NULL;                                 \\\n    else {                                                              \\\n      ostringstream ss;                                                 \\\n      if (!s1) s1 = \"\";                                                 \\\n      if (!s2) s2 = \"\";                                                 \\\n      ss << #name \" failed: \" << names << \" (\" << s1 << \" vs. \" << s2 << \")\"; \\\n      return new string(ss.str());                                      \\\n    }                                                                   \\\n  }\nDEFINE_CHECK_STROP_IMPL(CHECK_STREQ, strcmp, true)\nDEFINE_CHECK_STROP_IMPL(CHECK_STRNE, strcmp, false)\nDEFINE_CHECK_STROP_IMPL(CHECK_STRCASEEQ, strcasecmp, true)\nDEFINE_CHECK_STROP_IMPL(CHECK_STRCASENE, strcasecmp, false)\n#undef DEFINE_CHECK_STROP_IMPL\n\nint posix_strerror_r(int err, char *buf, size_t len) {\n  // Sanity check input parameters\n  if (buf == NULL || len <= 0) {\n    errno = EINVAL;\n    return -1;\n  }\n\n  // Reset buf and errno, and try calling whatever version of strerror_r()\n  // is implemented by glibc\n  buf[0] = '\\000';\n  int old_errno = errno;\n  errno = 0;\n  char *rc = reinterpret_cast<char *>(strerror_r(err, buf, len));\n\n  // Both versions set errno on failure\n  if (errno) {\n    // Should already be there, but better safe than sorry\n    buf[0]     = '\\000';\n    return -1;\n  }\n  errno = old_errno;\n\n  // POSIX is vague about whether the string will be terminated, although\n  // is indirectly implies that typically ERANGE will be returned, instead\n  // of truncating the string. This is different from the GNU implementation.\n  // We play it safe by always terminating the string explicitly.\n  buf[len-1] = '\\000';\n\n  // If the function succeeded, we can use its exit code to determine the\n  // semantics implemented by glibc\n  if (!rc) {\n    return 0;\n  } else {\n    // GNU semantics detected\n    if (rc == buf) {\n      return 0;\n    } else {\n      buf[0] = '\\000';\n#if defined(OS_MACOSX) || defined(OS_FREEBSD) || defined(OS_OPENBSD)\n      if (reinterpret_cast<intptr_t>(rc) < sys_nerr) {\n        // This means an error on MacOSX or FreeBSD.\n        return -1;\n      }\n#endif\n      strncat(buf, rc, len-1);\n      return 0;\n    }\n  }\n}\n\nstring StrError(int err) {\n  char buf[100];\n  int rc = posix_strerror_r(err, buf, sizeof(buf));\n  if ((rc < 0) || (buf[0] == '\\000')) {\n    snprintf(buf, sizeof(buf), \"Error number %d\", err);\n  }\n  return buf;\n}\n\nLogMessageFatal::LogMessageFatal(const char* file, int line) :\n    LogMessage(file, line, GLOG_FATAL) {}\n\nLogMessageFatal::LogMessageFatal(const char* file, int line,\n                                 const CheckOpString& result) :\n    LogMessage(file, line, result) {}\n\nLogMessageFatal::~LogMessageFatal() {\n    Flush();\n    LogMessage::Fail();\n}\n\nnamespace base {\n\nCheckOpMessageBuilder::CheckOpMessageBuilder(const char *exprtext)\n    : stream_(new ostringstream) {\n  *stream_ << exprtext << \" (\";\n}\n\nCheckOpMessageBuilder::~CheckOpMessageBuilder() {\n  delete stream_;\n}\n\nostream* CheckOpMessageBuilder::ForVar2() {\n  *stream_ << \" vs. \";\n  return stream_;\n}\n\nstring* CheckOpMessageBuilder::NewString() {\n  *stream_ << \")\";\n  return new string(stream_->str());\n}\n\n}  // namespace base\n\ntemplate <>\nvoid MakeCheckOpValueString(std::ostream* os, const char& v) {\n  if (v >= 32 && v <= 126) {\n    (*os) << \"'\" << v << \"'\";\n  } else {\n    (*os) << \"char value \" << (short)v;\n  }\n}\n\ntemplate <>\nvoid MakeCheckOpValueString(std::ostream* os, const signed char& v) {\n  if (v >= 32 && v <= 126) {\n    (*os) << \"'\" << v << \"'\";\n  } else {\n    (*os) << \"signed char value \" << (short)v;\n  }\n}\n\ntemplate <>\nvoid MakeCheckOpValueString(std::ostream* os, const unsigned char& v) {\n  if (v >= 32 && v <= 126) {\n    (*os) << \"'\" << v << \"'\";\n  } else {\n    (*os) << \"unsigned char value \" << (unsigned short)v;\n  }\n}\n\nvoid InitGoogleLogging(const char* argv0) {\n  glog_internal_namespace_::InitGoogleLoggingUtilities(argv0);\n}\n\nvoid ShutdownGoogleLogging() {\n  glog_internal_namespace_::ShutdownGoogleLoggingUtilities();\n  LogDestination::DeleteLogDestinations();\n  delete logging_directories_list;\n  logging_directories_list = NULL;\n}\n\n_END_GOOGLE_NAMESPACE_\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/mock-log.h",
    "content": "// Copyright (c) 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: Zhanyong Wan\n//\n// Defines the ScopedMockLog class (using Google C++ Mocking\n// Framework), which is convenient for testing code that uses LOG().\n\n#ifndef GLOG_SRC_MOCK_LOG_H_\n#define GLOG_SRC_MOCK_LOG_H_\n\n// For GOOGLE_NAMESPACE. This must go first so we get _XOPEN_SOURCE.\n#include \"utilities.h\"\n\n#include <string>\n\n#include <gmock/gmock.h>\n\n#include \"glog/logging.h\"\n\n_START_GOOGLE_NAMESPACE_\nnamespace glog_testing {\n\n// A ScopedMockLog object intercepts LOG() messages issued during its\n// lifespan.  Using this together with Google C++ Mocking Framework,\n// it's very easy to test how a piece of code calls LOG().  The\n// typical usage:\n//\n//   TEST(FooTest, LogsCorrectly) {\n//     ScopedMockLog log;\n//\n//     // We expect the WARNING \"Something bad!\" exactly twice.\n//     EXPECT_CALL(log, Log(WARNING, _, \"Something bad!\"))\n//         .Times(2);\n//\n//     // We allow foo.cc to call LOG(INFO) any number of times.\n//     EXPECT_CALL(log, Log(INFO, HasSubstr(\"/foo.cc\"), _))\n//         .Times(AnyNumber());\n//\n//     Foo();  // Exercises the code under test.\n//   }\nclass ScopedMockLog : public GOOGLE_NAMESPACE::LogSink {\n public:\n  // When a ScopedMockLog object is constructed, it starts to\n  // intercept logs.\n  ScopedMockLog() { AddLogSink(this); }\n\n  // When the object is destructed, it stops intercepting logs.\n  virtual ~ScopedMockLog() { RemoveLogSink(this); }\n\n  // Implements the mock method:\n  //\n  //   void Log(LogSeverity severity, const string& file_path,\n  //            const string& message);\n  //\n  // The second argument to Send() is the full path of the source file\n  // in which the LOG() was issued.\n  //\n  // Note, that in a multi-threaded environment, all LOG() messages from a\n  // single thread will be handled in sequence, but that cannot be guaranteed\n  // for messages from different threads. In fact, if the same or multiple\n  // expectations are matched on two threads concurrently, their actions will\n  // be executed concurrently as well and may interleave.\n  MOCK_METHOD3(Log, void(GOOGLE_NAMESPACE::LogSeverity severity,\n                         const std::string& file_path,\n                         const std::string& message));\n\n private:\n  // Implements the send() virtual function in class LogSink.\n  // Whenever a LOG() statement is executed, this function will be\n  // invoked with information presented in the LOG().\n  //\n  // The method argument list is long and carries much information a\n  // test usually doesn't care about, so we trim the list before\n  // forwarding the call to Log(), which is much easier to use in\n  // tests.\n  //\n  // We still cannot call Log() directly, as it may invoke other LOG()\n  // messages, either due to Invoke, or due to an error logged in\n  // Google C++ Mocking Framework code, which would trigger a deadlock\n  // since a lock is held during send().\n  //\n  // Hence, we save the message for WaitTillSent() which will be called after\n  // the lock on send() is released, and we'll call Log() inside\n  // WaitTillSent(). Since while a single send() call may be running at a\n  // time, multiple WaitTillSent() calls (along with the one send() call) may\n  // be running simultaneously, we ensure thread-safety of the exchange between\n  // send() and WaitTillSent(), and that for each message, LOG(), send(),\n  // WaitTillSent() and Log() are executed in the same thread.\n  virtual void send(GOOGLE_NAMESPACE::LogSeverity severity,\n                    const char* full_filename,\n                    const char* /*base_filename*/, int /*line*/,\n                    const tm* /*tm_time*/,\n                    const char* message, size_t message_len) {\n    // We are only interested in the log severity, full file name, and\n    // log message.\n    message_info_.severity = severity;\n    message_info_.file_path = full_filename;\n    message_info_.message = std::string(message, message_len);\n  }\n\n  // Implements the WaitTillSent() virtual function in class LogSink.\n  // It will be executed after send() and after the global logging lock is\n  // released, so calls within it (or rather within the Log() method called\n  // within) may also issue LOG() statements.\n  //\n  // LOG(), send(), WaitTillSent() and Log() will occur in the same thread for\n  // a given log message.\n  virtual void WaitTillSent() {\n    // First, and very importantly, we save a copy of the message being\n    // processed before calling Log(), since Log() may indirectly call send()\n    // and WaitTillSent() in the same thread again.\n    MessageInfo message_info = message_info_;\n    Log(message_info.severity, message_info.file_path, message_info.message);\n  }\n\n  // All relevant information about a logged message that needs to be passed\n  // from send() to WaitTillSent().\n  struct MessageInfo {\n    GOOGLE_NAMESPACE::LogSeverity severity;\n    std::string file_path;\n    std::string message;\n  };\n  MessageInfo message_info_;\n};\n\n}  // namespace glog_testing\n_END_GOOGLE_NAMESPACE_\n\n#endif  // GLOG_SRC_MOCK_LOG_H_\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/raw_logging.cc",
    "content": "// Copyright (c) 2006, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: Maxim Lifantsev\n//\n// logging_unittest.cc covers the functionality herein\n\n#include \"utilities.h\"\n\n#include <stdarg.h>\n#include <stdio.h>\n#include <errno.h>\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>               // for close() and write()\n#endif\n#include <fcntl.h>                 // for open()\n#include <time.h>\n#include \"config.h\"\n#include \"glog/logging.h\"          // To pick up flag settings etc.\n#include \"glog/raw_logging.h\"\n#include \"base/commandlineflags.h\"\n\n#ifdef HAVE_STACKTRACE\n# include \"stacktrace.h\"\n#endif\n\n#if defined(HAVE_SYSCALL_H)\n#include <syscall.h>                 // for syscall()\n#elif defined(HAVE_SYS_SYSCALL_H)\n#include <sys/syscall.h>                 // for syscall()\n#endif\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n\n#if defined(HAVE_SYSCALL_H) || defined(HAVE_SYS_SYSCALL_H)\n# define safe_write(fd, s, len)  syscall(SYS_write, fd, s, len)\n#else\n  // Not so safe, but what can you do?\n# define safe_write(fd, s, len)  write(fd, s, len)\n#endif\n\n_START_GOOGLE_NAMESPACE_\n\n// Data for RawLog__ below. We simply pick up the latest\n// time data created by a normal log message to avoid calling\n// localtime_r which can allocate memory.\nstatic struct ::tm last_tm_time_for_raw_log;\nstatic int last_usecs_for_raw_log;\n\nvoid RawLog__SetLastTime(const struct ::tm& t, int usecs) {\n  memcpy(&last_tm_time_for_raw_log, &t, sizeof(last_tm_time_for_raw_log));\n  last_usecs_for_raw_log = usecs;\n}\n\n// CAVEAT: vsnprintf called from *DoRawLog below has some (exotic) code paths\n// that invoke malloc() and getenv() that might acquire some locks.\n// If this becomes a problem we should reimplement a subset of vsnprintf\n// that does not need locks and malloc.\n\n// Helper for RawLog__ below.\n// *DoRawLog writes to *buf of *size and move them past the written portion.\n// It returns true iff there was no overflow or error.\nstatic bool DoRawLog(char** buf, int* size, const char* format, ...) {\n  va_list ap;\n  va_start(ap, format);\n  int n = vsnprintf(*buf, *size, format, ap);\n  va_end(ap);\n  if (n < 0 || n > *size) return false;\n  *size -= n;\n  *buf += n;\n  return true;\n}\n\n// Helper for RawLog__ below.\ninline static bool VADoRawLog(char** buf, int* size,\n                              const char* format, va_list ap) {\n  int n = vsnprintf(*buf, *size, format, ap);\n  if (n < 0 || n > *size) return false;\n  *size -= n;\n  *buf += n;\n  return true;\n}\n\nstatic const int kLogBufSize = 3000;\nstatic bool crashed = false;\nstatic CrashReason crash_reason;\nstatic char crash_buf[kLogBufSize + 1] = { 0 };  // Will end in '\\0'\n\nvoid RawLog__(LogSeverity severity, const char* file, int line,\n              const char* format, ...) {\n  if (!(FLAGS_logtostderr || severity >= FLAGS_stderrthreshold ||\n        FLAGS_alsologtostderr || !IsGoogleLoggingInitialized())) {\n    return;  // this stderr log message is suppressed\n  }\n  // can't call localtime_r here: it can allocate\n  struct ::tm& t = last_tm_time_for_raw_log;\n  char buffer[kLogBufSize];\n  char* buf = buffer;\n  int size = sizeof(buffer);\n\n  // NOTE: this format should match the specification in base/logging.h\n  DoRawLog(&buf, &size, \"%c%02d%02d %02d:%02d:%02d.%06d %5u %s:%d] RAW: \",\n           LogSeverityNames[severity][0],\n           1 + t.tm_mon, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec,\n           last_usecs_for_raw_log,\n           static_cast<unsigned int>(GetTID()),\n           const_basename(const_cast<char *>(file)), line);\n\n  // Record the position and size of the buffer after the prefix\n  const char* msg_start = buf;\n  const int msg_size = size;\n\n  va_list ap;\n  va_start(ap, format);\n  bool no_chop = VADoRawLog(&buf, &size, format, ap);\n  va_end(ap);\n  if (no_chop) {\n    DoRawLog(&buf, &size, \"\\n\");\n  } else {\n    DoRawLog(&buf, &size, \"RAW_LOG ERROR: The Message was too long!\\n\");\n  }\n  // We make a raw syscall to write directly to the stderr file descriptor,\n  // avoiding FILE buffering (to avoid invoking malloc()), and bypassing\n  // libc (to side-step any libc interception).\n  // We write just once to avoid races with other invocations of RawLog__.\n  safe_write(STDERR_FILENO, buffer, strlen(buffer));\n  if (severity == GLOG_FATAL)  {\n    if (!sync_val_compare_and_swap(&crashed, false, true)) {\n      crash_reason.filename = file;\n      crash_reason.line_number = line;\n      memcpy(crash_buf, msg_start, msg_size);  // Don't include prefix\n      crash_reason.message = crash_buf;\n#ifdef HAVE_STACKTRACE\n      crash_reason.depth =\n          GetStackTrace(crash_reason.stack, ARRAYSIZE(crash_reason.stack), 1);\n#else\n      crash_reason.depth = 0;\n#endif\n      SetCrashReason(&crash_reason);\n    }\n    LogMessage::Fail();  // abort()\n  }\n}\n\n_END_GOOGLE_NAMESPACE_\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/signalhandler.cc",
    "content": "// Copyright (c) 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: Satoru Takabayashi\n//\n// Implementation of InstallFailureSignalHandler().\n\n#include \"utilities.h\"\n#include \"stacktrace.h\"\n#include \"symbolize.h\"\n#include \"glog/logging.h\"\n\n#include <signal.h>\n#include <time.h>\n#ifdef HAVE_UCONTEXT_H\n# include <ucontext.h>\n#endif\n#ifdef HAVE_SYS_UCONTEXT_H\n# include <sys/ucontext.h>\n#endif\n#include <algorithm>\n\n_START_GOOGLE_NAMESPACE_\n\n// TOOD(hamaji): Use signal instead of sigaction?\n#ifdef HAVE_SIGACTION\n\nnamespace {\n\n// We'll install the failure signal handler for these signals.  We could\n// use strsignal() to get signal names, but we don't use it to avoid\n// introducing yet another #ifdef complication.\n//\n// The list should be synced with the comment in signalhandler.h.\nconst struct {\n  int number;\n  const char *name;\n} kFailureSignals[] = {\n  { SIGSEGV, \"SIGSEGV\" },\n  { SIGILL, \"SIGILL\" },\n  { SIGFPE, \"SIGFPE\" },\n  { SIGABRT, \"SIGABRT\" },\n  { SIGBUS, \"SIGBUS\" },\n  { SIGTERM, \"SIGTERM\" },\n};\n\n// Returns the program counter from signal context, NULL if unknown.\nvoid* GetPC(void* ucontext_in_void) {\n#if (defined(HAVE_UCONTEXT_H) || defined(HAVE_SYS_UCONTEXT_H)) && defined(PC_FROM_UCONTEXT)\n  if (ucontext_in_void != NULL) {\n    ucontext_t *context = reinterpret_cast<ucontext_t *>(ucontext_in_void);\n    return (void*)context->PC_FROM_UCONTEXT;\n  }\n#endif\n  return NULL;\n}\n\n// The class is used for formatting error messages.  We don't use printf()\n// as it's not async signal safe.\nclass MinimalFormatter {\n public:\n  MinimalFormatter(char *buffer, int size)\n      : buffer_(buffer),\n        cursor_(buffer),\n        end_(buffer + size) {\n  }\n\n  // Returns the number of bytes written in the buffer.\n  int num_bytes_written() const { return cursor_ - buffer_; }\n\n  // Appends string from \"str\" and updates the internal cursor.\n  void AppendString(const char* str) {\n    int i = 0;\n    while (str[i] != '\\0' && cursor_ + i < end_) {\n      cursor_[i] = str[i];\n      ++i;\n    }\n    cursor_ += i;\n  }\n\n  // Formats \"number\" in \"radix\" and updates the internal cursor.\n  // Lowercase letters are used for 'a' - 'z'.\n  void AppendUint64(uint64 number, int radix) {\n    int i = 0;\n    while (cursor_ + i < end_) {\n      const int tmp = number % radix;\n      number /= radix;\n      cursor_[i] = (tmp < 10 ? '0' + tmp : 'a' + tmp - 10);\n      ++i;\n      if (number == 0) {\n        break;\n      }\n    }\n    // Reverse the bytes written.\n    std::reverse(cursor_, cursor_ + i);\n    cursor_ += i;\n  }\n\n  // Formats \"number\" as hexadecimal number, and updates the internal\n  // cursor.  Padding will be added in front if needed.\n  void AppendHexWithPadding(uint64 number, int width) {\n    char* start = cursor_;\n    AppendString(\"0x\");\n    AppendUint64(number, 16);\n    // Move to right and add padding in front if needed.\n    if (cursor_ < start + width) {\n      const int64 delta = start + width - cursor_;\n      std::copy(start, cursor_, start + delta);\n      std::fill(start, start + delta, ' ');\n      cursor_ = start + width;\n    }\n  }\n\n private:\n  char *buffer_;\n  char *cursor_;\n  const char * const end_;\n};\n\n// Writes the given data with the size to the standard error.\nvoid WriteToStderr(const char* data, int size) {\n  if (write(STDERR_FILENO, data, size) < 0) {\n    // Ignore errors.\n  }\n}\n\n// The writer function can be changed by InstallFailureWriter().\nvoid (*g_failure_writer)(const char* data, int size) = WriteToStderr;\n\n// Dumps time information.  We don't dump human-readable time information\n// as localtime() is not guaranteed to be async signal safe.\nvoid DumpTimeInfo() {\n  time_t time_in_sec = time(NULL);\n  char buf[256];  // Big enough for time info.\n  MinimalFormatter formatter(buf, sizeof(buf));\n  formatter.AppendString(\"*** Aborted at \");\n  formatter.AppendUint64(time_in_sec, 10);\n  formatter.AppendString(\" (unix time)\");\n  formatter.AppendString(\" try \\\"date -d @\");\n  formatter.AppendUint64(time_in_sec, 10);\n  formatter.AppendString(\"\\\" if you are using GNU date ***\\n\");\n  g_failure_writer(buf, formatter.num_bytes_written());\n}\n\n// Dumps information about the signal to STDERR.\nvoid DumpSignalInfo(int signal_number, siginfo_t *siginfo) {\n  // Get the signal name.\n  const char* signal_name = NULL;\n  for (size_t i = 0; i < ARRAYSIZE(kFailureSignals); ++i) {\n    if (signal_number == kFailureSignals[i].number) {\n      signal_name = kFailureSignals[i].name;\n    }\n  }\n\n  char buf[256];  // Big enough for signal info.\n  MinimalFormatter formatter(buf, sizeof(buf));\n\n  formatter.AppendString(\"*** \");\n  if (signal_name) {\n    formatter.AppendString(signal_name);\n  } else {\n    // Use the signal number if the name is unknown.  The signal name\n    // should be known, but just in case.\n    formatter.AppendString(\"Signal \");\n    formatter.AppendUint64(signal_number, 10);\n  }\n  formatter.AppendString(\" (@0x\");\n  formatter.AppendUint64(reinterpret_cast<uintptr_t>(siginfo->si_addr), 16);\n  formatter.AppendString(\")\");\n  formatter.AppendString(\" received by PID \");\n  formatter.AppendUint64(getpid(), 10);\n  formatter.AppendString(\" (TID 0x\");\n  // We assume pthread_t is an integral number or a pointer, rather\n  // than a complex struct.  In some environments, pthread_self()\n  // returns an uint64 but in some other environments pthread_self()\n  // returns a pointer.  Hence we use C-style cast here, rather than\n  // reinterpret/static_cast, to support both types of environments.\n  formatter.AppendUint64((uintptr_t)pthread_self(), 16);\n  formatter.AppendString(\") \");\n  // Only linux has the PID of the signal sender in si_pid.\n#ifdef OS_LINUX\n  formatter.AppendString(\"from PID \");\n  formatter.AppendUint64(siginfo->si_pid, 10);\n  formatter.AppendString(\"; \");\n#endif\n  formatter.AppendString(\"stack trace: ***\\n\");\n  g_failure_writer(buf, formatter.num_bytes_written());\n}\n\n// Dumps information about the stack frame to STDERR.\nvoid DumpStackFrameInfo(const char* prefix, void* pc) {\n  // Get the symbol name.\n  const char *symbol = \"(unknown)\";\n  char symbolized[1024];  // Big enough for a sane symbol.\n  // Symbolizes the previous address of pc because pc may be in the\n  // next function.\n  if (Symbolize(reinterpret_cast<char *>(pc) - 1,\n                symbolized, sizeof(symbolized))) {\n    symbol = symbolized;\n  }\n\n  char buf[1024];  // Big enough for stack frame info.\n  MinimalFormatter formatter(buf, sizeof(buf));\n\n  formatter.AppendString(prefix);\n  formatter.AppendString(\"@ \");\n  const int width = 2 * sizeof(void*) + 2;  // + 2  for \"0x\".\n  formatter.AppendHexWithPadding(reinterpret_cast<uintptr_t>(pc), width);\n  formatter.AppendString(\" \");\n  formatter.AppendString(symbol);\n  formatter.AppendString(\"\\n\");\n  g_failure_writer(buf, formatter.num_bytes_written());\n}\n\n// Invoke the default signal handler.\nvoid InvokeDefaultSignalHandler(int signal_number) {\n  struct sigaction sig_action;\n  memset(&sig_action, 0, sizeof(sig_action));\n  sigemptyset(&sig_action.sa_mask);\n  sig_action.sa_handler = SIG_DFL;\n  sigaction(signal_number, &sig_action, NULL);\n  kill(getpid(), signal_number);\n}\n\n// This variable is used for protecting FailureSignalHandler() from\n// dumping stuff while another thread is doing it.  Our policy is to let\n// the first thread dump stuff and let other threads wait.\n// See also comments in FailureSignalHandler().\nstatic pthread_t* g_entered_thread_id_pointer = NULL;\n\n// Dumps signal and stack frame information, and invokes the default\n// signal handler once our job is done.\nvoid FailureSignalHandler(int signal_number,\n                          siginfo_t *signal_info,\n                          void *ucontext) {\n  // First check if we've already entered the function.  We use an atomic\n  // compare and swap operation for platforms that support it.  For other\n  // platforms, we use a naive method that could lead to a subtle race.\n\n  // We assume pthread_self() is async signal safe, though it's not\n  // officially guaranteed.\n  pthread_t my_thread_id = pthread_self();\n  // NOTE: We could simply use pthread_t rather than pthread_t* for this,\n  // if pthread_self() is guaranteed to return non-zero value for thread\n  // ids, but there is no such guarantee.  We need to distinguish if the\n  // old value (value returned from __sync_val_compare_and_swap) is\n  // different from the original value (in this case NULL).\n  pthread_t* old_thread_id_pointer =\n      glog_internal_namespace_::sync_val_compare_and_swap(\n          &g_entered_thread_id_pointer,\n          static_cast<pthread_t*>(NULL),\n          &my_thread_id);\n  if (old_thread_id_pointer != NULL) {\n    // We've already entered the signal handler.  What should we do?\n    if (pthread_equal(my_thread_id, *g_entered_thread_id_pointer)) {\n      // It looks the current thread is reentering the signal handler.\n      // Something must be going wrong (maybe we are reentering by another\n      // type of signal?).  Kill ourself by the default signal handler.\n      InvokeDefaultSignalHandler(signal_number);\n    }\n    // Another thread is dumping stuff.  Let's wait until that thread\n    // finishes the job and kills the process.\n    while (true) {\n      sleep(1);\n    }\n  }\n  // This is the first time we enter the signal handler.  We are going to\n  // do some interesting stuff from here.\n  // TODO(satorux): We might want to set timeout here using alarm(), but\n  // mixing alarm() and sleep() can be a bad idea.\n\n  // First dump time info.\n  DumpTimeInfo();\n\n  // Get the program counter from ucontext.\n  void *pc = GetPC(ucontext);\n  DumpStackFrameInfo(\"PC: \", pc);\n\n#ifdef HAVE_STACKTRACE\n  // Get the stack traces.\n  void *stack[32];\n  // +1 to exclude this function.\n  const int depth = GetStackTrace(stack, ARRAYSIZE(stack), 1);\n  DumpSignalInfo(signal_number, signal_info);\n  // Dump the stack traces.\n  for (int i = 0; i < depth; ++i) {\n    DumpStackFrameInfo(\"    \", stack[i]);\n  }\n#endif\n\n  // *** TRANSITION ***\n  //\n  // BEFORE this point, all code must be async-termination-safe!\n  // (See WARNING above.)\n  //\n  // AFTER this point, we do unsafe things, like using LOG()!\n  // The process could be terminated or hung at any time.  We try to\n  // do more useful things first and riskier things later.\n\n  // Flush the logs before we do anything in case 'anything'\n  // causes problems.\n  FlushLogFilesUnsafe(0);\n\n  // Kill ourself by the default signal handler.\n  InvokeDefaultSignalHandler(signal_number);\n}\n\n}  // namespace\n\n#endif  // HAVE_SIGACTION\n\nnamespace glog_internal_namespace_ {\n\nbool IsFailureSignalHandlerInstalled() {\n#ifdef HAVE_SIGACTION\n  struct sigaction sig_action;\n  memset(&sig_action, 0, sizeof(sig_action));\n  sigemptyset(&sig_action.sa_mask);\n  sigaction(SIGABRT, NULL, &sig_action);\n  if (sig_action.sa_sigaction == &FailureSignalHandler)\n    return true;\n#endif  // HAVE_SIGACTION\n  return false;\n}\n\n}  // namespace glog_internal_namespace_\n\nvoid InstallFailureSignalHandler() {\n#ifdef HAVE_SIGACTION\n  // Build the sigaction struct.\n  struct sigaction sig_action;\n  memset(&sig_action, 0, sizeof(sig_action));\n  sigemptyset(&sig_action.sa_mask);\n  sig_action.sa_flags |= SA_SIGINFO;\n  sig_action.sa_sigaction = &FailureSignalHandler;\n\n  for (size_t i = 0; i < ARRAYSIZE(kFailureSignals); ++i) {\n    CHECK_ERR(sigaction(kFailureSignals[i].number, &sig_action, NULL));\n  }\n#endif  // HAVE_SIGACTION\n}\n\nvoid InstallFailureWriter(void (*writer)(const char* data, int size)) {\n#ifdef HAVE_SIGACTION\n  g_failure_writer = writer;\n#endif  // HAVE_SIGACTION\n}\n\n_END_GOOGLE_NAMESPACE_\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/stacktrace.h",
    "content": "// Copyright (c) 2000 - 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Routines to extract the current stack trace.  These functions are\n// thread-safe.\n\n#ifndef BASE_STACKTRACE_H_\n#define BASE_STACKTRACE_H_\n\n#include \"config.h\"\n\n_START_GOOGLE_NAMESPACE_\n\n// This is similar to the GetStackFrames routine, except that it returns\n// the stack trace only, and not the stack frame sizes as well.\n// Example:\n//      main() { foo(); }\n//      foo() { bar(); }\n//      bar() {\n//        void* result[10];\n//        int depth = GetStackFrames(result, 10, 1);\n//      }\n//\n// This produces:\n//      result[0]       foo\n//      result[1]       main\n//           ....       ...\n//\n// \"result\" must not be NULL.\nextern int GetStackTrace(void** result, int max_depth, int skip_count);\n\n_END_GOOGLE_NAMESPACE_\n\n#endif  // BASE_STACKTRACE_H_\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/stacktrace_generic-inl.h",
    "content": "// Copyright (c) 2000 - 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Portable implementation - just use glibc\n//\n// Note:  The glibc implementation may cause a call to malloc.\n// This can cause a deadlock in HeapProfiler.\n#include <execinfo.h>\n#include <string.h>\n#include \"stacktrace.h\"\n\n_START_GOOGLE_NAMESPACE_\n\n// If you change this function, also change GetStackFrames below.\nint GetStackTrace(void** result, int max_depth, int skip_count) {\n  static const int kStackLength = 64;\n  void * stack[kStackLength];\n  int size;\n\n  size = backtrace(stack, kStackLength);\n  skip_count++;  // we want to skip the current frame as well\n  int result_count = size - skip_count;\n  if (result_count < 0)\n    result_count = 0;\n  if (result_count > max_depth)\n    result_count = max_depth;\n  for (int i = 0; i < result_count; i++)\n    result[i] = stack[i + skip_count];\n\n  return result_count;\n}\n\n_END_GOOGLE_NAMESPACE_\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/stacktrace_libunwind-inl.h",
    "content": "// Copyright (c) 2005 - 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: Arun Sharma\n//\n// Produce stack trace using libunwind\n\n#include \"utilities.h\"\n\nextern \"C\" {\n#define UNW_LOCAL_ONLY\n#include <libunwind.h>\n}\n#include \"glog/raw_logging.h\"\n#include \"stacktrace.h\"\n\n_START_GOOGLE_NAMESPACE_\n\n// Sometimes, we can try to get a stack trace from within a stack\n// trace, because libunwind can call mmap (maybe indirectly via an\n// internal mmap based memory allocator), and that mmap gets trapped\n// and causes a stack-trace request.  If were to try to honor that\n// recursive request, we'd end up with infinite recursion or deadlock.\n// Luckily, it's safe to ignore those subsequent traces.  In such\n// cases, we return 0 to indicate the situation.\nstatic bool g_now_entering = false;\n\n// If you change this function, also change GetStackFrames below.\nint GetStackTrace(void** result, int max_depth, int skip_count) {\n  void *ip;\n  int n = 0;\n  unw_cursor_t cursor;\n  unw_context_t uc;\n\n  if (sync_val_compare_and_swap(&g_now_entering, false, true)) {\n    return 0;\n  }\n\n  unw_getcontext(&uc);\n  RAW_CHECK(unw_init_local(&cursor, &uc) >= 0, \"unw_init_local failed\");\n  skip_count++;         // Do not include the \"GetStackTrace\" frame\n\n  while (n < max_depth) {\n    int ret = unw_get_reg(&cursor, UNW_REG_IP, (unw_word_t *) &ip);\n    if (ret < 0)\n      break;\n    if (skip_count > 0) {\n      skip_count--;\n    } else {\n      result[n++] = ip;\n    }\n    ret = unw_step(&cursor);\n    if (ret <= 0)\n      break;\n  }\n\n  g_now_entering = false;\n  return n;\n}\n\n_END_GOOGLE_NAMESPACE_\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/stacktrace_powerpc-inl.h",
    "content": "// Copyright (c) 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: Craig Silverstein\n//\n// Produce stack trace.  I'm guessing (hoping!) the code is much like\n// for x86.  For apple machines, at least, it seems to be; see\n//    http://developer.apple.com/documentation/mac/runtimehtml/RTArch-59.html\n//    http://www.linux-foundation.org/spec/ELF/ppc64/PPC-elf64abi-1.9.html#STACK\n// Linux has similar code: http://patchwork.ozlabs.org/linuxppc/patch?id=8882\n\n#include <stdio.h>\n#include <stdint.h>   // for uintptr_t\n#include \"stacktrace.h\"\n\n_START_GOOGLE_NAMESPACE_\n\n// Given a pointer to a stack frame, locate and return the calling\n// stackframe, or return NULL if no stackframe can be found. Perform sanity\n// checks (the strictness of which is controlled by the boolean parameter\n// \"STRICT_UNWINDING\") to reduce the chance that a bad pointer is returned.\ntemplate<bool STRICT_UNWINDING>\nstatic void **NextStackFrame(void **old_sp) {\n  void **new_sp = (void **) *old_sp;\n\n  // Check that the transition from frame pointer old_sp to frame\n  // pointer new_sp isn't clearly bogus\n  if (STRICT_UNWINDING) {\n    // With the stack growing downwards, older stack frame must be\n    // at a greater address that the current one.\n    if (new_sp <= old_sp) return NULL;\n    // Assume stack frames larger than 100,000 bytes are bogus.\n    if ((uintptr_t)new_sp - (uintptr_t)old_sp > 100000) return NULL;\n  } else {\n    // In the non-strict mode, allow discontiguous stack frames.\n    // (alternate-signal-stacks for example).\n    if (new_sp == old_sp) return NULL;\n    // And allow frames upto about 1MB.\n    if ((new_sp > old_sp)\n        && ((uintptr_t)new_sp - (uintptr_t)old_sp > 1000000)) return NULL;\n  }\n  if ((uintptr_t)new_sp & (sizeof(void *) - 1)) return NULL;\n  return new_sp;\n}\n\n// This ensures that GetStackTrace stes up the Link Register properly.\nvoid StacktracePowerPCDummyFunction() __attribute__((noinline));\nvoid StacktracePowerPCDummyFunction() { __asm__ volatile(\"\"); }\n\n// If you change this function, also change GetStackFrames below.\nint GetStackTrace(void** result, int max_depth, int skip_count) {\n  void **sp;\n  // Apple OS X uses an old version of gnu as -- both Darwin 7.9.0 (Panther)\n  // and Darwin 8.8.1 (Tiger) use as 1.38.  This means we have to use a\n  // different asm syntax.  I don't know quite the best way to discriminate\n  // systems using the old as from the new one; I've gone with __APPLE__.\n#ifdef __APPLE__\n  __asm__ volatile (\"mr %0,r1\" : \"=r\" (sp));\n#else\n  __asm__ volatile (\"mr %0,1\" : \"=r\" (sp));\n#endif\n\n  // On PowerPC, the \"Link Register\" or \"Link Record\" (LR), is a stack\n  // entry that holds the return address of the subroutine call (what\n  // instruction we run after our function finishes).  This is the\n  // same as the stack-pointer of our parent routine, which is what we\n  // want here.  While the compiler will always(?) set up LR for\n  // subroutine calls, it may not for leaf functions (such as this one).\n  // This routine forces the compiler (at least gcc) to push it anyway.\n  StacktracePowerPCDummyFunction();\n\n  // The LR save area is used by the callee, so the top entry is bogus.\n  skip_count++;\n\n  int n = 0;\n  while (sp && n < max_depth) {\n    if (skip_count > 0) {\n      skip_count--;\n    } else {\n      // PowerPC has 3 main ABIs, which say where in the stack the\n      // Link Register is.  For DARWIN and AIX (used by apple and\n      // linux ppc64), it's in sp[2].  For SYSV (used by linux ppc),\n      // it's in sp[1].\n#if defined(_CALL_AIX) || defined(_CALL_DARWIN)\n      result[n++] = *(sp+2);\n#elif defined(_CALL_SYSV)\n      result[n++] = *(sp+1);\n#elif defined(__APPLE__) || ((defined(__linux) || defined(__linux__)) && defined(__PPC64__))\n      // This check is in case the compiler doesn't define _CALL_AIX/etc.\n      result[n++] = *(sp+2);\n#elif defined(__linux)\n      // This check is in case the compiler doesn't define _CALL_SYSV.\n      result[n++] = *(sp+1);\n#else\n#error Need to specify the PPC ABI for your archiecture.\n#endif\n    }\n    // Use strict unwinding rules.\n    sp = NextStackFrame<true>(sp);\n  }\n  return n;\n}\n\n_END_GOOGLE_NAMESPACE_\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/stacktrace_x86-inl.h",
    "content": "// Copyright (c) 2000 - 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Produce stack trace\n\n#include <stdint.h>   // for uintptr_t\n\n#include \"utilities.h\"   // for OS_* macros\n\n#if !defined(OS_WINDOWS)\n#include <unistd.h>\n#include <sys/mman.h>\n#endif\n\n#include <stdio.h>  // for NULL\n#include \"stacktrace.h\"\n\n_START_GOOGLE_NAMESPACE_\n\n// Given a pointer to a stack frame, locate and return the calling\n// stackframe, or return NULL if no stackframe can be found. Perform sanity\n// checks (the strictness of which is controlled by the boolean parameter\n// \"STRICT_UNWINDING\") to reduce the chance that a bad pointer is returned.\ntemplate<bool STRICT_UNWINDING>\nstatic void **NextStackFrame(void **old_sp) {\n  void **new_sp = (void **) *old_sp;\n\n  // Check that the transition from frame pointer old_sp to frame\n  // pointer new_sp isn't clearly bogus\n  if (STRICT_UNWINDING) {\n    // With the stack growing downwards, older stack frame must be\n    // at a greater address that the current one.\n    if (new_sp <= old_sp) return NULL;\n    // Assume stack frames larger than 100,000 bytes are bogus.\n    if ((uintptr_t)new_sp - (uintptr_t)old_sp > 100000) return NULL;\n  } else {\n    // In the non-strict mode, allow discontiguous stack frames.\n    // (alternate-signal-stacks for example).\n    if (new_sp == old_sp) return NULL;\n    // And allow frames upto about 1MB.\n    if ((new_sp > old_sp)\n        && ((uintptr_t)new_sp - (uintptr_t)old_sp > 1000000)) return NULL;\n  }\n  if ((uintptr_t)new_sp & (sizeof(void *) - 1)) return NULL;\n#ifdef __i386__\n  // On 64-bit machines, the stack pointer can be very close to\n  // 0xffffffff, so we explicitly check for a pointer into the\n  // last two pages in the address space\n  if ((uintptr_t)new_sp >= 0xffffe000) return NULL;\n#endif\n#if !defined(OS_WINDOWS)\n  if (!STRICT_UNWINDING) {\n    // Lax sanity checks cause a crash in 32-bit tcmalloc/crash_reason_test\n    // on AMD-based machines with VDSO-enabled kernels.\n    // Make an extra sanity check to insure new_sp is readable.\n    // Note: NextStackFrame<false>() is only called while the program\n    //       is already on its last leg, so it's ok to be slow here.\n    static int page_size = getpagesize();\n    void *new_sp_aligned = (void *)((uintptr_t)new_sp & ~(page_size - 1));\n    if (msync(new_sp_aligned, page_size, MS_ASYNC) == -1)\n      return NULL;\n  }\n#endif\n  return new_sp;\n}\n\n// If you change this function, also change GetStackFrames below.\nint GetStackTrace(void** result, int max_depth, int skip_count) {\n  void **sp;\n#ifdef __i386__\n  // Stack frame format:\n  //    sp[0]   pointer to previous frame\n  //    sp[1]   caller address\n  //    sp[2]   first argument\n  //    ...\n  sp = (void **)&result - 2;\n#endif\n\n#ifdef __x86_64__\n  // __builtin_frame_address(0) can return the wrong address on gcc-4.1.0-k8\n  unsigned long rbp;\n  // Move the value of the register %rbp into the local variable rbp.\n  // We need 'volatile' to prevent this instruction from getting moved\n  // around during optimization to before function prologue is done.\n  // An alternative way to achieve this\n  // would be (before this __asm__ instruction) to call Noop() defined as\n  //   static void Noop() __attribute__ ((noinline));  // prevent inlining\n  //   static void Noop() { asm(\"\"); }  // prevent optimizing-away\n  __asm__ volatile (\"mov %%rbp, %0\" : \"=r\" (rbp));\n  // Arguments are passed in registers on x86-64, so we can't just\n  // offset from &result\n  sp = (void **) rbp;\n#endif\n\n  int n = 0;\n  while (sp && n < max_depth) {\n    if (*(sp+1) == (void *)0) {\n      // In 64-bit code, we often see a frame that\n      // points to itself and has a return address of 0.\n      break;\n    }\n    if (skip_count > 0) {\n      skip_count--;\n    } else {\n      result[n++] = *(sp+1);\n    }\n    // Use strict unwinding rules.\n    sp = NextStackFrame<true>(sp);\n  }\n  return n;\n}\n\n_END_GOOGLE_NAMESPACE_\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/stacktrace_x86_64-inl.h",
    "content": "// Copyright (c) 2005 - 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: Arun Sharma\n//\n// Produce stack trace using libgcc\n\nextern \"C\" {\n#include <stdlib.h> // for NULL\n#include <unwind.h> // ABI defined unwinder\n}\n#include \"stacktrace.h\"\n\n_START_GOOGLE_NAMESPACE_\n\ntypedef struct {\n  void **result;\n  int max_depth;\n  int skip_count;\n  int count;\n} trace_arg_t;\n\n\n// Workaround for the malloc() in _Unwind_Backtrace() issue.\nstatic _Unwind_Reason_Code nop_backtrace(struct _Unwind_Context *uc, void *opq) {\n  return _URC_NO_REASON;\n}\n\n\n// This code is not considered ready to run until\n// static initializers run so that we are guaranteed\n// that any malloc-related initialization is done.\nstatic bool ready_to_run = false;\nclass StackTraceInit {\n public:\n   StackTraceInit() {\n     // Extra call to force initialization\n     _Unwind_Backtrace(nop_backtrace, NULL);\n     ready_to_run = true;\n   }\n};\n\nstatic StackTraceInit module_initializer;  // Force initialization\n\nstatic _Unwind_Reason_Code GetOneFrame(struct _Unwind_Context *uc, void *opq) {\n  trace_arg_t *targ = (trace_arg_t *) opq;\n\n  if (targ->skip_count > 0) {\n    targ->skip_count--;\n  } else {\n    targ->result[targ->count++] = (void *) _Unwind_GetIP(uc);\n  }\n\n  if (targ->count == targ->max_depth)\n    return _URC_END_OF_STACK;\n\n  return _URC_NO_REASON;\n}\n\n// If you change this function, also change GetStackFrames below.\nint GetStackTrace(void** result, int max_depth, int skip_count) {\n  if (!ready_to_run)\n    return 0;\n\n  trace_arg_t targ;\n\n  skip_count += 1;         // Do not include the \"GetStackTrace\" frame\n\n  targ.result = result;\n  targ.max_depth = max_depth;\n  targ.skip_count = skip_count;\n  targ.count = 0;\n\n  _Unwind_Backtrace(GetOneFrame, &targ);\n\n  return targ.count;\n}\n\n_END_GOOGLE_NAMESPACE_\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/symbolize.cc",
    "content": "// Copyright (c) 2006, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: Satoru Takabayashi\n// Stack-footprint reduction work done by Raksit Ashok\n//\n// Implementation note:\n//\n// We don't use heaps but only use stacks.  We want to reduce the\n// stack consumption so that the symbolizer can run on small stacks.\n//\n// Here are some numbers collected with GCC 4.1.0 on x86:\n// - sizeof(Elf32_Sym)  = 16\n// - sizeof(Elf32_Shdr) = 40\n// - sizeof(Elf64_Sym)  = 24\n// - sizeof(Elf64_Shdr) = 64\n//\n// This implementation is intended to be async-signal-safe but uses\n// some functions which are not guaranteed to be so, such as memchr()\n// and memmove().  We assume they are async-signal-safe.\n//\n// Additional header can be specified by the GLOG_BUILD_CONFIG_INCLUDE\n// macro to add platform specific defines (e.g. OS_OPENBSD).\n\n#ifdef GLOG_BUILD_CONFIG_INCLUDE\n#include GLOG_BUILD_CONFIG_INCLUDE\n#endif  // GLOG_BUILD_CONFIG_INCLUDE\n\n#include \"utilities.h\"\n\n#if defined(HAVE_SYMBOLIZE)\n\n#include <limits>\n\n#include \"symbolize.h\"\n#include \"demangle.h\"\n\n_START_GOOGLE_NAMESPACE_\n\n// We don't use assert() since it's not guaranteed to be\n// async-signal-safe.  Instead we define a minimal assertion\n// macro. So far, we don't need pretty printing for __FILE__, etc.\n\n// A wrapper for abort() to make it callable in ? :.\nstatic int AssertFail() {\n  abort();\n  return 0;  // Should not reach.\n}\n\n#define SAFE_ASSERT(expr) ((expr) ? 0 : AssertFail())\n\nstatic SymbolizeCallback g_symbolize_callback = NULL;\nvoid InstallSymbolizeCallback(SymbolizeCallback callback) {\n  g_symbolize_callback = callback;\n}\n\nstatic SymbolizeOpenObjectFileCallback g_symbolize_open_object_file_callback =\n    NULL;\nvoid InstallSymbolizeOpenObjectFileCallback(\n    SymbolizeOpenObjectFileCallback callback) {\n  g_symbolize_open_object_file_callback = callback;\n}\n\n// This function wraps the Demangle function to provide an interface\n// where the input symbol is demangled in-place.\n// To keep stack consumption low, we would like this function to not\n// get inlined.\nstatic ATTRIBUTE_NOINLINE void DemangleInplace(char *out, int out_size) {\n  char demangled[256];  // Big enough for sane demangled symbols.\n  if (Demangle(out, demangled, sizeof(demangled))) {\n    // Demangling succeeded. Copy to out if the space allows.\n    size_t len = strlen(demangled);\n    if (len + 1 <= (size_t)out_size) {  // +1 for '\\0'.\n      SAFE_ASSERT(len < sizeof(demangled));\n      memmove(out, demangled, len + 1);\n    }\n  }\n}\n\n_END_GOOGLE_NAMESPACE_\n\n#if defined(__ELF__)\n\n#include <dlfcn.h>\n#if defined(OS_OPENBSD)\n#include <sys/exec_elf.h>\n#else\n#include <elf.h>\n#endif\n#include <errno.h>\n#include <fcntl.h>\n#include <limits.h>\n#include <stdint.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <stddef.h>\n#include <string.h>\n#include <sys/stat.h>\n#include <sys/types.h>\n#include <unistd.h>\n\n#include \"symbolize.h\"\n#include \"config.h\"\n#include \"glog/raw_logging.h\"\n\n// Re-runs fn until it doesn't cause EINTR.\n#define NO_INTR(fn)   do {} while ((fn) < 0 && errno == EINTR)\n\n_START_GOOGLE_NAMESPACE_\n\n// Read up to \"count\" bytes from file descriptor \"fd\" into the buffer\n// starting at \"buf\" while handling short reads and EINTR.  On\n// success, return the number of bytes read.  Otherwise, return -1.\nstatic ssize_t ReadPersistent(const int fd, void *buf, const size_t count) {\n  SAFE_ASSERT(fd >= 0);\n  SAFE_ASSERT(count <= std::numeric_limits<ssize_t>::max());\n  char *buf0 = reinterpret_cast<char *>(buf);\n  ssize_t num_bytes = 0;\n  while (num_bytes < count) {\n    ssize_t len;\n    NO_INTR(len = read(fd, buf0 + num_bytes, count - num_bytes));\n    if (len < 0) {  // There was an error other than EINTR.\n      return -1;\n    }\n    if (len == 0) {  // Reached EOF.\n      break;\n    }\n    num_bytes += len;\n  }\n  SAFE_ASSERT(num_bytes <= count);\n  return num_bytes;\n}\n\n// Read up to \"count\" bytes from \"offset\" in the file pointed by file\n// descriptor \"fd\" into the buffer starting at \"buf\".  On success,\n// return the number of bytes read.  Otherwise, return -1.\nstatic ssize_t ReadFromOffset(const int fd, void *buf,\n                              const size_t count, const off_t offset) {\n  off_t off = lseek(fd, offset, SEEK_SET);\n  if (off == (off_t)-1) {\n    return -1;\n  }\n  return ReadPersistent(fd, buf, count);\n}\n\n// Try reading exactly \"count\" bytes from \"offset\" bytes in a file\n// pointed by \"fd\" into the buffer starting at \"buf\" while handling\n// short reads and EINTR.  On success, return true. Otherwise, return\n// false.\nstatic bool ReadFromOffsetExact(const int fd, void *buf,\n                                const size_t count, const off_t offset) {\n  ssize_t len = ReadFromOffset(fd, buf, count, offset);\n  return len == count;\n}\n\n// Returns elf_header.e_type if the file pointed by fd is an ELF binary.\nstatic int FileGetElfType(const int fd) {\n  ElfW(Ehdr) elf_header;\n  if (!ReadFromOffsetExact(fd, &elf_header, sizeof(elf_header), 0)) {\n    return -1;\n  }\n  if (memcmp(elf_header.e_ident, ELFMAG, SELFMAG) != 0) {\n    return -1;\n  }\n  return elf_header.e_type;\n}\n\n// Read the section headers in the given ELF binary, and if a section\n// of the specified type is found, set the output to this section header\n// and return true.  Otherwise, return false.\n// To keep stack consumption low, we would like this function to not get\n// inlined.\nstatic ATTRIBUTE_NOINLINE bool\nGetSectionHeaderByType(const int fd, ElfW(Half) sh_num, const off_t sh_offset,\n                       ElfW(Word) type, ElfW(Shdr) *out) {\n  // Read at most 16 section headers at a time to save read calls.\n  ElfW(Shdr) buf[16];\n  for (int i = 0; i < sh_num;) {\n    const ssize_t num_bytes_left = (sh_num - i) * sizeof(buf[0]);\n    const ssize_t num_bytes_to_read =\n        (sizeof(buf) > num_bytes_left) ? num_bytes_left : sizeof(buf);\n    const ssize_t len = ReadFromOffset(fd, buf, num_bytes_to_read,\n                                       sh_offset + i * sizeof(buf[0]));\n    SAFE_ASSERT(len % sizeof(buf[0]) == 0);\n    const ssize_t num_headers_in_buf = len / sizeof(buf[0]);\n    SAFE_ASSERT(num_headers_in_buf <= sizeof(buf) / sizeof(buf[0]));\n    for (int j = 0; j < num_headers_in_buf; ++j) {\n      if (buf[j].sh_type == type) {\n        *out = buf[j];\n        return true;\n      }\n    }\n    i += num_headers_in_buf;\n  }\n  return false;\n}\n\n// There is no particular reason to limit section name to 63 characters,\n// but there has (as yet) been no need for anything longer either.\nconst int kMaxSectionNameLen = 64;\n\n// name_len should include terminating '\\0'.\nbool GetSectionHeaderByName(int fd, const char *name, size_t name_len,\n                            ElfW(Shdr) *out) {\n  ElfW(Ehdr) elf_header;\n  if (!ReadFromOffsetExact(fd, &elf_header, sizeof(elf_header), 0)) {\n    return false;\n  }\n\n  ElfW(Shdr) shstrtab;\n  off_t shstrtab_offset = (elf_header.e_shoff +\n                           elf_header.e_shentsize * elf_header.e_shstrndx);\n  if (!ReadFromOffsetExact(fd, &shstrtab, sizeof(shstrtab), shstrtab_offset)) {\n    return false;\n  }\n\n  for (int i = 0; i < elf_header.e_shnum; ++i) {\n    off_t section_header_offset = (elf_header.e_shoff +\n                                   elf_header.e_shentsize * i);\n    if (!ReadFromOffsetExact(fd, out, sizeof(*out), section_header_offset)) {\n      return false;\n    }\n    char header_name[kMaxSectionNameLen];\n    if (sizeof(header_name) < name_len) {\n      RAW_LOG(WARNING, \"Section name '%s' is too long (%\" PRIuS \"); \"\n              \"section will not be found (even if present).\", name, name_len);\n      // No point in even trying.\n      return false;\n    }\n    off_t name_offset = shstrtab.sh_offset + out->sh_name;\n    ssize_t n_read = ReadFromOffset(fd, &header_name, name_len, name_offset);\n    if (n_read == -1) {\n      return false;\n    } else if (n_read != name_len) {\n      // Short read -- name could be at end of file.\n      continue;\n    }\n    if (memcmp(header_name, name, name_len) == 0) {\n      return true;\n    }\n  }\n  return false;\n}\n\n// Read a symbol table and look for the symbol containing the\n// pc. Iterate over symbols in a symbol table and look for the symbol\n// containing \"pc\".  On success, return true and write the symbol name\n// to out.  Otherwise, return false.\n// To keep stack consumption low, we would like this function to not get\n// inlined.\nstatic ATTRIBUTE_NOINLINE bool\nFindSymbol(uint64_t pc, const int fd, char *out, int out_size,\n           uint64_t symbol_offset, const ElfW(Shdr) *strtab,\n           const ElfW(Shdr) *symtab) {\n  if (symtab == NULL) {\n    return false;\n  }\n  const int num_symbols = symtab->sh_size / symtab->sh_entsize;\n  for (int i = 0; i < num_symbols;) {\n    off_t offset = symtab->sh_offset + i * symtab->sh_entsize;\n\n    // If we are reading Elf64_Sym's, we want to limit this array to\n    // 32 elements (to keep stack consumption low), otherwise we can\n    // have a 64 element Elf32_Sym array.\n#if __WORDSIZE == 64\n#define NUM_SYMBOLS 32\n#else\n#define NUM_SYMBOLS 64\n#endif\n\n    // Read at most NUM_SYMBOLS symbols at once to save read() calls.\n    ElfW(Sym) buf[NUM_SYMBOLS];\n    const ssize_t len = ReadFromOffset(fd, &buf, sizeof(buf), offset);\n    SAFE_ASSERT(len % sizeof(buf[0]) == 0);\n    const ssize_t num_symbols_in_buf = len / sizeof(buf[0]);\n    SAFE_ASSERT(num_symbols_in_buf <= sizeof(buf)/sizeof(buf[0]));\n    for (int j = 0; j < num_symbols_in_buf; ++j) {\n      const ElfW(Sym)& symbol = buf[j];\n      uint64_t start_address = symbol.st_value;\n      start_address += symbol_offset;\n      uint64_t end_address = start_address + symbol.st_size;\n      if (symbol.st_value != 0 &&  // Skip null value symbols.\n          symbol.st_shndx != 0 &&  // Skip undefined symbols.\n          start_address <= pc && pc < end_address) {\n        ssize_t len1 = ReadFromOffset(fd, out, out_size,\n                                      strtab->sh_offset + symbol.st_name);\n        if (len1 <= 0 || memchr(out, '\\0', out_size) == NULL) {\n          return false;\n        }\n        return true;  // Obtained the symbol name.\n      }\n    }\n    i += num_symbols_in_buf;\n  }\n  return false;\n}\n\n// Get the symbol name of \"pc\" from the file pointed by \"fd\".  Process\n// both regular and dynamic symbol tables if necessary.  On success,\n// write the symbol name to \"out\" and return true.  Otherwise, return\n// false.\nstatic bool GetSymbolFromObjectFile(const int fd, uint64_t pc,\n                                    char *out, int out_size,\n                                    uint64_t map_base_address) {\n  // Read the ELF header.\n  ElfW(Ehdr) elf_header;\n  if (!ReadFromOffsetExact(fd, &elf_header, sizeof(elf_header), 0)) {\n    return false;\n  }\n\n  uint64_t symbol_offset = 0;\n  if (elf_header.e_type == ET_DYN) {  // DSO needs offset adjustment.\n    ElfW(Phdr) phdr;\n    // We need to find the PT_LOAD segment corresponding to the read-execute\n    // file mapping in order to correctly perform the offset adjustment.\n    for (unsigned i = 0; i != elf_header.e_phnum; ++i) {\n      if (!ReadFromOffsetExact(fd, &phdr, sizeof(phdr),\n                               elf_header.e_phoff + i * sizeof(phdr)))\n        return false;\n      if (phdr.p_type == PT_LOAD &&\n          (phdr.p_flags & (PF_R | PF_X)) == (PF_R | PF_X)) {\n        // Find the mapped address corresponding to virtual address zero. We do\n        // this by first adding p_offset. This gives us the mapped address of\n        // the start of the segment, or in other words the mapped address\n        // corresponding to the virtual address of the segment. (Note that this\n        // is distinct from the start address, as p_offset is not guaranteed to\n        // be page aligned.) We then subtract p_vaddr, which takes us to virtual\n        // address zero.\n        symbol_offset = map_base_address + phdr.p_offset - phdr.p_vaddr;\n        break;\n      }\n    }\n    if (symbol_offset == 0)\n      return false;\n  }\n\n  ElfW(Shdr) symtab, strtab;\n\n  // Consult a regular symbol table first.\n  if (GetSectionHeaderByType(fd, elf_header.e_shnum, elf_header.e_shoff,\n                             SHT_SYMTAB, &symtab)) {\n    if (!ReadFromOffsetExact(fd, &strtab, sizeof(strtab), elf_header.e_shoff +\n                             symtab.sh_link * sizeof(symtab))) {\n      return false;\n    }\n    if (FindSymbol(pc, fd, out, out_size, symbol_offset,\n                   &strtab, &symtab)) {\n      return true;  // Found the symbol in a regular symbol table.\n    }\n  }\n\n  // If the symbol is not found, then consult a dynamic symbol table.\n  if (GetSectionHeaderByType(fd, elf_header.e_shnum, elf_header.e_shoff,\n                             SHT_DYNSYM, &symtab)) {\n    if (!ReadFromOffsetExact(fd, &strtab, sizeof(strtab), elf_header.e_shoff +\n                             symtab.sh_link * sizeof(symtab))) {\n      return false;\n    }\n    if (FindSymbol(pc, fd, out, out_size, symbol_offset,\n                   &strtab, &symtab)) {\n      return true;  // Found the symbol in a dynamic symbol table.\n    }\n  }\n\n  return false;\n}\n\nnamespace {\n// Thin wrapper around a file descriptor so that the file descriptor\n// gets closed for sure.\nstruct FileDescriptor {\n  const int fd_;\n  explicit FileDescriptor(int fd) : fd_(fd) {}\n  ~FileDescriptor() {\n    if (fd_ >= 0) {\n      NO_INTR(close(fd_));\n    }\n  }\n  int get() { return fd_; }\n\n private:\n  explicit FileDescriptor(const FileDescriptor&);\n  void operator=(const FileDescriptor&);\n};\n\n// Helper class for reading lines from file.\n//\n// Note: we don't use ProcMapsIterator since the object is big (it has\n// a 5k array member) and uses async-unsafe functions such as sscanf()\n// and snprintf().\nclass LineReader {\n public:\n  explicit LineReader(int fd, char *buf, int buf_len) : fd_(fd),\n    buf_(buf), buf_len_(buf_len), bol_(buf), eol_(buf), eod_(buf) {\n  }\n\n  // Read '\\n'-terminated line from file.  On success, modify \"bol\"\n  // and \"eol\", then return true.  Otherwise, return false.\n  //\n  // Note: if the last line doesn't end with '\\n', the line will be\n  // dropped.  It's an intentional behavior to make the code simple.\n  bool ReadLine(const char **bol, const char **eol) {\n    if (BufferIsEmpty()) {  // First time.\n      const ssize_t num_bytes = ReadPersistent(fd_, buf_, buf_len_);\n      if (num_bytes <= 0) {  // EOF or error.\n        return false;\n      }\n      eod_ = buf_ + num_bytes;\n      bol_ = buf_;\n    } else {\n      bol_ = eol_ + 1;  // Advance to the next line in the buffer.\n      SAFE_ASSERT(bol_ <= eod_);  // \"bol_\" can point to \"eod_\".\n      if (!HasCompleteLine()) {\n        const int incomplete_line_length = eod_ - bol_;\n        // Move the trailing incomplete line to the beginning.\n        memmove(buf_, bol_, incomplete_line_length);\n        // Read text from file and append it.\n        char * const append_pos = buf_ + incomplete_line_length;\n        const int capacity_left = buf_len_ - incomplete_line_length;\n        const ssize_t num_bytes = ReadPersistent(fd_, append_pos,\n                                                 capacity_left);\n        if (num_bytes <= 0) {  // EOF or error.\n          return false;\n        }\n        eod_ = append_pos + num_bytes;\n        bol_ = buf_;\n      }\n    }\n    eol_ = FindLineFeed();\n    if (eol_ == NULL) {  // '\\n' not found.  Malformed line.\n      return false;\n    }\n    *eol_ = '\\0';  // Replace '\\n' with '\\0'.\n\n    *bol = bol_;\n    *eol = eol_;\n    return true;\n  }\n\n  // Beginning of line.\n  const char *bol() {\n    return bol_;\n  }\n\n  // End of line.\n  const char *eol() {\n    return eol_;\n  }\n\n private:\n  explicit LineReader(const LineReader&);\n  void operator=(const LineReader&);\n\n  char *FindLineFeed() {\n    return reinterpret_cast<char *>(memchr(bol_, '\\n', eod_ - bol_));\n  }\n\n  bool BufferIsEmpty() {\n    return buf_ == eod_;\n  }\n\n  bool HasCompleteLine() {\n    return !BufferIsEmpty() && FindLineFeed() != NULL;\n  }\n\n  const int fd_;\n  char * const buf_;\n  const int buf_len_;\n  char *bol_;\n  char *eol_;\n  const char *eod_;  // End of data in \"buf_\".\n};\n}  // namespace\n\n// Place the hex number read from \"start\" into \"*hex\".  The pointer to\n// the first non-hex character or \"end\" is returned.\nstatic char *GetHex(const char *start, const char *end, uint64_t *hex) {\n  *hex = 0;\n  const char *p;\n  for (p = start; p < end; ++p) {\n    int ch = *p;\n    if ((ch >= '0' && ch <= '9') ||\n        (ch >= 'A' && ch <= 'F') || (ch >= 'a' && ch <= 'f')) {\n      *hex = (*hex << 4) | (ch < 'A' ? ch - '0' : (ch & 0xF) + 9);\n    } else {  // Encountered the first non-hex character.\n      break;\n    }\n  }\n  SAFE_ASSERT(p <= end);\n  return const_cast<char *>(p);\n}\n\n// Searches for the object file (from /proc/self/maps) that contains\n// the specified pc.  If found, sets |start_address| to the start address\n// of where this object file is mapped in memory, sets the module base\n// address into |base_address|, copies the object file name into\n// |out_file_name|, and attempts to open the object file.  If the object\n// file is opened successfully, returns the file descriptor.  Otherwise,\n// returns -1.  |out_file_name_size| is the size of the file name buffer\n// (including the null-terminator).\nstatic ATTRIBUTE_NOINLINE int\nOpenObjectFileContainingPcAndGetStartAddress(uint64_t pc,\n                                             uint64_t &start_address,\n                                             uint64_t &base_address,\n                                             char *out_file_name,\n                                             int out_file_name_size) {\n  int object_fd;\n\n  // Open /proc/self/maps.\n  int maps_fd;\n  NO_INTR(maps_fd = open(\"/proc/self/maps\", O_RDONLY));\n  FileDescriptor wrapped_maps_fd(maps_fd);\n  if (wrapped_maps_fd.get() < 0) {\n    return -1;\n  }\n\n  // Iterate over maps and look for the map containing the pc.  Then\n  // look into the symbol tables inside.\n  char buf[1024];  // Big enough for line of sane /proc/self/maps\n  int num_maps = 0;\n  LineReader reader(wrapped_maps_fd.get(), buf, sizeof(buf));\n  while (true) {\n    num_maps++;\n    const char *cursor;\n    const char *eol;\n    if (!reader.ReadLine(&cursor, &eol)) {  // EOF or malformed line.\n      return -1;\n    }\n\n    // Start parsing line in /proc/self/maps.  Here is an example:\n    //\n    // 08048000-0804c000 r-xp 00000000 08:01 2142121    /bin/cat\n    //\n    // We want start address (08048000), end address (0804c000), flags\n    // (r-xp) and file name (/bin/cat).\n\n    // Read start address.\n    cursor = GetHex(cursor, eol, &start_address);\n    if (cursor == eol || *cursor != '-') {\n      return -1;  // Malformed line.\n    }\n    ++cursor;  // Skip '-'.\n\n    // Read end address.\n    uint64_t end_address;\n    cursor = GetHex(cursor, eol, &end_address);\n    if (cursor == eol || *cursor != ' ') {\n      return -1;  // Malformed line.\n    }\n    ++cursor;  // Skip ' '.\n\n    // Check start and end addresses.\n    if (!(start_address <= pc && pc < end_address)) {\n      continue;  // We skip this map.  PC isn't in this map.\n    }\n\n    // Read flags.  Skip flags until we encounter a space or eol.\n    const char * const flags_start = cursor;\n    while (cursor < eol && *cursor != ' ') {\n      ++cursor;\n    }\n    // We expect at least four letters for flags (ex. \"r-xp\").\n    if (cursor == eol || cursor < flags_start + 4) {\n      return -1;  // Malformed line.\n    }\n\n   // Check flags.  We are only interested in \"r*x\" maps.\n    if (flags_start[0] != 'r' || flags_start[2] != 'x') {\n      continue;  // We skip this map.\n    }\n    ++cursor;  // Skip ' '.\n\n    // Read file offset.\n    uint64_t file_offset;\n    cursor = GetHex(cursor, eol, &file_offset);\n    if (cursor == eol || *cursor != ' ') {\n      return -1;  // Malformed line.\n    }\n    ++cursor;  // Skip ' '.\n\n    // Don't subtract 'start_address' from the first entry:\n    // * If a binary is compiled w/o -pie, then the first entry in\n    //   process maps is likely the binary itself (all dynamic libs\n    //   are mapped higher in address space). For such a binary,\n    //   instruction offset in binary coincides with the actual\n    //   instruction address in virtual memory (as code section\n    //   is mapped to a fixed memory range).\n    // * If a binary is compiled with -pie, all the modules are\n    //   mapped high at address space (in particular, higher than\n    //   shadow memory of the tool), so the module can't be the\n    //   first entry.\n    base_address = ((num_maps == 1) ? 0U : start_address) - file_offset;\n\n    // Skip to file name.  \"cursor\" now points to dev.  We need to\n    // skip at least two spaces for dev and inode.\n    int num_spaces = 0;\n    while (cursor < eol) {\n      if (*cursor == ' ') {\n        ++num_spaces;\n      } else if (num_spaces >= 2) {\n        // The first non-space character after skipping two spaces\n        // is the beginning of the file name.\n        break;\n      }\n      ++cursor;\n    }\n    if (cursor == eol) {\n      return -1;  // Malformed line.\n    }\n\n    // Finally, \"cursor\" now points to file name of our interest.\n    NO_INTR(object_fd = open(cursor, O_RDONLY));\n    if (object_fd < 0) {\n      // Failed to open object file.  Copy the object file name to\n      // |out_file_name|.\n      strncpy(out_file_name, cursor, out_file_name_size);\n      // Making sure |out_file_name| is always null-terminated.\n      out_file_name[out_file_name_size - 1] = '\\0';\n      return -1;\n    }\n    return object_fd;\n  }\n}\n\n// POSIX doesn't define any async-signal safe function for converting\n// an integer to ASCII. We'll have to define our own version.\n// itoa_r() converts a (signed) integer to ASCII. It returns \"buf\", if the\n// conversion was successful or NULL otherwise. It never writes more than \"sz\"\n// bytes. Output will be truncated as needed, and a NUL character is always\n// appended.\n// NOTE: code from sandbox/linux/seccomp-bpf/demo.cc.\nchar *itoa_r(intptr_t i, char *buf, size_t sz, int base, size_t padding) {\n  // Make sure we can write at least one NUL byte.\n  size_t n = 1;\n  if (n > sz)\n    return NULL;\n\n  if (base < 2 || base > 16) {\n    buf[0] = '\\000';\n    return NULL;\n  }\n\n  char *start = buf;\n\n  uintptr_t j = i;\n\n  // Handle negative numbers (only for base 10).\n  if (i < 0 && base == 10) {\n    j = -i;\n\n    // Make sure we can write the '-' character.\n    if (++n > sz) {\n      buf[0] = '\\000';\n      return NULL;\n    }\n    *start++ = '-';\n  }\n\n  // Loop until we have converted the entire number. Output at least one\n  // character (i.e. '0').\n  char *ptr = start;\n  do {\n    // Make sure there is still enough space left in our output buffer.\n    if (++n > sz) {\n      buf[0] = '\\000';\n      return NULL;\n    }\n\n    // Output the next digit.\n    *ptr++ = \"0123456789abcdef\"[j % base];\n    j /= base;\n\n    if (padding > 0)\n      padding--;\n  } while (j > 0 || padding > 0);\n\n  // Terminate the output with a NUL character.\n  *ptr = '\\000';\n\n  // Conversion to ASCII actually resulted in the digits being in reverse\n  // order. We can't easily generate them in forward order, as we can't tell\n  // the number of characters needed until we are done converting.\n  // So, now, we reverse the string (except for the possible \"-\" sign).\n  while (--ptr > start) {\n    char ch = *ptr;\n    *ptr = *start;\n    *start++ = ch;\n  }\n  return buf;\n}\n\n// Safely appends string |source| to string |dest|.  Never writes past the\n// buffer size |dest_size| and guarantees that |dest| is null-terminated.\nvoid SafeAppendString(const char* source, char* dest, int dest_size) {\n  int dest_string_length = strlen(dest);\n  SAFE_ASSERT(dest_string_length < dest_size);\n  dest += dest_string_length;\n  dest_size -= dest_string_length;\n  strncpy(dest, source, dest_size);\n  // Making sure |dest| is always null-terminated.\n  dest[dest_size - 1] = '\\0';\n}\n\n// Converts a 64-bit value into a hex string, and safely appends it to |dest|.\n// Never writes past the buffer size |dest_size| and guarantees that |dest| is\n// null-terminated.\nvoid SafeAppendHexNumber(uint64_t value, char* dest, int dest_size) {\n  // 64-bit numbers in hex can have up to 16 digits.\n  char buf[17] = {'\\0'};\n  SafeAppendString(itoa_r(value, buf, sizeof(buf), 16, 0), dest, dest_size);\n}\n\n// The implementation of our symbolization routine.  If it\n// successfully finds the symbol containing \"pc\" and obtains the\n// symbol name, returns true and write the symbol name to \"out\".\n// Otherwise, returns false. If Callback function is installed via\n// InstallSymbolizeCallback(), the function is also called in this function,\n// and \"out\" is used as its output.\n// To keep stack consumption low, we would like this function to not\n// get inlined.\nstatic ATTRIBUTE_NOINLINE bool SymbolizeAndDemangle(void *pc, char *out,\n                                                    int out_size) {\n  uint64_t pc0 = reinterpret_cast<uintptr_t>(pc);\n  uint64_t start_address = 0;\n  uint64_t base_address = 0;\n  int object_fd = -1;\n\n  if (out_size < 1) {\n    return false;\n  }\n  out[0] = '\\0';\n  SafeAppendString(\"(\", out, out_size);\n\n  if (g_symbolize_open_object_file_callback) {\n    object_fd = g_symbolize_open_object_file_callback(pc0, start_address,\n                                                      base_address, out + 1,\n                                                      out_size - 1);\n  } else {\n    object_fd = OpenObjectFileContainingPcAndGetStartAddress(pc0, start_address,\n                                                             base_address,\n                                                             out + 1,\n                                                             out_size - 1);\n  }\n\n  // Check whether a file name was returned.\n  if (object_fd < 0) {\n    if (out[1]) {\n      // The object file containing PC was determined successfully however the\n      // object file was not opened successfully.  This is still considered\n      // success because the object file name and offset are known and tools\n      // like asan_symbolize.py can be used for the symbolization.\n      out[out_size - 1] = '\\0';  // Making sure |out| is always null-terminated.\n      SafeAppendString(\"+0x\", out, out_size);\n      SafeAppendHexNumber(pc0 - base_address, out, out_size);\n      SafeAppendString(\")\", out, out_size);\n      return true;\n    }\n    // Failed to determine the object file containing PC.  Bail out.\n    return false;\n  }\n  FileDescriptor wrapped_object_fd(object_fd);\n  int elf_type = FileGetElfType(wrapped_object_fd.get());\n  if (elf_type == -1) {\n    return false;\n  }\n  if (g_symbolize_callback) {\n    // Run the call back if it's installed.\n    // Note: relocation (and much of the rest of this code) will be\n    // wrong for prelinked shared libraries and PIE executables.\n    uint64 relocation = (elf_type == ET_DYN) ? start_address : 0;\n    int num_bytes_written = g_symbolize_callback(wrapped_object_fd.get(),\n                                                 pc, out, out_size,\n                                                 relocation);\n    if (num_bytes_written > 0) {\n      out += num_bytes_written;\n      out_size -= num_bytes_written;\n    }\n  }\n  if (!GetSymbolFromObjectFile(wrapped_object_fd.get(), pc0,\n                               out, out_size, base_address)) {\n    return false;\n  }\n\n  // Symbolization succeeded.  Now we try to demangle the symbol.\n  DemangleInplace(out, out_size);\n  return true;\n}\n\n_END_GOOGLE_NAMESPACE_\n\n#elif defined(OS_MACOSX) && defined(HAVE_DLADDR)\n\n#include <dlfcn.h>\n#include <string.h>\n\n_START_GOOGLE_NAMESPACE_\n\nstatic ATTRIBUTE_NOINLINE bool SymbolizeAndDemangle(void *pc, char *out,\n                                                    int out_size) {\n  Dl_info info;\n  if (dladdr(pc, &info)) {\n    if ((int)strlen(info.dli_sname) < out_size) {\n      strcpy(out, info.dli_sname);\n      // Symbolization succeeded.  Now we try to demangle the symbol.\n      DemangleInplace(out, out_size);\n      return true;\n    }\n  }\n  return false;\n}\n\n_END_GOOGLE_NAMESPACE_\n\n#else\n# error BUG: HAVE_SYMBOLIZE was wrongly set\n#endif\n\n_START_GOOGLE_NAMESPACE_\n\nbool Symbolize(void *pc, char *out, int out_size) {\n  SAFE_ASSERT(out_size >= 0);\n  return SymbolizeAndDemangle(pc, out, out_size);\n}\n\n_END_GOOGLE_NAMESPACE_\n\n#else  /* HAVE_SYMBOLIZE */\n\n#include <assert.h>\n\n#include \"config.h\"\n\n_START_GOOGLE_NAMESPACE_\n\n// TODO: Support other environments.\nbool Symbolize(void *pc, char *out, int out_size) {\n  assert(0);\n  return false;\n}\n\n_END_GOOGLE_NAMESPACE_\n\n#endif\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/symbolize.h",
    "content": "// Copyright (c) 2006, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: Satoru Takabayashi\n//\n// This library provides Symbolize() function that symbolizes program\n// counters to their corresponding symbol names on linux platforms.\n// This library has a minimal implementation of an ELF symbol table\n// reader (i.e. it doesn't depend on libelf, etc.).\n//\n// The algorithm used in Symbolize() is as follows.\n//\n//   1. Go through a list of maps in /proc/self/maps and find the map\n//   containing the program counter.\n//\n//   2. Open the mapped file and find a regular symbol table inside.\n//   Iterate over symbols in the symbol table and look for the symbol\n//   containing the program counter.  If such a symbol is found,\n//   obtain the symbol name, and demangle the symbol if possible.\n//   If the symbol isn't found in the regular symbol table (binary is\n//   stripped), try the same thing with a dynamic symbol table.\n//\n// Note that Symbolize() is originally implemented to be used in\n// FailureSignalHandler() in base/google.cc.  Hence it doesn't use\n// malloc() and other unsafe operations.  It should be both\n// thread-safe and async-signal-safe.\n\n#ifndef BASE_SYMBOLIZE_H_\n#define BASE_SYMBOLIZE_H_\n\n#include \"utilities.h\"\n#include \"config.h\"\n#include \"glog/logging.h\"\n\n#ifdef HAVE_SYMBOLIZE\n\n#if defined(__ELF__)  // defined by gcc\n#if defined(__OpenBSD__)\n#include <sys/exec_elf.h>\n#else\n#include <elf.h>\n#endif\n\n#if !defined(ANDROID)\n#include <link.h>  // For ElfW() macro.\n#endif\n\n// For systems where SIZEOF_VOID_P is not defined, determine it\n// based on __LP64__ (defined by gcc on 64-bit systems)\n#if !defined(SIZEOF_VOID_P)\n# if defined(__LP64__)\n#  define SIZEOF_VOID_P 8\n# else\n#  define SIZEOF_VOID_P 4\n# endif\n#endif\n\n// If there is no ElfW macro, let's define it by ourself.\n#ifndef ElfW\n# if SIZEOF_VOID_P == 4\n#  define ElfW(type) Elf32_##type\n# elif SIZEOF_VOID_P == 8\n#  define ElfW(type) Elf64_##type\n# else\n#  error \"Unknown sizeof(void *)\"\n# endif\n#endif\n\n_START_GOOGLE_NAMESPACE_\n\n// Gets the section header for the given name, if it exists. Returns true on\n// success. Otherwise, returns false.\nbool GetSectionHeaderByName(int fd, const char *name, size_t name_len,\n                            ElfW(Shdr) *out);\n\n_END_GOOGLE_NAMESPACE_\n\n#endif  /* __ELF__ */\n\n_START_GOOGLE_NAMESPACE_\n\n// Restrictions on the callbacks that follow:\n//  - The callbacks must not use heaps but only use stacks.\n//  - The callbacks must be async-signal-safe.\n\n// Installs a callback function, which will be called right before a symbol name\n// is printed. The callback is intended to be used for showing a file name and a\n// line number preceding a symbol name.\n// \"fd\" is a file descriptor of the object file containing the program\n// counter \"pc\". The callback function should write output to \"out\"\n// and return the size of the output written. On error, the callback\n// function should return -1.\ntypedef int (*SymbolizeCallback)(int fd, void *pc, char *out, size_t out_size,\n                                 uint64 relocation);\nvoid InstallSymbolizeCallback(SymbolizeCallback callback);\n\n// Installs a callback function, which will be called instead of\n// OpenObjectFileContainingPcAndGetStartAddress.  The callback is expected\n// to searches for the object file (from /proc/self/maps) that contains\n// the specified pc.  If found, sets |start_address| to the start address\n// of where this object file is mapped in memory, sets the module base\n// address into |base_address|, copies the object file name into\n// |out_file_name|, and attempts to open the object file.  If the object\n// file is opened successfully, returns the file descriptor.  Otherwise,\n// returns -1.  |out_file_name_size| is the size of the file name buffer\n// (including the null-terminator).\ntypedef int (*SymbolizeOpenObjectFileCallback)(uint64_t pc,\n                                               uint64_t &start_address,\n                                               uint64_t &base_address,\n                                               char *out_file_name,\n                                               int out_file_name_size);\nvoid InstallSymbolizeOpenObjectFileCallback(\n    SymbolizeOpenObjectFileCallback callback);\n\n_END_GOOGLE_NAMESPACE_\n\n#endif\n\n_START_GOOGLE_NAMESPACE_\n\n// Symbolizes a program counter.  On success, returns true and write the\n// symbol name to \"out\".  The symbol name is demangled if possible\n// (supports symbols generated by GCC 3.x or newer).  Otherwise,\n// returns false.\nbool Symbolize(void *pc, char *out, int out_size);\n\n_END_GOOGLE_NAMESPACE_\n\n#endif  // BASE_SYMBOLIZE_H_\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/utilities.cc",
    "content": "// Copyright (c) 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: Shinichiro Hamaji\n\n#include \"utilities.h\"\n\n#include <stdio.h>\n#include <stdlib.h>\n\n#include <signal.h>\n#ifdef HAVE_SYS_TIME_H\n# include <sys/time.h>\n#endif\n#include <time.h>\n#if defined(HAVE_SYSCALL_H)\n#include <syscall.h>                 // for syscall()\n#elif defined(HAVE_SYS_SYSCALL_H)\n#include <sys/syscall.h>                 // for syscall()\n#endif\n#ifdef HAVE_SYSLOG_H\n# include <syslog.h>\n#endif\n\n#include \"base/googleinit.h\"\n\nusing std::string;\n\n_START_GOOGLE_NAMESPACE_\n\nstatic const char* g_program_invocation_short_name = NULL;\nstatic pthread_t g_main_thread_id;\n\n_END_GOOGLE_NAMESPACE_\n\n// The following APIs are all internal.\n#ifdef HAVE_STACKTRACE\n\n#include \"stacktrace.h\"\n#include \"symbolize.h\"\n#include \"base/commandlineflags.h\"\n\nGLOG_DEFINE_bool(symbolize_stacktrace, true,\n                 \"Symbolize the stack trace in the tombstone\");\n\n_START_GOOGLE_NAMESPACE_\n\ntypedef void DebugWriter(const char*, void*);\n\n// The %p field width for printf() functions is two characters per byte.\n// For some environments, add two extra bytes for the leading \"0x\".\nstatic const int kPrintfPointerFieldWidth = 2 + 2 * sizeof(void*);\n\nstatic void DebugWriteToStderr(const char* data, void *) {\n  // This one is signal-safe.\n  if (write(STDERR_FILENO, data, strlen(data)) < 0) {\n    // Ignore errors.\n  }\n}\n\nvoid DebugWriteToString(const char* data, void *arg) {\n  reinterpret_cast<string*>(arg)->append(data);\n}\n\n#ifdef HAVE_SYMBOLIZE\n// Print a program counter and its symbol name.\nstatic void DumpPCAndSymbol(DebugWriter *writerfn, void *arg, void *pc,\n                            const char * const prefix) {\n  char tmp[1024];\n  const char *symbol = \"(unknown)\";\n  // Symbolizes the previous address of pc because pc may be in the\n  // next function.  The overrun happens when the function ends with\n  // a call to a function annotated noreturn (e.g. CHECK).\n  if (Symbolize(reinterpret_cast<char *>(pc) - 1, tmp, sizeof(tmp))) {\n      symbol = tmp;\n  }\n  char buf[1024];\n  snprintf(buf, sizeof(buf), \"%s@ %*p  %s\\n\",\n           prefix, kPrintfPointerFieldWidth, pc, symbol);\n  writerfn(buf, arg);\n}\n#endif\n\nstatic void DumpPC(DebugWriter *writerfn, void *arg, void *pc,\n                   const char * const prefix) {\n  char buf[100];\n  snprintf(buf, sizeof(buf), \"%s@ %*p\\n\",\n           prefix, kPrintfPointerFieldWidth, pc);\n  writerfn(buf, arg);\n}\n\n// Dump current stack trace as directed by writerfn\nstatic void DumpStackTrace(int skip_count, DebugWriter *writerfn, void *arg) {\n  // Print stack trace\n  void* stack[32];\n  int depth = GetStackTrace(stack, ARRAYSIZE(stack), skip_count+1);\n  for (int i = 0; i < depth; i++) {\n#if defined(HAVE_SYMBOLIZE)\n    if (FLAGS_symbolize_stacktrace) {\n      DumpPCAndSymbol(writerfn, arg, stack[i], \"    \");\n    } else {\n      DumpPC(writerfn, arg, stack[i], \"    \");\n    }\n#else\n    DumpPC(writerfn, arg, stack[i], \"    \");\n#endif\n  }\n}\n\nstatic void DumpStackTraceAndExit() {\n  DumpStackTrace(1, DebugWriteToStderr, NULL);\n\n  // TOOD(hamaji): Use signal instead of sigaction?\n#ifdef HAVE_SIGACTION\n  if (IsFailureSignalHandlerInstalled()) {\n    // Set the default signal handler for SIGABRT, to avoid invoking our\n    // own signal handler installed by InstallFailureSignalHandler().\n    struct sigaction sig_action;\n    memset(&sig_action, 0, sizeof(sig_action));\n    sigemptyset(&sig_action.sa_mask);\n    sig_action.sa_handler = SIG_DFL;\n    sigaction(SIGABRT, &sig_action, NULL);\n  }\n#endif  // HAVE_SIGACTION\n\n  abort();\n}\n\n_END_GOOGLE_NAMESPACE_\n\n#endif  // HAVE_STACKTRACE\n\n_START_GOOGLE_NAMESPACE_\n\nnamespace glog_internal_namespace_ {\n\nconst char* ProgramInvocationShortName() {\n  if (g_program_invocation_short_name != NULL) {\n    return g_program_invocation_short_name;\n  } else {\n    // TODO(hamaji): Use /proc/self/cmdline and so?\n    return \"UNKNOWN\";\n  }\n}\n\nbool IsGoogleLoggingInitialized() {\n  return g_program_invocation_short_name != NULL;\n}\n\nbool is_default_thread() {\n  if (g_program_invocation_short_name == NULL) {\n    // InitGoogleLogging() not yet called, so unlikely to be in a different\n    // thread\n    return true;\n  } else {\n    return pthread_equal(pthread_self(), g_main_thread_id);\n  }\n}\n\n#ifdef OS_WINDOWS\nstruct timeval {\n  long tv_sec, tv_usec;\n};\n\n// Based on: http://www.google.com/codesearch/p?hl=en#dR3YEbitojA/os_win32.c&q=GetSystemTimeAsFileTime%20license:bsd\n// See COPYING for copyright information.\nstatic int gettimeofday(struct timeval *tv, void* tz) {\n#define EPOCHFILETIME (116444736000000000ULL)\n  FILETIME ft;\n  LARGE_INTEGER li;\n  uint64 tt;\n\n  GetSystemTimeAsFileTime(&ft);\n  li.LowPart = ft.dwLowDateTime;\n  li.HighPart = ft.dwHighDateTime;\n  tt = (li.QuadPart - EPOCHFILETIME) / 10;\n  tv->tv_sec = tt / 1000000;\n  tv->tv_usec = tt % 1000000;\n\n  return 0;\n}\n#endif\n\nint64 CycleClock_Now() {\n  // TODO(hamaji): temporary impementation - it might be too slow.\n  struct timeval tv;\n  gettimeofday(&tv, NULL);\n  return static_cast<int64>(tv.tv_sec) * 1000000 + tv.tv_usec;\n}\n\nint64 UsecToCycles(int64 usec) {\n  return usec;\n}\n\nWallTime WallTime_Now() {\n  // Now, cycle clock is retuning microseconds since the epoch.\n  return CycleClock_Now() * 0.000001;\n}\n\nstatic int32 g_main_thread_pid = getpid();\nint32 GetMainThreadPid() {\n  return g_main_thread_pid;\n}\n\nbool PidHasChanged() {\n  int32 pid = getpid();\n  if (g_main_thread_pid == pid) {\n    return false;\n  }\n  g_main_thread_pid = pid;\n  return true;\n}\n\npid_t GetTID() {\n  // On Linux and MacOSX, we try to use gettid().\n#if defined OS_LINUX || defined OS_MACOSX\n#ifndef __NR_gettid\n#ifdef OS_MACOSX\n#define __NR_gettid SYS_gettid\n#elif ! defined __i386__\n#error \"Must define __NR_gettid for non-x86 platforms\"\n#else\n#define __NR_gettid 224\n#endif\n#endif\n  static bool lacks_gettid = false;\n  if (!lacks_gettid) {\n    pid_t tid = syscall(__NR_gettid);\n    if (tid != -1) {\n      return tid;\n    }\n    // Technically, this variable has to be volatile, but there is a small\n    // performance penalty in accessing volatile variables and there should\n    // not be any serious adverse effect if a thread does not immediately see\n    // the value change to \"true\".\n    lacks_gettid = true;\n  }\n#endif  // OS_LINUX || OS_MACOSX\n\n  // If gettid() could not be used, we use one of the following.\n#if defined OS_LINUX\n  return getpid();  // Linux:  getpid returns thread ID when gettid is absent\n#elif defined OS_WINDOWS || defined OS_CYGWIN\n  return GetCurrentThreadId();\n#else\n  // If none of the techniques above worked, we use pthread_self().\n  return (pid_t)(uintptr_t)pthread_self();\n#endif\n}\n\nconst char* const_basename(const char* filepath) {\n  const char* base = strrchr(filepath, '/');\n#ifdef OS_WINDOWS  // Look for either path separator in Windows\n  if (!base)\n    base = strrchr(filepath, '\\\\');\n#endif\n  return base ? (base+1) : filepath;\n}\n\nstatic string g_my_user_name;\nconst string& MyUserName() {\n  return g_my_user_name;\n}\nstatic void MyUserNameInitializer() {\n  // TODO(hamaji): Probably this is not portable.\n#if defined(OS_WINDOWS)\n  const char* user = getenv(\"USERNAME\");\n#else\n  const char* user = getenv(\"USER\");\n#endif\n  if (user != NULL) {\n    g_my_user_name = user;\n  } else {\n    g_my_user_name = \"invalid-user\";\n  }\n}\nREGISTER_MODULE_INITIALIZER(utilities, MyUserNameInitializer());\n\n#ifdef HAVE_STACKTRACE\nvoid DumpStackTraceToString(string* stacktrace) {\n  DumpStackTrace(1, DebugWriteToString, stacktrace);\n}\n#endif\n\n// We use an atomic operation to prevent problems with calling CrashReason\n// from inside the Mutex implementation (potentially through RAW_CHECK).\nstatic const CrashReason* g_reason = 0;\n\nvoid SetCrashReason(const CrashReason* r) {\n  sync_val_compare_and_swap(&g_reason,\n                            reinterpret_cast<const CrashReason*>(0),\n                            r);\n}\n\nvoid InitGoogleLoggingUtilities(const char* argv0) {\n  CHECK(!IsGoogleLoggingInitialized())\n      << \"You called InitGoogleLogging() twice!\";\n  const char* slash = strrchr(argv0, '/');\n#ifdef OS_WINDOWS\n  if (!slash)  slash = strrchr(argv0, '\\\\');\n#endif\n  g_program_invocation_short_name = slash ? slash + 1 : argv0;\n  g_main_thread_id = pthread_self();\n\n#ifdef HAVE_STACKTRACE\n  InstallFailureFunction(&DumpStackTraceAndExit);\n#endif\n}\n\nvoid ShutdownGoogleLoggingUtilities() {\n  CHECK(IsGoogleLoggingInitialized())\n      << \"You called ShutdownGoogleLogging() without calling InitGoogleLogging() first!\";\n  g_program_invocation_short_name = NULL;\n#ifdef HAVE_SYSLOG_H\n  closelog();\n#endif\n}\n\n}  // namespace glog_internal_namespace_\n\n_END_GOOGLE_NAMESPACE_\n\n// Make an implementation of stacktrace compiled.\n#ifdef STACKTRACE_H\n# include STACKTRACE_H\n#endif\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/utilities.h",
    "content": "// Copyright (c) 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: Shinichiro Hamaji\n//\n// Define utilties for glog internal usage.\n\n#ifndef UTILITIES_H__\n#define UTILITIES_H__\n\n#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__)\n# define OS_WINDOWS\n#elif defined(__CYGWIN__) || defined(__CYGWIN32__)\n# define OS_CYGWIN\n#elif defined(linux) || defined(__linux) || defined(__linux__)\n# define OS_LINUX\n#elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)\n# define OS_MACOSX\n#elif defined(__FreeBSD__)\n# define OS_FREEBSD\n#elif defined(__NetBSD__)\n# define OS_NETBSD\n#elif defined(__OpenBSD__)\n# define OS_OPENBSD\n#else\n// TODO(hamaji): Add other platforms.\n#endif\n\n// printf macros for size_t, in the style of inttypes.h\n#ifdef _LP64\n#define __PRIS_PREFIX \"z\"\n#else\n#define __PRIS_PREFIX\n#endif\n\n// Use these macros after a % in a printf format string\n// to get correct 32/64 bit behavior, like this:\n// size_t size = records.size();\n// printf(\"%\"PRIuS\"\\n\", size);\n\n#define PRIdS __PRIS_PREFIX \"d\"\n#define PRIxS __PRIS_PREFIX \"x\"\n#define PRIuS __PRIS_PREFIX \"u\"\n#define PRIXS __PRIS_PREFIX \"X\"\n#define PRIoS __PRIS_PREFIX \"o\"\n\n#include \"base/mutex.h\"  // This must go first so we get _XOPEN_SOURCE\n\n#include <string>\n\n#if defined(OS_WINDOWS)\n# include \"port.h\"\n#endif\n\n#include \"config.h\"\n#include \"glog/logging.h\"\n\n// There are three different ways we can try to get the stack trace:\n//\n// 1) The libunwind library.  This is still in development, and as a\n//    separate library adds a new dependency, but doesn't need a frame\n//    pointer.  It also doesn't call malloc.\n//\n// 2) Our hand-coded stack-unwinder.  This depends on a certain stack\n//    layout, which is used by gcc (and those systems using a\n//    gcc-compatible ABI) on x86 systems, at least since gcc 2.95.\n//    It uses the frame pointer to do its work.\n//\n// 3) The gdb unwinder -- also the one used by the c++ exception code.\n//    It's obviously well-tested, but has a fatal flaw: it can call\n//    malloc() from the unwinder.  This is a problem because we're\n//    trying to use the unwinder to instrument malloc().\n//\n// Note: if you add a new implementation here, make sure it works\n// correctly when GetStackTrace() is called with max_depth == 0.\n// Some code may do that.\n\n#if defined(HAVE_LIB_UNWIND)\n# define STACKTRACE_H \"stacktrace_libunwind-inl.h\"\n#elif !defined(NO_FRAME_POINTER)\n# if defined(__i386__) && __GNUC__ >= 2\n#  define STACKTRACE_H \"stacktrace_x86-inl.h\"\n# elif defined(__x86_64__) && __GNUC__ >= 2 && HAVE_UNWIND_H\n#  define STACKTRACE_H \"stacktrace_x86_64-inl.h\"\n# elif (defined(__ppc__) || defined(__PPC__)) && __GNUC__ >= 2\n#  define STACKTRACE_H \"stacktrace_powerpc-inl.h\"\n# endif\n#endif\n\n#if !defined(STACKTRACE_H) && defined(HAVE_EXECINFO_H)\n# define STACKTRACE_H \"stacktrace_generic-inl.h\"\n#endif\n\n#if defined(STACKTRACE_H)\n# define HAVE_STACKTRACE\n#endif\n\n// defined by gcc\n#if defined(__ELF__) && defined(OS_LINUX)\n# define HAVE_SYMBOLIZE\n#elif defined(OS_MACOSX) && defined(HAVE_DLADDR)\n// Use dladdr to symbolize.\n# define HAVE_SYMBOLIZE\n#endif\n\n#ifndef ARRAYSIZE\n// There is a better way, but this is good enough for our purpose.\n# define ARRAYSIZE(a) (sizeof(a) / sizeof(*(a)))\n#endif\n\n_START_GOOGLE_NAMESPACE_\n\nnamespace glog_internal_namespace_ {\n\n#ifdef HAVE___ATTRIBUTE__\n# define ATTRIBUTE_NOINLINE __attribute__ ((noinline))\n# define HAVE_ATTRIBUTE_NOINLINE\n#else\n# define ATTRIBUTE_NOINLINE\n#endif\n\nconst char* ProgramInvocationShortName();\n\nbool IsGoogleLoggingInitialized();\n\nbool is_default_thread();\n\nint64 CycleClock_Now();\n\nint64 UsecToCycles(int64 usec);\n\ntypedef double WallTime;\nWallTime WallTime_Now();\n\nint32 GetMainThreadPid();\nbool PidHasChanged();\n\npid_t GetTID();\n\nconst std::string& MyUserName();\n\n// Get the part of filepath after the last path separator.\n// (Doesn't modify filepath, contrary to basename() in libgen.h.)\nconst char* const_basename(const char* filepath);\n\n// Wrapper of __sync_val_compare_and_swap. If the GCC extension isn't\n// defined, we try the CPU specific logics (we only support x86 and\n// x86_64 for now) first, then use a naive implementation, which has a\n// race condition.\ntemplate<typename T>\ninline T sync_val_compare_and_swap(T* ptr, T oldval, T newval) {\n#if defined(HAVE___SYNC_VAL_COMPARE_AND_SWAP)\n  return __sync_val_compare_and_swap(ptr, oldval, newval);\n#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))\n  T ret;\n  __asm__ __volatile__(\"lock; cmpxchg %1, (%2);\"\n                       :\"=a\"(ret)\n                        // GCC may produces %sil or %dil for\n                        // constraint \"r\", but some of apple's gas\n                        // dosn't know the 8 bit registers.\n                        // We use \"q\" to avoid these registers.\n                       :\"q\"(newval), \"q\"(ptr), \"a\"(oldval)\n                       :\"memory\", \"cc\");\n  return ret;\n#else\n  T ret = *ptr;\n  if (ret == oldval) {\n    *ptr = newval;\n  }\n  return ret;\n#endif\n}\n\nvoid DumpStackTraceToString(std::string* stacktrace);\n\nstruct CrashReason {\n  CrashReason() : filename(0), line_number(0), message(0), depth(0) {}\n\n  const char* filename;\n  int line_number;\n  const char* message;\n\n  // We'll also store a bit of stack trace context at the time of crash as\n  // it may not be available later on.\n  void* stack[32];\n  int depth;\n};\n\nvoid SetCrashReason(const CrashReason* r);\n\nvoid InitGoogleLoggingUtilities(const char* argv0);\nvoid ShutdownGoogleLoggingUtilities();\n\n}  // namespace glog_internal_namespace_\n\n_END_GOOGLE_NAMESPACE_\n\nusing namespace GOOGLE_NAMESPACE::glog_internal_namespace_;\n\n#endif  // UTILITIES_H__\n"
  },
  {
    "path": "native/iosTest/Pods/glog/src/vlog_is_on.cc",
    "content": "// Copyright (c) 1999, 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Author: Ray Sidney and many others\n//\n// Broken out from logging.cc by Soren Lassen\n// logging_unittest.cc covers the functionality herein\n\n#include \"utilities.h\"\n\n#include <string.h>\n#include <stdlib.h>\n#include <errno.h>\n#include <cstdio>\n#include <string>\n#include \"base/commandlineflags.h\"\n#include \"glog/logging.h\"\n#include \"glog/raw_logging.h\"\n#include \"base/googleinit.h\"\n\n// glog doesn't have annotation\n#define ANNOTATE_BENIGN_RACE(address, description)\n\nusing std::string;\n\nGLOG_DEFINE_int32(v, 0, \"Show all VLOG(m) messages for m <= this.\"\n\" Overridable by --vmodule.\");\n\nGLOG_DEFINE_string(vmodule, \"\", \"per-module verbose level.\"\n\" Argument is a comma-separated list of <module name>=<log level>.\"\n\" <module name> is a glob pattern, matched against the filename base\"\n\" (that is, name ignoring .cc/.h./-inl.h).\"\n\" <log level> overrides any value given by --v.\");\n\n_START_GOOGLE_NAMESPACE_\n\nnamespace glog_internal_namespace_ {\n\n// Implementation of fnmatch that does not need 0-termination\n// of arguments and does not allocate any memory,\n// but we only support \"*\" and \"?\" wildcards, not the \"[...]\" patterns.\n// It's not a static function for the unittest.\nGOOGLE_GLOG_DLL_DECL bool SafeFNMatch_(const char* pattern,\n                                       size_t patt_len,\n                                       const char* str,\n                                       size_t str_len) {\n  size_t p = 0;\n  size_t s = 0;\n  while (1) {\n    if (p == patt_len  &&  s == str_len) return true;\n    if (p == patt_len) return false;\n    if (s == str_len) return p+1 == patt_len  &&  pattern[p] == '*';\n    if (pattern[p] == str[s]  ||  pattern[p] == '?') {\n      p += 1;\n      s += 1;\n      continue;\n    }\n    if (pattern[p] == '*') {\n      if (p+1 == patt_len) return true;\n      do {\n        if (SafeFNMatch_(pattern+(p+1), patt_len-(p+1), str+s, str_len-s)) {\n          return true;\n        }\n        s += 1;\n      } while (s != str_len);\n      return false;\n    }\n    return false;\n  }\n}\n\n}  // namespace glog_internal_namespace_\n\nusing glog_internal_namespace_::SafeFNMatch_;\n\nint32 kLogSiteUninitialized = 1000;\n\n// List of per-module log levels from FLAGS_vmodule.\n// Once created each element is never deleted/modified\n// except for the vlog_level: other threads will read VModuleInfo blobs\n// w/o locks and we'll store pointers to vlog_level at VLOG locations\n// that will never go away.\n// We can't use an STL struct here as we wouldn't know\n// when it's safe to delete/update it: other threads need to use it w/o locks.\nstruct VModuleInfo {\n  string module_pattern;\n  mutable int32 vlog_level;  // Conceptually this is an AtomicWord, but it's\n                             // too much work to use AtomicWord type here\n                             // w/o much actual benefit.\n  const VModuleInfo* next;\n};\n\n// This protects the following global variables.\nstatic Mutex vmodule_lock;\n// Pointer to head of the VModuleInfo list.\n// It's a map from module pattern to logging level for those module(s).\nstatic VModuleInfo* vmodule_list = 0;\n// Boolean initialization flag.\nstatic bool inited_vmodule = false;\n\n// L >= vmodule_lock.\nstatic void VLOG2Initializer() {\n  vmodule_lock.AssertHeld();\n  // Can now parse --vmodule flag and initialize mapping of module-specific\n  // logging levels.\n  inited_vmodule = false;\n  const char* vmodule = FLAGS_vmodule.c_str();\n  const char* sep;\n  VModuleInfo* head = NULL;\n  VModuleInfo* tail = NULL;\n  while ((sep = strchr(vmodule, '=')) != NULL) {\n    string pattern(vmodule, sep - vmodule);\n    int module_level;\n    if (sscanf(sep, \"=%d\", &module_level) == 1) {\n      VModuleInfo* info = new VModuleInfo;\n      info->module_pattern = pattern;\n      info->vlog_level = module_level;\n      if (head)  tail->next = info;\n      else  head = info;\n      tail = info;\n    }\n    // Skip past this entry\n    vmodule = strchr(sep, ',');\n    if (vmodule == NULL) break;\n    vmodule++;  // Skip past \",\"\n  }\n  if (head) {  // Put them into the list at the head:\n    tail->next = vmodule_list;\n    vmodule_list = head;\n  }\n  inited_vmodule = true;\n}\n\n// This can be called very early, so we use SpinLock and RAW_VLOG here.\nint SetVLOGLevel(const char* module_pattern, int log_level) {\n  int result = FLAGS_v;\n  int const pattern_len = strlen(module_pattern);\n  bool found = false;\n  {\n    MutexLock l(&vmodule_lock);  // protect whole read-modify-write\n    for (const VModuleInfo* info = vmodule_list;\n         info != NULL; info = info->next) {\n      if (info->module_pattern == module_pattern) {\n        if (!found) {\n          result = info->vlog_level;\n          found = true;\n        }\n        info->vlog_level = log_level;\n      } else if (!found  &&\n                 SafeFNMatch_(info->module_pattern.c_str(),\n                              info->module_pattern.size(),\n                              module_pattern, pattern_len)) {\n        result = info->vlog_level;\n        found = true;\n      }\n    }\n    if (!found) {\n      VModuleInfo* info = new VModuleInfo;\n      info->module_pattern = module_pattern;\n      info->vlog_level = log_level;\n      info->next = vmodule_list;\n      vmodule_list = info;\n    }\n  }\n  RAW_VLOG(1, \"Set VLOG level for \\\"%s\\\" to %d\", module_pattern, log_level);\n  return result;\n}\n\n// NOTE: Individual VLOG statements cache the integer log level pointers.\n// NOTE: This function must not allocate memory or require any locks.\nbool InitVLOG3__(int32** site_flag, int32* site_default,\n                 const char* fname, int32 verbose_level) {\n  MutexLock l(&vmodule_lock);\n  bool read_vmodule_flag = inited_vmodule;\n  if (!read_vmodule_flag) {\n    VLOG2Initializer();\n  }\n\n  // protect the errno global in case someone writes:\n  // VLOG(..) << \"The last error was \" << strerror(errno)\n  int old_errno = errno;\n\n  // site_default normally points to FLAGS_v\n  int32* site_flag_value = site_default;\n\n  // Get basename for file\n  const char* base = strrchr(fname, '/');\n  base = base ? (base+1) : fname;\n  const char* base_end = strchr(base, '.');\n  size_t base_length = base_end ? size_t(base_end - base) : strlen(base);\n\n  // Trim out trailing \"-inl\" if any\n  if (base_length >= 4 && (memcmp(base+base_length-4, \"-inl\", 4) == 0)) {\n    base_length -= 4;\n  }\n\n  // TODO: Trim out _unittest suffix?  Perhaps it is better to have\n  // the extra control and just leave it there.\n\n  // find target in vector of modules, replace site_flag_value with\n  // a module-specific verbose level, if any.\n  for (const VModuleInfo* info = vmodule_list;\n       info != NULL; info = info->next) {\n    if (SafeFNMatch_(info->module_pattern.c_str(), info->module_pattern.size(),\n                     base, base_length)) {\n      site_flag_value = &info->vlog_level;\n        // value at info->vlog_level is now what controls\n        // the VLOG at the caller site forever\n      break;\n    }\n  }\n\n  // Cache the vlog value pointer if --vmodule flag has been parsed.\n  ANNOTATE_BENIGN_RACE(site_flag,\n                       \"*site_flag may be written by several threads,\"\n                       \" but the value will be the same\");\n  if (read_vmodule_flag) *site_flag = site_flag_value;\n\n  // restore the errno in case something recoverable went wrong during\n  // the initialization of the VLOG mechanism (see above note \"protect the..\")\n  errno = old_errno;\n  return *site_flag_value >= verbose_level;\n}\n\n_END_GOOGLE_NAMESPACE_\n"
  },
  {
    "path": "native/iosTest/PrivacyInfo.xcprivacy",
    "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>NSPrivacyAccessedAPITypes</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>NSPrivacyAccessedAPIType</key>\n\t\t\t<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>\n\t\t\t<key>NSPrivacyAccessedAPITypeReasons</key>\n\t\t\t<array>\n\t\t\t\t<string>C617.1</string>\n\t\t\t</array>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>NSPrivacyAccessedAPIType</key>\n\t\t\t<string>NSPrivacyAccessedAPICategoryUserDefaults</string>\n\t\t\t<key>NSPrivacyAccessedAPITypeReasons</key>\n\t\t\t<array>\n\t\t\t\t<string>CA92.1</string>\n\t\t\t</array>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>NSPrivacyAccessedAPIType</key>\n\t\t\t<string>NSPrivacyAccessedAPICategorySystemBootTime</string>\n\t\t\t<key>NSPrivacyAccessedAPITypeReasons</key>\n\t\t\t<array>\n\t\t\t\t<string>35F9.1</string>\n\t\t\t</array>\n\t\t</dict>\n\t</array>\n\t<key>NSPrivacyCollectedDataTypes</key>\n\t<array/>\n\t<key>NSPrivacyTracking</key>\n\t<false/>\n</dict>\n</plist>\n"
  },
  {
    "path": "native/iosTest/WatermelonTester/AppDelegate.swift",
    "content": "import UIKit\n\n@UIApplicationMain\nclass AppDelegate: UIResponder, UIApplicationDelegate, RCTBridgeDelegate {\n    let initTime = Date()\n    var window: UIWindow?\n\n    func application(\n        _ application: UIApplication,\n        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil\n        ) -> Bool {\n        if NSClassFromString(\"XCTest\") != nil {\n            NSLog(\"%@\", \"WARN: WatermelonTester should be ran in Test mode, not ran directly to work in CI\")\n        }\n\n        let bridge = RCTBridge(delegate: self, launchOptions: launchOptions)!\n        let rootView = RCTRootView(bridge: bridge, moduleName: \"watermelonTest\", initialProperties: nil)\n\n        let rootVC = UIViewController()\n        rootVC.view = rootView\n\n        let window = UIWindow()\n        window.rootViewController = rootVC\n\n        self.window = window\n        window.makeKeyAndVisible()\n\n        return true\n    }\n    \n    func unusedFunction() {\n        // It's here to ensure this compiles correctly\n        var error: NSError?\n        watermelondbProvideSyncJson(0, Data(), &error)\n    }\n\n    // MARK: - Singleton\n\n    private struct Singleton {\n        static var shared: AppDelegate?\n    }\n\n    override init() {\n        super.init()\n        Singleton.shared = self\n    }\n\n    class var shared: AppDelegate! {\n        return Singleton.shared\n    }\n}\n\n// MARK: - Bridge delegate\n\nextension AppDelegate {\n    func sourceURL(for bridge: RCTBridge!) -> URL! {\n//        if DEBUG_USE_BUNDLED {\n//            return RCTBundleURLProvider.sharedSettings()!.jsBundleURL(forFallbackResource: nil, fallbackExtension: nil)!\n//        }\n\n        guard let jsLocation = RCTBundleURLProvider.sharedSettings()\n            .jsBundleURL(forBundleRoot: \"src/index.integrationTests.native\")\n        else {\n            DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {\n                UIAlertController(title: \"Could not find JS\",\n                                  message: \"Could not get JS bundle URL. Most likely, the bundler server is dead. Remember to run yarn dev:native.\\n\\nIf you're running on device, you might also have connection issues - make sure you're connected to wifi and node is whitelisted in firewall settings.\",\n                                  preferredStyle: .alert)\n                    .with { alert in\n                        alert.addAction(UIAlertAction(title: \"Okay...\", style: .default) { _ in\n                            alert.dismiss(animated: true, completion: nil)\n                        })\n                        if let rootVC = RCTKeyWindow()?.rootViewController {\n                            if let presented = rootVC.presentedViewController {\n                                presented.dismiss(animated: false) {\n                                    rootVC.present(alert, animated: true)\n                                }\n                            } else {\n                                rootVC.present(alert, animated: true)\n                            }\n                        }\n                    }\n            }\n            \n            return nil\n        }\n        \n        return jsLocation\n    }\n}\n\nextension NSObjectProtocol {\n    @discardableResult\n    public func with(_ fn: (Self) -> Void) -> Self {\n        fn(self)\n        return self\n    }\n}\n"
  },
  {
    "path": "native/iosTest/WatermelonTester/Base.lproj/LaunchScreen.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"7702\" systemVersion=\"14D136\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"7701\"/>\n        <capability name=\"Constraints with non-1.0 multipliers\" minToolsVersion=\"5.1\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\"/>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view contentMode=\"scaleToFill\" id=\"iN0-l3-epB\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"480\" height=\"480\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Powered by React Native\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"9\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8ie-xW-0ye\">\n                    <rect key=\"frame\" x=\"20\" y=\"439\" width=\"441\" height=\"21\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"WatermelonTester\" textAlignment=\"center\" lineBreakMode=\"middleTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"18\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"kId-c2-rCX\">\n                    <rect key=\"frame\" x=\"20\" y=\"140\" width=\"441\" height=\"43\"/>\n                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"36\"/>\n                    <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n            </subviews>\n            <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n            <constraints>\n                <constraint firstItem=\"kId-c2-rCX\" firstAttribute=\"centerY\" secondItem=\"iN0-l3-epB\" secondAttribute=\"bottom\" multiplier=\"1/3\" constant=\"1\" id=\"5cJ-9S-tgC\"/>\n                <constraint firstAttribute=\"centerX\" secondItem=\"kId-c2-rCX\" secondAttribute=\"centerX\" id=\"Koa-jz-hwk\"/>\n                <constraint firstAttribute=\"bottom\" secondItem=\"8ie-xW-0ye\" secondAttribute=\"bottom\" constant=\"20\" id=\"Kzo-t9-V3l\"/>\n                <constraint firstItem=\"8ie-xW-0ye\" firstAttribute=\"leading\" secondItem=\"iN0-l3-epB\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"MfP-vx-nX0\"/>\n                <constraint firstAttribute=\"centerX\" secondItem=\"8ie-xW-0ye\" secondAttribute=\"centerX\" id=\"ZEH-qu-HZ9\"/>\n                <constraint firstItem=\"kId-c2-rCX\" firstAttribute=\"leading\" secondItem=\"iN0-l3-epB\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"fvb-Df-36g\"/>\n            </constraints>\n            <nil key=\"simulatedStatusBarMetrics\"/>\n            <freeformSimulatedSizeMetrics key=\"simulatedDestinationMetrics\"/>\n            <point key=\"canvasLocation\" x=\"548\" y=\"455\"/>\n        </view>\n    </objects>\n</document>\n"
  },
  {
    "path": "native/iosTest/WatermelonTester/BridgeTestReporter.m",
    "content": "#import <React/RCTBridgeModule.h>\n\n@interface RCT_EXTERN_REMAP_MODULE(BridgeTestReporter, BridgeTestReporter, NSObject)\n\nRCT_EXTERN_METHOD(testsFinished:(NSDictionary*)report)\n\n@end\n"
  },
  {
    "path": "native/iosTest/WatermelonTester/BridgeTestReporter.swift",
    "content": "import UIKit\n\n@objc(BridgeTestReporter)\npublic final class BridgeTestReporter: NSObject {\n    @objc static let requiresMainQueueSetup: Bool = true\n    @objc let methodQueue = DispatchQueue.main\n\n    enum Result {\n        case success(results: [String])\n        case failure(errors: [String])\n\n        init(report: [String: Any]) {\n            let errorCount = report[\"errorCount\"] as? Int ?? Int.max\n            let isSuccess = errorCount == 0\n\n            let results = (report[\"results\"] as? [NSDictionary] ?? [])\n                .map { result in\n                    (passed: result[\"passed\"] as? Bool ?? false,\n                     message: result[\"message\"] as? String ?? \"Missing failure message\")\n                }\n\n            if isSuccess {\n                self = .success(results: results.map { $0.message })\n            } else {\n                let errors = results.filter { !$0.passed } .map { $0.message }\n                self = .failure(errors: errors)\n            }\n        }\n    }\n\n    private static var result: Result?\n    private static var callback: ((Result) -> Void)?\n\n    static func onFinished(callback: @escaping (Result) -> Void) {\n        if let result = BridgeTestReporter.result {\n            callback(result)\n        } else {\n            BridgeTestReporter.callback = callback\n        }\n    }\n\n    @objc(testsFinished:)\n    func testsFinished(report: [String: Any]) {\n        if BridgeTestReporter.result != nil {\n            if NSClassFromString(\"XCTest\") != nil {\n                fatalError(\"Must only run bridge tests once\")\n            } else {\n                NSLog(\"%@\", \"WARN: Bridge tests are being run more than once\")\n            }\n        }\n\n        let result = Result(report: report)\n        BridgeTestReporter.result = result\n        BridgeTestReporter.callback?(result)\n    }\n}\n"
  },
  {
    "path": "native/iosTest/WatermelonTester/Images.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"ios-marketing\",\n      \"size\" : \"1024x1024\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "native/iosTest/WatermelonTester/Images.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}\n"
  },
  {
    "path": "native/iosTest/WatermelonTester/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\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>WatermelonTester</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>NSAppTransportSecurity</key>\n\t<dict>\n\t\t<key>NSExceptionDomains</key>\n\t\t<dict>\n\t\t\t<key>localhost</key>\n\t\t\t<dict>\n\t\t\t\t<key>NSExceptionAllowsInsecureHTTPLoads</key>\n\t\t\t\t<true/>\n\t\t\t\t<key>NSAllowsLocalNetworking</key>\n\t\t\t\t<true/>\n\t\t\t</dict>\n\t\t</dict>\n\t</dict>\n\t<key>NSLocationWhenInUseUsageDescription</key>\n\t<string></string>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>arm64</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UIViewControllerBasedStatusBarAppearance</key>\n\t<false/>\n</dict>\n</plist>\n"
  },
  {
    "path": "native/iosTest/WatermelonTester/WatermelonTester-Bridging-Header.h",
    "content": "#import <React/RCTBundleURLProvider.h>\n#import <React/RCTRootView.h>\n#import <React/RCTViewManager.h>\n\n#import <WatermelonDB/WatermelonDB.h>\n"
  },
  {
    "path": "native/iosTest/WatermelonTester.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 54;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; };\n\t\t13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };\n\t\t3BB55D30C40C85879E494BFE /* libPods-WatermelonTester.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CD725A06C04B325CA2D73BF6 /* libPods-WatermelonTester.a */; };\n\t\t6DA7B7DA7B1522AA049DE511 /* libPods-WatermelonTester-WatermelonTesterTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F9A6D5BBBFBECCF18215C07F /* libPods-WatermelonTester-WatermelonTesterTests.a */; };\n\t\t6E339A1D260CCC4500E44857 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6E339A1C260CCC4500E44857 /* Accelerate.framework */; };\n\t\t6E339A21260CCC6800E44857 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6E339A20260CCC6800E44857 /* XCTest.framework */; };\n\t\t6ECAF1762212B9D000D06219 /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6ECAF1752212B9D000D06219 /* JavaScriptCore.framework */; };\n\t\t6ED501392143FE770031A190 /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6ED501362143FE760031A190 /* Tests.swift */; };\n\t\t6ED5013A2143FE770031A190 /* BridgeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6ED501372143FE770031A190 /* BridgeTests.swift */; };\n\t\t6ED5013C2143FEE80031A190 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6ED5013B2143FEE80031A190 /* AppDelegate.swift */; };\n\t\t6ED5018C214550C20031A190 /* BridgeTestReporter.m in Sources */ = {isa = PBXBuildFile; fileRef = 6ED50164214550C20031A190 /* BridgeTestReporter.m */; };\n\t\t6ED5018D214550C20031A190 /* BridgeTestReporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6ED5018B214550C20031A190 /* BridgeTestReporter.swift */; };\n\t\tCCF2180453AF51C94AED142D /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = C4BFAE2B14005C3AEED18B65 /* PrivacyInfo.xcprivacy */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 13B07F861A680F5B00A75B9A;\n\t\t\tremoteInfo = WatermelonTester;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = \"<group>\"; };\n\t\t00E356EE1AD99517003FC87E /* WatermelonTesterTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WatermelonTesterTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t0A79C91DD4C3201F28E3EE33 /* Pods-WatermelonTesterTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-WatermelonTesterTests.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-WatermelonTesterTests/Pods-WatermelonTesterTests.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t0FA83F6BA06D10FFEC899F36 /* Pods-WatermelonTester-WatermelonTesterTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-WatermelonTester-WatermelonTesterTests.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-WatermelonTester-WatermelonTesterTests/Pods-WatermelonTester-WatermelonTesterTests.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t13B07F961A680F5B00A75B9A /* WatermelonTester.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WatermelonTester.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = \"<group>\"; };\n\t\t13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = \"<group>\"; };\n\t\t13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t2D16E6891FA4F8E400B85C8A /* libReact.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReact.a; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t4AD1A2FF035C6D8230E674A2 /* Pods-WatermelonTesterTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-WatermelonTesterTests.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-WatermelonTesterTests/Pods-WatermelonTesterTests.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t6E339A1C260CCC4500E44857 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; };\n\t\t6E339A20260CCC6800E44857 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };\n\t\t6ECAF1752212B9D000D06219 /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };\n\t\t6ED500E02143DC690031A190 /* WatermelonTester-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"WatermelonTester-Bridging-Header.h\"; sourceTree = \"<group>\"; };\n\t\t6ED500F22143FA1B0031A190 /* WatermelonTesterTests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"WatermelonTesterTests-Bridging-Header.h\"; sourceTree = \"<group>\"; };\n\t\t6ED501362143FE760031A190 /* Tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Tests.swift; sourceTree = \"<group>\"; };\n\t\t6ED501372143FE770031A190 /* BridgeTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BridgeTests.swift; sourceTree = \"<group>\"; };\n\t\t6ED5013B2143FEE80031A190 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\t6ED50164214550C20031A190 /* BridgeTestReporter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BridgeTestReporter.m; sourceTree = \"<group>\"; };\n\t\t6ED5018B214550C20031A190 /* BridgeTestReporter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BridgeTestReporter.swift; sourceTree = \"<group>\"; };\n\t\t7548A08DEFEA057E0AB8C042 /* Pods-WatermelonTester-WatermelonTesterTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-WatermelonTester-WatermelonTesterTests.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-WatermelonTester-WatermelonTesterTests/Pods-WatermelonTester-WatermelonTesterTests.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tA90F273F5BA305B1349074B2 /* Pods-WatermelonTester.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-WatermelonTester.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-WatermelonTester/Pods-WatermelonTester.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tC4BFAE2B14005C3AEED18B65 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xml; name = PrivacyInfo.xcprivacy; path = ../PrivacyInfo.xcprivacy; sourceTree = \"<group>\"; };\n\t\tCD725A06C04B325CA2D73BF6 /* libPods-WatermelonTester.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-WatermelonTester.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD0B14896BFD7C8D34D2F0FF5 /* Pods-WatermelonTester.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-WatermelonTester.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-WatermelonTester/Pods-WatermelonTester.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tF9A6D5BBBFBECCF18215C07F /* libPods-WatermelonTester-WatermelonTesterTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-WatermelonTester-WatermelonTesterTests.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t00E356EB1AD99517003FC87E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6E339A21260CCC6800E44857 /* XCTest.framework in Frameworks */,\n\t\t\t\t6DA7B7DA7B1522AA049DE511 /* libPods-WatermelonTester-WatermelonTesterTests.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t13B07F8C1A680F5B00A75B9A /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6E339A1D260CCC4500E44857 /* Accelerate.framework in Frameworks */,\n\t\t\t\t6ECAF1762212B9D000D06219 /* JavaScriptCore.framework in Frameworks */,\n\t\t\t\t3BB55D30C40C85879E494BFE /* libPods-WatermelonTester.a 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\t00E356EF1AD99517003FC87E /* WatermelonTesterTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6ED501372143FE770031A190 /* BridgeTests.swift */,\n\t\t\t\t6ED501362143FE760031A190 /* Tests.swift */,\n\t\t\t\t00E356F01AD99517003FC87E /* Supporting Files */,\n\t\t\t\t6ED500F22143FA1B0031A190 /* WatermelonTesterTests-Bridging-Header.h */,\n\t\t\t);\n\t\t\tpath = WatermelonTesterTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t00E356F01AD99517003FC87E /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t00E356F11AD99517003FC87E /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t13B07FAE1A68108700A75B9A /* WatermelonTester */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6ED50164214550C20031A190 /* BridgeTestReporter.m */,\n\t\t\t\t6ED5018B214550C20031A190 /* BridgeTestReporter.swift */,\n\t\t\t\t6ED5013B2143FEE80031A190 /* AppDelegate.swift */,\n\t\t\t\t008F07F21AC5B25A0029DE68 /* main.jsbundle */,\n\t\t\t\t13B07FB51A68108700A75B9A /* Images.xcassets */,\n\t\t\t\t13B07FB61A68108700A75B9A /* Info.plist */,\n\t\t\t\t13B07FB11A68108700A75B9A /* LaunchScreen.xib */,\n\t\t\t\t6ED500E02143DC690031A190 /* WatermelonTester-Bridging-Header.h */,\n\t\t\t\tC4BFAE2B14005C3AEED18B65 /* PrivacyInfo.xcprivacy */,\n\t\t\t);\n\t\t\tpath = WatermelonTester;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t2D16E6871FA4F8E400B85C8A /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6E339A20260CCC6800E44857 /* XCTest.framework */,\n\t\t\t\t6E339A1C260CCC4500E44857 /* Accelerate.framework */,\n\t\t\t\t6ECAF1752212B9D000D06219 /* JavaScriptCore.framework */,\n\t\t\t\t2D16E6891FA4F8E400B85C8A /* libReact.a */,\n\t\t\t\tCD725A06C04B325CA2D73BF6 /* libPods-WatermelonTester.a */,\n\t\t\t\tF9A6D5BBBFBECCF18215C07F /* libPods-WatermelonTester-WatermelonTesterTests.a */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t832341AE1AAA6A7D00B99B32 /* Libraries */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t);\n\t\t\tname = Libraries;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t83CBB9F61A601CBA00E9B192 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t13B07FAE1A68108700A75B9A /* WatermelonTester */,\n\t\t\t\t832341AE1AAA6A7D00B99B32 /* Libraries */,\n\t\t\t\t00E356EF1AD99517003FC87E /* WatermelonTesterTests */,\n\t\t\t\t83CBBA001A601CBA00E9B192 /* Products */,\n\t\t\t\t2D16E6871FA4F8E400B85C8A /* Frameworks */,\n\t\t\t\tD67869B01EAB689ABFF3BA78 /* Pods */,\n\t\t\t);\n\t\t\tindentWidth = 4;\n\t\t\tsourceTree = \"<group>\";\n\t\t\ttabWidth = 4;\n\t\t\tusesTabs = 0;\n\t\t};\n\t\t83CBBA001A601CBA00E9B192 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t13B07F961A680F5B00A75B9A /* WatermelonTester.app */,\n\t\t\t\t00E356EE1AD99517003FC87E /* WatermelonTesterTests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD67869B01EAB689ABFF3BA78 /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD0B14896BFD7C8D34D2F0FF5 /* Pods-WatermelonTester.debug.xcconfig */,\n\t\t\t\tA90F273F5BA305B1349074B2 /* Pods-WatermelonTester.release.xcconfig */,\n\t\t\t\t0A79C91DD4C3201F28E3EE33 /* Pods-WatermelonTesterTests.debug.xcconfig */,\n\t\t\t\t4AD1A2FF035C6D8230E674A2 /* Pods-WatermelonTesterTests.release.xcconfig */,\n\t\t\t\t7548A08DEFEA057E0AB8C042 /* Pods-WatermelonTester-WatermelonTesterTests.debug.xcconfig */,\n\t\t\t\t0FA83F6BA06D10FFEC899F36 /* Pods-WatermelonTester-WatermelonTesterTests.release.xcconfig */,\n\t\t\t);\n\t\t\tname = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t00E356ED1AD99517003FC87E /* WatermelonTesterTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget \"WatermelonTesterTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tFBDE50819C02F2F4954F1CCD /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t00E356EA1AD99517003FC87E /* Sources */,\n\t\t\t\t00E356EB1AD99517003FC87E /* Frameworks */,\n\t\t\t\t00E356EC1AD99517003FC87E /* Resources */,\n\t\t\t\tF637EB956C2B209D3A876410 /* [CP] Embed Pods Frameworks */,\n\t\t\t\t6D57072E20B2B2C4380EF995 /* [CP] Copy Pods Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t00E356F51AD99517003FC87E /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = WatermelonTesterTests;\n\t\t\tproductName = WatermelonTesterTests;\n\t\t\tproductReference = 00E356EE1AD99517003FC87E /* WatermelonTesterTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t13B07F861A680F5B00A75B9A /* WatermelonTester */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget \"WatermelonTester\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t00B9B5AEF8DFCEE2D9F8666C /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t13B07F871A680F5B00A75B9A /* Sources */,\n\t\t\t\t13B07F8C1A680F5B00A75B9A /* Frameworks */,\n\t\t\t\t13B07F8E1A680F5B00A75B9A /* Resources */,\n\t\t\t\t00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,\n\t\t\t\t9E5739FECA546BB738D2111F /* [CP] Embed Pods Frameworks */,\n\t\t\t\t41E9FC1451031DEBE5E5FFEB /* [CP] Copy Pods 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 = WatermelonTester;\n\t\t\tproductName = \"Hello World\";\n\t\t\tproductReference = 13B07F961A680F5B00A75B9A /* WatermelonTester.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t83CBB9F71A601CBA00E9B192 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0610;\n\t\t\t\tORGANIZATIONNAME = Nozbe;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t00E356ED1AD99517003FC87E = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.2;\n\t\t\t\t\t\tLastSwiftMigration = 0940;\n\t\t\t\t\t\tTestTargetID = 13B07F861A680F5B00A75B9A;\n\t\t\t\t\t};\n\t\t\t\t\t13B07F861A680F5B00A75B9A = {\n\t\t\t\t\t\tLastSwiftMigration = 0940;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject \"WatermelonTester\" */;\n\t\t\tcompatibilityVersion = \"Xcode 9.3\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\tEnglish,\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 83CBB9F61A601CBA00E9B192;\n\t\t\tproductRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t13B07F861A680F5B00A75B9A /* WatermelonTester */,\n\t\t\t\t00E356ED1AD99517003FC87E /* WatermelonTesterTests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t00E356EC1AD99517003FC87E /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t13B07F8E1A680F5B00A75B9A /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,\n\t\t\t\t13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */,\n\t\t\t\tCCF2180453AF51C94AED142D /* PrivacyInfo.xcprivacy in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t00B9B5AEF8DFCEE2D9F8666C /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-WatermelonTester-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Bundle React Native code and images\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"FORCE_BUNDLING=1 ../../node_modules/react-native/scripts/react-native-xcode.sh \\\"src/index.integrationTests.native.js\\\"\\n\";\n\t\t};\n\t\t41E9FC1451031DEBE5E5FFEB /* [CP] Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-WatermelonTester/Pods-WatermelonTester-resources-${CONFIGURATION}-input-files.xcfilelist\",\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-WatermelonTester/Pods-WatermelonTester-resources-${CONFIGURATION}-output-files.xcfilelist\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-WatermelonTester/Pods-WatermelonTester-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t6D57072E20B2B2C4380EF995 /* [CP] Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-WatermelonTester-WatermelonTesterTests/Pods-WatermelonTester-WatermelonTesterTests-resources-${CONFIGURATION}-input-files.xcfilelist\",\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-WatermelonTester-WatermelonTesterTests/Pods-WatermelonTester-WatermelonTesterTests-resources-${CONFIGURATION}-output-files.xcfilelist\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-WatermelonTester-WatermelonTesterTests/Pods-WatermelonTester-WatermelonTesterTests-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t9E5739FECA546BB738D2111F /* [CP] Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-WatermelonTester/Pods-WatermelonTester-frameworks-${CONFIGURATION}-input-files.xcfilelist\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-WatermelonTester/Pods-WatermelonTester-frameworks-${CONFIGURATION}-output-files.xcfilelist\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-WatermelonTester/Pods-WatermelonTester-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tF637EB956C2B209D3A876410 /* [CP] Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-WatermelonTester-WatermelonTesterTests/Pods-WatermelonTester-WatermelonTesterTests-frameworks-${CONFIGURATION}-input-files.xcfilelist\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-WatermelonTester-WatermelonTesterTests/Pods-WatermelonTester-WatermelonTesterTests-frameworks-${CONFIGURATION}-output-files.xcfilelist\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-WatermelonTester-WatermelonTesterTests/Pods-WatermelonTester-WatermelonTesterTests-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tFBDE50819C02F2F4954F1CCD /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-WatermelonTester-WatermelonTesterTests-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t00E356EA1AD99517003FC87E /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6ED501392143FE770031A190 /* Tests.swift in Sources */,\n\t\t\t\t6ED5013A2143FE770031A190 /* BridgeTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t13B07F871A680F5B00A75B9A /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6ED5013C2143FEE80031A190 /* AppDelegate.swift in Sources */,\n\t\t\t\t6ED5018C214550C20031A190 /* BridgeTestReporter.m in Sources */,\n\t\t\t\t6ED5018D214550C20031A190 /* BridgeTestReporter.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t00E356F51AD99517003FC87E /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 13B07F861A680F5B00A75B9A /* WatermelonTester */;\n\t\t\ttargetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t13B07FB21A68108700A75B9A /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.xib;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t00E356F61AD99517003FC87E /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7548A08DEFEA057E0AB8C042 /* Pods-WatermelonTester-WatermelonTesterTests.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_STYLE = Manual;\n\t\t\t\tDEVELOPMENT_TEAM = \"\";\n\t\t\t\tINFOPLIST_FILE = WatermelonTesterTests/Info.plist;\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\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t\t\"-lc++\",\n\t\t\t\t);\n\t\t\t\t\"PRODUCT_BUNDLE_IDENTIFIER[sdk=macosx*]\" = \"\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\t\"PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]\" = \"\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"WatermelonTesterTests/WatermelonTesterTests-Bridging-Header.h\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/WatermelonTester.app/WatermelonTester\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t00E356F71AD99517003FC87E /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 0FA83F6BA06D10FFEC899F36 /* Pods-WatermelonTester-WatermelonTesterTests.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_STYLE = Manual;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEVELOPMENT_TEAM = \"\";\n\t\t\t\tINFOPLIST_FILE = WatermelonTesterTests/Info.plist;\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\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t\t\"-lc++\",\n\t\t\t\t);\n\t\t\t\t\"PRODUCT_BUNDLE_IDENTIFIER[sdk=macosx*]\" = \"\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\t\"PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]\" = \"\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"WatermelonTesterTests/WatermelonTesterTests-Bridging-Header.h\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/WatermelonTester.app/WatermelonTester\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t13B07F941A680F5B00A75B9A /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = D0B14896BFD7C8D34D2F0FF5 /* Pods-WatermelonTester.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCC = \"$(SRCROOT)/../../scripts/ccache-clang\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_STYLE = Manual;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEAD_CODE_STRIPPING = NO;\n\t\t\t\tDEVELOPMENT_TEAM = \"\";\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tHEADER_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(SRCROOT)/../../node_modules/react-native/React\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = WatermelonTester/Info.plist;\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\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t\t\"-lc++\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.nozbe.watermelondb.tester;\n\t\t\t\tPRODUCT_NAME = WatermelonTester;\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"WatermelonTester/WatermelonTester-Bridging-Header.h\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t13B07F951A680F5B00A75B9A /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = A90F273F5BA305B1349074B2 /* Pods-WatermelonTester.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCC = \"$(SRCROOT)/../../scripts/ccache-clang\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_STYLE = Manual;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEVELOPMENT_TEAM = \"\";\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tHEADER_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(SRCROOT)/../../node_modules/react-native/React\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = WatermelonTester/Info.plist;\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\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t\t\"-lc++\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.nozbe.watermelondb.tester;\n\t\t\t\tPRODUCT_NAME = WatermelonTester;\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"WatermelonTester/WatermelonTester-Bridging-Header.h\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t83CBBA201A601CBA00E9B192 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"c++20\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\t\"EXCLUDED_ARCHS[sdk=iphonesimulator*]\" = i386;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t\t_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION,\n\t\t\t\t);\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\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_HIDDEN_VIRTUAL_FUNCTIONS = YES;\n\t\t\t\tGCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;\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 = 15.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tOTHER_CFLAGS = \"$(inherited)\";\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = \"$(inherited)\";\n\t\t\t\tOTHER_LDFLAGS = \"$(inherited)  \";\n\t\t\t\tREACT_NATIVE_PATH = \"${PODS_ROOT}/../../../node_modules/react-native\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tUSE_HERMES = true;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t83CBBA211A601CBA00E9B192 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"c++20\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\t\"EXCLUDED_ARCHS[sdk=iphonesimulator*]\" = i386;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"CCACHE_HACK_TOOLCHAIN_DIR=\\\"$(TOOLCHAIN_DIR)\\\"\",\n\t\t\t\t\t_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION,\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_HIDDEN_VIRTUAL_FUNCTIONS = YES;\n\t\t\t\tGCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;\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 = 15.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tOTHER_CFLAGS = \"$(inherited)\";\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = \"$(inherited)\";\n\t\t\t\tOTHER_LDFLAGS = \"$(inherited)  \";\n\t\t\t\tREACT_NATIVE_PATH = \"${PODS_ROOT}/../../../node_modules/react-native\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tUSE_HERMES = true;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget \"WatermelonTesterTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t00E356F61AD99517003FC87E /* Debug */,\n\t\t\t\t00E356F71AD99517003FC87E /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget \"WatermelonTester\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t13B07F941A680F5B00A75B9A /* Debug */,\n\t\t\t\t13B07F951A680F5B00A75B9A /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject \"WatermelonTester\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t83CBBA201A601CBA00E9B192 /* Debug */,\n\t\t\t\t83CBBA211A601CBA00E9B192 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;\n}\n"
  },
  {
    "path": "native/iosTest/WatermelonTester.xcodeproj/xcshareddata/xcschemes/WatermelonTester.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0620\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"NO\"\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 = \"83CBBA2D1A601D0E00E9B192\"\n               BuildableName = \"libReact.a\"\n               BlueprintName = \"React\"\n               ReferencedContainer = \"container:../../node_modules/react-native/React/React.xcodeproj\">\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 = \"13B07F861A680F5B00A75B9A\"\n               BuildableName = \"WatermelonTester.app\"\n               BlueprintName = \"WatermelonTester\"\n               ReferencedContainer = \"container:WatermelonTester.xcodeproj\">\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 = \"00E356ED1AD99517003FC87E\"\n               BuildableName = \"WatermelonTesterTests.xctest\"\n               BlueprintName = \"WatermelonTesterTests\"\n               ReferencedContainer = \"container:WatermelonTester.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      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"13B07F861A680F5B00A75B9A\"\n            BuildableName = \"WatermelonTester.app\"\n            BlueprintName = \"WatermelonTester\"\n            ReferencedContainer = \"container:WatermelonTester.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"00E356ED1AD99517003FC87E\"\n               BuildableName = \"WatermelonTesterTests.xctest\"\n               BlueprintName = \"WatermelonTesterTests\"\n               ReferencedContainer = \"container:WatermelonTester.xcodeproj\">\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      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"13B07F861A680F5B00A75B9A\"\n            BuildableName = \"WatermelonTester.app\"\n            BlueprintName = \"WatermelonTester\"\n            ReferencedContainer = \"container:WatermelonTester.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 = \"13B07F861A680F5B00A75B9A\"\n            BuildableName = \"WatermelonTester.app\"\n            BlueprintName = \"WatermelonTester\"\n            ReferencedContainer = \"container:WatermelonTester.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": "native/iosTest/WatermelonTester.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:WatermelonTester.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:Pods/Pods.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "native/iosTest/WatermelonTester.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": "native/iosTest/WatermelonTesterTests/BridgeTests.swift",
    "content": "@testable import WatermelonTester\nimport XCTest\n\nclass BridgeTests: XCTestCase {\n    func testBridge() {\n        // TODO: Consider using Cavy native reporter https://github.com/Nozbe/WatermelonDB/pull/351/files\n        let expectation = XCTestExpectation(description: \"Cavy tests passed\")\n\n        BridgeTestReporter.onFinished { result in\n            switch result {\n            case .success(let results):\n                print(\"Bridge tests completed!\")\n                results.forEach { message in\n                    print(message)\n                }\n            case .failure(let errors):\n                errors.forEach { error in\n                    XCTFail(error)\n                }\n            }\n\n            expectation.fulfill()\n        }\n\n        wait(for: [expectation], timeout: 100)\n    }\n}\n"
  },
  {
    "path": "native/iosTest/WatermelonTesterTests/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\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "native/iosTest/WatermelonTesterTests/Tests.swift",
    "content": "import Foundation\nimport XCTest\n\n// Always add new tests here to ensure they get compiled\nprivate let allTests: [XCTest.Type] = [\n    /* WatermelonDB */\n    BridgeTests.self,\n]\n"
  },
  {
    "path": "native/iosTest/WatermelonTesterTests/WatermelonTesterTests-Bridging-Header.h",
    "content": "#import <React/RCTBundleURLProvider.h>\n#import <React/RCTRootView.h>\n#import <React/RCTViewManager.h>\n#import <React/RCTBridgeModule.h>\n"
  },
  {
    "path": "native/metro-transformer.js",
    "content": "const babel = require('@babel/core')\nconst babelConfig = require('../babel.config')\n\nconst transform = ({ src, filename /* , options: { dev } */ }) => {\n  // const nodeEnv = dev ? 'development' : 'production'\n  const config = {\n    filename,\n    sourceFileName: filename,\n    babelrc: false,\n    ast: true,\n    ...babelConfig.env.test,\n  }\n\n  const { ast, code, map } = babel.transform(src, config)\n\n  return {\n    ast,\n    code,\n    map,\n    filename,\n  }\n}\n\nmodule.exports = {\n  transform,\n}\n"
  },
  {
    "path": "native/shared/Database-batch.cpp",
    "content": "#include \"Database.h\"\n\nnamespace watermelondb {\n\nusing platform::consoleError;\nusing platform::consoleLog;\n\n// TODO: Remove non-json batch once we can tell that there's no serious perf regression\nvoid Database::batch(jsi::Array &operations) {\n    auto &rt = getRt();\n    const std::lock_guard<std::mutex> lock(mutex_);\n    beginTransaction();\n\n    std::vector<std::string> addedIds = {};\n    std::vector<std::string> removedIds = {};\n\n    try {\n        size_t operationsCount = operations.length(rt);\n        for (size_t i = 0; i < operationsCount; i++) {\n            jsi::Array operation = operations.getValueAtIndex(rt, i).getObject(rt).getArray(rt);\n\n            auto cacheBehavior = operation.getValueAtIndex(rt, 0).getNumber();\n            auto table = cacheBehavior != 0 ? operation.getValueAtIndex(rt, 1).getString(rt).utf8(rt) : \"\";\n            auto sql = operation.getValueAtIndex(rt, 2).getString(rt).utf8(rt);\n\n            jsi::Array argsBatches = operation.getValueAtIndex(rt, 3).getObject(rt).getArray(rt);\n            size_t argsBatchesCount = argsBatches.length(rt);\n            for (size_t j = 0; j < argsBatchesCount; j++) {\n                jsi::Array args = argsBatches.getValueAtIndex(rt, j).getObject(rt).getArray(rt);\n                executeUpdate(sql, args);\n                if (cacheBehavior != 0) {\n                    auto id = args.getValueAtIndex(rt, 0).getString(rt).utf8(rt);\n                    if (cacheBehavior == 1) {\n                        addedIds.push_back(cacheKey(table, id));\n                    } else if (cacheBehavior == -1) {\n                        removedIds.push_back(cacheKey(table, id));\n                    }\n                }\n            }\n\n        }\n        commit();\n    } catch (const std::exception &ex) {\n        rollback();\n        throw;\n    }\n\n    for (auto const &key : addedIds) {\n        markAsCached(key);\n    }\n\n    for (auto const &key : removedIds) {\n        removeFromCache(key);\n    }\n}\n\nvoid Database::batchJSON(jsi::String &&jsiJson) {\n    using namespace simdjson;\n\n    auto &rt = getRt();\n    const std::lock_guard<std::mutex> lock(mutex_);\n    beginTransaction();\n\n    std::vector<std::string> addedIds = {};\n    std::vector<std::string> removedIds = {};\n\n    try {\n        ondemand::parser parser;\n        auto json = padded_string(jsiJson.utf8(rt));\n        ondemand::document doc = parser.iterate(json);\n\n        // NOTE: simdjson::ondemand processes forwards-only, hence the weird field enumeration\n        // We can't use subscript or backtrack.\n        for (ondemand::array operation : doc) {\n            int64_t cacheBehavior = 0;\n            std::string table;\n            std::string sql;\n            size_t fieldIdx = 0;\n            for (auto field : operation) {\n                if (fieldIdx == 0) {\n                    cacheBehavior = field;\n                } else if (fieldIdx == 1) {\n                    if (cacheBehavior != 0) {\n                        table = (std::string_view) field;\n                    }\n                } else if (fieldIdx == 2) {\n                    sql = (std::string_view) field;\n                } else if (fieldIdx == 3) {\n                    ondemand::array argsBatches = field;\n                    auto stmt = prepareQuery(sql);\n                    SqliteStatement statement(stmt);\n\n                    for (ondemand::array args : argsBatches) {\n                        // NOTE: We must capture the ID once first parsed\n                        auto id = bindArgsAndReturnId(stmt, args);\n                        executeUpdate(stmt);\n                        sqlite3_reset(stmt);\n                        if (cacheBehavior == 1) {\n                            addedIds.push_back(cacheKey(table, id));\n                        } else if (cacheBehavior == -1) {\n                            removedIds.push_back(cacheKey(table, id));\n                        }\n                    }\n                }\n                fieldIdx++;\n            }\n        }\n\n        commit();\n    } catch (const std::exception &ex) {\n        rollback();\n        throw;\n    }\n\n    for (auto const &key : addedIds) {\n        markAsCached(key);\n    }\n\n    for (auto const &key : removedIds) {\n        removeFromCache(key);\n    }\n}\n\n}\n"
  },
  {
    "path": "native/shared/Database-jsi.cpp",
    "content": "#include \"Database.h\"\n\nnamespace watermelondb {\n\nusing platform::consoleError;\nusing platform::consoleLog;\n\njsi::Runtime &Database::getRt() {\n    return *runtime_;\n}\n\njsi::JSError Database::dbError(std::string description) {\n    // TODO: In serialized threading mode, those may be incorrect - probably smarter to pass result codes around?\n    auto sqliteMessage = std::string(sqlite3_errmsg(db_->sqlite));\n    auto code = sqlite3_extended_errcode(db_->sqlite);\n    auto message = description + \" - sqlite error \" + std::to_string(code) + \" (\" + sqliteMessage + \")\";\n    // Note: logging to console in case another exception is thrown so that the original error isn't lost\n    consoleError(message);\n\n    auto &rt = getRt();\n    return jsi::JSError(rt, message);\n}\n\njsi::Array Database::arrayFromStd(std::vector<jsi::Value> &vector) {\n    // FIXME: Adding directly to a jsi::Array should be more efficient, but Hermes does not support\n    // automatically resizing an Array by setting new values to it\n    auto &rt = getRt();\n    jsi::Array array(rt, vector.size());\n    size_t i = 0;\n    for (auto const &value : vector) {\n        array.setValueAtIndex(rt, i, value);\n        i++;\n    }\n    return array;\n}\n\n}\n"
  },
  {
    "path": "native/shared/Database-query.cpp",
    "content": "#include \"Database.h\"\n#include \"DatabasePlatform.h\"\n\nnamespace watermelondb {\n\nusing platform::consoleError;\nusing platform::consoleLog;\n\njsi::Value Database::find(jsi::String &tableName, jsi::String &id) {\n    auto &rt = getRt();\n    const std::lock_guard<std::mutex> lock(mutex_);\n\n    if (isCached(cacheKey(tableName.utf8(rt), id.utf8(rt)))) {\n        return std::move(id);\n    }\n\n    auto args = jsi::Array::createWithElements(rt, id);\n    auto statement = executeQuery(\"select * from `\" + tableName.utf8(rt) + \"` where id == ? limit 1\", args);\n\n    if (getNextRowOrTrue(statement.stmt)) {\n        return jsi::Value::null();\n    }\n\n    auto record = resultDictionary(statement.stmt);\n\n    markAsCached(cacheKey(tableName.utf8(rt), id.utf8(rt)));\n\n    return record;\n}\n\njsi::Value Database::query(jsi::String &tableName, jsi::String &sql, jsi::Array &arguments) {\n    auto &rt = getRt();\n    const std::lock_guard<std::mutex> lock(mutex_);\n\n    auto statement = executeQuery(sql.utf8(rt), arguments);\n    std::vector<jsi::Value> records = {};\n\n    while (true) {\n        if (getNextRowOrTrue(statement.stmt)) {\n            break;\n        }\n\n        assert(std::string(sqlite3_column_name(statement.stmt, 0)) == \"id\");\n\n        const char *id = (const char *)sqlite3_column_text(statement.stmt, 0);\n        if (!id) {\n            throw jsi::JSError(rt, \"Failed to get ID of a record\");\n        }\n\n        if (isCached(cacheKey(tableName.utf8(rt), std::string(id)))) {\n            jsi::String jsiId = jsi::String::createFromAscii(rt, id);\n            records.push_back(std::move(jsiId));\n        } else {\n            markAsCached(cacheKey(tableName.utf8(rt), std::string(id)));\n            jsi::Object record = resultDictionary(statement.stmt);\n            records.push_back(std::move(record));\n        }\n    }\n\n    return arrayFromStd(records);\n}\n\njsi::Value Database::queryAsArray(jsi::String &tableName, jsi::String &sql, jsi::Array &arguments) {\n    auto &rt = getRt();\n    const std::lock_guard<std::mutex> lock(mutex_);\n\n    auto statement = executeQuery(sql.utf8(rt), arguments);\n    std::vector<jsi::Value> results = {};\n\n    while (true) {\n        if (getNextRowOrTrue(statement.stmt)) {\n            break;\n        }\n\n        assert(std::string(sqlite3_column_name(statement.stmt, 0)) == \"id\");\n\n        const char *id = (const char *)sqlite3_column_text(statement.stmt, 0);\n        if (!id) {\n            throw jsi::JSError(rt, \"Failed to get ID of a record\");\n        }\n\n        if (results.size() == 0) {\n            jsi::Array columns = resultColumns(statement.stmt);\n            results.push_back(std::move(columns));\n        }\n\n        if (isCached(cacheKey(tableName.utf8(rt), std::string(id)))) {\n            jsi::String jsiId = jsi::String::createFromAscii(rt, id);\n            results.push_back(std::move(jsiId));\n        } else {\n            markAsCached(cacheKey(tableName.utf8(rt), std::string(id)));\n            jsi::Array record = resultArray(statement.stmt);\n            results.push_back(std::move(record));\n        }\n    }\n\n    return arrayFromStd(results);\n}\n\njsi::Array Database::queryIds(jsi::String &sql, jsi::Array &arguments) {\n    auto &rt = getRt();\n    const std::lock_guard<std::mutex> lock(mutex_);\n\n    auto statement = executeQuery(sql.utf8(rt), arguments);\n    std::vector<jsi::Value> ids = {};\n\n    while (true) {\n        if (getNextRowOrTrue(statement.stmt)) {\n            break;\n        }\n\n        assert(std::string(sqlite3_column_name(statement.stmt, 0)) == \"id\");\n\n        const char *idText = (const char *)sqlite3_column_text(statement.stmt, 0);\n        if (!idText) {\n            throw jsi::JSError(rt, \"Failed to get ID of a record\");\n        }\n\n        jsi::String id = jsi::String::createFromAscii(rt, idText);\n        ids.push_back(std::move(id));\n    }\n\n    return arrayFromStd(ids);\n}\n\njsi::Array Database::unsafeQueryRaw(jsi::String &sql, jsi::Array &arguments) {\n    auto &rt = getRt();\n    const std::lock_guard<std::mutex> lock(mutex_);\n\n    auto statement = executeQuery(sql.utf8(rt), arguments);\n    std::vector<jsi::Value> raws = {};\n\n    while (true) {\n        if (getNextRowOrTrue(statement.stmt)) {\n            break;\n        }\n\n        jsi::Object raw = resultDictionary(statement.stmt);\n        raws.push_back(std::move(raw));\n    }\n\n    return arrayFromStd(raws);\n}\n\njsi::Value Database::count(jsi::String &sql, jsi::Array &arguments) {\n    auto &rt = getRt();\n    const std::lock_guard<std::mutex> lock(mutex_);\n\n    auto statement = executeQuery(sql.utf8(rt), arguments);\n    getRow(statement.stmt);\n\n    assert(sqlite3_data_count(statement.stmt) == 1);\n    int count = sqlite3_column_int(statement.stmt, 0);\n    return jsi::Value(count);\n}\n\njsi::Value Database::getLocal(jsi::String &key) {\n    auto &rt = getRt();\n    const std::lock_guard<std::mutex> lock(mutex_);\n\n    auto args = jsi::Array::createWithElements(rt, key);\n    auto statement = executeQuery(\"select value from local_storage where key = ?\", args);\n\n    if (getNextRowOrTrue(statement.stmt)) {\n        return jsi::Value::null();\n    }\n\n    assert(sqlite3_data_count(statement.stmt) == 1);\n    const char *text = (const char *)sqlite3_column_text(statement.stmt, 0);\n\n    if (!text) {\n        return jsi::Value::null();\n    }\n\n    return jsi::String::createFromUtf8(rt, text);\n}\n\n}\n"
  },
  {
    "path": "native/shared/Database-sqlite.cpp",
    "content": "#include \"Database.h\"\n\n// TODO: The split between Database-sqlite.cpp and Sqlite.cpp is confusing…\n// Maybe we should either just merge them?\n// Or create another layer of abstraction for JSI-capable SQlite, but without Watermelon-specific logic?\nnamespace watermelondb {\n\nusing platform::consoleError;\nusing platform::consoleLog;\n\nsqlite3_stmt* Database::prepareQuery(std::string sql) {\n    sqlite3_stmt *statement = cachedStatements_[sql];\n\n    if (statement == nullptr) {\n        int resultPrepare = sqlite3_prepare_v2(db_->sqlite, sql.c_str(), -1, &statement, nullptr);\n\n        if (resultPrepare != SQLITE_OK) {\n            sqlite3_finalize(statement);\n            throw dbError(\"Failed to prepare query statement\");\n        }\n\n        cachedStatements_[sql] = statement;\n    } else {\n        // in theory, this shouldn't be necessary, since statements ought to be reset *after* use, not before use\n        // but still this might prevent some crashes if this is not done right\n        // TODO: Remove this later - should not be necessary, and it wastes time\n        sqlite3_reset(statement);\n    }\n    assert(statement != nullptr);\n    return statement;\n}\n\nvoid Database::bindArgs(sqlite3_stmt *statement, jsi::Array &arguments) {\n    auto &rt = getRt();\n    int argsCount = sqlite3_bind_parameter_count(statement);\n\n    if (argsCount != arguments.length(rt)) {\n        sqlite3_reset(statement);\n        throw jsi::JSError(rt, \"Number of args passed to query doesn't match number of arg placeholders\");\n    }\n\n    for (int i = 0; i < argsCount; i++) {\n        jsi::Value value = arguments.getValueAtIndex(rt, i);\n\n        int bindResult;\n        if (value.isNull() || value.isUndefined()) {\n            bindResult = sqlite3_bind_null(statement, i + 1);\n        } else if (value.isString()) {\n            bindResult = sqlite3_bind_text(statement, i + 1, value.getString(rt).utf8(rt).c_str(), -1, SQLITE_TRANSIENT);\n        } else if (value.isNumber()) {\n            bindResult = sqlite3_bind_double(statement, i + 1, value.getNumber());\n        } else if (value.isBool()) {\n            bindResult = sqlite3_bind_int(statement, i + 1, value.getBool());\n        } else if (value.isObject()) {\n            sqlite3_reset(statement);\n            throw jsi::JSError(rt, \"Invalid argument type (object) for query\");\n        } else {\n            sqlite3_reset(statement);\n            throw jsi::JSError(rt, \"Invalid argument type (unknown) for query\");\n        }\n\n        if (bindResult != SQLITE_OK) {\n            sqlite3_reset(statement);\n            throw dbError(\"Failed to bind an argument for query\");\n        }\n    }\n}\n\nstd::string Database::bindArgsAndReturnId(sqlite3_stmt *statement, simdjson::ondemand::array &args) {\n    using namespace simdjson;\n    auto &rt = getRt();\n    std::string returnId = \"\";\n\n    int argsCount = sqlite3_bind_parameter_count(statement);\n    int i = 0;\n    for (auto arg : args) {\n        int bindResult;\n        ondemand::json_type type = arg.type();\n\n        if (type == ondemand::json_type::string) {\n            std::string_view stringView = arg;\n            bindResult = sqlite3_bind_text(statement, i + 1, stringView.data(), (int) stringView.length(), SQLITE_STATIC);\n            if (i == 0) {\n                returnId = std::string(stringView);\n            }\n        } else if (type == ondemand::json_type::number) {\n            bindResult = sqlite3_bind_double(statement, i + 1, (double) arg);\n        } else if (type == ondemand::json_type::boolean) {\n            bindResult = sqlite3_bind_int(statement, i + 1, (bool) arg);\n        } else if (type == ondemand::json_type::null) {\n            bindResult = sqlite3_bind_null(statement, i + 1);\n        } else {\n            throw jsi::JSError(rt, \"Invalid argument type for query - only strings, numbers, booleans and null are allowed\");\n        }\n\n        i++;\n\n        if (bindResult != SQLITE_OK) {\n            sqlite3_reset(statement);\n            throw dbError(\"Failed to bind an argument for query\");\n        }\n    }\n\n    if (argsCount != i) {\n        sqlite3_reset(statement);\n        throw jsi::JSError(rt, \"Number of args passed to query doesn't match number of arg placeholders\");\n    }\n\n    return returnId;\n}\n\nSqliteStatement Database::executeQuery(std::string sql, jsi::Array &arguments) {\n    auto statement = prepareQuery(sql);\n    bindArgs(statement, arguments);\n    return SqliteStatement(statement);\n}\n\nvoid Database::executeUpdate(sqlite3_stmt *statement) {\n    int stepResult = sqlite3_step(statement);\n\n    if (stepResult != SQLITE_DONE) {\n        throw dbError(\"Failed to execute db update\");\n    }\n}\n\nvoid Database::executeUpdate(std::string sql, jsi::Array &args) {\n    auto stmt = prepareQuery(sql);\n    bindArgs(stmt, args);\n    SqliteStatement statement(stmt);\n    executeUpdate(stmt);\n}\n\nvoid Database::executeUpdate(std::string sql) {\n    auto stmt = prepareQuery(sql);\n    SqliteStatement statement(stmt);\n    executeUpdate(stmt);\n}\n\nvoid Database::getRow(sqlite3_stmt *stmt) {\n    int result = sqlite3_step(stmt);\n\n    if (result != SQLITE_ROW) {\n        throw dbError(\"Failed to get a row for query\");\n    }\n}\n\nbool Database::getNextRowOrTrue(sqlite3_stmt *stmt) {\n    int result = sqlite3_step(stmt);\n\n    if (result == SQLITE_DONE) {\n        return true;\n    } else if (result != SQLITE_ROW) {\n        throw dbError(\"Failed to get a row for query\");\n    }\n\n    return false;\n}\n\nvoid Database::executeMultiple(std::string sql) {\n    auto &rt = getRt();\n    char *errmsg = nullptr;\n    int resultExec = sqlite3_exec(db_->sqlite, sql.c_str(), nullptr, nullptr, &errmsg);\n\n    if (errmsg) {\n        // sqlite docs are unclear on whether I need to use this argument or if I can just check result and use\n        // sqlite3_errmsg if needed...\n        std::string message(errmsg);\n        sqlite3_free(errmsg);\n        throw jsi::JSError(rt, message);\n    }\n\n    if (resultExec != SQLITE_OK) {\n        throw dbError(\"Failed to execute statements\");\n    }\n}\n\njsi::Object Database::resultDictionary(sqlite3_stmt *statement) {\n    auto &rt = getRt();\n    jsi::Object dictionary(rt);\n\n    for (int i = 0, len = sqlite3_column_count(statement); i < len; i++) {\n        const char *column = sqlite3_column_name(statement, i);\n        assert(column);\n\n        auto type = sqlite3_column_type(statement, i);\n        if (type == SQLITE_INTEGER) {\n            sqlite3_int64 value = sqlite3_column_int64(statement, i);\n            dictionary.setProperty(rt, column, jsi::Value((double)value));\n        } else if (type == SQLITE_FLOAT) {\n            double value = sqlite3_column_double(statement, i);\n            dictionary.setProperty(rt, column, jsi::Value(value));\n        } else if (type == SQLITE_TEXT) {\n            const char *text = (const char *)sqlite3_column_text(statement, i);\n            if (text) {\n                dictionary.setProperty(rt, column, jsi::String::createFromUtf8(rt, text));\n            } else {\n                dictionary.setProperty(rt, column, jsi::Value::null());\n            }\n        } else if (type == SQLITE_NULL) {\n            dictionary.setProperty(rt, column, jsi::Value::null());\n        } else {\n            throw jsi::JSError(rt, \"Unable to fetch record from database - unknown column type (WatermelonDB does not support blobs or custom sqlite types\");\n        }\n    }\n\n    return dictionary; // TODO: Make sure this value is moved, not copied\n}\n\njsi::Array Database::resultArray(sqlite3_stmt *statement) {\n    auto &rt = getRt();\n    int count = sqlite3_column_count(statement);\n    jsi::Array result(rt, count);\n\n    // TODO: DRY with resultDictionary (but check for performance regressions)\n    for (int i = 0; i < count; i++) {\n        auto type = sqlite3_column_type(statement, i);\n        if (type == SQLITE_INTEGER) {\n            sqlite3_int64 value = sqlite3_column_int64(statement, i);\n            result.setValueAtIndex(rt, i, jsi::Value((double)value));\n        } else if (type == SQLITE_FLOAT) {\n            double value = sqlite3_column_double(statement, i);\n            result.setValueAtIndex(rt, i, jsi::Value(value));\n        } else if (type == SQLITE_TEXT) {\n            const char *text = (const char *)sqlite3_column_text(statement, i);\n            if (text) {\n                result.setValueAtIndex(rt, i, jsi::String::createFromUtf8(rt, text));\n            } else {\n                result.setValueAtIndex(rt, i, jsi::Value::null());\n            }\n        } else if (type == SQLITE_NULL) {\n            result.setValueAtIndex(rt, i, jsi::Value::null());\n        } else {\n            throw jsi::JSError(rt, \"Unable to fetch record from database - unknown column type (WatermelonDB does not support blobs or custom sqlite types\");\n        }\n    }\n\n    return result;\n}\n\njsi::Array Database::resultColumns(sqlite3_stmt *statement) {\n    auto &rt = getRt();\n    int count = sqlite3_column_count(statement);\n    jsi::Array columns(rt, count);\n\n    for (int i = 0; i < count; i++) {\n        const char *column = sqlite3_column_name(statement, i);\n        assert(column);\n        columns.setValueAtIndex(rt, i, jsi::String::createFromUtf8(rt, column));\n    }\n\n    return columns;\n}\n\nvoid Database::beginTransaction() {\n    // NOTE: using exclusive transaction, because that's what FMDB does\n    // In theory, `deferred` seems better, since it's less likely to get locked\n    // OTOH, we don't really do multithreaded access, and when we *do*, we'd either\n    // use a serial queue (easiest) or have to do a lot more work to avoid locking\n    executeUpdate(\"begin exclusive transaction\");\n}\n\nvoid Database::commit() {\n    executeUpdate(\"commit transaction\");\n}\n\nvoid Database::rollback() {\n    // TODO: Use RAII to rollback automatically!\n    consoleError(\"WatermelonDB sqlite transaction is being rolled back! This is BAD - it means that there's either a \"\n                 \"WatermelonDB bug or a user issue (e.g. no empty disk space) that Watermelon may be unable to recover \"\n                 \"from safely... Do investigate!\");\n    // NOTE: On some errors (like IO, memory errors), the transaction may be rolled back automatically\n    // Attempting to roll it back ourselves would result in another error, which would hide the original error\n    // According to https://sqlite.org/c3ref/get_autocommit.html , checking autocommit status is the only\n    // way to find out whether that's the case. This feels wrong...\n    // https://sqlite.org/lang_transaction.html recommends that we roll back anyway, since an error is\n    // harmless.\n    try {\n        executeUpdate(\"rollback transaction\");\n    } catch (const std::exception &ex) {\n        std::string errorMessage = \"Error while attempting to roll back transaction, probably harmless: \";\n        errorMessage += ex.what();\n        consoleError(errorMessage);\n    }\n}\n\nint Database::getUserVersion() {\n    auto &rt = getRt();\n    auto args = jsi::Array::createWithElements(rt);\n    auto statement = executeQuery(\"pragma user_version\", args);\n    getRow(statement.stmt);\n\n    assert(sqlite3_data_count(statement.stmt) == 1);\n\n    int version = sqlite3_column_int(statement.stmt, 0);\n    return version;\n}\n\nvoid Database::setUserVersion(int newVersion) {\n    // NOTE: placeholders don't work, and ints are safe\n    std::string sql = \"pragma user_version = \" + std::to_string(newVersion);\n    executeUpdate(sql);\n}\n\n}\n"
  },
  {
    "path": "native/shared/Database-turboSync.cpp",
    "content": "#include \"Database.h\"\n\nnamespace watermelondb {\n\nusing platform::consoleError;\nusing platform::consoleLog;\n\nenum ColumnType { string, number, boolean };\nstruct ColumnSchema {\n    int index;\n    std::string name;\n    ColumnType type;\n    bool isOptional;\n};\n\nColumnType columnTypeFromStr(std::string &type) {\n    if (type == \"string\") {\n        return ColumnType::string;\n    } else if (type == \"number\") {\n        return ColumnType::number;\n    } else if (type == \"boolean\") {\n        return ColumnType::boolean;\n    } else {\n        throw std::invalid_argument(\"invalid column type in schema\");\n    }\n}\n\nusing TableSchemaArray = std::vector<ColumnSchema>;\nusing TableSchema = std::unordered_map<std::string, ColumnSchema>;\nstd::pair<TableSchemaArray, TableSchema> decodeTableSchema(jsi::Runtime &rt, jsi::Object schema) {\n    auto columnArr = schema.getProperty(rt, \"columnArray\").getObject(rt).getArray(rt);\n\n    TableSchemaArray columnsArray = {};\n    TableSchema columns = {};\n\n    for (size_t i = 0, len = columnArr.size(rt); i < len; i++) {\n        auto columnObj = columnArr.getValueAtIndex(rt, i).getObject(rt);\n        auto name = columnObj.getProperty(rt, \"name\").getString(rt).utf8(rt);\n        auto typeStr = columnObj.getProperty(rt, \"type\").getString(rt).utf8(rt);\n        ColumnType type = columnTypeFromStr(typeStr);\n        auto isOptionalProp = columnObj.getProperty(rt, \"isOptional\");\n        bool isOptional = isOptionalProp.isBool() ? isOptionalProp.getBool() : false;\n        ColumnSchema column = { (int) i, name, type, isOptional };\n\n        columnsArray.push_back(column);\n        columns[name] = column;\n    }\n\n    return std::make_pair(columnsArray, columns);\n}\n\nstd::string insertSqlFor(jsi::Runtime &rt, std::string tableName, TableSchemaArray columns) {\n    std::string sql = \"insert into `\" + tableName + \"` (`id`, `_status`, `_changed\";\n    for (auto const &column : columns) {\n        sql += \"`, `\" + column.name;\n    }\n    sql += \"`) values (?, 'synced', ''\";\n    for (size_t i = 0, len = columns.size(); i < len; i++) {\n        sql += \", ?\";\n    }\n    sql += \")\";\n    return sql;\n}\n\njsi::Value Database::unsafeLoadFromSync(int jsonId, jsi::Object &schema, std::string preamble, std::string postamble) {\n    using namespace simdjson;\n    auto &rt = getRt();\n    const std::lock_guard<std::mutex> lock(mutex_);\n    beginTransaction();\n\n    try {\n        executeMultiple(preamble);\n\n        jsi::Object residualValues(rt);\n        auto tableSchemas = schema.getProperty(rt, \"tables\").getObject(rt);\n\n        ondemand::parser parser;\n        auto json = padded_string(platform::getSyncJson(jsonId));\n        ondemand::document doc = parser.iterate(json);\n\n        // NOTE: simdjson::ondemand processes forwards-only, hence the weird field enumeration\n        // We can't use subscript or backtrack.\n        for (auto docField : (ondemand::object) doc) {\n            std::string_view fieldNameView = docField.unescaped_key();\n\n            if (fieldNameView != \"changes\") {\n                ondemand::value value = docField.value();\n                std::string_view valueJson = simdjson::to_json_string(value);\n                residualValues.setProperty(rt,\n                                           jsi::String::createFromUtf8(rt, (std::string) fieldNameView),\n                                           jsi::String::createFromUtf8(rt, (std::string) valueJson));\n            } else {\n                ondemand::object changeSet = docField.value();\n                for (auto changeSetField : changeSet) {\n                    auto tableName = (std::string) (std::string_view) changeSetField.unescaped_key();\n                    ondemand::object tableChangeSet = changeSetField.value();\n\n                    for (auto tableChangeSetField : tableChangeSet) {\n                        std::string_view tableChangeSetKey = tableChangeSetField.unescaped_key();\n                        ondemand::array records = tableChangeSetField.value();\n\n                        if (tableChangeSetKey == \"deleted\") {\n                            if (records.begin() != records.end()) {\n                                throw jsi::JSError(rt, \"expected deleted field to be empty\");\n                            }\n                            continue;\n                        } else if (tableChangeSetKey != \"updated\" && tableChangeSetKey != \"created\") {\n                            throw jsi::JSError(rt, \"bad changeset field\");\n                        }\n\n                        auto tableSchemaJsi = tableSchemas.getProperty(rt, jsi::String::createFromUtf8(rt, tableName));\n                        if (!tableSchemaJsi.isObject()) {\n                            continue;\n                        }\n                        auto tableSchemas = decodeTableSchema(rt, tableSchemaJsi.getObject(rt));\n                        auto tableSchemaArray = tableSchemas.first;\n                        auto tableSchema = tableSchemas.second;\n\n                        sqlite3_stmt *stmt = prepareQuery(insertSqlFor(rt, tableName, tableSchemaArray));\n                        SqliteStatement statement(stmt);\n\n                        for (ondemand::object record : records) {\n                            // TODO: It would be much more natural to iterate over schema, and then get json's field\n                            // and not the other way around, but simdjson doesn't allow us to do that right now\n                            // I think 1.0 will allow subscripting objects even if it means backtracking\n                            // So we need this stupid hack where we pre-bind null/0/false/'' to sanitize missing fields\n                            for (auto column : tableSchemaArray) {\n                                auto argumentsIdx = column.index + 2;\n                                if (column.isOptional) {\n                                    sqlite3_bind_null(stmt, argumentsIdx);\n                                } else {\n                                    if (column.type == ColumnType::string) {\n                                        sqlite3_bind_text(stmt, argumentsIdx, \"\", -1, SQLITE_STATIC);\n                                    } else if (column.type == ColumnType::boolean) {\n                                        sqlite3_bind_int(stmt, argumentsIdx, 0);\n                                    } else if (column.type == ColumnType::number) {\n                                        sqlite3_bind_double(stmt, argumentsIdx, 0);\n                                    } else {\n                                        throw jsi::JSError(rt, \"Unknown schema type\");\n                                    }\n                                }\n                            }\n\n                            for (auto valueField : record) {\n                                auto key = (std::string) (std::string_view) valueField.unescaped_key();\n                                auto value = valueField.value();\n\n                                if (key == \"id\") {\n                                    std::string_view idView = value;\n                                    sqlite3_bind_text(stmt, 1, idView.data(), (int) idView.length(), SQLITE_STATIC);\n                                    continue;\n                                }\n\n                                try {\n                                    auto &column = tableSchema.at(key);\n                                    ondemand::json_type type = value.type();\n                                    auto argumentsIdx = column.index + 2;\n\n                                    if (column.type == ColumnType::string && type == ondemand::json_type::string) {\n                                        std::string_view stringView = value;\n                                        sqlite3_bind_text(stmt, argumentsIdx, stringView.data(), (int) stringView.length(), SQLITE_STATIC);\n                                    } else if (column.type == ColumnType::boolean) {\n                                        if (type == ondemand::json_type::boolean) {\n                                            sqlite3_bind_int(stmt, argumentsIdx, (bool) value);\n                                        } else if (type == ondemand::json_type::number && ((double) value == 0 || (double) value == 1)) {\n                                            sqlite3_bind_int(stmt, argumentsIdx, (bool) (double) value); // needed for compat with sanitizeRaw\n                                        }\n                                    } else if (column.type == ColumnType::number && type == ondemand::json_type::number) {\n                                        sqlite3_bind_double(stmt, argumentsIdx, (double) value);\n                                    }\n                                } catch (const std::out_of_range &ex) {\n                                    continue;\n                                }\n                            }\n\n                            executeUpdate(stmt);\n                            sqlite3_reset(stmt);\n                        }\n                    }\n                }\n            }\n        }\n        executeMultiple(postamble);\n        commit();\n        platform::deleteSyncJson(jsonId);\n        return residualValues;\n    } catch (const std::exception &ex) {\n        platform::deleteSyncJson(jsonId);\n        rollback();\n        throw;\n    }\n}\n\n}\n"
  },
  {
    "path": "native/shared/Database.cpp",
    "content": "#include \"Database.h\"\n\nnamespace watermelondb {\n\nusing platform::consoleError;\nusing platform::consoleLog;\n\nDatabase::Database(jsi::Runtime *runtime, std::string path, bool usesExclusiveLocking) : runtime_(runtime), mutex_() {\n    db_ = std::make_unique<SqliteDb>(path);\n\n    std::string initSql = \"\";\n\n    // FIXME: On Android, Watermelon often errors out on large batches with an IO error, because it\n    // can't find a temp store... I tried setting sqlite3_temp_directory to /tmp/something, but that\n    // didn't work. Setting temp_store to memory seems to fix the issue, but causes a significant\n    // slowdown, at least on iOS (not confirmed on Android). Worth investigating if the slowdown is\n    // also present on Android, and if so, investigate the root cause. Perhaps we need to set the temp\n    // directory by interacting with JNI and finding a path within the app's sandbox?\n    #ifdef ANDROID\n    initSql += \"pragma temp_store = memory;\";\n    #endif\n\n    initSql += \"pragma journal_mode = WAL;\";\n\n    // set timeout before SQLITE_BUSY error is returned\n    initSql += \"pragma busy_timeout = 5000;\";\n\n    #ifdef ANDROID\n    // NOTE: This was added in an attempt to fix mysterious `database disk image is malformed` issue when using\n    // headless JS services\n    // NOTE: This slows things down\n    initSql += \"pragma synchronous = FULL;\";\n    #endif\n    if (usesExclusiveLocking) {\n        // this seems to fix the headless JS service issue but breaks if you have multiple readers\n        initSql += \"pragma locking_mode = EXCLUSIVE;\";\n    }\n\n    executeMultiple(initSql);\n}\n\nvoid Database::destroy() {\n    const std::lock_guard<std::mutex> lock(mutex_);\n\n    if (isDestroyed_) {\n        return;\n    }\n    isDestroyed_ = true;\n    for (auto const &cachedStatement : cachedStatements_) {\n        sqlite3_stmt *statement = cachedStatement.second;\n        sqlite3_finalize(statement);\n    }\n    cachedStatements_ = {};\n    db_->destroy();\n}\n\nDatabase::~Database() {\n    destroy();\n}\n\nbool Database::isCached(std::string cacheKey) {\n    return cachedRecords_.find(cacheKey) != cachedRecords_.end();\n}\nvoid Database::markAsCached(std::string cacheKey) {\n    cachedRecords_.insert(cacheKey);\n}\nvoid Database::removeFromCache(std::string cacheKey) {\n    cachedRecords_.erase(cacheKey);\n}\n\nvoid Database::unsafeResetDatabase(jsi::String &schema, int schemaVersion) {\n    auto &rt = getRt();\n    const std::lock_guard<std::mutex> lock(mutex_);\n\n    // TODO: in non-memory mode, just delete the DB files\n    // NOTE: As of iOS 14, selecting tables from sqlite_master and deleting them does not work\n    // They seem to be enabling \"defensive\" config. So we use another obscure method to clear the database\n    // https://www.sqlite.org/c3ref/c_dbconfig_defensive.html#sqlitedbconfigresetdatabase\n\n    if (sqlite3_db_config(db_->sqlite, SQLITE_DBCONFIG_RESET_DATABASE, 1, 0) != SQLITE_OK) {\n        throw jsi::JSError(rt, \"Failed to enable reset database mode\");\n    }\n    // NOTE: We can't VACUUM in a transaction\n    executeMultiple(\"vacuum\");\n\n    if (sqlite3_db_config(db_->sqlite, SQLITE_DBCONFIG_RESET_DATABASE, 0, 0) != SQLITE_OK) {\n        throw jsi::JSError(rt, \"Failed to disable reset database mode\");\n    }\n\n    beginTransaction();\n    try {\n        cachedRecords_ = {};\n\n        // Reinitialize schema\n        executeMultiple(schema.utf8(rt));\n        setUserVersion(schemaVersion);\n\n        commit();\n    } catch (const std::exception &ex) {\n        rollback();\n        throw;\n    }\n}\n\nvoid Database::migrate(jsi::String &migrationSql, int fromVersion, int toVersion) {\n    auto &rt = getRt();\n    const std::lock_guard<std::mutex> lock(mutex_);\n\n    beginTransaction();\n    try {\n        assert(getUserVersion() == fromVersion && \"Incompatible migration set\");\n\n        executeMultiple(migrationSql.utf8(rt));\n        setUserVersion(toVersion);\n\n        commit();\n    } catch (const std::exception &ex) {\n        rollback();\n        throw;\n    }\n}\n\n} // namespace watermelondb\n"
  },
  {
    "path": "native/shared/Database.h",
    "content": "#pragma once\n\n#include <jsi/jsi.h>\n#include <unordered_map>\n#include <unordered_set>\n#include <mutex>\n#include <sqlite3.h>\n\n// FIXME: Make these paths consistent across platforms\n#if __ANDROID__\n#import <simdjson.h>\n#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__)\n#include <simdjson.h>\n#else\n// Does Xcode error on this line? You probably didn't include `simdjson` as a dependency in your Podfile.\n#include <simdjson/simdjson.h>\n#endif\n\n#include \"Sqlite.h\"\n#include \"DatabasePlatform.h\"\n\nusing namespace facebook;\n\nnamespace watermelondb {\n\nclass Database : public jsi::HostObject {\npublic:\n    static void install(jsi::Runtime *runtime);\n    Database(jsi::Runtime *runtime, std::string path, bool usesExclusiveLocking);\n    ~Database();\n    void destroy();\n\n    jsi::Value find(jsi::String &tableName, jsi::String &id);\n    jsi::Value query(jsi::String &tableName, jsi::String &sql, jsi::Array &arguments);\n    jsi::Value queryAsArray(jsi::String &tableName, jsi::String &sql, jsi::Array &arguments);\n    jsi::Array queryIds(jsi::String &sql, jsi::Array &arguments);\n    jsi::Array unsafeQueryRaw(jsi::String &sql, jsi::Array &arguments);\n    jsi::Value count(jsi::String &sql, jsi::Array &arguments);\n    void batch(jsi::Array &operations);\n    void batchJSON(jsi::String &&operationsJson);\n    jsi::Value unsafeLoadFromSync(int jsonId, jsi::Object &schema, std::string preamble, std::string postamble);\n    void unsafeResetDatabase(jsi::String &schema, int schemaVersion);\n    jsi::Value getLocal(jsi::String &key);\n    void executeMultiple(std::string sql);\n\nprivate:\n    bool initialized_;\n    bool isDestroyed_;\n    std::mutex mutex_;\n    jsi::Runtime *runtime_; // TODO: std::shared_ptr would be better, but I don't know how to make it from void* in RCTCxxBridge\n    std::unique_ptr<SqliteDb> db_;\n    std::unordered_map<std::string, sqlite3_stmt *> cachedStatements_; // NOTE: may contain null pointers!\n    std::unordered_set<std::string> cachedRecords_;\n\n    jsi::Runtime &getRt();\n    jsi::JSError dbError(std::string description);\n\n    sqlite3_stmt* prepareQuery(std::string sql);\n    void bindArgs(sqlite3_stmt *statement, jsi::Array &arguments);\n    std::string bindArgsAndReturnId(sqlite3_stmt *statement, simdjson::ondemand::array &args);\n    SqliteStatement executeQuery(std::string sql, jsi::Array &arguments);\n    void executeUpdate(sqlite3_stmt *statement);\n    void executeUpdate(std::string sql, jsi::Array &arguments);\n    void executeUpdate(std::string sql);\n    void getRow(sqlite3_stmt *stmt);\n    bool getNextRowOrTrue(sqlite3_stmt *stmt);\n    jsi::Object resultDictionary(sqlite3_stmt *statement);\n    jsi::Array resultArray(sqlite3_stmt *statement);\n    jsi::Array resultColumns(sqlite3_stmt *statement);\n    jsi::Array arrayFromStd(std::vector<jsi::Value> &vector);\n\n    void beginTransaction();\n    void commit();\n    void rollback();\n\n    int getUserVersion();\n    void setUserVersion(int newVersion);\n    void migrate(jsi::String &migrationSql, int fromVersion, int toVersion);\n\n    bool isCached(std::string cacheKey);\n    void markAsCached(std::string cacheKey);\n    void removeFromCache(std::string cacheKey);\n};\n\ninline std::string cacheKey(std::string tableName, std::string recordId) {\n    return tableName + \"$\" + recordId; // NOTE: safe as long as table names cannot contain $ sign\n}\n\n} // namespace watermelondb\n"
  },
  {
    "path": "native/shared/DatabaseBridge.cpp",
    "content": "#include \"Database.h\"\n#include \"DatabasePlatform.h\"\n#include \"JSIHelpers.h\"\n\nnamespace watermelondb {\n\nusing platform::consoleError;\nusing platform::consoleLog;\n\nvoid Database::install(jsi::Runtime *runtime) {\n    jsi::Runtime &rt = *runtime;\n    auto globalObject = rt.global();\n    createMethod(rt, globalObject, \"nativeWatermelonCreateAdapter\", 2, [runtime](jsi::Runtime &rt, const jsi::Value *args) {\n        std::string dbPath = args[0].getString(rt).utf8(rt);\n        bool usesExclusiveLocking = args[1].getBool();\n\n        jsi::Object adapter(rt);\n\n        std::shared_ptr<Database> database = std::make_shared<Database>(runtime, dbPath, usesExclusiveLocking);\n        adapter.setProperty(rt, \"database\", jsi::Object::createFromHostObject(rt, database));\n\n        // FIXME: Important hack!\n        // Without any hacks, JSI Watermelon crashes on Android/Hermes on app reload in development:\n        // (This doesn't happen on iOS/JSC)\n        //   abort 0x00007d0bd27cff2f\n        //   __fortify_fatal(char const*, ...) 0x00007d0bd27d20c1\n        //   HandleUsingDestroyedMutex(pthread_mutex_t*, char const*) 0x00007d0bd283b020\n        //   pthread_mutex_lock 0x00007d0bd283aef4\n        //   pthreadMutexEnter sqlite3.c:26320\n        //   sqlite3_mutex_enter sqlite3.c:25775\n        //   sqlite3_next_stmt sqlite3.c:84221\n        //   watermelondb::SqliteDb::~SqliteDb() Sqlite.cpp:57\n        // It appears that the Unix thread on which Database is set up is already destroyed by the\n        // time destructor is called. AFAIU destructors on objects that are managed by JSI runtime\n        // *should* be safe in this respect, but maybe they're not/there's a bug...\n        //\n        // For future debuggers, the flow goes like this:\n        //  - ReactInstanceManager.runCreateReactContextOnNewThread()\n        //       this sets up new instance\n        //  - ReactInstanceManager.tearDownReactContext()\n        //  - ReactContext.destroy()\n        //  - CatalystInstanceImpl.destroy()\n        //       this notifies listeners that the app is about to be destroyed\n        //  - mHybridData.resetNative()\n        //  - ~CatalystInstanceImpl()\n        //  - ~Instance()\n        //  - NativeToJSBridge.destroy()\n        //  - m_executor = nullptr\n        //  - ~Runtime()\n        //  - ...\n        //  - ~Database()\n        //\n        // First attempt to work around this issue was by disabling sqlite3's threadsafety (which caused\n        // pthread apis to be called, leading to a crash), since we're only using it from one thread\n        // but predictably that caused new issues.\n        // When using headless JS, this issue would occur:\n        //    Failed to get a row for query - sqlite error 11 (database disk image is malformed)\n        // (Not exactly sure why, seems like headless JS reuses the same catalyst instance...)\n        //\n        // Current workaround is to tap into CatalystInstanceImpl.destroy() to destroy the database\n        // before it's destructed via normal C++ rules. There's no clean API for our JSI setup, so\n        // we route via NativeModuleRegistry onCatalystInstanceDestroy -> DatabaseBridge ->\n        // WatermelonJSI via reflection (and switch to the currect thread - important!) and then to\n        // individual Database objects via this listener callback. It's ugly, but should work.\n        //\n        // 2023 update: Check if the above is still true, given https://github.com/Nozbe/WatermelonDB/issues/1474\n        // showed that the true cause of the pthread_mutex_lock crash is something else.\n        // On the other hand, it's still true that invalidation happens asynchronously and could happen\n        // after new bridge is already set up, which could cause locking issues (and a case was found on iOS where\n        // this does happen)\n        std::weak_ptr<Database> weakDatabase = database;\n        platform::onDestroy([weakDatabase]() {\n            if (auto databaseToDestroy = weakDatabase.lock()) {\n                consoleLog(\"Destroying database due to RCTBridge invalidation\");\n                databaseToDestroy->destroy();\n            }\n        });\n\n        createMethod(rt, adapter, \"initialize\", 2, [database](jsi::Runtime &rt, const jsi::Value *args) {\n            jsi::String dbName = args[0].getString(rt);\n            int expectedVersion = (int)args[1].getNumber();\n\n            int databaseVersion = database->getUserVersion();\n\n            jsi::Object response(rt);\n\n            if (databaseVersion == expectedVersion) {\n                database->initialized_ = true;\n                response.setProperty(rt, \"code\", \"ok\");\n            } else if (databaseVersion == 0) {\n                response.setProperty(rt, \"code\", \"schema_needed\");\n            } else if (databaseVersion < expectedVersion) {\n                response.setProperty(rt, \"code\", \"migrations_needed\");\n                response.setProperty(rt, \"databaseVersion\", databaseVersion);\n            } else {\n                consoleLog(\"Database has newer version (\" + std::to_string(databaseVersion) +\n                           \") than what the app supports (\" + std::to_string(expectedVersion) + \"). Will reset database.\");\n                response.setProperty(rt, \"code\", \"schema_needed\");\n            }\n\n            return response;\n        });\n        createMethod(rt, adapter, \"setUpWithSchema\", 3, [database](jsi::Runtime &rt, const jsi::Value *args) {\n            jsi::String dbName = args[0].getString(rt);\n            jsi::String schema = args[1].getString(rt);\n            int schemaVersion = (int)args[2].getNumber();\n\n            try {\n                database->unsafeResetDatabase(schema, schemaVersion);\n            } catch (const std::exception &ex) {\n                consoleError(\"Failed to set up the database correctly - \" + std::string(ex.what()));\n                std::abort();\n            }\n\n            database->initialized_ = true;\n            return jsi::Value::undefined();\n        });\n        createMethod(rt, adapter, \"setUpWithMigrations\", 4, [database](jsi::Runtime &rt, const jsi::Value *args) {\n            jsi::String dbName = args[0].getString(rt);\n            jsi::String migrationSchema = args[1].getString(rt);\n            int fromVersion = (int)args[2].getNumber();\n            int toVersion = (int)args[3].getNumber();\n\n            try {\n                database->migrate(migrationSchema, fromVersion, toVersion);\n            } catch (const std::exception &ex) {\n                consoleError(\"Failed to migrate the database correctly - \" + std::string(ex.what()));\n                return makeError(rt, ex.what());\n            }\n\n            database->initialized_ = true;\n            return jsi::Value::undefined();\n        });\n        createMethod(rt, adapter, \"find\", 2, [database](jsi::Runtime &rt, const jsi::Value *args) {\n            assert(database->initialized_);\n            jsi::String tableName = args[0].getString(rt);\n            jsi::String id = args[1].getString(rt);\n            return database->find(tableName, id);\n        });\n        createMethod(rt, adapter, \"query\", 3, [database](jsi::Runtime &rt, const jsi::Value *args) {\n            assert(database->initialized_);\n            jsi::String tableName = args[0].getString(rt);\n            jsi::String sql = args[1].getString(rt);\n            jsi::Array arguments = args[2].getObject(rt).getArray(rt);\n            return database->query(tableName, sql, arguments);\n        });\n        createMethod(rt, adapter, \"queryAsArray\", 3, [database](jsi::Runtime &rt, const jsi::Value *args) {\n            assert(database->initialized_);\n            jsi::String tableName = args[0].getString(rt);\n            jsi::String sql = args[1].getString(rt);\n            jsi::Array arguments = args[2].getObject(rt).getArray(rt);\n            return database->queryAsArray(tableName, sql, arguments);\n        });\n        createMethod(rt, adapter, \"queryIds\", 2, [database](jsi::Runtime &rt, const jsi::Value *args) {\n            assert(database->initialized_);\n            jsi::String sql = args[0].getString(rt);\n            jsi::Array arguments = args[1].getObject(rt).getArray(rt);\n            return database->queryIds(sql, arguments);\n        });\n        createMethod(rt, adapter, \"unsafeQueryRaw\", 2, [database](jsi::Runtime &rt, const jsi::Value *args) {\n            assert(database->initialized_);\n            jsi::String sql = args[0].getString(rt);\n            jsi::Array arguments = args[1].getObject(rt).getArray(rt);\n            return database->unsafeQueryRaw(sql, arguments);\n        });\n        createMethod(rt, adapter, \"count\", 2, [database](jsi::Runtime &rt, const jsi::Value *args) {\n            assert(database->initialized_);\n            jsi::String sql = args[0].getString(rt);\n            jsi::Array arguments = args[1].getObject(rt).getArray(rt);\n            return database->count(sql, arguments);\n        });\n        createMethod(rt, adapter, \"batch\", 1, [database](jsi::Runtime &rt, const jsi::Value *args) {\n            assert(database->initialized_);\n            jsi::Array operations = args[0].getObject(rt).getArray(rt);\n            database->batch(operations);\n            return jsi::Value::undefined();\n        });\n        createMethod(rt, adapter, \"batchJSON\", 1, [database](jsi::Runtime &rt, const jsi::Value *args) {\n            assert(database->initialized_);\n            database->batchJSON(args[0].getString(rt));\n            return jsi::Value::undefined();\n        });\n        createMethod(rt, adapter, \"getLocal\", 1, [database](jsi::Runtime &rt, const jsi::Value *args) {\n            assert(database->initialized_);\n            jsi::String key = args[0].getString(rt);\n            return database->getLocal(key);\n        });\n        createMethod(rt, adapter, \"unsafeLoadFromSync\", 4, [database](jsi::Runtime &rt, const jsi::Value *args) {\n            assert(database->initialized_);\n            auto jsonId = (int) args[0].getNumber();\n            auto schema = args[1].getObject(rt);\n            auto preamble = args[2].getString(rt).utf8(rt);\n            auto postamble = args[3].getString(rt).utf8(rt);\n            return database->unsafeLoadFromSync(jsonId, schema, preamble, postamble);\n        });\n        createMethod(rt, adapter, \"unsafeExecuteMultiple\", 1, [database](jsi::Runtime &rt, const jsi::Value *args) {\n            assert(database->initialized_);\n            auto sqlString = args[0].getString(rt).utf8(rt);\n            database->executeMultiple(sqlString);\n            return jsi::Value::undefined();\n        });\n        createMethod(rt, adapter, \"unsafeResetDatabase\", 2, [database](jsi::Runtime &rt, const jsi::Value *args) {\n            assert(database->initialized_);\n            jsi::String schema = args[0].getString(rt);\n            int schemaVersion = (int)args[1].getNumber();\n\n            try {\n                database->unsafeResetDatabase(schema, schemaVersion);\n                return jsi::Value::undefined();\n            } catch (const std::exception &ex) {\n                consoleError(\"Failed to reset database correctly - \" + std::string(ex.what()));\n                // Partially reset database is likely corrupted, so it's probably less bad to crash\n                std::abort();\n            }\n        });\n        createMethod(rt, adapter, \"unsafeClose\", 0, [database](jsi::Runtime &rt, const jsi::Value *args) {\n            assert(database->initialized_);\n            database->destroy();\n            database->initialized_ = false;\n            return jsi::Value::undefined();\n        });\n\n        return adapter;\n    });\n\n    // TODO: Use the onMemoryAlert hook!\n}\n\n\n} // namespace watermelondb\n\n"
  },
  {
    "path": "native/shared/DatabasePlatform.h",
    "content": "#pragma once\n\n#include <functional>\n#include <string>\n#include \"Database.h\"\n\nnamespace watermelondb {\nnamespace platform {\n\n// Logs to console\nvoid consoleLog(std::string message);\n\n// Logs error to console\nvoid consoleError(std::string message);\n\n// Called before a Sqlite object is constructed\n// Use to initialize sqlite, if necessary\nvoid initializeSqlite();\n\n// Given a database name, returns a fully-qualified default database path\n// e.g. /Users/foo.app/<name>.db\nstd::string resolveDatabasePath(std::string path);\n\n// Removes database file located at `path`.\n// Throws an exception if it's not possible to delete this file\nvoid deleteDatabaseFile(std::string path, bool warnIfDoesNotExist);\n\n// Calls function when device memory is getting low\nvoid onMemoryAlert(std::function<void(void)> callback);\n\n// Returns sync json provided by the user\nstd::string_view getSyncJson(int id);\n\n// Destroys sync json after it's used\nvoid deleteSyncJson(int id);\n\n// Called when React Native bridge is being torn down\nvoid onDestroy(std::function<void(void)> callback);\n\n} // namespace platform\n} // namespace watermelondb\n"
  },
  {
    "path": "native/shared/JSIHelpers.h",
    "content": "#pragma once\n\nnamespace watermelondb {\n\nusing platform::consoleError;\nusing platform::consoleLog;\n\njsi::Value makeError(facebook::jsi::Runtime &rt, const std::string &desc) {\n    return rt.global().getPropertyAsFunction(rt, \"Error\").call(rt, desc);\n}\n\njsi::Value runBlock(facebook::jsi::Runtime &rt, std::function<jsi::Value(void)> block) {\n    jsi::Value retValue;\n    // NOTE: C++ Exceptions don't work correctly on Android -- most likely due to the fact that\n    // we don't share the C++ stdlib with React Native targets, which means that the executor\n    // doesn't know how to catch our exceptions to turn them into JS errors. As a workaround,\n    // we catch those ourselves and return JS Errors instead of throwing them in JS VM.\n    // See also:\n    // https://github.com/facebook/hermes/issues/422 - REA also catches all exceptions in C++\n    //    but then passes them to Java world via JNI\n    // https://github.com/facebook/hermes/issues/298#issuecomment-661352050\n    // https://github.com/facebook/react-native/issues/29558\n    #if __ANDROID__ || defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__)\n    try {\n        retValue = block();\n    } catch (const jsi::JSError &error) {\n        retValue = makeError(rt, error.getMessage());\n    } catch (const std::exception &ex) {\n        std::string exceptionString(\"Exception in HostFunction: \");\n        exceptionString += ex.what();\n        retValue = makeError(rt, exceptionString);\n    } catch (...) {\n        std::string exceptionString(\"Exception in HostFunction: <unknown>\");\n        retValue = makeError(rt, exceptionString);\n    }\n    #else\n    retValue = block();\n    #endif\n    return retValue;\n}\n\nusing jsiFunction = std::function<jsi::Value(jsi::Runtime &rt, const jsi::Value *args)>;\n\nvoid createMethod(jsi::Runtime &runtime, jsi::Object &object, const char *methodName, unsigned int argCount, jsiFunction func) {\n    jsi::PropNameID name = jsi::PropNameID::forAscii(runtime, methodName);\n    jsi::Function function = jsi::Function::createFromHostFunction(runtime, name, argCount, [methodName, argCount, func]\n                                                                   (jsi::Runtime &rt, const jsi::Value &, const jsi::Value *args, size_t count) {\n        if (count != argCount) {\n            std::string error = std::string(methodName) + \" takes \" + std::to_string(argCount) + \" arguments\";\n            #ifdef ANDROID\n            consoleError(error);\n            std::abort();\n            #else\n            throw std::invalid_argument(error);\n            #endif\n        }\n        return runBlock(rt, [&]() {\n            return func(rt, args);\n        });\n    });\n    object.setProperty(runtime, name, function);\n}\n\n}\n"
  },
  {
    "path": "native/shared/Sqlite.cpp",
    "content": "#include \"Sqlite.h\"\n#include \"DatabasePlatform.h\"\n#include <cassert>\n\nnamespace watermelondb {\n\nusing platform::consoleError;\nusing platform::consoleLog;\n\nstd::string resolveDatabasePath(std::string path) {\n    if (path == \"\" || path == \":memory:\" || path.rfind(\"file:\", 0) == 0 || path.rfind(\"/\", 0) == 0) {\n        // These seem like paths/sqlite path-like strings\n        return path;\n    } else {\n        // path is a name to be resolved based on platform preferences\n        return platform::resolveDatabasePath(path);\n    }\n}\n\nSqliteDb::SqliteDb(std::string path) {\n    consoleLog(\"Will open database...\");\n    platform::initializeSqlite();\n    #ifndef ANDROID\n    assert(sqlite3_threadsafe());\n    #endif\n\n    auto resolvedPath = resolveDatabasePath(path);\n    int openResult = sqlite3_open(resolvedPath.c_str(), &sqlite);\n\n    if (openResult != SQLITE_OK) {\n        if (sqlite) {\n            auto error = std::string(sqlite3_errmsg(sqlite));\n            throw new std::runtime_error(\"Error while trying to open database - \" + error);\n        } else {\n            // whoa, sqlite couldn't allocate memory\n            throw new std::runtime_error(\"Error while trying to open database, sqlite is null - \" + std::to_string(openResult));\n        }\n    }\n    assert(sqlite != nullptr);\n\n    consoleLog(\"Opened database at \" + resolvedPath);\n}\n\nvoid SqliteDb::destroy() {\n    if (isDestroyed_) {\n        return;\n    }\n    consoleLog(\"Closing database...\");\n\n    isDestroyed_ = true;\n    assert(sqlite != nullptr);\n\n    // Find and finalize all prepared statements\n    sqlite3_stmt *stmt;\n    while ((stmt = sqlite3_next_stmt(sqlite, nullptr))) {\n        consoleError(\"Leak detected! Finalized a statement when closing database - this means that there were dangling \"\n                     \"statements not held by cachedStatements, or handling of cachedStatements is broken. Please \"\n                     \"collect as much information as possible and file an issue with WatermelonDB repository!\");\n        sqlite3_finalize(stmt);\n    }\n\n    // Close connection\n    // NOTE: Applications should finalize all prepared statements, close all BLOB handles, and finish all sqlite3_backup objects\n    int closeResult = sqlite3_close(sqlite);\n\n    if (closeResult != SQLITE_OK) {\n        // NOTE: We're just gonna log an error. We can't throw an exception here. We could crash, but most likely we're\n        // only leaking memory/resources\n        consoleError(\"Failed to close sqlite database - \" + std::string(sqlite3_errmsg(sqlite)));\n    }\n\n    consoleLog(\"Database closed.\");\n}\n\nSqliteDb::~SqliteDb() {\n    destroy();\n}\n\nSqliteStatement::SqliteStatement(sqlite3_stmt *statement) : stmt(statement) {\n}\n\nSqliteStatement::~SqliteStatement() {\n    reset();\n}\n\nvoid SqliteStatement::reset() {\n    if (stmt) {\n        // TODO: I'm confused by whether or not the return value of reset is relevant:\n        // If the most recent call to sqlite3_step(S) for the prepared statement S indicated an error, then\n        // sqlite3_reset(S) returns an appropriate error code. https://sqlite.org/c3ref/reset.html\n        sqlite3_reset(stmt);\n        sqlite3_clear_bindings(stmt); // might matter if storing a huge string/blob\n                                      //        consoleLog(\"statement has been reset!\");\n    }\n}\n\n} // namespace watermelondb\n"
  },
  {
    "path": "native/shared/Sqlite.h",
    "content": "#pragma once\n\n#include <string>\n#include <sqlite3.h>\n\nnamespace watermelondb {\n\n// Lightweight wrapper for handling sqlite3 lifetime\nclass SqliteDb {\npublic:\n    SqliteDb(std::string path);\n    ~SqliteDb();\n    void destroy();\n\n    sqlite3 *sqlite;\n\n    SqliteDb &operator=(const SqliteDb &) = delete;\n    SqliteDb(const SqliteDb &) = delete;\n\nprivate:\n    bool isDestroyed_;\n};\n\nclass SqliteStatement {\npublic:\n    SqliteStatement(sqlite3_stmt *statement);\n    ~SqliteStatement();\n\n    sqlite3_stmt *stmt;\n\n    void reset();\n};\n\n} // namespace watermelondb\n\n"
  },
  {
    "path": "native/windows/.gitignore",
    "content": "*AppPackages*\n*BundleArtifacts*\n\n#OS junk files\n[Tt]humbs.db\n*.DS_Store\n\n#Visual Studio files\n*.[Oo]bj\n*.user\n*.aps\n*.pch\n*.vspscc\n*.vssscc\n*_i.c\n*_p.c\n*.ncb\n*.suo\n*.tlb\n*.tlh\n*.bak\n*.[Cc]ache\n*.ilk\n*.log\n*.lib\n*.sbr\n*.sdf\n*.opensdf\n*.opendb\n*.unsuccessfulbuild\nipch/\n[Oo]bj/\n[Bb]in\n[Dd]ebug*/\n[Rr]elease*/\nAnkh.NoLoad\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opendb\n*.opensdf\n*.sdf\n*.cachefile\n*.VC.db\n*.VC.VC.opendb\n\n#MonoDevelop\n*.pidb\n*.userprefs\n\n#Tooling\n_ReSharper*/\n*.resharper\n[Tt]est[Rr]esult*\n*.sass-cache\n\n#Project files\n[Bb]uild/\n\n#Subversion files\n.svn\n\n# Office Temp Files\n~$*\n\n# vim Temp Files\n*~\n\n#NuGet\npackages/\n*.nupkg\n\n#ncrunch\n*ncrunch*\n*crunch*.local.xml\n\n# visual studio database projects\n*.dbmdl\n\n#Test files\n*.testsettings\n\n#Other files\n*.DotSettings\n.vs/\n*project.lock.json\n\n#Files generated by the VS build\n**/Generated Files/**\n\n"
  },
  {
    "path": "native/windows/ExperimentalFeatures.props",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n\n  <!--\n    Application projects contain a file with this name to specify some important settings\n    that will apply globally for the app and *all* native modules the app consumes. These\n    values are set by the app developer. However you can also set them here to test building\n    the library solution without an app.\n  -->\n\n  <PropertyGroup Label=\"Microsoft.ReactNative Experimental Features\">\n    <!--\n      Enables default usage of Hermes.\n      \n      See https://microsoft.github.io/react-native-windows/docs/hermes\n    -->\n    <UseHermes>false</UseHermes>\n\n    <!--\n      Changes compilation to assume use of WinUI 3 instead of System XAML.\n      Requires creation of new project.\n\n      See https://microsoft.github.io/react-native-windows/docs/winui3\n    -->\n    <UseWinUI3>false</UseWinUI3>\n\n    <!--\n      Changes compilation to assume use of Microsoft.ReactNative NuGet packages\n      instead of building the framework from source.\n      Requires creation of new project.\n\n      See https://microsoft.github.io/react-native-windows/docs/nuget\n    -->\n    <UseExperimentalNuget>false</UseExperimentalNuget>\n\n    <ReactExperimentalFeaturesSet>true</ReactExperimentalFeaturesSet>\n  \n  </PropertyGroup>\n\n</Project>\n"
  },
  {
    "path": "native/windows/NuGet.Config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <config>\n    <add key=\"repositoryPath\" value=\"packages\" />\n  </config>\n  <packageSources>\n    <clear />\n    <add key=\"react-native\" value=\"https://pkgs.dev.azure.com/ms/react-native/_packaging/react-native-public/nuget/v3/index.json\" />\n    <add key=\"Nuget.org\" value=\"https://api.nuget.org/v3/index.json\" />\n  </packageSources>\n  <disabledPackageSources>\n    <clear />\n  </disabledPackageSources>  \n</configuration>\n"
  },
  {
    "path": "native/windows/WatermelonDB/DatabasePlatformWindows.cpp",
    "content": "#pragma once\n\n#include <functional>\n#include <iostream>\n#include <string>\n#include \"Database.h\"\n#include <AtlBase.h>\n#include <atlconv.h>\n#include <winrt/Windows.Storage.h>\n\nnamespace watermelondb {\nnamespace platform {\n\nvoid consoleLog(std::string message) {\n    std::string fullMessage = \"WatermelonDB (info): \" + message + \"\\n\";\n    OutputDebugStringA(fullMessage.c_str());\n}\n\nvoid consoleError(std::string message) {\n    std::string fullMessage = \"WatermelonDB (error): \" + message + \"\\n\";\n    OutputDebugStringA(fullMessage.c_str());\n}\n\nstd::once_flag sqliteInitialization;\n\nvoid initializeSqlite() {\n    std::call_once(sqliteInitialization, []() {\n        // Enable file URI syntax https://www.sqlite.org/uri.html (e.g. ?mode=memory&cache=shared)\n        if (sqlite3_config(SQLITE_CONFIG_URI, 1) != SQLITE_OK) {\n            consoleError(\"Failed to configure SQLite to support file URI syntax - shared cache will not work\");\n        }\n\n        // Need to set temporary folder in WinRT\n        // https://www.sqlite.org/c3ref/temp_directory.html\n        auto tempPath = winrt::Windows::Storage::ApplicationData::Current().TemporaryFolder().Path();\n        auto tempPathStr = winrt::to_string(tempPath);\n        sqlite3_temp_directory = sqlite3_mprintf(\"%s\", tempPathStr.c_str()); \n\n        if (sqlite3_initialize() != SQLITE_OK) {\n            consoleError(\"Failed to initialize sqlite - this probably means sqlite was already initialized\");\n        }\n    });\n}\n\nstd::string resolveDatabasePath(std::string path) {\n    auto const localAppDataPath = winrt::Windows::Storage::ApplicationData::Current().LocalFolder().Path();\n    auto fullPath = winrt::to_string(localAppDataPath) + \"\\\\\" + path;\n    return fullPath;\n}\n\nvoid deleteDatabaseFile(std::string path, bool warnIfDoesNotExist) {\n    // TODO: Unimplemented\n}\n\nvoid onMemoryAlert(std::function<void(void)> callback) {\n    // TODO: Unimplemented\n}\n\nstd::string_view getSyncJson(int id) {\n    return \"\";\n}\n\nvoid deleteSyncJson(int id) {\n    // TODO: Unimplemented\n}\n\nvoid onDestroy(std::function<void(void)> callback) {\n    // TODO: Unimplemented\n}\n\n} // namespace platform\n} // namespace watermelondb\n"
  },
  {
    "path": "native/windows/WatermelonDB/PropertySheet.props",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"Current\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ImportGroup Label=\"PropertySheets\" />\n  <PropertyGroup Label=\"UserMacros\" />\n  <!--\n    To customize common C++/WinRT project properties:\n    * right-click the project node\n    * expand the Common Properties item\n    * select the C++/WinRT property page\n\n    For more advanced scenarios, and complete documentation, please see:\n    https://github.com/Microsoft/xlang/tree/master/src/package/cppwinrt/nuget\n    -->\n  <PropertyGroup />\n  <ItemDefinitionGroup />\n</Project>"
  },
  {
    "path": "native/windows/WatermelonDB/ReactPackageProvider.cpp",
    "content": "#include \"pch.h\"\n#include \"ReactPackageProvider.h\"\n#if __has_include(\"ReactPackageProvider.g.cpp\")\n#include \"ReactPackageProvider.g.cpp\"\n#endif\n\n// NOTE: You must include the headers of your native modules here in\n// order for the AddAttributedModules call below to find them.\n#include \"WMDatabaseBridge.h\"\n\nusing namespace winrt::Microsoft::ReactNative;\n\nnamespace winrt::WatermelonDB::implementation\n{\n\nvoid ReactPackageProvider::CreatePackage(IReactPackageBuilder const &packageBuilder) noexcept\n{\n    AddAttributedModules(packageBuilder);\n}\n\n} // namespace winrt::WatermelonDB::implementation\n"
  },
  {
    "path": "native/windows/WatermelonDB/ReactPackageProvider.h",
    "content": "#pragma once\n#include \"ReactPackageProvider.g.h\"\n\nusing namespace winrt::Microsoft::ReactNative;\n\nnamespace winrt::WatermelonDB::implementation\n{\n    struct ReactPackageProvider : ReactPackageProviderT<ReactPackageProvider>\n    {\n        ReactPackageProvider() = default;\n\n        void CreatePackage(IReactPackageBuilder const &packageBuilder) noexcept;\n    };\n} // namespace winrt::WatermelonDB::implementation\n\nnamespace winrt::WatermelonDB::factory_implementation\n{\n\nstruct ReactPackageProvider : ReactPackageProviderT<ReactPackageProvider, implementation::ReactPackageProvider> {};\n\n} // namespace winrt::WatermelonDB::factory_implementation\n"
  },
  {
    "path": "native/windows/WatermelonDB/ReactPackageProvider.idl",
    "content": "namespace WatermelonDB\n{\n    [webhosthidden]\n    [default_interface]\n    runtimeclass ReactPackageProvider : Microsoft.ReactNative.IReactPackageProvider\n    {\n        ReactPackageProvider();\n    };\n}\n"
  },
  {
    "path": "native/windows/WatermelonDB/WMDatabaseBridge.cpp",
    "content": "#include \"pch.h\"\n#include \"WMDatabaseBridge.h\""
  },
  {
    "path": "native/windows/WatermelonDB/WMDatabaseBridge.h",
    "content": "#pragma once\n\n#include \"pch.h\"\n\n#include <functional>\n\n#include \"NativeModules.h\"\n#include <JSI/JsiApiContext.h>\n\n#include \"Database.h\"\n\nusing namespace winrt::Microsoft::ReactNative;\nusing namespace watermelondb;\n\nnamespace winrt::WatermelonDB\n{\n  REACT_MODULE(WMDatabaseBridge, L\"WMDatabaseBridge\");\n  struct WMDatabaseBridge\n  {\n    const std::string Name = \"WMDatabaseBridge\";\n\n    ReactContext m_reactContext;\n    REACT_INIT(Initialize)\n    void Initialize(ReactContext const &reactContext) noexcept\n    {\n      m_reactContext = reactContext;\n    }\n\n    REACT_SYNC_METHOD(initializeJSI);\n    bool initializeJSI() noexcept\n    {\n        assert(m_reactContext, \"Expected ReactContext when initializing JSI\");\n        auto runtime = TryGetOrCreateContextRuntime(m_reactContext);\n        assert(runtime, \"Could not get jsi::Runtime from ReactContext\");\n        Database::install(runtime);\n        return true;\n    }\n  };\n}"
  },
  {
    "path": "native/windows/WatermelonDB/WatermelonDB.def",
    "content": "﻿EXPORTS\nDllCanUnloadNow = WINRT_CanUnloadNow                    PRIVATE\nDllGetActivationFactory = WINRT_GetActivationFactory    PRIVATE\n"
  },
  {
    "path": "native/windows/WatermelonDB/WatermelonDB.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- This project was created with react-native-windows 0.71.28 -->\n<Project ToolsVersion=\"Current\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(SolutionDir)\\ExperimentalFeatures.props\" Condition=\"Exists('$(SolutionDir)\\ExperimentalFeatures.props')\" />\n  <PropertyGroup Label=\"Globals\">\n    <CppWinRTOptimized>true</CppWinRTOptimized>\n    <CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>\n    <MinimalCoreWin>true</MinimalCoreWin>\n    <ProjectGuid>{1e63901f-b1c9-4569-beb3-401f13d77b02}</ProjectGuid>\n    <ProjectName>WatermelonDB</ProjectName>\n    <RootNamespace>WatermelonDB</RootNamespace>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <MinimumVisualStudioVersion>17.0</MinimumVisualStudioVersion>\n    <AppContainerApplication>true</AppContainerApplication>\n    <ApplicationType>Windows Store</ApplicationType>\n    <ApplicationTypeRevision>10.0</ApplicationTypeRevision>\n  </PropertyGroup>\n  <PropertyGroup Label=\"ReactNativeWindowsProps\">\n    <!-- TODO: This should be ../ from current state -->\n    <ReactNativeWindowsDir Condition=\"'$(ReactNativeWindowsDir)' == ''\">$([MSBuild]::GetDirectoryNameOfFileAbove($(SolutionDir), 'node_modules\\react-native-windows\\package.json'))\\node_modules\\react-native-windows\\</ReactNativeWindowsDir>\n    <!-- TODO: Figure out how to override them by consumers? -->\n    <WatermelonJsiSharedDir Condition=\"'$(WatermelonJsiSharedDir)' == ''\">..\\..\\shared\\</WatermelonJsiSharedDir>\n    <WatermelonAtNozbeNodeModulesDir Condition=\"'$(WatermelonAtNozbeNodeModulesDir)' == ''\">$(ReactNativeWindowsDir)..\\@nozbe\\</WatermelonAtNozbeNodeModulesDir>\n    <WatermelonSqliteVersion Condition=\"'$(WatermelonSqliteVersion)' == ''\">sqlite-amalgamation-3460000</WatermelonSqliteVersion>\n    <WatermelonSqliteDir Condition=\"'$(WatermelonSqliteDir)' == ''\">$(WatermelonAtNozbeNodeModulesDir)sqlite\\$(WatermelonSqliteVersion)\\</WatermelonSqliteDir>\n    <WatermelonSimdjsonDir Condition=\"'$(WatermelonSimdjsonDir)' == ''\">$(WatermelonAtNozbeNodeModulesDir)simdjson\\src\\</WatermelonSimdjsonDir>\n  </PropertyGroup>\n  <Import Project=\"$(ReactNativeWindowsDir)\\PropertySheets\\External\\Microsoft.ReactNative.WindowsSdk.Default.props\" Condition=\"Exists('$(ReactNativeWindowsDir)\\PropertySheets\\External\\Microsoft.ReactNative.WindowsSdk.Default.props')\" />\n  <PropertyGroup Label=\"Fallback Windows SDK Versions\">\n    <WindowsTargetPlatformVersion Condition=\" '$(WindowsTargetPlatformVersion)' == '' \">10.0.19041.0</WindowsTargetPlatformVersion>\n    <WindowsTargetPlatformMinVersion Condition=\" '$(WindowsTargetPlatformMinVersion)' == '' \">10.0.16299.0</WindowsTargetPlatformMinVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|ARM64\">\n      <Configuration>Debug</Configuration>\n      <Platform>ARM64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|ARM64\">\n      <Configuration>Release</Configuration>\n      <Platform>ARM64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <CharacterSet>Unicode</CharacterSet>\n    <GenerateManifest>false</GenerateManifest>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)'=='Debug'\" Label=\"Configuration\">\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <LinkIncremental>true</LinkIncremental>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)'=='Release'\" Label=\"Configuration\">\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <LinkIncremental>false</LinkIncremental>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\">\n    <Import Project=\"PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"ReactNativeWindowsPropertySheets\">\n    <Import Project=\"$(ReactNativeWindowsDir)\\PropertySheets\\external\\Microsoft.ReactNative.Uwp.CppLib.props\" Condition=\"Exists('$(ReactNativeWindowsDir)\\PropertySheets\\External\\Microsoft.ReactNative.Uwp.CppLib.props')\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <ItemDefinitionGroup>\n    <ClCompile>\n      <!-- <PrecompiledHeader>Use</PrecompiledHeader> -->\n      <PrecompiledHeader>NotUsing</PrecompiledHeader>\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\n      <PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>\n      <WarningLevel>Level4</WarningLevel>\n      <AdditionalOptions>%(AdditionalOptions) /bigobj</AdditionalOptions>\n      <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>\n      <PreprocessorDefinitions>SQLITE_OS_WINRT;_WINRT_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>\n      <AdditionalIncludeDirectories>$(WatermelonJsiSharedDir);$(WatermelonSimdjsonDir);$(WatermelonSqliteDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Midl>\n      <!-- This allows applications targetting older Windows SDKs (e.g. RNW 0.65 apps) to consume the library generated WinMD -->\n      <AdditionalOptions>%(AdditionalOptions) /noattributename</AdditionalOptions>\n    </Midl>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateWindowsMetadata>true</GenerateWindowsMetadata>\n      <ModuleDefinitionFile>WatermelonDB.def</ModuleDefinitionFile>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)'=='Debug'\">\n    <ClCompile>\n      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n    </ClCompile>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)'=='Release'\">\n    <ClCompile>\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n    </ClCompile>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClInclude Include=\"ReactPackageProvider.h\">\n      <DependentUpon>ReactPackageProvider.idl</DependentUpon>\n    </ClInclude>\n    <ClInclude Include=\"$(WatermelonJsiSharedDir)Database.h\" />\n    <ClInclude Include=\"$(WatermelonJsiSharedDir)DatabasePlatform.h\" />\n    <ClInclude Include=\"$(WatermelonJsiSharedDir)JSIHelpers.h\" />\n    <ClInclude Include=\"$(WatermelonJsiSharedDir)Sqlite.h\" />\n    <ClInclude Include=\"WMDatabaseBridge.h\" />\n    <ClInclude Include=\"pch.h\" />\n    <ClInclude Include=\"$(WatermelonSqliteDir)sqlite3.h\" />\n    <ClInclude Include=\"$(WatermelonSimdjsonDir)simdjson.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"pch.cpp\">\n      <PrecompiledHeader>Create</PrecompiledHeader>\n    </ClCompile>\n    <ClCompile Include=\"ReactPackageProvider.cpp\">\n      <DependentUpon>ReactPackageProvider.idl</DependentUpon>\n    </ClCompile>\n    <ClCompile Include=\"$(WatermelonJsiSharedDir)Database-batch.cpp\" />\n    <ClCompile Include=\"$(WatermelonJsiSharedDir)Database-jsi.cpp\" />\n    <ClCompile Include=\"$(WatermelonJsiSharedDir)Database-query.cpp\" />\n    <ClCompile Include=\"$(WatermelonJsiSharedDir)Database-sqlite.cpp\" />\n    <ClCompile Include=\"$(WatermelonJsiSharedDir)Database-turboSync.cpp\" />\n    <ClCompile Include=\"$(WatermelonJsiSharedDir)Database.cpp\" />\n    <ClCompile Include=\"$(WatermelonJsiSharedDir)DatabaseBridge.cpp\" />\n    <ClCompile Include=\"$(WatermelonJsiSharedDir)Sqlite.cpp\" />\n    <ClCompile Include=\"DatabasePlatformWindows.cpp\" />\n    <ClCompile Include=\"WMDatabaseBridge.cpp\" />\n    <ClCompile Include=\"$(GeneratedFilesDir)module.g.cpp\" />\n    <ClCompile Include=\"$(WatermelonSqliteDir)sqlite3.c\" />\n    <ClCompile Include=\"$(WatermelonSimdjsonDir)simdjson.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Midl Include=\"ReactPackageProvider.idl\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"PropertySheet.props\" />\n  </ItemGroup>\n  <ItemGroup>\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ReactNativeWindowsTargets\">\n    <Import Project=\"$(ReactNativeWindowsDir)\\PropertySheets\\External\\Microsoft.ReactNative.Uwp.CppLib.targets\" Condition=\"Exists('$(ReactNativeWindowsDir)\\PropertySheets\\External\\Microsoft.ReactNative.Uwp.CppLib.targets')\" />\n  </ImportGroup>\n  <Target Name=\"EnsureReactNativeWindowsTargets\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>This project references targets in your node_modules\\react-native-windows folder that are missing. The missing file is {0}.</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('$(ReactNativeWindowsDir)\\PropertySheets\\External\\Microsoft.ReactNative.Uwp.CppLib.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '$(ReactNativeWindowsDir)\\PropertySheets\\External\\Microsoft.ReactNative.Uwp.CppLib.props'))\" />\n    <Error Condition=\"!Exists('$(ReactNativeWindowsDir)\\PropertySheets\\External\\Microsoft.ReactNative.Uwp.CppLib.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '$(ReactNativeWindowsDir)\\PropertySheets\\External\\Microsoft.ReactNative.Uwp.CppLib.targets'))\" />\n  </Target>\n</Project>"
  },
  {
    "path": "native/windows/WatermelonDB/WatermelonDB.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"Current\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Midl Include=\"ReactPackageProvider.idl\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"pch.cpp\" />\n    <ClCompile Include=\"$(GeneratedFilesDir)module.g.cpp\" />\n    <ClCompile Include=\"ReactPackageProvider.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"pch.h\" />\n    <ClInclude Include=\"ReactPackageProvider.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"PropertySheet.props\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "native/windows/WatermelonDB/pch.cpp",
    "content": "﻿#include \"pch.h\"\n"
  },
  {
    "path": "native/windows/WatermelonDB/pch.h",
    "content": "#pragma once\n\n#define NOMINMAX\n\n#include <hstring.h>\n#include <restrictederrorinfo.h>\n#include <unknwn.h>\n#include <windows.h>\n#include <CppWinRTIncludes.h>\n#if __has_include(<VersionMacros.h>)\n  #include <VersionMacros.h>\n#endif\n\n#include <winrt/Microsoft.ReactNative.h>\n\n#include <winrt/Microsoft.UI.Xaml.Automation.Peers.h>\n#include <winrt/Microsoft.UI.Xaml.Controls.Primitives.h>\n#include <winrt/Microsoft.UI.Xaml.Controls.h>\n#include <winrt/Microsoft.UI.Xaml.Media.h>\n#include <winrt/Microsoft.UI.Xaml.XamlTypeInfo.h>\nusing namespace winrt::Windows::Foundation;\n"
  },
  {
    "path": "native/windows/WatermelonDB.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.3.32929.385\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"WatermelonDB\", \"WatermelonDB\\WatermelonDB.vcxproj\", \"{1E63901F-B1C9-4569-BEB3-401F13D77B02}\"\n\tProjectSection(ProjectDependencies) = postProject\n\t\t{F7D32BD0-2749-483E-9A0D-1635EF7E3136} = {F7D32BD0-2749-483E-9A0D-1635EF7E3136}\n\tEndProjectSection\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Folly\", \"..\\..\\node_modules\\react-native-windows\\Folly\\Folly.vcxproj\", \"{A990658C-CE31-4BCC-976F-0FC6B1AF693D}\"\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"fmt\", \"..\\..\\node_modules\\react-native-windows\\fmt\\fmt.vcxproj\", \"{14B93DC8-FD93-4A6D-81CB-8BC96644501C}\"\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"ReactCommon\", \"..\\..\\node_modules\\react-native-windows\\ReactCommon\\ReactCommon.vcxproj\", \"{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}\"\n\tProjectSection(ProjectDependencies) = postProject\n\t\t{A990658C-CE31-4BCC-976F-0FC6B1AF693D} = {A990658C-CE31-4BCC-976F-0FC6B1AF693D}\n\tEndProjectSection\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Chakra\", \"..\\..\\node_modules\\react-native-windows\\Chakra\\Chakra.vcxitems\", \"{C38970C0-5FBF-4D69-90D8-CBAC225AE895}\"\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Microsoft.ReactNative\", \"..\\..\\node_modules\\react-native-windows\\Microsoft.ReactNative\\Microsoft.ReactNative.vcxproj\", \"{F7D32BD0-2749-483E-9A0D-1635EF7E3136}\"\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Microsoft.ReactNative.Cxx\", \"..\\..\\node_modules\\react-native-windows\\Microsoft.ReactNative.Cxx\\Microsoft.ReactNative.Cxx.vcxitems\", \"{DA8B35B3-DA00-4B02-BDE6-6A397B3FD46B}\"\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Common\", \"..\\..\\node_modules\\react-native-windows\\Common\\Common.vcxproj\", \"{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"ReactNative\", \"ReactNative\", \"{5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}\"\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Microsoft.ReactNative.Shared\", \"..\\..\\node_modules\\react-native-windows\\Shared\\Shared.vcxitems\", \"{2049DBE9-8D13-42C9-AE4B-413AE38FFFD0}\"\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Mso\", \"..\\..\\node_modules\\react-native-windows\\Mso\\Mso.vcxitems\", \"{84E05BFA-CBAF-4F0D-BFB6-4CE85742A57E}\"\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Include\", \"..\\..\\node_modules\\react-native-windows\\include\\Include.vcxitems\", \"{EF074BA1-2D54-4D49-A28E-5E040B47CD2E}\"\nEndProject\nGlobal\n\tGlobalSection(SharedMSBuildProjectFiles) = preSolution\n\t\t..\\..\\node_modules\\react-native-windows\\Shared\\Shared.vcxitems*{2049dbe9-8d13-42c9-ae4b-413ae38fffd0}*SharedItemsImports = 9\n\t\t..\\..\\node_modules\\react-native-windows\\Mso\\Mso.vcxitems*{84e05bfa-cbaf-4f0d-bfb6-4ce85742a57e}*SharedItemsImports = 9\n\t\t..\\..\\node_modules\\react-native-windows\\Chakra\\Chakra.vcxitems*{c38970c0-5fbf-4d69-90d8-cbac225ae895}*SharedItemsImports = 9\n\t\t..\\..\\node_modules\\react-native-windows\\Microsoft.ReactNative.Cxx\\Microsoft.ReactNative.Cxx.vcxitems*{da8b35b3-da00-4b02-bde6-6a397b3fd46b}*SharedItemsImports = 9\n\t\t..\\..\\node_modules\\react-native-windows\\include\\Include.vcxitems*{ef074ba1-2d54-4d49-a28e-5e040b47cd2e}*SharedItemsImports = 9\n\t\t..\\..\\node_modules\\react-native-windows\\Chakra\\Chakra.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4\n\t\t..\\..\\node_modules\\react-native-windows\\Microsoft.ReactNative.Cxx\\Microsoft.ReactNative.Cxx.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4\n\t\t..\\..\\node_modules\\react-native-windows\\Mso\\Mso.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4\n\t\t..\\..\\node_modules\\react-native-windows\\Shared\\Shared.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4\n\tEndGlobalSection\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tDebug|ARM64 = Debug|ARM64\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\t\tRelease|ARM64 = Release|ARM64\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Debug|ARM64.ActiveCfg = Debug|ARM64\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Debug|ARM64.Build.0 = Debug|ARM64\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Debug|ARM64.Deploy.0 = Debug|ARM64\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Debug|x64.Build.0 = Debug|x64\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Debug|x64.Deploy.0 = Debug|x64\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Debug|x86.ActiveCfg = Debug|Win32\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Debug|x86.Build.0 = Debug|Win32\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Debug|x86.Deploy.0 = Debug|Win32\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Release|ARM64.ActiveCfg = Release|ARM64\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Release|ARM64.Build.0 = Release|ARM64\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Release|ARM64.Deploy.0 = Release|ARM64\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Release|x64.ActiveCfg = Release|x64\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Release|x64.Build.0 = Release|x64\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Release|x64.Deploy.0 = Release|x64\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Release|x86.ActiveCfg = Release|Win32\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Release|x86.Build.0 = Release|Win32\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Release|x86.Deploy.0 = Release|Win32\n\t\t{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM64.ActiveCfg = Debug|ARM64\n\t\t{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM64.Build.0 = Debug|ARM64\n\t\t{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x64.Build.0 = Debug|x64\n\t\t{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x86.ActiveCfg = Debug|Win32\n\t\t{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x86.Build.0 = Debug|Win32\n\t\t{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|ARM64.ActiveCfg = Release|ARM64\n\t\t{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|ARM64.Build.0 = Release|ARM64\n\t\t{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x64.ActiveCfg = Release|x64\n\t\t{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x64.Build.0 = Release|x64\n\t\t{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x86.ActiveCfg = Release|Win32\n\t\t{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x86.Build.0 = Release|Win32\n\t\t{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM64.ActiveCfg = Debug|ARM64\n\t\t{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM64.Build.0 = Debug|ARM64\n\t\t{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x64.Build.0 = Debug|x64\n\t\t{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x86.ActiveCfg = Debug|Win32\n\t\t{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x86.Build.0 = Debug|Win32\n\t\t{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|ARM64.ActiveCfg = Release|ARM64\n\t\t{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|ARM64.Build.0 = Release|ARM64\n\t\t{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x64.ActiveCfg = Release|x64\n\t\t{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x64.Build.0 = Release|x64\n\t\t{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x86.ActiveCfg = Release|Win32\n\t\t{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x86.Build.0 = Release|Win32\n\t\t{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|ARM64.ActiveCfg = Debug|ARM64\n\t\t{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|ARM64.Build.0 = Debug|ARM64\n\t\t{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x64.Build.0 = Debug|x64\n\t\t{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x86.ActiveCfg = Debug|Win32\n\t\t{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x86.Build.0 = Debug|Win32\n\t\t{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|ARM64.ActiveCfg = Release|ARM64\n\t\t{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|ARM64.Build.0 = Release|ARM64\n\t\t{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x64.ActiveCfg = Release|x64\n\t\t{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x64.Build.0 = Release|x64\n\t\t{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x86.ActiveCfg = Release|Win32\n\t\t{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x86.Build.0 = Release|Win32\n\t\t{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|ARM64.ActiveCfg = Debug|ARM64\n\t\t{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|ARM64.Build.0 = Debug|ARM64\n\t\t{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x64.Build.0 = Debug|x64\n\t\t{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x86.ActiveCfg = Debug|Win32\n\t\t{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x86.Build.0 = Debug|Win32\n\t\t{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|ARM64.ActiveCfg = Release|ARM64\n\t\t{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|ARM64.Build.0 = Release|ARM64\n\t\t{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x64.ActiveCfg = Release|x64\n\t\t{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x64.Build.0 = Release|x64\n\t\t{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x86.ActiveCfg = Release|Win32\n\t\t{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x86.Build.0 = Release|Win32\n\t\t{14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Debug|ARM64.ActiveCfg = Debug|ARM64\n\t\t{14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Debug|ARM64.Build.0 = Debug|ARM64\n\t\t{14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Debug|x64.Build.0 = Debug|x64\n\t\t{14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Debug|x86.ActiveCfg = Debug|Win32\n\t\t{14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Debug|x86.Build.0 = Debug|Win32\n\t\t{14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Debug|x86.Deploy.0 = Debug|Win32\n\t\t{14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Release|ARM64.ActiveCfg = Release|ARM64\n\t\t{14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Release|ARM64.Build.0 = Release|ARM64\n\t\t{14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Release|x64.ActiveCfg = Release|x64\n\t\t{14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Release|x64.Build.0 = Release|x64\n\t\t{14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Release|x86.ActiveCfg = Release|Win32\n\t\t{14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Release|x86.Build.0 = Release|Win32\n\t\t{14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Release|x86.Deploy.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{A990658C-CE31-4BCC-976F-0FC6B1AF693D} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}\n\t\t{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}\n\t\t{C38970C0-5FBF-4D69-90D8-CBAC225AE895} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}\n\t\t{F7D32BD0-2749-483E-9A0D-1635EF7E3136} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}\n\t\t{DA8B35B3-DA00-4B02-BDE6-6A397B3FD46B} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}\n\t\t{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}\n\t\t{2049DBE9-8D13-42C9-AE4B-413AE38FFFD0} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}\n\t\t{84E05BFA-CBAF-4F0D-BFB6-4CE85742A57E} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}\n\t\t{EF074BA1-2D54-4D49-A28E-5E040B47CD2E} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}\n\t\t{14B93DC8-FD93-4A6D-81CB-8BC96644501C} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {D43FAD39-F619-437D-BB40-04A3982ACB6A}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "native/windowsE2E/.gitignore",
    "content": "/.vscode\n/node_modules\n/windows/RNTesterApp/Generated Files/\n/build\n/errorShots\n/reports\n/dist\n/windows/RNTesterApp/Bundle/\nmsbuild.binlog\n"
  },
  {
    "path": "native/windowsE2E/README.md",
    "content": "This is a very hacky way of getting output from Windows WatermelonTester into CI, based on RNW's e2e-test-app project:\n\nhttps://github.com/microsoft/react-native-windows/tree/main/packages/e2e-test-app\nhttps://github.com/microsoft/react-native-windows/blob/main/docs/e2e-testing.md\nhttps://github.com/microsoft/react-native-windows/tree/main/packages/@react-native-windows/automation\n\nBut it's not the right way to do this. Ideally, we'd run WatermelonTester itself in native \"test\" mode, just like iOS or Android.\nI also don't know how to get hold of Windows process stdout/console logs to dump it into CI console, so if it breaks on CI, it\nmight be difficult to debug."
  },
  {
    "path": "native/windowsE2E/babel.config.js",
    "content": "module.exports = {\n  presets: [\n    'module:metro-react-native-babel-preset',\n  ],\n  plugins: [\n    \"babel-plugin-transform-flow-enums\",\n    \"@react-native/babel-plugin-codegen\",\n  ]\n};"
  },
  {
    "path": "native/windowsE2E/custom-transformer.js",
    "content": "/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * @format\n * @ts-check\n */\n\n'use strict';\n\nconst generate = require('@babel/generator').default;\nconst transformer = require('metro-react-native-babel-transformer');\nmodule.exports = {\n  process(src /*: string */, file /*: string */) /*: {code: string, ...} */ {\n    const {ast} = transformer.transform({\n      filename: file,\n      options: {\n        inlineRequires: true,\n      },\n      src,\n    });\n\n    return generate(ast, {}, src);\n  },\n};\n"
  },
  {
    "path": "native/windowsE2E/jest.config.js",
    "content": "const assetTransform = 'react-native-windows/jest/assetFileTransformer.js';\nconst reactNativeTransform = './custom-transformer.js';\nconst defaultTransform = [\n  'babel-jest',\n  require('@rnw-scripts/babel-node-config'),\n];\n\nmodule.exports = {\n  preset: '@rnx-kit/jest-preset',\n  roots: ['<rootDir>/test/'],\n  testEnvironment: '@react-native-windows/automation',\n  testRegex: '.*\\\\.test\\\\.ts$',\n  testTimeout: 70000,\n  transform: {\n    '^.+\\\\.(bmp|gif|jpg|jpeg|mp4|png|psd|svg|webp)$': assetTransform,\n    'node_modules\\\\\\\\@?react-native\\\\\\\\.*': reactNativeTransform,\n    '@react-native-windows\\\\\\\\tester\\\\\\\\.*': reactNativeTransform,\n    'vnext\\\\\\\\.*': reactNativeTransform,\n    '^.+\\\\.[jt]sx?$': defaultTransform,\n  },\n  // snapshotResolver: 'react-native-windows/jest-snapshot-resolver.js',\n  transformIgnorePatterns: ['jest-runner'],\n  maxWorkers: 1,\n  verbose: true,\n  // setupFilesAfterEnv: [\n  //   'react-native-windows/jest/setup',\n  //   './jest.setup.js',\n  // ],\n\n  testEnvironmentOptions: {\n    app: 'WatermelonTester',\n    webdriverOptions: {\n      port: 4724,\n      // Level of logging verbosity: trace | debug | info | warn | error\n      logLevel: 'trace',\n\n      // Default timeout for all waitFor* commands.\n      waitforTimeout: 60000,\n\n      // Default timeout in milliseconds for request\n      connectionRetryTimeout: 10000,\n      connectionRetryCount: 10,\n    },\n  },\n};\n"
  },
  {
    "path": "native/windowsE2E/package.json",
    "content": "{\n  \"name\": \"WatermelonTesterWindowsE2E\",\n  \"version\": \"0.0.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"e2etest\": \"jest\"\n  },\n  \"dependencies\": {\n    \"@react-native-windows/automation-channel\": \"^0.12.28\",\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.71.3\",\n    \"react-native-windows\": \"0.71.28\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.20.0\",\n    \"@babel/generator\": \"^7.20.0\",\n    \"@babel/preset-env\": \"^7.8.4\",\n    \"@babel/preset-typescript\": \"^7.8.3\",\n    \"@babel/runtime\": \"^7.8.4\",\n    \"@react-native-windows/automation\": \"^0.3.110\",\n    \"@react-native-windows/automation-commands\": \"^0.1.130\",\n    \"@react-native/babel-plugin-codegen\": \"0.73.0\",\n    \"@rnw-scripts/babel-node-config\": \"2.3.1\",\n    \"@rnw-scripts/eslint-config\": \"1.2.2\",\n    \"@rnw-scripts/ts-config\": \"2.0.5\",\n    \"@rnx-kit/jest-preset\": \"^0.1.0\",\n    \"@types/jest\": \"^29.2.2\",\n    \"@types/node\": \"^18.0.0\",\n    \"@types/react\": \"^18.0.18\",\n    \"babel-jest\": \"^29.3.0\",\n    \"jest\": \"^29.2.1\",\n    \"metro-react-native-babel-transformer\": \"0.76.2\",\n    \"typescript\": \"^4.9.5\"\n  },\n  \"engines\": {\n    \"node\": \">= 18\"\n  }\n}\n"
  },
  {
    "path": "native/windowsE2E/test/watermelon.test.ts",
    "content": "import {app} from '@react-native-windows/automation';\n\ndescribe('WatermelonDB', () => {\n  test('Check integration test status', async () => {\n    const view = await app.findElementByTestID('WatermelonTesterStatus');\n\n    await app.waitUntil(async () => {\n      const statusText = await view.getText();\n      console.log(statusText)\n      return statusText.includes('Done');\n    }) \n  });\n})"
  },
  {
    "path": "native/windowsE2E/tsconfig.json",
    "content": "{\n  \"extends\": \"@rnw-scripts/ts-config\",\n  \"compilerOptions\": {\n    \"types\": [\"jest\"]\n  },\n  \"include\": [\n    \"app\",\n    \"test\",\n  ],\n  \"exclude\": [\n    \"node_modules\"\n  ]\n}\n"
  },
  {
    "path": "native/windowsTest/.gitignore",
    "content": "*AppPackages*\n*BundleArtifacts*\n\n#OS junk files\n[Tt]humbs.db\n*.DS_Store\n\n#Visual Studio files\n*.[Oo]bj\n*.user\n*.aps\n*.pch\n*.vspscc\n*.vssscc\n*_i.c\n*_p.c\n*.ncb\n*.suo\n*.tlb\n*.tlh\n*.bak\n*.[Cc]ache\n*.ilk\n*.log\n*.lib\n*.sbr\n*.sdf\n*.opensdf\n*.opendb\n*.unsuccessfulbuild\nipch/\n[Oo]bj/\n[Bb]in\n[Dd]ebug*/\n[Rr]elease*/\nAnkh.NoLoad\nenc_temp_folder\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opendb\n*.opensdf\n*.sdf\n*.cachefile\n*.VC.db\n*.VC.VC.opendb\n\n#MonoDevelop\n*.pidb\n*.userprefs\n\n#Tooling\n_ReSharper*/\n*.resharper\n[Tt]est[Rr]esult*\n*.sass-cache\n\n#Project files\n[Bb]uild/\n\n#Subversion files\n.svn\n\n# Office Temp Files\n~$*\n\n# vim Temp Files\n*~\n\n#NuGet\npackages/\n*.nupkg\n\n#ncrunch\n*ncrunch*\n*crunch*.local.xml\n\n# visual studio database projects\n*.dbmdl\n\n#Test files\n*.testsettings\n\n#Other files\n*.DotSettings\n.vs/\n*project.lock.json\n\n#Files generated by the VS build\n**/Generated Files/**\n\n"
  },
  {
    "path": "native/windowsTest/ExperimentalFeatures.props",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n\n  <!--\n    This file contains some important settings that will apply globally for\n    your app and *all* native modules your app consumes. These values were\n    set when you created the app project, and in some cases cannot be\n    simply changed here without recreating a new project.\n  -->\n\n  <PropertyGroup Label=\"Microsoft.ReactNative Experimental Features\">\n    <!--\n      Enables default usage of Hermes.\n      \n      See https://microsoft.github.io/react-native-windows/docs/hermes\n    -->\n    <UseHermes>true</UseHermes>\n\n    <!--\n      Changes compilation to assume use of WinUI 3 instead of System XAML.\n      Requires creation of new project.\n\n      See https://microsoft.github.io/react-native-windows/docs/winui3\n    -->\n    <UseWinUI3>false</UseWinUI3>\n\n    <!--\n      Changes compilation to assume use of Microsoft.ReactNative NuGet packages\n      instead of building the framework from source.\n      Requires creation of new project.\n\n      See https://microsoft.github.io/react-native-windows/docs/nuget\n    -->\n    <UseExperimentalNuget>false</UseExperimentalNuget>\n\n    <ReactExperimentalFeaturesSet>true</ReactExperimentalFeaturesSet>\n  \n  </PropertyGroup>\n\n</Project>\n"
  },
  {
    "path": "native/windowsTest/NuGet.Config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <config>\n    <add key=\"repositoryPath\" value=\"packages\" />\n  </config>\n  <packageSources>\n    <clear />\n    <add key=\"Nuget.org\" value=\"https://api.nuget.org/v3/index.json\" />\n  </packageSources>\n  <disabledPackageSources>\n    <clear />\n  </disabledPackageSources>  \n</configuration>\n"
  },
  {
    "path": "native/windowsTest/WatermelonTester/.gitignore",
    "content": "/Bundle\n"
  },
  {
    "path": "native/windowsTest/WatermelonTester/App.cpp",
    "content": "#include \"pch.h\"\n\n#include \"App.h\"\n\n#include \"AutolinkedNativeModules.g.h\"\n#include \"ReactPackageProvider.h\"\n\nusing namespace winrt;\nusing namespace xaml;\nusing namespace xaml::Controls;\nusing namespace xaml::Navigation;\n\nusing namespace Windows::ApplicationModel;\nnamespace winrt::WatermelonTester::implementation\n{\n/// <summary>\n/// Initializes the singleton application object.  This is the first line of\n/// authored code executed, and as such is the logical equivalent of main() or\n/// WinMain().\n/// </summary>\nApp::App() noexcept\n{\n#if BUNDLE\n    JavaScriptBundleFile(L\"src/index.integrationTests.native\");\n    InstanceSettings().UseWebDebugger(false);\n    InstanceSettings().UseFastRefresh(false);\n#else\n    JavaScriptBundleFile(L\"src/index.integrationTests.native\");\n    // NOTE: Can't run JSI with web debugger on\n    // FIXME: Chakra breaks on Watermelon (without web debugger)\n    // InstanceSettings().UseWebDebugger(true);\n    InstanceSettings().UseFastRefresh(true);\n#endif\n\n#if _DEBUG\n    InstanceSettings().UseDeveloperSupport(true);\n#else\n    InstanceSettings().UseDeveloperSupport(false);\n#endif\n\n    RegisterAutolinkedNativeModulePackages(PackageProviders()); // Includes any autolinked modules\n    PackageProviders().Append(winrt::WatermelonDB::ReactPackageProvider());\n    PackageProviders().Append(make<ReactPackageProvider>()); // Includes all modules in this project\n\n    InitializeComponent();\n}\n\n/// <summary>\n/// Invoked when the application is launched normally by the end user.  Other entry points\n/// will be used such as when the application is launched to open a specific file.\n/// </summary>\n/// <param name=\"e\">Details about the launch request and process.</param>\nvoid App::OnLaunched(activation::LaunchActivatedEventArgs const& e)\n{\n    super::OnLaunched(e);\n\n    Frame rootFrame = Window::Current().Content().as<Frame>();\n    rootFrame.Navigate(xaml_typename<MainPage>(), box_value(e.Arguments()));\n}\n\n/// <summary>\n/// Invoked when the application is activated by some means other than normal launching.\n/// </summary>\nvoid App::OnActivated(Activation::IActivatedEventArgs const &e) {\n  auto preActivationContent = Window::Current().Content();\n  super::OnActivated(e);\n  if (!preActivationContent && Window::Current()) {\n    Frame rootFrame = Window::Current().Content().as<Frame>();\n    rootFrame.Navigate(xaml_typename<MainPage>(), nullptr);\n  }\n}\n\n/// <summary>\n/// Invoked when application execution is being suspended.  Application state is saved\n/// without knowing whether the application will be terminated or resumed with the contents\n/// of memory still intact.\n/// </summary>\n/// <param name=\"sender\">The source of the suspend request.</param>\n/// <param name=\"e\">Details about the suspend request.</param>\nvoid App::OnSuspending([[maybe_unused]] IInspectable const& sender, [[maybe_unused]] SuspendingEventArgs const& e)\n{\n    // Save application state and stop any background activity\n}\n\n/// <summary>\n/// Invoked when Navigation to a certain page fails\n/// </summary>\n/// <param name=\"sender\">The Frame which failed navigation</param>\n/// <param name=\"e\">Details about the navigation failure</param>\nvoid App::OnNavigationFailed(IInspectable const&, NavigationFailedEventArgs const& e)\n{\n    throw hresult_error(E_FAIL, hstring(L\"Failed to load Page \") + e.SourcePageType().Name);\n}\n\n} // namespace winrt::WatermelonTester::implementation\n"
  },
  {
    "path": "native/windowsTest/WatermelonTester/App.h",
    "content": "#pragma once\n\n#include \"App.xaml.g.h\"\n\n#include <CppWinRTIncludes.h>\n\nnamespace activation = winrt::Windows::ApplicationModel::Activation;\n\nnamespace winrt::WatermelonTester::implementation\n{\n    struct App : AppT<App>\n    {\n        App() noexcept;\n        void OnLaunched(activation::LaunchActivatedEventArgs const&);\n        void OnActivated(Windows::ApplicationModel::Activation::IActivatedEventArgs const &e);\n        void OnSuspending(IInspectable const&, Windows::ApplicationModel::SuspendingEventArgs const&);\n        void OnNavigationFailed(IInspectable const&, xaml::Navigation::NavigationFailedEventArgs const&);\n      private:\n        using super = AppT<App>;\n    };\n} // namespace winrt::WatermelonTester::implementation\n"
  },
  {
    "path": "native/windowsTest/WatermelonTester/App.idl",
    "content": "namespace WatermelonTester\n{\n}\n"
  },
  {
    "path": "native/windowsTest/WatermelonTester/App.xaml",
    "content": "﻿<react:ReactApplication\n    x:Class=\"WatermelonTester.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:WatermelonTester\"\n    xmlns:react=\"using:Microsoft.ReactNative\">\n    <Application.Resources>\n        <XamlControlsResources xmlns=\"using:Microsoft.UI.Xaml.Controls\" />\n    </Application.Resources>\n</react:ReactApplication>\n"
  },
  {
    "path": "native/windowsTest/WatermelonTester/AutolinkedNativeModules.g.cpp",
    "content": "// AutolinkedNativeModules.g.cpp contents generated by \"react-native autolink-windows\"\n// clang-format off\n#include \"pch.h\"\n#include \"AutolinkedNativeModules.g.h\"\n\nnamespace winrt::Microsoft::ReactNative\n{\n\nvoid RegisterAutolinkedNativeModulePackages(winrt::Windows::Foundation::Collections::IVector<winrt::Microsoft::ReactNative::IReactPackageProvider> const& packageProviders)\n{ \n    UNREFERENCED_PARAMETER(packageProviders);\n}\n\n}\n"
  },
  {
    "path": "native/windowsTest/WatermelonTester/AutolinkedNativeModules.g.h",
    "content": "// AutolinkedNativeModules.g.h contents generated by \"react-native autolink-windows\"\n// clang-format off\n#pragma once\n\nnamespace winrt::Microsoft::ReactNative\n{\n\nvoid RegisterAutolinkedNativeModulePackages(winrt::Windows::Foundation::Collections::IVector<winrt::Microsoft::ReactNative::IReactPackageProvider> const& packageProviders);\n\n}\n"
  },
  {
    "path": "native/windowsTest/WatermelonTester/AutolinkedNativeModules.g.props",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <!-- AutolinkedNativeModules.g.props contents generated by \"react-native autolink-windows\" -->\n  <PropertyGroup>\n  </PropertyGroup>\n</Project>\n"
  },
  {
    "path": "native/windowsTest/WatermelonTester/AutolinkedNativeModules.g.targets",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <!-- AutolinkedNativeModules.g.targets contents generated by \"react-native autolink-windows\" -->\n  <ItemGroup>\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "native/windowsTest/WatermelonTester/MainPage.cpp",
    "content": "﻿#include \"pch.h\"\n#include \"MainPage.h\"\n#if __has_include(\"MainPage.g.cpp\")\n#include \"MainPage.g.cpp\"\n#endif\n\n#include \"App.h\"\n\nusing namespace winrt;\nusing namespace xaml;\n\nnamespace winrt::WatermelonTester::implementation\n{\n    MainPage::MainPage()\n    {\n        InitializeComponent();\n        auto app = Application::Current().as<App>();\n        ReactRootView().ReactNativeHost(app->Host());\n    }\n}\n"
  },
  {
    "path": "native/windowsTest/WatermelonTester/MainPage.h",
    "content": "﻿#pragma once\n#include \"MainPage.g.h\"\n#include <winrt/Microsoft.ReactNative.h>\n\nnamespace winrt::WatermelonTester::implementation\n{\n    struct MainPage : MainPageT<MainPage>\n    {\n        MainPage();\n    };\n}\n\nnamespace winrt::WatermelonTester::factory_implementation\n{\n    struct MainPage : MainPageT<MainPage, implementation::MainPage>\n    {\n    };\n}\n\n"
  },
  {
    "path": "native/windowsTest/WatermelonTester/MainPage.idl",
    "content": "#include \"NamespaceRedirect.h\"\n\nnamespace WatermelonTester\n{\n    [default_interface]\n    runtimeclass MainPage : XAML_NAMESPACE.Controls.Page\n    {\n        MainPage();\n    }\n}\n"
  },
  {
    "path": "native/windowsTest/WatermelonTester/MainPage.xaml",
    "content": "<Page\n    x:Class=\"WatermelonTester.MainPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:WatermelonTester\"\n    xmlns:react=\"using:Microsoft.ReactNative\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\"\n    Background=\"{ThemeResource ApplicationPageBackgroundThemeBrush}\">\n    <react:ReactRootView \n        x:Name=\"ReactRootView\"\n        ComponentName=\"WatermelonTester\"\n        Background=\"{ThemeResource ApplicationPageBackgroundThemeBrush}\"\n        MinHeight=\"400\"/>\n</Page>\n"
  },
  {
    "path": "native/windowsTest/WatermelonTester/Package.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<Package\n  xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10\"\n  xmlns:mp=\"http://schemas.microsoft.com/appx/2014/phone/manifest\"\n  xmlns:uap=\"http://schemas.microsoft.com/appx/manifest/uap/windows10\"\n  IgnorableNamespaces=\"uap mp\">\n\n  <Identity\n    Name=\"WatermelonTester\"\n    Publisher=\"CN=radex\"\n    Version=\"1.0.0.0\" />\n\n  <mp:PhoneIdentity PhoneProductId=\"c18dfa24-4f6e-428c-a0f7-724f8ba8b00d\" PhonePublisherId=\"00000000-0000-0000-0000-000000000000\"/>\n\n  <Properties>\n    <DisplayName>WatermelonTester</DisplayName>\n    <PublisherDisplayName>radex</PublisherDisplayName>\n    <Logo>Assets\\StoreLogo.png</Logo>\n  </Properties>\n\n  <Dependencies>\n    <TargetDeviceFamily Name=\"Windows.Universal\" MinVersion=\"10.0.0.0\" MaxVersionTested=\"10.0.0.0\" />\n  </Dependencies>\n\n  <Resources>\n    <Resource Language=\"x-generate\"/>\n  </Resources>\n\n  <Applications>\n    <Application\n      Id=\"App\"\n      Executable=\"$targetnametoken$.exe\"\n      EntryPoint=\"WatermelonTester.App\">\n      <uap:VisualElements\n        DisplayName=\"WatermelonTester\"\n        Square150x150Logo=\"Assets\\Square150x150Logo.png\"\n        Square44x44Logo=\"Assets\\Square44x44Logo.png\"\n        Description=\"WatermelonTester\"\n        BackgroundColor=\"transparent\">\n        <uap:DefaultTile Wide310x150Logo=\"Assets\\Wide310x150Logo.png\"/>\n        <uap:SplashScreen Image=\"Assets\\SplashScreen.png\" />\n      </uap:VisualElements>\n    </Application>\n  </Applications>\n\n  <Capabilities>\n    <Capability Name=\"internetClient\" />\n  </Capabilities>\n</Package>"
  },
  {
    "path": "native/windowsTest/WatermelonTester/PropertySheet.props",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"Current\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ImportGroup Label=\"PropertySheets\" />\n  <PropertyGroup Label=\"UserMacros\" />\n  <!--\n    To customize common C++/WinRT project properties:\n    * right-click the project node\n    * expand the Common Properties item\n    * select the C++/WinRT property page\n\n    For more advanced scenarios, and complete documentation, please see:\n    https://github.com/Microsoft/xlang/tree/master/src/package/cppwinrt/nuget\n    -->\n  <PropertyGroup />\n  <ItemDefinitionGroup />\n</Project>"
  },
  {
    "path": "native/windowsTest/WatermelonTester/ReactPackageProvider.cpp",
    "content": "#include \"pch.h\"\n#include \"ReactPackageProvider.h\"\n#include \"NativeModules.h\"\n\nusing namespace winrt::Microsoft::ReactNative;\n\nnamespace winrt::WatermelonTester::implementation\n{\n\nvoid ReactPackageProvider::CreatePackage(IReactPackageBuilder const &packageBuilder) noexcept\n{\n    AddAttributedModules(packageBuilder, true);\n}\n\n} // namespace winrt::WatermelonTester::implementation\n"
  },
  {
    "path": "native/windowsTest/WatermelonTester/ReactPackageProvider.h",
    "content": "#pragma once\n\n#include \"winrt/Microsoft.ReactNative.h\"\n\nnamespace winrt::WatermelonTester::implementation\n{\n    struct ReactPackageProvider : winrt::implements<ReactPackageProvider, winrt::Microsoft::ReactNative::IReactPackageProvider>\n    {\n    public: // IReactPackageProvider\n        void CreatePackage(winrt::Microsoft::ReactNative::IReactPackageBuilder const &packageBuilder) noexcept;\n    };\n} // namespace winrt::WatermelonTester::implementation\n\n"
  },
  {
    "path": "native/windowsTest/WatermelonTester/WatermelonTester.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"Current\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Midl Include=\"App.idl\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"pch.cpp\" />\n    <ClCompile Include=\"App.cpp\" />\n    <ClCompile Include=\"$(GeneratedFilesDir)module.g.cpp\" />\n    <ClCompile Include=\"ReactPackageProvider.cpp\" />\n    <ClCompile Include=\"AutolinkedNativeModules.g.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"pch.h\" />\n    <ClInclude Include=\"App.h\" />\n    <ClInclude Include=\"ReactPackageProvider.h\" />\n    <ClInclude Include=\"AutolinkedNativeModules.g.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Image Include=\"Assets\\Wide310x150Logo.scale-200.png\">\n      <Filter>Assets</Filter>\n    </Image>\n    <Image Include=\"Assets\\StoreLogo.png\">\n      <Filter>Assets</Filter>\n    </Image>\n    <Image Include=\"Assets\\Square150x150Logo.scale-200.png\">\n      <Filter>Assets</Filter>\n    </Image>\n    <Image Include=\"Assets\\Square44x44Logo.targetsize-24_altform-unplated.png\">\n      <Filter>Assets</Filter>\n    </Image>\n    <Image Include=\"Assets\\Square44x44Logo.scale-200.png\">\n      <Filter>Assets</Filter>\n    </Image>\n    <Image Include=\"Assets\\SplashScreen.scale-200.png\">\n      <Filter>Assets</Filter>\n    </Image>\n    <Image Include=\"Assets\\LockScreenLogo.scale-200.png\">\n      <Filter>Assets</Filter>\n    </Image>\n  </ItemGroup>\n  <ItemGroup>\n    <AppxManifest Include=\"Package.appxmanifest\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Filter Include=\"Assets\">\n      <UniqueIdentifier>{e48dc53e-40b1-40cb-970a-f89935452892}</UniqueIdentifier>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"PropertySheet.props\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Text Include=\"readme.txt\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Page Include=\"MainPage.xaml\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "native/windowsTest/WatermelonTester/WatermelonTester.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- This project was created with react-native-windows 0.71.28 -->\n<Project ToolsVersion=\"Current\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(SolutionDir)\\ExperimentalFeatures.props\" Condition=\"Exists('$(SolutionDir)\\ExperimentalFeatures.props')\" />\n  <PropertyGroup Label=\"Globals\">\n    <CppWinRTOptimized>true</CppWinRTOptimized>\n    <CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>\n    <MinimalCoreWin>true</MinimalCoreWin>\n    <ProjectGuid>{1356621a-87db-4bff-8c6c-1cd9dec848cf}</ProjectGuid>\n    <ProjectName>WatermelonTester</ProjectName>\n    <RootNamespace>WatermelonTester</RootNamespace>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <MinimumVisualStudioVersion>17.0</MinimumVisualStudioVersion>\n    <AppContainerApplication>true</AppContainerApplication>\n    <ApplicationType>Windows Store</ApplicationType>\n    <ApplicationTypeRevision>10.0</ApplicationTypeRevision>\n  </PropertyGroup>\n  <PropertyGroup Label=\"ReactNativeWindowsProps\">\n    <!-- TODO: This should be ../ from current state -->\n    <ReactNativeWindowsDir Condition=\"'$(ReactNativeWindowsDir)' == ''\">$([MSBuild]::GetDirectoryNameOfFileAbove($(SolutionDir), 'node_modules\\react-native-windows\\package.json'))\\node_modules\\react-native-windows\\</ReactNativeWindowsDir>\n  </PropertyGroup>\n  <Import Project=\"$(ReactNativeWindowsDir)\\PropertySheets\\External\\Microsoft.ReactNative.WindowsSdk.Default.props\" />\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|ARM64\">\n      <Configuration>Debug</Configuration>\n      <Platform>ARM64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|ARM64\">\n      <Configuration>Release</Configuration>\n      <Platform>ARM64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)'=='Debug'\" Label=\"Configuration\">\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <LinkIncremental>true</LinkIncremental>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)'=='Release'\" Label=\"Configuration\">\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <LinkIncremental>false</LinkIncremental>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\">\n    <Import Project=\"PropertySheet.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"ReactNativeWindowsPropertySheets\">\n    <Import Project=\"$(ReactNativeWindowsDir)\\PropertySheets\\external\\Microsoft.ReactNative.Uwp.CppApp.props\" Condition=\"Exists('$(ReactNativeWindowsDir)\\PropertySheets\\External\\Microsoft.ReactNative.Uwp.CppApp.props')\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <ItemDefinitionGroup>\n    <ClCompile>\n      <PrecompiledHeader>Use</PrecompiledHeader>\n      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>\n      <PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>\n      <WarningLevel>Level4</WarningLevel>\n      <AdditionalOptions>%(AdditionalOptions) /bigobj</AdditionalOptions>\n      <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>\n    </ClCompile>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)'=='Debug'\">\n    <ClCompile>\n      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n    </ClCompile>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)'=='Release'\">\n    <ClCompile>\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n    </ClCompile>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClInclude Include=\"MainPage.h\">\n      <DependentUpon>MainPage.xaml</DependentUpon>\n      <SubType>Code</SubType>\n    </ClInclude>\n    <ClInclude Include=\"ReactPackageProvider.h\" />\n    <ClInclude Include=\"AutolinkedNativeModules.g.h\" />\n    <ClInclude Include=\"pch.h\" />\n    <ClInclude Include=\"App.h\">\n      <DependentUpon>App.xaml</DependentUpon>\n    </ClInclude>\n  </ItemGroup>\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\">\n      <SubType>Designer</SubType>\n    </ApplicationDefinition>\n  </ItemGroup>\n  <ItemGroup>\n    <AppxManifest Include=\"Package.appxmanifest\">\n      <SubType>Designer</SubType>\n    </AppxManifest>\n  </ItemGroup>\n  <ItemGroup>\n    <Image Include=\"Assets\\LockScreenLogo.scale-200.png\" />\n    <Image Include=\"Assets\\SplashScreen.scale-200.png\" />\n    <Image Include=\"Assets\\Square150x150Logo.scale-200.png\" />\n    <Image Include=\"Assets\\Square44x44Logo.scale-200.png\" />\n    <Image Include=\"Assets\\Square44x44Logo.targetsize-24_altform-unplated.png\" />\n    <Image Include=\"Assets\\StoreLogo.png\" />\n    <Image Include=\"Assets\\Wide310x150Logo.scale-200.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"MainPage.cpp\">\n      <DependentUpon>MainPage.xaml</DependentUpon>\n      <SubType>Code</SubType>\n    </ClCompile>\n    <ClCompile Include=\"ReactPackageProvider.cpp\" />\n    <ClCompile Include=\"AutolinkedNativeModules.g.cpp\" />\n    <ClCompile Include=\"pch.cpp\">\n      <PrecompiledHeader>Create</PrecompiledHeader>\n    </ClCompile>\n    <ClCompile Include=\"App.cpp\">\n      <DependentUpon>App.xaml</DependentUpon>\n    </ClCompile>\n    <ClCompile Include=\"$(GeneratedFilesDir)module.g.cpp\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Midl Include=\"App.idl\">\n      <DependentUpon>App.xaml</DependentUpon>\n    </Midl>\n    <Midl Include=\"MainPage.idl\">\n      <DependentUpon>MainPage.xaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Midl>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"PropertySheet.props\" />\n    <Text Include=\"readme.txt\">\n      <DeploymentContent>false</DeploymentContent>\n    </Text>\n  </ItemGroup>\n  <ItemGroup>\n    <Page Include=\"MainPage.xaml\">\n      <SubType>Designer</SubType>\n    </Page>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\windows\\WatermelonDB\\WatermelonDB.vcxproj\">\n      <Project>{1e63901f-b1c9-4569-beb3-401f13d77b02}</Project>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ReactNativeWindowsTargets\">\n    <Import Project=\"$(ReactNativeWindowsDir)\\PropertySheets\\External\\Microsoft.ReactNative.Uwp.CppApp.targets\" Condition=\"Exists('$(ReactNativeWindowsDir)\\PropertySheets\\External\\Microsoft.ReactNative.Uwp.CppApp.targets')\" />\n  </ImportGroup>\n  <Target Name=\"EnsureReactNativeWindowsTargets\" BeforeTargets=\"PrepareForBuild\">\n    <PropertyGroup>\n      <ErrorText>This project references targets in your node_modules\\react-native-windows folder that are missing. The missing file is {0}.</ErrorText>\n    </PropertyGroup>\n    <Error Condition=\"!Exists('$(ReactNativeWindowsDir)\\PropertySheets\\External\\Microsoft.ReactNative.Uwp.CppApp.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '$(ReactNativeWindowsDir)\\PropertySheets\\External\\Microsoft.ReactNative.Uwp.CppApp.props'))\" />\n    <Error Condition=\"!Exists('$(ReactNativeWindowsDir)\\PropertySheets\\External\\Microsoft.ReactNative.Uwp.CppApp.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '$(ReactNativeWindowsDir)\\PropertySheets\\External\\Microsoft.ReactNative.Uwp.CppApp.targets'))\" />\n  </Target>\n</Project>"
  },
  {
    "path": "native/windowsTest/WatermelonTester/pch.cpp",
    "content": "﻿#include \"pch.h\"\n"
  },
  {
    "path": "native/windowsTest/WatermelonTester/pch.h",
    "content": "#pragma once\n\n#define NOMINMAX\n\n#include <hstring.h>\n#include <restrictederrorinfo.h>\n#include <unknwn.h>\n#include <windows.h>\n#include <CppWinRTIncludes.h>\n#include <VersionMacros.h>\n#include <winrt/Windows.ApplicationModel.Activation.h>\n#include <UI.Xaml.Controls.Primitives.h>\n#include <UI.Xaml.Controls.h>\n#include <UI.Xaml.Markup.h>\n#include <UI.Xaml.Navigation.h>\n\n#include <winrt/Microsoft.ReactNative.h>\n\n#include \"winrt/WatermelonDB.h\"\n\n#include <winrt/Microsoft.UI.Xaml.Automation.Peers.h>\n#include <winrt/Microsoft.UI.Xaml.Controls.Primitives.h>\n#include <winrt/Microsoft.UI.Xaml.Controls.h>\n#include <winrt/Microsoft.UI.Xaml.Media.h>\n#include <winrt/Microsoft.UI.Xaml.XamlTypeInfo.h>\nusing namespace winrt::Windows::Foundation;\n"
  },
  {
    "path": "native/windowsTest/WatermelonTester.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.3.32929.385\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"WatermelonTester\", \"WatermelonTester\\WatermelonTester.vcxproj\", \"{1356621A-87DB-4BFF-8C6C-1CD9DEC848CF}\"\n\tProjectSection(ProjectDependencies) = postProject\n\t\t{F7D32BD0-2749-483E-9A0D-1635EF7E3136} = {F7D32BD0-2749-483E-9A0D-1635EF7E3136}\n\tEndProjectSection\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Folly\", \"..\\..\\node_modules\\react-native-windows\\Folly\\Folly.vcxproj\", \"{A990658C-CE31-4BCC-976F-0FC6B1AF693D}\"\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"fmt\", \"..\\..\\node_modules\\react-native-windows\\fmt\\fmt.vcxproj\", \"{14B93DC8-FD93-4A6D-81CB-8BC96644501C}\"\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"ReactCommon\", \"..\\..\\node_modules\\react-native-windows\\ReactCommon\\ReactCommon.vcxproj\", \"{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}\"\n\tProjectSection(ProjectDependencies) = postProject\n\t\t{A990658C-CE31-4BCC-976F-0FC6B1AF693D} = {A990658C-CE31-4BCC-976F-0FC6B1AF693D}\n\tEndProjectSection\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Chakra\", \"..\\..\\node_modules\\react-native-windows\\Chakra\\Chakra.vcxitems\", \"{C38970C0-5FBF-4D69-90D8-CBAC225AE895}\"\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Microsoft.ReactNative\", \"..\\..\\node_modules\\react-native-windows\\Microsoft.ReactNative\\Microsoft.ReactNative.vcxproj\", \"{F7D32BD0-2749-483E-9A0D-1635EF7E3136}\"\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Microsoft.ReactNative.Cxx\", \"..\\..\\node_modules\\react-native-windows\\Microsoft.ReactNative.Cxx\\Microsoft.ReactNative.Cxx.vcxitems\", \"{DA8B35B3-DA00-4B02-BDE6-6A397B3FD46B}\"\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Common\", \"..\\..\\node_modules\\react-native-windows\\Common\\Common.vcxproj\", \"{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"ReactNative\", \"ReactNative\", \"{5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}\"\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Microsoft.ReactNative.Shared\", \"..\\..\\node_modules\\react-native-windows\\Shared\\Shared.vcxitems\", \"{2049DBE9-8D13-42C9-AE4B-413AE38FFFD0}\"\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Mso\", \"..\\..\\node_modules\\react-native-windows\\Mso\\Mso.vcxitems\", \"{84E05BFA-CBAF-4F0D-BFB6-4CE85742A57E}\"\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Include\", \"..\\..\\node_modules\\react-native-windows\\include\\Include.vcxitems\", \"{EF074BA1-2D54-4D49-A28E-5E040B47CD2E}\"\nEndProject\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"WatermelonDB\", \"..\\windows\\WatermelonDB\\WatermelonDB.vcxproj\", \"{1E63901F-B1C9-4569-BEB3-401F13D77B02}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|ARM64 = Debug|ARM64\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|ARM64 = Release|ARM64\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{1356621A-87DB-4BFF-8C6C-1CD9DEC848CF}.Debug|ARM64.ActiveCfg = Debug|ARM64\n\t\t{1356621A-87DB-4BFF-8C6C-1CD9DEC848CF}.Debug|ARM64.Build.0 = Debug|ARM64\n\t\t{1356621A-87DB-4BFF-8C6C-1CD9DEC848CF}.Debug|ARM64.Deploy.0 = Debug|ARM64\n\t\t{1356621A-87DB-4BFF-8C6C-1CD9DEC848CF}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{1356621A-87DB-4BFF-8C6C-1CD9DEC848CF}.Debug|x64.Build.0 = Debug|x64\n\t\t{1356621A-87DB-4BFF-8C6C-1CD9DEC848CF}.Debug|x64.Deploy.0 = Debug|x64\n\t\t{1356621A-87DB-4BFF-8C6C-1CD9DEC848CF}.Debug|x86.ActiveCfg = Debug|Win32\n\t\t{1356621A-87DB-4BFF-8C6C-1CD9DEC848CF}.Debug|x86.Build.0 = Debug|Win32\n\t\t{1356621A-87DB-4BFF-8C6C-1CD9DEC848CF}.Debug|x86.Deploy.0 = Debug|Win32\n\t\t{1356621A-87DB-4BFF-8C6C-1CD9DEC848CF}.Release|ARM64.ActiveCfg = Release|ARM64\n\t\t{1356621A-87DB-4BFF-8C6C-1CD9DEC848CF}.Release|ARM64.Build.0 = Release|ARM64\n\t\t{1356621A-87DB-4BFF-8C6C-1CD9DEC848CF}.Release|ARM64.Deploy.0 = Release|ARM64\n\t\t{1356621A-87DB-4BFF-8C6C-1CD9DEC848CF}.Release|x64.ActiveCfg = Release|x64\n\t\t{1356621A-87DB-4BFF-8C6C-1CD9DEC848CF}.Release|x64.Build.0 = Release|x64\n\t\t{1356621A-87DB-4BFF-8C6C-1CD9DEC848CF}.Release|x64.Deploy.0 = Release|x64\n\t\t{1356621A-87DB-4BFF-8C6C-1CD9DEC848CF}.Release|x86.ActiveCfg = Release|Win32\n\t\t{1356621A-87DB-4BFF-8C6C-1CD9DEC848CF}.Release|x86.Build.0 = Release|Win32\n\t\t{1356621A-87DB-4BFF-8C6C-1CD9DEC848CF}.Release|x86.Deploy.0 = Release|Win32\n\t\t{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM64.ActiveCfg = Debug|ARM64\n\t\t{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM64.Build.0 = Debug|ARM64\n\t\t{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x64.Build.0 = Debug|x64\n\t\t{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x86.ActiveCfg = Debug|Win32\n\t\t{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x86.Build.0 = Debug|Win32\n\t\t{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|ARM64.ActiveCfg = Release|ARM64\n\t\t{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|ARM64.Build.0 = Release|ARM64\n\t\t{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x64.ActiveCfg = Release|x64\n\t\t{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x64.Build.0 = Release|x64\n\t\t{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x86.ActiveCfg = Release|Win32\n\t\t{A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x86.Build.0 = Release|Win32\n\t\t{14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Debug|ARM64.ActiveCfg = Debug|ARM64\n\t\t{14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Debug|ARM64.Build.0 = Debug|ARM64\n\t\t{14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Debug|x64.Build.0 = Debug|x64\n\t\t{14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Debug|x86.ActiveCfg = Debug|Win32\n\t\t{14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Debug|x86.Build.0 = Debug|Win32\n\t\t{14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Debug|x86.Deploy.0 = Debug|Win32\n\t\t{14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Release|ARM64.ActiveCfg = Release|ARM64\n\t\t{14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Release|ARM64.Build.0 = Release|ARM64\n\t\t{14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Release|x64.ActiveCfg = Release|x64\n\t\t{14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Release|x64.Build.0 = Release|x64\n\t\t{14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Release|x86.ActiveCfg = Release|Win32\n\t\t{14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Release|x86.Build.0 = Release|Win32\n\t\t{14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Release|x86.Deploy.0 = Release|Win32\n\t\t{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM64.ActiveCfg = Debug|ARM64\n\t\t{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM64.Build.0 = Debug|ARM64\n\t\t{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x64.Build.0 = Debug|x64\n\t\t{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x86.ActiveCfg = Debug|Win32\n\t\t{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x86.Build.0 = Debug|Win32\n\t\t{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|ARM64.ActiveCfg = Release|ARM64\n\t\t{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|ARM64.Build.0 = Release|ARM64\n\t\t{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x64.ActiveCfg = Release|x64\n\t\t{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x64.Build.0 = Release|x64\n\t\t{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x86.ActiveCfg = Release|Win32\n\t\t{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x86.Build.0 = Release|Win32\n\t\t{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|ARM64.ActiveCfg = Debug|ARM64\n\t\t{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|ARM64.Build.0 = Debug|ARM64\n\t\t{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x64.Build.0 = Debug|x64\n\t\t{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x86.ActiveCfg = Debug|Win32\n\t\t{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x86.Build.0 = Debug|Win32\n\t\t{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|ARM64.ActiveCfg = Release|ARM64\n\t\t{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|ARM64.Build.0 = Release|ARM64\n\t\t{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x64.ActiveCfg = Release|x64\n\t\t{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x64.Build.0 = Release|x64\n\t\t{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x86.ActiveCfg = Release|Win32\n\t\t{F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x86.Build.0 = Release|Win32\n\t\t{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|ARM64.ActiveCfg = Debug|ARM64\n\t\t{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|ARM64.Build.0 = Debug|ARM64\n\t\t{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x64.Build.0 = Debug|x64\n\t\t{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x86.ActiveCfg = Debug|Win32\n\t\t{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x86.Build.0 = Debug|Win32\n\t\t{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|ARM64.ActiveCfg = Release|ARM64\n\t\t{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|ARM64.Build.0 = Release|ARM64\n\t\t{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x64.ActiveCfg = Release|x64\n\t\t{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x64.Build.0 = Release|x64\n\t\t{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x86.ActiveCfg = Release|Win32\n\t\t{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x86.Build.0 = Release|Win32\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Debug|ARM64.ActiveCfg = Debug|ARM64\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Debug|ARM64.Build.0 = Debug|ARM64\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Debug|x64.Build.0 = Debug|x64\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Debug|x64.Deploy.0 = Debug|x64\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Debug|x86.ActiveCfg = Debug|Win32\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Debug|x86.Build.0 = Debug|Win32\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Debug|x86.Deploy.0 = Debug|Win32\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Release|ARM64.ActiveCfg = Release|ARM64\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Release|ARM64.Build.0 = Release|ARM64\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Release|x64.ActiveCfg = Release|x64\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Release|x64.Build.0 = Release|x64\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Release|x64.Deploy.0 = Release|x64\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Release|x86.ActiveCfg = Release|Win32\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Release|x86.Build.0 = Release|Win32\n\t\t{1E63901F-B1C9-4569-BEB3-401F13D77B02}.Release|x86.Deploy.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{A990658C-CE31-4BCC-976F-0FC6B1AF693D} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}\n\t\t{14B93DC8-FD93-4A6D-81CB-8BC96644501C} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}\n\t\t{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}\n\t\t{C38970C0-5FBF-4D69-90D8-CBAC225AE895} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}\n\t\t{F7D32BD0-2749-483E-9A0D-1635EF7E3136} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}\n\t\t{DA8B35B3-DA00-4B02-BDE6-6A397B3FD46B} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}\n\t\t{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}\n\t\t{2049DBE9-8D13-42C9-AE4B-413AE38FFFD0} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}\n\t\t{84E05BFA-CBAF-4F0D-BFB6-4CE85742A57E} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}\n\t\t{EF074BA1-2D54-4D49-A28E-5E040B47CD2E} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {D43FAD39-F619-437D-BB40-04A3982ACB6A}\n\tEndGlobalSection\n\tGlobalSection(SharedMSBuildProjectFiles) = preSolution\n\t\t..\\..\\node_modules\\react-native-windows\\Shared\\Shared.vcxitems*{2049dbe9-8d13-42c9-ae4b-413ae38fffd0}*SharedItemsImports = 9\n\t\t..\\..\\node_modules\\react-native-windows\\Mso\\Mso.vcxitems*{84e05bfa-cbaf-4f0d-bfb6-4ce85742a57e}*SharedItemsImports = 9\n\t\t..\\..\\node_modules\\react-native-windows\\Chakra\\Chakra.vcxitems*{c38970c0-5fbf-4d69-90d8-cbac225ae895}*SharedItemsImports = 9\n\t\t..\\..\\node_modules\\react-native-windows\\Microsoft.ReactNative.Cxx\\Microsoft.ReactNative.Cxx.vcxitems*{da8b35b3-da00-4b02-bde6-6a397b3fd46b}*SharedItemsImports = 9\n\t\t..\\..\\node_modules\\react-native-windows\\include\\Include.vcxitems*{ef074ba1-2d54-4d49-a28e-5e040b47cd2e}*SharedItemsImports = 9\n\t\t..\\..\\node_modules\\react-native-windows\\Chakra\\Chakra.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4\n\t\t..\\..\\node_modules\\react-native-windows\\Microsoft.ReactNative.Cxx\\Microsoft.ReactNative.Cxx.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4\n\t\t..\\..\\node_modules\\react-native-windows\\Mso\\Mso.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4\n\t\t..\\..\\node_modules\\react-native-windows\\Shared\\Shared.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"@nozbe/watermelondb\",\n  \"description\": \"Build powerful React Native and React web apps that scale from hundreds to tens of thousands of records and remain fast\",\n  \"version\": \"0.28.1-0\",\n  \"engines\": {\n    \"node\": \">=18\"\n  },\n  \"scripts\": {\n    \"up\": \"yarn\",\n    \"build\": \"NODE_ENV=production node ./scripts/make.mjs\",\n    \"dev\": \"NODE_ENV=development node ./scripts/make.mjs\",\n    \"dev:native\": \"react-native start\",\n    \"release\": \"node ./scripts/release.mjs\",\n    \"prettier\": \"prettier --write src docs-website/src\",\n    \"flow\": \"flow check --color always\",\n    \"eslint\": \"eslint ./src -c ./.eslintrc.js --cache --cache-location ./.cache/.eslintcache\",\n    \"tslint\": \"tslint --project .\",\n    \"test\": \"jest --config=./jest.config.js --forceExit\",\n    \"ci\": \"yarn ci:check\",\n    \"ci:check\": \"concurrently -c auto -n jest,eslint,flow,ts,tslint 'npm run test' 'npm run eslint' 'npm run flow' 'npm run test:typescript' 'npm run tslint' --kill-others-on-fail\",\n    \"test:android\": \"cd native/androidTest && ./gradlew connectedAndroidTest\",\n    \"test:ios\": \"scripts/test-ios\",\n    \"test:windows\": \"react-native run-windows\",\n    \"test:windows:ci\": \"cd native/windowsE2E && npm run e2etest\",\n    \"test:native\": \"concurrently -n android,ios 'npm run test:android' 'npm run test:ios' --kill-others-on-fail\",\n    \"test:typescript\": \"cd examples/typescript; yarn; npm run test\",\n    \"ktlint\": \"cd native/androidTest; ./gradlew ktlint\",\n    \"ktlint:format\": \"cd native/androidTest; ./gradlew ktlintFormat\",\n    \"android:emulator\": \"./scripts/emulatorWithJavaCheck\",\n    \"cocoapods\": \"rm -fr native/iosTest/build/generated && cd native/iosTest && bundle exec pod update hermes-engine --no-repo-update && bundle exec pod install\",\n    \"docs:version\": \"cd docs-website && yarn version --no-git-tag-version --no-commit-hooks --new-version\",\n    \"docs:dev\": \"./scripts/update-docusaurus && cd docs-website && yarn start\",\n    \"docs:build\": \"./scripts/update-docusaurus && cd docs-website && yarn build\",\n    \"docs:deploy\": \"./scripts/update-docusaurus && cd docs-website && yarn deploy\",\n    \"postinstall\": \"patch-package\"\n  },\n  \"types\": \"src/index.d.ts\",\n  \"author\": \"@Nozbe\",\n  \"homepage\": \"https://github.com/Nozbe/WatermelonDB#readme\",\n  \"bugs\": \"https://github.com/Nozbe/WatermelonDB/issues\",\n  \"license\": \"MIT\",\n  \"keywords\": [\n    \"database\",\n    \"sqlite\",\n    \"react\",\n    \"react-native\",\n    \"indexeddb\",\n    \"lokijs\",\n    \"watermelon\",\n    \"watermelondb\",\n    \"offline\",\n    \"offline-first\",\n    \"persistence\",\n    \"reactive\",\n    \"rxjs\",\n    \"better-sqlite3\",\n    \"db\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/Nozbe/WatermelonDB.git\"\n  },\n  \"dependencies\": {\n    \"@babel/runtime\": \"7.26.0\",\n    \"@nozbe/simdjson\": \"3.9.4\",\n    \"@nozbe/sqlite\": \"3.46.0\",\n    \"hoist-non-react-statics\": \"^3.3.2\",\n    \"lokijs\": \"npm:@nozbe/lokijs@1.5.12-wmelon8\",\n    \"rxjs\": \"^7.8.1\",\n    \"sql-escape-string\": \"^1.1.0\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"devDependencies\": {\n    \"@babel/cli\": \"^7.24.7\",\n    \"@babel/core\": \"^7.24.7\",\n    \"@babel/eslint-parser\": \"^7.24.7\",\n    \"@babel/plugin-proposal-class-properties\": \"^7.18.6\",\n    \"@babel/plugin-proposal-decorators\": \"7.25.9\",\n    \"@babel/plugin-proposal-json-strings\": \"^7.18.6\",\n    \"@babel/plugin-proposal-nullish-coalescing-operator\": \"^7.18.6\",\n    \"@babel/plugin-proposal-object-rest-spread\": \"^7.20.7\",\n    \"@babel/plugin-proposal-optional-chaining\": \"^7.21.0\",\n    \"@babel/plugin-proposal-private-methods\": \"^7.18.6\",\n    \"@babel/plugin-proposal-unicode-property-regex\": \"^7.18.6\",\n    \"@babel/plugin-syntax-dynamic-import\": \"^7.2.0\",\n    \"@babel/plugin-syntax-flow\": \"^7.24.7\",\n    \"@babel/plugin-syntax-jsx\": \"^7.24.7\",\n    \"@babel/plugin-transform-arrow-functions\": \"^7.24.7\",\n    \"@babel/plugin-transform-async-to-generator\": \"^7.24.7\",\n    \"@babel/plugin-transform-block-scoping\": \"^7.24.7\",\n    \"@babel/plugin-transform-classes\": \"^7.24.7\",\n    \"@babel/plugin-transform-computed-properties\": \"^7.24.7\",\n    \"@babel/plugin-transform-destructuring\": \"^7.24.7\",\n    \"@babel/plugin-transform-exponentiation-operator\": \"^7.24.7\",\n    \"@babel/plugin-transform-flow-strip-types\": \"^7.24.7\",\n    \"@babel/plugin-transform-for-of\": \"^7.24.7\",\n    \"@babel/plugin-transform-function-name\": \"^7.24.7\",\n    \"@babel/plugin-transform-literals\": \"^7.24.7\",\n    \"@babel/plugin-transform-modules-commonjs\": \"^7.24.7\",\n    \"@babel/plugin-transform-parameters\": \"^7.24.7\",\n    \"@babel/plugin-transform-react-constant-elements\": \"^7.24.7\",\n    \"@babel/plugin-transform-react-display-name\": \"^7.24.7\",\n    \"@babel/plugin-transform-react-inline-elements\": \"^7.24.7\",\n    \"@babel/plugin-transform-react-jsx\": \"^7.24.7\",\n    \"@babel/plugin-transform-react-jsx-source\": \"^7.24.7\",\n    \"@babel/plugin-transform-regenerator\": \"^7.24.7\",\n    \"@babel/plugin-transform-runtime\": \"^7.24.7\",\n    \"@babel/plugin-transform-shorthand-properties\": \"^7.24.7\",\n    \"@babel/plugin-transform-spread\": \"^7.24.7\",\n    \"@babel/plugin-transform-sticky-regex\": \"^7.24.7\",\n    \"@babel/plugin-transform-template-literals\": \"^7.24.7\",\n    \"@babel/plugin-transform-unicode-regex\": \"^7.24.7\",\n    \"@nozbe/watermelondb_expect\": \"npm:expect@24.1.0\",\n    \"@react-native/babel-preset\": \"0.74.88\",\n    \"@react-native/eslint-config\": \"0.74.88\",\n    \"@react-native/metro-config\": \"0.74.88\",\n    \"@react-native/typescript-config\": \"0.74.88\",\n    \"@testing-library/react-hooks\": \"^8.0.1\",\n    \"@types/hoist-non-react-statics\": \"^3.3.5\",\n    \"@types/react\": \"^16.8.6\",\n    \"@typescript-eslint/eslint-plugin\": \"^5.53.0\",\n    \"@typescript-eslint/parser\": \"^7.13.0\",\n    \"anymatch\": \"^3.1.3\",\n    \"babel-core\": \"^7.0.0-0\",\n    \"babel-plugin-closure-elimination\": \"^1.3.2\",\n    \"babel-plugin-import-redirect\": \"^1.1.1\",\n    \"babel-plugin-minify-dead-code-elimination\": \"^0.5.2\",\n    \"babel-plugin-minify-flip-comparisons\": \"^0.4.3\",\n    \"babel-plugin-minify-guarded-expressions\": \"^0.4.4\",\n    \"babel-plugin-minify-replace\": \"^0.5.0\",\n    \"babel-plugin-module-resolver\": \"^5.0.2\",\n    \"better-sqlite3\": \"^11.0.0\",\n    \"big-list-of-naughty-strings\": \"https://github.com/radex/big-list-of-naughty-strings#8346238a82f1e3a6f62389def1e668d80e4023fb\",\n    \"cavy\": \"git+https://github.com/Nozbe/cavy.git\",\n    \"chokidar\": \"^3.6.0\",\n    \"chokidar-cli\": \"^3.0.0\",\n    \"concurrently\": \"^7.6.0\",\n    \"eslint\": \"^8.34.0\",\n    \"eslint-config-prettier\": \"^9.1.0\",\n    \"eslint-plugin-flowtype\": \"^8.0.3\",\n    \"eslint-plugin-import\": \"^2.29.1\",\n    \"eslint-plugin-jest\": \"^28.2.0\",\n    \"eslint-plugin-react\": \"^7.34.2\",\n    \"eslint-plugin-react-hooks\": \"^4.6.2\",\n    \"execa\": \"^7.0.0\",\n    \"fast-async\": \"^7.0\",\n    \"flow-bin\": \"0.200.0\",\n    \"fs-extra\": \"^11.2.0\",\n    \"glob-to-regexp\": \"^0.4.1\",\n    \"inquirer\": \"^9.2.23\",\n    \"jest\": \"^29.7.0\",\n    \"json-stringify-pretty-compact\": \"^4.0.0\",\n    \"klaw-sync\": \"^6.0.0\",\n    \"listr\": \"^0.14.1\",\n    \"listr-input\": \"^0.2.1\",\n    \"lodash.clonedeep\": \"^4.5.0\",\n    \"mkdirp\": \"^2.1.3\",\n    \"patch-package\": \"^8.0.0\",\n    \"path\": \"^0.12.7\",\n    \"postinstall-postinstall\": \"^2.1.0\",\n    \"prettier\": \"^3.3.2\",\n    \"rambdax\": \"2.15.0\",\n    \"react\": \"18.3.1\",\n    \"react-dom\": \"18.3.1\",\n    \"react-native\": \"0.74.6\",\n    \"react-test-renderer\": \"18.3.1\",\n    \"rimraf\": \"^4.1.2\",\n    \"semver\": \"^7.6.2\",\n    \"tslint\": \"^5.11.0\",\n    \"tslint-config-prettier\": \"^1.15.0\",\n    \"typescript\": \"^4.5.0\"\n  }\n}\n"
  },
  {
    "path": "prettier.config.js",
    "content": "module.exports = {\n  printWidth: 100,\n  trailingComma: 'all',\n  semi: false,\n  singleQuote: true,\n  bracketSpacing: true,\n  overrides: [\n    {\n      files: '*.js',\n      options: {\n        parser: 'babel',\n      },\n    },\n    {\n      files: '*.ts',\n      options: {\n        parser: 'typescript',\n      },\n    },\n  ],\n}\n"
  },
  {
    "path": "react-native.config.js",
    "content": "module.exports = {\n  // This is for auto-linking WatermelonDB as a library\n  dependency: {\n    platforms: {\n      android: {\n        sourceDir: './native/android',\n      },\n      windows: {\n        sourceDir: '.\\\\native\\\\windows',\n        solutionFile: 'WatermelonDB.sln',\n        projects: [\n          {\n            projectFile: 'WatermelonDB\\\\WatermelonDB.vcxproj',\n            directDependency: true,\n          }\n        ],\n      },\n    },\n  },\n  // This is for WatermelonDB project internals\n  project: {\n    android: {\n      sourceDir: './native/androidTest',\n    },\n    ios: {\n      sourceDir: './native/iosTest',\n    },\n    windows: {\n      sourceDir: 'native\\\\windowsTest',\n      solutionFile: 'WatermelonTester.sln',\n      project: {\n        projectFile: 'WatermelonTester\\\\WatermelonTester.vcxproj',\n      },\n    },\n  },\n}\n"
  },
  {
    "path": "scripts/any-android-device",
    "content": "#!/bin/bash\nset -e\nset -x\ncd \"${0%/*}\"\nNO_SNAPSHOT=$1\n\nnode ./emulator.js first $NO_SNAPSHOT\n"
  },
  {
    "path": "scripts/ccache-clang",
    "content": "#!/bin/sh\n\n# NOTE: This runs clang compilation through `ccache`, which aims to permanently cache build objects\n# without ever producing a bad result, so you can Clean in Xcode, but still reuse precompiled code\n# Tutorial for setup: https://pspdfkit.com/blog/2015/ccache-for-fun-and-profit/\n\nexport PATH=\"$PATH:/usr/local/bin:/opt/homebrew/bin/\"\n# (debug)\n# echo $PATH\n\n# NOTE: Xcode does not pass environment variables to its C compiler (this file here), so we don't\n# know which clang we're supposed to use. We could just use /usr/bin/clang, but that relies on\n# \"Command-line tools\" being set properly in Xcode, and worse yet, it will fail in bizarre, hard to\n# understand ways when you upgrade Xcode and don't change the CLI tools version\n# To work around, we need to pass CCACHE_HACK_TOOLCHAIN_DIR argument here with the tool to Xcode's toolchain dir\n# The easiest way is to add CCACHE_HACK_TOOLCHAIN_DIR=\"$(TOOLCHAIN_DIR)\" to GCC_PREPROCESSOR_DEFINITIONS\nfor arg in \"$@\"; do\n  # echo arg\n  # echo \"$arg\"\n  case \"$arg\" in\n  \"-DCCACHE_HACK_TOOLCHAIN_DIR=\"*)\n    # echo \"bingo!\"\n    xcode_toolchain_dir=\"${arg/-DCCACHE_HACK_TOOLCHAIN_DIR=/}\"\n    ;;\n  *) ;;\n  esac\ndone\n\nxcode_toolchain_dir=\"${xcode_toolchain_dir:?CCACHE_HACK_TOOLCHAIN_DIR not found. See ccache-clang for more details}\"\n\n# (debug)\n# echo \"and the toolchain is…\"\n# echo \"$xcode_toolchain_dir\"\n\nif type -p ccache >/dev/null 2>&1; then\n  # (debug)\n  # echo \"ccache is found!\"\n\n  # https://ccache.dev/manual/latest.html#_configuration\n  export CCACHE_MAXSIZE=5G\n  export CCACHE_CPP2=true\n  # (debug)\n  # export CCACHE_LOGFILE=/Users/radex/.ccache-log\n\n  # NOTE: check out https://pspdfkit.com/blog/2020/faster-compilation-with-ccache/\n  # export CCACHE_HARDLINK=true\n  # export CCACHE_SLOPPINESS=file_macro,time_macros,include_file_mtime,include_file_ctime,file_stat_matches\n\n  # NOTE: distcc doesn't work very well, at least not with my setup -- worth investigating if\n  # you have more than one exact same kind of machine\n  # Does the hosts file exist and is distcc in the path?\n  # if test -f ~/.distcc/hosts && type -p distcc >/dev/null 2>&1\n  # then\n  #   # Tell ccache to prefix calls to the compiler with 'distcc'\n  #   export CCACHE_PREFIX=\"distcc\"\n  # fi\n\n  exec ccache \"$xcode_toolchain_dir/usr/bin/clang\" \"$@\"\nelse\n  exec clang \"$@\"\nfi\n"
  },
  {
    "path": "scripts/emulator.mjs",
    "content": "#!/usr/bin/env node\n\n// inspired by `np` – https://github.com/sindresorhus/np\n\nimport Listr from 'listr'\nimport inquirer from 'inquirer'\nimport { execSync } from 'child_process'\n\nconst launchFirst = process.argv[2]\nconst noSnapshot = process.argv[3]\n\nconst emulators = execSync(`$ANDROID_HOME/emulator/emulator -list-avds`).toString()\nconst sdks = execSync(\n  `$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --list | grep \"system-images/\" `,\n).toString()\n\nconst askForEmu = [\n  {\n    type: 'list',\n    name: 'name',\n    message: 'Pick Emulator from list or add a new one',\n    pageSize: emulators.length + 4,\n    choices: emulators\n      .split('\\n')\n      .filter((value) => value.length > 0)\n      .map((emu) => ({\n        name: emu,\n        value: emu,\n      }))\n      .concat([\n        new inquirer.Separator(),\n        {\n          name: 'New Emulator',\n          value: null,\n        },\n        new inquirer.Separator(),\n      ]),\n  },\n  {\n    type: 'list',\n    name: 'sdk',\n    when: (answers) => !answers.name,\n    message: 'Sdk Version:',\n    pageSize: sdks.length + 4,\n    choices: sdks\n      .split('\\n')\n      .filter((value) => value.length > 0)\n      .map((sdk) => ({\n        name: sdk.split(' ')[2].slice(14),\n        value: sdk.split(' ')[2],\n      }))\n      .concat([\n        new inquirer.Separator(),\n        {\n          name: 'Other Sdk (Require download)',\n          value: null,\n        },\n        new inquirer.Separator(),\n      ]),\n  },\n  {\n    type: 'input',\n    name: 'sdk',\n    when: (answers) => !answers.sdk && !answers.name,\n    message: 'Sdk Version (21-28):',\n    validate: (input) => input > 20 && input < 29,\n  },\n  {\n    type: 'input',\n    name: 'name',\n    when: (answers) => !answers.name,\n    message: 'Name:',\n  },\n]\n\nconst emulatorTasks = (options) => {\n  const { name, sdk } = options\n  const tasks = []\n  if (sdk !== undefined) {\n    const sdkPath =\n      sdk.length === 2 ? `system-images;android-${sdk.replace(/\\s/g, '')};google_apis;x86` : sdk\n    if (sdk.length === 2) {\n      tasks.push({\n        title: 'Downloading Emulator Image',\n        task: () => {\n          // eslint-disable-next-line\n          console.log('Downloading Emulator Image\\nIt may take a while')\n          execSync('touch ~/.android/repositories.cfg')\n          execSync(`$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager \"${sdkPath}\"`)\n        },\n      })\n    }\n    tasks.push({\n      title: `Creating Emulator ${name}`,\n      task: () => {\n        execSync(\n          `echo no | $ANDROID_HOME/tools/bin/avdmanager \\\n             create avd -n ${name.replace(/\\s/g, '')} -k \"${sdkPath}\" --device \"Nexus 6P\"`,\n        )\n      },\n    })\n  }\n  tasks.push({\n    title: 'Open Emulator',\n    task: () => execSync(`$ANDROID_HOME/emulator/emulator @${name}`),\n  })\n  return tasks\n}\n\nif (launchFirst) {\n  execSync(\n    `$ANDROID_HOME/emulator/emulator @${emulators.split('\\n')[0]} ${\n      noSnapshot ? '-no-snapshot' : ''\n    }`,\n  )\n} else {\n  inquirer.prompt(askForEmu).then((options) => {\n    const tasks = emulatorTasks(options)\n    const listr = new Listr(tasks)\n    listr.run()\n  })\n}\n"
  },
  {
    "path": "scripts/emulatorWithJavaCheck",
    "content": "#!/bin/bash\n\nif javac -version | grep -q '10.0'; then\n  export JAVA_OPTS=\"-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee\"\nfi\nif javac -version | grep -q '1.9'; then\n  export JAVA_OPTS=\"-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee\"\nfi\n  node ./scripts/emulator.mjs\n"
  },
  {
    "path": "scripts/make.mjs",
    "content": "#!/usr/bin/env node\n\nimport {\n  pipe,\n  filter,\n  map,\n  mapAsync,\n  endsWith,\n  both,\n  prop,\n  replace,\n  omit,\n  merge,\n  forEach,\n} from 'rambdax'\n\nimport babel from '@babel/core'\nimport klaw from 'klaw-sync'\nimport mkdirp from 'mkdirp'\nimport path from 'path'\nimport fs from 'fs-extra'\nimport glob from 'glob'\nimport { fileURLToPath } from 'url'\nimport prettyJson from 'json-stringify-pretty-compact'\nimport chokidar from 'chokidar'\nimport anymatch from 'anymatch'\nimport rimraf from 'rimraf'\n\nimport pkg from './pkg.cjs'\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url))\n\nconst resolvePath = (...paths) => path.resolve(__dirname, '..', ...paths)\nconst isDevelopment = process.env.NODE_ENV === 'development'\n\nconst SRC_MODULES = 'src'\nconst CJS_MODULES = 'cjs'\n\nconst SOURCE_PATH = resolvePath('src')\nconst DIST_PATH = resolvePath('dist')\nconst DEV_PATH = process.env.DEV_PATH || resolvePath('dev')\n\nconst DIR_PATH = isDevelopment ? DEV_PATH : DIST_PATH\n\nconst DO_NOT_BUILD_PATHS = [\n  /__tests__/,\n  /__typetests__/,\n  /__playground__/,\n  /test\\.js/,\n  /integrationTest/,\n  /__mocks__/,\n  /\\.DS_Store/,\n  /package\\.json/,\n]\n\nconst isNotIncludedInBuildPaths = (value) => !anymatch(DO_NOT_BUILD_PATHS, value)\n\nconst cleanFolder = (dir) => rimraf.sync(dir)\n\nconst takeFiles = pipe(prop('path'), both(endsWith('.js'), isNotIncludedInBuildPaths))\n\nconst takeModules = pipe(filter(takeFiles), map(prop('path')))\n\nconst removeSourcePath = replace(SOURCE_PATH, '')\n\nconst createModulePath = (format) => {\n  const formatPathSegment = format === CJS_MODULES ? [] : [format]\n  const modulePath = resolvePath(DIR_PATH, ...formatPathSegment)\n  return replace(SOURCE_PATH, modulePath)\n}\n\nconst createFolder = (dir) => mkdirp.sync(resolvePath(dir))\n\nconst babelTransform = (format, file) => {\n  if (format === SRC_MODULES) {\n    // no transform, just return source\n    return fs.readFileSync(file)\n  }\n\n  const { code } = babel.transformFileSync(file, {})\n  return code\n}\n\nconst paths = klaw(SOURCE_PATH)\nconst modules = takeModules(paths)\n\nconst buildModule = (format) => (file) => {\n  const modulePath = createModulePath(format)\n  const code = babelTransform(format, file)\n  const filename = modulePath(file)\n\n  createFolder(path.dirname(filename))\n  fs.writeFileSync(filename, code)\n}\n\nconst prepareJson = pipe(\n  omit(['scripts']),\n  merge({\n    main: './index.js',\n    sideEffects: false,\n    types: 'index.d.ts',\n  }),\n  (obj) => prettyJson(obj),\n)\n\nconst createPackageJson = (dir, obj) => {\n  const json = prepareJson(obj)\n  fs.writeFileSync(resolvePath(dir, 'package.json'), json)\n}\n\nconst copyFiles = (dir, files, rm = resolvePath()) =>\n  forEach((file) => {\n    fs.copySync(file, path.join(dir, replace(rm, '', file)))\n  }, files)\n\nconst copyNonJavaScriptFiles = (buildPath) => {\n  createPackageJson(buildPath, pkg)\n  copyFiles(buildPath, [\n    'LICENSE',\n    // 'README.md',\n    'yarn.lock',\n    'WatermelonDB.podspec',\n    'react-native.config.js', // NOTE: this is needed for autolinking\n    // 'docs',\n    'native/shared',\n    'native/ios',\n    'native/android',\n    'native/android-jsi',\n    'native/windows',\n  ])\n  cleanFolder(`${buildPath}/native/ios/WatermelonDB.xcodeproj/xcuserdata`)\n  cleanFolder(`${buildPath}/native/android/build`)\n  cleanFolder(`${buildPath}/native/android/bin/build`)\n  cleanFolder(`${buildPath}/native/android-jsi/.cxx`)\n  cleanFolder(`${buildPath}/native/android-jsi/.externalNativeBuild`)\n  cleanFolder(`${buildPath}/native/android-jsi/build`)\n  cleanFolder(`${buildPath}/native/android-jsi/bin/build`)\n  cleanFolder(`${buildPath}/native/windows/.vs`)\n  cleanFolder(`${buildPath}/native/windows/x64`)\n  cleanFolder(`${buildPath}/native/windows/WatermelonDB/Generated Files`)\n  cleanFolder(`${buildPath}/native/windows/WatermelonDB/obj`)\n  cleanFolder(`${buildPath}/native/windows/WatermelonDB/x64`)\n}\n\nif (isDevelopment) {\n  const buildCjsModule = buildModule(CJS_MODULES)\n  const buildSrcModule = buildModule(SRC_MODULES)\n\n  const buildFile = (file) => {\n    if (file.match(/\\.js$/)) {\n      buildSrcModule(file)\n      buildCjsModule(file)\n    } else if (file.match(/\\.d.ts$/)) {\n      // Typescript\n      fs.copySync(file, path.join(DEV_PATH, replace(SOURCE_PATH, '', file)))\n    } else {\n      // native files\n      fs.copySync(file, path.join(DEV_PATH, replace(resolvePath(), '', file)))\n    }\n  }\n\n  cleanFolder(DEV_PATH)\n  createFolder(DEV_PATH)\n  copyNonJavaScriptFiles(DEV_PATH)\n\n  chokidar\n    .watch(\n      [\n        resolvePath('src'),\n        resolvePath('native/ios/WatermelonDB'),\n        resolvePath('native/shared'),\n        resolvePath('native/android/src/main'),\n        resolvePath('native/android-jsi/src/main'),\n      ],\n      {\n        ignored: DO_NOT_BUILD_PATHS,\n      },\n    )\n    .on('all', (event, fileOrDir) => {\n      // eslint-disable-next-line\n      switch (event) {\n        case 'add':\n        case 'change':\n          // eslint-disable-next-line\n          console.log(`✓ ${removeSourcePath(fileOrDir)}`)\n          buildFile(fileOrDir)\n          break\n        default:\n          break\n      }\n    })\n} else {\n  const buildModules = (format) => mapAsync(buildModule(format))\n  const buildCjsModules = buildModules(CJS_MODULES)\n  const buildSrcModules = buildModules(SRC_MODULES)\n\n  cleanFolder(DIST_PATH)\n  createFolder(DIST_PATH)\n  copyNonJavaScriptFiles(DIST_PATH)\n\n  buildSrcModules(modules)\n  buildCjsModules(modules)\n\n  // copy typescript definitions\n  glob(`${SOURCE_PATH}/**/*.d.ts`, {}, (err, files) => {\n    files.forEach((file) => {\n      fs.copySync(file, path.join(DIST_PATH, replace(SOURCE_PATH, '', file)))\n    })\n  })\n}\n"
  },
  {
    "path": "scripts/pkg.cjs",
    "content": "const pkg = require('../package.json')\n\nmodule.exports = pkg\n"
  },
  {
    "path": "scripts/release.mjs",
    "content": "#!/usr/bin/env node\n/* eslint-disable no-console */\n\n// inspired by `np` – https://github.com/sindresorhus/np\n\nimport Listr from 'listr'\nimport listrInput from 'listr-input'\nimport { execa } from 'execa'\nimport inquirer from 'inquirer'\nimport semver from 'semver'\n\nimport pkg from './pkg.cjs'\n\nconst increments = ['patch', 'minor', 'major', 'prepatch', 'preminor', 'premajor', 'prerelease']\n\nconst getNewVersion = (input) => semver.inc(pkg.version, input)\nconst isValidAndGreaterVersion = (input) =>\n  Boolean(semver.valid(input)) && semver.gt(input, pkg.version)\n\nconst throwError = (str) => (info) => {\n  throw new Error(str, JSON.stringify(info))\n}\n\nconst promiseTimeoutError = (errorMessage, ms) =>\n  new Promise((_, reject) => {\n    setTimeout(reject, ms, new Error(errorMessage))\n  })\n\nconst skipChecks = process.argv.includes('--skip-checks')\n\nconst questions = [\n  {\n    type: 'list',\n    name: 'version',\n    message: `Specify new version (current version: ${pkg.version}):`,\n    pageSize: 10,\n    choices: increments\n      .map((inc) => ({\n        name: `${inc} \t${semver.inc(pkg.version, inc)}`,\n        value: inc,\n      }))\n      .concat([\n        new inquirer.Separator(),\n        {\n          name: 'Other (specify)',\n          value: undefined,\n        },\n      ]),\n    filter: (input) => (increments.includes(input) ? getNewVersion(input) : input),\n  },\n  {\n    type: 'input',\n    name: 'version',\n    message: 'Version:',\n    when: (answers) => !answers.version,\n    validate: (input) => isValidAndGreaterVersion(input),\n  },\n]\n\nconst buildTasks = (options) => {\n  const { version } = options\n\n  const isPrerelease = version.includes('-')\n  const tag = isPrerelease ? 'next' : 'latest'\n\n  // eslint-disable-next-line\n  console.warn(`Will publish with NPM tag ${tag}`)\n\n  return [\n    {\n      title: 'ping npm registry',\n      task: () =>\n        Promise.race([\n          execa('npm', ['ping']).catch(throwError('connection to npm registry failed')),\n          promiseTimeoutError('Connection to npm registry timed out', 5000),\n        ]),\n    },\n    ...(isPrerelease\n      ? [\n          {\n            title: 'WARN: Skipping git checks',\n            task: () => {},\n          },\n        ]\n      : [\n          {\n            title: 'check current branch',\n            task: () =>\n              execa('git', ['symbolic-ref', '--short', 'HEAD']).then((info) => {\n                if (!(info.stdout === 'master' || info.stdout.startsWith('release/'))) {\n                  throwError('releases should be made from `master` or `release/xxx` branch')(info)\n                }\n              }),\n          },\n          {\n            title: 'check local working tree',\n            task: () =>\n              execa('git', ['status', '--porcelain']).then((info) => {\n                if (info.stdout !== '') {\n                  throwError('commit or stash changes first')(info)\n                }\n              }),\n          },\n          {\n            title: 'check remote history',\n            task: () =>\n              execa('git', ['rev-list', '--count', '--left-only', '@{u}...HEAD']).then((info) => {\n                if (info.stdout !== '0') {\n                  throwError('please pull changes first')(info)\n                }\n              }),\n          },\n        ]),\n    ...(!skipChecks\n      ? [\n          {\n            title: 'check tests',\n            task: () => execa('yarn', ['test']),\n          },\n          {\n            title: 'check flow',\n            task: () => execa('yarn', ['flow']),\n          },\n          {\n            title: 'check eslint',\n            task: () => execa('yarn', ['eslint']),\n          },\n        ]\n      : [\n          {\n            title: 'WARN: Skipping test/flow/lint checks',\n            task: () => {},\n          },\n        ]),\n    // TODO: Bring those back when metro config is fixed\n    // {\n    //   title: 'check iOS tests',\n    //   task: () => execa('yarn', ['test:ios']),\n    // },\n    // {\n    //   title: 'check Android tests',\n    //   task: () => execa('yarn', ['test:android']),\n    // },\n    {\n      title: 'bump version',\n      task: () => execa('yarn', ['version', '--new-version', version]),\n    },\n    {\n      title: 'build package',\n      task: () => execa('yarn', ['build']),\n    },\n    {\n      title: 'pack tgz',\n      task: () => execa('yarn', ['pack'], { cwd: './dist' }),\n    },\n    {\n      title: 'publish package',\n      task: () => {\n        console.log('\\u0007')\n        return listrInput('2-Factor Authentication code', {\n          validate: (otp) => {\n            return Boolean(otp && otp.match(/\\d{6}/))\n          },\n          done: (otp) =>\n            execa('npm', [\n              'publish',\n              `./dist/nozbe-watermelondb-v${version}.tgz`,\n              `--otp=${otp}`,\n              '--tag',\n              tag,\n            ]),\n        })\n      },\n    },\n    {\n      title: 'git push',\n      task: () => execa('git', ['push']),\n    },\n    {\n      title: 'push tags',\n      task: () => execa('git', ['push', '--tags', '--follow-tags']),\n    },\n    ...(isPrerelease\n      ? []\n      : [\n          {\n            title: 'update docs version',\n            task: () => execa('yarn', ['docs:version', version]),\n          },\n          {\n            title: 'update docs',\n            task: () => execa('yarn', ['docs']),\n          },\n        ]),\n  ]\n}\n\ninquirer.prompt(questions).then((options) => {\n  const tasks = buildTasks(options)\n  const listr = new Listr(tasks)\n  listr.run()\n})\n"
  },
  {
    "path": "scripts/replace-docs-path.mjs",
    "content": "import fs from 'node:fs'\nimport { promisify } from 'node:util'\n\nconst readFileAsync = promisify(fs.readFile)\nconst writeFileAsync = promisify(fs.writeFile)\n\nconst filePath = process.argv[2]\n\nasync function main() {\n  const result = await readFileAsync(filePath, 'utf8')\n\n  const newResult = result.replaceAll('docs-website/docs/docs/', '').replaceAll('<', '&lt;')\n\n  await writeFileAsync(filePath, newResult, 'utf8')\n}\n\nmain()\n"
  },
  {
    "path": "scripts/retryEmuAndTest",
    "content": "#!/bin/bash\n\nTERM=dumb yarn test:android\nif [ \"$?\" -ne 0 ]; then\n  adb kill-server &\n  adb start-server &\n  TERM=dumb yarn test:android\nfi\n"
  },
  {
    "path": "scripts/test-ios",
    "content": "#!/bin/bash\n\nset -x\nset -e\n\nxcodebuild -workspace native/iosTest/WatermelonTester.xcworkspace -scheme 'WatermelonTester' -destination 'name=iPhone 16,OS=18.1' test\n"
  },
  {
    "path": "scripts/update-docusaurus",
    "content": "#!/bin/bash\n\nset -e\n\ncp README.md ./docs-website/docs/docs/README.md && \\\necho \"---\ntitle: Check out the README\nhide_title: true\n---\n\" | cat - ./docs-website/docs/docs/README.md > temp && mv temp ./docs-website/docs/docs/README.md && \\\ncp CONTRIBUTING.md ./docs-website/docs/docs/CONTRIBUTING.md && \\\necho \"---\ntitle: Contributing\nhide_title: true\n---\n\" | cat - ./docs-website/docs/docs/CONTRIBUTING.md > temp && mv temp ./docs-website/docs/docs/CONTRIBUTING.md && \\\ncp CHANGELOG.md ./docs-website/docs/docs/CHANGELOG.md && \\\nnode scripts/replace-docs-path.mjs ./docs-website/docs/docs/CHANGELOG.md \n\n"
  },
  {
    "path": "src/Collection/RecordCache.d.ts",
    "content": "import type Model from '../Model'\nimport type { RecordId } from '../Model'\nimport type Collection from './index'\nimport type { CachedQueryResult } from '../adapters/type'\nimport type { TableName } from '../Schema'\nimport type { RawRecord } from '../RawRecord'\n\ntype Instantiator<T> = (_: RawRecord) => T\n\nexport default class RecordCache<Record extends Model> {\n  map: Map<RecordId, Record>\n\n  tableName: TableName<Record>\n\n  recordInsantiator: Instantiator<Record>\n\n  _debugCollection: Collection<Record>\n\n  constructor(\n    tableName: TableName<Record>,\n    recordInsantiator: Instantiator<Record>,\n    collection: Collection<Record>,\n  )\n\n  get(id: RecordId): Record | undefined\n\n  add(record: Record): void\n\n  delete(record: Record): void\n\n  unsafeClear(): void\n\n  recordsFromQueryResult(result: CachedQueryResult): Record[]\n\n  recordFromQueryResult(result: RecordId | RawRecord): Record\n\n  _cachedModelForId(id: RecordId): Record\n\n  _modelForRaw(raw: RawRecord): Record\n}\n"
  },
  {
    "path": "src/Collection/RecordCache.js",
    "content": "// @flow\n\nimport logger from '../utils/common/logger'\n\nimport type Model, { RecordId } from '../Model'\nimport type Collection from './index'\nimport type { CachedQueryResult } from '../adapters/type'\nimport type { TableName } from '../Schema'\nimport type { RawRecord } from '../RawRecord'\n\ntype Instantiator<T> = (RawRecord) => T\n\nexport default class RecordCache<Record: Model> {\n  map: Map<RecordId, Record> = new Map()\n\n  tableName: TableName<Record>\n\n  recordInsantiator: Instantiator<Record>\n\n  _debugCollection: Collection<Record>\n\n  constructor(\n    tableName: TableName<Record>,\n    recordInsantiator: Instantiator<Record>,\n    collection: Collection<Record>,\n  ): void {\n    this.tableName = tableName\n    this.recordInsantiator = recordInsantiator\n    this._debugCollection = collection\n  }\n\n  get(id: RecordId): ?Record {\n    return this.map.get(id)\n  }\n\n  add(record: Record): void {\n    this.map.set(record.id, record)\n  }\n\n  delete(record: Record): void {\n    this.map.delete(record.id)\n  }\n\n  unsafeClear(): void {\n    this.map = new Map()\n  }\n\n  recordsFromQueryResult(result: CachedQueryResult): Record[] {\n    return result.map((res) => this.recordFromQueryResult(res))\n  }\n\n  recordFromQueryResult(result: RecordId | RawRecord): Record {\n    if (typeof result === 'string') {\n      return this._cachedModelForId(result)\n    }\n\n    return this._modelForRaw(result)\n  }\n\n  rawRecordsFromQueryResult(results: CachedQueryResult): RawRecord[] {\n    return results.map((res) => {\n      if (typeof res === 'string') {\n        return this._cachedModelForId(res)._raw\n      }\n\n      const cachedRecord = this.map.get(res.id)\n      return cachedRecord ? cachedRecord._raw : res\n    })\n  }\n\n  _cachedModelForId(id: RecordId): Record {\n    const record = this.map.get(id)\n\n    if (!record) {\n      const message = `Record ID ${this.tableName}#${id} was sent over the bridge, but it's not cached`\n      logger.error(message)\n\n      // Reaching this branch indicates a WatermelonDB/adapter bug. We should never get a record ID\n      // if we don't have it in our cache. This probably means that something crashed when adding to\n      // adapter-side cached record ID set. NozbeTeams telemetry indicates that this bug *does*\n      // nonetheless occur, so when it does, print out useful diagnostics and attempt to recover by\n      // resetting adapter-side cached set\n      try {\n        const adapter = this._debugCollection.database.adapter.underlyingAdapter\n\n        // $FlowFixMe\n        if (adapter._clearCachedRecords) {\n          // $FlowFixMe\n          adapter._clearCachedRecords()\n        }\n\n        // $FlowFixMe\n        if (adapter._debugDignoseMissingRecord) {\n          // $FlowFixMe\n          adapter._debugDignoseMissingRecord(this.tableName, id)\n        }\n      } catch (error) {\n        logger.warn(`Ran into an error while running diagnostics:`)\n        logger.warn(error)\n      }\n\n      throw new Error(message)\n    }\n\n    return record\n  }\n\n  _modelForRaw(raw: RawRecord, warnIfCached: boolean = true): Record {\n    // Sanity check: is this already cached?\n    const cachedRecord = this.map.get(raw.id)\n\n    if (cachedRecord) {\n      // This may legitimately happen if we previously got ID without a record and we cleared\n      // adapter-side cached record ID maps to recover\n      warnIfCached &&\n        logger.warn(\n          `Record ${this.tableName}#${cachedRecord.id} is cached, but full raw object was sent over the bridge`,\n        )\n      return cachedRecord\n    }\n\n    // Return new model\n    const newRecord = this.recordInsantiator(raw)\n    this.add(newRecord)\n    return newRecord\n  }\n}\n"
  },
  {
    "path": "src/Collection/index.d.ts",
    "content": "// @flow\nimport { Observable, Subject } from '../utils/rx'\nimport type { ResultCallback } from '../utils/fp/Result'\nimport type { ArrayOrSpreadFn } from '../utils/fp'\nimport type { Unsubscribe } from '../utils/subscriptions'\n\nimport Query from '../Query'\nimport type Database from '../Database'\nimport type Model from '../Model'\nimport type { RecordId } from '../Model'\nimport type { Clause } from '../QueryDescription'\nimport type { TableName, TableSchema } from '../Schema'\nimport { DirtyRaw } from '../RawRecord'\n\nimport RecordCache from './RecordCache'\n\ntype CollectionChangeType = 'created' | 'updated' | 'destroyed'\nexport type CollectionChange<Record extends Model> = { record: Record; type: CollectionChangeType }\nexport type CollectionChangeSet<T extends Model> = CollectionChange<T>[]\n\nexport default class Collection<Record extends Model> {\n  database: Database\n\n  modelClass: Record\n\n  // Emits event every time a record inside Collection changes or is deleted\n  // (Use Query API to observe collection changes)\n  changes: Subject<CollectionChangeSet<Record>>\n\n  _cache: RecordCache<Record>\n\n  constructor(database: Database, ModelClass: Record)\n\n  get db(): Database\n\n  // Finds a record with the given ID\n  // Promise will reject if not found\n  find(id: RecordId): Promise<Record>\n\n  // Finds the given record and starts observing it\n  // (with the same semantics as when calling `model.observe()`)\n  findAndObserve(id: RecordId): Observable<Record>\n\n  // Query records of this type\n  query: ArrayOrSpreadFn<Clause, Query<Record>>\n\n  // Creates a new record in this collection\n  // Pass a function to set attributes of the record.\n  //\n  // Example:\n  // collections.get(Tables.tasks).create(task => {\n  //   task.name = 'Task name'\n  // })\n  create(recordBuilder: (record: Record) => void): Promise<Record>\n\n  // Prepares a new record in this collection\n  // Use this to batch-create multiple records\n  prepareCreate(recordBuilder: (_: Record) => void): Record\n\n  // Prepares a new record in this collection based on a raw object\n  // e.g. `{ foo: 'bar' }`. Don't use this unless you know how RawRecords work in WatermelonDB\n  // this is useful as a performance optimization or if you're implementing your own sync mechanism\n  prepareCreateFromDirtyRaw(dirtyRaw: DirtyRaw): Record\n\n  // Prepares a disposable record in this collection based on a raw object, e.g. `{ foo: 'bar' }`.\n  // Disposable records are read-only, cannot be saved in the database, updated, or deleted\n  // they only exist for as long as you keep a reference to them in memory.\n  // Don't use this unless you know how RawRecords work in WatermelonDB.\n  // This is useful when you're adding online-only features to an otherwise offline-first app\n  disposableFromDirtyRaw(dirtyRaw: DirtyRaw): Record\n\n  // *** Implementation details ***\n\n  get table(): TableName<Record>\n\n  get schema(): TableSchema\n\n  // See: Query.fetch\n  _fetchQuery(query: Query<Record>, callback: ResultCallback<Record[]>): void\n\n  _fetchIds(query: Query<Record>, callback: ResultCallback<RecordId[]>): void\n\n  _fetchCount(query: Query<Record>, callback: ResultCallback<number>): void\n\n  _unsafeFetchRaw(query: Query<Record>, callback: ResultCallback<any[]>): void\n\n  // Fetches exactly one record (See: Collection.find)\n  _fetchRecord(id: RecordId, callback: ResultCallback<Record>): void\n\n  _applyChangesToCache(operations: CollectionChangeSet<Record>): void\n\n  _notify(operations: CollectionChangeSet<Record>): void\n\n  _subscribers: [(operations: CollectionChangeSet<Record>) => void, any][]\n\n  experimentalSubscribe(\n    subscriber: (operations: CollectionChangeSet<Record>) => void,\n    debugInfo?: any,\n  ): Unsubscribe\n}\n"
  },
  {
    "path": "src/Collection/index.js",
    "content": "// @flow\nimport { Observable, Subject } from '../utils/rx'\nimport invariant from '../utils/common/invariant'\nimport {\n  noop,\n  fromArrayOrSpread,\n  // eslint-disable-next-line no-unused-vars\n  type ArrayOrSpreadFn,\n} from '../utils/fp'\nimport { type ResultCallback, toPromise, mapValue } from '../utils/fp/Result'\nimport { type Unsubscribe } from '../utils/subscriptions'\n\nimport Query from '../Query'\nimport type Database from '../Database'\nimport type Model, { RecordId } from '../Model'\nimport type { Clause } from '../QueryDescription'\nimport { type TableName, type TableSchema } from '../Schema'\nimport { type DirtyRaw } from '../RawRecord'\n\nimport RecordCache from './RecordCache'\n\ntype CollectionChangeType = 'created' | 'updated' | 'destroyed'\nexport type CollectionChange<Record: Model> = { record: Record, type: CollectionChangeType }\nexport type CollectionChangeSet<T> = CollectionChange<T>[]\n\nexport default class Collection<Record: Model> {\n  database: Database\n\n  /**\n   * `Model` subclass associated with this Collection\n   */\n  modelClass: Class<Record>\n\n  /**\n   * An `Rx.Subject` that emits a signal on every change (record creation/update/deletion) in\n   * this Collection.\n   *\n   * The emissions contain information about which record was changed and what the change was.\n   *\n   * Warning: You can easily introduce performance bugs in your application by using this method\n   * inappropriately. You generally should just use the `Query` API.\n   */\n  changes: Subject<CollectionChangeSet<Record>> = new Subject()\n\n  _cache: RecordCache<Record>\n\n  constructor(database: Database, ModelClass: Class<Record>): void {\n    this.database = database\n    this.modelClass = ModelClass\n    this._cache = new RecordCache<Record>(\n      (ModelClass.table: $FlowFixMe),\n      (raw) => new ModelClass((this: $FlowFixMe), raw),\n      this,\n    )\n  }\n\n  /**\n   * `Database` associated with this Collection.\n   */\n  get db(): Database {\n    return this.database\n  }\n\n  /**\n   * Table name associated with this Collection\n   */\n  get table(): TableName<Record> {\n    // $FlowFixMe\n    return this.modelClass.table\n  }\n\n  /**\n   * Table schema associated with this Collection\n   */\n  get schema(): TableSchema {\n    return this.database.schema.tables[this.table]\n  }\n\n  /**\n   * Fetches the record with the given ID.\n   *\n   * If the record is not found, the Promise will reject.\n   */\n  async find(id: RecordId): Promise<Record> {\n    return toPromise((callback) => this._fetchRecord(id, callback))\n  }\n\n  /**\n   * Fetches the given record and then starts observing it.\n   *\n   * This is a convenience method that's equivalent to\n   * `collection.find(id)`, followed by `record.observe()`.\n   */\n  findAndObserve(id: RecordId): Observable<Record> {\n    return Observable.create((observer) => {\n      let unsubscribe = null\n      let unsubscribed = false\n      this._fetchRecord(id, (result) => {\n        if (result.value) {\n          const record = result.value\n          observer.next(record)\n          unsubscribe = record.experimentalSubscribe((isDeleted) => {\n            if (!unsubscribed) {\n              isDeleted ? observer.complete() : observer.next(record)\n            }\n          })\n        } else {\n          // $FlowFixMe\n          observer.error(result.error)\n        }\n      })\n      return () => {\n        unsubscribed = true\n        unsubscribe && unsubscribe()\n      }\n    })\n  }\n\n  /*:: query: ArrayOrSpreadFn<Clause, Query<Record>>  */\n  /**\n   * Returns a `Query` with conditions given.\n   *\n   * You can pass conditions as multiple arguments or a single array.\n   *\n   * See docs for details about the Query API.\n   */\n  // $FlowFixMe\n  query(...args: Clause[]): Query<Record> {\n    const clauses = fromArrayOrSpread<Clause>(args, 'Collection.query', 'Clause')\n    return new Query(this, clauses)\n  }\n\n  /**\n   * Creates a new record.\n   * Pass a function to set attributes of the new record.\n   *\n   * Note: This method must be called within a Writer {@link Database#write}.\n   *\n   * @example\n   * ```js\n   * db.get(Tables.tasks).create(task => {\n   *   task.name = 'Task name'\n   * })\n   * ```\n   */\n  async create(recordBuilder: (Record) => void = noop): Promise<Record> {\n    this.database._ensureInWriter(`Collection.create()`)\n\n    const record = this.prepareCreate(recordBuilder)\n    await this.database.batch(record)\n    return record\n  }\n\n  /**\n   * Prepares a new record to be created\n   *\n   * Use this to batch-execute multiple changes at once.\n   * @see {Collection#create}\n   * @see {Database#batch}\n   */\n  prepareCreate(recordBuilder: (Record) => void = noop): Record {\n    // $FlowFixMe\n    return this.modelClass._prepareCreate(this, recordBuilder)\n  }\n\n  /**\n   * Prepares a new record to be created, based on a raw object.\n   *\n   * Don't use this unless you know how RawRecords work in WatermelonDB. See docs for more details.\n   *\n   * This is useful as a performance optimization, when adding online-only features to an otherwise\n   * offline-first app, or if you're implementing your own sync mechanism.\n   */\n  prepareCreateFromDirtyRaw(dirtyRaw: DirtyRaw): Record {\n    // $FlowFixMe\n    return this.modelClass._prepareCreateFromDirtyRaw(this, dirtyRaw)\n  }\n\n  /**\n   * Returns a disposable record, based on a raw object.\n   *\n   * A disposable record is a read-only record that **does not** exist in the actual database. It's\n   * not cached and cannot be saved in the database, updated, deleted, queried, or found by ID. It\n   * only exists for as long as you keep a reference to it.\n   *\n   * Don't use this unless you know how RawRecords work in WatermelonDB. See docs for more details.\n   *\n   * This is useful for adding online-only features to an otherwise offline-first app, or for\n   * temporary objects that are not meant to be persisted (as you can reuse existing Model helpers\n   * and compatible UI components to display a disposable record).\n   */\n  disposableFromDirtyRaw(dirtyRaw: DirtyRaw): Record {\n    // $FlowFixMe\n    return this.modelClass._disposableFromDirtyRaw(this, dirtyRaw)\n  }\n\n  // *** Implementation details ***\n\n  // See: Query.fetch\n  _fetchQuery(query: Query<Record>, callback: ResultCallback<Record[]>): void {\n    this.database.adapter.underlyingAdapter.query(query.serialize(), (result) =>\n      callback(mapValue((rawRecords) => this._cache.recordsFromQueryResult(rawRecords), result)),\n    )\n  }\n\n  _fetchIds(query: Query<Record>, callback: ResultCallback<RecordId[]>): void {\n    this.database.adapter.underlyingAdapter.queryIds(query.serialize(), callback)\n  }\n\n  _fetchCount(query: Query<Record>, callback: ResultCallback<number>): void {\n    this.database.adapter.underlyingAdapter.count(query.serialize(), callback)\n  }\n\n  _unsafeFetchRaw(query: Query<Record>, callback: ResultCallback<any[]>): void {\n    this.database.adapter.underlyingAdapter.unsafeQueryRaw(query.serialize(), callback)\n  }\n\n  // Fetches exactly one record (See: Collection.find)\n  _fetchRecord(id: RecordId, callback: ResultCallback<Record>): void {\n    if (typeof id !== 'string') {\n      callback({ error: new Error(`Invalid record ID ${this.table}#${id}`) })\n      return\n    }\n\n    const cachedRecord = this._cache.get(id)\n\n    if (cachedRecord) {\n      callback({ value: cachedRecord })\n      return\n    }\n\n    this.database.adapter.underlyingAdapter.find(this.table, id, (result) =>\n      callback(\n        mapValue((rawRecord) => {\n          invariant(rawRecord, `Record ${this.table}#${id} not found`)\n          return this._cache.recordFromQueryResult(rawRecord)\n        }, result),\n      ),\n    )\n  }\n\n  _applyChangesToCache(operations: CollectionChangeSet<Record>): void {\n    operations.forEach(({ record, type }) => {\n      if (type === 'created') {\n        record._preparedState = null\n        this._cache.add(record)\n      } else if (type === 'destroyed') {\n        this._cache.delete(record)\n      }\n    })\n  }\n\n  _notify(operations: CollectionChangeSet<Record>): void {\n    const collectionChangeNotifySubscribers = ([subscriber]: [\n      (CollectionChangeSet<Record>) => void,\n      any,\n    ]): void => {\n      subscriber(operations)\n    }\n    this._subscribers.forEach(collectionChangeNotifySubscribers)\n    this.changes.next(operations)\n\n    const collectionChangeNotifyModels = ({ record, type }: CollectionChange<Record>): void => {\n      if (type === 'updated') {\n        record._notifyChanged()\n      } else if (type === 'destroyed') {\n        record._notifyDestroyed()\n      }\n    }\n    operations.forEach(collectionChangeNotifyModels)\n  }\n\n  _subscribers: [(CollectionChangeSet<Record>) => void, any][] = []\n\n  /**\n   * Notifies `subscriber` on every change (record creation/update/deletion) in this Collection.\n   *\n   * Notifications contain information about which record was changed and what the change was.\n   * (Currently, subscribers are called before `changes` emissions, but this behavior might change)\n   *\n   * Warning: You can easily introduce performance bugs in your application by using this method\n   * inappropriately. You generally should just use the `Query` API.\n   */\n  experimentalSubscribe(\n    subscriber: (CollectionChangeSet<Record>) => void,\n    debugInfo?: any,\n  ): Unsubscribe {\n    const entry = [subscriber, debugInfo]\n    this._subscribers.push(entry)\n\n    return () => {\n      const idx = this._subscribers.indexOf(entry)\n      idx !== -1 && this._subscribers.splice(idx, 1)\n    }\n  }\n}\n"
  },
  {
    "path": "src/Collection/test.js",
    "content": "import { expectToRejectWithMessage } from '../__tests__/utils'\nimport { noop } from '../utils/fp'\n\nimport Query from '../Query'\nimport * as Q from '../QueryDescription'\nimport { logger } from '../utils/common'\nimport { toPromise } from '../utils/fp/Result'\n\nimport { mockDatabase, MockTask, testSchema } from '../__tests__/testModels'\n\nconst mockQuery = (collection) => new Query(collection, [Q.where('a', 'b')])\n\ndescribe('Collection', () => {\n  it(`exposes database`, () => {\n    const { db, projects } = mockDatabase()\n    expect(projects.database).toBe(db)\n    expect(projects.db).toBe(db)\n  })\n  it('exposes schema', () => {\n    const { tasks, projects } = mockDatabase()\n\n    expect(tasks.schema).toBe(testSchema.tables.mock_tasks)\n    expect(tasks.schema.name).toBe('mock_tasks')\n    expect(tasks.schema.columns.name).toEqual({ name: 'name', type: 'string' })\n\n    expect(projects.schema).toBe(testSchema.tables.mock_projects)\n  })\n  it(`exposes query()`, () => {\n    const { tasks } = mockDatabase()\n    const conditions = [Q.where('a', 'b'), Q.where('c', 'd')]\n    const query = tasks.query(...conditions)\n    expect(query).toBeInstanceOf(Query)\n    expect(query.collection).toBe(tasks)\n  })\n  it(`query() can accept both a spread and an array`, () => {\n    const { tasks } = mockDatabase()\n    const conditions = [Q.where('a', 'b'), Q.where('c', 'd')]\n    expect(tasks.query(...conditions).description).toEqual(tasks.query(conditions).description)\n  })\n})\n\ndescribe('finding records', () => {\n  it('finds records in cache if available', async () => {\n    const { tasks: collection } = mockDatabase()\n\n    const m1 = new MockTask(collection, { id: 'm1' })\n    collection._cache.add(m1)\n\n    expect(await collection.find('m1')).toBe(m1)\n\n    const m2 = new MockTask(collection, { id: 'm2' })\n    collection._cache.add(m2)\n\n    expect(await collection.find('m1')).toBe(m1)\n    expect(await collection.find('m2')).toBe(m2)\n  })\n  it('finds records in database if not in cache', async () => {\n    const { tasks: collection, adapter } = mockDatabase()\n\n    // TODO: Don't mock\n    // TODO: Should ID (not raw) response be tested?\n    adapter.find = jest\n      .fn()\n      .mockImplementation((table, id, callback) => callback({ value: { id: 'm1' } }))\n\n    // calls db\n    const m1 = await collection.find('m1')\n    expect(m1._raw).toEqual({ id: 'm1' })\n    expect(m1.id).toBe('m1')\n    expect(m1.table).toBe('mock_tasks')\n    expect(m1.collection).toBe(collection)\n\n    expect(collection._cache.map.size).toBe(1)\n\n    // check call\n    expect(adapter.find.mock.calls[0]).toEqual(['mock_tasks', 'm1', expect.anything()])\n\n    // second find will be from cache\n    const m1Cached = await collection.find('m1')\n    expect(m1Cached).toBe(m1)\n\n    expect(collection._cache.map.size).toBe(1)\n    expect(adapter.find.mock.calls.length).toBe(1)\n  })\n  it('rejects promise if record cannot be found', async () => {\n    const { tasks: collection, adapter } = mockDatabase()\n    const findSpy = jest.spyOn(adapter, 'find')\n\n    await expect(collection.find('m1')).rejects.toBeInstanceOf(Error)\n    await expect(collection.find('m1')).rejects.toBeInstanceOf(Error)\n\n    expect(findSpy.mock.calls.length).toBe(2)\n  })\n  it('quickly rejects for invalid IDs', async () => {\n    const { tasks } = mockDatabase()\n    await expectToRejectWithMessage(tasks.find(), 'Invalid record ID')\n    await expectToRejectWithMessage(tasks.find(null), 'Invalid record ID')\n    await expectToRejectWithMessage(tasks.find({}), 'Invalid record ID')\n  })\n})\n\ndescribe('fetching queries', () => {\n  it('fetches queries and caches records', async () => {\n    const { tasks: collection, adapter } = mockDatabase()\n\n    adapter.query = jest\n      .fn()\n      .mockImplementation((query, cb) => cb({ value: [{ id: 'm1' }, { id: 'm2' }] }))\n\n    const query = mockQuery(collection)\n\n    // fetch, check models\n    const models = await toPromise((callback) => collection._fetchQuery(query, callback))\n    expect(models.length).toBe(2)\n\n    expect(models[0]._raw).toEqual({ id: 'm1' })\n    expect(models[0].id).toBe('m1')\n    expect(models[0].table).toBe('mock_tasks')\n    expect(models[1]._raw).toEqual({ id: 'm2' })\n\n    // check if records were cached\n    expect(collection._cache.map.size).toBe(2)\n    expect(collection._cache.map.get('m1')).toBe(models[0])\n    expect(collection._cache.map.get('m2')).toBe(models[1])\n\n    // check if query was passed correctly\n    expect(adapter.query.mock.calls.length).toBe(1)\n    expect(adapter.query.mock.calls[0][0]).toEqual(query.serialize())\n  })\n  it('fetches query records from cache if possible', async () => {\n    const { tasks: collection, adapter } = mockDatabase()\n\n    adapter.query = jest.fn().mockImplementation((query, cb) => cb({ value: ['m1', { id: 'm2' }] }))\n\n    const m1 = new MockTask(collection, { id: 'm1' })\n    collection._cache.add(m1)\n\n    // fetch, check models\n    const models = await toPromise((cb) => collection._fetchQuery(mockQuery(collection), cb))\n    expect(models.length).toBe(2)\n    expect(models[0]).toBe(m1)\n    expect(models[1]._raw).toEqual({ id: 'm2' })\n\n    // check cache\n    expect(collection._cache.map.get('m2')).toBe(models[1])\n  })\n  it('fetches query records from cache even if full raw object was sent', async () => {\n    const { tasks: collection, adapter } = mockDatabase()\n\n    adapter.query = jest\n      .fn()\n      .mockImplementation((query, cb) => cb({ value: [{ id: 'm1' }, { id: 'm2' }] }))\n\n    const m1 = new MockTask(collection, { id: 'm1' })\n    collection._cache.add(m1)\n\n    // fetch, check if error occured\n    const spy = jest.spyOn(logger, 'warn').mockImplementation(() => {})\n    const models = await toPromise((cb) => collection._fetchQuery(mockQuery(collection), cb))\n    expect(spy).toHaveBeenCalledTimes(1)\n    spy.mockRestore()\n\n    // check models\n    expect(models.length).toBe(2)\n    expect(models[0]).toBe(m1)\n    expect(models[1]._raw).toEqual({ id: 'm2' })\n  })\n  it('fetches counts', async () => {\n    const { tasks: collection, adapter } = mockDatabase()\n\n    adapter.count = jest.fn().mockImplementationOnce((query, callback) => callback({ value: 5 }))\n\n    const query = mockQuery(collection)\n    expect(await toPromise((callback) => collection._fetchCount(query, callback))).toBe(5)\n\n    expect(adapter.count.mock.calls.length).toBe(1)\n    expect(adapter.count.mock.calls[0][0]).toEqual(query.serialize())\n  })\n  it('fetches ids', async () => {\n    const { tasks: collection, adapter } = mockDatabase()\n\n    adapter.queryIds = jest\n      .fn()\n      .mockImplementationOnce((query, callback) => callback({ value: ['a', 'b'] }))\n\n    const query = mockQuery(collection)\n    expect(await toPromise((callback) => collection._fetchIds(query, callback))).toEqual(['a', 'b'])\n\n    expect(adapter.queryIds.mock.calls.length).toBe(1)\n    expect(adapter.queryIds.mock.calls[0][0]).toEqual(query.serialize())\n  })\n  it('fetches raws', async () => {\n    const { tasks: collection, adapter } = mockDatabase()\n\n    adapter.unsafeQueryRaw = jest\n      .fn()\n      .mockImplementationOnce((query, callback) => callback({ value: [{ a: 0, b: 1 }] }))\n\n    const query = mockQuery(collection)\n    expect(await toPromise((callback) => collection._unsafeFetchRaw(query, callback))).toEqual([\n      { a: 0, b: 1 },\n    ])\n\n    expect(adapter.unsafeQueryRaw.mock.calls.length).toBe(1)\n    expect(adapter.unsafeQueryRaw.mock.calls[0][0]).toEqual(query.serialize())\n  })\n})\n\ndescribe('creating new records', () => {\n  it('can create records', async () => {\n    const { tasks: collection, adapter, db } = mockDatabase()\n    const dbBatchSpy = jest.spyOn(adapter, 'batch')\n\n    const observer = jest.fn()\n    collection.changes.subscribe(observer)\n\n    // Check Model._prepareCreate was called\n    const newModelSpy = jest.spyOn(MockTask, '_prepareCreate')\n\n    const m1 = await db.write(() => collection.create())\n\n    // Check database insert, cache insert, observers update\n    expect(m1._preparedState).toBe(null)\n    expect(newModelSpy).toHaveBeenCalledTimes(1)\n    expect(dbBatchSpy).toHaveBeenCalledTimes(1)\n    expect(dbBatchSpy).toHaveBeenCalledWith([['create', 'mock_tasks', m1._raw]], expect.anything())\n    expect(observer).toHaveBeenCalledTimes(1)\n    expect(observer).toHaveBeenCalledWith([{ record: m1, type: 'created' }])\n    expect(collection._cache.get(m1.id)).toBe(m1)\n    expect(await collection.find(m1.id)).toBe(m1)\n  })\n  it('can prepare records', async () => {\n    const { tasks: collection, database } = mockDatabase()\n    database.adapter = {} // make sure not called\n\n    const observer = jest.fn()\n    collection.changes.subscribe(observer)\n\n    const newModelSpy = jest.spyOn(MockTask, '_prepareCreate')\n\n    const m1 = collection.prepareCreate()\n\n    expect(m1._preparedState).toBe('create')\n    expect(newModelSpy).toHaveBeenCalledTimes(1)\n    expect(observer).toHaveBeenCalledTimes(0)\n    await expect(collection.find(m1.id)).rejects.toBeInstanceOf(Error)\n  })\n  it('can prepare records from raw', async () => {\n    const { tasks: collection } = mockDatabase()\n\n    const newModelSpy = jest.spyOn(MockTask, '_prepareCreateFromDirtyRaw')\n\n    const m1 = collection.prepareCreateFromDirtyRaw({ col3: 'hello' })\n    expect(m1._preparedState).toBe('create')\n    expect(newModelSpy).toHaveBeenCalledTimes(1)\n  })\n  it('can prepare a disposable record from raw', async () => {\n    const { tasks: collection } = mockDatabase()\n\n    const newModelSpy = jest.spyOn(MockTask, '_disposableFromDirtyRaw')\n\n    const m1 = collection.disposableFromDirtyRaw({ col3: 'hello' })\n    expect(m1.syncStatus).toBe('disposable')\n    expect(newModelSpy).toHaveBeenCalledTimes(1)\n  })\n  it('disallows record creating outside of a writer', async () => {\n    const { database, tasks } = mockDatabase()\n\n    await expectToRejectWithMessage(\n      tasks.create(noop),\n      'can only be called from inside of a Writer',\n    )\n    await expectToRejectWithMessage(\n      database.read(() => tasks.create(noop)),\n      'can only be called from inside of a Writer',\n    )\n\n    // no throw inside writer\n    await database.write(() => tasks.create(noop))\n  })\n})\n\ndescribe('Collection observation', () => {\n  it('can subscribe to collection changes', async () => {\n    const { database, tasks } = mockDatabase()\n\n    await database.write(() => tasks.create())\n\n    const subscriber1 = jest.fn()\n    const unsubscribe1 = tasks.experimentalSubscribe(subscriber1)\n\n    expect(subscriber1).toHaveBeenCalledTimes(0)\n\n    const t1 = await database.write(() => tasks.create())\n\n    expect(subscriber1).toHaveBeenCalledTimes(1)\n    expect(subscriber1).toHaveBeenLastCalledWith([{ record: t1, type: 'created' }])\n\n    const subscriber2 = jest.fn()\n    const unsubscribe2 = tasks.experimentalSubscribe(subscriber2)\n\n    await database.write(() => t1.update())\n\n    expect(subscriber1).toHaveBeenCalledTimes(2)\n    expect(subscriber2).toHaveBeenCalledTimes(1)\n    expect(subscriber2).toHaveBeenLastCalledWith([{ record: t1, type: 'updated' }])\n\n    unsubscribe1()\n\n    await database.write(() => t1.markAsDeleted())\n\n    expect(subscriber1).toHaveBeenCalledTimes(2)\n    expect(subscriber2).toHaveBeenCalledTimes(2)\n    expect(subscriber2).toHaveBeenLastCalledWith([{ record: t1, type: 'destroyed' }])\n\n    unsubscribe2()\n\n    await database.write(() => tasks.create())\n    expect(subscriber2).toHaveBeenCalledTimes(2)\n  })\n  it('unsubscribe can safely be called more than once', async () => {\n    const { database, tasks } = mockDatabase()\n\n    const subscriber1 = jest.fn()\n    const unsubscribe1 = tasks.experimentalSubscribe(subscriber1)\n    expect(subscriber1).toHaveBeenCalledTimes(0)\n\n    const unsubscribe2 = tasks.experimentalSubscribe(() => {})\n    unsubscribe2()\n    unsubscribe2()\n\n    await database.write(() => tasks.create())\n    expect(subscriber1).toHaveBeenCalledTimes(1)\n\n    unsubscribe1()\n  })\n  it(`can subscribe with the same subscriber multiple times`, async () => {\n    const { database, tasks } = mockDatabase()\n    const trigger = () => database.write(() => tasks.create())\n    const subscriber = jest.fn()\n\n    const unsubscribe1 = tasks.experimentalSubscribe(subscriber)\n    expect(subscriber).toHaveBeenCalledTimes(0)\n    await trigger()\n    expect(subscriber).toHaveBeenCalledTimes(1)\n    const unsubscribe2 = tasks.experimentalSubscribe(subscriber)\n    await trigger()\n    expect(subscriber).toHaveBeenCalledTimes(3)\n    unsubscribe2()\n    unsubscribe2() // noop\n    await trigger()\n    expect(subscriber).toHaveBeenCalledTimes(4)\n    unsubscribe1()\n    await trigger()\n    expect(subscriber).toHaveBeenCalledTimes(4)\n  })\n})\n"
  },
  {
    "path": "src/Database/CollectionMap/index.d.ts",
    "content": "import type Model from '../../Model'\nimport Collection from '../../Collection'\nimport type { TableName } from '../../Schema'\nimport type Database from '../index'\n\nexport default class CollectionMap {\n  map: { [tableName: TableName<any>]: Collection<any> }\n\n  constructor(db: Database, modelClasses: Model[])\n\n  get<T extends Model>(tableName: TableName<T>): Collection<T>\n}\n"
  },
  {
    "path": "src/Database/CollectionMap/index.js",
    "content": "// @flow\n\nimport type Model from '../../Model'\nimport Collection from '../../Collection'\nimport type { TableName } from '../../Schema'\nimport type Database from '../index'\n\nimport { invariant } from '../../utils/common'\n\nexport default class CollectionMap {\n  map: { [TableName<any>]: Collection<any> }\n\n  constructor(db: Database, modelClasses: Class<Model>[]): void {\n    this.map = (Object.create(null): any)\n    modelClasses.forEach((modelClass) => {\n      const { table } = modelClass\n      if (process.env.NODE_ENV !== 'production') {\n        // TODO: move these checks to Collection?\n        invariant(\n          typeof table === 'string',\n          `Model class ${modelClass.name} passed to Database constructor is missing \"static table = 'table_name'\"`,\n        )\n        invariant(\n          db.schema.tables[table],\n          `Model class ${modelClass.name} has static table defined that is missing in schema known by this database`,\n        )\n      }\n      this.map[table] = new Collection(db, modelClass)\n    })\n    Object.freeze(this.map)\n  }\n\n  get<T: Model>(tableName: TableName<T>): Collection<T> {\n    return (this.map[tableName] || null: any)\n  }\n}\n"
  },
  {
    "path": "src/Database/CollectionMap/test.js",
    "content": "import CollectionMap from './index'\nimport { mockDatabase, MockProject, MockTask } from '../../__tests__/testModels'\nimport Model from '../../Model'\n\ndescribe('CollectionMap', () => {\n  it('can initialize and get models', () => {\n    const { db } = mockDatabase()\n    const map = new CollectionMap(db, [MockProject, MockTask])\n\n    expect(map.get('mock_projects').modelClass).toBe(MockProject)\n    expect(map.get('mock_projects').table).toBe('mock_projects')\n    expect(map.get('mock_tasks').modelClass).toBe(MockTask)\n    expect(map.get('mock_tasks').table).toBe('mock_tasks')\n  })\n  it(`returns null for collections that don't exist`, () => {\n    const { db } = mockDatabase()\n    const map = new CollectionMap(db, [MockProject, MockTask])\n\n    expect(map.get('mock_comments')).toBe(null)\n    expect(map.get('does_not_exist')).toBe(null)\n  })\n  it(`returns null for naughty table names`, () => {\n    const { db } = mockDatabase()\n    const map = new CollectionMap(db, [MockProject, MockTask])\n\n    expect(map.get(null)).toBe(null)\n    expect(map.get(0)).toBe(null)\n    expect(map.get(1)).toBe(null)\n    expect(map.get('__proto__')).toBe(null)\n    expect(map.get('hasOwnProperty')).toBe(null)\n  })\n  it(`collection map is immutable`, () => {\n    const { db } = mockDatabase()\n    const map = new CollectionMap(db, [MockProject, MockTask])\n    expect(() => {\n      map.map.foo = 'hey'\n    }).toThrow()\n  })\n  it(`alerts the user of invalid model classes`, () => {\n    const { db } = mockDatabase()\n    class ModelWithMissingTable extends Model {}\n    expect(() => new CollectionMap(db, [ModelWithMissingTable])).toThrow(\n      /Model class ModelWithMissingTable passed to Database constructor is missing \"static table = 'table_name'\"/,\n    )\n\n    class ModelWithUnrecognizedTableName extends Model {\n      static table = 'not_known_by_db'\n    }\n    expect(() => new CollectionMap(db, [ModelWithUnrecognizedTableName])).toThrow(\n      'Model class ModelWithUnrecognizedTableName has static table defined that is missing in schema known by this database',\n    )\n  })\n})\n"
  },
  {
    "path": "src/Database/LocalStorage/index.d.ts",
    "content": "import type Database from '..'\n\nexport type LocalStorageKey<ValueType> = string\n\nexport function localStorageKey<ValueType>(name: string): LocalStorageKey<ValueType>\n\nexport default class LocalStorage {\n  _db: Database\n\n  constructor(database: Database)\n\n  // Get value from LocalStorage (returns value deserialized from JSON)\n  // Returns `undefined` if not found\n  get<ValueType>(key: LocalStorageKey<ValueType>): Promise<ValueType | undefined>\n\n  // Experimental: Same as get(), but can be called synchronously\n  _getSync<ValueType>(\n    key: LocalStorageKey<ValueType>,\n    callback: (value: ValueType | undefined) => void,\n  ): void\n\n  // Set value to LocalStorage\n  // Only JSON-serializable values are allowed and well-behaved:\n  // strings, numbers, booleans, and null; as well as arrays and objects only containing those\n  //\n  // Serializing other values will either throw an error (e.g. function passed) or be serialized\n  // such that deserializing it won't yield an equal value (e.g. NaN to null, Dates to a string)\n  // See details:\n  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#description\n  set<ValueType>(key: LocalStorageKey<ValueType>, value: ValueType): Promise<void>\n\n  remove(key: LocalStorageKey<any>): Promise<void>\n}\n"
  },
  {
    "path": "src/Database/LocalStorage/index.js",
    "content": "// @flow\nimport type Database from '..'\nimport { invariant } from '../../utils/common'\n\nexport opaque type LocalStorageKey<ValueType> = string\n\nexport function localStorageKey<ValueType>(name: string): LocalStorageKey<ValueType> {\n  return name\n}\n\nexport default class LocalStorage {\n  _db: Database\n\n  constructor(database: Database): void {\n    this._db = database\n  }\n\n  // Get value from LocalStorage (returns value deserialized from JSON)\n  // Returns `undefined` if not found\n  async get<ValueType>(key: LocalStorageKey<ValueType>): Promise<ValueType | void> {\n    const json = await this._db.adapter.getLocal(key)\n    return json == null ? undefined : JSON.parse(json)\n  }\n\n  // Experimental: Same as get(), but can be called synchronously\n  _getSync<ValueType>(key: LocalStorageKey<ValueType>, callback: (ValueType | void) => void): void {\n    this._db.adapter.underlyingAdapter.getLocal(key, (result) => {\n      const json = result.value ? result.value : undefined\n      const value = json == null ? undefined : JSON.parse(json)\n      callback(value)\n    })\n  }\n\n  // Set value to LocalStorage\n  // Only JSON-serializable values are allowed and well-behaved:\n  // strings, numbers, booleans, and null; as well as arrays and objects only containing those\n  //\n  // Serializing other values will either throw an error (e.g. function passed) or be serialized\n  // such that deserializing it won't yield an equal value (e.g. NaN to null, Dates to a string)\n  // See details:\n  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#description\n  async set<ValueType>(key: LocalStorageKey<ValueType>, value: ValueType): Promise<void> {\n    const json = JSON.stringify(value)\n    invariant(typeof json === 'string', 'Value not JSON-serializable')\n    return this._db.adapter.setLocal(key, json)\n  }\n\n  async remove(key: LocalStorageKey<any>): Promise<void> {\n    return this._db.adapter.removeLocal(key)\n  }\n}\n"
  },
  {
    "path": "src/Database/LocalStorage/test.js",
    "content": "import { mockDatabase } from '../../__tests__/testModels'\nimport LocalStorage from '.'\n\nconst simpleMockDatabase = () => {\n  const storage = {}\n  return {\n    storage,\n    adapter: {\n      getLocal(key) {\n        return storage[key]\n      },\n      setLocal(key, value) {\n        storage[key] = value\n      },\n      removeLocal(key) {\n        delete storage[key]\n      },\n    },\n  }\n}\n\ndescribe('LocalStorage', () => {\n  it('implements CRUD operations and stores data as JSON', async () => {\n    const db = simpleMockDatabase()\n    const localStorage = new LocalStorage(db)\n\n    // non-existing get\n    expect(await localStorage.get('nonexisting')).toBe(undefined)\n\n    // set\n    await localStorage.set('test1', [1, 'foo', false])\n    expect(db.storage.test1).toBe('[1,\"foo\",false]')\n\n    // get json\n    expect(await localStorage.get('test1')).toEqual([1, 'foo', false])\n\n    // update\n    await localStorage.set('test1', { hey: null })\n    expect(db.storage.test1).toBe('{\"hey\":null}')\n\n    // remove\n    await localStorage.remove('test1')\n    expect(db.storage.test1).toBe(undefined)\n  })\n  it(`can store all JSON-safe values`, async () => {\n    const { db } = mockDatabase()\n    const localStorage = new LocalStorage(db)\n    const check = async (value) => {\n      expect(await localStorage.get('tested_value')).toBe(undefined)\n      await localStorage.set('tested_value', value)\n      expect(await localStorage.get('tested_value')).toEqual(value)\n      await localStorage.remove('tested_value')\n    }\n    await check('')\n    await check('foo')\n    await check(0)\n    await check(3.14)\n    await check(null)\n    await check(true)\n    await check(false)\n    await check([])\n    await check([-1, 0, 'foo', true, false, 3.14, null])\n    await check({ foo: 'bar', a: [1, { x: null }] })\n  })\n  it(`oddball values are serialized as expected`, async () => {\n    const { db } = mockDatabase()\n    const localStorage = new LocalStorage(db)\n\n    const check = async (valueStored, expected) => {\n      expect(await localStorage.get('tested_value')).toBe(undefined)\n      await localStorage.set('tested_value', valueStored)\n      expect(await localStorage.get('tested_value')).toEqual(expected)\n      await localStorage.remove('tested_value')\n    }\n    await check(NaN, null)\n    await check(Infinity, null)\n    const date = new Date()\n    await check(date, date.toISOString())\n    await check({ foo: undefined, bar: '', baz: null }, { bar: '', baz: null })\n    await check([undefined, { foo: () => {} }], [null, {}])\n  })\n  it('throws if getting/setting invalid values', async () => {\n    const db = simpleMockDatabase()\n    const localStorage = new LocalStorage(db)\n\n    const checkGet = async (value) => {\n      db.storage.tested_value = value\n      await expect(localStorage.get('tested_value')).rejects.toBeInstanceOf(Error)\n    }\n    const checkSet = async (value) => {\n      await expect(localStorage.set('tested_value', value)).rejects.toBeInstanceOf(Error)\n    }\n\n    await checkGet('1/asd[];d')\n    await checkGet({})\n\n    await checkSet(undefined)\n    await checkSet(() => {})\n    const cyclic = {}\n    cyclic.child = { cyclic }\n    await checkSet(cyclic)\n  })\n})\n"
  },
  {
    "path": "src/Database/WorkQueue.d.ts",
    "content": "import type Model from '../Model'\nimport type Database from './index'\nimport { $ReadOnlyArray } from '../types'\n\nexport interface ReaderInterface {\n  callReader<T>(reader: () => Promise<T>): Promise<T>\n}\n\nexport interface WriterInterface extends ReaderInterface {\n  callWriter<T>(writer: () => Promise<T>): Promise<T>\n  batch(...records: $ReadOnlyArray<Model | Model[] | null | void | false>): Promise<void>\n}\n\ntype WorkQueueItem<T> = {\n  work: (_: ReaderInterface | WriterInterface) => Promise<T>\n  isWriter: boolean\n  resolve: (value: T) => void\n  reject: (reason: any) => void\n  description?: string\n}\n\nexport default class WorkQueue {\n  _db: Database\n\n  _queue: WorkQueueItem<any>[]\n\n  _subActionIncoming: boolean\n\n  constructor(db: Database)\n\n  get isWriterRunning(): boolean\n\n  enqueue<T>(\n    work: (_: ReaderInterface | WriterInterface) => Promise<T>,\n    description: string | undefined,\n    isWriter: boolean,\n  ): Promise<T>\n\n  subAction<T>(work: () => Promise<T>): Promise<T>\n\n  _executeNext(): Promise<void>\n\n  _abortPendingWork(): void\n}\n"
  },
  {
    "path": "src/Database/WorkQueue.js",
    "content": "// @flow\n/* eslint-disable no-use-before-define */\n\nimport { invariant, logger } from '../utils/common'\nimport type Model from '../Model'\nimport type Database from './index'\n\nexport interface ReaderInterface {\n  /**\n   * Calls a Reader so that it runs as part of the current Reader (or Writer) instead of deadlocking.\n   *\n   * Specifically, the passed block should immediately call a method decorted with `@reader` or a\n   * function whose implementation is wrapped in `db.read()` block.\n   *\n   * See docs for more details.\n   *\n   * @example\n   * ```\n   * db.read(async reader => {\n   *   // ...\n   *   reader.callReader(() => someOtherReader())\n   * })\n   * ```\n   */\n  callReader<T>(reader: () => Promise<T>): Promise<T>;\n}\n\nexport interface WriterInterface extends ReaderInterface {\n  /**\n   * Calls another Writer so that it runs as part of the current Writer instead of deadlocking.\n   *\n   * Specifically, the passed block should immediately call a method decorated with `@writer` or\n   * a function whose implementation is wrapped in `db.write()` block.\n   *\n   * See docs for more details.\n   *\n   * @example\n   * ```\n   * db.write(async writer => {\n   *   // ...\n   *   writer.callWriter(() => someOtherWriter())\n   * })\n   * ```\n   */\n  callWriter<T>(writer: () => Promise<T>): Promise<T>;\n\n  /** @see {Database#batch} */\n  batch(...records: $ReadOnlyArray<Model | Model[] | null | void | false>): Promise<void>;\n}\n\nclass ReaderInterfaceImpl implements ReaderInterface {\n  __workItem: WorkQueueItem<any>\n  __workQueue: WorkQueue\n\n  constructor(queue: WorkQueue, item: WorkQueueItem<any>): void {\n    this.__workQueue = queue\n    this.__workItem = item\n  }\n\n  __validateQueue(): void {\n    invariant(\n      this.__workQueue._queue[0] === this.__workItem,\n      'Illegal call on a reader/writer that should no longer be running',\n    )\n  }\n\n  callReader<T>(reader: () => Promise<T>): Promise<T> {\n    this.__validateQueue()\n    return this.__workQueue.subAction(reader)\n  }\n}\n\nclass WriterInterfaceImpl extends ReaderInterfaceImpl implements WriterInterface {\n  callWriter<T>(writer: () => Promise<T>): Promise<T> {\n    this.__validateQueue()\n    return this.__workQueue.subAction(writer)\n  }\n\n  batch(...records: any): Promise<any> {\n    this.__validateQueue()\n    return this.__workQueue._db.batch(records)\n  }\n}\n\nconst actionInterface = (queue: WorkQueue, item: WorkQueueItem<any>) =>\n  item.isWriter ? new WriterInterfaceImpl(queue, item) : new ReaderInterfaceImpl(queue, item)\n\ntype WorkQueueItem<T> = $Exact<{\n  work: (ReaderInterface | WriterInterface) => Promise<T>,\n  isWriter: boolean,\n  resolve: (value: T) => void,\n  reject: (reason: any) => void,\n  description: ?string,\n}>\n\nexport default class WorkQueue {\n  _db: Database\n\n  _queue: WorkQueueItem<any>[] = []\n\n  _subActionIncoming: boolean = false\n\n  constructor(db: Database): void {\n    this._db = db\n  }\n\n  get isWriterRunning(): boolean {\n    const [item] = this._queue\n    return Boolean(item && item.isWriter)\n  }\n\n  enqueue<T>(\n    work: ($FlowFixMe<ReaderInterface | WriterInterface>) => Promise<T>,\n    description: ?string,\n    isWriter: boolean,\n  ): Promise<T> {\n    // If a subAction was scheduled using subAction(), database.write/read() calls skip the line\n    if (this._subActionIncoming) {\n      this._subActionIncoming = false\n      const currentWork = this._queue[0]\n      if (!currentWork.isWriter) {\n        invariant(!isWriter, 'Cannot call a writer block from a reader block')\n      }\n      return work(actionInterface(this, currentWork))\n    }\n\n    return new Promise((resolve, reject) => {\n      const workItem: WorkQueueItem<T> = { work, isWriter, resolve, reject, description }\n\n      if (process.env.NODE_ENV !== 'production' && this._queue.length) {\n        setTimeout(() => {\n          const queue = this._queue\n          const current = queue[0]\n          if (current === workItem || !queue.includes(workItem)) {\n            return\n          }\n\n          const enqueuedKind = isWriter ? 'writer' : 'reader'\n          const currentKind = current.isWriter ? 'writer' : 'reader'\n          logger.warn(\n            `The ${enqueuedKind} you're trying to run (${\n              description || 'unnamed'\n            }) can't be performed yet, because there are ${\n              queue.length\n            } other readers/writers in the queue.\\n\\nCurrent ${currentKind}: ${\n              current.description || 'unnamed'\n            }.\\n\\nIf everything is working fine, you can safely ignore this message (queueing is working as expected). But if your readers/writers are not running, it's because the current ${currentKind} is stuck.\\nRemember that if you're calling a reader/writer from another reader/writer, you must use callReader()/callWriter(). See docs for more details.`,\n          )\n          logger.log(`Enqueued ${enqueuedKind}:`, work)\n          logger.log(`Running ${currentKind}:`, current.work)\n        }, 1500)\n      }\n\n      this._queue.push(workItem)\n\n      if (this._queue.length === 1) {\n        this._executeNext()\n      }\n    })\n  }\n\n  subAction<T>(work: () => Promise<T>): Promise<T> {\n    try {\n      this._subActionIncoming = true\n      const promise = work()\n      invariant(\n        !this._subActionIncoming,\n        'callReader/callWriter call must call a reader/writer synchronously',\n      )\n      return promise\n    } catch (error) {\n      this._subActionIncoming = false\n      return Promise.reject(error)\n    }\n  }\n\n  async _executeNext(): Promise<void> {\n    const workItem = this._queue[0]\n    const { work, resolve, reject, isWriter } = workItem\n\n    try {\n      const workPromise = work(actionInterface(this, workItem))\n\n      if (process.env.NODE_ENV !== 'production') {\n        invariant(\n          workPromise instanceof Promise,\n          `The function passed to database.${\n            isWriter ? 'write' : 'read'\n          }() or a method marked as @${\n            isWriter ? 'writer' : 'reader'\n          } must be asynchronous (marked as 'async' or always returning a promise) (in: ${\n            workItem.description || 'unnamed'\n          })`,\n        )\n      }\n\n      resolve(await workPromise)\n    } catch (error) {\n      reject(error)\n    }\n\n    this._queue.shift()\n\n    if (this._queue.length) {\n      setTimeout(() => this._executeNext(), 0)\n    }\n  }\n\n  _abortPendingWork(): void {\n    invariant(this._queue.length >= 1, '_abortPendingWork can only be called from a reader/writer')\n    const workToAbort = this._queue.splice(1) // leave only the caller on the queue\n    workToAbort.forEach(({ reject }) => {\n      reject(new Error('Reader/writer has been aborted because the database was reset'))\n    })\n  }\n}\n"
  },
  {
    "path": "src/Database/index.d.ts",
    "content": "import type { Observable } from '../utils/rx'\nimport { Unsubscribe } from '../utils/subscriptions'\n\nimport type { DatabaseAdapter } from '../adapters/type'\nimport DatabaseAdapterCompat from '../adapters/compat'\nimport type Model from '../Model'\nimport type Collection from '../Collection'\nimport type { CollectionChangeSet } from '../Collection'\nimport type { TableName, AppSchema } from '../Schema'\n\nimport CollectionMap from './CollectionMap'\nimport type LocalStorage from './LocalStorage'\nimport WorkQueue from './WorkQueue'\nimport type { ReaderInterface, WriterInterface } from './WorkQueue'\n\nimport { $ReadOnlyArray, $Exact, Class } from '../types'\n\ntype DatabaseProps = $Exact<{\n  adapter: DatabaseAdapter\n  modelClasses: Class<Model>[] | Model[]\n}>\n\nexport function setExperimentalAllowsFatalError(): void\n\nexport default class Database {\n  adapter: DatabaseAdapterCompat\n\n  schema: AppSchema\n\n  collections: CollectionMap\n\n  _workQueue: WorkQueue\n\n  // (experimental) if true, Database is in a broken state and should not be used anymore\n  _isBroken: boolean\n\n  _localStorage: LocalStorage\n\n  constructor(options: DatabaseProps)\n\n  get<T extends Model>(tableName: TableName<T>): Collection<T>\n\n  get localStorage(): LocalStorage\n\n  // Executes multiple prepared operations\n  // (made with `collection.prepareCreate` and `record.prepareUpdate`)\n  // Note: falsy values (null, undefined, false) passed to batch are just ignored\n  batch(...records: $ReadOnlyArray<Model | Model[] | null | void | false>): Promise<void>\n\n  // Enqueues a Writer - a block of code that, when it's running, has a guarantee that no other Writer\n  // is running at the same time.\n  // All actions that modify the database (create, update, delete) must be performed inside of a Writer block\n  // See docs for more details and practical guide\n  write<T>(work: (writer: WriterInterface) => Promise<T>, description?: string): Promise<T>\n\n  // Enqueues a Reader - a block of code that, when it's running, has a guarantee that no Writer\n  // is running at the same time (therefore, the database won't be modified for the duration of Reader's work)\n  // See docs for more details and practical guide\n  read<T>(work: (reader: ReaderInterface) => Promise<T>, description?: string): Promise<T>\n\n  action<T>(work: (writer: WriterInterface) => Promise<T>, description?: string): Promise<T>\n\n  // Emits a signal immediately, and on change in any of the passed tables\n  withChangesForTables(tables: TableName<any>[]): Observable<CollectionChangeSet<any> | null>\n\n  _subscribers: [TableName<any>[], () => void, any][]\n\n  // Notifies `subscriber` on change in any of passed tables (only a signal, no change set)\n  experimentalSubscribe(\n    tables: TableName<any>[],\n    subscriber: () => void,\n    debugInfo?: any,\n  ): Unsubscribe\n\n  _resetCount: number\n\n  _isBeingReset: boolean\n\n  // Resets database - permanently destroys ALL records stored in the database, and sets up empty database\n  //\n  // NOTE: This is not 100% safe automatically and you must take some precautions to avoid bugs:\n  // - You must NOT hold onto any Database objects. DO NOT store or cache any records, collections, anything\n  // - You must NOT observe any record or collection or query\n  // - You SHOULD NOT have any pending (queued) Actions. Pending actions will be aborted (will reject with an error).\n  //\n  // It's best to reset your app to an empty / logged out state before doing this.\n  //\n  // Yes, this sucks and there should be some safety mechanisms or warnings. Please contribute!\n  unsafeResetDatabase(): Promise<void>\n\n  // (experimental) if true, Models will print to console diagnostic information on every\n  // prepareCreate/Update/Delete call, as well as on commit (Database.batch() call). Note that this\n  // has a significant performance impact so should only be enabled when debugging.\n  experimentalIsVerbose: boolean\n\n  _ensureInWriter(diagnosticMethodName: string): void\n\n  // (experimental) puts Database in a broken state\n  // TODO: Not used anywhere yet\n  _fatalError(error: Error): void\n}\n"
  },
  {
    "path": "src/Database/index.js",
    "content": "// @flow\n\nimport { type Observable, startWith, merge as merge$ } from '../utils/rx'\nimport { type Unsubscribe } from '../utils/subscriptions'\nimport { invariant, logger } from '../utils/common'\nimport {\n  noop,\n  fromArrayOrSpread,\n  // eslint-disable-next-line no-unused-vars\n  type ArrayOrSpreadFn,\n} from '../utils/fp'\n\nimport type { DatabaseAdapter, BatchOperation } from '../adapters/type'\nimport DatabaseAdapterCompat from '../adapters/compat'\nimport type Model from '../Model'\nimport type Collection, { CollectionChangeSet } from '../Collection'\nimport type { TableName, AppSchema } from '../Schema'\n\nimport CollectionMap from './CollectionMap'\nimport type LocalStorage from './LocalStorage'\nimport WorkQueue, { type ReaderInterface, type WriterInterface } from './WorkQueue'\n\ntype DatabaseProps = $Exact<{\n  adapter: DatabaseAdapter,\n  modelClasses: Array<Class<Model>>,\n}>\n\nlet experimentalAllowsFatalError = false\n\nexport function setExperimentalAllowsFatalError(): void {\n  experimentalAllowsFatalError = true\n}\n\nexport default class Database {\n  /**\n   * Database's adapter - the low-level connection with the underlying database (e.g. SQLite)\n   *\n   * Unless you understand WatermelonDB's internals, you SHOULD NOT use adapter directly.\n   * Running queries, or updating/deleting records on the adapter will corrupt the in-memory cache\n   * if special care is not taken\n   */\n  adapter: DatabaseAdapterCompat\n\n  schema: AppSchema\n\n  collections: CollectionMap\n\n  _workQueue: WorkQueue = new WorkQueue(this)\n\n  // (experimental) if true, Database is in a broken state and should not be used anymore\n  _isBroken: boolean = false\n\n  _localStorage: LocalStorage\n\n  constructor(options: DatabaseProps): void {\n    const { adapter, modelClasses } = options\n    if (process.env.NODE_ENV !== 'production') {\n      invariant(adapter, `Missing adapter parameter for new Database()`)\n      invariant(\n        modelClasses && Array.isArray(modelClasses),\n        `Missing modelClasses parameter for new Database()`,\n      )\n    }\n    this.adapter = new DatabaseAdapterCompat(adapter)\n    this.schema = adapter.schema\n    this.collections = new CollectionMap(this, modelClasses)\n  }\n\n  /**\n   * Returns a `Collection` for a given table name\n   */\n  get<T: Model>(tableName: TableName<T>): Collection<T> {\n    return this.collections.get(tableName)\n  }\n\n  /**\n   * Returns a `LocalStorage` (WatermelonDB-based localStorage/AsyncStorage alternative)\n   */\n  get localStorage(): LocalStorage {\n    if (!this._localStorage) {\n      const LocalStorageClass = require('./LocalStorage').default\n      this._localStorage = new LocalStorageClass(this)\n    }\n    return this._localStorage\n  }\n\n  /*:: batch: ArrayOrSpreadFn<?Model | false, Promise<void>>  */\n  /**\n   * Executes multiple prepared operations\n   *\n   * Pass a list (or array) of operations like so:\n   * - `collection.prepareCreate(...)`\n   * - `record.prepareUpdate(...)`\n   * - `record.prepareMarkAsDeleted()` (or `record.prepareDestroyPermanently()`)\n   *\n   * Note that falsy values (null, undefined, false) passed to batch are simply ignored\n   * so you can use patterns like `.batch(condition && record.prepareUpdate(...))` for convenience.\n   *\n   * Note: This method must be called within a Writer {@link Database#write}.\n   */\n  // $FlowFixMe\n  async batch(...records: Array<?Model | false>): Promise<void> {\n    const actualRecords: Array<?Model> = fromArrayOrSpread(records, 'Database.batch', 'Model')\n\n    this._ensureInWriter(`Database.batch()`)\n\n    // performance critical - using mutations\n    const batchOperations: BatchOperation[] = []\n    const changeNotifications: { [TableName<any>]: CollectionChangeSet<Model> } = {}\n    actualRecords.forEach((record) => {\n      if (!record) {\n        return\n      }\n\n      const preparedState = record._preparedState\n      if (!preparedState) {\n        invariant(record._raw._status !== 'disposable', `Cannot batch a disposable record`)\n        throw new Error(`Cannot batch a record that doesn't have a prepared create/update/delete`)\n      }\n\n      const raw = record._raw\n      const { id } = raw // faster than Model.id\n      const { table } = record.constructor // faster than Model.table\n\n      let changeType\n\n      if (preparedState === 'update') {\n        batchOperations.push(['update', table, raw])\n        changeType = 'updated'\n      } else if (preparedState === 'create') {\n        batchOperations.push(['create', table, raw])\n        changeType = 'created'\n      } else if (preparedState === 'markAsDeleted') {\n        batchOperations.push(['markAsDeleted', table, id])\n        changeType = 'destroyed'\n      } else if (preparedState === 'destroyPermanently') {\n        batchOperations.push(['destroyPermanently', table, id])\n        changeType = 'destroyed'\n      } else {\n        invariant(false, 'bad preparedState')\n      }\n\n      if (preparedState !== 'create') {\n        // We're (unsafely) assuming that batch will succeed and removing the \"pending\" state so that\n        // subsequent changes to the record don't trip up the invariant\n        // TODO: What if this fails?\n        record._preparedState = null\n      }\n\n      if (!changeNotifications[table]) {\n        changeNotifications[table] = []\n      }\n      changeNotifications[table].push({ record, type: changeType })\n    })\n\n    await this.adapter.batch(batchOperations)\n\n    // Debug info\n    if (this.experimentalIsVerbose) {\n      const debugInfo = batchOperations\n        .map(([type, table, rawOrId]) => {\n          switch (type) {\n            case 'create':\n            case 'update':\n              return `${type} ${table}#${(rawOrId: any).id}`\n            case 'markAsDeleted':\n            case 'destroyPermanently':\n              return `${type} ${table}#${(rawOrId: any)}`\n            default:\n              return `${type}???`\n          }\n        })\n        .join(', ')\n      logger.debug(`batch: ${debugInfo}`)\n    }\n\n    // NOTE: We must make two passes to ensure all changes to caches are applied before subscribers are called\n    const changes: [TableName<any>, CollectionChangeSet<any>][] = (Object.entries(\n      changeNotifications,\n    ): any)\n\n    changes.forEach(([table, changeSet]) => {\n      this.collections.get(table)._applyChangesToCache(changeSet)\n    })\n\n    this._notify(changes)\n\n    return undefined // shuts up flow\n  }\n\n  _pendingNotificationBatches: number = 0\n  _pendingNotificationChanges: [TableName<any>, CollectionChangeSet<any>][][] = []\n\n  _notify(changes: [TableName<any>, CollectionChangeSet<any>][]): void {\n    if (this._pendingNotificationBatches > 0) {\n      this._pendingNotificationChanges.push(changes)\n      return\n    }\n\n    const affectedTables = new Set(changes.map(([table]) => table))\n\n    const databaseChangeNotifySubscribers = ([tables, subscriber]: [\n      Array<TableName<any>>,\n      () => void,\n      any,\n    ]): void => {\n      if (tables.some((table) => affectedTables.has(table))) {\n        subscriber()\n      }\n    }\n    this._subscribers.forEach(databaseChangeNotifySubscribers)\n\n    changes.forEach(([table, changeSet]) => {\n      this.collections.get(table)._notify(changeSet)\n    })\n  }\n\n  async experimentalBatchNotifications<T>(work: () => Promise<T>): Promise<T> {\n    // TODO: Document & add tests if this proves useful\n    try {\n      this._pendingNotificationBatches += 1\n      const result = await work()\n      return result\n    } finally {\n      this._pendingNotificationBatches -= 1\n      if (this._pendingNotificationBatches === 0) {\n        const changes = this._pendingNotificationChanges\n        this._pendingNotificationChanges = []\n        changes.forEach((_changes) => this._notify(_changes))\n      }\n    }\n  }\n\n  /**\n   * Schedules a Writer\n   *\n   * Writer is a block of code, inside of which you can modify the database\n   * (call `Collection.create`, `Model.update`, `Database.batch` and so on).\n   *\n   * In a Writer, you're guaranteed that no other Writer is simultaneously executing. Therefore, you\n   * can rely on the results of queries and other asynchronous operations - they won't change for\n   * the duration of this Writer (except if changed by it).\n   *\n   * To call another Writer (or Reader) from this one without deadlocking, use `callWriter`\n   * (or `callReader`).\n   *\n   * See docs for more details and a practical guide.\n   *\n   * @param work - Block of code to execute\n   * @param [description] - Debug description of this Writer\n   */\n  write<T>(work: (WriterInterface) => Promise<T>, description?: string): Promise<T> {\n    return this._workQueue.enqueue(work, description, true)\n  }\n\n  /**\n   * Schedules a Reader\n   *\n   * In a Reader, you're guaranteed that no Writer is running at the same time. Therefore, you can\n   * run many queries or other asynchronous operations, and you can rely on their results - they\n   * won't change for the duration of this Reader. However, other Readers might run concurrently.\n   *\n   * To call another Reader from this one, use `callReader`\n   *\n   * See docs for more details and a practical guide.\n   *\n   * @param work - Block of code to execute\n   * @param [description] - Debug description of this Reader\n   */\n  read<T>(work: (ReaderInterface) => Promise<T>, description?: string): Promise<T> {\n    return this._workQueue.enqueue(work, description, false)\n  }\n\n  /**\n   * Returns an `Observable` that emits a signal (`null`) immediately, and on every change in\n   * any of the passed tables.\n   *\n   * A set of changes made is passed with the signal, with an array of changes per-table\n   * (Currently, if changes are made to multiple different tables, multiple signals will be emitted,\n   * even if they're made with a batch. However, this behavior might change. Use Rx to debounce,\n   * throttle, merge as appropriate for your use case.)\n   *\n   * Warning: You can easily introduce performance bugs in your application by using this method\n   * inappropriately.\n   */\n  withChangesForTables(tables: TableName<any>[]): Observable<CollectionChangeSet<any> | null> {\n    const changesSignals = tables.map((table) => this.collections.get(table).changes)\n\n    return merge$(...changesSignals).pipe(startWith(null))\n  }\n\n  _subscribers: [TableName<any>[], () => void, any][] = []\n\n  /**\n   * Notifies `subscriber` on change in any of the passed tables.\n   *\n   * A single notification will be sent per `database.batch()` call.\n   * (Currently, no details about the changes made are provided, only a signal, but this behavior\n   * might change. Currently, subscribers are called before `withChangesForTables`).\n   *\n   * Warning: You can easily introduce performance bugs in your application by using this method\n   * inappropriately.\n   */\n  experimentalSubscribe(\n    tables: TableName<any>[],\n    subscriber: () => void,\n    debugInfo?: any,\n  ): Unsubscribe {\n    if (!tables.length) {\n      return noop\n    }\n\n    const entry = [tables, subscriber, debugInfo]\n    this._subscribers.push(entry)\n\n    return () => {\n      const idx = this._subscribers.indexOf(entry)\n      idx !== -1 && this._subscribers.splice(idx, 1)\n    }\n  }\n\n  _resetCount: number = 0\n\n  _isBeingReset: boolean = false\n\n  /**\n   * Resets the database\n   *\n   * This permanently deletes the database (all records, metadata, and `LocalStorage`) and sets\n   * up an empty database.\n   *\n   * Special care must be taken to safely reset the database. Ideally, you should reset your app\n   * to an empty / \"logging out\" state while doing this. Specifically:\n   *\n   * - You MUST NOT hold onto Watermelon records other than this `Database`. Do not keep references\n   *   to records, collections, or any other objects from before database reset\n   * - You MUST NOT observe any Watermelon state. All Database, Collection, Query, and Model\n   *   observers/subscribers should be disposed of before resetting\n   * - You SHOULD NOT have any pending (queued) Readers or Writers. Pending work will be aborted\n   *   (rejected with an error)\n   */\n  async unsafeResetDatabase(): Promise<void> {\n    this._ensureInWriter(`Database.unsafeResetDatabase()`)\n    try {\n      this._isBeingReset = true\n      // First kill actions, to ensure no more traffic to adapter happens\n      this._workQueue._abortPendingWork()\n\n      // Kill ability to call adapter methods during reset (to catch bugs if someone does this)\n      const { adapter } = this\n      const ErrorAdapter = require('../adapters/error').default\n      this.adapter = (new ErrorAdapter(): any)\n\n      // Check for illegal subscribers\n      if (this._subscribers.length) {\n        // TODO: This should be an error, not a console.log, but actually useful diagnostics are necessary for this to work, otherwise people will be confused\n        // eslint-disable-next-line no-console\n        console.log(\n          `Application error! Unexpected ${this._subscribers.length} Database subscribers were detected during database.unsafeResetDatabase() call. App should not hold onto subscriptions or Watermelon objects while resetting database.`,\n        )\n        // eslint-disable-next-line no-console\n        console.log(this._subscribers)\n        this._subscribers = []\n      }\n\n      // Clear the database\n      await adapter.unsafeResetDatabase()\n\n      // Only now clear caches, since there may have been queued fetches from DB still bringing in items to cache\n      Object.values(this.collections.map).forEach((collection) => {\n        // $FlowFixMe\n        collection._cache.unsafeClear()\n      })\n\n      // Restore working Database\n      this._resetCount += 1\n      this.adapter = adapter\n    } finally {\n      this._isBeingReset = false\n    }\n  }\n\n  // (experimental) if true, Models will print to console diagnostic information on every\n  // prepareCreate/Update/Delete call, as well as on commit (Database.batch() call). Note that this\n  // has a significant performance impact so should only be enabled when debugging.\n  experimentalIsVerbose: boolean = false\n\n  _ensureInWriter(debugName: string): void {\n    invariant(\n      this._workQueue.isWriterRunning,\n      `${debugName} can only be called from inside of a Writer. See docs for more details.`,\n    )\n  }\n\n  // (experimental) puts Database in a broken state\n  // TODO: Not used anywhere yet\n  _fatalError(error: Error): void {\n    if (!experimentalAllowsFatalError) {\n      logger.warn(\n        'Database is now broken, but experimentalAllowsFatalError has not been enabled to do anything about it...',\n      )\n      return\n    }\n\n    this._isBroken = true\n    logger.error('Database is broken. App must be reloaded before continuing.')\n\n    // TODO: Passing this to an adapter feels wrong, but it's tricky.\n    // $FlowFixMe\n    if (this.adapter.underlyingAdapter._fatalError) {\n      // $FlowFixMe\n      this.adapter.underlyingAdapter._fatalError(error)\n    }\n  }\n}\n"
  },
  {
    "path": "src/Database/test.js",
    "content": "import { expectToRejectWithMessage } from '../__tests__/utils'\nimport { mockDatabase } from '../__tests__/testModels'\nimport { noop } from '../utils/fp'\nimport { logger } from '../utils/common'\nimport * as Q from '../QueryDescription'\n\ndescribe('Database', () => {\n  it(`implements get()`, () => {\n    const { database } = mockDatabase()\n    expect(database.get('mock_tasks').table).toBe('mock_tasks')\n    expect(database.get('mock_tasks')).toBe(database.collections.get('mock_tasks'))\n    expect(database.get('mock_comments')).toBe(database.collections.get('mock_comments'))\n  })\n\n  it(`implements localStorage`, async () => {\n    const { database } = mockDatabase()\n    await database.localStorage.set('foo', 'bar')\n    expect(await database.localStorage.get('foo')).toBe('bar')\n  })\n\n  describe('unsafeResetDatabase', () => {\n    it('can reset database', async () => {\n      const { database, tasks } = mockDatabase()\n\n      const m1 = await database.write(() => tasks.create())\n      const m2 = await database.write(() => tasks.create())\n\n      expect(await tasks.find(m1.id)).toBe(m1)\n      expect(await tasks.find(m2.id)).toBe(m2)\n\n      // reset\n      await database.write(() => database.unsafeResetDatabase())\n\n      await expectToRejectWithMessage(tasks.find(m1.id), 'not found')\n      await expectToRejectWithMessage(tasks.find(m2.id), 'not found')\n    })\n    it('throws error if reset is called from outside a writer', async () => {\n      const { database, tasks } = mockDatabase()\n      const m1 = await database.write(() => tasks.create())\n\n      await expectToRejectWithMessage(\n        database.unsafeResetDatabase(),\n        'can only be called from inside of a Writer',\n      )\n      await expectToRejectWithMessage(\n        database.read(() => database.unsafeResetDatabase()),\n        'can only be called from inside of a Writer',\n      )\n\n      expect(await tasks.find(m1.id)).toBe(m1)\n    })\n    it('increments reset count after every reset', async () => {\n      const { database } = mockDatabase()\n      expect(database._resetCount).toBe(0)\n\n      await database.write(() => database.unsafeResetDatabase())\n      expect(database._resetCount).toBe(1)\n\n      await database.write(() => database.unsafeResetDatabase())\n      expect(database._resetCount).toBe(2)\n    })\n    it('prevents Adapter from being called during reset db', async () => {\n      const { database } = mockDatabase()\n\n      const checkAdapter = async () => {\n        expect(await database.adapter.getLocal('test')).toBe(null)\n        expect(database.adapter.underlyingAdapter).not.toBeFalsy()\n        expect(database.adapter.schema).not.toBeFalsy()\n      }\n      await checkAdapter()\n\n      const resetPromise = database.write(() => database.unsafeResetDatabase())\n\n      expect(() => database.adapter.underlyingAdapter).toThrow(\n        /Cannot call database.adapter.underlyingAdapter while the database is being reset/,\n      )\n      expect(() => database.adapter.schema).toThrow(/Cannot call database.adapter.schema/)\n      expect(() => database.adapter.migrations).toThrow(/Cannot call database.adapter.migrations/)\n      expect(() => database.adapter.getLocal('test')).toThrow(\n        /Cannot call database.adapter.getLocal/,\n      )\n      expect(() => database.adapter.setLocal('test', 'trap')).toThrow(\n        /Cannot call database.adapter.setLocal/,\n      )\n\n      await resetPromise\n      await checkAdapter()\n    })\n    it('Cancels Database experimental subscribers during reset', async () => {\n      const { database, tasks } = mockDatabase()\n\n      // sanity check first\n      const subscriber1 = jest.fn()\n      const unsubscribe1 = database.experimentalSubscribe(['mock_tasks'], subscriber1)\n      await database.write(() => tasks.create())\n      expect(subscriber1).toHaveBeenCalledTimes(1)\n      unsubscribe1()\n      await database.write(() => database.unsafeResetDatabase())\n      await database.write(() => tasks.create())\n      expect(subscriber1).toHaveBeenCalledTimes(1)\n\n      // keep subscriber during reset\n      const subscriber2 = jest.fn()\n      database.experimentalSubscribe(['mock_tasks'], subscriber2)\n      const consoleErrorSpy = jest.spyOn(console, 'log')\n\n      await database.write(() => database.unsafeResetDatabase())\n\n      // check that error was logged\n      expect(consoleErrorSpy).toHaveBeenCalledTimes(2)\n      expect(consoleErrorSpy).toHaveBeenCalledWith(\n        'Application error! Unexpected 1 Database subscribers were detected during database.unsafeResetDatabase() call. App should not hold onto subscriptions or Watermelon objects while resetting database.',\n      )\n\n      // check that subscriber was killed\n      await database.write(() => tasks.create())\n      expect(subscriber2).toHaveBeenCalledTimes(0)\n    })\n    it.skip('Cancels withChangesForTables observation during reset', async () => {})\n    it.skip('Cancels Collection change observation during reset', async () => {})\n    it.skip('Cancels Collection experimental subscribers during reset', async () => {})\n    it.skip('Cancels Model change observation during reset', async () => {})\n    it.skip('Cancels Model experimental subscribers during reset', async () => {})\n    it.skip('Cancels Query observation during reset', async () => {})\n    it.skip('Cancels Query experimental subscribers during reset', async () => {})\n    it.skip('Cancels Relation observation during reset', async () => {})\n    it.skip('Cancels Relation experimental subscribers during reset', async () => {})\n    it('Signals internally when database is being reset', async () => {\n      const { database } = mockDatabase()\n\n      expect(database._isBeingReset).toBe(false)\n      const promise = database.write(() => database.unsafeResetDatabase())\n      expect(database._isBeingReset).toBe(true)\n      await promise\n      expect(database._isBeingReset).toBe(false)\n\n      // force reset to fail\n      database.adapter.unsafeResetDatabase = async () => {\n        throw new Error('forced')\n      }\n      const promise2 = database.write(() => database.unsafeResetDatabase())\n      expect(database._isBeingReset).toBe(true)\n      await expectToRejectWithMessage(promise2, 'forced')\n      expect(database._isBeingReset).toBe(false)\n    })\n    it.skip('Disallows <many methods> calls during reset', async () => {})\n    it.skip('Makes old Model objects unsable after reset', async () => {})\n    it.skip('Makes old Query objects unsable after reset', async () => {})\n    it.skip('Makes old Relation objects unsable after reset', async () => {})\n    // TODO: Write a regression test for https://github.com/Nozbe/WatermelonDB/commit/237e041d0d8aa4b3529fbf522f8d29c776fd4c0e\n  })\n\n  describe('Database.batch()', () => {\n    it('can batch records', async () => {\n      let {\n        database,\n        // eslint-disable-next-line\n        cloneDatabase,\n        tasks: tasksCollection,\n        comments: commentsCollection,\n      } = mockDatabase()\n      const adapterBatchSpy = jest.spyOn(database.adapter, 'batch')\n\n      // m1, m2 will be used to test batch-updates\n      const m1 = await database.write(() => tasksCollection.create())\n      const m2 = await database.write(() => commentsCollection.create())\n\n      // m3, m4 will be used to test batch-deletes\n      const m3 = await database.write(() => tasksCollection.create())\n      const m4 = await database.write(() => commentsCollection.create())\n\n      const tasksCollectionObserver = jest.fn()\n      tasksCollection.changes.subscribe(tasksCollectionObserver)\n\n      const commentsCollectionObserver = jest.fn()\n      commentsCollection.changes.subscribe(commentsCollectionObserver)\n\n      // m5, m6 will be used to test batch-creates\n      const m5 = tasksCollection.prepareCreate()\n      const m6 = commentsCollection.prepareCreate()\n\n      const recordObserver = jest.fn()\n      m1.observe().subscribe(recordObserver)\n\n      const batchPromise = database.write(() =>\n        database.batch(\n          m6,\n          m1.prepareUpdate(() => {\n            m1.name = 'bar1'\n          }),\n          m5,\n          m2.prepareUpdate(() => {\n            m2.body = 'baz1'\n          }),\n          m3.prepareMarkAsDeleted(),\n          m4.prepareDestroyPermanently(),\n        ),\n      )\n\n      expect(m1._preparedState).toBe(null)\n      expect(m2._preparedState).toBe(null)\n\n      await batchPromise\n\n      expect(adapterBatchSpy).toHaveBeenCalledTimes(5)\n      expect(adapterBatchSpy).toHaveBeenLastCalledWith([\n        ['create', 'mock_comments', m6._raw],\n        ['update', 'mock_tasks', m1._raw],\n        ['create', 'mock_tasks', m5._raw],\n        ['update', 'mock_comments', m2._raw],\n        ['markAsDeleted', 'mock_tasks', m3.id],\n        ['destroyPermanently', 'mock_comments', m4.id],\n      ])\n\n      expect(tasksCollectionObserver).toHaveBeenCalledTimes(1)\n      expect(commentsCollectionObserver).toHaveBeenCalledTimes(1)\n      expect(tasksCollectionObserver).toHaveBeenCalledWith([\n        { record: m1, type: 'updated' },\n        { record: m5, type: 'created' },\n        { record: m3, type: 'destroyed' },\n      ])\n      expect(commentsCollectionObserver).toHaveBeenCalledWith([\n        { record: m6, type: 'created' },\n        { record: m2, type: 'updated' },\n        { record: m4, type: 'destroyed' },\n      ])\n\n      const createdRecords = [m5, m6]\n      createdRecords.forEach((record) => {\n        expect(record._preparedState).toBe(null)\n        expect(record.collection._cache.get(record.id)).toBe(record)\n      })\n\n      expect(recordObserver).toHaveBeenCalledTimes(2)\n\n      // simulate reload -- check if changes actually got saved\n      database = await cloneDatabase()\n      tasksCollection = database.collections.get('mock_tasks')\n      commentsCollection = database.collections.get('mock_comments')\n\n      const fetchedM1 = await tasksCollection.find(m1.id)\n      const fetchedM2 = await commentsCollection.find(m2.id)\n      expect(fetchedM1.name).toBe('bar1')\n      expect(fetchedM2.body).toBe('baz1')\n\n      const fetchedM3 = await tasksCollection.find(m3.id)\n      const fetchedM4 = await commentsCollection.query(Q.where('id', m4.id)).fetch()\n      expect(fetchedM3._raw._status).toBe('deleted')\n      expect(fetchedM4.length).toBe(0)\n    })\n    it('ignores falsy values passed', async () => {\n      const { database, tasks: tasksCollection } = mockDatabase()\n      const adapterBatchSpy = jest.spyOn(database.adapter, 'batch')\n\n      const model = tasksCollection.prepareCreate()\n      await database.write(() => database.batch(null, model, false, undefined))\n\n      expect(adapterBatchSpy).toHaveBeenCalledTimes(1)\n      expect(adapterBatchSpy).toHaveBeenLastCalledWith([['create', 'mock_tasks', model._raw]])\n    })\n    it(`can batch with an array passed as argument`, async () => {\n      const { database, tasks: tasksCollection } = mockDatabase()\n      const adapterBatchSpy = jest.spyOn(database.adapter, 'batch')\n\n      const model = tasksCollection.prepareCreate()\n      await database.write(() => database.batch([null, model, false, undefined]))\n\n      expect(adapterBatchSpy).toHaveBeenCalledTimes(1)\n      expect(adapterBatchSpy).toHaveBeenLastCalledWith([['create', 'mock_tasks', model._raw]])\n    })\n    it('throws error if attempting to batch records without a pending operation', async () => {\n      const { database, tasks } = mockDatabase()\n      const m1 = await database.write(() => tasks.create())\n\n      await expectToRejectWithMessage(\n        database.write(() => database.batch(m1)),\n        'prepared create/update/delete',\n      )\n    })\n    it(`throws error if attempting to batch a disposable record`, async () => {\n      const { database, tasks } = mockDatabase()\n      const m1 = tasks.disposableFromDirtyRaw({ name: 'hello' })\n\n      await expectToRejectWithMessage(\n        database.write(() => database.batch(m1)),\n        'disposable',\n      )\n    })\n    it('throws error if batch is called outside of a writer', async () => {\n      const { database, tasks } = mockDatabase()\n\n      await expectToRejectWithMessage(\n        database.batch(tasks.prepareCreate(noop)),\n        'can only be called from inside of a Writer',\n      )\n      await expectToRejectWithMessage(\n        database.read(() => database.batch(tasks.prepareCreate(noop))),\n        'can only be called from inside of a Writer',\n      )\n\n      // check if in writer is successful\n      await database.write(() =>\n        database.batch(\n          tasks.prepareCreate((task) => {\n            task.name = 'foo1'\n          }),\n        ),\n      )\n      const [task] = await tasks.query().fetch()\n      expect(task.name).toBe('foo1')\n    })\n    it(`throws an error if invalid arguments`, async () => {\n      const { database } = mockDatabase()\n      await expectToRejectWithMessage(database.batch([], null), 'multiple arrays were passed')\n    })\n    it(`prints debug information in verbose mode`, async () => {\n      const { database, tasks, projects } = mockDatabase()\n      const spy = jest.spyOn(logger, 'debug')\n\n      database.experimentalIsVerbose = true\n\n      await database.write(async () => {\n        const t1 = tasks.prepareCreate()\n        const t2 = tasks.prepareCreate()\n        const p1 = projects.prepareCreate()\n\n        await database.batch(t1, t2, p1)\n        expect(spy).toHaveBeenCalledWith(`prepareCreate: mock_tasks#${t1.id}`)\n        expect(spy).toHaveBeenCalledWith(`prepareCreate: mock_tasks#${t2.id}`)\n        expect(spy).toHaveBeenCalledWith(`prepareCreate: mock_projects#${p1.id}`)\n        expect(spy).toHaveBeenLastCalledWith(\n          `batch: create mock_tasks#${t1.id}, create mock_tasks#${t2.id}, create mock_projects#${p1.id}`,\n        )\n\n        t1.prepareUpdate()\n        t2.prepareMarkAsDeleted()\n        p1.prepareDestroyPermanently()\n\n        await database.batch(t1, t2, p1)\n\n        expect(spy).toHaveBeenCalledWith(`prepareUpdate: mock_tasks#${t1.id}`)\n        expect(spy).toHaveBeenCalledWith(`prepareMarkAsDeleted: mock_tasks#${t2.id}`)\n        expect(spy).toHaveBeenCalledWith(`prepareDestroyPermanently: mock_projects#${p1.id}`)\n        expect(spy).toHaveBeenLastCalledWith(\n          `batch: update mock_tasks#${t1.id}, markAsDeleted mock_tasks#${t2.id}, destroyPermanently mock_projects#${p1.id}`,\n        )\n      })\n    })\n  })\n\n  describe('Observation', () => {\n    it('implements withChangesForTables', async () => {\n      const { database, projects, tasks, comments } = mockDatabase()\n\n      const observer = jest.fn()\n      database.withChangesForTables(['mock_projects', 'mock_tasks']).subscribe(observer)\n\n      expect(observer).toHaveBeenCalledTimes(1)\n\n      await database.write(() => projects.create())\n      const m1 = await database.write(() => projects.create())\n      const m2 = await database.write(() => tasks.create())\n      const m3 = await database.write(() => comments.create())\n\n      expect(observer).toHaveBeenCalledTimes(4)\n      expect(observer).toHaveBeenCalledWith([{ record: m1, type: 'created' }])\n      expect(observer).toHaveBeenLastCalledWith([{ record: m2, type: 'created' }])\n\n      await database.write(async () => {\n        await m1.update()\n        await m2.update()\n        await m3.update()\n      })\n\n      expect(observer).toHaveBeenCalledTimes(6)\n      expect(observer).toHaveBeenLastCalledWith([{ record: m2, type: 'updated' }])\n\n      await database.write(async () => {\n        await m1.destroyPermanently()\n        await m2.destroyPermanently()\n        await m3.destroyPermanently()\n      })\n\n      expect(observer).toHaveBeenCalledTimes(8)\n      expect(observer).toHaveBeenCalledWith([{ record: m1, type: 'destroyed' }])\n      expect(observer).toHaveBeenLastCalledWith([{ record: m2, type: 'destroyed' }])\n    })\n    it('can subscribe to change signals for particular tables', async () => {\n      const { database, projects, tasks, comments } = mockDatabase()\n\n      const subscriber1 = jest.fn()\n      const unsubscribe1 = database.experimentalSubscribe([], subscriber1)\n\n      await database.write(() => tasks.create())\n\n      const subscriber2 = jest.fn()\n      const unsubscribe2 = database.experimentalSubscribe(['mock_tasks'], subscriber2)\n\n      const subscriber3 = jest.fn()\n      const unsubscribe3 = database.experimentalSubscribe(\n        ['mock_tasks', 'mock_projects'],\n        subscriber3,\n      )\n\n      const p1 = await database.write(() => projects.create())\n      await database.write(() => tasks.create())\n      await database.write(() => comments.create())\n\n      expect(subscriber1).toHaveBeenCalledTimes(0)\n      expect(subscriber2).toHaveBeenCalledTimes(1)\n      expect(subscriber3).toHaveBeenCalledTimes(2)\n      expect(subscriber2).toHaveBeenLastCalledWith()\n\n      await database.write(() =>\n        database.batch(projects.prepareCreate(), projects.prepareCreate(), tasks.prepareCreate()),\n      )\n\n      expect(subscriber2).toHaveBeenCalledTimes(2)\n      expect(subscriber3).toHaveBeenCalledTimes(3)\n\n      await database.write(() => p1.update())\n\n      expect(subscriber2).toHaveBeenCalledTimes(2)\n      expect(subscriber3).toHaveBeenCalledTimes(4)\n\n      unsubscribe1()\n      unsubscribe2()\n\n      await database.write(() =>\n        database.batch(tasks.prepareCreate(), p1.prepareDestroyPermanently()),\n      )\n\n      expect(subscriber1).toHaveBeenCalledTimes(0)\n      expect(subscriber2).toHaveBeenCalledTimes(2)\n      expect(subscriber3).toHaveBeenCalledTimes(5)\n      unsubscribe3()\n    })\n    it('unsubscribe can safely be called more than once', async () => {\n      const { database, tasks } = mockDatabase()\n\n      const subscriber1 = jest.fn()\n      const unsubscribe1 = database.experimentalSubscribe(['mock_tasks'], subscriber1)\n      expect(subscriber1).toHaveBeenCalledTimes(0)\n\n      const unsubscribe2 = database.experimentalSubscribe(['mock_tasks'], () => {})\n      unsubscribe2()\n      unsubscribe2()\n\n      await database.write(() => tasks.create())\n\n      expect(subscriber1).toHaveBeenCalledTimes(1)\n      unsubscribe1()\n    })\n    it(`can subscribe with the same subscriber multiple times`, async () => {\n      const { database, tasks } = mockDatabase()\n\n      const subscriber = jest.fn()\n      const unsubscribe1 = database.experimentalSubscribe(['mock_tasks'], subscriber)\n\n      await database.write(() => tasks.create())\n      expect(subscriber).toHaveBeenCalledTimes(1)\n\n      const unsubscribe2 = database.experimentalSubscribe(['mock_tasks'], subscriber)\n\n      await database.write(() => tasks.create())\n      expect(subscriber).toHaveBeenCalledTimes(3)\n      unsubscribe2()\n      unsubscribe2() // noop\n      await database.write(() => tasks.create())\n      expect(subscriber).toHaveBeenCalledTimes(4)\n      unsubscribe1()\n      await database.write(() => tasks.create())\n      expect(subscriber).toHaveBeenCalledTimes(4)\n    })\n    it('has new objects cached before calling subscribers (regression test)', async () => {\n      const { database, projects, tasks } = mockDatabase()\n\n      const project = projects.prepareCreate()\n      const task = tasks.prepareCreate((t) => {\n        t.project.set(project)\n      })\n\n      let observerCalled = 0\n      let taskPromise = null\n      const observer = jest.fn(() => {\n        observerCalled += 1\n        if (observerCalled === 1) {\n          // nothing happens\n        } else if (observerCalled === 2) {\n          taskPromise = tasks.find(task.id)\n        }\n      })\n      database.withChangesForTables(['mock_projects']).subscribe(observer)\n      expect(observer).toHaveBeenCalledTimes(1)\n\n      await database.write(() => database.batch(project, task))\n      expect(observer).toHaveBeenCalledTimes(2)\n\n      // check if task is already cached\n      expect(await taskPromise).toBe(task)\n    })\n  })\n\n  const delayPromise = () =>\n    new Promise((resolve) => {\n      setTimeout(resolve, 100)\n    })\n\n  describe('Database readers/writers', () => {\n    it('can execute a writer block', async () => {\n      const { database } = mockDatabase()\n\n      const action = jest.fn(() => Promise.resolve(true))\n      await database.write(action)\n\n      expect(action).toHaveBeenCalledTimes(1)\n    })\n    it('queues writers/readers', async () => {\n      const { database } = mockDatabase()\n\n      const actions = [jest.fn(delayPromise), jest.fn(delayPromise), jest.fn(delayPromise)]\n\n      const promise0 = database.write(actions[0])\n      database.read(actions[1])\n\n      expect(actions[0]).toHaveBeenCalledTimes(1)\n      expect(actions[1]).toHaveBeenCalledTimes(0)\n\n      await promise0\n      const promise2 = database.write(actions[2])\n\n      expect(actions[0]).toHaveBeenCalledTimes(1)\n      expect(actions[1]).toHaveBeenCalledTimes(0)\n      expect(actions[2]).toHaveBeenCalledTimes(0)\n\n      await promise2\n\n      expect(actions[0]).toHaveBeenCalledTimes(1)\n      expect(actions[1]).toHaveBeenCalledTimes(1)\n      expect(actions[2]).toHaveBeenCalledTimes(1)\n\n      // after queue is empty I can queue again and have result immediately\n      const writer3 = jest.fn(async () => 42)\n      const promise3 = database.write(writer3)\n      expect(writer3).toHaveBeenCalledTimes(1)\n      await promise3\n    })\n    it('returns value from reader/writer', async () => {\n      const { database } = mockDatabase()\n      expect(await database.write(async () => 42)).toBe(42)\n      expect(await database.read(async () => 420)).toBe(420)\n    })\n    it('passes error from reader/writer', async () => {\n      const { database } = mockDatabase()\n      await expectToRejectWithMessage(\n        database.write(async () => {\n          throw new Error('test error')\n        }),\n        'test error',\n      )\n    })\n    it(`can distinguish between writers and readers running`, async () => {\n      const { db } = mockDatabase()\n      const actions = [jest.fn(delayPromise), jest.fn(delayPromise), jest.fn(delayPromise)]\n\n      const promise0 = db.write(actions[0])\n      db.read(actions[1])\n      expect(db._workQueue.isWriterRunning).toBe(true)\n\n      await promise0\n      const promise2 = db.write(actions[2])\n      expect(db._workQueue.isWriterRunning).toBe(false)\n\n      await promise2\n      expect(db._workQueue.isWriterRunning).toBe(false)\n\n      const promise3 = db.write(async () => 42)\n      expect(db._workQueue.isWriterRunning).toBe(true)\n      await promise3\n      expect(db._workQueue.isWriterRunning).toBe(false)\n    })\n    it('queues actions correctly even if some error out', async () => {\n      const { database } = mockDatabase()\n\n      const actions = [\n        async () => true,\n        async () => {\n          throw new Error('error1') // async error\n        },\n        async () => {\n          await delayPromise()\n          return 42\n        },\n        () => {\n          throw new Error('error2') // sync error\n        },\n        () => delayPromise(),\n      ]\n      const promises = actions.map((action) =>\n        database.write(action).then(\n          // jest will automatically fail the test if a promise rejects even though we're testing it later\n          (value) => ['value', value],\n          (error) => ['error', error],\n        ),\n      )\n      await promises[4]\n\n      // after queue is empty I can queue again\n      const action5 = jest.fn(async () => 42)\n      const promise5 = database.read(action5)\n      expect(action5).toHaveBeenCalledTimes(1)\n\n      // check if right answers\n      expect(await promises[0]).toEqual(['value', true])\n      expect(await promises[1]).toMatchObject(['error', { message: 'error1' }])\n      expect(await promises[2]).toEqual(['value', 42])\n      expect(await promises[3]).toMatchObject(['error', { message: 'error2' }])\n      expect(await promises[4]).toEqual(['value', undefined])\n      await promise5\n    })\n    it('action calling another action directly will get stuck', async () => {\n      const { database } = mockDatabase()\n\n      let called = 0\n      const subaction = () =>\n        database.write(async () => {\n          called += 1\n        })\n\n      await database.write(() => {\n        subaction()\n        return delayPromise() // don't await subaction, just see it will never be called\n      })\n      expect(called).toBe(0)\n    })\n    it(`can call readers with callReader`, async () => {\n      const { db } = mockDatabase()\n\n      const action1 = () => db.read(async () => 42)\n      const action2 = () => db.read(async (reader) => reader.callReader(() => action1()))\n      const action3 = () => db.read(async (reader) => reader.callReader(() => action2()))\n      expect(await action3()).toBe(42)\n    })\n    it(`can call writers with callWriter`, async () => {\n      const { db } = mockDatabase()\n\n      const action0 = () => db.read(async () => 42)\n      const action1 = () => db.write(async (writer) => writer.callReader(() => action0()))\n      const action2 = () => db.write(async (writer) => writer.callWriter(() => action1()))\n      expect(await action2()).toBe(42)\n    })\n    it(`cannot call writers from readers`, async () => {\n      const { db } = mockDatabase()\n\n      const writer = () => db.write(async () => 42)\n      await expectToRejectWithMessage(\n        db.read(async (reader) => reader.callWriter(() => writer())),\n        'is not a function',\n      )\n      await expectToRejectWithMessage(\n        db.read(async (reader) => reader.callReader(() => writer())),\n        'Cannot call a writer block from a reader block',\n      )\n    })\n    it('sub actions skip the line only once', async () => {\n      const { db } = mockDatabase()\n\n      let called1 = 0\n      let called2 = 0\n\n      const action1 = () =>\n        db.write(async () => {\n          called1 += 1\n        })\n      const action2 = () =>\n        db.write(async () => {\n          called2 += 1\n        })\n      await db.write((writer) => {\n        writer.callWriter(() => action1())\n        action2()\n        return delayPromise() // don't await subaction, just see it will never be called\n      })\n      expect(called1).toBe(1)\n      expect(called2).toBe(0)\n    })\n    it(`ensures that callReader/callWriter calls a reader/writer`, async () => {\n      const { db } = mockDatabase()\n      const expectError = (promise) =>\n        expectToRejectWithMessage(\n          promise,\n          'callReader/callWriter call must call a reader/writer synchronously',\n        )\n      const action = () => db.write(async () => 42)\n      await expectError(db.write(async (writer) => writer.callWriter(() => {})))\n      await expectError(db.write(async (writer) => writer.callReader(() => {})))\n      await expectError(db.read(async (reader) => reader.callReader(() => {})))\n      await expectError(\n        db.write(async (writer) =>\n          writer.callWriter(async () => {\n            await delayPromise()\n            return action()\n          }),\n        ),\n      )\n    })\n    it(`can batch from a writer interface`, async () => {\n      const { db, tasks } = mockDatabase()\n      const adapterBatchSpy = jest.spyOn(db.adapter, 'batch')\n\n      let t1, t2\n      await db.write(async (writer) => {\n        t1 = await tasks.create()\n        t2 = tasks.prepareCreate()\n        await writer.batch(\n          t2,\n          t1.prepareUpdate(() => {}),\n          null,\n          false,\n          undefined,\n        )\n      })\n\n      expect(adapterBatchSpy).toHaveBeenCalledTimes(2)\n      expect(adapterBatchSpy).toHaveBeenLastCalledWith([\n        ['create', 'mock_tasks', t2._raw],\n        ['update', 'mock_tasks', t1._raw],\n      ])\n    })\n    it(`ensures that reader/writer interface is not used after block is done`, async () => {\n      const { db } = mockDatabase()\n\n      const sth = () => db.read(async () => 42)\n\n      let saved\n      const action0 = () =>\n        db.write(async (writer) => {\n          saved = writer\n        })\n      const promise = action0()\n      saved.callReader(() => sth())\n      saved.callWriter(() => sth())\n      saved.batch()\n      await promise\n\n      const expectError = (work) =>\n        expect(work).toThrow('Illegal call on a reader/writer that should no longer be running')\n      expectError(() => saved.callReader(() => sth()))\n      expectError(() => saved.callWriter(() => sth()))\n      expectError(() => saved.batch())\n\n      db.write(async () => {})\n      expectError(() => saved.callReader(() => sth()))\n    })\n    it('aborts all pending actions if database is reset', async () => {\n      const { database } = mockDatabase()\n\n      let promise1\n      let promise2\n      let promise3\n      let dangerousActionsCalled = 0\n      let safeActionsCalled = 0\n\n      const manyActions = async () => {\n        // this will be called before reset:\n        promise1 = database.write(async () => 1)\n        await promise1\n\n        // this will be called after reset:\n        promise2 = database.write(async () => {\n          dangerousActionsCalled += 1\n        })\n        await promise2\n\n        promise3 = database.read(async () => {\n          dangerousActionsCalled += 1\n        })\n        await promise3\n      }\n\n      const promises = manyActions().catch((e) => e)\n      await database.write(() => database.unsafeResetDatabase())\n\n      // actions beyond unsafe reset should be successful\n      await Promise.all([\n        database.write(async () => {\n          safeActionsCalled += 1\n        }),\n        database.read(async () => {\n          safeActionsCalled += 1\n        }),\n      ])\n\n      expect(await promises).toMatchObject({ message: expect.stringMatching('database was reset') })\n\n      expect(await promise1).toBe(1)\n      await expectToRejectWithMessage(promise2, 'database was reset')\n      expect(promise3).toBe(undefined) // code will never reach this point\n      expect(dangerousActionsCalled).toBe(0)\n      expect(safeActionsCalled).toBe(2)\n    })\n  })\n})\n"
  },
  {
    "path": "src/DatabaseProvider/index.d.ts",
    "content": "export { default as withDatabase } from '../react/withDatabase'\nexport { default as DatabaseContext, DatabaseConsumer } from '../react/DatabaseContext'\nexport { default as DatabaseProvider } from '../react/DatabaseProvider'\n"
  },
  {
    "path": "src/DatabaseProvider/index.js",
    "content": "// @flow\n\n/**\n *\n * DEPRECATED. Change imports to `@nozbe/watermelondb/react` instead.\n *\n */\n\nexport { default as withDatabase } from '../react/withDatabase'\nexport { default as DatabaseContext, DatabaseConsumer } from '../react/DatabaseContext'\nexport { default as DatabaseProvider } from '../react/DatabaseProvider'\n"
  },
  {
    "path": "src/Model/helpers.d.ts",
    "content": "import type Model from './index'\nimport { $Exact } from '../types'\n\ntype TimestampsObj = $Exact<{ created_at?: number; updated_at?: number }>\nexport function createTimestampsFor(model: Model): TimestampsObj\n\nexport function fetchDescendants(model: Model): Promise<Model[]>\n"
  },
  {
    "path": "src/Model/helpers.js",
    "content": "// @flow\n\nimport { allPromises, unnest } from '../utils/fp'\n\nimport * as Q from '../QueryDescription'\nimport type Model from './index'\nimport type Query from '../Query/index'\n\ntype TimestampsObj = $Exact<{ created_at?: number, updated_at?: number }>\nexport const createTimestampsFor = (model: Model): TimestampsObj => {\n  const date = Date.now()\n  const timestamps: $Shape<TimestampsObj> = {}\n\n  if ('createdAt' in model) {\n    timestamps.created_at = date\n  }\n\n  if ('updatedAt' in model) {\n    timestamps.updated_at = date\n  }\n\n  return timestamps\n}\n\nfunction getChildrenQueries(model: Model): Query<Model>[] {\n  const associationsList: Array<[any, any]> = Object.entries(model.constructor.associations)\n  const hasManyAssociations = associationsList.filter(([, value]) => value.type === 'has_many')\n  const childrenQueries = hasManyAssociations.map(([key, value]) => {\n    const childCollection = model.collections.get(key)\n    return childCollection.query(Q.where(value.foreignKey, model.id))\n  })\n  return childrenQueries\n}\n\nasync function fetchDescendantsInner(model: Model): Promise<Model[]> {\n  const childPromise = async (query: Query<Model>) => {\n    const children = await query.fetch()\n    const grandchildren = await allPromises(fetchDescendantsInner, children)\n    return unnest(grandchildren).concat(children)\n  }\n  const childrenQueries = getChildrenQueries(model)\n  const results = await allPromises(childPromise, childrenQueries)\n  return unnest(results)\n}\n\nexport async function fetchDescendants(model: Model): Promise<Model[]> {\n  const descendants = await fetchDescendantsInner(model)\n  // We need to deduplicate because we can have a child accessible through multiple parents\n  // TODO: Use fp/unique after updating it not to suck\n  return Array.from(new Set(descendants))\n}\n"
  },
  {
    "path": "src/Model/index.d.ts",
    "content": "import type { Observable, BehaviorSubject } from '../utils/rx'\nimport { Unsubscribe } from '../utils/subscriptions'\nimport type { $RE, $ReadOnlyArray } from '../types'\n\nimport type Database from '../Database'\nimport type Collection from '../Collection'\nimport type CollectionMap from '../Database/CollectionMap'\nimport type { TableName, ColumnName } from '../Schema'\nimport type { Value } from '../QueryDescription'\nimport type { RawRecord, DirtyRaw } from '../RawRecord'\n\nexport type RecordId = string\n\n// NOTE: status 'disposable' MUST NOT ever appear in a persisted record\nexport type SyncStatus = 'synced' | 'created' | 'updated' | 'deleted' | 'disposable'\n\nexport type BelongsToAssociation = $RE<{ type: 'belongs_to'; key: ColumnName }>\nexport type HasManyAssociation = $RE<{ type: 'has_many'; foreignKey: ColumnName }>\nexport type AssociationInfo = BelongsToAssociation | HasManyAssociation\nexport type Associations = { [tableName: TableName<any>]: AssociationInfo }\n\nexport function associations(...associationList: [TableName<any>, AssociationInfo][]): Associations\n\nexport default class Model {\n  // Set this in concrete Models to the name of the database table\n  static table: TableName<Model>\n\n  // Set this in concrete Models to define relationships between different records\n  static associations: Associations\n\n  // Used by withObservables to differentiate between object types\n  static _wmelonTag: string\n\n  _raw: RawRecord\n\n  _isEditing: boolean\n\n  _preparedState: null | 'create' | 'update' | 'markAsDeleted' | 'destroyPermanently'\n\n  __changes?: BehaviorSubject<any>\n\n  _getChanges(): BehaviorSubject<any>\n\n  get id(): RecordId\n\n  get syncStatus(): SyncStatus\n\n  // Modifies the model (using passed function) and saves it to the database.\n  // Touches `updatedAt` if available.\n  //\n  // Example:\n  // someTask.update(task => {\n  //   task.name = 'New name'\n  // })\n  update(recordUpdater?: (_: this) => void): Promise<this>\n\n  // Prepares an update to the database (using passed function).\n  // Touches `updatedAt` if available.\n  //\n  // After preparing an update, you must execute it synchronously using\n  // database.batch()\n  prepareUpdate(recordUpdater?: (_: this) => void): this\n\n  prepareMarkAsDeleted(): this\n\n  prepareDestroyPermanently(): this\n\n  // Marks this record as deleted (will be permanently deleted after sync)\n  // Note: Use this only with Sync\n  markAsDeleted(): Promise<void>\n\n  // Pernamently removes this record from the database\n  // Note: Don't use this when using Sync\n  destroyPermanently(): Promise<void>\n\n  experimentalMarkAsDeleted(): Promise<void>\n\n  experimentalDestroyPermanently(): Promise<void>\n\n  // *** Observing changes ***\n\n  // Returns an observable that emits `this` upon subscription and every time this record changes\n  // Emits `complete` if this record is destroyed\n  observe(): Observable<this>\n\n  // *** Implementation details ***\n\n  collection: Collection<Model>\n\n  // Collections of other Models in the same domain as this record\n  get collections(): CollectionMap\n\n  get database(): Database\n\n  get db(): Database\n\n  get asModel(): this\n\n  // See: Database.batch()\n  // To be used by Model @writer methods only!\n  // TODO: protect batch,callWriter,... from being used outside a @reader/@writer\n  batch(...records: $ReadOnlyArray<Model | null | void | false>): Promise<void>\n\n  // To be used by Model @writer methods only!\n  callWriter<T>(action: () => Promise<T>): Promise<T>\n\n  // To be used by Model @writer/@reader methods only!\n  callReader<T>(action: () => Promise<T>): Promise<T>\n\n  // To be used by Model @writer/@reader methods only!\n  subAction<T>(action: () => Promise<T>): Promise<T>\n\n  get table(): TableName<this>\n\n  // FIX_TS\n  // Don't use this directly! Use `collection.create()`\n  constructor(collection: Collection<Model>, raw: RawRecord)\n\n  static _prepareCreate(collection: Collection<Model>, recordBuilder: (_: Model) => void): Model\n\n  static _prepareCreateFromDirtyRaw(collection: Collection<Model>, dirtyRaw: DirtyRaw): Model\n\n  static _disposableFromDirtyRaw(collection: Collection<Model>, dirtyRaw: DirtyRaw): Model\n\n  _subscribers: [(isDeleted: boolean) => void, any][]\n\n  experimentalSubscribe(subscriber: (isDeleted: boolean) => void, debugInfo?: any): Unsubscribe\n\n  _notifyChanged(): void\n\n  _notifyDestroyed(): void\n\n  _getRaw(rawFieldName: ColumnName): Value\n\n  _setRaw(rawFieldName: ColumnName, rawValue: Value): void\n\n  // Please don't use this unless you really understand how Watermelon Sync works, and thought long and\n  // hard about risks of inconsistency after sync\n  _dangerouslySetRawWithoutMarkingColumnChange(rawFieldName: ColumnName, rawValue: Value): void\n\n  __ensureCanSetRaw(): void\n\n  __ensureNotDisposable(debugName: string): void\n}\n"
  },
  {
    "path": "src/Model/index.js",
    "content": "// @flow\n\nimport { type Observable, BehaviorSubject } from '../utils/rx'\nimport { type Unsubscribe } from '../utils/subscriptions'\nimport logger from '../utils/common/logger'\nimport invariant from '../utils/common/invariant'\nimport ensureSync from '../utils/common/ensureSync'\nimport fromPairs from '../utils/fp/fromPairs'\nimport noop from '../utils/fp/noop'\nimport type { $RE } from '../types'\n\nimport type Database from '../Database'\nimport type Collection from '../Collection'\nimport type CollectionMap from '../Database/CollectionMap'\nimport { type TableName, type ColumnName, columnName } from '../Schema'\nimport type { Value } from '../QueryDescription'\nimport { type RawRecord, type DirtyRaw, sanitizedRaw, setRawSanitized } from '../RawRecord'\nimport { setRawColumnChange } from '../sync/helpers'\n\nimport { createTimestampsFor, fetchDescendants } from './helpers'\n\nexport type RecordId = string\n\n/**\n * Sync status of this record:\n *\n * - `synced` - up to date as of last sync\n * - `created` - locally created, not yet pushed\n * - `updated` - locally updated, not yet pushed\n * - `deleted` - locally marked as deleted, not yet pushed\n * - `disposable` - read-only, memory-only, not part of sync, MUST NOT appear in a persisted record\n */\nexport type SyncStatus = 'synced' | 'created' | 'updated' | 'deleted' | 'disposable'\n\nexport type BelongsToAssociation = $RE<{ type: 'belongs_to', key: ColumnName }>\nexport type HasManyAssociation = $RE<{ type: 'has_many', foreignKey: ColumnName }>\nexport type AssociationInfo = BelongsToAssociation | HasManyAssociation\nexport type Associations = { +[TableName<any>]: AssociationInfo }\n\n// TODO: Refactor associations API and ideally get rid of this in favor of plain arrays/objects\nexport function associations(\n  ...associationList: [TableName<any>, AssociationInfo][]\n): Associations {\n  return (fromPairs(associationList): any)\n}\n\nexport default class Model {\n  /**\n   * This must be set in Model subclasses to the name of associated database table\n   */\n  static +table: TableName<this>\n\n  /**\n   * This can be set in Model subclasses to define (parent/child) relationships between different\n   * Models.\n   *\n   * See docs for more details.\n   */\n  static associations: Associations = {}\n\n  // Used by withObservables to differentiate between object types\n  static _wmelonTag: string = 'model'\n\n  _raw: RawRecord\n\n  _isEditing: boolean = false\n\n  _preparedState: null | 'create' | 'update' | 'markAsDeleted' | 'destroyPermanently' = null\n\n  __changes: ?BehaviorSubject<$FlowFixMe<this>> = null\n\n  _getChanges(): BehaviorSubject<$FlowFixMe<this>> {\n    if (!this.__changes) {\n      // initializing lazily - it has non-trivial perf impact on very large collections\n      this.__changes = new BehaviorSubject(this)\n    }\n    return this.__changes\n  }\n\n  /**\n   * Record's ID\n   */\n  get id(): RecordId {\n    return this._raw.id\n  }\n\n  /**\n   * Record's sync status\n   *\n   * @see SyncStatus\n   */\n  get syncStatus(): SyncStatus {\n    return this._raw._status\n  }\n\n  /**\n   * Modifies the record.\n   * Pass a function to set attributes of the new record.\n   *\n   * Updates `updateAt` field (if available)\n   *\n   * Note: This method must be called within a Writer {@link Database#write}.\n   *\n   * * @example\n   * ```js\n   * someTask.create(task => {\n   *   task.name = 'New name'\n   * })\n   */\n  async update(recordUpdater: (this) => void = noop): Promise<this> {\n    this.__ensureInWriter(`Model.update()`)\n    const record = this.prepareUpdate(recordUpdater)\n    await this.db.batch(this)\n    return record\n  }\n\n  /**\n   * Prepares record to be updated\n   *\n   * Use this to batch-execute multiple changes at once.\n   * Note: Prepared changes must be executed by **synchronously** passing them to `database.batch()`\n   * @see {Model#update}\n   * @see {Database#batch}\n   */\n  prepareUpdate(recordUpdater: (this) => void = noop): this {\n    invariant(\n      !this._preparedState,\n      `Cannot update a record with pending changes (${this.__debugName})`,\n    )\n    this.__ensureNotDisposable(`Model.prepareUpdate()`)\n    this._isEditing = true\n\n    // Touch updatedAt (if available)\n    if ('updatedAt' in this) {\n      this._setRaw(columnName('updated_at'), Date.now())\n    }\n\n    // Perform updates\n    ensureSync(recordUpdater(this))\n    this._isEditing = false\n    this._preparedState = 'update'\n\n    // TODO: `process.nextTick` doesn't work on React Native\n    // We could polyfill with setImmediate, but it doesn't have the same effect — test and enseure\n    // it would actually work for this purpose\n    // TODO: Also add to other prepared changes\n    if (\n      process.env.NODE_ENV !== 'production' &&\n      typeof process !== 'undefined' &&\n      process &&\n      process.nextTick\n    ) {\n      process.nextTick(() => {\n        invariant(\n          this._preparedState !== 'update',\n          `record.prepareUpdate was called on ${this.__debugName} but wasn't sent to batch() synchronously -- this is bad!`,\n        )\n      })\n    }\n    this.__logVerbose('prepareUpdate')\n\n    return this\n  }\n\n  /**\n   * Marks this record as deleted (it will be deleted permanently after sync)\n   *\n   * Note: This method must be called within a Writer {@link Database#write}.\n   */\n  async markAsDeleted(): Promise<void> {\n    this.__ensureInWriter(`Model.markAsDeleted()`)\n    this.__ensureNotDisposable(`Model.markAsDeleted()`)\n    await this.db.batch(this.prepareMarkAsDeleted())\n  }\n\n  /**\n   * Prepares record to be marked as deleted\n   *\n   * Use this to batch-execute multiple changes at once.\n   * Note: Prepared changes must be executed by **synchronously** passing them to `database.batch()`\n   * @see {Model#markAsDeleted}\n   * @see {Database#batch}\n   */\n  prepareMarkAsDeleted(): this {\n    invariant(\n      !this._preparedState,\n      `Cannot mark a record with pending changes as deleted (${this.__debugName})`,\n    )\n    this.__ensureNotDisposable(`Model.prepareMarkAsDeleted()`)\n    this._raw._status = 'deleted'\n    this._preparedState = 'markAsDeleted'\n    this.__logVerbose('prepareMarkAsDeleted')\n    return this\n  }\n\n  /**\n   * Permanently deletes this record from the database\n   *\n   * Note: Do not use this when using Sync, as deletion will not be synced.\n   *\n   * Note: This method must be called within a Writer {@link Database#write}.\n   */\n  async destroyPermanently(): Promise<void> {\n    this.__ensureInWriter(`Model.destroyPermanently()`)\n    this.__ensureNotDisposable(`Model.destroyPermanently()`)\n    await this.db.batch(this.prepareDestroyPermanently())\n  }\n\n  /**\n   * Prepares record to be permanently destroyed\n   *\n   * Note: Do not use this when using Sync, as deletion will not be synced.\n   *\n   * Use this to batch-execute multiple changes at once.\n   * Note: Prepared changes must be executed by **synchronously** passing them to `database.batch()`\n   * @see {Model#destroyPermanently}\n   * @see {Database#batch}\n   */\n  prepareDestroyPermanently(): this {\n    invariant(\n      !this._preparedState,\n      `Cannot destroy permanently record with pending changes (${this.__debugName})`,\n    )\n    this.__ensureNotDisposable(`Model.prepareDestroyPermanently()`)\n    this._raw._status = 'deleted'\n    this._preparedState = 'destroyPermanently'\n    this.__logVerbose('prepareDestroyPermanently')\n    return this\n  }\n\n  /**\n   * Marks this records and its descendants as deleted (they will be deleted permenently after sync)\n   *\n   * Descendants are determined by taking Model's `has_many` (children) associations, and then their\n   * children associations recursively.\n   *\n   * Note: This method must be called within a Writer {@link Database#write}.\n   */\n  async experimentalMarkAsDeleted(): Promise<void> {\n    this.__ensureInWriter(`Model.experimentalMarkAsDeleted()`)\n    this.__ensureNotDisposable(`Model.experimentalMarkAsDeleted()`)\n    const records = await fetchDescendants(this)\n    records.forEach((model) => model.prepareMarkAsDeleted())\n    records.push(this.prepareMarkAsDeleted())\n    await this.db.batch(records)\n  }\n\n  /**\n   * Permanently deletes this record and its descendants from the database\n   *\n   * Descendants are determined by taking Model's `has_many` (children) associations, and then their\n   * children associations recursively.\n   *\n   * Note: Do not use this when using Sync, as deletion will not be synced.\n   *\n   * Note: This method must be called within a Writer {@link Database#write}.\n   */\n  async experimentalDestroyPermanently(): Promise<void> {\n    this.__ensureInWriter(`Model.experimentalDestroyPermanently()`)\n    this.__ensureNotDisposable(`Model.experimentalDestroyPermanently()`)\n    const records = await fetchDescendants(this)\n    records.forEach((model) => model.prepareDestroyPermanently())\n    records.push(this.prepareDestroyPermanently())\n    await this.db.batch(records)\n  }\n\n  // *** Observing changes ***\n\n  /**\n   * Returns an `Rx.Observable` that emits a signal immediately upon subscription and then every time\n   * this record changes.\n   *\n   * Signals contain this record as its value for convenience.\n   *\n   * Emits `complete` signal if this record is deleted (marked as deleted or permanently destroyed)\n   */\n  observe(): Observable<this> {\n    invariant(\n      this._preparedState !== 'create',\n      `Cannot observe uncommitted record (${this.__debugName})`,\n    )\n    return this._getChanges()\n  }\n\n  /**\n   * Collection associated with this Model\n   */\n  +collection: Collection<$FlowFixMe<this>>\n\n  // TODO: Deprecate\n  /**\n   * Collections of other Models in the same database as this record.\n   *\n   * @deprecated\n   */\n  get collections(): CollectionMap {\n    return this.database.collections\n  }\n\n  // TODO: Deprecate\n  get database(): Database {\n    return this.collection.database\n  }\n\n  /**\n   * `Database` this record is associated with\n   */\n  get db(): Database {\n    return this.collection.database\n  }\n\n  get asModel(): this {\n    return this\n  }\n\n  /**\n   * Table name of this record\n   */\n  get table(): TableName<this> {\n    return this.constructor.table\n  }\n\n  // TODO: protect batch,callWriter,... from being used outside a @reader/@writer\n  /**\n   * Convenience method that should ONLY be used by Model's `@writer`-decorated methods\n   *\n   * @see {Database#batch}\n   */\n  batch(...records: $ReadOnlyArray<Model | null | void | false>): Promise<void> {\n    return this.db.batch((records: any))\n  }\n\n  /**\n   * Convenience method that should ONLY be used by Model's `@writer`-decorated methods\n   *\n   * @see {WriterInterface#callWriter}\n   */\n  callWriter<T>(action: () => Promise<T>): Promise<T> {\n    return this.db._workQueue.subAction(action)\n  }\n\n  /**\n   * Convenience method that should ONLY be used by Model's `@writer`/`@reader`-decorated methods\n   *\n   * @see {ReaderInterface#callReader}\n   */\n  callReader<T>(action: () => Promise<T>): Promise<T> {\n    return this.db._workQueue.subAction(action)\n  }\n\n  // *** Implementation details ***\n\n  // Don't use this directly! Use `collection.create()`\n  constructor(collection: Collection<this>, raw: RawRecord): void {\n    this.collection = collection\n    this._raw = raw\n  }\n\n  static _prepareCreate(\n    collection: Collection<$FlowFixMe<this>>,\n    recordBuilder: (this) => void,\n  ): this {\n    const record = new this(\n      collection,\n      // sanitizedRaw sets id\n      sanitizedRaw(createTimestampsFor(this.prototype), collection.schema),\n    )\n\n    record._preparedState = 'create'\n    record._isEditing = true\n    ensureSync(recordBuilder(record))\n    record._isEditing = false\n\n    record.__logVerbose('prepareCreate')\n\n    return record\n  }\n\n  static _prepareCreateFromDirtyRaw(\n    collection: Collection<$FlowFixMe<this>>,\n    dirtyRaw: DirtyRaw,\n  ): this {\n    const record = new this(collection, sanitizedRaw(dirtyRaw, collection.schema))\n    record._preparedState = 'create'\n    record.__logVerbose('prepareCreateFromDirtyRaw')\n    return record\n  }\n\n  static _disposableFromDirtyRaw(\n    collection: Collection<$FlowFixMe<this>>,\n    dirtyRaw: DirtyRaw,\n  ): this {\n    const record = new this(collection, sanitizedRaw(dirtyRaw, collection.schema))\n    record._raw._status = 'disposable'\n    record.__logVerbose('disposableFromDirtyRaw')\n    return record\n  }\n\n  _subscribers: [(isDeleted: boolean) => void, any][] = []\n\n  /**\n   * Notifies `subscriber` on every change (update/delete) of this record\n   *\n   * Notification contains a flag that indicates whether the change is due to deletion\n   * (Currently, subscribers are called after `changes` emissions, but this behavior might change)\n   */\n  experimentalSubscribe(subscriber: (isDeleted: boolean) => void, debugInfo?: any): Unsubscribe {\n    const entry = [subscriber, debugInfo]\n    this._subscribers.push(entry)\n\n    return () => {\n      const idx = this._subscribers.indexOf(entry)\n      idx !== -1 && this._subscribers.splice(idx, 1)\n    }\n  }\n\n  _notifyChanged(): void {\n    this._getChanges().next(this)\n    this._subscribers.forEach(([subscriber]) => {\n      subscriber(false)\n    })\n  }\n\n  _notifyDestroyed(): void {\n    this._getChanges().complete()\n    this._subscribers.forEach(([subscriber]) => {\n      subscriber(true)\n    })\n  }\n\n  // TODO: Make this official API\n  _getRaw(rawFieldName: ColumnName): Value {\n    return this._raw[(rawFieldName: string)]\n  }\n\n  // TODO: Make this official API\n  _setRaw(rawFieldName: ColumnName, rawValue: Value): void {\n    this.__ensureCanSetRaw()\n    const valueBefore = this._raw[(rawFieldName: string)]\n    setRawSanitized(this._raw, rawFieldName, rawValue, this.collection.schema.columns[rawFieldName])\n\n    if (valueBefore !== this._raw[(rawFieldName: string)] && this._preparedState !== 'create') {\n      setRawColumnChange(this._raw, rawFieldName)\n    }\n  }\n\n  // Please don't use this unless you really understand how Watermelon Sync works, and thought long and\n  // hard about risks of inconsistency after sync\n  // TODO: Make this official API\n  _dangerouslySetRawWithoutMarkingColumnChange(rawFieldName: ColumnName, rawValue: Value): void {\n    this.__ensureCanSetRaw()\n    setRawSanitized(this._raw, rawFieldName, rawValue, this.collection.schema.columns[rawFieldName])\n  }\n\n  get __debugName(): string {\n    return `${this.table}#${this.id}`\n  }\n\n  __ensureCanSetRaw(): void {\n    this.__ensureNotDisposable(`Model._setRaw()`)\n    invariant(\n      this._isEditing,\n      `Not allowed to change record ${this.__debugName} outside of create/update()`,\n    )\n    invariant(\n      !(this._getChanges(): $FlowFixMe<BehaviorSubject<any>>).isStopped &&\n        this._raw._status !== 'deleted',\n      `Not allowed to change deleted record ${this.__debugName}`,\n    )\n  }\n\n  __ensureNotDisposable(debugName: string): void {\n    invariant(\n      this._raw._status !== 'disposable',\n      `${debugName} cannot be called on a disposable record ${this.__debugName}`,\n    )\n  }\n\n  __ensureInWriter(debugName: string): void {\n    this.db._ensureInWriter(`${debugName} (${this.__debugName})`)\n  }\n\n  __logVerbose(debugName: string): void {\n    if (this.db.experimentalIsVerbose) {\n      logger.debug(`${debugName}: ${this.__debugName}`)\n    }\n  }\n}\n"
  },
  {
    "path": "src/Model/test.js",
    "content": "/* eslint no-multi-spaces: 0 */\n\nimport { mergeMap } from 'rxjs/operators'\nimport { mockDatabase } from '../__tests__/testModels'\nimport { makeScheduler, expectToRejectWithMessage } from '../__tests__/utils'\n\nimport Database from '../Database'\nimport { appSchema, tableSchema } from '../Schema'\nimport { field, date, readonly } from '../decorators'\nimport { noop } from '../utils/fp'\nimport sortBy from '../utils/fp/sortBy'\nimport { sanitizedRaw } from '../RawRecord'\n\nimport Model from './index'\nimport { fetchDescendants } from './helpers'\n\nconst mockSchema = appSchema({\n  version: 1,\n  tables: [\n    tableSchema({\n      name: 'mock',\n      columns: [\n        { name: 'name', type: 'string' },\n        { name: 'otherfield', type: 'string' },\n        { name: 'col3', type: 'string' },\n        { name: 'col4', type: 'string', isOptional: true },\n        { name: 'number', type: 'number' },\n      ],\n    }),\n    tableSchema({\n      name: 'mock_created',\n      columns: [{ name: 'created_at', type: 'number' }],\n    }),\n    tableSchema({\n      name: 'mock_updated',\n      columns: [{ name: 'updated_at', type: 'number' }],\n    }),\n    tableSchema({\n      name: 'mock_created_updated',\n      columns: [\n        { name: 'created_at', type: 'number' },\n        { name: 'updated_at', type: 'number' },\n      ],\n    }),\n  ],\n})\n\nclass MockModel extends Model {\n  static table = 'mock'\n\n  @field('name')\n  name\n\n  @field('otherfield')\n  otherfield\n}\n\nclass MockModelCreated extends Model {\n  static table = 'mock_created'\n\n  @readonly\n  @date('created_at')\n  createdAt\n}\n\nclass MockModelUpdated extends Model {\n  static table = 'mock_updated'\n\n  @readonly\n  @date('updated_at')\n  updatedAt\n}\n\nclass MockModelCreatedUpdated extends Model {\n  static table = 'mock_created_updated'\n\n  @readonly\n  @date('created_at')\n  createdAt\n\n  @readonly\n  @date('updated_at')\n  updatedAt\n}\n\nconst makeDatabase = () =>\n  new Database({\n    adapter: { schema: mockSchema },\n    modelClasses: [MockModel, MockModelCreated, MockModelUpdated, MockModelCreatedUpdated],\n  })\n\ndescribe('Model', () => {\n  it(`exposes database`, () => {\n    const database = makeDatabase()\n    const model = new MockModel(database.get('mock'), {})\n    expect(model.database).toBe(database)\n    expect(model.db).toBe(database)\n  })\n  it('exposes collections', () => {\n    const database = makeDatabase()\n    const model = new MockModel(database.get('mock'), {})\n    expect(model.collections).toBe(database.collections)\n    expect(model.collections.get('mock_created').modelClass).toBe(MockModelCreated)\n  })\n  it(`has wmelon tag`, () => {\n    const model = new MockModel({}, {})\n    expect(model.constructor._wmelonTag).toBe('model')\n  })\n})\n\ndescribe('CRUD', () => {\n  it('_prepareCreate: can instantiate new records', () => {\n    const database = makeDatabase()\n    const collection = database.get('mock')\n    const m1 = MockModel._prepareCreate(collection, (record) => {\n      expect(record._isEditing).toBe(true)\n      record.name = 'Some name'\n    })\n\n    expect(m1.collection).toBe(collection)\n    expect(m1._isEditing).toBe(false)\n    expect(m1._preparedState).toBe('create')\n    expect(m1.id.length).toBe(16)\n    expect(m1.createdAt).toBe(undefined)\n    expect(m1.updatedAt).toBe(undefined)\n    expect(m1.name).toBe('Some name')\n    expect(m1._raw).toEqual({\n      id: m1.id,\n      _status: 'created',\n      _changed: '',\n      name: 'Some name',\n      otherfield: '',\n      col3: '',\n      col4: null,\n      number: 0,\n    })\n  })\n  it('_prepareCreateFromDirtyRaw: can instantiate new records', () => {\n    const database = makeDatabase()\n    const collection = database.get('mock')\n    const m1 = MockModel._prepareCreateFromDirtyRaw(collection, { name: 'Some name' })\n\n    expect(m1.collection).toBe(collection)\n    expect(m1._isEditing).toBe(false)\n    expect(m1._preparedState).toBe('create')\n    expect(m1.id.length).toBe(16)\n    expect(m1.createdAt).toBe(undefined)\n    expect(m1.updatedAt).toBe(undefined)\n    expect(m1.name).toBe('Some name')\n    expect(m1._raw).toEqual({\n      id: m1.id,\n      _status: 'created',\n      _changed: '',\n      name: 'Some name',\n      otherfield: '',\n      col3: '',\n      col4: null,\n      number: 0,\n    })\n\n    // can take the entire raw record without changing if it's valid\n    const raw = Object.freeze({\n      id: 'abcde67890123456',\n      _status: 'synced',\n      _changed: '',\n      name: 'Hey',\n      otherfield: 'foo',\n      col3: '',\n      col4: null,\n      number: 100,\n    })\n    const m2 = MockModel._prepareCreateFromDirtyRaw(collection, raw)\n    expect(m2._raw).toEqual(raw)\n    expect(m2._raw).not.toBe(raw)\n  })\n  it('can update a record', async () => {\n    const db = makeDatabase()\n    await db.write(async () => {\n      db.adapter.batch = jest.fn()\n      const spyBatchDB = jest.spyOn(db, 'batch')\n\n      const collection = db.get('mock')\n      const m1 = await collection.create((record) => {\n        record.name = 'Original name'\n      })\n\n      const spyOnPrepareUpdate = jest.spyOn(m1, 'prepareUpdate')\n      const observer = jest.fn()\n      m1.observe().subscribe(observer)\n\n      expect(m1._isEditing).toBe(false)\n\n      const update = await m1.update((record) => {\n        expect(m1._isEditing).toBe(true)\n        record.name = 'New name'\n      })\n\n      expect(spyBatchDB).toHaveBeenCalledWith(m1)\n      expect(spyOnPrepareUpdate).toHaveBeenCalledTimes(1)\n      expect(observer).toHaveBeenCalledTimes(2)\n      expect(update).toBe(m1)\n\n      expect(m1.name).toBe('New name')\n      expect(m1.updatedAt).toBe(undefined)\n      expect(m1._isEditing).toBe(false)\n      expect(m1._preparedState).toBe(null)\n    })\n  })\n  it('can prepare an update', async () => {\n    const db = makeDatabase()\n    db.adapter.batch = jest.fn()\n\n    const collection = db.get('mock')\n\n    const m1 = await db.write(() =>\n      collection.create((record) => {\n        record.name = 'Original name'\n      }),\n    )\n\n    expect(db.adapter.batch).toHaveBeenCalledTimes(1)\n\n    const observer = jest.fn()\n    m1.observe().subscribe(observer)\n\n    const preparedUpdate = m1.prepareUpdate((record) => {\n      expect(m1._isEditing).toBe(true)\n      record.name = 'New name'\n    })\n\n    expect(preparedUpdate).toBe(m1)\n\n    expect(m1.name).toBe('New name')\n    expect(m1.updatedAt).toBe(undefined)\n    expect(m1._isEditing).toBe(false)\n    expect(m1._preparedState).toBe('update')\n    expect(db.adapter.batch).toHaveBeenCalledTimes(1)\n\n    expect(observer).toHaveBeenCalledTimes(1)\n\n    await db.write(() => db.batch(preparedUpdate))\n  })\n  it('can destroy a record permanently', async () => {\n    const db = makeDatabase()\n    db.adapter.batch = jest.fn()\n    const spyBatchDB = jest.spyOn(db, 'batch')\n\n    const m1 = await db.write(() => db.get('mock').create())\n    expect(spyBatchDB).toHaveBeenCalledWith(m1)\n\n    const spyOnPrepareDestroyPermanently = jest.spyOn(m1, 'prepareDestroyPermanently')\n    const nextObserver = jest.fn()\n    const completionObserver = jest.fn()\n    m1.observe().subscribe(nextObserver, null, completionObserver)\n\n    await db.write(() => m1.destroyPermanently())\n\n    expect(spyOnPrepareDestroyPermanently).toHaveBeenCalledTimes(1)\n\n    expect(nextObserver).toHaveBeenCalledTimes(1)\n    expect(completionObserver).toHaveBeenCalledTimes(1)\n\n    expect(m1._isEditing).toBe(false)\n    expect(m1._preparedState).toBe(null)\n    expect(m1.syncStatus).toBe('deleted')\n  })\n  it('can destroy a record and its children permanently', async () => {\n    const { db, projects, tasks, comments } = mockDatabase()\n    await db.write(async () => {\n      const project = await projects.create((mock) => {\n        mock.name = 'foo'\n      })\n\n      const task = await tasks.create((mock) => {\n        mock.project.set(project)\n      })\n\n      const comment = await comments.create((mock) => {\n        mock.task.set(task)\n      })\n\n      db.adapter.batch = jest.fn()\n      const spyBatchDB = jest.spyOn(db, 'batch')\n\n      const spyOnPrepareDestroyPermanentlyProject = jest.spyOn(project, 'prepareDestroyPermanently')\n      const spyOnPrepareDestroyPermanentlyTask = jest.spyOn(task, 'prepareDestroyPermanently')\n      const spyOnPrepareDestroyPermanentlyComment = jest.spyOn(comment, 'prepareDestroyPermanently')\n\n      await project.experimentalDestroyPermanently()\n\n      expect(spyOnPrepareDestroyPermanentlyProject).toHaveBeenCalledTimes(1)\n      expect(spyOnPrepareDestroyPermanentlyTask).toHaveBeenCalledTimes(1)\n      expect(spyOnPrepareDestroyPermanentlyComment).toHaveBeenCalledTimes(1)\n\n      expect(spyBatchDB).toHaveBeenCalledWith([comment, task, project])\n    })\n  })\n  it('can mark a record as deleted', async () => {\n    const db = makeDatabase()\n    db.adapter.batch = jest.fn()\n    const spyBatchDB = jest.spyOn(db, 'batch')\n\n    const m1 = await db.write(() => db.get('mock').create())\n    expect(spyBatchDB).toHaveBeenCalledWith(m1)\n\n    const spyOnMarkAsDeleted = jest.spyOn(m1, 'prepareMarkAsDeleted')\n    const nextObserver = jest.fn()\n    const completionObserver = jest.fn()\n    m1.observe().subscribe(nextObserver, null, completionObserver)\n\n    await db.write(() => m1.markAsDeleted())\n\n    expect(spyOnMarkAsDeleted).toHaveBeenCalledTimes(1)\n\n    expect(nextObserver).toHaveBeenCalledTimes(1)\n    expect(completionObserver).toHaveBeenCalledTimes(1)\n\n    expect(m1._isEditing).toBe(false)\n    expect(m1._preparedState).toBe(null)\n    expect(m1.syncStatus).toBe('deleted')\n  })\n  it('can mark as deleted record and its children permanently', async () => {\n    const { db, projects, tasks, comments } = mockDatabase()\n    await db.write(async () => {\n      const project = await projects.create((mock) => {\n        mock.name = 'foo'\n      })\n\n      const task = await tasks.create((mock) => {\n        mock.project.set(project)\n      })\n\n      const comment = await comments.create((mock) => {\n        mock.task.set(task)\n      })\n\n      db.adapter.batch = jest.fn()\n      const spyBatchDB = jest.spyOn(db, 'batch')\n\n      const spyOnPrepareMarkAsDeletedProject = jest.spyOn(project, 'prepareMarkAsDeleted')\n      const spyOnPrepareMarkAsDeletedTask = jest.spyOn(task, 'prepareMarkAsDeleted')\n      const spyOnPrepareMarkAsDeletedComment = jest.spyOn(comment, 'prepareMarkAsDeleted')\n\n      await project.experimentalMarkAsDeleted()\n\n      expect(spyOnPrepareMarkAsDeletedProject).toHaveBeenCalledTimes(1)\n      expect(spyOnPrepareMarkAsDeletedTask).toHaveBeenCalledTimes(1)\n      expect(spyOnPrepareMarkAsDeletedComment).toHaveBeenCalledTimes(1)\n\n      expect(spyBatchDB).toHaveBeenCalledWith([comment, task, project])\n    })\n  })\n})\n\ndescribe('Safety features', () => {\n  it('throws if batch is not called synchronously with prepareUpdate', async () => {\n    // TODO: No clue how to implement this test\n  })\n  it('disallows field changes outside of create/update', () => {\n    const db = makeDatabase()\n    const model = new MockModel(db.get('mock'), {})\n\n    expect(() => {\n      model.name = 'new'\n    }).toThrow()\n    expect(() => {\n      model.otherfield = 'new'\n    }).toThrow()\n    expect(() => {\n      model._setRaw('name', 'new')\n    }).toThrow()\n    expect(() => {\n      model._dangerouslySetRawWithoutMarkingColumnChange('name', 'new')\n    }).toThrow()\n  })\n  it('disallows changes to just-deleted records', async () => {\n    const db = makeDatabase()\n    db.adapter.batch = jest.fn()\n    await db.write(async () => {\n      const m1 = await db.get('mock').create()\n      await m1.destroyPermanently()\n\n      await expectToRejectWithMessage(\n        m1.update(() => {\n          m1.name = 'new'\n        }),\n        'Not allowed to change deleted record',\n      )\n    })\n  })\n  it('disallows changes to previously-deleted records', async () => {\n    const db = makeDatabase()\n    await db.write(async () => {\n      const m1 = new MockModel(db.get('mock'), {\n        _status: 'deleted',\n      })\n\n      await expectToRejectWithMessage(\n        m1.update(() => {\n          m1.name = 'new'\n        }),\n        'Not allowed to change deleted record',\n      )\n    })\n  })\n  it('diallows direct manipulation of id', async () => {\n    const db = makeDatabase()\n    db.adapter.batch = jest.fn()\n    await db.write(async () => {\n      const model = await db.get('mock').create()\n\n      await expectToRejectWithMessage(\n        model.update(() => {\n          model.id = 'newId'\n        }),\n        'Cannot set property id',\n      )\n    })\n  })\n  it('disallows operations on uncommited records', async () => {\n    const db = makeDatabase()\n    db.adapter.batch = jest.fn()\n    await db.write(async () => {\n      const model = MockModel._prepareCreate(db.get('mock'), () => {})\n      expect(model._preparedState).toBe('create')\n\n      await expectToRejectWithMessage(\n        model.update(() => {}),\n        'with pending changes',\n      )\n      await expectToRejectWithMessage(model.markAsDeleted(), 'with pending changes')\n      await expectToRejectWithMessage(model.destroyPermanently(), 'with pending changes')\n      expect(() => model.observe()).toThrow('uncommitted')\n      await db.batch(model)\n    })\n  })\n  it('disallows changes on records with pending updates', async () => {\n    const db = makeDatabase()\n    db.adapter.batch = jest.fn()\n    await db.write(async () => {\n      const model = new MockModel(db.get('mock'), {})\n      model.prepareUpdate()\n      expect(() => {\n        model.prepareUpdate()\n      }).toThrow('with pending changes')\n      await expectToRejectWithMessage(\n        model.update(() => {}),\n        'with pending changes',\n      )\n\n      await db.batch(model)\n    })\n  })\n  it('disallows writes outside of an writer', async () => {\n    const db = makeDatabase()\n    db.adapter.batch = jest.fn()\n\n    const model = await db.write(() => db.get('mock').create())\n\n    const expectError = (promise) =>\n      expectToRejectWithMessage(promise, 'can only be called from inside of a Writer')\n\n    await expectError(model.update(noop))\n    await expectError(model.markAsDeleted())\n    await expectError(model.destroyPermanently())\n    await expectError(model.experimentalMarkAsDeleted())\n    await expectError(model.experimentalDestroyPermanently())\n\n    await expectError(db.read(() => model.update(noop)))\n    await expectError(db.read(() => model.markAsDeleted()))\n    await expectError(db.read(() => model.destroyPermanently()))\n    await expectError(db.read(() => model.experimentalMarkAsDeleted()))\n    await expectError(db.read(() => model.experimentalDestroyPermanently()))\n\n    // check that no throw inside writer\n    await db.write(async () => {\n      await model.update(noop)\n      await model.markAsDeleted()\n      await model.destroyPermanently()\n      await model.experimentalMarkAsDeleted()\n      await model.experimentalDestroyPermanently()\n    })\n  })\n})\n\ndescribe('Automatic created_at/updated_at', () => {\n  it('_prepareCreate: sets created_at on create if model defines it', () => {\n    const db = makeDatabase()\n    const m1 = MockModelCreated._prepareCreate(db.get('mock_created'), noop)\n\n    expect(m1.createdAt).toBeInstanceOf(Date)\n    expect(+m1.createdAt).toBeGreaterThan(1500000000000)\n    expect(m1.updatedAt).toBe(undefined)\n  })\n  it('_prepareCreate: sets created_at, updated_at on create if model defines it', () => {\n    const db = makeDatabase()\n    const m1 = MockModelCreatedUpdated._prepareCreate(db.get('mock_created_updated'), noop)\n\n    expect(m1.createdAt).toBeInstanceOf(Date)\n    expect(+m1.createdAt).toBe(+m1.updatedAt)\n  })\n  it('touches updated_at on update if model defines it', async () => {\n    const db = makeDatabase()\n    db.adapter.batch = jest.fn()\n    await db.write(async () => {\n      const m1 = await db.get('mock_updated').create((record) => {\n        record._raw.updated_at -= 100\n      })\n      const updatedAt = +m1.updatedAt\n\n      await m1.update()\n      expect(+m1.updatedAt).toBeGreaterThan(updatedAt)\n    })\n  })\n})\n\ndescribe('RawRecord manipulation', () => {\n  it('allows raw access via _getRaw', () => {\n    const model = new MockModel(null, {\n      col1: 'val1',\n      col2: false,\n      col3: null,\n    })\n\n    expect(model._getRaw('col1')).toBe('val1')\n    expect(model._getRaw('col2')).toBe(false)\n    expect(model._getRaw('col3')).toBe(null)\n\n    model._raw.col1 = 'val2'\n    expect(model._getRaw('col1')).toBe('val2')\n  })\n  it('allows raw writes via _setRaw', async () => {\n    const db = makeDatabase()\n    db.adapter.batch = jest.fn()\n    const model = new MockModel(\n      db.get('mock'),\n      sanitizedRaw({ name: 'val1' }, mockSchema.tables.mock),\n    )\n\n    await db.write(() =>\n      model.update(() => {\n        model._setRaw('name', 'val2')\n        model._setRaw('otherfield', 'val3')\n      }),\n    )\n\n    expect(model._raw.name).toBe('val2')\n    expect(model._raw.otherfield).toBe('val3')\n  })\n  it('allows raw writes via _dangerouslySetRawWithoutMarkingColumnChange', async () => {\n    const db = makeDatabase()\n    db.adapter.batch = jest.fn()\n    const model = new MockModel(\n      db.get('mock'),\n      sanitizedRaw({ name: 'val1' }, mockSchema.tables.mock),\n    )\n\n    await db.write(() =>\n      model.update(() => {\n        model._dangerouslySetRawWithoutMarkingColumnChange('name', 'val2')\n        model._dangerouslySetRawWithoutMarkingColumnChange('otherfield', 'val3')\n      }),\n    )\n\n    expect(model._raw.name).toBe('val2')\n    expect(model._raw.otherfield).toBe('val3')\n  })\n})\n\ndescribe('Sync status fields', () => {\n  it('adds to changes on _setRaw', async () => {\n    const db = makeDatabase()\n    db.adapter.batch = jest.fn()\n    await db.write(async () => {\n      const model = await db.get('mock').create((newModel) => {\n        newModel._setRaw('name', 'val1')\n        newModel._setRaw('otherfield', 'val2')\n      })\n\n      expect(model._raw._status).toBe('created')\n      expect(model._raw._changed).toBe('')\n\n      // update created record\n      await model.update(() => {\n        model._setRaw('col3', 'val3')\n        model._setRaw('col3', 'val4')\n        model._setRaw('col4', 'val5')\n        model._setRaw('col3', 'val6')\n      })\n\n      expect(model._raw._status).toBe('created')\n      expect(model._raw._changed).toBe('col3,col4')\n\n      // update synced record\n      const model2 = new MockModel(\n        db.get('mock'),\n        sanitizedRaw({ id: 'xx', _status: 'synced' }, mockSchema.tables.mock),\n      )\n      await model2.update(() => {\n        model2._setRaw('name', 'val1')\n      })\n\n      expect(model2._raw._status).toBe('updated')\n      expect(model2._raw._changed).toBe('name')\n\n      // update updated record\n      await model2.update(() => {\n        model2._setRaw('otherfield', 'hello')\n      })\n\n      expect(model2._raw._status).toBe('updated')\n      expect(model2._raw._changed).toBe('name,otherfield')\n    })\n  })\n  it('does not add to _changed if sanitized value is equal to current value', async () => {\n    const db = makeDatabase()\n    db.adapter.batch = jest.fn()\n    await db.write(async () => {\n      const model = new MockModel(\n        db.get('mock'),\n        sanitizedRaw({ col3: '', number: 0 }, mockSchema.tables.mock),\n      )\n\n      await model.update(() => {\n        model._raw.id = 'xxx'\n        model._raw._status = 'updated'\n\n        model._setRaw('name', null) // ensure we're comparing sanitized values\n        model._setRaw('otherfield', '')\n        model._setRaw('col3', 'foo')\n        model._setRaw('col4', undefined)\n        model._setRaw('number', NaN)\n        expect(model._raw._changed).toBe('col3')\n        model._setRaw('number', 10)\n      })\n\n      expect(model._raw).toEqual({\n        _status: 'updated',\n        _changed: 'col3,number',\n        id: 'xxx',\n        name: '',\n        otherfield: '',\n        col3: 'foo',\n        col4: null,\n        number: 10,\n      })\n    })\n  })\n  it('does not change _changed fields when using _dangerouslySetRawWithoutMarkingColumnChange', async () => {\n    const db = makeDatabase()\n    db.adapter.batch = jest.fn()\n    await db.write(async () => {\n      const model = new MockModel(db.get('mock'), sanitizedRaw({}, mockSchema.tables.mock))\n\n      await model.update(() => {\n        model._raw._status = 'updated'\n\n        model._dangerouslySetRawWithoutMarkingColumnChange('col3', 'foo')\n      })\n\n      expect(model._raw.col3).toBe('foo')\n      expect(model._raw._status).toBe('updated')\n      expect(model._raw._changed).toBe('')\n\n      await model.update(() => {\n        model._setRaw('otherfield', 'heh')\n        model._dangerouslySetRawWithoutMarkingColumnChange('number', 10)\n      })\n\n      expect(model._raw._changed).toBe('otherfield')\n    })\n  })\n  it('marks new records as status:created', async () => {\n    const db = makeDatabase()\n    db.adapter.batch = jest.fn()\n    await db.write(async () => {\n      const mock = await db.get('mock').create((record) => {\n        record.name = 'Initial name'\n      })\n\n      expect(mock._raw._status).toBe('created')\n      expect(mock._raw._changed).toBe('')\n\n      expect(mock.syncStatus).toBe('created')\n\n      // updating a status:created record DOES add to changed (as of v23)\n      await mock.update((record) => {\n        record.name = 'New name'\n      })\n\n      expect(mock.syncStatus).toBe('created')\n      expect(mock._raw._changed).toBe('name')\n    })\n  })\n  it('marks updated records with changed fields', async () => {\n    const db = makeDatabase()\n    db.adapter.batch = jest.fn()\n\n    const mock = new MockModel(\n      db.get('mock'),\n      sanitizedRaw(\n        {\n          id: '',\n          _status: 'synced',\n          name: 'Initial name',\n        },\n        mockSchema.tables.mock,\n      ),\n    )\n\n    // update\n    await db.write(() =>\n      mock.update((record) => {\n        record.name = 'New name'\n      }),\n    )\n\n    expect(mock._raw._status).toBe('updated')\n    expect(mock._raw._changed).toBe('name')\n\n    // change another field\n    await db.write(() =>\n      mock.update((record) => {\n        record.otherfield = 'New value'\n      }),\n    )\n\n    expect(mock._raw._status).toBe('updated')\n    expect(mock._raw._changed).toBe('name,otherfield')\n\n    // no duplicated change fields\n    await db.write(() =>\n      mock.update((record) => {\n        record.name = 'New name 2'\n      }),\n    )\n\n    expect(mock._raw._changed).toBe('name,otherfield')\n  })\n  it('marks update_at as updated when auto-touched', async () => {\n    const db = makeDatabase()\n    db.adapter.batch = jest.fn()\n\n    const m1 = new MockModelUpdated(db.get('mock_updated'), {})\n    await db.write(() => m1.update())\n\n    expect(m1._raw._status).toBe('updated')\n    expect(m1._raw._changed).toBe('updated_at')\n  })\n})\n\ndescribe('Disposable Models', () => {\n  it(`can create a disposable record`, () => {\n    const db = makeDatabase()\n    const record = MockModel._disposableFromDirtyRaw(db.get('mock'), {\n      id: 'm1',\n      name: 'foo',\n      otherfield: 123,\n      number: 3.14,\n    })\n    expect(record.database).toBe(db)\n    expect(record._raw).toEqual({\n      id: 'm1',\n      _status: 'disposable',\n      _changed: '',\n      name: 'foo',\n      otherfield: '',\n      col3: '',\n      col4: null,\n      number: 3.14,\n    })\n    expect(record.id).toBe('m1')\n    expect(record.syncStatus).toBe('disposable')\n    expect(record.name).toBe('foo')\n    expect(record.otherfield).toBe('')\n    expect(record._getRaw('name')).toBe('foo')\n    expect(record._getRaw('number')).toBe(3.14)\n  })\n  it(`cannot modify a disposable record`, async () => {\n    const db = makeDatabase()\n    const record = MockModel._disposableFromDirtyRaw(db.get('mock'), { id: 'm1', name: 'foo' })\n\n    const expectError = (writeAction) =>\n      expectToRejectWithMessage(db.write(writeAction), 'cannot be called on a disposable record')\n\n    await expectError(() => record.prepareUpdate(noop))\n    await expectError(() => record.prepareMarkAsDeleted())\n    await expectError(() => record.prepareDestroyPermanently())\n    await expectError(() => record._setRaw('', ''))\n    await expectError(() => record._dangerouslySetRawWithoutMarkingColumnChange('', ''))\n    await expectError(() => record.update(noop))\n    await expectError(() => record.markAsDeleted())\n    await expectError(() => record.experimentalMarkAsDeleted())\n    await expectError(() => record.experimentalDestroyPermanently())\n  })\n})\n\ndescribe('Model observation', () => {\n  it('notifies Rx observers of changes and deletion', () => {\n    const model = new MockModel(null, {})\n    const scheduler = makeScheduler()\n\n    const changes__ = '--a---a----a-a---b'\n    const a________ = '---x|'\n    const b________ = '--------x|'\n    const c________ = 'x|'\n    const aExpected = '---m--m----m-m---|'\n    const bExpected = '--------m--m-m---|'\n    const cExpected = 'm-m---m----m-m---|'\n\n    scheduler.hot(changes__).subscribe((event) => {\n      event === 'a' ? model._notifyChanged() : model._notifyDestroyed()\n    })\n\n    const a$ = scheduler.hot(a________).pipe(mergeMap(() => model.observe()))\n    const b$ = scheduler.hot(b________).pipe(mergeMap(() => model.observe()))\n    const c$ = scheduler.hot(c________).pipe(mergeMap(() => model.observe()))\n\n    scheduler.expectObservable(a$).toBe(aExpected, { m: model })\n    scheduler.expectObservable(b$).toBe(bExpected, { m: model })\n    scheduler.expectObservable(c$).toBe(cExpected, { m: model })\n    scheduler.flush()\n  })\n  it('notifies subscribers of changes and deletion', async () => {\n    const { tasks, db } = mockDatabase()\n    await db.write(async () => {\n      const task = await tasks.create()\n\n      const observer1 = jest.fn()\n      const unsubscribe1 = task.experimentalSubscribe(observer1)\n      expect(observer1).toHaveBeenCalledTimes(0)\n\n      await task.update()\n      expect(observer1).toHaveBeenCalledTimes(1)\n      expect(observer1).toHaveBeenLastCalledWith(false)\n\n      const observer2 = jest.fn()\n      const unsubscribe2 = task.experimentalSubscribe(observer2)\n      expect(observer2).toHaveBeenCalledTimes(0)\n\n      unsubscribe1()\n\n      const observer3 = jest.fn()\n      const unsubscribe3 = task.experimentalSubscribe(observer3)\n\n      await task.update()\n\n      expect(observer2).toHaveBeenCalledTimes(1)\n      expect(observer3).toHaveBeenCalledTimes(1)\n\n      unsubscribe2()\n\n      await task.update()\n\n      expect(observer3).toHaveBeenCalledTimes(2)\n      expect(observer3).toHaveBeenLastCalledWith(false)\n\n      await task.markAsDeleted()\n\n      expect(observer3).toHaveBeenCalledTimes(3)\n      expect(observer3).toHaveBeenLastCalledWith(true)\n\n      unsubscribe3()\n      unsubscribe3()\n\n      expect(observer1).toHaveBeenCalledTimes(1)\n      expect(observer2).toHaveBeenCalledTimes(1)\n      expect(observer3).toHaveBeenCalledTimes(3)\n    })\n  })\n  it('unsubscribe can safely be called more than once', async () => {\n    const { tasks, db } = mockDatabase()\n    const task = await db.write(() => tasks.create())\n\n    const observer1 = jest.fn()\n    const unsubscribe1 = task.experimentalSubscribe(observer1)\n    expect(observer1).toHaveBeenCalledTimes(0)\n\n    const unsubscribe2 = task.experimentalSubscribe(() => {})\n    unsubscribe2()\n    unsubscribe2()\n\n    await db.write(() => task.update())\n\n    expect(observer1).toHaveBeenCalledTimes(1)\n\n    unsubscribe1()\n  })\n  it(`can subscribe with the same subscriber multiple times`, async () => {\n    const { db, tasks } = mockDatabase()\n    const task = await db.write(() => tasks.create())\n    const trigger = () => db.write(() => task.update())\n    const subscriber = jest.fn()\n\n    const unsubscribe1 = task.experimentalSubscribe(subscriber)\n    expect(subscriber).toHaveBeenCalledTimes(0)\n    await trigger()\n    expect(subscriber).toHaveBeenCalledTimes(1)\n    const unsubscribe2 = task.experimentalSubscribe(subscriber)\n    expect(subscriber).toHaveBeenCalledTimes(1)\n    await trigger()\n    expect(subscriber).toHaveBeenCalledTimes(3)\n    unsubscribe2()\n    unsubscribe2() // noop\n    await trigger()\n    expect(subscriber).toHaveBeenCalledTimes(4)\n    unsubscribe1()\n    await trigger()\n    expect(subscriber).toHaveBeenCalledTimes(4)\n  })\n})\n\ndescribe('model helpers', () => {\n  it('checks if fetchDescendants retrieves all the children', async () => {\n    const { projects, projectSections: sections, tasks, comments, db } = mockDatabase()\n    await db.write(async () => {\n      const prepare = (collection, raw) => collection.prepareCreateFromDirtyRaw(raw)\n\n      const sort = (list) => sortBy((record) => record.id, list)\n\n      const p1 = prepare(projects, { id: 'p1' })\n      const p1_descendants = [\n        prepare(tasks, { id: 't1', project_id: 'p1' }),\n        prepare(comments, { id: 'c1', task_id: 't1' }),\n        prepare(comments, { id: 'c2', task_id: 't1' }),\n        prepare(tasks, { id: 't2', project_id: 'p1' }),\n        prepare(comments, { id: 'c3', task_id: 't2' }),\n      ]\n      const p2 = prepare(projects, { id: 'p2' })\n      const p2_descendants = [\n        prepare(tasks, { id: 't3', project_id: 'p2' }),\n        prepare(comments, { id: 'c4', task_id: 't3' }),\n        prepare(sections, { id: 's1', project_id: 'p2' }),\n        prepare(tasks, { id: 't4', project_id: 'p2', project_section_id: 's1' }),\n        prepare(tasks, { id: 't5', project_id: 'p2', project_section_id: 's1' }),\n        prepare(tasks, { id: 't6', project_id: 'p2', project_section_id: 's1' }),\n        prepare(comments, { id: 'c5', task_id: 't6' }),\n        prepare(sections, { id: 's2', project_id: 'p2' }),\n      ]\n\n      await db.batch(p1, ...p1_descendants, p2, ...p2_descendants)\n\n      expect(sort(await fetchDescendants(p1))).toEqual(sort(p1_descendants))\n      expect(sort(await fetchDescendants(p2)).length).toEqual(sort(p2_descendants).length)\n      expect(sort(await fetchDescendants(p2))).toEqual(sort(p2_descendants))\n    })\n  })\n})\n"
  },
  {
    "path": "src/Query/helpers.d.ts",
    "content": "/* eslint-disable import/no-named-as-default-member */\n/* eslint-disable import/no-named-as-default */\n// @flow\n\nimport type Model from '../Model'\nimport type Database from '../Database'\nimport type { QueryDescription } from '../QueryDescription'\n\nimport type { QueryAssociation } from './index'\n\nexport function getAssociations(\n  description: QueryDescription,\n  modelClass: Model,\n  db: Database,\n): QueryAssociation[]\n"
  },
  {
    "path": "src/Query/helpers.js",
    "content": "// @flow\n\nimport type Model from '../Model'\nimport invariant from '../utils/common/invariant'\nimport type Database from '../Database'\nimport type { QueryDescription } from '../QueryDescription'\n\nimport type { QueryAssociation } from './index'\n\nexport const getAssociations = (\n  description: QueryDescription,\n  modelClass: Class<Model>,\n  db: Database,\n): QueryAssociation[] =>\n  description.joinTables\n    .map((table) => {\n      const info = modelClass.associations[table]\n      invariant(\n        info,\n        `Query on '${modelClass.table}' joins with '${table}', but ${modelClass.name} does not have associations={} defined for '${table}'`,\n      )\n      return { from: modelClass.table, to: table, info }\n    })\n    .concat(\n      description.nestedJoinTables.map(({ from, to }) => {\n        const collection = db.get(from)\n        invariant(\n          collection,\n          `Query on '${modelClass.table}' has a nested join with '${from}', but collection for '${from}' cannot be found`,\n        )\n        const info = collection.modelClass.associations[to]\n        invariant(\n          info,\n          `Query on '${modelClass.table}' has a nested join from '${from}' to '${to}', but ${collection.modelClass.name} does not have associations={} defined for '${to}'`,\n        )\n        return {\n          from,\n          to,\n          info,\n        }\n      }),\n    )\n"
  },
  {
    "path": "src/Query/index.d.ts",
    "content": "import { Observable } from '../utils/rx'\nimport type { ArrayOrSpreadFn } from '../utils/fp'\nimport type { Unsubscribe, SharedSubscribable } from '../utils/subscriptions'\nimport { $Exact } from '../types'\n\nimport type { Clause, QueryDescription } from '../QueryDescription'\nimport type Model from '../Model'\nimport type { AssociationInfo, RecordId } from '../Model'\nimport type Collection from '../Collection'\nimport type { TableName, ColumnName } from '../Schema'\n\nexport type QueryAssociation = $Exact<{\n  from: TableName<any>\n  to: TableName<any>\n  info: AssociationInfo\n}>\n\nexport type SerializedQuery = $Exact<{\n  table: TableName<any>\n  description: QueryDescription\n  associations: QueryAssociation[]\n}>\n\ninterface QueryCountProxy {\n  then<U>(\n    onFulfill?: (value: number) => Promise<U> | U,\n    onReject?: (error: any) => Promise<U> | U,\n  ): Promise<U>\n}\n\nexport default class Query<Record extends Model> {\n  // Used by withObservables to differentiate between object types\n  static _wmelonTag: string\n\n  collection: Collection<Record>\n\n  description: QueryDescription\n\n  _rawDescription: QueryDescription\n\n  _cachedSubscribable: SharedSubscribable<Record[]>\n\n  _cachedCountSubscribable: SharedSubscribable<number>\n\n  _cachedCountThrottledSubscribable: SharedSubscribable<number>\n\n  // Note: Don't use this directly, use Collection.query(...)\n  constructor(collection: Collection<Record>, clauses: Clause[])\n\n  // Creates a new Query that extends the clauses of this query\n  extend: ArrayOrSpreadFn<Clause, Query<Record>>\n\n  pipe<T>(transform: (_: this) => T): T\n\n  // Queries database and returns an array of matching records\n  fetch(): Promise<Record[]>\n\n  then<U>(\n    onFulfill?: (value: Record[]) => Promise<U> | U,\n    onReject?: (error: any) => Promise<U> | U,\n  ): Promise<U>\n\n  // Emits an array of matching records, then emits a new array every time it changes\n  observe(): Observable<Record[]>\n\n  // Same as `observe()` but also emits the list when any of the records\n  // on the list has one of `columnNames` chaged\n  observeWithColumns(columnNames: ColumnName[]): Observable<Record[]>\n\n  // Queries database and returns the number of matching records\n  fetchCount(): Promise<number>\n\n  get count(): QueryCountProxy\n\n  // Emits the number of matching records, then emits a new count every time it changes\n  // Note: By default, the Observable is throttled!\n  observeCount(isThrottled?: boolean): Observable<number>\n\n  // Queries database and returns an array with IDs of matching records\n  fetchIds(): Promise<RecordId[]>\n\n  // Queries database and returns an array with unsanitized raw results\n  // You MUST NOT mutate these objects!\n  unsafeFetchRaw(): Promise<any[]>\n\n  experimentalSubscribe(subscriber: (records: Record[]) => void): Unsubscribe\n\n  experimentalSubscribeWithColumns(\n    columnNames: ColumnName[],\n    subscriber: (records: Record[]) => void,\n  ): Unsubscribe\n\n  experimentalSubscribeToCount(subscriber: (_: number) => void): Unsubscribe\n\n  // Marks as deleted all records matching the query\n  markAllAsDeleted(): Promise<void>\n\n  // Destroys all records matching the query\n  destroyAllPermanently(): Promise<void>\n\n  // MARK: - Internals\n\n  get modelClass(): Record\n\n  get table(): TableName<Record>\n\n  get secondaryTables(): TableName<any>[]\n\n  get allTables(): TableName<any>[]\n\n  get associations(): QueryAssociation[]\n\n  // Serialized version of Query (e.g. for sending to web worker)\n  serialize(): SerializedQuery\n}\n"
  },
  {
    "path": "src/Query/index.js",
    "content": "// @flow\n/* eslint-disable no-use-before-define */\n\nimport allPromises from '../utils/fp/allPromises'\nimport invariant from '../utils/common/invariant'\nimport { Observable } from '../utils/rx'\nimport { toPromise } from '../utils/fp/Result'\nimport {\n  fromArrayOrSpread,\n  // eslint-disable-next-line no-unused-vars\n  type ArrayOrSpreadFn,\n} from '../utils/fp'\nimport { type Unsubscribe, SharedSubscribable } from '../utils/subscriptions'\n\n// import from decorarators break the app on web production WTF ¯\\_(ツ)_/¯\nimport lazy from '../decorators/lazy'\n\nimport subscribeToCount from '../observation/subscribeToCount'\nimport subscribeToQuery from '../observation/subscribeToQuery'\nimport subscribeToQueryWithColumns from '../observation/subscribeToQueryWithColumns'\nimport * as Q from '../QueryDescription'\nimport type { Clause, QueryDescription } from '../QueryDescription'\nimport type Model, { AssociationInfo, RecordId } from '../Model'\nimport type Collection from '../Collection'\nimport type { TableName, ColumnName } from '../Schema'\n\nimport { getAssociations } from './helpers'\n\nexport type QueryAssociation = $Exact<{\n  from: TableName<any>,\n  to: TableName<any>,\n  info: AssociationInfo,\n}>\n\nexport type SerializedQuery = $Exact<{\n  table: TableName<any>,\n  description: QueryDescription,\n  associations: QueryAssociation[],\n}>\n\ninterface QueryCountProxy {\n  then<U>(\n    onFulfill?: (value: number) => Promise<U> | U,\n    onReject?: (error: any) => Promise<U> | U,\n  ): Promise<U>;\n}\n\nexport default class Query<Record: Model> {\n  // Used by withObservables to differentiate between object types\n  static _wmelonTag: string = 'query'\n\n  /**\n   * Collection associated with this query\n   */\n  collection: Collection<Record>\n\n  // TODO: Should this be public API? QueryDescription structure changes quite a bit...\n  description: QueryDescription\n\n  _rawDescription: QueryDescription\n\n  @lazy\n  _cachedSubscribable: SharedSubscribable<Record[]> = new SharedSubscribable((subscriber) =>\n    subscribeToQuery(this, subscriber),\n  )\n\n  @lazy\n  _cachedCountSubscribable: SharedSubscribable<number> = new SharedSubscribable((subscriber) =>\n    subscribeToCount(this, false, subscriber),\n  )\n\n  @lazy\n  _cachedCountThrottledSubscribable: SharedSubscribable<number> = new SharedSubscribable(\n    (subscriber) => subscribeToCount(this, true, subscriber),\n  )\n\n  // Note: Don't use this directly, use Collection.query(...)\n  constructor(collection: Collection<Record>, clauses: Clause[]): void {\n    this.collection = collection\n    this._rawDescription = Q.buildQueryDescription(clauses)\n    this.description = Q.queryWithoutDeleted(this._rawDescription)\n  }\n\n  /*:: extend: ArrayOrSpreadFn<Clause, Query<Record>>  */\n  /**\n   * Returns a new Query that contains all clauses (conditions, sorting, etc.) from this Query\n   * as well as the ones passed as arguments.\n   *\n   * You can pass conditions as multiple arguments or a single array.\n   */\n  // $FlowFixMe\n  extend(...args: Clause[]): Query<Record> {\n    const clauses = fromArrayOrSpread<Clause>(args, 'Collection.query', 'Clause')\n    const { collection } = this\n    const { where, sortBy, take, skip, joinTables, nestedJoinTables, lokiTransform, sql } =\n      this._rawDescription\n\n    invariant(!sql, 'Cannot extend an unsafe SQL query')\n\n    // TODO: Move this & tests to QueryDescription\n    return new Query(collection, [\n      Q.experimentalJoinTables(joinTables),\n      ...nestedJoinTables.map(({ from, to }) => Q.experimentalNestedJoin(from, to)),\n      ...where,\n      ...sortBy,\n      ...(take ? [Q.take(take)] : []),\n      ...(skip ? [Q.skip(skip)] : []),\n      ...(lokiTransform ? [Q.unsafeLokiTransform(lokiTransform)] : []),\n      ...clauses,\n    ])\n  }\n\n  /**\n   * `query.pipe(fn)` is a FP convenience for `fn(query)`\n   */\n  pipe<T>(transform: (this) => T): T {\n    return transform(this)\n  }\n\n  /**\n   * Fetches the list of records matching this query\n   *\n   * Tip: For convenience, you can also use `await query`\n   */\n  fetch(): Promise<Record[]> {\n    return toPromise((callback) => this.collection._fetchQuery(this, callback))\n  }\n\n  then<U>(\n    onFulfill?: (value: Record[]) => Promise<U> | U,\n    onReject?: (error: any) => Promise<U> | U,\n  ): Promise<U> {\n    // $FlowFixMe\n    return this.fetch().then(onFulfill, onReject)\n  }\n\n  /**\n   * Returns an `Rx.Observable` that tracks the list of records matching this query\n   *\n   * Tip: When using `withObservables`, you can simply pass the query without calling `.observe()`\n   *\n   * Warning: Changes to individual records in the array are NOT observed. Use `observeWithColumns`\n   */\n  observe(): Observable<Record[]> {\n    return Observable.create((observer) =>\n      this._cachedSubscribable.subscribe((records) => {\n        observer.next(records)\n      }),\n    )\n  }\n\n  /**\n   * Same as {@link Query#observe}, but also emits when any of the records on the list\n   * has one of its `columnNames` changed.\n   */\n  observeWithColumns(columnNames: ColumnName[]): Observable<Record[]> {\n    return Observable.create((observer) =>\n      this.experimentalSubscribeWithColumns(columnNames, (records) => {\n        observer.next(records)\n      }),\n    )\n  }\n\n  /**\n   * Fetches the number of records matching this query\n   *\n   * Tip: For convenience you can also use `await query.count`\n   */\n  fetchCount(): Promise<number> {\n    return toPromise((callback) => this.collection._fetchCount(this, callback))\n  }\n\n  get count(): QueryCountProxy {\n    const model = this\n    return {\n      then<U>(\n        onFulfill?: (value: number) => Promise<U> | U,\n        onReject?: (error: any) => Promise<U> | U,\n      ): Promise<U> {\n        // $FlowFixMe\n        return model.fetchCount().then(onFulfill, onReject)\n      },\n    }\n  }\n\n  /**\n   * Returns an `Rx.Observable` that tracks the number of matching records\n   *\n   * Note: By default, the count is throttled. Pass `false` to opt out of throttling.\n   */\n  observeCount(isThrottled: boolean = true): Observable<number> {\n    return Observable.create((observer) => {\n      const subscribable = isThrottled\n        ? this._cachedCountThrottledSubscribable\n        : this._cachedCountSubscribable\n      return subscribable.subscribe((count) => {\n        observer.next(count)\n      })\n    })\n  }\n\n  /**\n   * Fetches the list of IDs of records matching this query\n   *\n   * Note: This is faster than using `fetch()` if you only need IDs\n   */\n  fetchIds(): Promise<RecordId[]> {\n    return toPromise((callback) => this.collection._fetchIds(this, callback))\n  }\n\n  /**\n   * Fetches an array of raw results of this query from the database.\n   * These are plain JavaScript types and objects, not `Model` instances\n   *\n   * Warning: You MUST NOT mutate these objects, this can corrupt the database!\n   *\n   * This is useful as a performance optimization or for running non-standard raw queries\n   * (e.g. pragmas, statistics, groupped results, records with extra columns, etc...)\n   */\n  unsafeFetchRaw(): Promise<any[]> {\n    return toPromise((callback) => this.collection._unsafeFetchRaw(this, callback))\n  }\n\n  /**\n   * Rx-free equivalent of `.observe()`\n   */\n  experimentalSubscribe(subscriber: (Record[]) => void): Unsubscribe {\n    return this._cachedSubscribable.subscribe(subscriber)\n  }\n\n  /**\n   * Rx-free equivalent of `.observeWithColumns()`\n   */\n  experimentalSubscribeWithColumns(\n    columnNames: ColumnName[],\n    subscriber: (Record[]) => void,\n  ): Unsubscribe {\n    return subscribeToQueryWithColumns(this, columnNames, subscriber)\n  }\n\n  /**\n   * Rx-free equivalent of `.observeCount()`\n   */\n  experimentalSubscribeToCount(subscriber: (number) => void): Unsubscribe {\n    return this._cachedCountSubscribable.subscribe(subscriber)\n  }\n\n  /**\n   * Marks all records matching this query as deleted (they will be deleted permenantly after sync)\n   *\n   * Note: This method must be called within a Writer {@link Database#write}.\n   *\n   * @see {Model#markAsDeleted}\n   */\n  async markAllAsDeleted(): Promise<void> {\n    const records = await this.fetch()\n    await allPromises((record) => record.markAsDeleted(), records)\n  }\n\n  /**\n   * Permanently deletes all records matching this query\n   *\n   * Note: Do not use this when using Sync, as deletion will not be synced.\n   *\n   * Note: This method must be called within a Writer {@link Database#write}.\n   *\n   * @see {Model#destroyPermanently}\n   */\n  async destroyAllPermanently(): Promise<void> {\n    const records = await this.fetch()\n    await allPromises((record) => record.destroyPermanently(), records)\n  }\n\n  // MARK: - Internals\n\n  /**\n   * `Model` subclass associated with this query\n   */\n  get modelClass(): Class<Record> {\n    return this.collection.modelClass\n  }\n\n  /**\n   * Table name of the Collection associated with this query\n   */\n  get table(): TableName<Record> {\n    // $FlowFixMe\n    return this.modelClass.table\n  }\n\n  // TODO: Should any of the below be public API? Is this any useful outside of Watermelon\n  // internals? If so, should it even be here, not `_`-prefixed?\n  get secondaryTables(): TableName<any>[] {\n    return this.description.joinTables.concat(this.description.nestedJoinTables.map(({ to }) => to))\n  }\n\n  get allTables(): TableName<any>[] {\n    return [this.table].concat(this.secondaryTables)\n  }\n\n  get associations(): QueryAssociation[] {\n    return getAssociations(this.description, this.modelClass, this.collection.db)\n  }\n\n  // Serialized version of Query (e.g. for sending to web worker)\n  serialize(): SerializedQuery {\n    const { table, description, associations } = this\n    return { table, description, associations }\n  }\n}\n"
  },
  {
    "path": "src/Query/test.js",
    "content": "import { mockDatabase } from '../__tests__/testModels'\n\nimport Model from '../Model'\nimport * as Q from '../QueryDescription'\n\nimport Query from './index'\n\n// TODO: Standardize these mocks (same as in sqlite encodeQuery, query test)\n\nclass MockTask extends Model {\n  static table = 'mock_tasks'\n\n  static associations = {\n    projects: { type: 'belongs_to', key: 'project_id' },\n    tag_assignments: { type: 'has_many', foreignKey: 'task_id' },\n    fake1: { type: 'has_many', foreignKey: 'task_id' },\n  }\n}\n\nclass MockProject extends Model {\n  static table = 'projects'\n\n  static associations = {\n    teams: { type: 'belongs_to', key: 'team_id' },\n    fake1: { type: 'belongs_to', key: 'team_id' },\n  }\n}\n\nconst mockCollection = Object.freeze({\n  modelClass: MockTask,\n  db: { get: (table) => (table === 'projects' ? { modelClass: MockProject } : undefined) },\n})\n\ndescribe('Query', () => {\n  describe('description properties', () => {\n    it('returns tables correctly for simple queries', () => {\n      const query = new Query(mockCollection, [Q.where('id', 'abcdef')])\n      expect(query.table).toBe('mock_tasks')\n      expect(query.secondaryTables).toEqual([])\n      expect(query.allTables).toEqual(['mock_tasks'])\n    })\n    it('returns tables correctly for complex queries', () => {\n      const query = new Query(mockCollection, [\n        Q.where('id', 'abcdef'),\n        Q.on('projects', 'team_id', 'abcdef'),\n      ])\n      expect(query.table).toBe('mock_tasks')\n      expect(query.secondaryTables).toEqual(['projects'])\n      expect(query.allTables).toEqual(['mock_tasks', 'projects'])\n    })\n    it('returns associations correctly for simple queries', () => {\n      const query = new Query(mockCollection, [Q.where('id', 'abcdef')])\n      expect(query.associations).toEqual([])\n    })\n    it('returns associations correctly for more complex queries', () => {\n      const query = new Query(mockCollection, [\n        Q.on('projects', 'team_id', 'abcdef'),\n        Q.where('left_column', 'right_value'),\n        Q.on('tag_assignments', 'tag_id', Q.oneOf(['a', 'b', 'c'])),\n      ])\n      expect(query.secondaryTables).toEqual(['projects', 'tag_assignments'])\n      expect(query.associations).toEqual([\n        { from: 'mock_tasks', to: 'projects', info: { type: 'belongs_to', key: 'project_id' } },\n        {\n          from: 'mock_tasks',\n          to: 'tag_assignments',\n          info: { type: 'has_many', foreignKey: 'task_id' },\n        },\n      ])\n    })\n    it('returns associations correctly for explicit joins', () => {\n      const query = new Query(mockCollection, [\n        Q.experimentalJoinTables(['projects']),\n        Q.experimentalNestedJoin('projects', 'teams'),\n        Q.on('projects', Q.on('teams', 'foo', 'bar')),\n      ])\n      expect(query.secondaryTables).toEqual(['projects', 'teams'])\n      expect(query.associations).toEqual([\n        { from: 'mock_tasks', to: 'projects', info: { type: 'belongs_to', key: 'project_id' } },\n        { from: 'projects', to: 'teams', info: { type: 'belongs_to', key: 'team_id' } },\n      ])\n    })\n    it(`throws an error on incorrect associations`, () => {\n      expect(\n        () => new Query(mockCollection, [Q.experimentalJoinTables(['blaublams'])]).associations,\n      ).toThrow(\n        `Query on 'mock_tasks' joins with 'blaublams', but MockTask does not have associations={} defined for 'blaublams'`,\n      )\n      expect(\n        () =>\n          new Query(mockCollection, [Q.experimentalNestedJoin('blaublams', 'flaflas')])\n            .associations,\n      ).toThrow(\n        `Query on 'mock_tasks' has a nested join with 'blaublams', but collection for 'blaublams' cannot be found`,\n      )\n      expect(\n        () =>\n          new Query(mockCollection, [Q.experimentalNestedJoin('projects', 'flaflas')]).associations,\n      ).toThrow(\n        `Query on 'mock_tasks' has a nested join from 'projects' to 'flaflas', but MockProject does not have associations={} defined for 'flaflas'`,\n      )\n    })\n  })\n  describe('Query.extend()', () => {\n    it('can return extended query', () => {\n      const query = new Query(mockCollection, [\n        Q.on('projects', 'team_id', 'abcdef'),\n        Q.where('left_column', 'right_value'),\n      ])\n      const extendedQuery = query.extend(\n        Q.on('tag_assignments', 'tag_id', Q.oneOf(['a', 'b', 'c'])),\n        Q.where('id', 'abcdef'),\n      )\n      const expectedQuery = new Query(mockCollection, [\n        Q.on('projects', 'team_id', 'abcdef'),\n        Q.where('left_column', 'right_value'),\n        Q.on('tag_assignments', 'tag_id', Q.oneOf(['a', 'b', 'c'])),\n        Q.where('id', 'abcdef'),\n      ])\n      expect(extendedQuery.collection).toBe(expectedQuery.collection)\n      expect(extendedQuery.modelClass).toBe(expectedQuery.modelClass)\n      expect(extendedQuery.description).toEqual(expectedQuery.description)\n      expect(extendedQuery.secondaryTables).toEqual(expectedQuery.secondaryTables)\n      expect(extendedQuery.associations).toEqual(expectedQuery.associations)\n      expect(extendedQuery._rawDescription).toEqual(expectedQuery._rawDescription)\n    })\n    it('can return extended query for sortBy, take and skip', () => {\n      const query = new Query(mockCollection, [\n        Q.sortBy('sortable', Q.desc),\n        Q.skip(60),\n        Q.take(20),\n      ])\n      const extendedQuery = query.extend(Q.sortBy('sortable2'), Q.skip(40), Q.take(10))\n      const expectedQuery = new Query(mockCollection, [\n        Q.sortBy('sortable', Q.desc),\n        Q.sortBy('sortable2', Q.asc),\n        Q.skip(40),\n        Q.take(10),\n      ])\n      expect(extendedQuery.serialize()).toEqual(expectedQuery.serialize())\n      expect(extendedQuery._rawDescription).toEqual(expectedQuery._rawDescription)\n    })\n    it('can return extended query and leave take and skip clauses intact', () => {\n      const query = new Query(mockCollection, [\n        Q.sortBy('sortable', Q.desc),\n        Q.skip(60),\n        Q.take(20),\n      ])\n      const extendedQuery = query.extend(Q.sortBy('sortable2'))\n      const expectedQuery = new Query(mockCollection, [\n        Q.sortBy('sortable', Q.desc),\n        Q.sortBy('sortable2', Q.asc),\n        Q.skip(60),\n        Q.take(20),\n      ])\n      expect(extendedQuery.serialize()).toEqual(expectedQuery.serialize())\n      expect(extendedQuery._rawDescription).toEqual(expectedQuery._rawDescription)\n    })\n    it(`can extend query for join tables`, () => {\n      const query = new Query(mockCollection, [\n        Q.experimentalJoinTables(['projects', 'tag_assignments']),\n        Q.experimentalNestedJoin('projects', 'teams'),\n      ])\n      const extendedQuery = query.extend(\n        Q.experimentalJoinTables(['projects', 'fake1']),\n        Q.experimentalNestedJoin('projects', 'fake1'),\n      )\n      const expectedQuery = new Query(mockCollection, [\n        Q.experimentalJoinTables(['projects', 'tag_assignments', 'fake1']),\n        Q.experimentalNestedJoin('projects', 'teams'),\n        Q.experimentalNestedJoin('projects', 'fake1'),\n      ])\n      expect(extendedQuery.serialize()).toEqual(expectedQuery.serialize())\n    })\n    it(`can extend query with unsafeLokiTransform`, () => {\n      const fn = () => {}\n      const query = new Query(mockCollection, [Q.unsafeLokiTransform(fn)])\n      const extendedQuery = query.extend(Q.where('foo', 'bar'))\n      const expectedQuery = new Query(mockCollection, [\n        Q.unsafeLokiTransform(fn),\n        Q.where('foo', 'bar'),\n      ])\n      expect(extendedQuery.serialize()).toEqual(expectedQuery.serialize())\n    })\n    it('can return double extended query', () => {\n      const query = new Query(mockCollection, [Q.on('projects', 'team_id', 'abcdef')])\n      const extendedQuery = query\n        .extend(\n          Q.on('tag_assignments', 'tag_id', Q.oneOf(['a', 'b', 'c'])),\n          Q.where('left_column', 'right_value'),\n        )\n        .extend(Q.on('projects', 'team_id', 'abcdefg'), Q.where('id', 'abcdef'))\n      const expectedQuery = new Query(mockCollection, [\n        Q.on('projects', 'team_id', 'abcdef'),\n        Q.on('tag_assignments', 'tag_id', Q.oneOf(['a', 'b', 'c'])),\n        Q.where('left_column', 'right_value'),\n        Q.on('projects', 'team_id', 'abcdefg'),\n        Q.where('id', 'abcdef'),\n      ])\n      expect(extendedQuery.collection).toBe(expectedQuery.collection)\n      expect(extendedQuery.modelClass).toBe(expectedQuery.modelClass)\n      expect(extendedQuery.description).toEqual(expectedQuery.description)\n      expect(extendedQuery.secondaryTables).toEqual(expectedQuery.secondaryTables)\n      expect(extendedQuery.associations).toEqual(expectedQuery.associations)\n      expect(extendedQuery._rawDescription).toEqual(expectedQuery._rawDescription)\n    })\n    it(`cannot extend an unsafe SQL query`, () => {\n      const query = new Query(mockCollection, [Q.unsafeSqlQuery('select * from tasks')])\n      expect(() => query.extend()).toThrow('Cannot extend an unsafe SQL query')\n    })\n    it(`can pass array instead of a list`, () => {\n      const query = new Query(mockCollection, [\n        Q.on('projects', 'team_id', 'abcdef'),\n        Q.where('left_column', 'right_value'),\n      ])\n      const clauses = [\n        Q.on('tag_assignments', 'tag_id', Q.oneOf(['a', 'b', 'c'])),\n        Q.where('id', 'abcdef'),\n      ]\n      expect(query.extend(clauses).serialize()).toEqual(query.extend(...clauses).serialize())\n    })\n  })\n  it('can pipe query', () => {\n    const query = new Query(mockCollection, [Q.on('projects', 'team_id', 'abcdef')])\n    const identity = (a) => a\n    expect(query.pipe(identity)).toBe(query)\n    const wrap = (q) => ({ wrapped: q })\n    expect(query.pipe(wrap).wrapped).toBe(query)\n  })\n  it('returns serializable version of Query', () => {\n    const query = new Query(mockCollection, [\n      Q.on('projects', 'team_id', 'abcdef'),\n      Q.where('left_column', 'right_value'),\n      Q.on('tag_assignments', 'tag_id', Q.oneOf(['a', 'b', 'c'])),\n    ])\n    expect(query.serialize()).toEqual({\n      table: 'mock_tasks',\n      description: query.description,\n      associations: query.associations,\n    })\n  })\n  describe('fetching', () => {\n    it.skip(`can fetch query`, async () => {\n      // no test here - Collection._fetchQuery is tested\n    })\n    it.skip(`can fetch count`, async () => {\n      // no test here - Collection._fetchCount is tested\n    })\n    it(`is thenable`, async () => {\n      const { database, tasks } = mockDatabase()\n      const queryAll = new Query(tasks, [])\n      const m1 = tasks.prepareCreate()\n      const m2 = tasks.prepareCreate()\n      await database.write(() => database.batch(m1, m2))\n      expect(await queryAll).toEqual([m1, m2])\n      expect(await queryAll.then((records) => records.length)).toBe(2)\n    })\n    it(`count is thenable`, async () => {\n      const { database, tasks } = mockDatabase()\n      const queryAll = new Query(tasks, [])\n      await database.write(() => database.batch(tasks.prepareCreate(), tasks.prepareCreate()))\n      expect(await queryAll.count).toEqual(2)\n      expect(await queryAll.count.then((length) => length * 2)).toBe(4)\n    })\n  })\n\n  describe('observation', () => {\n    // NOTE: Sanity checks only. Concrete tests: observation/\n    const waitFor = (database) =>\n      // make sure we wait until end of DB queue without triggering query for\n      // easy counting\n      database.adapter.getLocal('nothing')\n\n    const testQueryObservation = async (makeSubscribe, withColumns) => {\n      const { database, tasks } = mockDatabase()\n      const adapterSpy = jest.spyOn(database.adapter.underlyingAdapter, 'query')\n      const query = new Query(tasks, [])\n      const observer = jest.fn()\n\n      const unsubscribe = makeSubscribe(query, observer)\n      await waitFor(database)\n      expect(adapterSpy).toHaveBeenCalledTimes(1)\n      expect(observer).toHaveBeenCalledTimes(1)\n      expect(observer).toHaveBeenLastCalledWith([])\n\n      const t1 = await database.write(() => tasks.create())\n      await waitFor(database)\n      expect(observer).toHaveBeenCalledTimes(2)\n      expect(observer).toHaveBeenLastCalledWith([t1])\n\n      // check if cached\n      const observer2 = jest.fn()\n      const unsubscribe2 = makeSubscribe(query, observer2)\n      if (withColumns) {\n        await waitFor(database)\n      }\n      expect(observer2).toHaveBeenCalledTimes(1)\n      expect(observer2).toHaveBeenLastCalledWith([t1])\n      expect(adapterSpy).toHaveBeenCalledTimes(withColumns ? 2 : 1)\n\n      unsubscribe()\n      unsubscribe2()\n    }\n\n    it('can observe query', async () => {\n      await testQueryObservation((query, subscriber) => {\n        const subscription = query.observe().subscribe(subscriber)\n        return () => subscription.unsubscribe()\n      })\n    })\n    it('can subscribe to query', async () => {\n      await testQueryObservation((query, subscriber) => query.experimentalSubscribe(subscriber))\n    })\n    it('can observe query with columns', async () => {\n      await testQueryObservation((query, subscriber) => {\n        const subscription = query.observeWithColumns(['name']).subscribe(subscriber)\n        return () => subscription.unsubscribe()\n      }, true)\n    })\n    it('can subscribe to query with columns', async () => {\n      await testQueryObservation(\n        (query, subscriber) => query.experimentalSubscribeWithColumns(['name'], subscriber),\n        true,\n      )\n    })\n\n    const testCountObservation = async (makeSubscribe, isThrottled) => {\n      const { database, tasks } = mockDatabase()\n      const adapterSpy = jest.spyOn(database.adapter.underlyingAdapter, 'count')\n      const query = new Query(tasks, [])\n      const observer = jest.fn()\n\n      const unsubscribe = makeSubscribe(query, observer)\n      await waitFor(database)\n      expect(adapterSpy).toHaveBeenCalledTimes(1)\n      expect(observer).toHaveBeenCalledTimes(1)\n      expect(observer).toHaveBeenLastCalledWith(0)\n\n      if (isThrottled) {\n        await new Promise((resolve) => {\n          setTimeout(resolve, 300)\n        })\n      }\n\n      await database.write(() => tasks.create())\n      await waitFor(database)\n\n      expect(adapterSpy).toHaveBeenCalledTimes(2)\n      expect(observer).toHaveBeenCalledTimes(2)\n      expect(observer).toHaveBeenLastCalledWith(1)\n\n      // check if cached\n      const observer2 = jest.fn()\n      const unsubscribe2 = makeSubscribe(query, observer2)\n      expect(observer2).toHaveBeenCalledTimes(1)\n      expect(observer2).toHaveBeenLastCalledWith(1)\n      expect(adapterSpy).toHaveBeenCalledTimes(2)\n\n      unsubscribe()\n      unsubscribe2()\n    }\n\n    it('can observe (throttled) count', async () => {\n      await testCountObservation((query, subscriber) => {\n        const subscription = query.observeCount(true).subscribe(subscriber)\n        return () => subscription.unsubscribe()\n      }, true)\n    })\n    it('can observe (unthrottled) count', async () => {\n      await testCountObservation((query, subscriber) => {\n        const subscription = query.observeCount(false).subscribe(subscriber)\n        return () => subscription.unsubscribe()\n      })\n    })\n    it('can subscribe to count', async () => {\n      await testCountObservation((query, subscriber) =>\n        query.experimentalSubscribeToCount(subscriber),\n      )\n    })\n  })\n\n  describe('mass delete', () => {\n    const testMassDelete = async (methodName) => {\n      const { database, tasks } = mockDatabase()\n      const query = new Query(tasks, [Q.where('name', 'foo')])\n      const queryAll = new Query(tasks, [])\n\n      await database.write(() =>\n        database.batch(\n          tasks.prepareCreate((t) => {\n            t.name = 'foo'\n          }),\n          tasks.prepareCreate((t) => {\n            t.name = 'foo'\n          }),\n          tasks.prepareCreate((t) => {\n            t.name = 'foo'\n          }),\n          tasks.prepareCreate(),\n          tasks.prepareCreate(),\n        ),\n      )\n      expect(await queryAll.fetchCount()).toBe(5)\n      expect(await query.fetchCount()).toBe(3)\n      await database.write(() => query[methodName]())\n      expect(await queryAll.fetchCount()).toBe(2)\n      expect(await query.fetchCount()).toBe(0)\n    }\n    it('can mark all as deleted', async () => {\n      await testMassDelete('markAllAsDeleted')\n    })\n    it('can destroy all permanently', async () => {\n      await testMassDelete('destroyAllPermanently')\n    })\n  })\n\n  it(`has wmelon tag`, () => {\n    const query = new Query(mockCollection, [Q.where('id', 'abcdef')])\n    expect(query.constructor._wmelonTag).toBe('query')\n  })\n})\n"
  },
  {
    "path": "src/QueryDescription/__tests__/queryWithoutDeleted.test.js",
    "content": "import * as Q from '../index'\n\ndescribe('queryWithoutDeleted', () => {\n  const whereNotDeleted = Q.where('_status', Q.notEq('deleted'))\n  it('builds empty query without deleted', () => {\n    const query = Q.queryWithoutDeleted(Q.buildQueryDescription([]))\n    expect(query).toEqual(Q.buildQueryDescription([whereNotDeleted]))\n  })\n  it('builds simple query without deleted', () => {\n    const query = Q.queryWithoutDeleted(\n      Q.buildQueryDescription([Q.where('left_column', 'right_value')]),\n    )\n    expect(query).toEqual(\n      Q.buildQueryDescription([Q.where('left_column', 'right_value'), whereNotDeleted]),\n    )\n  })\n  it('supports simple 2 JOIN queries on one table and JOIN query on another without deleted', () => {\n    const query = Q.queryWithoutDeleted(\n      Q.buildQueryDescription([\n        Q.on('projects', 'col1', 'value'),\n        Q.on('projects', 'col2', 'value'),\n        Q.where('left_column', 'right_value'),\n        Q.on('tag_assignments', 'col3', Q.gt(Q.column('col4'))),\n      ]),\n    )\n    expect(query).toEqual(\n      Q.buildQueryDescription([\n        Q.on('projects', [Q.where('col1', 'value'), whereNotDeleted]),\n        Q.on('projects', [Q.where('col2', 'value'), whereNotDeleted]),\n        Q.where('left_column', 'right_value'),\n        Q.on('tag_assignments', [Q.where('col3', Q.gt(Q.column('col4'))), whereNotDeleted]),\n        whereNotDeleted,\n      ]),\n    )\n  })\n  it(`supports nested Q.ons`, () => {\n    const query = Q.queryWithoutDeleted(\n      Q.buildQueryDescription([\n        Q.experimentalJoinTables(['projects', 'tag_assignments']),\n        Q.or(\n          Q.where('is_followed', true),\n          Q.on('projects', [Q.where('is_followed', true), Q.where('foo', 'bar')]),\n          Q.and(Q.on('tag_assignments', 'foo', 'bar')),\n        ),\n      ]),\n    )\n    expect(query).toEqual(\n      Q.buildQueryDescription([\n        Q.experimentalJoinTables(['projects', 'tag_assignments']),\n        Q.or(\n          Q.where('is_followed', true),\n          Q.on('projects', [Q.where('is_followed', true), Q.where('foo', 'bar'), whereNotDeleted]),\n          Q.and(Q.on('tag_assignments', [Q.where('foo', 'bar'), whereNotDeleted])),\n        ),\n        whereNotDeleted,\n      ]),\n    )\n  })\n  it(`supports Q.ons on Q.on`, () => {\n    const query = Q.queryWithoutDeleted(\n      Q.buildQueryDescription([\n        // TODO: Test deeper nestings\n        Q.experimentalJoinTables(['projects']),\n        Q.experimentalNestedJoin('projects', 'teams'),\n        Q.on('projects', Q.on('teams', 'foo', 'bar')),\n        Q.or(Q.on('projects', Q.on('teams', Q.on('organizations', 'foo', 'bar')))),\n      ]),\n    )\n    expect(query).toEqual(\n      Q.buildQueryDescription([\n        Q.experimentalJoinTables(['projects']),\n        Q.experimentalNestedJoin('projects', 'teams'),\n        Q.on('projects', [\n          Q.on('teams', [Q.where('foo', 'bar'), whereNotDeleted]),\n          whereNotDeleted,\n        ]),\n        Q.or(\n          Q.on('projects', [\n            Q.on('teams', [\n              Q.on('organizations', [Q.where('foo', 'bar'), whereNotDeleted]),\n              whereNotDeleted,\n            ]),\n            whereNotDeleted,\n          ]),\n        ),\n        whereNotDeleted,\n      ]),\n    )\n  })\n})\n"
  },
  {
    "path": "src/QueryDescription/__tests__/test.js",
    "content": "import * as Q from '../index'\n\ndescribe('buildQueryDescription', () => {\n  it('builds empty query', () => {\n    const query = Q.buildQueryDescription([])\n    expect(query).toEqual({\n      where: [],\n      joinTables: [],\n      nestedJoinTables: [],\n      sortBy: [],\n    })\n  })\n  it('builds simple query', () => {\n    const query = Q.buildQueryDescription([Q.where('left_column', 'right_value')])\n    expect(query).toEqual({\n      where: [\n        {\n          type: 'where',\n          left: 'left_column',\n          comparison: { operator: 'eq', right: { value: 'right_value' } },\n        },\n      ],\n      joinTables: [],\n      nestedJoinTables: [],\n      sortBy: [],\n    })\n  })\n  it('accepts multiple conditions and value types', () => {\n    const query = Q.buildQueryDescription([\n      Q.where('col1', 'val1'),\n      Q.where('col2', 2),\n      Q.where('col3', true),\n      Q.where('col4', false),\n      Q.where('col5', null),\n    ])\n    expect(query).toEqual({\n      where: [\n        { type: 'where', left: 'col1', comparison: { operator: 'eq', right: { value: 'val1' } } },\n        { type: 'where', left: 'col2', comparison: { operator: 'eq', right: { value: 2 } } },\n        { type: 'where', left: 'col3', comparison: { operator: 'eq', right: { value: true } } },\n        { type: 'where', left: 'col4', comparison: { operator: 'eq', right: { value: false } } },\n        { type: 'where', left: 'col5', comparison: { operator: 'eq', right: { value: null } } },\n      ],\n      joinTables: [],\n      nestedJoinTables: [],\n      sortBy: [],\n    })\n  })\n  it('supports multiple operators', () => {\n    const query = Q.buildQueryDescription([\n      Q.where('col1', Q.eq('val1')),\n      Q.where('col2', Q.gt(2)),\n      Q.where('col3', Q.gte(3)),\n      Q.where('col3_5', Q.weakGt(3.5)),\n      Q.where('col4', Q.lt(4)),\n      Q.where('col5', Q.lte(5)),\n      Q.where('col6', Q.notEq(null)),\n      Q.where('col7', Q.oneOf([1, 2, 3])),\n      Q.where('col8', Q.notIn(['a', 'b', 'c'])),\n      Q.where('col9', Q.between(10, 11)),\n      Q.where('col10', Q.like('%abc')),\n      Q.where('col11', Q.notLike('def%')),\n      Q.where('col12', Q.includes('foo')),\n    ])\n    expect(query).toEqual({\n      where: [\n        { type: 'where', left: 'col1', comparison: { operator: 'eq', right: { value: 'val1' } } },\n        { type: 'where', left: 'col2', comparison: { operator: 'gt', right: { value: 2 } } },\n        { type: 'where', left: 'col3', comparison: { operator: 'gte', right: { value: 3 } } },\n        {\n          type: 'where',\n          left: 'col3_5',\n          comparison: { operator: 'weakGt', right: { value: 3.5 } },\n        },\n        { type: 'where', left: 'col4', comparison: { operator: 'lt', right: { value: 4 } } },\n        { type: 'where', left: 'col5', comparison: { operator: 'lte', right: { value: 5 } } },\n        { type: 'where', left: 'col6', comparison: { operator: 'notEq', right: { value: null } } },\n        {\n          type: 'where',\n          left: 'col7',\n          comparison: { operator: 'oneOf', right: { values: [1, 2, 3] } },\n        },\n        {\n          type: 'where',\n          left: 'col8',\n          comparison: { operator: 'notIn', right: { values: ['a', 'b', 'c'] } },\n        },\n        {\n          type: 'where',\n          left: 'col9',\n          comparison: { operator: 'between', right: { values: [10, 11] } },\n        },\n        {\n          type: 'where',\n          left: 'col10',\n          comparison: { operator: 'like', right: { value: '%abc' } },\n        },\n        {\n          type: 'where',\n          left: 'col11',\n          comparison: { operator: 'notLike', right: { value: 'def%' } },\n        },\n        {\n          type: 'where',\n          left: 'col12',\n          comparison: { operator: 'includes', right: { value: 'foo' } },\n        },\n      ],\n      joinTables: [],\n      nestedJoinTables: [],\n      sortBy: [],\n    })\n  })\n  it('supports column comparisons', () => {\n    const query = Q.buildQueryDescription([Q.where('left_column', Q.gte(Q.column('right_column')))])\n    expect(query).toEqual({\n      where: [\n        {\n          type: 'where',\n          left: 'left_column',\n          comparison: {\n            operator: 'gte',\n            right: { column: 'right_column' },\n          },\n        },\n      ],\n      joinTables: [],\n      nestedJoinTables: [],\n      sortBy: [],\n    })\n  })\n  it('supports AND/OR nesting', () => {\n    const query = Q.buildQueryDescription([\n      Q.where('col1', 'value'),\n      Q.or(\n        Q.where('col2', true),\n        Q.where('col3', null),\n        Q.and(Q.where('col4', Q.gt(5)), Q.where('col5', Q.notIn([6, 7]))),\n      ),\n    ])\n    expect(query).toEqual({\n      where: [\n        { type: 'where', left: 'col1', comparison: { operator: 'eq', right: { value: 'value' } } },\n        {\n          type: 'or',\n          conditions: [\n            { type: 'where', left: 'col2', comparison: { operator: 'eq', right: { value: true } } },\n            { type: 'where', left: 'col3', comparison: { operator: 'eq', right: { value: null } } },\n            {\n              type: 'and',\n              conditions: [\n                {\n                  type: 'where',\n                  left: 'col4',\n                  comparison: { operator: 'gt', right: { value: 5 } },\n                },\n                {\n                  type: 'where',\n                  left: 'col5',\n                  comparison: { operator: 'notIn', right: { values: [6, 7] } },\n                },\n              ],\n            },\n          ],\n        },\n      ],\n      joinTables: [],\n      nestedJoinTables: [],\n      sortBy: [],\n    })\n  })\n  it(`supports unsafe SQL and Loki expressions`, () => {\n    const query = Q.buildQueryDescription([\n      Q.unsafeSqlExpr(`some sql`),\n      Q.unsafeLokiExpr({ column: { $jgt: 5 } }),\n      Q.and(Q.unsafeSqlExpr(`some sql`)),\n      Q.or(Q.unsafeLokiExpr({ column: { $jgt: 5 } })),\n    ])\n    expect(query).toEqual({\n      where: [\n        { type: 'sql', expr: `some sql` },\n        { type: 'loki', expr: { column: { $jgt: 5 } } },\n        { type: 'and', conditions: [{ type: 'sql', expr: `some sql` }] },\n        { type: 'or', conditions: [{ type: 'loki', expr: { column: { $jgt: 5 } } }] },\n      ],\n      joinTables: [],\n      nestedJoinTables: [],\n      sortBy: [],\n    })\n  })\n  it(`supports unsafe Loki transform`, () => {\n    const transform = (records, _loki) => records\n    const query = Q.buildQueryDescription([Q.unsafeLokiTransform(transform)])\n    expect(query).toEqual({\n      where: [],\n      joinTables: [],\n      nestedJoinTables: [],\n      sortBy: [],\n      lokiTransform: transform,\n    })\n  })\n  it(`supports unsafe SQL queries`, () => {\n    const query = Q.buildQueryDescription([\n      Q.unsafeSqlQuery(\"select * from tasks where foo = 'bar'\"),\n    ])\n    expect(query).toEqual({\n      where: [],\n      joinTables: [],\n      nestedJoinTables: [],\n      sortBy: [],\n      sql: { type: 'sqlQuery', sql: \"select * from tasks where foo = 'bar'\", values: [] },\n    })\n  })\n  it(`supports unsafe SQL queries with placeholder values`, () => {\n    const query = Q.buildQueryDescription([\n      Q.unsafeSqlQuery('select * from tasks where foo = ? and bar = ?', ['hello', 'world']),\n    ])\n    expect(query).toEqual({\n      where: [],\n      joinTables: [],\n      nestedJoinTables: [],\n      sortBy: [],\n      sql: {\n        type: 'sqlQuery',\n        sql: 'select * from tasks where foo = ? and bar = ?',\n        values: ['hello', 'world'],\n      },\n    })\n  })\n  it(`prevents use of unsafe sql queries with other clauses`, () => {\n    expect(() => {\n      Q.buildQueryDescription([\n        Q.unsafeSqlQuery(\"select * from tasks where foo = 'bar'\"),\n        Q.where('foo', 'bar'),\n      ])\n    }).toThrow('Cannot use Q.unsafeSqlQuery with')\n    expect(() => {\n      Q.buildQueryDescription([\n        Q.where('foo', 'bar'),\n        Q.unsafeSqlQuery(\"select * from tasks where foo = 'bar'\"),\n      ])\n    }).toThrow('Cannot use Q.unsafeSqlQuery with')\n  })\n  it(`allows unsafe SQL queries to be properly observable`, () => {\n    const query = Q.buildQueryDescription([\n      Q.experimentalJoinTables(['projects']),\n      Q.experimentalNestedJoin('projects', 'teams'),\n      Q.unsafeSqlQuery(\n        'select tasks.* from tasks ' +\n          'left join projects on tasks.project_id is projects.id ' +\n          'left join teams on projects.team_id is teams.id ',\n      ),\n    ])\n    expect(query).toEqual({\n      where: [],\n      joinTables: ['projects'],\n      nestedJoinTables: [{ from: 'projects', to: 'teams' }],\n      sortBy: [],\n      sql: {\n        type: 'sqlQuery',\n        sql:\n          'select tasks.* from tasks ' +\n          'left join projects on tasks.project_id is projects.id ' +\n          'left join teams on projects.team_id is teams.id ',\n        values: [],\n      },\n    })\n  })\n  it('supports simple JOIN queries', () => {\n    const query = Q.buildQueryDescription([\n      Q.on('foreign_table', 'foreign_column', 'value'),\n      Q.where('left_column', 'right_value'),\n      Q.on('foreign_table2', 'foreign_column2', Q.gt(Q.column('foreign_column3'))),\n    ])\n    expect(query).toEqual({\n      where: [\n        {\n          type: 'on',\n          table: 'foreign_table',\n          conditions: [\n            {\n              type: 'where',\n              left: 'foreign_column',\n              comparison: { operator: 'eq', right: { value: 'value' } },\n            },\n          ],\n        },\n        {\n          type: 'where',\n          left: 'left_column',\n          comparison: { operator: 'eq', right: { value: 'right_value' } },\n        },\n        {\n          type: 'on',\n          table: 'foreign_table2',\n          conditions: [\n            {\n              type: 'where',\n              left: 'foreign_column2',\n              comparison: { operator: 'gt', right: { column: 'foreign_column3' } },\n            },\n          ],\n        },\n      ],\n      joinTables: ['foreign_table', 'foreign_table2'],\n      nestedJoinTables: [],\n      sortBy: [],\n    })\n  })\n  it(`supports nesting Q.on inside and/or`, () => {\n    const query = Q.buildQueryDescription([\n      Q.experimentalJoinTables(['projects', 'foreign_table2']),\n      Q.or(\n        Q.where('is_followed', true),\n        Q.on('projects', 'is_followed', true),\n        Q.and(Q.on('foreign_table2', 'foo', 'bar')),\n      ),\n    ])\n    expect(query).toEqual({\n      where: [\n        {\n          type: 'or',\n          conditions: [\n            {\n              type: 'where',\n              left: 'is_followed',\n              comparison: { operator: 'eq', right: { value: true } },\n            },\n            {\n              type: 'on',\n              table: 'projects',\n              conditions: [\n                {\n                  type: 'where',\n                  left: 'is_followed',\n                  comparison: { operator: 'eq', right: { value: true } },\n                },\n              ],\n            },\n            {\n              type: 'and',\n              conditions: [\n                {\n                  type: 'on',\n                  table: 'foreign_table2',\n                  conditions: [\n                    {\n                      type: 'where',\n                      left: 'foo',\n                      comparison: { operator: 'eq', right: { value: 'bar' } },\n                    },\n                  ],\n                },\n              ],\n            },\n          ],\n        },\n      ],\n      joinTables: ['projects', 'foreign_table2'],\n      nestedJoinTables: [],\n      sortBy: [],\n    })\n  })\n  it(`supports multiple conditions on Q.on`, () => {\n    const query = Q.buildQueryDescription([\n      Q.on('projects', [\n        Q.where('foo', 'bar'),\n        Q.or(Q.where('bar', 'baz'), Q.where('bla', 'boop')),\n      ]),\n    ])\n    expect(query).toEqual({\n      where: [\n        {\n          type: 'on',\n          table: 'projects',\n          conditions: [\n            { type: 'where', left: 'foo', comparison: { operator: 'eq', right: { value: 'bar' } } },\n            {\n              type: 'or',\n              conditions: [\n                {\n                  type: 'where',\n                  left: 'bar',\n                  comparison: { operator: 'eq', right: { value: 'baz' } },\n                },\n                {\n                  type: 'where',\n                  left: 'bla',\n                  comparison: { operator: 'eq', right: { value: 'boop' } },\n                },\n              ],\n            },\n          ],\n        },\n      ],\n      joinTables: ['projects'],\n      nestedJoinTables: [],\n      sortBy: [],\n    })\n  })\n  it(`supports deep nesting Q.on inside Q.on`, () => {\n    const query = Q.buildQueryDescription([\n      Q.experimentalNestedJoin('projects', 'teams'),\n      Q.experimentalNestedJoin('teams', 'organizations'),\n      Q.on('projects', Q.on('teams', Q.on('organizations', 'foo', 'bar'))),\n    ])\n    expect(query).toEqual({\n      where: [\n        {\n          type: 'on',\n          table: 'projects',\n          conditions: [\n            {\n              type: 'on',\n              table: 'teams',\n              conditions: [\n                {\n                  type: 'on',\n                  table: 'organizations',\n                  conditions: [\n                    {\n                      type: 'where',\n                      left: 'foo',\n                      comparison: { operator: 'eq', right: { value: 'bar' } },\n                    },\n                  ],\n                },\n              ],\n            },\n          ],\n        },\n      ],\n      joinTables: ['projects'],\n      nestedJoinTables: [\n        { from: 'projects', to: 'teams' },\n        { from: 'teams', to: 'organizations' },\n      ],\n      sortBy: [],\n    })\n  })\n  it(`supports Q.on shortcut syntaxes`, () => {\n    const expected = Q.on('projects', [Q.where('foo', Q.eq('bar'))])\n    expect(Q.on('projects', 'foo', 'bar')).toEqual(expected)\n    expect(Q.on('projects', 'foo', Q.eq('bar'))).toEqual(expected)\n    expect(Q.on('projects', Q.where('foo', 'bar'))).toEqual(expected)\n    expect(Q.on('projects', Q.and(Q.where('foo', 'bar'), Q.where('bar', 'baz')))).toEqual(\n      Q.on('projects', [Q.where('foo', 'bar'), Q.where('bar', 'baz')]),\n    )\n  })\n  it(`supports passing conditions as array or via spread`, () => {\n    const conditions = [Q.where('col1', 'value'), Q.where('col2', true), Q.where('col3', null)]\n    expect(Q.and(...conditions)).toEqual(Q.and(conditions))\n    expect(Q.or(...conditions)).toEqual(Q.or(conditions))\n  })\n  it('supports sorting query', () => {\n    const query = Q.buildQueryDescription([Q.sortBy('sortable_column', Q.desc)])\n    expect(query).toEqual({\n      where: [],\n      joinTables: [],\n      nestedJoinTables: [],\n      sortBy: [{ type: 'sortBy', sortColumn: 'sortable_column', sortOrder: 'desc' }],\n    })\n  })\n  it('does not support skip operator without take operator', () => {\n    expect(() => {\n      Q.buildQueryDescription([Q.skip(100)])\n    }).toThrow('cannot skip without take')\n  })\n  it('support multiple skip operators but only take the last', () => {\n    const query = Q.buildQueryDescription([Q.take(100), Q.skip(200), Q.skip(400), Q.skip(800)])\n    expect(query).toEqual({\n      where: [],\n      joinTables: [],\n      nestedJoinTables: [],\n      sortBy: [],\n      take: 100,\n      skip: 800,\n    })\n  })\n  it('deep freezes the query in dev', () => {\n    const make = () => Q.buildQueryDescription([Q.where('left_column', 'right_value')])\n    const query = make()\n    expect(() => {\n      query.foo = []\n    }).toThrow()\n    expect(() => {\n      query.where[0].comparison.right = {}\n    }).toThrow()\n    expect(query).toEqual(make())\n  })\n  it('freezes oneOf/notIn, even in production', () => {\n    const env = process.env.NODE_ENV\n    try {\n      process.env.NODE_ENV = 'production'\n      const ohJustAnArray = [1, 2, 3]\n      const anotherArray = ['a', 'b', 'c']\n      Q.buildQueryDescription([\n        Q.where('col7', Q.oneOf(ohJustAnArray)),\n        Q.where('col8', Q.notIn(anotherArray)),\n      ])\n      expect(() => ohJustAnArray.push(4)).toThrow()\n      expect(() => anotherArray.push('d')).toThrow()\n      expect(ohJustAnArray.length).toBe(3)\n      expect(anotherArray.length).toBe(3)\n    } finally {\n      process.env.NODE_ENV = env\n    }\n  })\n  it('catches bad types', () => {\n    expect(() => Q.eq({})).toThrow('Invalid value passed to query')\n    expect(() => Q.where('foo', undefined)).toThrow('undefined')\n    // TODO: oneOf/notIn values?\n    expect(() => Q.oneOf({})).toThrow('not an array')\n    expect(() => Q.oneOf('a', 'b', 'c')).toThrow('not an array')\n    expect(() => Q.notIn({})).toThrow('not an array')\n    expect(() => Q.like(null)).toThrow('not a string')\n    expect(() => Q.like({})).toThrow('not a string')\n    expect(() => Q.notLike(null)).toThrow('not a string')\n    expect(() => Q.notLike({})).toThrow('not a string')\n    expect(() => Q.includes(null)).toThrow('not a string')\n    expect(() => Q.sanitizeLikeString(null)).toThrow('not a string')\n    expect(() => Q.column({})).toThrow('not a string')\n    expect(() => Q.take('0')).toThrow('not a number')\n    expect(() => Q.skip('0')).toThrow('not a number')\n    expect(() => Q.unsafeSqlExpr({})).toThrow('not a string')\n    expect(() => Q.unsafeLokiExpr()).toThrow('not an object')\n    expect(() => Q.unsafeLokiExpr('hey')).toThrow('not an object')\n    expect(() => Q.unsafeSqlQuery(null)).toThrow('not a string')\n    expect(() => Q.unsafeSqlQuery('foo', null)).toThrow('not an array')\n  })\n  it(`catches bad argument values`, () => {\n    expect(() => Q.sortBy('foo', 'ascasc')).toThrow('Invalid sortOrder')\n    expect(() => Q.where('foo', Q.unsafeSqlExpr('is RANDOM()'))).toThrow()\n    expect(() => Q.where('foo', Q.unsafeLokiExpr('is RANDOM()'))).toThrow()\n    expect(() => Q.and(Q.like('foo'))).toThrow('can only contain')\n    expect(() => Q.or(Q.like('foo'))).toThrow('can only contain')\n    expect(() => Q.or(Q.unsafeSqlQuery('foo'))).toThrow('can only contain')\n    expect(() => Q.on('foo', Q.column('foo'))).toThrow('can only contain')\n    expect(() => Q.buildQueryDescription([Q.like('foo')])).toThrow('Invalid Query clause passed')\n    expect(() => Q.experimentalJoinTables('foo', 'bar')).toThrow('expected an array')\n  })\n  it('protect against passing Watermelon look-alike objects', () => {\n    // protect against passing something that could be a user-input Object (risk is when Watermelon users pass stuff from JSON without validation), but is unintended or even malicious in some way\n    expect(() => Q.eq({ column: 'foo' })).toThrow(/Invalid { column: }/)\n    expect(() => Q.where('foo', { operator: 'eq', right: { value: 'foo' } })).toThrow(\n      'Invalid Comparison',\n    )\n    expect(() => Q.where('foo', {})).toThrow('Invalid Comparison')\n    expect(() => Q.on('table', 'foo', {})).toThrow('Invalid Comparison')\n    expect(() => Q.on('table', 'foo', Q.eq({ column: 'foo' }))).toThrow(/Invalid { column: }/)\n  })\n  it(`protects against unsafe column and table names passed`, () => {\n    expect(() => Q.column('sqlite_master')).toThrow('Unsafe name')\n    expect(() => Q.column('hey` or --')).toThrow('Unsafe name')\n    expect(() => Q.where('rowid', 10)).toThrow('Unsafe name')\n    expect(() => Q.sortBy('sqlite_master', 'asc')).toThrow('Unsafe name')\n    expect(() => Q.on('sqlite_master', 'foo', 'bar')).toThrow('Unsafe name')\n    expect(() => Q.on('sqlite_master', Q.where('foo', 'bar'))).toThrow('Unsafe name')\n    expect(() => Q.experimentalJoinTables(['foo', 'sqlite_master'])).toThrow('Unsafe name')\n    expect(() => Q.experimentalNestedJoin('sqlite_master', 'foo')).toThrow('Unsafe name')\n    expect(() => Q.experimentalNestedJoin('foo', 'sqlite_master')).toThrow('Unsafe name')\n  })\n})\n"
  },
  {
    "path": "src/QueryDescription/helpers.d.ts",
    "content": "import type { Clause, QueryDescription } from './type'\n\nexport function buildQueryDescription(clauses: Clause[]): QueryDescription\n\nexport function queryWithoutDeleted(query: QueryDescription): QueryDescription\n"
  },
  {
    "path": "src/QueryDescription/helpers.js",
    "content": "// @flow\n/* eslint-disable no-use-before-define */\n\n// don't import whole `utils` to keep worker size small\nimport { unique } from '../utils/fp'\nimport invariant from '../utils/common/invariant'\nimport deepFreeze from '../utils/common/deepFreeze'\nimport { columnName } from '../Schema'\n\nimport type { Where, Clause, QueryDescription, On } from './type'\nimport { where, notEq } from './operators'\n\nconst syncStatusColumn = columnName('_status')\nconst extractClauses: (Clause[]) => QueryDescription = (clauses) => {\n  const query: $Exact<{ ...$Shape<QueryDescription> }> = {\n    where: [],\n    joinTables: [],\n    nestedJoinTables: [],\n    sortBy: [],\n  }\n  clauses.forEach((clause) => {\n    switch (clause.type) {\n      case 'where':\n      case 'and':\n      case 'or':\n      case 'sql':\n      case 'loki':\n        query.where.push(clause)\n        break\n      case 'on': {\n        const { table } = clause\n        query.joinTables.push(table)\n        query.where.push(clause)\n        break\n      }\n      case 'sortBy':\n        query.sortBy.push(clause)\n        break\n      case 'take':\n        query.take = clause.count\n        break\n      case 'skip':\n        query.skip = clause.count\n        break\n      case 'joinTables': {\n        const { tables } = clause\n        query.joinTables.push(...tables)\n        break\n      }\n      case 'nestedJoinTable':\n        query.nestedJoinTables.push({ from: clause.from, to: clause.to })\n        break\n      case 'lokiTransform':\n        // TODO: Check for duplicates\n        query.lokiTransform = clause.function\n        break\n      case 'sqlQuery':\n        query.sql = clause\n        if (process.env.NODE_ENV !== 'production') {\n          invariant(\n            clauses.every((_clause) =>\n              ['sqlQuery', 'joinTables', 'nestedJoinTable'].includes(_clause.type),\n            ),\n            'Cannot use Q.unsafeSqlQuery with other clauses, except for Q.experimentalJoinTables and Q.experimentalNestedJoin (Did you mean Q.unsafeSqlExpr?)',\n          )\n        }\n        break\n      default:\n        throw new Error('Invalid Query clause passed')\n    }\n  })\n  query.joinTables = unique(query.joinTables)\n\n  // $FlowFixMe: Flow is too dumb to realize that it is valid\n  return query\n}\n\nexport function buildQueryDescription(clauses: Clause[]): QueryDescription {\n  const query = extractClauses(clauses)\n  if (process.env.NODE_ENV !== 'production') {\n    invariant(!(query.skip && !query.take), 'cannot skip without take')\n    deepFreeze(query)\n  }\n  return query\n}\n\nconst whereNotDeleted = where(syncStatusColumn, notEq('deleted'))\n\nfunction conditionsWithoutDeleted(conditions: Where[]): Where[] {\n  return conditions.map(queryWithoutDeletedImpl)\n}\n\nfunction queryWithoutDeletedImpl(clause: Where): Where {\n  if (clause.type === 'and') {\n    return { type: 'and', conditions: conditionsWithoutDeleted(clause.conditions) }\n  } else if (clause.type === 'or') {\n    return { type: 'or', conditions: conditionsWithoutDeleted(clause.conditions) }\n  } else if (clause.type === 'on') {\n    const onClause: On = clause\n    return {\n      type: 'on',\n      table: onClause.table,\n      conditions: conditionsWithoutDeleted(onClause.conditions).concat(whereNotDeleted),\n    }\n  }\n\n  return clause\n}\n\nexport function queryWithoutDeleted(query: QueryDescription): QueryDescription {\n  const { where: whereConditions } = query\n\n  const newQuery = {\n    ...query,\n    where: conditionsWithoutDeleted(whereConditions).concat(whereNotDeleted),\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    deepFreeze(newQuery)\n  }\n  return newQuery\n}\n"
  },
  {
    "path": "src/QueryDescription/index.d.ts",
    "content": "export type {\n  NonNullValue,\n  NonNullValues,\n  Value,\n  CompoundValue,\n  Operator,\n  ColumnDescription,\n  ComparisonRight,\n  Comparison,\n  WhereDescription,\n  SqlExpr,\n  LokiExpr,\n  Where,\n  And,\n  Or,\n  On,\n  SortOrder,\n  SortBy,\n  Take,\n  Skip,\n  JoinTables,\n  NestedJoinTable,\n  LokiTransformFunction,\n  LokiTransform,\n  SqlQuery,\n  Clause,\n  QueryDescription,\n} from './type'\n\nexport {\n  eq,\n  notEq,\n  gt,\n  gte,\n  weakGt,\n  lt,\n  lte,\n  oneOf,\n  notIn,\n  between,\n  like,\n  notLike,\n  sanitizeLikeString,\n  includes,\n  column,\n  where,\n  unsafeSqlExpr,\n  unsafeLokiExpr,\n  unsafeLokiTransform,\n  and,\n  or,\n  asc,\n  desc,\n  sortBy,\n  take,\n  skip,\n  on,\n  experimentalJoinTables,\n  experimentalNestedJoin,\n  unsafeSqlQuery,\n} from './operators'\n\n// NOTE: These probably shouldn't be exported from here, but kept for backwards compatibility\nexport { buildQueryDescription, queryWithoutDeleted } from './helpers'\n"
  },
  {
    "path": "src/QueryDescription/index.js",
    "content": "// @flow\n/* eslint-disable no-use-before-define */\n\nexport type {\n  NonNullValue,\n  NonNullValues,\n  Value,\n  CompoundValue,\n  Operator,\n  ColumnDescription,\n  ComparisonRight,\n  Comparison,\n  WhereDescription,\n  SqlExpr,\n  LokiExpr,\n  Where,\n  And,\n  Or,\n  On,\n  SortOrder,\n  SortBy,\n  Take,\n  Skip,\n  JoinTables,\n  NestedJoinTable,\n  LokiTransformFunction,\n  LokiTransform,\n  SqlQuery,\n  Clause,\n  QueryDescription,\n} from './type'\n\nexport {\n  eq,\n  notEq,\n  gt,\n  gte,\n  weakGt,\n  lt,\n  lte,\n  oneOf,\n  notIn,\n  between,\n  like,\n  notLike,\n  sanitizeLikeString,\n  includes,\n  column,\n  where,\n  unsafeSqlExpr,\n  unsafeLokiExpr,\n  unsafeLokiTransform,\n  and,\n  or,\n  asc,\n  desc,\n  sortBy,\n  take,\n  skip,\n  on,\n  experimentalJoinTables,\n  experimentalNestedJoin,\n  unsafeSqlQuery,\n} from './operators'\n\n// NOTE: These probably shouldn't be exported from here, but kept for backwards compatibility\nexport { buildQueryDescription, queryWithoutDeleted } from './helpers'\n"
  },
  {
    "path": "src/QueryDescription/operators.d.ts",
    "content": "import type { TableName, ColumnName } from '../Schema'\nimport type { ArrayOrSpreadFn } from '../utils/fp'\nimport type {\n  NonNullValue,\n  NonNullValues,\n  Value,\n  ColumnDescription,\n  Comparison,\n  WhereDescription,\n  SqlExpr,\n  LokiExpr,\n  Where,\n  And,\n  Or,\n  On,\n  SortOrder,\n  SortBy,\n  Take,\n  Skip,\n  JoinTables,\n  NestedJoinTable,\n  LokiTransformFunction,\n  LokiTransform,\n  SqlQuery,\n} from './type'\n\n// Note: These operators are designed to match SQLite semantics\n// to ensure that iOS, Android, web, and Query observation yield exactly the same results\n//\n// - `true` and `false` are equal to `1` and `0`\n//   (JS uses true/false, but SQLite uses 1/0)\n// - `null`, `undefined`, and missing fields are equal\n//   (SQLite queries return null, but newly created records might lack fields)\n// - You can only compare columns to values/other columns of the same type\n//   (e.g. string to int comparisons are not allowed)\n// - numeric comparisons (<, <=, >, >=, between) with null on either side always return false\n//   e.g. `null < 2 == false`\n// - `null` on the right-hand-side of IN/NOT IN is not allowed\n//   e.g. `Q.in([null, 'foo', 'bar'])`\n// - `null` on the left-hand-side of IN/NOT IN will always return false\n//   e.g. `null NOT IN (1, 2, 3) == false`\n\n// function _valueOrColumn(arg: Value | ColumnDescription): ComparisonRight;\n\nexport function eq(valueOrColumn: Value | ColumnDescription): Comparison\n\n// Not equal (weakly)\n// Note:\n// - (null != undefined) == false\n// - (1 != true) == false\n// - (0 != false) == false\nexport function notEq(valueOrColumn: Value | ColumnDescription): Comparison\n\n// Greater than (SQLite semantics)\n// Note:\n// - (5 > null) == false\nexport function gt(valueOrColumn: NonNullValue | ColumnDescription): Comparison\n\n// Greater than or equal (SQLite semantics)\n// Note:\n// - (5 >= null) == false\nexport function gte(valueOrColumn: NonNullValue | ColumnDescription): Comparison\n\n// Greater than (JavaScript semantics)\n// Note:\n// - (5 > null) == true\nexport function weakGt(valueOrColumn: NonNullValue | ColumnDescription): Comparison\n\n// Less than (SQLite semantics)\n// Note:\n// - (null < 5) == false\nexport function lt(valueOrColumn: NonNullValue | ColumnDescription): Comparison\n\n// Less than or equal (SQLite semantics)\n// Note:\n// - (null <= 5) == false\nexport function lte(valueOrColumn: NonNullValue | ColumnDescription): Comparison\n\n// Value in a set (SQLite IN semantics)\n// Note:\n// - `null` in `values` is not allowed!\nexport function oneOf(values: NonNullValues): Comparison\n\n// Value not in a set (SQLite NOT IN semantics)\n// Note:\n// - `null` in `values` is not allowed!\n// - (null NOT IN (1, 2, 3)) == false\nexport function notIn(values: NonNullValues): Comparison\n\n// Number is between two numbers (greater than or equal left, and less than or equal right)\nexport function between(left: number, right: number): Comparison\n\nexport function like(value: string): Comparison\n\nexport function notLike(value: string): Comparison\n\nexport function sanitizeLikeString(value: string): string\n\nexport function includes(value: string): Comparison\n\nexport function column(name: ColumnName): ColumnDescription\n\nexport function where(left: ColumnName, valueOrComparison: Value | Comparison): WhereDescription\n\nexport function unsafeSqlExpr(sql: string): SqlExpr\n\nexport function unsafeLokiExpr(expr: any): LokiExpr\n\nexport function unsafeLokiTransform(fn: LokiTransformFunction): LokiTransform\n\nexport const and: ArrayOrSpreadFn<Where, And>\nexport const or: ArrayOrSpreadFn<Where, Or>\n\nexport const asc: SortOrder\nexport const desc: SortOrder\n\nexport function sortBy(sortColumn: ColumnName, sortOrder?: SortOrder): SortBy\n\nexport function take(count: number): Take\n\nexport function skip(count: number): Skip\n\n// Note: we have to write out three separate meanings of OnFunction because of a Babel bug\n// (it will remove the parentheses, changing the meaning of the flow type)\ntype _OnFunctionColumnValue = (\n  tableName: TableName<any>,\n  columnName: ColumnName,\n  value: Value,\n) => On\ntype _OnFunctionColumnComparison = (\n  tableName: TableName<any>,\n  columnName: ColumnName,\n  comparison: Comparison,\n) => On\ntype _OnFunctionWhere = (tableName: TableName<any>, where: Where) => On\ntype _OnFunctionWhereList = (tableName: TableName<any>, where: Where[]) => On\n\ntype OnFunction = _OnFunctionColumnValue &\n  _OnFunctionColumnComparison &\n  _OnFunctionWhere &\n  _OnFunctionWhereList\n\n// Use: on('tableName', 'left_column', 'right_value')\n// or: on('tableName', 'left_column', gte(10))\n// or: on('tableName', where('left_column', 'value')))\n// or: on('tableName', or(...))\n// or: on('tableName', [where(...), where(...)])\nexport const on: OnFunction\n\nexport function experimentalJoinTables(tables: TableName<any>[]): JoinTables\n\nexport function experimentalNestedJoin(from: TableName<any>, to: TableName<any>): NestedJoinTable\n\nexport function unsafeSqlQuery(sql: string, values?: Value[]): SqlQuery\n"
  },
  {
    "path": "src/QueryDescription/operators.js",
    "content": "// @flow\n/* eslint-disable no-use-before-define */\n\n// don't import whole `utils` to keep worker size small\nimport invariant from '../utils/common/invariant'\nimport checkName from '../utils/fp/checkName'\nimport fromArrayOrSpread, { type ArrayOrSpreadFn } from '../utils/fp/arrayOrSpread'\nimport { type TableName, type ColumnName } from '../Schema'\n\nimport type {\n  NonNullValue,\n  NonNullValues,\n  Value,\n  ColumnDescription,\n  ComparisonRight,\n  Comparison,\n  WhereDescription,\n  SqlExpr,\n  LokiExpr,\n  Where,\n  And,\n  Or,\n  On,\n  SortOrder,\n  SortBy,\n  Take,\n  Skip,\n  JoinTables,\n  NestedJoinTable,\n  LokiTransformFunction,\n  LokiTransform,\n  SqlQuery,\n} from './type'\n\n// Note: These operators are designed to match SQLite semantics\n// to ensure that iOS, Android, web, and Query observation yield exactly the same results\n//\n// - `true` and `false` are equal to `1` and `0`\n//   (JS uses true/false, but SQLite uses 1/0)\n// - `null`, `undefined`, and missing fields are equal\n//   (SQLite queries return null, but newly created records might lack fields)\n// - You can only compare columns to values/other columns of the same type\n//   (e.g. string to int comparisons are not allowed)\n// - numeric comparisons (<, <=, >, >=, between) with null on either side always return false\n//   e.g. `null < 2 == false`\n// - `null` on the right-hand-side of IN/NOT IN is not allowed\n//   e.g. `Q.in([null, 'foo', 'bar'])`\n// - `null` on the left-hand-side of IN/NOT IN will always return false\n//   e.g. `null NOT IN (1, 2, 3) == false`\n\n// Equals (weakly)\n// Note:\n// - (null == undefined) == true\n// - (1 == true) == true\n// - (0 == false) == true\nexport function eq(valueOrColumn: Value | ColumnDescription): Comparison {\n  return { operator: 'eq', right: _valueOrColumn(valueOrColumn), type: comparisonSymbol }\n}\n\n// Not equal (weakly)\n// Note:\n// - (null != undefined) == false\n// - (1 != true) == false\n// - (0 != false) == false\nexport function notEq(valueOrColumn: Value | ColumnDescription): Comparison {\n  return { operator: 'notEq', right: _valueOrColumn(valueOrColumn), type: comparisonSymbol }\n}\n\n// Greater than (SQLite semantics)\n// Note:\n// - (5 > null) == false\nexport function gt(valueOrColumn: NonNullValue | ColumnDescription): Comparison {\n  return { operator: 'gt', right: _valueOrColumn(valueOrColumn), type: comparisonSymbol }\n}\n\n// Greater than or equal (SQLite semantics)\n// Note:\n// - (5 >= null) == false\nexport function gte(valueOrColumn: NonNullValue | ColumnDescription): Comparison {\n  return { operator: 'gte', right: _valueOrColumn(valueOrColumn), type: comparisonSymbol }\n}\n\n// Greater than (JavaScript semantics)\n// Note:\n// - (5 > null) == true\nexport function weakGt(valueOrColumn: NonNullValue | ColumnDescription): Comparison {\n  return { operator: 'weakGt', right: _valueOrColumn(valueOrColumn), type: comparisonSymbol }\n}\n\n// Less than (SQLite semantics)\n// Note:\n// - (null < 5) == false\nexport function lt(valueOrColumn: NonNullValue | ColumnDescription): Comparison {\n  return { operator: 'lt', right: _valueOrColumn(valueOrColumn), type: comparisonSymbol }\n}\n\n// Less than or equal (SQLite semantics)\n// Note:\n// - (null <= 5) == false\nexport function lte(valueOrColumn: NonNullValue | ColumnDescription): Comparison {\n  return { operator: 'lte', right: _valueOrColumn(valueOrColumn), type: comparisonSymbol }\n}\n\n// Value in a set (SQLite IN semantics)\n// Note:\n// - `null` in `values` is not allowed!\nexport function oneOf(values: NonNullValues): Comparison {\n  invariant(Array.isArray(values), `argument passed to oneOf() is not an array`)\n  Object.freeze(values) // even in production, because it's an easy mistake to make\n\n  return { operator: 'oneOf', right: { values }, type: comparisonSymbol }\n}\n\n// Value not in a set (SQLite NOT IN semantics)\n// Note:\n// - `null` in `values` is not allowed!\n// - (null NOT IN (1, 2, 3)) == false\nexport function notIn(values: NonNullValues): Comparison {\n  invariant(Array.isArray(values), `argument passed to notIn() is not an array`)\n  Object.freeze(values) // even in production, because it's an easy mistake to make\n\n  return { operator: 'notIn', right: { values }, type: comparisonSymbol }\n}\n\n// Number is between two numbers (greater than or equal left, and less than or equal right)\nexport function between(left: number, right: number): Comparison {\n  invariant(\n    typeof left === 'number' && typeof right === 'number',\n    'Values passed to Q.between() are not numbers',\n  )\n  const values: number[] = [left, right]\n  return { operator: 'between', right: { values }, type: comparisonSymbol }\n}\n\nexport function like(value: string): Comparison {\n  invariant(typeof value === 'string', 'Value passed to Q.like() is not a string')\n  return { operator: 'like', right: { value }, type: comparisonSymbol }\n}\n\nexport function notLike(value: string): Comparison {\n  invariant(typeof value === 'string', 'Value passed to Q.notLike() is not a string')\n  return { operator: 'notLike', right: { value }, type: comparisonSymbol }\n}\n\nconst nonLikeSafeRegexp = /[^a-zA-Z0-9]/g\n\nexport function sanitizeLikeString(value: string): string {\n  invariant(typeof value === 'string', 'Value passed to Q.sanitizeLikeString() is not a string')\n  return value.replace(nonLikeSafeRegexp, '_')\n}\n\nexport function includes(value: string): Comparison {\n  invariant(typeof value === 'string', 'Value passed to Q.includes() is not a string')\n  return { operator: 'includes', right: { value }, type: comparisonSymbol }\n}\n\nexport function column(name: ColumnName): ColumnDescription {\n  invariant(typeof name === 'string', 'Name passed to Q.column() is not a string')\n  return { column: checkName(name), type: columnSymbol }\n}\n\nfunction _valueOrComparison(arg: Value | Comparison): Comparison {\n  if (arg === null || typeof arg !== 'object') {\n    return _valueOrComparison(eq(arg))\n  }\n\n  invariant(\n    arg.type === comparisonSymbol,\n    'Invalid Comparison passed to Query builder. You seem to be passing unsanitized user data to Query builder!',\n  )\n  const { operator, right } = arg\n  return { operator, right }\n}\n\nexport function where(left: ColumnName, valueOrComparison: Value | Comparison): WhereDescription {\n  return { type: 'where', left: checkName(left), comparison: _valueOrComparison(valueOrComparison) }\n}\n\nexport function unsafeSqlExpr(sql: string): SqlExpr {\n  if (process.env.NODE_ENV !== 'production') {\n    invariant(typeof sql === 'string', 'Value passed to Q.unsafeSqlExpr is not a string')\n  }\n  return { type: 'sql', expr: sql }\n}\n\nexport function unsafeLokiExpr(expr: any): LokiExpr {\n  if (process.env.NODE_ENV !== 'production') {\n    invariant(\n      expr && typeof expr === 'object' && !Array.isArray(expr),\n      'Value passed to Q.unsafeLokiExpr is not an object',\n    )\n  }\n  return { type: 'loki', expr }\n}\n\nexport function unsafeLokiTransform(fn: LokiTransformFunction): LokiTransform {\n  return { type: 'lokiTransform', function: fn }\n}\n\nexport const and: ArrayOrSpreadFn<Where, And> = (...args): And => {\n  const clauses = fromArrayOrSpread<Where>(args, 'Q.and()', 'Where')\n  validateConditions(clauses)\n  return { type: 'and', conditions: clauses }\n}\n\nexport const or: ArrayOrSpreadFn<Where, Or> = (...args): Or => {\n  const clauses = fromArrayOrSpread<Where>(args, 'Q.or()', 'Where')\n  validateConditions(clauses)\n  return { type: 'or', conditions: clauses }\n}\n\nexport const asc: SortOrder = 'asc'\nexport const desc: SortOrder = 'desc'\n\nexport function sortBy(sortColumn: ColumnName, sortOrder: SortOrder = asc): SortBy {\n  invariant(\n    sortOrder === 'asc' || sortOrder === 'desc',\n    `Invalid sortOrder argument received in Q.sortBy (valid: asc, desc)`,\n  )\n  return { type: 'sortBy', sortColumn: checkName(sortColumn), sortOrder }\n}\n\nexport function take(count: number): Take {\n  invariant(typeof count === 'number', 'Value passed to Q.take() is not a number')\n  return { type: 'take', count }\n}\n\nexport function skip(count: number): Skip {\n  invariant(typeof count === 'number', 'Value passed to Q.skip() is not a number')\n  return { type: 'skip', count }\n}\n\n// Note: we have to write out three separate meanings of OnFunction because of a Babel bug\n// (it will remove the parentheses, changing the meaning of the flow type)\ntype _OnFunctionColumnValue = (TableName<any>, ColumnName, Value) => On\ntype _OnFunctionColumnComparison = (TableName<any>, ColumnName, Comparison) => On\ntype _OnFunctionWhere = (TableName<any>, Where) => On\ntype _OnFunctionWhereList = (TableName<any>, Where[]) => On\n\ntype OnFunction = _OnFunctionColumnValue &\n  _OnFunctionColumnComparison &\n  _OnFunctionWhere &\n  _OnFunctionWhereList\n\n// Use: on('tableName', 'left_column', 'right_value')\n// or: on('tableName', 'left_column', gte(10))\n// or: on('tableName', where('left_column', 'value')))\n// or: on('tableName', or(...))\n// or: on('tableName', [where(...), where(...)])\nexport const on: OnFunction = (table, leftOrClauseOrList, valueOrComparison) => {\n  if (typeof leftOrClauseOrList === 'string') {\n    invariant(valueOrComparison !== undefined, 'illegal `undefined` passed to Q.on')\n    return on(table, [where(leftOrClauseOrList, valueOrComparison)])\n  }\n\n  const clauseOrList: Where | Where[] = (leftOrClauseOrList: any)\n\n  if (Array.isArray(clauseOrList)) {\n    const conditions: Where[] = clauseOrList\n    validateConditions(conditions)\n    return {\n      type: 'on',\n      table: checkName(table),\n      conditions,\n    }\n  } else if (clauseOrList && clauseOrList.type === 'and') {\n    return on(table, clauseOrList.conditions)\n  }\n\n  return on(table, [clauseOrList])\n}\n\nexport function experimentalJoinTables(tables: TableName<any>[]): JoinTables {\n  invariant(Array.isArray(tables), 'experimentalJoinTables expected an array')\n  return { type: 'joinTables', tables: tables.map(checkName) }\n}\n\nexport function experimentalNestedJoin(from: TableName<any>, to: TableName<any>): NestedJoinTable {\n  return { type: 'nestedJoinTable', from: checkName(from), to: checkName(to) }\n}\n\nexport function unsafeSqlQuery(sql: string, values: Value[] = []): SqlQuery {\n  if (process.env.NODE_ENV !== 'production') {\n    invariant(typeof sql === 'string', 'Value passed to Q.unsafeSqlQuery is not a string')\n    invariant(\n      Array.isArray(values),\n      'Placeholder values passed to Q.unsafeSqlQuery are not an array',\n    )\n  }\n  return { type: 'sqlQuery', sql, values }\n}\n\nconst columnSymbol = Symbol('Q.column')\nconst comparisonSymbol = Symbol('QueryComparison')\n\nfunction _valueOrColumn(arg: Value | ColumnDescription): ComparisonRight {\n  if (arg === null || typeof arg !== 'object') {\n    invariant(arg !== undefined, 'Cannot compare to undefined in a Query. Did you mean null?')\n    return { value: arg }\n  }\n\n  if (typeof arg.column === 'string') {\n    invariant(\n      arg.type === columnSymbol,\n      'Invalid { column: } object passed to Watermelon query. You seem to be passing unsanitized user data to Query builder!',\n    )\n    return { column: arg.column }\n  }\n\n  throw new Error(`Invalid value passed to query`)\n}\n\nconst acceptableClauses = ['where', 'and', 'or', 'on', 'sql', 'loki']\nconst isAcceptableClause = (clause: Where) => acceptableClauses.includes(clause.type)\nconst validateConditions = (clauses: Where[]) => {\n  if (process.env.NODE_ENV !== 'production') {\n    invariant(\n      clauses.every(isAcceptableClause),\n      'Q.and(), Q.or(), Q.on() can only contain: Q.where, Q.and, Q.or, Q.on, Q.unsafeSqlExpr, Q.unsafeLokiExpr clauses',\n    )\n  }\n}\n"
  },
  {
    "path": "src/QueryDescription/type.d.ts",
    "content": "import type { $RE } from '../types'\n\nimport type { TableName, ColumnName } from '../Schema'\n\nexport type NonNullValue = number | string | boolean\nexport type NonNullValues = number[] | string[] | boolean[]\nexport type Value = NonNullValue | null\nexport type CompoundValue = Value | Value[]\n\nexport type Operator =\n  | 'eq'\n  | 'notEq'\n  | 'gt'\n  | 'gte'\n  | 'weakGt'\n  | 'lt'\n  | 'lte'\n  | 'oneOf'\n  | 'notIn'\n  | 'between'\n  | 'like'\n  | 'notLike'\n  | 'includes'\n\nexport type ColumnDescription = $RE<{ column: ColumnName; type?: symbol }>\nexport type ComparisonRight =\n  | $RE<{ value: Value }>\n  | $RE<{ values: NonNullValues }>\n  | ColumnDescription\nexport type Comparison = $RE<{ operator: Operator; right: ComparisonRight; type?: symbol }>\n\nexport type WhereDescription = $RE<{\n  type: 'where'\n  left: ColumnName\n  comparison: Comparison\n}>\n\nexport type SqlExpr = $RE<{ type: 'sql'; expr: string }>\nexport type LokiExpr = $RE<{ type: 'loki'; expr: any }>\n\n// eslint-disable-next-line no-use-before-define\nexport type Where = WhereDescription | And | Or | On | SqlExpr | LokiExpr\nexport type And = $RE<{ type: 'and'; conditions: Where[] }>\nexport type Or = $RE<{ type: 'or'; conditions: Where[] }>\nexport type On = $RE<{\n  type: 'on'\n  table: TableName<any>\n  conditions: Where[]\n}>\nexport type SortOrder = 'asc' | 'desc'\nexport const asc: SortOrder\nexport const desc: SortOrder\nexport type SortBy = $RE<{\n  type: 'sortBy'\n  sortColumn: ColumnName\n  sortOrder: SortOrder\n}>\nexport type Take = $RE<{\n  type: 'take'\n  count: number\n}>\nexport type Skip = $RE<{\n  type: 'skip'\n  count: number\n}>\nexport type JoinTables = $RE<{\n  type: 'joinTables'\n  tables: TableName<any>[]\n}>\nexport type NestedJoinTable = $RE<{\n  type: 'nestedJoinTable'\n  from: TableName<any>\n  to: TableName<any>\n}>\nexport type LokiTransformFunction = (rawLokiRecords: any[], loki: any) => any[]\nexport type LokiTransform = $RE<{\n  type: 'lokiTransform'\n  function: LokiTransformFunction\n}>\nexport type SqlQuery = $RE<{\n  type: 'sqlQuery'\n  sql: string\n  values: Value[]\n}>\nexport type Clause =\n  | Where\n  | SortBy\n  | Take\n  | Skip\n  | JoinTables\n  | NestedJoinTable\n  | LokiTransform\n  | SqlQuery\n\ntype NestedJoinTableDef = $RE<{ from: TableName<any>; to: TableName<any> }>\nexport type QueryDescription = $RE<{\n  where: Where[]\n  joinTables: TableName<any>[]\n  nestedJoinTables: NestedJoinTableDef[]\n  sortBy: SortBy[]\n  take?: number\n  skip?: number\n  lokiTransform?: LokiTransformFunction\n  sql?: SqlQuery\n}>\n"
  },
  {
    "path": "src/QueryDescription/type.js",
    "content": "// @flow\n/* eslint-disable no-use-before-define */\n\nimport type { $RE } from '../types'\nimport { type TableName, type ColumnName } from '../Schema'\n\nexport type NonNullValue = number | string | boolean\nexport type NonNullValues = number[] | string[] | boolean[]\nexport type Value = NonNullValue | null\nexport type CompoundValue = Value | Value[]\n\nexport type Operator =\n  | 'eq'\n  | 'notEq'\n  | 'gt'\n  | 'gte'\n  | 'weakGt'\n  | 'lt'\n  | 'lte'\n  | 'oneOf'\n  | 'notIn'\n  | 'between'\n  | 'like'\n  | 'notLike'\n  | 'includes'\n\nexport type ColumnDescription = $RE<{ column: ColumnName, type?: symbol }>\nexport type ComparisonRight =\n  | $RE<{ value: Value }>\n  | $RE<{ values: NonNullValues }>\n  | ColumnDescription\nexport type Comparison = $RE<{ operator: Operator, right: ComparisonRight, type?: symbol }>\n\nexport type WhereDescription = $RE<{\n  type: 'where',\n  left: ColumnName,\n  comparison: Comparison,\n}>\n\nexport type SqlExpr = $RE<{ type: 'sql', expr: string }>\nexport type LokiExpr = $RE<{ type: 'loki', expr: any }>\n\nexport type Where = WhereDescription | And | Or | On | SqlExpr | LokiExpr\nexport type And = $RE<{ type: 'and', conditions: Where[] }>\nexport type Or = $RE<{ type: 'or', conditions: Where[] }>\nexport type On = $RE<{\n  type: 'on',\n  table: TableName<any>,\n  conditions: Where[],\n}>\nexport type SortOrder = 'asc' | 'desc'\nexport type SortBy = $RE<{\n  type: 'sortBy',\n  sortColumn: ColumnName,\n  sortOrder: SortOrder,\n}>\nexport type Take = $RE<{\n  type: 'take',\n  count: number,\n}>\nexport type Skip = $RE<{\n  type: 'skip',\n  count: number,\n}>\nexport type JoinTables = $RE<{\n  type: 'joinTables',\n  tables: TableName<any>[],\n}>\nexport type NestedJoinTable = $RE<{\n  type: 'nestedJoinTable',\n  from: TableName<any>,\n  to: TableName<any>,\n}>\nexport type LokiTransformFunction = (rawLokiRecords: any[], loki: any) => any[]\nexport type LokiTransform = $RE<{\n  type: 'lokiTransform',\n  function: LokiTransformFunction,\n}>\nexport type SqlQuery = $RE<{\n  type: 'sqlQuery',\n  sql: string,\n  values: Value[],\n}>\nexport type Clause =\n  | Where\n  | SortBy\n  | Take\n  | Skip\n  | JoinTables\n  | NestedJoinTable\n  | LokiTransform\n  | SqlQuery\n\ntype NestedJoinTableDef = $RE<{ from: TableName<any>, to: TableName<any> }>\nexport type QueryDescription = $RE<{\n  where: Where[],\n  joinTables: TableName<any>[],\n  nestedJoinTables: NestedJoinTableDef[],\n  sortBy: SortBy[],\n  take?: number,\n  skip?: number,\n  lokiTransform?: LokiTransformFunction,\n  sql?: SqlQuery,\n}>\n"
  },
  {
    "path": "src/RawRecord/__tests__/helpers.js",
    "content": "const stringNull = ['', null]\nconst booleanNull = [false, null]\nconst numberNull = [0, null]\n\n// value - input, value: [a, b] - expected outputs for a - required fields, b - optional fields\nexport const expectedSanitizations = [\n  { value: 'Hello', string: ['Hello', 'Hello'], boolean: booleanNull, number: numberNull },\n  { value: '', string: ['', ''], boolean: booleanNull, number: numberNull },\n  { value: 'true', string: ['true', 'true'], boolean: booleanNull, number: numberNull },\n  { value: 'false', string: ['false', 'false'], boolean: booleanNull, number: numberNull },\n  { value: '1', string: ['1', '1'], boolean: booleanNull, number: numberNull },\n  { value: '0', string: ['0', '0'], boolean: booleanNull, number: numberNull },\n  { value: 'NaN', string: ['NaN', 'NaN'], boolean: booleanNull, number: numberNull },\n  { value: 1, string: stringNull, boolean: [true, true], number: [1, 1] },\n  { value: 0, string: stringNull, boolean: [false, false], number: [0, 0] },\n  { value: +0.0, string: stringNull, boolean: [false, false], number: [0, 0] },\n  { value: -0.0, string: stringNull, boolean: [false, false], number: [0, 0] },\n  { value: 3.14, string: stringNull, boolean: booleanNull, number: [3.14, 3.14] },\n  { value: -3.14, string: stringNull, boolean: booleanNull, number: [-3.14, -3.14] },\n  {\n    value: 1532612920392,\n    string: stringNull,\n    boolean: booleanNull,\n    number: [1532612920392, 1532612920392],\n  },\n  { value: true, string: stringNull, boolean: [true, true], number: numberNull },\n  { value: false, string: stringNull, boolean: [false, false], number: numberNull },\n  { value: NaN, string: stringNull, boolean: booleanNull, number: numberNull },\n  { value: Infinity, string: stringNull, boolean: booleanNull, number: numberNull },\n  { value: -Infinity, string: stringNull, boolean: booleanNull, number: numberNull },\n  { value: null, string: stringNull, boolean: booleanNull, number: numberNull },\n  { value: undefined, string: stringNull, boolean: booleanNull, number: numberNull },\n  { value: {}, string: stringNull, boolean: booleanNull, number: numberNull },\n  {\n    value: { __proto__: { value: 'Hello' } },\n    string: stringNull,\n    boolean: booleanNull,\n    number: numberNull,\n  },\n  {\n    value: { __proto__: { valueOf: () => 10 } },\n    string: stringNull,\n    boolean: booleanNull,\n    number: numberNull,\n  },\n  { value: [], string: stringNull, boolean: booleanNull, number: numberNull },\n]\n"
  },
  {
    "path": "src/RawRecord/__tests__/test.js",
    "content": "import { omit } from 'rambdax'\n\nimport { tableSchema } from '../../Schema'\nimport { setRawSanitized, sanitizedRaw, nullValue } from '../index'\nimport { expectedSanitizations } from './helpers'\n\nconst mockTaskSchema = tableSchema({\n  name: 'mock_tasks',\n  columns: [\n    { name: 'name', type: 'string' },\n    { name: 'responsible_id', type: 'string', isOptional: true },\n    { name: 'created_at', type: 'number' },\n    { name: 'ended_at', type: 'number', isOptional: true },\n    { name: 'project_position', type: 'number' },\n    { name: 'priority_position', type: 'number', isOptional: true },\n    { name: 'is_abandonned', type: 'boolean' },\n    { name: 'is_all_day', type: 'boolean', isOptional: true },\n  ],\n})\n\ndescribe('sanitizedRaw()', () => {\n  it('can sanitize the whole raw', () => {\n    const goodTask = {\n      id: 'abcdef',\n      _status: 'synced',\n      _changed: '',\n      name: 'My task',\n      responsible_id: 'abcdef',\n      created_at: 1632612920392,\n      ended_at: null,\n      priority_position: null,\n      project_position: 78.4,\n      is_abandonned: false,\n      is_all_day: false,\n    }\n\n    expect(sanitizedRaw(goodTask, mockTaskSchema)).not.toBe(goodTask)\n    expect(sanitizedRaw(goodTask, mockTaskSchema)).toEqual(goodTask)\n\n    const goodTask2 = {\n      id: 'abcdef2',\n      _status: 'updated',\n      _changed: 'foo,bar',\n      name: 'My task 2',\n      responsible_id: null,\n      created_at: 1432612920392,\n      ended_at: 1232612920392,\n      priority_position: 12.4,\n      project_position: -20.1,\n      is_abandonned: true,\n      is_all_day: null,\n    }\n\n    expect(sanitizedRaw(goodTask2, mockTaskSchema)).toEqual(goodTask2)\n\n    const messyTask = {\n      id: 'abcdef3',\n      _status: 'created',\n      _changed: null,\n      last_modified: 1000 /* .1 */, // last_modified was removed\n      name: '',\n      created_at: 2018 /* .5 */,\n      ended_at: 'NaN',\n      project_position: null,\n      $loki: 1024,\n      new_field: 'wtf',\n    }\n\n    expect(sanitizedRaw(messyTask, mockTaskSchema)).toEqual({\n      id: 'abcdef3',\n      _status: 'created',\n      _changed: '',\n      name: '',\n      responsible_id: null,\n      created_at: 2018,\n      ended_at: null,\n      priority_position: null,\n      project_position: 0,\n      is_abandonned: false,\n      is_all_day: null,\n    })\n  })\n  it(`can create a valid raw from nothin'`, () => {\n    const newRaw = sanitizedRaw({}, mockTaskSchema)\n    expect(omit(['id'], newRaw)).toEqual({\n      _status: 'created',\n      _changed: '',\n      name: '',\n      responsible_id: null,\n      created_at: 0,\n      ended_at: null,\n      priority_position: null,\n      project_position: 0,\n      is_abandonned: false,\n      is_all_day: null,\n    })\n    expect(typeof newRaw.id).toBe('string')\n    expect(newRaw.id).toHaveLength(16)\n  })\n  it('sanitizes id, _status, _changed', () => {\n    const schema2 = tableSchema({ name: 'test2', columns: [] })\n\n    const validateId = (raw) => {\n      expect(typeof raw.id).toBe('string')\n      expect(raw.id).toHaveLength(16)\n    }\n\n    // if ID is missing or malformed, treat this as a new object\n    const raw1 = sanitizedRaw({ _status: 'updated', _changed: 'a,b' }, schema2)\n    expect(omit(['id'], raw1)).toEqual({ _status: 'created', _changed: '' })\n    validateId(raw1)\n\n    const raw2 = sanitizedRaw({ id: null, _status: 'updated', _changed: 'a,b' }, schema2)\n    expect(omit(['id'], raw2)).toEqual({ _status: 'created', _changed: '' })\n    validateId(raw2)\n\n    // otherwise, just sanitize other fields\n    const raw3 = sanitizedRaw({ id: 'i1', _status: '', _changed: 'a,b' }, schema2)\n    expect(raw3).toEqual({ id: 'i1', _status: 'created', _changed: 'a,b' })\n\n    const raw4 = sanitizedRaw({ id: 'i2', _status: 'deleted', _changed: true }, schema2)\n    expect(raw4).toEqual({ id: 'i2', _status: 'deleted', _changed: '' })\n  })\n  it('is safe against __proto__ tricks', async () => {\n    // TODO: It's unclear to me if this is actually dangerous/exploitable...\n    const expected = {\n      _status: 'created',\n      _changed: '',\n      name: '',\n      responsible_id: 'abcdef',\n      created_at: 0,\n      ended_at: null,\n      priority_position: null,\n      project_position: 0,\n      is_abandonned: false,\n      is_all_day: null,\n    }\n    const json = JSON.parse(`{\"__proto__\":{\"name\":\"pwned\"},\"responsible_id\":\"abcdef\"}`)\n    const protoJson = sanitizedRaw(json, mockTaskSchema)\n    expect({}.name).toBe(undefined)\n    expect(Object.prototype.hasOwnProperty.call(protoJson, '__proto__')).toBe(false)\n    // eslint-disable-next-line no-proto\n    expect(protoJson.__proto__.name).toBe(undefined)\n    expect(omit(['id'], protoJson)).toEqual(expected)\n\n    const protoObj = sanitizedRaw(Object.assign({}, json), mockTaskSchema)\n    expect({}.name).toBe(undefined)\n    expect(Object.prototype.hasOwnProperty.call(protoObj, '__proto__')).toBe(false)\n    // eslint-disable-next-line no-proto\n    expect(protoObj.__proto__.name).toBe(undefined)\n    expect(omit(['id'], protoObj)).toEqual(expected)\n  })\n})\n\ndescribe('setRawSanitized()', () => {\n  it('can set one value on a sanitized raw', () => {\n    const raw = sanitizedRaw({}, mockTaskSchema)\n\n    // ?string\n    expect(raw.responsible_id).toBe(null)\n\n    setRawSanitized(raw, 'responsible_id', 'abcdef', mockTaskSchema.columns.responsible_id)\n    expect(raw.responsible_id).toBe('abcdef')\n\n    setRawSanitized(raw, 'responsible_id', false, mockTaskSchema.columns.responsible_id)\n    expect(raw.responsible_id).toBe(null)\n\n    // boolean\n    expect(raw.is_abandonned).toBe(false)\n\n    setRawSanitized(raw, 'is_abandonned', true, mockTaskSchema.columns.is_abandonned)\n    expect(raw.is_abandonned).toBe(true)\n\n    setRawSanitized(raw, 'is_abandonned', 0, mockTaskSchema.columns.is_abandonned)\n    expect(raw.is_abandonned).toBe(false)\n\n    setRawSanitized(raw, 'is_abandonned', 1, mockTaskSchema.columns.is_abandonned)\n    expect(raw.is_abandonned).toBe(true)\n  })\n  it('can sanitize every value correctly', () => {\n    const test = (value, type, isOptional = false) => {\n      const raw = {}\n      setRawSanitized(raw, 'foo', value, { name: 'foo', type, isOptional })\n      return raw.foo\n    }\n\n    expectedSanitizations.forEach(({ value, string, boolean, number }) => {\n      expect(test(value, 'string')).toBe(string[0])\n      expect(test(value, 'string', true)).toBe(string[1])\n\n      expect(test(value, 'boolean')).toBe(boolean[0])\n      expect(test(value, 'boolean', true)).toBe(boolean[1])\n\n      expect(test(value, 'number')).toBe(number[0])\n      expect(test(value, 'number', true)).toBe(number[1])\n    })\n  })\n})\n\ndescribe('nullValue()', () => {\n  it('can return null value for any column schema', () => {\n    expect(nullValue({ name: 'foo', type: 'string' })).toBe('')\n    expect(nullValue({ name: 'foo', type: 'string', isOptional: true })).toBe(null)\n    expect(nullValue({ name: 'foo', type: 'number' })).toBe(0)\n    expect(nullValue({ name: 'foo', type: 'number', isOptional: true })).toBe(null)\n    expect(nullValue({ name: 'foo', type: 'boolean' })).toBe(false)\n    expect(nullValue({ name: 'foo', type: 'boolean', isOptional: true })).toBe(null)\n  })\n})\n"
  },
  {
    "path": "src/RawRecord/index.d.ts",
    "content": "import type { ColumnName, ColumnSchema, TableSchema } from '../Schema'\nimport type { RecordId, SyncStatus } from '../Model'\n\n// Raw object representing a model record, coming from an untrusted source\n// (disk, sync, user data). Before it can be used to create a Model instance\n// it must be sanitized (with `sanitizedRaw`) into a RawRecord\nexport type DirtyRaw = { [key: string]: any }\n\n// These fields are ALWAYS present in records of any collection.\ntype _RawRecord = {\n  id: RecordId\n  _status: SyncStatus\n  _changed: string\n}\n\n// Raw object representing a model record. A RawRecord is guaranteed by the type system\n// to be safe to use (sanitied with `sanitizedRaw`):\n// - it has exactly the fields described by TableSchema (+ standard fields)\n// - every field is exactly the type described by ColumnSchema (string, number, or boolean)\n// - … and the same optionality (will not be null unless isOptional: true)\nexport type RawRecord = _RawRecord\n\n// Transforms a dirty raw record object into a trusted sanitized RawRecord according to passed TableSchema\nexport function sanitizedRaw(dirtyRaw: DirtyRaw, tableSchema: TableSchema): RawRecord\n\n// Modifies passed rawRecord by setting sanitized `value` to `columnName`\n// Note: Assumes columnName exists and columnSchema matches the name\nexport function setRawSanitized(\n  rawRecord: RawRecord,\n  columnName: ColumnName,\n  value: any,\n  columnSchema: ColumnSchema,\n): void\n\nexport type NullValue = null | '' | 0 | false\n\nexport function nullValue(columnSchema: ColumnSchema): NullValue\n"
  },
  {
    "path": "src/RawRecord/index.js",
    "content": "// @flow\n/* eslint-disable no-lonely-if */\n/* eslint-disable no-self-compare */\n\nimport { type ColumnName, type ColumnSchema, type TableSchema } from '../Schema'\nimport { type RecordId, type SyncStatus } from '../Model'\n\nimport randomId from '../utils/common/randomId'\n\n// Raw object representing a model record, coming from an untrusted source\n// (disk, sync, user data). Before it can be used to create a Model instance\n// it must be sanitized (with `sanitizedRaw`) into a RawRecord\nexport type DirtyRaw = Object\n\n// These fields are ALWAYS present in records of any collection.\ntype _RawRecord = {\n  id: RecordId,\n  _status: SyncStatus,\n  _changed: string,\n}\n\n// Raw object representing a model record. A RawRecord is guaranteed by the type system\n// to be safe to use (sanitied with `sanitizedRaw`):\n// - it has exactly the fields described by TableSchema (+ standard fields)\n// - every field is exactly the type described by ColumnSchema (string, number, or boolean)\n// - … and the same optionality (will not be null unless isOptional: true)\nexport opaque type RawRecord: _RawRecord = _RawRecord\n\n// a number, but not NaN (NaN !== NaN) or Infinity\nfunction isValidNumber(value: any): boolean {\n  return typeof value === 'number' && value === value && value !== Infinity && value !== -Infinity\n}\n\n// Note: This is performance-critical code\nfunction _setRaw(raw: Object, key: string, value: any, columnSchema: ColumnSchema): void {\n  const { type, isOptional } = columnSchema\n\n  // If the value is wrong type or invalid, it's set to `null` (if optional) or empty value ('', 0, false)\n  if (type === 'string') {\n    if (typeof value === 'string') {\n      raw[key] = value\n    } else {\n      raw[key] = isOptional ? null : ''\n    }\n  } else if (type === 'boolean') {\n    if (typeof value === 'boolean') {\n      raw[key] = value\n    } else if (value === 1 || value === 0) {\n      // Exception to the standard rule — because SQLite turns true/false into 1/0\n      raw[key] = Boolean(value)\n    } else {\n      raw[key] = isOptional ? null : false\n    }\n  } else {\n    // type = number\n    // Treat NaN and Infinity as null\n    if (isValidNumber(value)) {\n      raw[key] = value || 0\n    } else {\n      raw[key] = isOptional ? null : 0\n    }\n  }\n}\n\nfunction isValidStatus(value: any): boolean {\n  return value === 'created' || value === 'updated' || value === 'deleted' || value === 'synced'\n}\n\n// Transforms a dirty raw record object into a trusted sanitized RawRecord according to passed TableSchema\n// TODO: Should we make this public API for advanced users?\nexport function sanitizedRaw(dirtyRaw: DirtyRaw, tableSchema: TableSchema): RawRecord {\n  const { id, _status, _changed } = dirtyRaw\n\n  // This is called with `{}` when making a new record, so we need to set a new ID, status\n  // Also: If an existing has one of those fields broken, we're screwed. Safest to treat it as a\n  // new record (so that it gets synced)\n\n  // TODO: Think about whether prototypeless objects are a useful mitigation\n  // const raw = Object.create(null) // create a prototypeless object\n  const raw: $Shape<RawRecord> = {}\n\n  if (typeof id === 'string') {\n    // TODO: Can we trust IDs passed? Maybe we want to split this implementation, depending on whether\n    // this is used on implicitly-trusted (persisted or Watermelon-created) records, or if this is user input?\n    raw.id = id\n    raw._status = isValidStatus(_status) ? _status : 'created'\n    raw._changed = typeof _changed === 'string' ? _changed : ''\n  } else {\n    raw.id = randomId()\n    raw._status = 'created'\n    raw._changed = ''\n  }\n\n  // faster than Object.values on a map\n  const columns = tableSchema.columnArray\n  for (let i = 0, len = columns.length; i < len; i += 1) {\n    const columnSchema = columns[i]\n    const key = (columnSchema.name: string)\n    // TODO: Check performance\n    // $FlowFixMe\n    const value = Object.prototype.hasOwnProperty.call(dirtyRaw, key) ? dirtyRaw[key] : null\n    _setRaw(raw, key, value, columnSchema)\n  }\n\n  return (raw: any)\n}\n\n// Modifies passed rawRecord by setting sanitized `value` to `columnName`\n// Note: Assumes columnName exists and columnSchema matches the name\nexport function setRawSanitized(\n  rawRecord: RawRecord,\n  columnName: ColumnName,\n  value: any,\n  columnSchema: ColumnSchema,\n): void {\n  _setRaw(rawRecord, columnName, value, columnSchema)\n}\n\nexport type NullValue = null | '' | 0 | false\n\nexport function nullValue(columnSchema: ColumnSchema): NullValue {\n  const { isOptional, type } = columnSchema\n  if (isOptional) {\n    return null\n  } else if (type === 'string') {\n    return ''\n  } else if (type === 'number') {\n    return 0\n  } else if (type === 'boolean') {\n    return false\n  }\n\n  throw new Error(`Unknown type for column schema ${JSON.stringify(columnSchema)}`)\n}\n"
  },
  {
    "path": "src/Relation/helpers.d.ts",
    "content": "/* eslint-disable import/no-named-as-default-member */\n/* eslint-disable import/no-named-as-default */\nimport type { Observable } from '../utils/rx'\n\nimport type Relation from './index'\nimport type Model from '../Model'\n\nexport declare function createObservable<T extends Model>(relation: Relation<T>): Observable<T>\n"
  },
  {
    "path": "src/Relation/helpers.js",
    "content": "// @flow\n\nimport {\n  type Observable,\n  of as of$,\n  map as map$,\n  switchMap,\n  distinctUntilChanged,\n} from '../utils/rx'\n\nimport type Relation from './index'\nimport type Model from '../Model'\n\nconst getImmutableObservable = <T: ?Model>(relation: Relation<T>): Observable<T> =>\n  relation._model.collections\n    .get(relation._relationTableName)\n    // $FlowFixMe\n    .findAndObserve(relation.id)\n\nconst getObservable = <T: ?Model>(relation: Relation<T>): Observable<T> =>\n  relation._model\n    .observe()\n    // $FlowFixMe\n    .pipe(\n      map$((model) => model._getRaw(relation._columnName)),\n      distinctUntilChanged(),\n      switchMap((id) =>\n        id\n          ? relation._model.collections.get(relation._relationTableName).findAndObserve(id)\n          : of$(null),\n      ),\n    )\n\n// eslint-disable-next-line\nexport const createObservable = <T: ?Model>(relation: Relation<T>): Observable<T> =>\n  relation._isImmutable ? getImmutableObservable(relation) : getObservable(relation)\n"
  },
  {
    "path": "src/Relation/index.d.ts",
    "content": "import { $NonMaybeType, $Exact, $Call } from '../types'\nimport type { Observable } from '../utils/rx'\n\nimport type Model from '../Model'\nimport type { RecordId } from '../Model'\nimport type { ColumnName, TableName } from '../Schema'\n\ntype ExtractRecordIdNonOptional = <T extends Model = Model>(value: T) => RecordId\ntype ExtractRecordIdOptional = <T extends Model = Model>(value: T) => RecordId\ntype ExtractRecordId = ExtractRecordIdNonOptional & ExtractRecordIdOptional\n\nexport type Options = $Exact<{\n  isImmutable: boolean\n}>\n\n// Defines a one-to-one relation between two Models (two tables in db)\n// Do not create this object directly! Use `relation` or `immutableRelation` decorators instead\nexport default class Relation<T extends Model> {\n  // Used by withObservables to differentiate between object types\n  static _wmelonTag: string\n\n  _model: Model\n\n  _columnName: ColumnName\n\n  _relationTableName: TableName<$NonMaybeType<T>>\n\n  _isImmutable: boolean\n\n  // TODO: FIX TS\n  // @lazy\n  _cachedObservable: Observable<T>\n\n  constructor(\n    model: Model,\n    relationTableName: TableName<$NonMaybeType<T>>,\n    columnName: ColumnName,\n    options: Options,\n  )\n\n  get id(): $Call<ExtractRecordId, T>\n\n  set id(newId: $Call<ExtractRecordId, T>)\n\n  fetch(): Promise<T>\n\n  then<U>(\n    onFulfill?: (value: T) => Promise<U> | U,\n    onReject?: (error: any) => Promise<U> | U,\n  ): Promise<U>\n\n  set(record: T): void\n\n  observe(): Observable<T>\n}\n"
  },
  {
    "path": "src/Relation/index.js",
    "content": "// @flow\n\nimport type { Observable } from '../utils/rx'\nimport invariant from '../utils/common/invariant'\nimport publishReplayLatestWhileConnected from '../utils/rx/publishReplayLatestWhileConnected'\nimport lazy from '../decorators/lazy'\n\nimport type Model, { RecordId } from '../Model'\nimport type { ColumnName, TableName } from '../Schema'\n\nimport { createObservable } from './helpers'\n\ntype ExtractRecordIdNonOptional = <T: Model>(value: T) => RecordId\ntype ExtractRecordIdOptional = <T: Model>(value: ?T) => ?RecordId\ntype ExtractRecordId = ExtractRecordIdNonOptional & ExtractRecordIdOptional\n\nexport type Options = $Exact<{\n  isImmutable: boolean,\n}>\n\n// Defines a one-to-one relation between two Models (two tables in db)\n// Do not create this object directly! Use `relation` or `immutableRelation` decorators instead\nexport default class Relation<T: ?Model> {\n  // Used by withObservables to differentiate between object types\n  static _wmelonTag: string = 'relation'\n\n  _model: Model\n\n  _columnName: ColumnName\n\n  _relationTableName: TableName<$NonMaybeType<T>>\n\n  _isImmutable: boolean\n\n  @lazy\n  _cachedObservable: Observable<T> = createObservable(this)\n    .pipe(publishReplayLatestWhileConnected)\n    .refCount()\n\n  constructor(\n    model: Model,\n    relationTableName: TableName<$NonMaybeType<T>>,\n    columnName: ColumnName,\n    options: Options,\n  ): void {\n    this._model = model\n    this._relationTableName = relationTableName\n    this._columnName = columnName\n    this._isImmutable = options.isImmutable\n  }\n\n  get id(): $Call<ExtractRecordId, T> {\n    return (this._model._getRaw(this._columnName): any)\n  }\n\n  set id(newId: $Call<ExtractRecordId, T>): void {\n    if (this._isImmutable) {\n      invariant(\n        this._model._preparedState === 'create',\n        `Cannot change property marked as @immutableRelation ${\n          Object.getPrototypeOf(this._model).constructor.name\n        } - ${this._columnName}`,\n      )\n    }\n\n    this._model._setRaw(this._columnName, newId || null)\n  }\n\n  fetch(): Promise<T> {\n    const { id } = this\n    if (id) {\n      return this._model.collections.get(this._relationTableName).find(id)\n    }\n\n    return Promise.resolve((null: any))\n  }\n\n  then<U>(\n    onFulfill?: (value: T) => Promise<U> | U,\n    onReject?: (error: any) => Promise<U> | U,\n  ): Promise<U> {\n    // $FlowFixMe\n    return this.fetch().then(onFulfill, onReject)\n  }\n\n  set(record: T): void {\n    this.id = record?.id\n  }\n\n  observe(): Observable<T> {\n    return this._cachedObservable\n  }\n}\n"
  },
  {
    "path": "src/Relation/test.js",
    "content": "import { MockTask, MockProject, mockDatabase } from '../__tests__/testModels'\n\nimport Relation from './index'\n\ndescribe('Relation', () => {\n  it('gets id', () => {\n    const { tasks } = mockDatabase()\n    const primary = new MockTask(tasks, { project_id: 's1' })\n\n    const relation = new Relation(primary, 'mock_projects', 'project_id', { isImmutable: false })\n    expect(relation.id).toBe('s1')\n\n    primary._isEditing = true\n    primary.projectId = 's2'\n    expect(relation.id).toBe('s2')\n  })\n  it('sets id', () => {\n    const { tasks, projects } = mockDatabase()\n\n    const primary = new MockTask(tasks, { project_id: null })\n    const secondary = new MockProject(projects, {\n      id: 's1',\n    })\n\n    const relation = new Relation(primary, 'mock_projects', 'project_id', { isImmutable: false })\n\n    expect(relation.id).toBe(null)\n    primary._isEditing = true\n    relation.id = secondary.id\n    expect(relation.id).toBe('s1')\n    expect(primary.projectId).toBe('s1')\n  })\n  it('sets record', () => {\n    const { tasks, projects } = mockDatabase()\n    const primary = new MockTask(tasks, {})\n    const secondary = new MockProject(projects, { id: 's1' })\n\n    const relation = new Relation(primary, 'mock_projects', 'project_id', { isImmutable: false })\n    primary._isEditing = true\n    relation.set(secondary)\n\n    expect(relation.id).toBe('s1')\n  })\n  it('allows setting id/record only on create/prepareCreate when immutable', async () => {\n    const { tasks, comments, db } = mockDatabase()\n\n    const secondary = await db.write(() =>\n      tasks.create((mock) => {\n        mock.name = 'foo'\n      }),\n    )\n    const primary = await db.write(() =>\n      comments.create((mock) => {\n        mock.task.id = secondary.id\n      }),\n    )\n\n    expect(primary.task.id).toBe(secondary.id)\n\n    expect(() =>\n      primary.prepareUpdate((mock) => {\n        mock.task.id = 'foo'\n      }),\n    ).toThrow()\n\n    const secondary2 = await db.write(() =>\n      comments.create((mock) => {\n        mock.name = 'bar'\n      }),\n    )\n\n    const primary2 = comments.prepareCreate((mock) => {\n      mock.task.id = secondary.id\n      expect(mock.task.id).toBe(secondary.id)\n      mock.task.set(secondary2)\n      expect(mock.task.id).toBe(secondary2.id)\n    })\n\n    expect(primary2.task.id).toBe(secondary2.id)\n  })\n  it('observers related record', async () => {\n    const { tasks, projects, db } = mockDatabase()\n\n    const secondary = await db.write(() =>\n      projects.create((mock) => {\n        mock.name = 'foo'\n      }),\n    )\n    const primary = await db.write(() =>\n      tasks.create((mock) => {\n        mock.projectId = secondary.id\n      }),\n    )\n\n    const relation = new Relation(primary, 'mock_projects', 'project_id', { isImmutable: false })\n\n    const observer = jest.fn()\n    const subscription = relation.observe().subscribe(observer)\n\n    await new Promise(process.nextTick) // give time to propagate\n\n    expect(observer).toHaveBeenCalledWith(secondary)\n\n    await db.write(() =>\n      secondary.update((mock) => {\n        mock.name = 'bar'\n      }),\n    )\n\n    expect(observer).toHaveBeenCalledTimes(2)\n    subscription.unsubscribe()\n  })\n  it('fetches current record', async () => {\n    const { tasks, projects, db } = mockDatabase()\n\n    const secondary = await db.write(() =>\n      projects.create((mock) => {\n        mock.name = 'foo'\n      }),\n    )\n    const primary = await db.write(() =>\n      tasks.create((mock) => {\n        mock.projectId = secondary.id\n      }),\n    )\n\n    const relation = new Relation(primary, 'mock_projects', 'project_id', { isImmutable: false })\n\n    let currentRecord = await relation.fetch()\n    expect(currentRecord).toBe(secondary)\n\n    const newSecondary = await db.write(() =>\n      projects.create((mock) => {\n        mock.name = 'bar'\n      }),\n    )\n\n    db.write(() =>\n      primary.update((mock) => {\n        mock.projectId = newSecondary.id\n      }),\n    )\n\n    currentRecord = await relation.fetch()\n    expect(currentRecord).toBe(newSecondary)\n\n    // test thenable syntax\n    expect(await relation).toBe(currentRecord)\n    expect(await relation.then((model) => [model])).toEqual([currentRecord])\n  })\n  it('caches observable', () => {\n    const { tasks } = mockDatabase()\n    const model = new MockTask(tasks, {})\n    const relation = new Relation(model, 't1', 'c1', { isImmutable: false })\n\n    const observable1 = relation.observe()\n    const observable2 = relation.observe()\n\n    expect(observable1).toBe(observable2)\n  })\n  it(`has wmelon tag`, () => {\n    const { tasks } = mockDatabase()\n    const model = new MockTask(tasks, {})\n    const relation = new Relation(model, 't1', 'c1', { isImmutable: false })\n    expect(relation.constructor._wmelonTag).toBe('relation')\n  })\n})\n"
  },
  {
    "path": "src/Schema/index.d.ts",
    "content": "// NOTE: Only require files needed (critical path on web)\nimport type { $Exact, $RE } from '../types'\n\n// eslint-disable-next-line import/no-named-as-default, import/no-named-as-default-member\nimport type Model from '../Model'\n\nexport type TableName<T extends Model> = string\nexport type ColumnName = string\n\nexport type ColumnType = 'string' | 'number' | 'boolean'\nexport type ColumnSchema = $RE<{\n  name: ColumnName\n  type: ColumnType\n  isOptional?: boolean\n  isIndexed?: boolean\n}>\n\nexport type ColumnMap = { [name: ColumnName]: ColumnSchema }\n\nexport type TableSchemaSpec = $Exact<{\n  name: TableName<any>\n  columns: ColumnSchema[]\n  unsafeSql?: (_: string) => string\n}>\n\nexport type TableSchema = $RE<{\n  name: TableName<any>\n  // depending on operation, it's faster to use map or array\n  columns: ColumnMap\n  columnArray: ColumnSchema[]\n  unsafeSql?: (_: string) => string\n}>\n\ntype TableMap = { [name: TableName<any>]: TableSchema }\n\nexport type SchemaVersion = number\n\nexport type AppSchemaUnsafeSqlKind = 'setup' | 'create_indices' | 'drop_indices'\n\nexport type AppSchemaSpec = $Exact<{\n  version: number\n  tables: TableSchema[]\n  unsafeSql?: (_: string, __: AppSchemaUnsafeSqlKind) => string\n}>\n\nexport type AppSchema = $RE<{\n  version: SchemaVersion\n  tables: TableMap\n  unsafeSql?: (_: string, __: AppSchemaUnsafeSqlKind) => string\n}>\n\nexport function tableName<T extends Model>(name: string): TableName<T>\n\nexport function columnName(name: string): ColumnName\n\nexport function appSchema({ version, tables: tableList, unsafeSql }: AppSchemaSpec): AppSchema\n\nexport function validateColumnSchema(column: ColumnSchema): void\n\nexport function tableSchema({ name, columns: columnArray, unsafeSql }: TableSchemaSpec): TableSchema\n"
  },
  {
    "path": "src/Schema/index.js",
    "content": "// @flow\n\n// NOTE: Only require files needed (critical path on web)\nimport invariant from '../utils/common/invariant'\nimport type { $RE } from '../types'\n\nimport type Model from '../Model'\n\n/**\n * String that signifies a database table name (mapping to WatermelonDB Models)\n */\nexport opaque type TableName<+T: Model>: string = string\n\n/**\n * String that signifies a database column name (mapping to WatermelonDB fields)\n */\nexport opaque type ColumnName: string = string\n\n/**\n * Type of a column\n */\nexport type ColumnType = 'string' | 'number' | 'boolean'\n\n/**\n * Definition of a table column\n */\nexport type ColumnSchema = $RE<{\n  name: ColumnName,\n  type: ColumnType,\n  isOptional?: boolean,\n  isIndexed?: boolean,\n}>\n\nexport type ColumnMap = { [name: ColumnName]: ColumnSchema }\n\nexport type TableSchemaSpec = $Exact<{\n  name: TableName<any>,\n  columns: ColumnSchema[],\n  unsafeSql?: (string) => string,\n}>\n\nexport type TableSchema = $RE<{\n  name: TableName<any>,\n  // depending on operation, it's faster to use map or array\n  columns: ColumnMap,\n  columnArray: ColumnSchema[],\n  unsafeSql?: (string) => string,\n}>\n\ntype TableMap = { [name: TableName<any>]: TableSchema }\n\nexport type SchemaVersion = number\n\nexport type AppSchemaUnsafeSqlKind = 'setup' | 'create_indices' | 'drop_indices'\n\nexport type AppSchemaSpec = $Exact<{\n  version: number,\n  tables: TableSchema[],\n  unsafeSql?: (string, AppSchemaUnsafeSqlKind) => string,\n}>\n\nexport type AppSchema = $RE<{\n  version: SchemaVersion,\n  tables: TableMap,\n  unsafeSql?: (string, AppSchemaUnsafeSqlKind) => string,\n}>\n\n/**\n * Creates a typed TableName\n */\nexport function tableName<T: Model>(name: string): TableName<T> {\n  return name\n}\n\n/**\n * Creates a typed ColumnName\n */\nexport function columnName(name: string): ColumnName {\n  return name\n}\n\n/**\n * Creates a database schema object. Pass table definitions created using {@see tableSchema}\n */\nexport function appSchema({ version, tables: tableList, unsafeSql }: AppSchemaSpec): AppSchema {\n  if (process.env.NODE_ENV !== 'production') {\n    invariant(version > 0, `Schema version must be greater than 0`)\n  }\n  const tables: TableMap = tableList.reduce<{ [TableName<any>]: TableSchema }>((map, table) => {\n    if (process.env.NODE_ENV !== 'production') {\n      invariant(typeof table === 'object' && table.name, `Table schema must contain a name`)\n    }\n\n    map[table.name] = table\n    return map\n  }, {})\n\n  return { version, tables, unsafeSql }\n}\n\nconst validateName = (name: string) => {\n  if (process.env.NODE_ENV !== 'production') {\n    invariant(\n      !['id', '_changed', '_status', 'local_storage'].includes(name.toLowerCase()),\n      `Invalid column or table name '${name}' - reserved by WatermelonDB`,\n    )\n    const checkName = require('../utils/fp/checkName').default\n    checkName(name)\n  }\n}\n\nexport function validateColumnSchema(column: ColumnSchema): void {\n  if (process.env.NODE_ENV !== 'production') {\n    invariant(column.name, `Missing column name`)\n    validateName(column.name)\n    invariant(\n      ['string', 'boolean', 'number'].includes(column.type),\n      `Invalid type ${column.type} for column '${column.name}' (valid: string, boolean, number)`,\n    )\n    if (column.name === 'created_at' || column.name === 'updated_at') {\n      invariant(\n        column.type === 'number' && !column.isOptional,\n        `${column.name} must be of type number and not optional`,\n      )\n    }\n    if (column.name === 'last_modified') {\n      invariant(\n        column.type === 'number',\n        `For compatibility reasons, column last_modified must be of type 'number', and should be optional`,\n      )\n    }\n  }\n}\n\n/**\n * Creates a typed TableSchema\n */\nexport function tableSchema({\n  name,\n  columns: columnArray,\n  unsafeSql,\n}: TableSchemaSpec): TableSchema {\n  if (process.env.NODE_ENV !== 'production') {\n    invariant(name, `Missing table name in schema`)\n    validateName(name)\n  }\n\n  const columns: ColumnMap = columnArray.reduce<{ [ColumnName]: ColumnSchema }>((map, column) => {\n    if (process.env.NODE_ENV !== 'production') {\n      validateColumnSchema(column)\n    }\n    map[column.name] = column\n    return map\n  }, {})\n\n  return { name, columns, columnArray, unsafeSql }\n}\n"
  },
  {
    "path": "src/Schema/migrations/getSyncChanges/index.d.ts",
    "content": "// @flow\n\nimport type { SchemaMigrations } from '../index'\nimport type { TableName, ColumnName, SchemaVersion } from '../../index'\n\nimport { $Exact } from '../../../types'\n\nexport type MigrationSyncChanges = $Exact<{\n  from: SchemaVersion\n  tables: TableName<any>[]\n  columns: $Exact<{\n    table: TableName<any>\n    columns: ColumnName[]\n  }>[]\n}> | null\n\nexport default function getSyncChanges(\n  migrations: SchemaMigrations,\n  fromVersion: SchemaVersion,\n  toVersion: SchemaVersion,\n): MigrationSyncChanges\n"
  },
  {
    "path": "src/Schema/migrations/getSyncChanges/index.js",
    "content": "// @flow\n\nimport { unique, groupBy, toPairs, pipe, unnest } from '../../../utils/fp'\nimport type { CreateTableMigrationStep, AddColumnsMigrationStep, SchemaMigrations } from '../index'\nimport type { TableName, ColumnName, SchemaVersion } from '../../index'\nimport { tableName } from '../../index'\nimport { stepsForMigration } from '../stepsForMigration'\n\nimport { invariant } from '../../../utils/common'\n\nexport type MigrationSyncChanges = $Exact<{\n  +from: SchemaVersion,\n  +tables: TableName<any>[],\n  +columns: $Exact<{\n    table: TableName<any>,\n    columns: ColumnName[],\n  }>[],\n}> | null\n\nexport default function getSyncChanges(\n  migrations: SchemaMigrations,\n  fromVersion: SchemaVersion,\n  toVersion: SchemaVersion,\n): MigrationSyncChanges {\n  const steps = stepsForMigration({ migrations, fromVersion, toVersion })\n  invariant(steps, 'Necessary range of migrations for sync is not available')\n  invariant(\n    toVersion === migrations.maxVersion,\n    'getSyncChanges toVersion should be equal to maxVersion of migrations',\n  )\n  if (fromVersion === toVersion) {\n    return null\n  }\n\n  steps.forEach((step) => {\n    invariant(\n      ['create_table', 'add_columns', 'sql'].includes(step.type),\n      `Unknown migration step type ${step.type}. Can not perform migration sync. This most likely means your migrations are defined incorrectly. It could also be a WatermelonDB bug.`,\n    )\n  })\n\n  // $FlowFixMe\n  const createTableSteps: CreateTableMigrationStep[] = steps.filter(\n    (step) => step.type === 'create_table',\n  )\n  const createdTables = createTableSteps.map((step) => step.schema.name)\n\n  // $FlowFixMe\n  const addColumnSteps: AddColumnsMigrationStep[] = steps.filter(\n    (step) => step.type === 'add_columns',\n  )\n  const allAddedColumns = addColumnSteps\n    .filter((step) => !createdTables.includes(step.table))\n    .map(({ table, columns }) => columns.map(({ name }) => ({ table, name })))\n\n  const columnsByTable = pipe(\n    unnest,\n    groupBy(({ table }) => table),\n    toPairs,\n  )(allAddedColumns)\n  const addedColumns = columnsByTable.map(([table, columnDefs]) => ({\n    table: tableName(table),\n    columns: unique(columnDefs.map(({ name }) => name)),\n  }))\n\n  return {\n    from: fromVersion,\n    tables: unique(createdTables),\n    columns: addedColumns,\n  }\n}\n"
  },
  {
    "path": "src/Schema/migrations/getSyncChanges/test.js",
    "content": "import getSyncChanges from './index'\nimport { schemaMigrations, createTable, addColumns, unsafeExecuteSql } from '../index'\n\nconst createCommentsTable = createTable({\n  name: 'comments',\n  columns: [\n    { name: 'post_id', type: 'string', isIndexed: true },\n    { name: 'body', type: 'string' },\n  ],\n})\n\nconst test = (migrations, from, to) => getSyncChanges(schemaMigrations({ migrations }), from, to)\nconst testSteps = (steps) =>\n  getSyncChanges(schemaMigrations({ migrations: [{ toVersion: 2, steps }] }), 1, 2)\n\ndescribe('getSyncChanges', () => {\n  it('returns null for from==to', () => {\n    expect(test([{ toVersion: 2, steps: [createCommentsTable] }], 2, 2)).toEqual(null)\n  })\n  it('returns empty changes for empty steps', () => {\n    expect(testSteps([])).toEqual({ from: 1, tables: [], columns: [] })\n  })\n  it('returns created tables', () => {\n    expect(testSteps([createCommentsTable])).toEqual({ from: 1, tables: ['comments'], columns: [] })\n  })\n  it('returns added columns', () => {\n    expect(\n      testSteps([\n        addColumns({\n          table: 'posts',\n          columns: [\n            { name: 'subtitle', type: 'string', isOptional: true },\n            { name: 'is_pinned', type: 'boolean' },\n          ],\n        }),\n      ]),\n    ).toEqual({\n      from: 1,\n      tables: [],\n      columns: [{ table: 'posts', columns: ['subtitle', 'is_pinned'] }],\n    })\n  })\n  it('combines added columns from multiple migration steps', () => {\n    expect(\n      testSteps([\n        addColumns({\n          table: 'posts',\n          columns: [{ name: 'subtitle', type: 'string', isOptional: true }],\n        }),\n        addColumns({\n          table: 'posts',\n          columns: [{ name: 'is_pinned', type: 'boolean' }],\n        }),\n        addColumns({\n          table: 'posts',\n          columns: [{ name: 'author_id', type: 'string', isIndexed: true }],\n        }),\n      ]),\n    ).toEqual({\n      from: 1,\n      tables: [],\n      columns: [{ table: 'posts', columns: ['subtitle', 'is_pinned', 'author_id'] }],\n    })\n  })\n  it('skips added columns for a table if it is also added', () => {\n    expect(\n      testSteps([\n        createCommentsTable,\n        addColumns({\n          table: 'comments',\n          columns: [{ name: 'reactions', type: 'string', isOptional: true }],\n        }),\n      ]),\n    ).toEqual({\n      from: 1,\n      tables: ['comments'],\n      columns: [],\n    })\n  })\n  it('skips duplicates', () => {\n    // technically, a duplicate createTable or addColumn would crash\n    // but this is in case future migration types could do something like it\n    expect(\n      testSteps([\n        createCommentsTable,\n        createCommentsTable,\n        addColumns({\n          table: 'posts',\n          columns: [{ name: 'subtitle', type: 'string', isOptional: true }],\n        }),\n        addColumns({\n          table: 'posts',\n          columns: [{ name: 'subtitle', type: 'string', isOptional: true }],\n        }),\n      ]),\n    ).toEqual({\n      from: 1,\n      tables: ['comments'],\n      columns: [{ table: 'posts', columns: ['subtitle'] }],\n    })\n  })\n  const bigMigrations = [\n    {\n      toVersion: 10,\n      steps: [\n        // No changes\n      ],\n    },\n    {\n      toVersion: 9,\n      steps: [\n        addColumns({\n          table: 'attachment_versions',\n          columns: [{ name: 'reactions', type: 'string' }],\n        }),\n      ],\n    },\n    {\n      toVersion: 8,\n      steps: [\n        addColumns({\n          table: 'workspaces',\n          columns: [\n            { name: 'plan_info', type: 'string', isOptional: true },\n            { name: 'limits', type: 'string' },\n          ],\n        }),\n      ],\n    },\n    {\n      toVersion: 7,\n      steps: [\n        createTable({\n          name: 'attachments',\n          columns: [{ name: 'parent_id', type: 'string', isIndexed: true }],\n        }),\n      ],\n    },\n    {\n      toVersion: 6,\n      steps: [\n        createTable({\n          name: 'attachment_versions',\n          columns: [\n            { name: 'name', type: 'string' },\n            { name: 'size', type: 'number' },\n            { name: 'status', type: 'string', isIndexed: true },\n            { name: 'mime_type', type: 'string' },\n            { name: 'attachment_id', type: 'string', isIndexed: true },\n            { name: 'author_id', type: 'string' },\n            { name: 'created_at', type: 'number' },\n          ],\n          unsafeSql: (sql) => sql,\n        }),\n        unsafeExecuteSql(';'),\n      ],\n    },\n    {\n      toVersion: 5,\n      steps: [\n        addColumns({\n          table: 'comments',\n          columns: [\n            { name: 'is_pinned', type: 'boolean' },\n            { name: 'extra', type: 'string' },\n          ],\n        }),\n        addColumns({ table: 'projects', columns: [{ name: 'extra', type: 'string' }] }),\n      ],\n    },\n    { toVersion: 4, steps: [] },\n    {\n      toVersion: 3,\n      steps: [\n        addColumns({\n          table: 'task_recurrences',\n          columns: [{ name: 'project_id', type: 'string' }],\n        }),\n      ],\n    },\n    {\n      toVersion: 2,\n      steps: [\n        addColumns({\n          table: 'projects',\n          columns: [{ name: 'preferences', type: 'string', isOptional: true }],\n        }),\n      ],\n    },\n  ]\n  it('can handle a complex migration steps list', () => {\n    expect(test(bigMigrations, 1, 10)).toEqual({\n      from: 1,\n      tables: ['attachment_versions', 'attachments'],\n      columns: [\n        { table: 'projects', columns: ['preferences', 'extra'] },\n        { table: 'task_recurrences', columns: ['project_id'] },\n        { table: 'comments', columns: ['is_pinned', 'extra'] },\n        { table: 'workspaces', columns: ['plan_info', 'limits'] },\n      ],\n    })\n  })\n  it(`returns only the necessary range of migrations`, () => {\n    expect(test(bigMigrations, 6, 10)).toEqual({\n      from: 6,\n      tables: ['attachments'],\n      columns: [\n        { table: 'workspaces', columns: ['plan_info', 'limits'] },\n        { table: 'attachment_versions', columns: ['reactions'] },\n      ],\n    })\n    expect(test(bigMigrations, 8, 10)).toEqual({\n      from: 8,\n      tables: [],\n      columns: [{ table: 'attachment_versions', columns: ['reactions'] }],\n    })\n    expect(test(bigMigrations, 9, 10)).toEqual({ from: 9, tables: [], columns: [] })\n    expect(test(bigMigrations, 10, 10)).toEqual(null)\n  })\n  it(`fails on incorrect migrations`, () => {\n    expect(() => test(bigMigrations, 0, 9)).toThrow()\n    expect(() => test(bigMigrations, 8, 11)).toThrow()\n  })\n  it('fails early on unknown migration steps', () => {\n    const possibleFutureTypes = [\n      'broken',\n      'rename_table',\n      'rename_column',\n      'add_column_index',\n      'make_column_optional',\n      'make_column_required',\n      'destroy_table',\n      'destroy_column',\n    ]\n    possibleFutureTypes.forEach((type) => {\n      expect(() => testSteps([{ type }])).toThrow('Unknown migration step type')\n    })\n    expect(() => testSteps([{ type: undefined }])).toThrow('Invalid migration steps')\n  })\n})\n"
  },
  {
    "path": "src/Schema/migrations/index.d.ts",
    "content": "import type { $RE, $Exact } from '../../types'\nimport type { ColumnSchema, TableName, TableSchema, TableSchemaSpec, SchemaVersion } from '../index'\n\nexport type CreateTableMigrationStep = $RE<{\n  type: 'create_table'\n  schema: TableSchema\n}>\n\nexport type AddColumnsMigrationStep = $RE<{\n  type: 'add_columns'\n  table: TableName<any>\n  columns: ColumnSchema[]\n  unsafeSql?: (_: string) => string\n}>\n\nexport type SqlMigrationStep = $RE<{\n  type: 'sql'\n  sql: string\n}>\n\nexport type MigrationStep = CreateTableMigrationStep | AddColumnsMigrationStep | SqlMigrationStep\n\ntype Migration = $RE<{\n  toVersion: SchemaVersion\n  steps: MigrationStep[]\n}>\n\ntype SchemaMigrationsSpec = $RE<{\n  migrations: Migration[]\n}>\n\nexport type SchemaMigrations = $RE<{\n  validated: true\n  minVersion: SchemaVersion\n  maxVersion: SchemaVersion\n  sortedMigrations: Migration[]\n}>\n\nexport function schemaMigrations(migrationSpec: SchemaMigrationsSpec): SchemaMigrations\n\nexport function createTable(tableSchemaSpec: TableSchemaSpec): CreateTableMigrationStep\n\nexport function addColumns({\n  table,\n  columns,\n  unsafeSql,\n}: $Exact<{\n  table: TableName<any>\n  columns: ColumnSchema[]\n  unsafeSql?: (_: string) => string\n}>): AddColumnsMigrationStep\n\nexport function unsafeExecuteSql(sql: string): SqlMigrationStep\n"
  },
  {
    "path": "src/Schema/migrations/index.js",
    "content": "// @flow\n\n// NOTE: Only require files needed (critical path on web)\nimport sortBy from '../../utils/fp/sortBy'\nimport invariant from '../../utils/common/invariant'\nimport isObj from '../../utils/fp/isObj'\n\nimport type { $RE } from '../../types'\nimport type { ColumnSchema, TableName, TableSchema, TableSchemaSpec, SchemaVersion } from '../index'\nimport { tableSchema, validateColumnSchema } from '../index'\n\nexport type CreateTableMigrationStep = $RE<{\n  type: 'create_table',\n  schema: TableSchema,\n}>\n\nexport type AddColumnsMigrationStep = $RE<{\n  type: 'add_columns',\n  table: TableName<any>,\n  columns: ColumnSchema[],\n  unsafeSql?: (string) => string,\n}>\n\nexport type SqlMigrationStep = $RE<{\n  type: 'sql',\n  sql: string,\n}>\n\nexport type MigrationStep = CreateTableMigrationStep | AddColumnsMigrationStep | SqlMigrationStep\n\ntype Migration = $RE<{\n  toVersion: SchemaVersion,\n  steps: MigrationStep[],\n}>\n\ntype SchemaMigrationsSpec = $RE<{\n  migrations: Migration[],\n}>\n\nexport type SchemaMigrations = $RE<{\n  validated: true,\n  minVersion: SchemaVersion,\n  maxVersion: SchemaVersion,\n  sortedMigrations: Migration[],\n}>\n\n// Creates a specification of how to migrate between different versions of\n// database schema. Every time you change the database schema, you must\n// create a corresponding migration.\n//\n// See docs for more details\n//\n// Example:\n//\n// schemaMigrations({\n//   migrations: [\n//     {\n//       toVersion: 3,\n//       steps: [\n//         createTable({\n//           name: 'comments',\n//           columns: [\n//             { name: 'post_id', type: 'string', isIndexed: true },\n//             { name: 'body', type: 'string' },\n//           ],\n//         }),\n//         addColumns({\n//           table: 'posts',\n//           columns: [\n//             { name: 'subtitle', type: 'string', isOptional: true },\n//             { name: 'is_pinned', type: 'boolean' },\n//           ],\n//         }),\n//       ],\n//     },\n//     {\n//       toVersion: 2,\n//       steps: [\n//         // ...\n//       ],\n//     },\n//   ],\n// })\n\nexport function schemaMigrations(migrationSpec: SchemaMigrationsSpec): SchemaMigrations {\n  const { migrations } = migrationSpec\n\n  if (process.env.NODE_ENV !== 'production') {\n    // validate migrations spec object\n    invariant(Array.isArray(migrations), 'Missing migrations array')\n\n    // validate migrations format\n    migrations.forEach((migration) => {\n      invariant(isObj(migration), `Invalid migration (not an object) in schema migrations`)\n      const { toVersion, steps } = migration\n      invariant(typeof toVersion === 'number', 'Invalid migration - `toVersion` must be a number')\n      invariant(\n        toVersion >= 2,\n        `Invalid migration to version ${toVersion}. Minimum possible migration version is 2`,\n      )\n      invariant(\n        Array.isArray(steps) && steps.every((step) => typeof step.type === 'string'),\n        `Invalid migration steps for migration to version ${toVersion}. 'steps' should be an array of migration step calls`,\n      )\n    })\n  }\n\n  // TODO: Force order of migrations?\n  const sortedMigrations = sortBy((migration) => migration.toVersion, migrations)\n  const oldestMigration = sortedMigrations[0]\n  const newestMigration = sortedMigrations[sortedMigrations.length - 1]\n  const minVersion = oldestMigration ? oldestMigration.toVersion - 1 : 1\n  const maxVersion = newestMigration?.toVersion || 1\n\n  if (process.env.NODE_ENV !== 'production') {\n    // validate that migration spec is without gaps and duplicates\n    sortedMigrations.reduce((maxCoveredVersion, migration) => {\n      const { toVersion } = migration\n      if (maxCoveredVersion) {\n        invariant(\n          toVersion === maxCoveredVersion + 1,\n          `Invalid migrations! Migrations listed cover range from version ${minVersion} to ${maxCoveredVersion}, but migration ${JSON.stringify(\n            migration,\n          )} is to version ${toVersion}. Migrations must be listed without gaps, or duplicates.`,\n        )\n      }\n      return toVersion\n    }, null)\n  }\n\n  return {\n    sortedMigrations,\n    minVersion,\n    maxVersion,\n    validated: true,\n  }\n}\n\nexport function createTable(tableSchemaSpec: TableSchemaSpec): CreateTableMigrationStep {\n  const schema = tableSchema(tableSchemaSpec)\n  return { type: 'create_table', schema }\n}\n\nexport function addColumns({\n  table,\n  columns,\n  unsafeSql,\n}: $Exact<{\n  table: TableName<any>,\n  columns: ColumnSchema[],\n  unsafeSql?: (string) => string,\n}>): AddColumnsMigrationStep {\n  if (process.env.NODE_ENV !== 'production') {\n    invariant(table, `Missing table name in addColumn()`)\n    invariant(columns && Array.isArray(columns), `Missing 'columns' or not an array in addColumn()`)\n    columns.forEach((column) => validateColumnSchema(column))\n  }\n\n  return { type: 'add_columns', table, columns, unsafeSql }\n}\n\nexport function unsafeExecuteSql(sql: string): SqlMigrationStep {\n  if (process.env.NODE_ENV !== 'production') {\n    invariant(typeof sql === 'string', `SQL passed to unsafeExecuteSql is not a string`)\n    invariant(\n      sql.trimEnd().endsWith(';'),\n      `SQL passed to unsafeExecuteSql must end with a semicolon (it would work when executed individually but break if multiple migration steps are executed)`,\n    )\n  }\n  return { type: 'sql', sql }\n}\n\n/*\n\nTODO: Those types of migrations are currently not implemented. If you need them, feel free to contribute!\n\n// table operations\ndestroyTable('table_name')\nrenameTable({ from: 'old_table_name', to: 'new_table_name' })\n\n// column operations\nrenameColumn({ table: 'table_name', from: 'old_column_name', to: 'new_column_name' })\ndestroyColumn({ table: 'table_name', column: 'column_name' })\n\n// indexing\naddColumnIndex({ table: 'table_name', column: 'column_name' })\nremoveColumnIndex({ table: 'table_name', column: 'column_name' })\n\n// optionality\nmakeColumnOptional({ table: 'table_name', column: 'column_name' }) // allows nulls now\nmakeColumnRequired({ table: 'table_name', column: 'column_name' }) // nulls are changed to null value ('', 0, false)\n\n*/\n"
  },
  {
    "path": "src/Schema/migrations/stepsForMigration.d.ts",
    "content": "import { $Exact } from '../../types'\n\nimport type { SchemaMigrations, MigrationStep } from './index'\nimport type { SchemaVersion } from '../index'\n\nexport function stepsForMigration({\n  migrations: schemaMigrations,\n  fromVersion,\n  toVersion,\n}: $Exact<{\n  migrations: SchemaMigrations\n  fromVersion: SchemaVersion\n  toVersion: SchemaVersion\n}>): MigrationStep[] | null\n"
  },
  {
    "path": "src/Schema/migrations/stepsForMigration.js",
    "content": "// @flow\n\nimport { unnest } from '../../utils/fp'\n\nimport { type SchemaMigrations, type MigrationStep } from './index'\nimport { type SchemaVersion } from '../index'\n\nexport function stepsForMigration({\n  migrations: schemaMigrations,\n  fromVersion,\n  toVersion,\n}: $Exact<{\n  migrations: SchemaMigrations,\n  fromVersion: SchemaVersion,\n  toVersion: SchemaVersion,\n}>): ?(MigrationStep[]) {\n  const { sortedMigrations, minVersion, maxVersion } = schemaMigrations\n\n  // see if migrations in this range are available\n  if (fromVersion < minVersion || toVersion > maxVersion) {\n    return null\n  }\n\n  // return steps\n  const matchingMigrations = sortedMigrations.filter(\n    ({ toVersion: version }) => version > fromVersion && version <= toVersion,\n  )\n\n  const allSteps = unnest(matchingMigrations.map((migration) => migration.steps))\n  return allSteps\n}\n"
  },
  {
    "path": "src/Schema/migrations/test.js",
    "content": "import { createTable, addColumns, unsafeExecuteSql, schemaMigrations } from './index'\nimport { stepsForMigration } from './stepsForMigration'\n\ndescribe('schemaMigrations()', () => {\n  it('returns a basic schema migrations spec', () => {\n    const migrations = schemaMigrations({ migrations: [] })\n    expect(migrations).toEqual({\n      sortedMigrations: [],\n      validated: true,\n      minVersion: 1,\n      maxVersion: 1,\n    })\n\n    const migrations2 = schemaMigrations({ migrations: [{ toVersion: 2, steps: [] }] })\n    expect(migrations2).toEqual({\n      validated: true,\n      minVersion: 1,\n      maxVersion: 2,\n      sortedMigrations: [{ toVersion: 2, steps: [] }],\n    })\n\n    const migrations3 = schemaMigrations({ migrations: [{ toVersion: 4, steps: [] }] })\n    expect(migrations3).toEqual({\n      validated: true,\n      minVersion: 3,\n      maxVersion: 4,\n      sortedMigrations: [{ toVersion: 4, steps: [] }],\n    })\n  })\n  it('returns a complex schema migrations spec', () => {\n    const migrations = schemaMigrations({\n      migrations: [\n        { toVersion: 4, steps: [] },\n        {\n          toVersion: 3,\n          steps: [\n            createTable({\n              name: 'comments',\n              columns: [\n                { name: 'post_id', type: 'string', isIndexed: true },\n                { name: 'body', type: 'string' },\n              ],\n            }),\n            addColumns({\n              table: 'posts',\n              columns: [{ name: 'author_id', type: 'string', isIndexed: true }],\n            }),\n          ],\n        },\n        {\n          toVersion: 2,\n          steps: [\n            addColumns({\n              table: 'posts',\n              columns: [\n                { name: 'subtitle', type: 'string', isOptional: true },\n                { name: 'is_pinned', type: 'boolean' },\n              ],\n            }),\n          ],\n        },\n      ],\n    })\n    expect(migrations).toEqual({\n      validated: true,\n      minVersion: 1,\n      maxVersion: 4,\n      sortedMigrations: [\n        {\n          toVersion: 2,\n          steps: [\n            {\n              type: 'add_columns',\n              table: 'posts',\n              columns: [\n                { name: 'subtitle', type: 'string', isOptional: true },\n                { name: 'is_pinned', type: 'boolean' },\n              ],\n            },\n          ],\n        },\n        {\n          toVersion: 3,\n          steps: [\n            {\n              type: 'create_table',\n              schema: {\n                name: 'comments',\n                columns: {\n                  post_id: { name: 'post_id', type: 'string', isIndexed: true },\n                  body: { name: 'body', type: 'string' },\n                },\n                columnArray: [\n                  { name: 'post_id', type: 'string', isIndexed: true },\n                  { name: 'body', type: 'string' },\n                ],\n              },\n            },\n            {\n              type: 'add_columns',\n              table: 'posts',\n              columns: [{ name: 'author_id', type: 'string', isIndexed: true }],\n            },\n          ],\n        },\n        { toVersion: 4, steps: [] },\n      ],\n    })\n  })\n  it('throws if migration spec is malformed', () => {\n    expect(() => schemaMigrations({ migrations: [{}] })).toThrow('Invalid migration')\n    expect(() => schemaMigrations({ migrations: [{ toVersion: 0, steps: [] }] })).toThrow(\n      /minimum.*is 2/i,\n    )\n    expect(() => schemaMigrations({ migrations: [{ toVersion: 1, steps: [] }] })).toThrow(\n      /minimum.*is 2/i,\n    )\n    expect(() =>\n      schemaMigrations({\n        migrations: [{ toVersion: 2, steps: [{ table: 'x' }] }],\n      }),\n    ).toThrow('Invalid migration steps')\n  })\n  it(`throws if there are gaps or duplicates in migrations`, () => {\n    expect(() =>\n      schemaMigrations({\n        migrations: [\n          { toVersion: 2, steps: [] },\n          { toVersion: 2, steps: [] },\n        ],\n      }),\n    ).toThrow('duplicates')\n    expect(() =>\n      schemaMigrations({\n        migrations: [\n          { toVersion: 5, steps: [] },\n          { toVersion: 4, steps: [] },\n          { toVersion: 2, steps: [] },\n        ],\n      }),\n    ).toThrow('gaps')\n\n    // missing migrations from 2 to x are ok\n    expect(() =>\n      schemaMigrations({\n        migrations: [\n          { toVersion: 6, steps: [] },\n          { toVersion: 5, steps: [] },\n          { toVersion: 4, steps: [] },\n        ],\n      }),\n    ).not.toThrow()\n\n    // chronological is ok too\n    expect(() =>\n      schemaMigrations({\n        migrations: [\n          { toVersion: 4, steps: [] },\n          { toVersion: 5, steps: [] },\n          { toVersion: 6, steps: [] },\n        ],\n      }),\n    ).not.toThrow()\n  })\n})\n\ndescribe('migration step functions', () => {\n  it('throws if createTable() is malformed', () => {\n    expect(() => createTable({ columns: [] })).toThrow('name')\n    expect(() => createTable({ name: 'foo', columns: [{ name: 'x', type: 'blah' }] })).toThrow(\n      'type',\n    )\n  })\n  it('throws if addColumns() is malformed', () => {\n    expect(() => addColumns({ columns: [{}] })).toThrow('table')\n    expect(() => addColumns({ table: 'foo' })).toThrow('columns')\n    expect(() => addColumns({ table: 'foo', columns: { name: 'x', type: 'blah' } })).toThrow(\n      'columns',\n    )\n    expect(() => addColumns({ table: 'foo', columns: [{ name: 'x', type: 'blah' }] })).toThrow(\n      'type',\n    )\n  })\n  it('throws if unsafeExecuteSql() is malformed', () => {\n    expect(() => unsafeExecuteSql()).toThrow('not a string')\n    expect(() => unsafeExecuteSql('delete from table_a')).toThrow('semicolon')\n    expect(() => unsafeExecuteSql('delete from table_a;')).not.toThrow()\n  })\n})\n\ndescribe('stepsForMigration', () => {\n  it('finds the right migration steps', () => {\n    const step1 = addColumns({\n      table: 'posts',\n      columns: [\n        { name: 'subtitle', type: 'string', isOptional: true },\n        { name: 'is_pinned', type: 'boolean' },\n      ],\n    })\n    const step2 = addColumns({\n      table: 'posts',\n      columns: [{ name: 'author_id', type: 'string', isIndexed: true }],\n    })\n    const step3 = createTable({\n      name: 'comments',\n      columns: [\n        { name: 'post_id', type: 'string', isIndexed: true },\n        { name: 'body', type: 'string' },\n      ],\n    })\n\n    const migrations = schemaMigrations({\n      migrations: [\n        { toVersion: 5, steps: [step2, step3] },\n        { toVersion: 4, steps: [] },\n        { toVersion: 3, steps: [step1] },\n      ],\n    })\n\n    expect(stepsForMigration({ migrations, fromVersion: 2, toVersion: 3 })).toEqual([step1])\n    expect(stepsForMigration({ migrations, fromVersion: 2, toVersion: 4 })).toEqual([step1])\n    expect(stepsForMigration({ migrations, fromVersion: 2, toVersion: 5 })).toEqual([\n      step1,\n      step2,\n      step3,\n    ])\n    expect(stepsForMigration({ migrations, fromVersion: 3, toVersion: 5 })).toEqual([step2, step3])\n    expect(stepsForMigration({ migrations, fromVersion: 3, toVersion: 4 })).toEqual([])\n    expect(stepsForMigration({ migrations, fromVersion: 4, toVersion: 5 })).toEqual([step2, step3])\n\n    // if no available steps, return null\n    expect(\n      stepsForMigration({\n        migrations: schemaMigrations({ migrations: [] }),\n        fromVersion: 1,\n        toVersion: 2,\n      }),\n    ).toEqual(null)\n    expect(stepsForMigration({ migrations, fromVersion: 1, toVersion: 2 })).toEqual(null)\n    expect(stepsForMigration({ migrations, fromVersion: 1, toVersion: 3 })).toEqual(null)\n    expect(stepsForMigration({ migrations, fromVersion: 1, toVersion: 5 })).toEqual(null)\n    expect(stepsForMigration({ migrations, fromVersion: 3, toVersion: 6 })).toEqual(null)\n    expect(stepsForMigration({ migrations, fromVersion: 5, toVersion: 6 })).toEqual(null)\n  })\n})\n"
  },
  {
    "path": "src/Schema/test.js",
    "content": "import { appSchema, tableSchema } from './index'\n\ndescribe('Schema', () => {\n  it('can prepare schema', () => {\n    const unsafeSql = () => {}\n    const testSchema = appSchema({\n      version: 1,\n      tables: [\n        tableSchema({\n          name: 'foo',\n          columns: [\n            { name: 'col1', type: 'string' },\n            { name: 'col2', type: 'number' },\n          ],\n        }),\n        tableSchema({\n          name: 'bar',\n          columns: [\n            { name: 'col1', type: 'number' },\n            { name: 'col2', type: 'boolean' },\n            { name: 'col3', type: 'boolean' },\n          ],\n          unsafeSql,\n        }),\n      ],\n      unsafeSql,\n    })\n\n    expect(testSchema).toEqual({\n      version: 1,\n      tables: {\n        foo: {\n          name: 'foo',\n          columns: {\n            col1: { name: 'col1', type: 'string' },\n            col2: { name: 'col2', type: 'number' },\n          },\n          columnArray: [\n            { name: 'col1', type: 'string' },\n            { name: 'col2', type: 'number' },\n          ],\n        },\n        bar: {\n          name: 'bar',\n          columns: {\n            col1: { name: 'col1', type: 'number' },\n            col2: { name: 'col2', type: 'boolean' },\n            col3: { name: 'col3', type: 'boolean' },\n          },\n          columnArray: [\n            { name: 'col1', type: 'number' },\n            { name: 'col2', type: 'boolean' },\n            { name: 'col3', type: 'boolean' },\n          ],\n          unsafeSql,\n        },\n      },\n      unsafeSql,\n    })\n  })\n  it('can define last_modified in user land', () => {\n    expect(() =>\n      tableSchema({\n        name: 'foo',\n        columns: [{ name: 'last_modified', type: 'number', isOptional: true }],\n      }),\n    ).not.toThrow()\n    expect(() =>\n      tableSchema({\n        name: 'foo',\n        columns: [{ name: 'last_modified', type: 'number' }],\n      }),\n    ).not.toThrow()\n    expect(() =>\n      tableSchema({\n        name: 'foo',\n        columns: [{ name: 'last_modified', type: 'string' }],\n      }),\n    ).toThrow(/last_modified must be.*number/)\n  })\n  it('does not allow unsafe names', () => {\n    ;[\n      '\"hey\"',\n      \"'hey'\",\n      '`hey`',\n      \"foo' and delete * from users --\",\n      'id',\n      '_changed',\n      '_status',\n      'local_storage',\n      '$loki',\n      '__foo',\n      '__proto__',\n      'toString',\n      'valueOf',\n      'oid',\n      '_rowid_',\n      'ROWID',\n    ].forEach((name) => {\n      // console.log(name)\n      expect(() => tableSchema({ name: 'foo', columns: [{ name, type: 'string' }] })).toThrow()\n      expect(() => tableSchema({ name, columns: [{ name: 'hey', type: 'string' }] })).toThrow()\n    })\n  })\n})\n"
  },
  {
    "path": "src/__playground__/index.js",
    "content": "/* eslint-disable */\n\nimport { NativeModules } from 'react-native'\n\n// NOTE: You can put stuff there to play around with Watermelon in development - useful for running\n// native Tester projects via Xcode/Android Studio - when playing around in Jest environment won't do\n// To use, set openPlayground=true in index.integrationTests.native.js\n// WARN: DO NOT commit stuff put in here\nasync function runPlayground() {}\n\nrunPlayground()\n"
  },
  {
    "path": "src/__tests__/databaseTests.js",
    "content": "// @flow\n\nimport naughtyStrings from './utils/naughtyStrings'\nimport * as QueryBuilders from '../QueryDescription'\n\nconst Q = (QueryBuilders: any)\n\nconst matchTests: any[] = []\n\nfunction matchTest(\n  options: $Exact<{\n    name: string,\n    query: QueryBuilders.Clause[],\n    matching: Array<{ id: string, ... }>,\n    nonMatching: Array<{ id: string, ... }>,\n    skipQuery?: boolean,\n    skipCount?: boolean,\n    skipLoki?: boolean,\n    skipSqlite?: boolean,\n    skipMatcher?: boolean,\n    checkOrder?: boolean,\n  }>,\n): void {\n  matchTests.push(options)\n}\n\nmatchTest({\n  name: 'matches everything',\n  query: [],\n  matching: [{ id: 'm1' }, { id: 'm2', num1: 10 }],\n  nonMatching: [],\n})\nmatchTest({\n  name: 'matches strings',\n  query: [Q.where('text1', 'value1')],\n  matching: [{ id: 'm1', text1: 'value1' }],\n  nonMatching: [{ id: 'n1' }, { id: 'n2', text1: null }, { id: 'n3', text1: 'other_value' }],\n})\nmatchTest({\n  name: 'matches `true`',\n  query: [Q.where('bool1', true)],\n  matching: [\n    { id: 'm1', bool1: true },\n    { id: 'm2', bool1: 1 },\n  ],\n  nonMatching: [\n    { id: 'n1' },\n    { id: 'n2', bool1: null },\n    { id: 'n3', bool1: false },\n    { id: 'n4', bool1: 0 },\n  ],\n})\nmatchTest({\n  name: 'matches `false`',\n  query: [Q.where('bool2', false)],\n  matching: [\n    { id: 'm1', bool2: false },\n    { id: 'm2', bool2: 0 },\n  ],\n  nonMatching: [\n    { id: 'n1' },\n    { id: 'n2', bool2: null },\n    { id: 'n3', bool2: true },\n    { id: 'n4', bool2: 1 },\n  ],\n})\nmatchTest({\n  name: 'matches `null`',\n  query: [Q.where('num1', null)],\n  matching: [{ id: 'm1' }, { id: 'm2', num1: null }, { id: 'm3', num1: undefined }],\n  nonMatching: [\n    { id: 'n1', num1: 0 },\n    { id: 'n2', num1: false },\n    { id: 'n3', num1: '' },\n  ],\n})\nmatchTest({\n  name: 'matches integers (0)',\n  query: [Q.where('num1', 0)],\n  matching: [\n    { id: 'm1', num1: 0 },\n    { id: 'm2', num1: false },\n  ],\n  nonMatching: [\n    { id: 'n1' },\n    { id: 'n2', num1: null },\n    { id: 'n3', num1: 1 },\n    { id: 'n4', num1: true },\n  ],\n})\nmatchTest({\n  name: 'matches integers (1)',\n  query: [Q.where('num1', 1)],\n  matching: [\n    { id: 'm1', num1: 1 },\n    { id: 'm2', num1: true },\n  ],\n  nonMatching: [\n    { id: 'n1' },\n    { id: 'n2', num1: null },\n    { id: 'n3', num1: 0 },\n    { id: 'n4', num1: false },\n  ],\n})\nmatchTest({\n  name: 'matches floats',\n  query: [Q.where('float1', 3.14)],\n  matching: [{ id: 'm1', float1: 3.14 }],\n  nonMatching: [\n    { id: 'n1', float1: null },\n    { id: 'n2', float1: 1.0 },\n  ],\n})\nmatchTest({\n  name: 'matches big numbers (e.g. JS timestamps)',\n  query: [Q.where('float1', 1590485104033)],\n  matching: [{ id: 'm1', float1: 1590485104033 }],\n  nonMatching: [\n    { id: 'n1', float1: null },\n    { id: 'n2', float1: 159048510 },\n  ],\n})\nmatchTest({\n  name: 'matches multiple conditions',\n  query: [\n    Q.where('text1', `value1`),\n    Q.where('num1', 2),\n    Q.where('bool1', true),\n    Q.where('bool2', false),\n    Q.where('float1', null),\n  ],\n  matching: [\n    { id: 'm1', text1: 'value1', num1: 2, bool1: true, bool2: false, float1: null },\n    { id: 'm2', text1: 'value1', num1: 2, bool1: 1, bool2: 0 },\n  ],\n  nonMatching: [\n    { id: 'n1' },\n    { id: 'n2', text1: 'value2', num1: 2, bool1: true, bool2: false, float1: null },\n    { id: 'n3', text1: 'value1', num1: 2, bool1: true, bool2: true, float1: null },\n  ],\n})\nmatchTest({\n  name: 'matches by greater-than',\n  query: [Q.where('num1', Q.gt(2))],\n  matching: [{ id: 'm1', num1: 3 }],\n  nonMatching: [\n    { id: 'n1' },\n    { id: 'n2', num1: null },\n    { id: 'n3', num1: undefined },\n    { id: 'n4', num1: 0 },\n    { id: 'n5', num1: 2 },\n  ],\n})\nmatchTest({\n  name: 'matches by greater-than-or-equal',\n  query: [Q.where('float1', Q.gte(2.1))],\n  matching: [\n    { id: 'm1', float1: 2.1 },\n    { id: 'm2', float1: 5 },\n  ],\n  nonMatching: [\n    { id: 'n1' },\n    { id: 'n2', float1: null },\n    { id: 'n3', float1: undefined },\n    { id: 'n4', float1: 0 },\n    { id: 'n5', float1: 2 },\n    { id: 'n6', float1: 2.09 },\n  ],\n})\nmatchTest({\n  name: 'matches by greater-than with JS-like semantics',\n  query: [Q.where('num1', Q.weakGt(2))],\n  matching: [{ id: 'm1', num1: 3 }],\n  nonMatching: [\n    { id: 'n1' },\n    { id: 'n2', num1: null },\n    { id: 'n3', num1: undefined },\n    { id: 'n4', num1: 0 },\n    { id: 'n5', num1: 2 },\n  ],\n})\nmatchTest({\n  name: 'matches by less-than',\n  query: [Q.where('float1', Q.lt(2))],\n  matching: [\n    { id: 'm1', float1: 1 },\n    { id: 'm2', float1: 0 },\n  ],\n  nonMatching: [{ id: 'n1', float1: 2 }, { id: 'n2', float1: null }, { id: 'n3' }],\n})\nmatchTest({\n  name: 'matches by less-than-or-equal',\n  query: [Q.where('float1', Q.lte(2))],\n  matching: [\n    { id: 'm1', float1: 2 },\n    { id: 'm2', float1: 0 },\n  ],\n  nonMatching: [{ id: 'n1', float1: 2.1 }, { id: 'n2', float1: null }, { id: 'n3' }],\n})\nmatchTest({\n  name: 'matches by not-equal',\n  query: [Q.where('text1', Q.notEq('foo'))],\n  matching: [\n    { id: 'm1' },\n    { id: 'm2', text1: undefined },\n    { id: 'm3', text1: null },\n    { id: 'm4', text1: 'blah' },\n    { id: 'm5', text1: 'Foo' },\n    { id: 'm6', text1: 'FOO' },\n  ],\n  nonMatching: [{ id: 'n1', text1: 'foo' }],\n})\nmatchTest({\n  name: 'matches not-equal(null)',\n  query: [Q.where('num1', Q.notEq(null))],\n  matching: [\n    { id: 'm1', num1: 1 },\n    { id: 'm2', num1: 0 },\n    { id: 'm3', num1: false },\n    { id: 'm4', num1: '' },\n  ],\n  nonMatching: [{ id: 'n1', num1: null }, { id: 'n2', num1: undefined }, { id: 'n3' }],\n})\nmatchTest({\n  name: 'matches by IN',\n  query: [Q.where('num1', Q.oneOf([0, 1, 2]))],\n  matching: [\n    { id: 'm1', num1: 0 },\n    { id: 'm2', num1: 2 },\n  ],\n  nonMatching: [{ id: 'n1' }, { id: 'n2', num1: null }, { id: 'n3', num1: 10 }],\n})\nmatchTest({\n  name: 'matches by NOT IN',\n  query: [Q.where('num1', Q.notIn([0, 1, 2]))],\n  matching: [\n    { id: 'm1', num1: 5 },\n    { id: 'm2', num1: 10 },\n  ],\n  nonMatching: [\n    { id: 'n1', num1: 0 },\n    { id: 'n2', num1: 2 },\n    { id: 'n3', num1: null },\n    { id: 'n4', num1: undefined },\n    { id: 'n5' },\n  ],\n})\nmatchTest({\n  name: 'matches by BETWEEN',\n  query: [Q.where('float1', Q.between(5, 10))],\n  matching: [\n    { id: 'm1', float1: 5 },\n    { id: 'm2', float1: 10 },\n  ],\n  nonMatching: [\n    { id: 'n1' },\n    { id: 'n2', float1: null },\n    { id: 'n3', float1: 4 },\n    { id: 'n4', float1: 11 },\n  ],\n})\nmatchTest({\n  name: 'can compare columns (eq)',\n  query: [Q.where('num1', Q.eq(Q.column('num2')))],\n  matching: [\n    { id: 'm1', num1: 'foo', num2: 'foo' },\n    { id: 'm2', num1: 5, num2: 5 },\n    { id: 'm4', num1: true, num2: true },\n    { id: 'm5', num1: true, num2: 1 },\n    { id: 'm6', num1: false, num2: false },\n    { id: 'm7', num1: false, num2: 0 },\n    { id: 'm8', num1: null },\n    { id: 'm9', num2: null },\n    { id: 'm0', num1: undefined, num2: null },\n    { id: 'ma', num1: 3.14, num2: 3.14 },\n    { id: 'mb' },\n  ],\n  nonMatching: [\n    { id: 'n1', num1: 'foo', num2: 'bar' },\n    { id: 'n2', num1: 5, num2: 6 },\n    { id: 'n3', num1: 5.14, num2: 5.1399 },\n    { id: 'n4', num1: true, num2: false },\n    { id: 'n5', num1: null, num2: false },\n    { id: 'n6', num1: undefined, num2: false },\n    { id: 'n7', num2: false },\n  ],\n})\nmatchTest({\n  name: 'can compare columns (notEq)',\n  query: [Q.where('num1', Q.notEq(Q.column('num2')))],\n  matching: [\n    { id: 'n1', num1: 'foo', num2: 'bar' },\n    { id: 'n2', num1: 5, num2: 6 },\n    { id: 'n3', num1: 5.14, num2: 5.1399 },\n    { id: 'n4', num1: true, num2: false },\n    { id: 'n5', num1: null, num2: false },\n    { id: 'n6', num1: undefined, num2: false },\n    { id: 'n7', num2: false },\n  ],\n  nonMatching: [\n    { id: 'm1', num1: 'foo', num2: 'foo' },\n    { id: 'm2', num1: 5, num2: 5 },\n    { id: 'm4', num1: true, num2: true },\n    { id: 'm5', num1: true, num2: 1 },\n    { id: 'm6', num1: false, num2: false },\n    { id: 'm7', num1: false, num2: 0 },\n    { id: 'm8', num1: null },\n    { id: 'm9', num2: null },\n    { id: 'm0', num1: undefined, num2: null },\n    { id: 'ma', num1: 3.14, num2: 3.14 },\n    { id: 'mb' },\n  ],\n})\nmatchTest({\n  name: 'can compare columns (less-than)',\n  query: [Q.where('num2', Q.lt(Q.column('num1')))],\n  matching: [\n    { id: 'm1', num1: 10, num2: 5 },\n    { id: 'm2', num1: 5.1, num2: 5.09 },\n  ],\n  nonMatching: [\n    { id: 'n1' },\n    { id: 'n2', num1: null },\n    { id: 'n3', num2: null },\n    { id: 'n4', num1: null, num2: null },\n    { id: 'n5', num1: 5, num2: 10 },\n    { id: 'n6', num1: 5 },\n    { id: 'n7', num1: 5, num2: null },\n    { id: 'n8', num2: 10 },\n    { id: 'n9', num1: null, num2: 10 },\n    { id: 'n10', num1: 4.5, num2: 4.6 },\n  ],\n})\nmatchTest({\n  name: 'can compare columns (less-than-or-equal)',\n  query: [Q.where('num2', Q.lte(Q.column('num1')))],\n  matching: [\n    { id: 'm1', num1: 10, num2: 5 },\n    { id: 'm2', num1: 5, num2: 5 },\n  ],\n  nonMatching: [\n    { id: 'n1' },\n    { id: 'n2', num1: null },\n    { id: 'n3', num2: null },\n    { id: 'n4', num1: null, num2: null },\n    { id: 'n5', num1: 5, num2: 10 },\n    { id: 'n6', num1: 5 },\n    { id: 'n7', num1: 5, num2: null },\n    { id: 'n8', num2: 10 },\n    { id: 'n9', num1: null, num2: 10 },\n  ],\n})\nmatchTest({\n  name: 'can compare columns (greater-than/float)',\n  query: [Q.where('float1', Q.gt(Q.column('float2')))],\n  matching: [\n    { id: 'm1', float1: 10, float2: 5 },\n    { id: 'm2', float1: 5.1, float2: 5.09 },\n  ],\n  nonMatching: [\n    { id: 'n1' },\n    { id: 'n2', float1: null },\n    { id: 'n3', float2: null },\n    { id: 'n4', float1: null, float2: null },\n    { id: 'n5', float1: 5, float2: 10 },\n    { id: 'n6', float1: 5 },\n    { id: 'n7', float1: 5, float2: null },\n    { id: 'n8', float2: 10 },\n    { id: 'n9', float1: null, float2: 10 },\n    { id: 'n10', float1: 4.5, float2: 4.6 },\n  ],\n})\nmatchTest({\n  name: 'can compare columns (greater-than-or-equal/integer)',\n  query: [Q.where('num1', Q.gte(Q.column('num2')))],\n  matching: [\n    { id: 'm1', num1: 10, num2: 5 },\n    { id: 'm2', num1: 5, num2: 5 },\n  ],\n  nonMatching: [\n    { id: 'n1' },\n    { id: 'n2', num1: null },\n    { id: 'n3', num2: null },\n    { id: 'n4', num1: null, num2: null },\n    { id: 'n5', num1: 5, num2: 10 },\n    { id: 'n6', num1: 5 },\n    { id: 'n7', num1: 5, num2: null },\n    { id: 'n8', num2: 10 },\n    { id: 'n9', num1: null, num2: 10 },\n  ],\n})\nmatchTest({\n  name: 'can compare columns (string/null)',\n  query: [Q.where('text1', Q.eq(Q.column('text2')))],\n  matching: [\n    { id: 'm1', text1: null },\n    { id: 'm2', text2: null },\n    { id: 'm3', text1: null, text2: null },\n    { id: 'm4', text1: undefined, text2: null },\n    { id: 'm5', text1: 'hey', text2: 'hey' },\n  ],\n  nonMatching: [\n    { id: 'n1', text1: '', text2: null },\n    { id: 'n2', text2: '' },\n    { id: 'n3', text1: 'hey' },\n    { id: 'n4', text1: 'hey', text2: 'HEY' },\n  ],\n})\nmatchTest({\n  name: 'can compare columns (greater-than with JS semantics)',\n  query: [Q.where('num1', Q.weakGt(Q.column('num2')))],\n  matching: [\n    { id: 'm1', num1: 10, num2: 5 },\n    { id: 'm2', num1: 5 },\n    { id: 'm3', num1: 5, num2: null },\n    { id: 'm4', num1: 5, num2: undefined },\n    { id: 'm5', num1: 0 },\n    { id: 'm6', num1: 0, num2: null },\n  ],\n  nonMatching: [\n    { id: 'n1' },\n    { id: 'n2', num1: null },\n    { id: 'n3', num2: null },\n    { id: 'n4', num1: null, num2: null },\n    { id: 'n5', num1: 5, num2: 10 },\n    { id: 'n8', num2: 10 },\n    { id: 'n9', num1: null, num2: 10 },\n  ],\n})\nmatchTest({\n  name: 'matches complex queries with AND/OR nesting',\n  query: [\n    Q.where('text1', 'value'),\n    Q.or(\n      Q.where('bool1', true),\n      Q.where('text2', null),\n      Q.and(Q.where('float1', Q.gt(5)), Q.where('float2', Q.notIn([6, 7]))),\n    ),\n  ],\n  matching: [\n    { id: 'm1', text1: 'value', bool1: true, text2: 'abc' },\n    { id: 'm2', text1: 'value', bool1: false, text2: null },\n    { id: 'm3', text1: 'value', bool1: false },\n    { id: 'm4', text1: 'value', bool1: false, text2: 'abc', float1: 8, float2: 0 },\n  ],\n  nonMatching: [\n    { id: 'n1', text1: 'bad', bool1: true },\n    { id: 'n2', text1: 'value', text2: 'abc' },\n    { id: 'n3', text1: 'value', bool1: false, text2: 'abc' },\n    { id: 'n4', text1: 'value', text2: 'abc', float1: 4 },\n    { id: 'n5', text1: 'value', text2: 'abc', float1: 5, float2: 0 },\n    { id: 'n6', text1: 'value', text2: 'abc', float1: 6, float2: 6 },\n    { id: 'n7', text1: 'value', text2: 'abc', float1: 19, float2: 7 },\n    { id: 'n8', text1: 'value', bool1: false, text2: 'abc', float1: 8 },\n    { id: 'n9', text1: 'value', bool1: false, text2: 'abc', float1: 8, float2: null },\n  ],\n})\nmatchTest({\n  name: 'can match by less-than with JS semantics',\n  query: [Q.or(Q.where('num1', Q.lt(2)), Q.where('num1', null))],\n  matching: [{ id: 'm1', num1: 1 }, { id: 'm2', num1: null }, { id: 'm3' }],\n  nonMatching: [{ id: 'n1', num1: 2 }],\n})\nmatchTest({\n  name: 'can match by NOT IN with JS semantics',\n  query: [Q.or(Q.where('num1', Q.notIn([0, 1, 2])), Q.where('num1', null))],\n  matching: [{ id: 'm1' }, { id: 'm2', num1: null }, { id: 'm3', num1: 10 }],\n  nonMatching: [\n    { id: 'n1', num1: 0 },\n    { id: 'n2', num1: 2 },\n  ],\n})\nmatchTest({\n  name: 'matches like (string)',\n  query: [Q.where('text1', Q.like('%ipsum%'))],\n  matching: [\n    { id: 'm1', text1: 'Lorem ipsum dolor sit amet,' },\n    { id: 'm2', text1: 'Lorem Ipsum dolor sit amet,' },\n    { id: 'm3', text1: 'Lorem\\n\\nIpsum' },\n    { id: 'm4', text1: 'Lorem\\n\\nIpsum\\nfoo' },\n  ],\n  nonMatching: [\n    { id: 'n1', text1: 'consectetur adipiscing elit.' },\n    { id: 'n2', text1: null },\n  ],\n})\nmatchTest({\n  name: 'matches notLike (string)',\n  query: [Q.where('text1', Q.notLike('%ipsum%'))],\n  nonMatching: [\n    { id: 'm1', text1: 'Lorem ipsum dolor sit amet,' },\n    { id: 'm2', text1: 'Lorem Ipsum dolor sit amet,' },\n    { id: 'm3', text1: 'Lorem\\n\\nIpsum' },\n    { id: 'm4', text1: 'Lorem\\n\\nIpsum\\nfoo' },\n    { id: 'mZ', text1: null },\n  ],\n  matching: [{ id: 'n1', text1: 'consectetur adipiscing elit.' }],\n})\nmatchTest({\n  name: 'matches like (value%)',\n  query: [Q.where('text1', Q.like('Lorem%'))],\n  matching: [{ id: 'm1', text1: 'Lorem Ipsum dolor sit amet,' }],\n  nonMatching: [\n    { id: 'n1', text1: 'consectetur adipiscing elit.' },\n    { id: 'n2', text1: 'Vestibulum eget felis commodo, gravida velit nec, congue lorem.' },\n    { id: 'n3', text1: 'Integer accumsan tincidunt velit, eu fermentum lorem mollis at.' },\n    {\n      id: 'n4',\n      text1: 'Integer accumsan tincidunt velit \\nLorem, eu fermentum lorem mollis at.',\n    },\n    { id: 'n5', text1: null },\n  ],\n})\nmatchTest({\n  name: 'matches notLike (value%)',\n  query: [Q.where('text1', Q.notLike('Lorem%'))],\n  nonMatching: [\n    { id: 'm1', text1: 'Lorem Ipsum dolor sit amet,' },\n    { id: 'm2', text1: null },\n  ],\n  matching: [\n    { id: 'n1', text1: 'consectetur adipiscing elit.' },\n    { id: 'n2', text1: 'Vestibulum eget felis commodo, gravida velit nec, congue lorem.' },\n    { id: 'n3', text1: 'Integer accumsan tincidunt velit, eu fermentum lorem mollis at.' },\n    {\n      id: 'n4',\n      text1: 'Integer accumsan tincidunt velit \\nLorem, eu fermentum lorem mollis at.',\n    },\n  ],\n})\nmatchTest({\n  name: 'matches like (%value)',\n  query: [Q.where('text1', Q.like('%Lorem'))],\n  matching: [\n    { id: 'm1', text1: 'Vestibulum eget felis commodo, gravida velit nec, congue lorem' },\n    { id: 'm2', text1: 'Vestibulum eget felis commodo, gravida velit nec, congue\\n\\nLorem' },\n  ],\n  nonMatching: [\n    { id: 'n1', text1: 'Lorem Ipsum dolor sit amet,' },\n    { id: 'n2', text1: 'consectetur adipiscing elit.' },\n    { id: 'n3', text1: 'Vestibulum eget felis commodo, gravida velit nec, congue lorem.' },\n    { id: 'n4', text1: 'Integer accumsan tincidunt velit, eu fermentum lorem mollis at.' },\n    { id: 'n5', text1: 'Integer accumsan tincidunt velit, lorem\\neu fermentum lorem mollis at.' },\n    { id: 'nZ', text1: null },\n  ],\n})\nmatchTest({\n  name: 'matches notLike (%value)',\n  query: [Q.where('text1', Q.notLike('%Lorem'))],\n  nonMatching: [\n    { id: 'm1', text1: 'Vestibulum eget felis commodo, gravida velit nec, congue lorem' },\n    { id: 'm2', text1: null },\n  ],\n  matching: [\n    { id: 'n1', text1: 'Lorem Ipsum dolor sit amet,' },\n    { id: 'n2', text1: 'consectetur adipiscing elit.' },\n    { id: 'n3', text1: 'Vestibulum eget felis commodo, gravida velit nec, congue lorem.' },\n    { id: 'n4', text1: 'Integer accumsan tincidunt velit, eu fermentum lorem mollis at.' },\n  ],\n})\nmatchTest({\n  name: 'matches like (value%value)',\n  query: [Q.where('text1', Q.like('lorem%elit'))],\n  matching: [{ id: 'm1', text1: 'Lorem Ipsum dolor sit amet, consectetur adipiscing elit' }],\n  nonMatching: [\n    { id: 'n1', text1: 'Lorem Ipsum dolor sit amet,' },\n    { id: 'n2', text1: 'Vestibulum eget felis commodo, gravida velit nec, congue lorem' },\n    { id: 'n3', text1: 'Vestibulum eget felis commodo, gravida velit nec, congue lorem.' },\n    { id: 'n4', text1: 'Integer accumsan tincidunt velit, eu fermentum lorem mollis at.' },\n    { id: 'n5', text1: 'consectetur adipiscing elit.' },\n    { id: 'n6', text1: null },\n  ],\n})\nmatchTest({\n  name: 'matches notLike (value%value)',\n  query: [Q.where('text1', Q.notLike('lorem%elit'))],\n  nonMatching: [\n    { id: 'm1', text1: 'Lorem Ipsum dolor sit amet, consectetur adipiscing elit' },\n    { id: 'm2', text1: null },\n  ],\n  matching: [\n    { id: 'n1', text1: 'Lorem Ipsum dolor sit amet,' },\n    { id: 'n2', text1: 'Vestibulum eget felis commodo, gravida velit nec, congue lorem' },\n    { id: 'n3', text1: 'Vestibulum eget felis commodo, gravida velit nec, congue lorem.' },\n    { id: 'n4', text1: 'Integer accumsan tincidunt velit, eu fermentum lorem mollis at.' },\n    { id: 'n5', text1: 'consectetur adipiscing elit.' },\n  ],\n})\nmatchTest({\n  name: 'matches like (value%value%)',\n  query: [Q.where('text1', Q.like('lorem%elit%'))],\n  matching: [\n    { id: 'm1', text1: 'Lorem Ipsum dolor sit amet, consectetur adipiscing elit' },\n    { id: 'm2', text1: 'Lorem Ipsum dolor sit amet, consectetur adipiscing elit.' },\n  ],\n  nonMatching: [\n    { id: 'n1', text1: 'Lorem Ipsum dolor sit amet,' },\n    { id: 'n2', text1: 'Vestibulum eget felis commodo, gravida velit nec, congue lorem' },\n    { id: 'n3', text1: 'Vestibulum eget felis commodo, gravida velit nec, congue lorem.' },\n    { id: 'n4', text1: 'Integer accumsan tincidunt velit, eu fermentum lorem mollis at.' },\n    { id: 'n5', text1: 'consectetur adipiscing elit.' },\n    { id: 'n6', text1: null },\n  ],\n})\nmatchTest({\n  name: 'matches notLike (value%value%)',\n  query: [Q.where('text1', Q.notLike('lorem%elit%'))],\n  nonMatching: [\n    { id: 'm1', text1: 'Lorem Ipsum dolor sit amet, consectetur adipiscing elit' },\n    { id: 'm2', text1: 'Lorem Ipsum dolor sit amet, consectetur adipiscing elit.' },\n    { id: 'm3', text1: null },\n  ],\n  matching: [\n    { id: 'n1', text1: 'Lorem Ipsum dolor sit amet,' },\n    { id: 'n2', text1: 'Vestibulum eget felis commodo, gravida velit nec, congue lorem' },\n    { id: 'n3', text1: 'Vestibulum eget felis commodo, gravida velit nec, congue lorem.' },\n    { id: 'n4', text1: 'Integer accumsan tincidunt velit, eu fermentum lorem mollis at.' },\n    { id: 'n5', text1: 'consectetur adipiscing elit.' },\n  ],\n})\nmatchTest({\n  name: 'matches like (v_lue%v_lue%)',\n  query: [Q.where('text1', Q.like('l_rem%e_it%'))],\n  matching: [\n    { id: 'm1', text1: 'Lorem Ipsum dolor sit amet, consectetur adipiscing elit' },\n    { id: 'm2', text1: 'Lorem Ipsum dolor sit amet, consectetur adipiscing elit.' },\n    { id: 'm3', text1: 'Larem Ipsum dolor sit amet, consectetur adipiscing epit.' },\n  ],\n  nonMatching: [\n    { id: 'n1', text1: 'Lorem Ipsum dolor sit amet,' },\n    { id: 'n2', text1: 'Vestibulum eget felis commodo, gravida velit nec, congue lorem' },\n    { id: 'n3', text1: 'Vestibulum eget felis commodo, gravida velit nec, congue lorem.' },\n    { id: 'n4', text1: 'Integer accumsan tincidunt velit, eu fermentum lorem mollis at.' },\n    { id: 'n5', text1: 'consectetur adipiscing elit.' },\n    { id: 'n6', text1: null },\n  ],\n})\nmatchTest({\n  name: 'matches notLike (v_lue%v_lue%)',\n  query: [Q.where('text1', Q.notLike('l_rem%e_it%'))],\n  nonMatching: [\n    { id: 'm1', text1: 'Lorem Ipsum dolor sit amet, consectetur adipiscing elit' },\n    { id: 'm2', text1: 'Lorem Ipsum dolor sit amet, consectetur adipiscing elit.' },\n    { id: 'm3', text1: 'Larem Ipsum dolor sit amet, consectetur adipiscing epit.' },\n    { id: 'm4', text1: null },\n  ],\n  matching: [\n    { id: 'n1', text1: 'Lorem Ipsum dolor sit amet,' },\n    { id: 'n2', text1: 'Vestibulum eget felis commodo, gravida velit nec, congue lorem' },\n    { id: 'n3', text1: 'Vestibulum eget felis commodo, gravida velit nec, congue lorem.' },\n    { id: 'n4', text1: 'Integer accumsan tincidunt velit, eu fermentum lorem mollis at.' },\n    { id: 'n5', text1: 'consectetur adipiscing elit.' },\n  ],\n})\nmatchTest({\n  name: 'matches like (_alu_)',\n  query: [Q.where('text1', Q.like('_ore_'))],\n  matching: [\n    { id: 'm1', text1: 'Lorem' },\n    { id: 'm2', text1: 'poret' },\n  ],\n  nonMatching: [\n    { id: 'n1', text1: 'Lorem Ipsum dolor sit amet,' },\n    { id: 'n2', text1: 'Vestibulum eget felis commodo, gravida velit nec, congue lorem' },\n    { id: 'n3', text1: 'Vestibulum eget felis commodo, gravida velit nec, congue lorem.' },\n    { id: 'n4', text1: 'Integer accumsan tincidunt velit, eu fermentum lorem mollis at.' },\n    { id: 'n5', text1: 'consectetur adipiscing elit.' },\n    { id: 'n6', text1: null },\n  ],\n})\nmatchTest({\n  name: 'matches like sanitized (value%)',\n  query: [Q.where('text1', Q.like(Q.sanitizeLikeString('lorem%')))],\n  matching: [{ id: 'm2', text1: 'Lorem%' }],\n  nonMatching: [\n    { id: 'n1', text1: 'Lorem Ipsum dolor sit amet,' },\n    { id: 'n2', text1: 'Vestibulum eget felis commodo, gravida velit nec, congue lorem' },\n    { id: 'n3', text1: 'Vestibulum eget felis commodo, gravida velit nec, congue lorem.' },\n    { id: 'n4', text1: 'Integer accumsan tincidunt velit, eu fermentum lorem mollis at.' },\n    { id: 'n5', text1: 'consectetur adipiscing elit.' },\n    { id: 'n6', text1: null },\n  ],\n})\nmatchTest({\n  name: 'matches like sanitized (value_)',\n  query: [Q.where('text1', Q.like(Q.sanitizeLikeString('lorem_')))],\n  matching: [{ id: 'm2', text1: 'Lorem%' }],\n  nonMatching: [\n    { id: 'n1', text1: 'Lorem Ipsum dolor sit amet,' },\n    { id: 'n2', text1: 'Vestibulum eget felis commodo, gravida velit nec, congue lorem' },\n    { id: 'n3', text1: 'Vestibulum eget felis commodo, gravida velit nec, congue lorem.' },\n    { id: 'n4', text1: 'Integer accumsan tincidunt velit, eu fermentum lorem mollis at.' },\n    { id: 'n5', text1: 'consectetur adipiscing elit.' },\n    { id: 'n6', text1: null },\n  ],\n})\nmatchTest({\n  name: 'matches like sanitized (value.*)',\n  query: [Q.where('text1', Q.like(Q.sanitizeLikeString('lorem.*')))],\n  matching: [{ id: 'm2', text1: 'Lorem.*' }],\n  nonMatching: [\n    { id: 'n1', text1: 'Lorem Ipsum dolor sit amet,' },\n    { id: 'n2', text1: 'Vestibulum eget felis commodo, gravida velit nec, congue lorem' },\n    { id: 'n3', text1: 'Vestibulum eget felis commodo, gravida velit nec, congue lorem.' },\n    { id: 'n4', text1: 'Integer accumsan tincidunt velit, eu fermentum lorem mollis at.' },\n    { id: 'n5', text1: 'consectetur adipiscing elit.' },\n    { id: 'n6', text1: null },\n  ],\n})\nmatchTest({\n  name: 'matches like sanitized (%(value,)%)',\n  query: [Q.where('text1', Q.like(`%${Q.sanitizeLikeString('commodo,')}%`))],\n  matching: [\n    { id: 'm1', text1: 'Vestibulum eget felis commodo, gravida velit nec, congue lorem' },\n    { id: 'm2', text1: 'Vestibulum eget felis commodo, gravida velit nec, congue lorem.' },\n  ],\n  nonMatching: [\n    { id: 'n1', text1: 'Lorem Ipsum dolor sit amet,' },\n    { id: 'n2', text1: 'Integer accumsan tincidunt velit, eu fermentum lorem mollis at.' },\n    { id: 'n3', text1: 'consectetur adipiscing elit.' },\n    { id: 'n4', text1: null },\n  ],\n})\nmatchTest({\n  name: 'matches includes(foo)',\n  query: [Q.where('text1', Q.includes(`foo`))],\n  matching: [\n    { id: 'm1', text1: 'foo' },\n    { id: 'm2', text1: '   foo' },\n    { id: 'm3', text1: 'xcascasdfoo' },\n    { id: 'm4', text1: 'foobarbar' },\n    { id: 'm5', text1: '....foobar' },\n    { id: 'm6', text1: '\\n\\n\\n\\tfoo\\n\\n\\t' },\n  ],\n  nonMatching: [\n    { id: 'n1', text1: null },\n    { id: 'n2', text1: '' },\n    { id: 'n3', text1: 'Lorem Ipsum' },\n    { id: 'n4', text1: 'fo o' },\n    { id: 'n5', text1: 'FOO' },\n    { id: 'n6', text1: 'Foo' },\n    { id: 'n7', text1: 'fóó' },\n    { id: 'n8', text1: 'f​o​o' }, // zero-width space used\n  ],\n})\nmatchTest({\n  name: 'matches includes()',\n  query: [Q.where('text1', Q.includes(``))], // weird edge case\n  matching: [\n    { id: 'm0', text1: '' },\n    { id: 'm1', text1: 'foo' },\n    { id: 'm2', text1: '\\n\\n\\nhi' },\n  ],\n  nonMatching: [{ id: 'n1', text1: null }],\n})\nmatchTest({\n  name: 'matches unsafe SQL expression',\n  query: [Q.unsafeSqlExpr('tasks.num1 not between 1 and 5')],\n  matching: [\n    { id: 'm1', num1: 0 },\n    { id: 'm2', num1: -1 },\n    { id: 'm3', num1: 6 },\n    { id: 'm4', num1: 10 },\n  ],\n  nonMatching: [\n    { id: 'n1', num1: 1 },\n    { id: 'n2', num1: 3 },\n    { id: 'n3', num1: 5 },\n  ],\n  skipLoki: true,\n  skipMatcher: true,\n})\nmatchTest({\n  name: 'matches unsafe SQL query',\n  query: [Q.unsafeSqlQuery('select * from tasks where num1 not between 1 and 5 and num2 is not 6')],\n  matching: [\n    { id: 'm1', num1: 0 },\n    { id: 'm2', num1: -1 },\n    { id: 'm3', num1: 6 },\n    { id: 'm4', num1: 10 },\n  ],\n  nonMatching: [\n    { id: 'n1', num1: 1 },\n    { id: 'n2', num1: 3 },\n    { id: 'n3', num1: 5 },\n    { id: 'n4', num1: 6, num2: 6 },\n  ],\n  skipLoki: true,\n  skipMatcher: true,\n  skipCount: true,\n})\nmatchTest({\n  name: 'matches unsafe SQL query with values',\n  query: [\n    Q.unsafeSqlQuery(\n      'select * from tasks where num1 not between ? and ? and num2 is not ? and text1 is ? and bool1 is ? and text2 is ?',\n      [1, 5, 3.14, 'hi', true, null],\n    ),\n  ],\n  matching: [\n    { id: 'm1', text1: 'hi', bool1: true, num1: 0 },\n    { id: 'm2', text1: 'hi', bool1: true, num1: -1 },\n    { id: 'm3', text1: 'hi', bool1: true, num1: 6 },\n    { id: 'm4', text1: 'hi', bool1: true, num1: 10 },\n  ],\n  nonMatching: [\n    { id: 'n1', text1: 'hi', bool1: true, num1: 1 },\n    { id: 'n2', text1: 'hi', bool1: true, num1: 3 },\n    { id: 'n3', text1: 'hi', bool1: true, num1: 5 },\n    { id: 'n4', text1: 'hi', bool1: true, num1: 6, num2: 3.14 },\n    { id: 'n5', text1: 'hia', bool1: true, num1: 10 },\n    { id: 'n6', text1: 'hi', bool1: false, num1: 10 },\n    { id: 'n7', num1: 10 },\n    { id: 'n8', text1: 'hi', bool1: true, num1: 10, text2: 'bad' },\n  ],\n  skipLoki: true,\n  skipMatcher: true,\n  skipCount: true,\n})\nmatchTest({\n  name: 'can count with unsafe SQL query with values',\n  query: [\n    Q.unsafeSqlQuery(\n      'select count(*) as count from tasks where num1 not between ? and ? and num2 is not ? and text1 is ? and bool1 is ? and text2 is ?',\n      [1, 5, 3.14, 'hi', true, null],\n    ),\n  ],\n  matching: [\n    { id: 'm1', text1: 'hi', bool1: true, num1: 0 },\n    { id: 'm2', text1: 'hi', bool1: true, num1: -1 },\n    { id: 'm3', text1: 'hi', bool1: true, num1: 6 },\n    { id: 'm4', text1: 'hi', bool1: true, num1: 10 },\n  ],\n  nonMatching: [\n    { id: 'n1', text1: 'hi', bool1: true, num1: 1 },\n    { id: 'n2', text1: 'hi', bool1: true, num1: 3 },\n    { id: 'n3', text1: 'hi', bool1: true, num1: 5 },\n    { id: 'n4', text1: 'hi', bool1: true, num1: 6, num2: 3.14 },\n    { id: 'n5', text1: 'hia', bool1: true, num1: 10 },\n    { id: 'n6', text1: 'hi', bool1: false, num1: 10 },\n    { id: 'n7', num1: 10 },\n    { id: 'n8', text1: 'hi', bool1: true, num1: 10, text2: 'bad' },\n  ],\n  skipLoki: true,\n  skipMatcher: true,\n  skipQuery: true,\n})\nmatchTest({\n  name: 'matches unsafe Loki expression',\n  query: [Q.unsafeLokiExpr({ text1: { $contains: 'hey' } })],\n  matching: [\n    { id: 'm1', text1: 'hey' },\n    { id: 'm2', text1: 'aeheyea' },\n  ],\n  nonMatching: [{ id: 'n1' }, { id: 'n2', text1: 'he' }],\n  skipSqlite: true,\n  skipMatcher: true,\n})\nmatchTest({\n  name: 'sorts results by string',\n  query: [Q.sortBy('text1', Q.asc)],\n  matching: [\n    { id: 'n0', text1: null },\n    { id: 'n1', text1: 'a' },\n    { id: 'n2', text1: 'b' },\n    { id: 'n3', text1: 'c' },\n    { id: 'n4', text1: 'd' },\n    { id: 'n5', text1: 'e' },\n    { id: 'n6', text1: 'z' },\n  ],\n  nonMatching: [],\n  skipMatcher: true,\n  checkOrder: true,\n})\nmatchTest({\n  name: 'sorts results by string, descending',\n  query: [Q.sortBy('text1', Q.desc)],\n  matching: [\n    { id: 'n6', text1: 'z' },\n    { id: 'n5', text1: 'e' },\n    { id: 'n4', text1: 'd' },\n    { id: 'n3', text1: 'c' },\n    { id: 'n2', text1: 'b' },\n    { id: 'n1', text1: 'a' },\n    { id: 'n0', text1: null },\n  ],\n  nonMatching: [],\n  skipMatcher: true,\n  checkOrder: true,\n})\nmatchTest({\n  name: 'sorts results by number',\n  query: [Q.sortBy('num1', Q.asc)],\n  matching: [\n    { id: 'n0', num1: null },\n    { id: 'n1', num1: -100000 },\n    { id: 'n2', num1: -1 },\n    { id: 'n3', num1: 0 },\n    { id: 'n4', num1: 0.1 },\n    { id: 'n5', num1: 5 },\n    { id: 'n6', num1: 1000000 },\n  ],\n  nonMatching: [],\n  skipMatcher: true,\n  checkOrder: true,\n})\nmatchTest({\n  name: 'sorts results by boolean',\n  query: [Q.sortBy('bool1', Q.desc)],\n  matching: [\n    { id: 'n0', bool1: true },\n    { id: 'n1', bool1: false },\n    { id: 'n2', bool1: null },\n  ],\n  nonMatching: [],\n  skipMatcher: true,\n  checkOrder: true,\n})\nmatchTest({\n  name: 'sorts results by multiple columns',\n  query: [Q.sortBy('text1', Q.asc), Q.sortBy('num1', Q.desc)],\n  matching: [\n    { id: 'n0', text1: null, num1: 100 },\n    { id: 'n1', text1: null, num1: 0 },\n    { id: 'n2', text1: 'aa', num1: 250 },\n    { id: 'n3', text1: 'ab', num1: 300 },\n    { id: 'n4', text1: 'ba', num1: 3.14 },\n    { id: 'n5', text1: 'za', num1: 1.1 },\n    { id: 'n6', text1: 'za', num1: -0 },\n  ],\n  nonMatching: [],\n  skipMatcher: true,\n  checkOrder: true,\n})\nmatchTest({\n  name: 'matches with sortBy & take',\n  query: [Q.sortBy('text1', Q.asc), Q.sortBy('num1', Q.desc), Q.take(2)],\n  matching: [\n    { id: 'n1', text1: 'a', num1: 2 },\n    { id: 'n2', text1: 'a', num1: 1 },\n  ],\n  nonMatching: [\n    { id: 'n3', text1: 'c', num1: 4 },\n    { id: 'm2', text1: 'b', num1: 2 },\n    { id: 'm1', text1: 'b', num1: 10 },\n    { id: 'n4', text1: 'c', num1: 3 },\n  ],\n  skipCount: true, // count is broken\n  skipMatcher: true,\n  checkOrder: true,\n})\nmatchTest({\n  name: 'matches with sortBy, take & skip',\n  query: [Q.sortBy('text1', Q.asc), Q.sortBy('num1', Q.desc), Q.skip(2), Q.take(2)],\n  matching: [\n    { id: 'm1', text1: 'b', num1: 10 },\n    { id: 'm2', text1: 'b', num1: 2 },\n  ],\n  nonMatching: [\n    { id: 'n3', text1: 'c', num1: 4 },\n    { id: 'n4', text1: 'c', num1: 3 },\n    { id: 'n1', text1: 'a', num1: 2 },\n    { id: 'n2', text1: 'a', num1: 1 },\n  ],\n  skipCount: true, // count is broken\n  skipMatcher: true,\n  checkOrder: true,\n})\n\nexport const naughtyMatchTests: any[] = naughtyStrings.map((naughtyString) => ({\n  name: naughtyString,\n  query: [Q.where('text1', naughtyString)],\n  matching: [{ id: 'm1', text1: naughtyString }],\n  nonMatching: [\n    { id: 'n1', text1: null },\n    { id: 'n2', text1: 'not-a-naughty-string' },\n  ],\n}))\n\nconst joinTests: any[] = []\n\nfunction joinTest(\n  options: $Exact<{\n    name: string,\n    query: QueryBuilders.Clause[],\n    extraRecords: {\n      ['projects' | 'tag_assignments' | 'teams' | 'organizations']: Array<{ id: string, ... }>,\n    },\n    matching: Array<{ id: string, ... }>,\n    nonMatching: Array<{ id: string, ... }>,\n    skipCount?: boolean,\n    skipLoki?: boolean,\n    skipSqlite?: boolean,\n  }>,\n): void {\n  joinTests.push(options)\n}\n\njoinTest({\n  name: 'can perform simple JOIN queries',\n  query: [Q.on('projects', 'text1', 't1')],\n  extraRecords: {\n    projects: [\n      { id: 'p1', text1: 't1' },\n      { id: 'p2', text1: 't1' },\n      // bad:\n      { id: 'p3', text1: 't2' },\n      { id: 'p4', text1: 't1', _status: 'deleted' },\n    ],\n  },\n  matching: [\n    { id: 'm1', project_id: 'p1' },\n    { id: 'm2', project_id: 'p1' },\n    { id: 'm3', project_id: 'p2' },\n  ],\n  nonMatching: [\n    { id: 'm4', project_id: 'p3' },\n    { id: 'm5', project_id: 'p4' },\n    { id: 'm6', project_id: 'p1', _status: 'deleted' },\n  ],\n})\njoinTest({\n  name: 'can perform complex JOIN queries',\n  query: [\n    Q.on('projects', 'text1', 'abcdef'),\n    Q.where('text1', 'val1'),\n    Q.on('tag_assignments', 'text1', Q.oneOf(['a', 'b', 'c'])),\n    Q.on('projects', 'bool1', true),\n  ],\n  extraRecords: {\n    projects: [\n      { id: 'p2', text1: 'abcdef', bool1: true },\n      { id: 'p3', text1: 'abcdef', bool1: true },\n      // bad:\n      { id: 'p1', text1: 'abcdef', bool1: false },\n      { id: 'p4', text1: 'other', bool1: true },\n      { id: 'p5', text1: 'abcdef', bool1: true, _status: 'deleted' },\n    ],\n    tag_assignments: [\n      { id: 'tt1', text1: 'a', task_id: 'm1' },\n      { id: 'tt2', text1: 'a', task_id: 'm2' },\n      { id: 'tt3', text1: 'b', task_id: 'm1' },\n      { id: 'tt4', text1: 'c', task_id: 'm3' },\n      { id: 'tt5', text1: 'c', task_id: 'm4' },\n      { id: 'tt6', text1: 'c', task_id: 'n1' },\n      { id: 'tt7', text1: 'c', task_id: 'n2' },\n      // bad:\n      { id: 'tt8', text1: 'd', task_id: 'm4' },\n      { id: 'tt9', text1: 'd', task_id: 'n4' },\n      { id: 'tt10', text1: 'c', task_id: 'n7', _status: 'deleted' },\n    ],\n  },\n  matching: [\n    { id: 'm1', text1: 'val1', project_id: 'p2' },\n    { id: 'm2', text1: 'val1', project_id: 'p2' },\n    { id: 'm3', text1: 'val1', project_id: 'p3' },\n    { id: 'm4', text1: 'val1', project_id: 'p3' },\n  ],\n  nonMatching: [\n    { id: 'n1', text1: 'other', project_id: 'p2' },\n    { id: 'n2', text1: 'val1', project_id: 'p1' }, // bad project\n    { id: 'n3', text1: 'val1', project_id: 'p4' }, // bad project\n    { id: 'n4', text1: 'val1', project_id: 'p2' }, // bad task_assignment\n    { id: 'n5', text1: 'val1', project_id: 'p3' }, // no task_assignment\n    { id: 'n6', text1: 'val1', project_id: 'p5' }, // bad project\n    { id: 'n7', text1: 'val1', project_id: 'p2' }, // bad task_assignment\n  ],\n})\njoinTest({\n  name: `can perform Q.on with subexpressions`,\n  query: [\n    Q.on('projects', [\n      Q.where('text1', 'foo'),\n      Q.or(Q.where('num1', 2137), Q.where('bool1', true)),\n    ]),\n  ],\n  extraRecords: {\n    projects: [\n      { id: 'p1', text1: 'foo', num1: 2137 },\n      { id: 'p2', text1: 'foo', bool1: true },\n      { id: 'p3', text1: 'foo', num1: 2137, bool1: true },\n      { id: 'badp1', text1: 'foo' },\n      { id: 'badp2', num1: 2137 },\n      { id: 'badp3', text1: 'foo', num1: 2137, _status: 'deleted' },\n    ],\n  },\n  matching: [\n    { id: 'm1', project_id: 'p1' },\n    { id: 'm2', project_id: 'p2' },\n    { id: 'm3', project_id: 'p3' },\n  ],\n  nonMatching: [\n    { id: 'n1', project_id: 'badp1' },\n    { id: 'n2', project_id: 'badp2' },\n    { id: 'n3', project_id: 'badp3' },\n    { id: 'n4', project_id: 'p1', _status: 'deleted' },\n  ],\n})\njoinTest({\n  name: `can perform Q.on's nested in Q.or and Q.and`,\n  query: [\n    Q.experimentalJoinTables(['projects', 'tag_assignments']),\n    Q.or(\n      Q.where('bool1', true),\n      Q.on('projects', 'bool1', true),\n      Q.and(Q.on('tag_assignments', 'text1', 'foo')),\n    ),\n  ],\n  extraRecords: {\n    projects: [\n      { id: 'p1', bool1: true },\n      // bad:\n      { id: 'badp1', bool1: false },\n      { id: 'badp2', bool1: true, _status: 'deleted' },\n    ],\n    tag_assignments: [\n      { id: 'tt1', text1: 'foo', task_id: 'm6' },\n      { id: 'tt2', text1: 'foo', task_id: 'm8' },\n      { id: 'badtt1', text1: 'foo', task_id: 'm7', _status: 'deleted' },\n      { id: 'badtt2', text1: 'foo', task_id: 'n5', _status: 'deleted' },\n      { id: 'badtt3', text1: 'blah', task_id: 'n6' },\n    ],\n  },\n  matching: [\n    { id: 'm1', bool1: true },\n    { id: 'm2', bool1: true, project_id: 'p1' },\n    { id: 'm3', bool1: true, project_id: 'badp1' },\n    { id: 'm4', bool1: true, project_id: 'badp2' },\n    { id: 'm5', bool1: false, project_id: 'p1' },\n    { id: 'm6', bool1: false }, // via TT\n    { id: 'm7', bool1: true }, // has TT\n    { id: 'm8', bool1: true, project_id: 'p1' }, // has TT\n  ],\n  nonMatching: [\n    { id: 'n1' },\n    { id: 'n2', bool1: false },\n    { id: 'n3', project_id: 'badp1' },\n    { id: 'n4', project_id: 'badp2' },\n    { id: 'n5' }, // bad TT\n    { id: 'n6' }, // bad TT\n  ],\n})\njoinTest({\n  name: `can perform Q.on's nested in Q.on`,\n  query: [\n    Q.experimentalNestedJoin('projects', 'teams'),\n    Q.on('projects', Q.on('teams', 'text1', 'bingo')),\n  ],\n  extraRecords: {\n    projects: [\n      { id: 'p1', team_id: 't1' },\n      { id: 'p2', team_id: 't2' },\n      { id: 'badp1', team_id: 'badt1' },\n      { id: 'badp2', team_id: 'badt2' },\n      { id: 'badp3', team_id: 't2', _status: 'deleted' },\n    ],\n    teams: [\n      { id: 't1', text1: 'bingo' },\n      { id: 't2', text1: 'bingo' },\n      { id: 'badt1' },\n      { id: 'badt2', text1: 'bingo', _status: 'deleted' },\n    ],\n  },\n  matching: [\n    { id: 'm1', project_id: 'p1' },\n    { id: 'm2', project_id: 'p2' },\n  ],\n  nonMatching: [\n    { id: 'n1', project_id: 'badp1' },\n    { id: 'n2', project_id: 'badp2' },\n    { id: 'n3', project_id: 'badp3' },\n    { id: 'n4', project_id: 'p1', _status: 'deleted' },\n  ],\n})\njoinTest({\n  name: `can perform deeply nested Q.ons`,\n  query: [\n    Q.experimentalJoinTables(['projects']),\n    Q.experimentalNestedJoin('projects', 'teams'),\n    Q.experimentalNestedJoin('teams', 'organizations'),\n    Q.or(\n      Q.where('text1', 'BINGO'),\n      Q.on(\n        'projects',\n        Q.on('teams', [\n          Q.where('bool1', true),\n          Q.or(Q.where('text1', 'GUDTIM'), Q.on('organizations', 'num1', 2137)),\n        ]),\n      ),\n    ),\n  ],\n  extraRecords: {\n    projects: [\n      { id: 'p1', team_id: 't1' },\n      { id: 'p2', team_id: 't2' },\n      { id: 'badp1', team_id: 'badt1' },\n      { id: 'badp2', team_id: 'badt2' },\n      { id: 'badp3', team_id: 'badt3' },\n      { id: 'badp4', team_id: 'badt4' },\n      { id: 'badp5', team_id: 'badt5' },\n      { id: 'badp6', team_id: 't2', _status: 'deleted' },\n    ],\n    teams: [\n      { id: 't1', bool1: true, text1: 'GUDTIM' },\n      { id: 't2', bool1: true, organization_id: 'o1' },\n      { id: 'badt1', bool1: true },\n      { id: 'badt2', text1: 'GUDTIM' },\n      { id: 'badt3', bool1: true, organization_id: 'o1', _status: 'deleted' },\n      { id: 'badt4', bool1: true, organization_id: 'bado1' },\n      { id: 'badt5', bool1: true, organization_id: 'bado2' },\n    ],\n    organizations: [\n      { id: 'o1', num1: 2137 },\n      { id: 'bado1' },\n      { id: 'bado2', num1: 2137, _status: 'deleted' },\n    ],\n  },\n  matching: [\n    { id: 'm1', project_id: 'p1' },\n    { id: 'm2', project_id: 'p2' },\n    { id: 'm3', text1: 'BINGO' },\n    { id: 'm4', text1: 'BINGO', project_id: 'badp1' },\n  ],\n  nonMatching: [\n    { id: 'n1', project_id: 'badp1' },\n    { id: 'n2', project_id: 'badp2' },\n    { id: 'n3', project_id: 'badp3' },\n    { id: 'n4', project_id: 'badp4' },\n    { id: 'n5', project_id: 'badp5' },\n    { id: 'n6', project_id: 'badp6' },\n    { id: 'n9', text1: 'BINGO', project_id: 'p1', _status: 'deleted' },\n  ],\n})\njoinTest({\n  name: 'can perform both JOIN queries and column comparisons',\n  query: [Q.on('projects', 'text1', 't1'), Q.where('text1', Q.eq(Q.column('text2')))],\n  extraRecords: {\n    projects: [\n      { id: 'p1', text1: 't1' },\n      { id: 'p2', text1: 't1' },\n      { id: 'p3', text1: 't2' },\n    ],\n  },\n  matching: [\n    { id: 'm1', project_id: 'p1', text1: 'a', text2: 'a' },\n    { id: 'm2', project_id: 'p1', text1: null },\n    { id: 'm3', project_id: 'p2', text1: 'Foo', text2: 'Foo' },\n  ],\n  nonMatching: [\n    { id: 'n1', project_id: 'p3' },\n    { id: 'n2', project_id: 'p3', text1: 'a', text2: 'a' },\n    { id: 'n3', project_id: 'p1', text1: 'a', text2: 'b' },\n    { id: 'n4', project_id: 'p2', text1: 'foo', text2: 'Foo' },\n    { id: 'n5', project_id: 'p1', text1: null, text2: false },\n  ],\n})\njoinTest({\n  name: 'can perform a JOIN query containing column comparison',\n  query: [\n    Q.where('text1', 'val1'),\n    Q.on('projects', 'text1', 'val2'),\n    Q.on('projects', 'text2', Q.eq(Q.column('text3'))),\n  ],\n  extraRecords: {\n    projects: [\n      { id: 'p1', text1: 'val2', text2: 'a', text3: 'a' },\n      { id: 'p2', text1: 'val2', text2: null },\n      { id: 'p3', text1: 'val2' },\n      // bad:\n      { id: 'badp1' },\n      { id: 'badp2', text2: 'a', text3: 'b' },\n      { id: 'badp3', text1: 'val2', text2: 'a', text3: 'b' },\n      { id: 'badp4', text1: 'val2', text2: 'a', text3: 'a', _status: 'deleted' },\n    ],\n  },\n  matching: [\n    { id: 'm1', project_id: 'p1', text1: 'val1' },\n    { id: 'm2', project_id: 'p2', text1: 'val1' },\n    { id: 'm3', project_id: 'p3', text1: 'val1' },\n  ],\n  nonMatching: [\n    { id: 'n1', project_id: 'p3' },\n    { id: 'n2', project_id: 'p2', text1: 'bad' },\n    { id: 'n3', project_id: 'badp1', text1: 'val1' },\n    { id: 'n4', project_id: 'badp2', text1: 'val1' },\n    { id: 'n5', project_id: 'badp3', text1: 'val1' },\n    { id: 'n6', project_id: 'badp3' },\n    { id: 'n7', project_id: 'badp4', text1: 'val1' },\n  ],\n})\njoinTest({\n  name: 'can perform a JOIN query containing weakGt column comparison',\n  query: [Q.on('projects', 'num1', Q.weakGt(Q.column('num2')))],\n  extraRecords: {\n    projects: [\n      { id: 'p1', num1: 10, num2: 5 },\n      { id: 'p2', num1: 5 },\n      { id: 'p3', num1: 5, num2: null },\n      { id: 'p4', num1: 5, num2: undefined },\n      { id: 'p5', num1: 0 },\n      { id: 'p6', num1: 0, num2: null },\n\n      { id: 'badp1' },\n      { id: 'badp2', num1: null },\n      { id: 'badp3', num2: null },\n      { id: 'badp4', num1: null, num2: null },\n      { id: 'badp5', num1: 5, num2: 10 },\n      { id: 'badp6', num2: 10 },\n      { id: 'badp7', num1: null, num2: 10 },\n    ],\n  },\n  matching: [\n    { id: 'm1', project_id: 'p1' },\n    { id: 'm2', project_id: 'p2' },\n    { id: 'm3', project_id: 'p3' },\n    { id: 'm4', project_id: 'p4' },\n    { id: 'm5', project_id: 'p5' },\n    { id: 'm6', project_id: 'p6' },\n  ],\n  nonMatching: [\n    { id: 'n1', project_id: 'badp1' },\n    { id: 'n2', project_id: 'badp2' },\n    { id: 'n3', project_id: 'badp3' },\n    { id: 'n4', project_id: 'badp4' },\n    { id: 'n5', project_id: 'badp5' },\n    { id: 'n6', project_id: 'badp6' },\n    { id: 'n7', project_id: 'badp7' },\n  ],\n})\njoinTest({\n  name: 'can perform a JOIN query on has_many collection with column comparisons',\n  query: [Q.where('text1', 'val1'), Q.on('tag_assignments', 'num1', Q.gt(Q.column('num2')))],\n  extraRecords: {\n    tag_assignments: [\n      { id: 'tt1', task_id: 'm1', num1: 5, num2: 0 },\n      { id: 'tt2', task_id: 'm2', num1: 10, num2: 5 },\n      { id: 'tt3', task_id: 'n1', num1: 5, num2: 0 },\n      { id: 'tt4', task_id: 'n2', num1: 10, num2: 5 },\n      { id: 'badtt1', task_id: 'n3', num1: 0, num2: 0 },\n      { id: 'badtt2', task_id: 'n4' },\n      { id: 'badtt3', task_id: 'n5', num1: 10, num2: 10 },\n      { id: 'badtt4', task_id: 'n6', num1: 0, num2: 15 },\n      { id: 'badtt5', task_id: 'n9', num1: 10, num2: 5, _status: 'deleted' },\n    ],\n  },\n  matching: [\n    { id: 'm1', text1: 'val1' },\n    { id: 'm2', text1: 'val1' },\n  ],\n  nonMatching: [\n    { id: 'n1' },\n    { id: 'n2' },\n    { id: 'n3', text1: 'val1' },\n    { id: 'n4', text1: 'val1' },\n    { id: 'n5', text1: 'val1' },\n    { id: 'n6', text1: 'val1' },\n    { id: 'n7', text1: 'val1' }, // no TT\n    { id: 'n8' }, // no TT\n    { id: 'n9', text1: 'val1' }, // bad TT\n  ],\n})\njoinTest({\n  name: `can perform deeply nested JOIN query with a column comparison`,\n  query: [\n    Q.experimentalJoinTables(['projects']),\n    Q.experimentalNestedJoin('projects', 'teams'),\n    Q.or(Q.on('projects', Q.on('teams', [Q.where('num1', Q.gt(Q.column('num2')))]))),\n  ],\n  extraRecords: {\n    teams: [\n      { id: 't1', num1: 10, num2: 5 },\n      { id: 't2', num1: 5, num2: -5 },\n      { id: 'badt1', num1: 5, num2: 10 },\n      { id: 'badt2', num1: 5, num2: null },\n      { id: 'badt3', num1: null, num2: null },\n    ],\n    projects: [\n      { id: 'p1', team_id: 't1' },\n      { id: 'p2', team_id: 't2' },\n      { id: 'badp1', team_id: 'badt1' },\n      { id: 'badp2', team_id: 'badt2' },\n      { id: 'badp3', team_id: 'badt3' },\n    ],\n  },\n  matching: [\n    { id: 'm1', project_id: 'p1' },\n    { id: 'm2', project_id: 'p2' },\n  ],\n  nonMatching: [\n    { id: 'n1', project_id: 'badp1' },\n    { id: 'n2', project_id: 'badp2' },\n    { id: 'n3', project_id: 'badp3' },\n  ],\n})\njoinTest({\n  name: 'can compare columns between tables using unsafe SQL expressions',\n  query: [Q.on('projects', 'num1', Q.notEq(null)), Q.unsafeSqlExpr('tasks.num1 > projects.num1')],\n  extraRecords: {\n    projects: [\n      { id: 'p1', num1: 5 },\n      { id: 'p2', num1: 10 },\n      { id: 'badp1' },\n      { id: 'badp2', num1: 5, _status: 'deleted' },\n    ],\n  },\n  matching: [\n    { id: 'm1', project_id: 'p1', num1: 5.01 },\n    { id: 'm2', project_id: 'p1', num1: 100 },\n    { id: 'm3', project_id: 'p2', num1: 11 },\n    { id: 'm4', project_id: 'p2', num1: 10e12 },\n  ],\n  nonMatching: [\n    { id: 'n1', project_id: 'p1', num1: 0 },\n    { id: 'n2', project_id: 'p1', num1: -10 },\n    { id: 'n3', project_id: 'p1', num1: 4.99 },\n    { id: 'n4', project_id: 'p2', num1: 9 },\n    { id: 'n5', project_id: 'badp2', num1: 100 },\n    { id: 'n6', project_id: 'badp1', num1: 100 },\n    { id: 'n7', project_id: 'p1', num1: 100, _status: 'deleted' },\n    { id: 'n8', project_id: 'p1' },\n  ],\n  skipLoki: true,\n})\njoinTest({\n  name: 'can compare columns between tables using unsafe SQL queries',\n  query: [\n    Q.experimentalJoinTables(['projects']),\n    Q.unsafeSqlQuery(\n      `select tasks.* from tasks left join projects on tasks.project_id is projects.id where projects.num1 is not null and tasks.num1 > projects.num1 and tasks._status is not 'deleted' and projects._status is not 'deleted'`,\n    ),\n  ],\n  extraRecords: {\n    projects: [\n      { id: 'p1', num1: 5 },\n      { id: 'p2', num1: 10 },\n      { id: 'badp1' },\n      { id: 'badp2', num1: 5, _status: 'deleted' },\n    ],\n  },\n  matching: [\n    { id: 'm1', project_id: 'p1', num1: 5.01 },\n    { id: 'm2', project_id: 'p1', num1: 100 },\n    { id: 'm3', project_id: 'p2', num1: 11 },\n    { id: 'm4', project_id: 'p2', num1: 10e12 },\n  ],\n  nonMatching: [\n    { id: 'n1', project_id: 'p1', num1: 0 },\n    { id: 'n2', project_id: 'p1', num1: -10 },\n    { id: 'n3', project_id: 'p1', num1: 4.99 },\n    { id: 'n4', project_id: 'p2', num1: 9 },\n    { id: 'n5', project_id: 'badp2', num1: 100 },\n    { id: 'n6', project_id: 'badp1', num1: 100 },\n    { id: 'n7', project_id: 'p1', num1: 100, _status: 'deleted' },\n    { id: 'n8', project_id: 'p1' },\n  ],\n  skipLoki: true,\n  skipCount: true,\n})\njoinTest({\n  name: 'can compare columns between tables using unsafe Loki transform',\n  query: [\n    Q.on('projects', 'num1', Q.notEq(null)),\n    Q.unsafeLokiTransform((raws, loki) => {\n      const newRaws = []\n      raws.forEach((raw) => {\n        const project = loki.getCollection('projects').by('id', raw.project_id)\n        if (project && typeof raw.num1 === 'number' && raw.num1 > project.num1) {\n          newRaws.push(raw)\n        }\n      })\n      return newRaws\n    }),\n  ],\n  extraRecords: {\n    projects: [\n      { id: 'p1', num1: 5 },\n      { id: 'p2', num1: 10 },\n      { id: 'badp1' },\n      { id: 'badp2', num1: 5, _status: 'deleted' },\n    ],\n  },\n  matching: [\n    { id: 'm1', project_id: 'p1', num1: 5.01 },\n    { id: 'm2', project_id: 'p1', num1: 100 },\n    { id: 'm3', project_id: 'p2', num1: 11 },\n    { id: 'm4', project_id: 'p2', num1: 10e12 },\n  ],\n  nonMatching: [\n    { id: 'n1', project_id: 'p1', num1: 0 },\n    { id: 'n2', project_id: 'p1', num1: -10 },\n    { id: 'n3', project_id: 'p1', num1: 4.99 },\n    { id: 'n4', project_id: 'p2', num1: 9 },\n    { id: 'n5', project_id: 'badp2', num1: 100 },\n    { id: 'n6', project_id: 'badp1', num1: 100 },\n    { id: 'n7', project_id: 'p1', num1: 100, _status: 'deleted' },\n    { id: 'n8', project_id: 'p1' },\n  ],\n  skipSqlite: true,\n})\n\nexport { matchTests, joinTests }\n"
  },
  {
    "path": "src/__tests__/emptyMock/index.js",
    "content": "// Mock out stupid Node packages that expect (jest) requires\nmodule.exports = {\n  read() {},\n}\n"
  },
  {
    "path": "src/__tests__/integrationTests.js",
    "content": "// @flow\n\nimport SQLiteAdapterTest from '../adapters/sqlite/integrationTest'\n\nexport default [SQLiteAdapterTest]\n"
  },
  {
    "path": "src/__tests__/setUpIntegrationTestEnv.js",
    "content": "import expect from '@nozbe/watermelondb_expect'\n\nglobal.Buffer = class FakeBuffer {}\nif (!global.process) {\n  global.process = {}\n}\nif (!global.process.version) {\n  // $FlowFixMe\n  global.process.version = 'bla'\n}\n\nglobal.expect = expect\n"
  },
  {
    "path": "src/__tests__/setup.js",
    "content": "import { logger } from '../utils/common'\n\nlogger.silence()\n"
  },
  {
    "path": "src/__tests__/testModels.js",
    "content": "import { appSchema, tableSchema } from '../Schema'\nimport { field, relation, immutableRelation, text, readonly, date } from '../decorators'\nimport Model from '../Model'\nimport Database from '../Database'\nimport LokiJSAdapter from '../adapters/lokijs'\n\nexport const testSchema = appSchema({\n  version: 1,\n  tables: [\n    tableSchema({\n      name: 'mock_projects',\n      columns: [{ name: 'name', type: 'string' }],\n    }),\n    tableSchema({\n      name: 'mock_project_sections',\n      columns: [{ name: 'project_id', type: 'string' }],\n    }),\n    tableSchema({\n      name: 'mock_tasks',\n      columns: [\n        { name: 'name', type: 'string' },\n        { name: 'position', type: 'number' },\n        { name: 'is_completed', type: 'boolean' },\n        { name: 'description', type: 'string', isOptional: true },\n        { name: 'project_id', type: 'string' },\n        { name: 'project_section_id', type: 'string', isOptional: true },\n      ],\n    }),\n    tableSchema({\n      name: 'mock_comments',\n      columns: [\n        { name: 'task_id', type: 'string' },\n        { name: 'body', type: 'string' },\n        { name: 'created_at', type: 'number' },\n        { name: 'updated_at', type: 'number' },\n      ],\n    }),\n  ],\n})\n\nexport class MockProject extends Model {\n  static table = 'mock_projects'\n\n  static associations = {\n    mock_tasks: { type: 'has_many', foreignKey: 'project_id' },\n    mock_project_sections: { type: 'has_many', foreignKey: 'project_id' },\n  }\n\n  @field('name')\n  name\n}\n\nexport class MockProjectSection extends Model {\n  static table = 'mock_project_sections'\n\n  static associations = {\n    mock_projects: { type: 'belongs_to', key: 'project_id' },\n    mock_tasks: { type: 'has_many', foreignKey: 'project_section_id' },\n  }\n\n  @field('project_id') projectId\n}\n\nexport class MockTask extends Model {\n  static table = 'mock_tasks'\n\n  static associations = {\n    mock_projects: { type: 'belongs_to', key: 'project_id' },\n    mock_project_sections: { type: 'belongs_to', key: 'project_section_id' },\n    mock_comments: { type: 'has_many', foreignKey: 'task_id' },\n  }\n\n  @field('name') name\n\n  @field('position') position\n\n  @field('is_completed') isCompleted\n\n  @field('description') description\n\n  @field('project_id') projectId\n\n  @relation('mock_projects', 'project_id') project\n\n  @relation('mock_project_sections', 'project_section_id') projectSection\n}\n\nexport class MockComment extends Model {\n  static table = 'mock_comments'\n\n  static associations = {\n    mock_tasks: { type: 'belongs_to', key: 'task_id' },\n  }\n\n  @immutableRelation('mock_tasks', 'task_id')\n  task\n\n  @text('body')\n  body\n\n  @readonly\n  @date('created_at')\n  createdAt\n\n  @readonly\n  @date('updated_at')\n  updatedAt\n}\n\nexport const modelClasses = [MockProject, MockProjectSection, MockTask, MockComment]\n\nexport const mockDatabase = ({ schema = testSchema, migrations = undefined } = {}) => {\n  const adapter = new LokiJSAdapter({\n    dbName: 'test',\n    schema,\n    migrations,\n    useWebWorker: false,\n    useIncrementalIndexedDB: false,\n  })\n  const database = new Database({\n    adapter,\n    schema,\n    modelClasses,\n  })\n  return {\n    database,\n    db: database,\n    adapter,\n    projects: database.get('mock_projects'),\n    projectSections: database.get('mock_project_sections'),\n    tasks: database.get('mock_tasks'),\n    comments: database.get('mock_comments'),\n    cloneDatabase: async (clonedSchema = schema) =>\n      // simulate reload\n      new Database({\n        adapter: await database.adapter.underlyingAdapter.testClone({ schema: clonedSchema }),\n        schema: clonedSchema,\n        modelClasses,\n      }),\n  }\n}\n"
  },
  {
    "path": "src/__tests__/utils/expectToRejectWithMessage/index.js",
    "content": "// @flow\n\nexport default async function expectToRejectWithMessage(\n  promise: Promise<mixed>,\n  message: string | RegExp,\n): Promise<void> {\n  // $FlowFixMe\n  await expect(promise).rejects.toMatchObject({\n    // $FlowFixMe\n    message: expect.stringMatching(message),\n  })\n}\n"
  },
  {
    "path": "src/__tests__/utils/index.js",
    "content": "// @flow\n\nimport makeScheduler from './makeScheduler'\nimport expectToRejectWithMessage from './expectToRejectWithMessage'\n\nexport { expectToRejectWithMessage, makeScheduler }\n"
  },
  {
    "path": "src/__tests__/utils/makeScheduler.js",
    "content": "// eslint-disable-next-line\nimport { TestScheduler } from 'rxjs/testing'\n\nclass WatermelonTestScheduler extends TestScheduler {\n  cold(marbles, values, error) {\n    return this.createColdObservable(marbles, values, error)\n  }\n\n  hot(marbles, values, error) {\n    return this.createHotObservable(marbles, values, error)\n  }\n}\n\nexport default function makeScheduler() {\n  return new WatermelonTestScheduler((actual, expected) => {\n    expect(actual).toEqual(expected)\n  })\n}\n"
  },
  {
    "path": "src/__tests__/utils/naughtyStrings.js",
    "content": "import bigListOfNaughtyStrings from 'big-list-of-naughty-strings'\n\nconst naughtyStrings = bigListOfNaughtyStrings.slice()\n\nexport const bigEndianByteOrderMark = String.fromCharCode('65279') // 0xFEFF\nexport const littleEndianByteOrderMark = String.fromCharCode('65534') // 0xFFFE\n\nexport default naughtyStrings\n"
  },
  {
    "path": "src/__typetests__/README.md",
    "content": "Files here are not meant to be executed, only type-checked.\n\nMirror changes here with examples/typescript/**typetests**\n"
  },
  {
    "path": "src/__typetests__/query.js",
    "content": "// @flow\nimport { Collection, Q, type ColumnName, type TableName } from '../index'\n\nconst collection: Collection<*> = (null: any)\nconst t: TableName<*> = (null: any)\nconst c: ColumnName = (null: any)\n\n// Check that queries don't break\ncollection.query()\ncollection.query(Q.where(c, true))\ncollection.query(Q.and(Q.where(c, true)))\ncollection.query(Q.or(Q.where(c, true)))\ncollection.query(Q.on(t, Q.where(c, true)))\ncollection.query().extend(Q.where(c, true))\n\n// Same as above, but as an array\ncollection.query([])\ncollection.query([Q.where(c, true)])\ncollection.query(Q.and([Q.where(c, true)]))\ncollection.query(Q.or([Q.where(c, true)]))\ncollection.query(Q.on(t, [Q.where(c, true)]))\ncollection.query().extend([Q.where(c, true)])\n"
  },
  {
    "path": "src/adapters/__tests__/commonTests.js",
    "content": "/* eslint-disable jest/no-standalone-expect */\nimport naughtyStrings, {\n  bigEndianByteOrderMark,\n  littleEndianByteOrderMark,\n} from '../../__tests__/utils/naughtyStrings'\n\nimport expectToRejectWithMessage from '../../__tests__/utils/expectToRejectWithMessage'\nimport Model from '../../Model'\nimport Query from '../../Query'\nimport { sanitizedRaw } from '../../RawRecord'\nimport * as Q from '../../QueryDescription'\nimport { appSchema, tableSchema } from '../../Schema'\nimport { schemaMigrations, createTable, addColumns } from '../../Schema/migrations'\n\nimport { matchTests, naughtyMatchTests, joinTests } from '../../__tests__/databaseTests'\nimport DatabaseAdapterCompat from '../compat'\nimport {\n  testSchema,\n  taskQuery,\n  mockTaskRaw,\n  performMatchTest,\n  performJoinTest,\n  expectSortedEqual,\n  MockTask,\n  MockSyncTestRecord,\n  mockProjectRaw,\n  mockTagAssignmentRaw,\n  projectQuery,\n  modelQuery,\n} from './helpers'\n\nclass BadModel extends Model {\n  static table = 'nonexistent'\n}\n\nexport default () => {\n  const commonTests = []\n  const it = (name, test) => commonTests.push([name, test])\n  it.only = (name, test) => commonTests.push([name, test, true])\n  it('validates adapter options', async (_adapter, AdapterClass, extraAdapterOptions) => {\n    const schema = { ...testSchema, version: 10 }\n\n    const makeAdapter = (options) =>\n      new AdapterClass({ schema, ...options, ...extraAdapterOptions })\n    const adapterWithMigrations = (migrations) => makeAdapter({ migrations })\n\n    expect(() => adapterWithMigrations({ migrations: [] })).toThrow(/use schemaMigrations()/)\n\n    // OK migrations passed\n    const adapterWithRealMigrations = (migrations) =>\n      adapterWithMigrations(schemaMigrations({ migrations }))\n\n    expect(() => adapterWithRealMigrations([{ toVersion: 10, steps: [] }])).not.toThrow()\n    expect(() =>\n      adapterWithRealMigrations([\n        { toVersion: 10, steps: [] },\n        { toVersion: 9, steps: [] },\n      ]),\n    ).not.toThrow()\n\n    // Empty migrations only allowed if version 1\n    expect(\n      () =>\n        new AdapterClass({\n          schema: { ...testSchema, version: 1 },\n          migrations: schemaMigrations({ migrations: [] }),\n          ...extraAdapterOptions,\n        }),\n    ).not.toThrow()\n    expect(() => adapterWithRealMigrations([])).toThrow(/Missing migration/)\n\n    // Migrations can't be newer than schema\n    expect(() => adapterWithRealMigrations([{ toVersion: 11, steps: [] }])).toThrow(\n      /migrations can't be newer than schema/i,\n    )\n    // Migration to latest version must be present\n    expect(() =>\n      adapterWithRealMigrations([\n        { toVersion: 9, steps: [] },\n        { toVersion: 8, steps: [] },\n      ]),\n    ).toThrow(/Missing migration/)\n  })\n  it('can query and count on empty db', async (adapter) => {\n    const query = taskQuery()\n    expect(await adapter.query(query)).toEqual([])\n    expect(await adapter.count(query)).toBe(0)\n  })\n  it('can create and find records (sanity test)', async (adapter) => {\n    const record = mockTaskRaw({ id: 'abc', text1: 'bar', order: 1 })\n    await adapter.batch([['create', 'tasks', record]])\n    expect(await adapter.find('tasks', 'abc')).toBe('abc')\n  })\n  it('can find records by ID', async (_adapter) => {\n    let adapter = _adapter\n\n    // add a record\n    const s1 = mockTaskRaw({ id: 's1', text1: 'bar', order: 1 })\n    await adapter.batch([['create', 'tasks', s1]])\n\n    // returns cached ID after create\n    expect(await adapter.find('tasks', 's1')).toBe('s1')\n\n    // add more, restart app\n    const s2 = mockTaskRaw({ id: 's2', bool1: true, order: 2 })\n    const s3 = mockTaskRaw({ id: 's3', text1: 'baz' })\n    await adapter.batch([\n      ['create', 'tasks', s2],\n      ['create', 'tasks', s3],\n    ])\n    adapter = await adapter.testClone()\n\n    // returns raw if not cached\n    expect(await adapter.find('tasks', 's2')).toEqual(s2)\n    expect(await adapter.find('tasks', 's3')).toEqual(s3)\n\n    // caches records after first find\n    expect(await adapter.find('tasks', 's2')).toBe('s2')\n\n    // returns null if not found\n    expect(await adapter.find('tasks', 's4')).toBe(null)\n  })\n  it('can cache non-global IDs on find', async (_adapter) => {\n    let adapter = _adapter\n\n    // add a record\n    const s1 = mockTaskRaw({ id: 'id1', text1: 'bar', order: 1 })\n    await adapter.batch([['create', 'tasks', s1]])\n\n    // returns null if not found in a different table\n    expect(await adapter.find('projects', 'id1')).toBe(null)\n\n    const p1 = mockProjectRaw({ id: 'id1', num1: 1, text1: 'foo' })\n    await adapter.batch([['create', 'projects', p1]])\n\n    // returns cached ID after create\n    expect(await adapter.find('projects', 'id1')).toBe('id1')\n\n    // add more project, restart app\n    const p2 = mockProjectRaw({ id: 'id2', num1: 1, text1: 'foo' })\n    await adapter.batch([['create', 'projects', p2]])\n    adapter = await adapter.testClone()\n\n    const s2 = mockTaskRaw({ id: 'id2', text1: 'baz', order: 2 })\n    await adapter.batch([['create', 'tasks', s2]])\n\n    // returns cached ID after create\n    expect(await adapter.find('tasks', 'id2')).toBe('id2')\n\n    // returns raw if not cached for a different table\n    expect(await adapter.find('projects', 'id2')).toEqual(p2)\n    // returns cached ID after previous find\n    expect(await adapter.find('projects', 'id2')).toBe('id2')\n  })\n  it('can cache non-global IDs on query', async (_adapter) => {\n    let adapter = _adapter\n\n    // add a record\n    const s1 = mockTaskRaw({ id: 'id1', text1: 'bar', order: 1 })\n    await adapter.batch([['create', 'tasks', s1]])\n\n    // returns empty array\n    expectSortedEqual(await adapter.query(projectQuery()), [])\n\n    const p1 = mockProjectRaw({ id: 'id1', num1: 1, text1: 'foo' })\n    await adapter.batch([['create', 'projects', p1]])\n\n    // returns cached ID after create\n    expectSortedEqual(await adapter.query(projectQuery()), ['id1'])\n\n    // add more project, restart app\n    const p2 = mockProjectRaw({ id: 'id2', num1: 1, text1: 'foo' })\n    await adapter.batch([['create', 'projects', p2]])\n    adapter = await adapter.testClone()\n\n    const s2 = mockTaskRaw({ id: 'id2', text1: 'baz', order: 2 })\n    await adapter.batch([['create', 'tasks', s2]])\n\n    // returns cached IDs after create\n    expectSortedEqual(await adapter.query(taskQuery()), [s1, 'id2'])\n\n    // returns raw if not cached for a different table\n    expectSortedEqual(await adapter.query(projectQuery()), [p1, p2])\n    // returns cached IDs after previous query\n    expectSortedEqual(await adapter.query(taskQuery()), ['id1', 'id2'])\n  })\n  it('sanitizes records on find', async (_adapter) => {\n    let adapter = _adapter\n    const tt1 = { id: 'tt1', task_id: 'abcdef' } // Unsanitized raw!\n\n    await adapter.batch([['create', 'tag_assignments', tt1]])\n    adapter = await adapter.testClone()\n\n    expect(await adapter.find('tag_assignments', 'tt1')).toEqual(\n      sanitizedRaw(tt1, testSchema.tables.tag_assignments),\n    )\n  })\n  it('can query and count records', async (adapter) => {\n    const record1 = mockTaskRaw({ id: 't1', text1: 'bar', bool1: false, order: 1 })\n    const record2 = mockTaskRaw({ id: 't2', text1: 'baz', bool1: true, order: 2 })\n    const record3 = mockTaskRaw({ id: 't3', text1: 'abc', bool1: false, order: 3 })\n\n    await adapter.batch([\n      ['create', 'tasks', record1],\n      ['create', 'tasks', record2],\n      ['create', 'tasks', record3],\n    ])\n\n    // all records\n    expectSortedEqual(await adapter.query(taskQuery()), ['t1', 't2', 't3'])\n    expect(await adapter.count(taskQuery())).toBe(3)\n\n    // some records\n    expectSortedEqual(await adapter.query(taskQuery(Q.where('bool1', false))), ['t1', 't3'])\n    expectSortedEqual(await adapter.query(taskQuery(Q.where('order', 2))), ['t2'])\n    expectSortedEqual(await adapter.query(taskQuery(Q.where('order', 3))), ['t3'])\n\n    expect(await adapter.count(taskQuery(Q.where('bool1', false)))).toBe(2)\n\n    // no records\n    expectSortedEqual(await adapter.query(taskQuery(Q.where('text1', 'nope'))), [])\n    expect(await adapter.count(taskQuery(Q.where('text1', 'nope')))).toBe(0)\n    expect(await adapter.count(taskQuery(Q.where('order', 4)))).toBe(0)\n  })\n  it('compacts query results', async (_adapter) => {\n    let adapter = _adapter\n    const queryAll = () => adapter.query(taskQuery())\n\n    // add records, restart app\n    const s1 = mockTaskRaw({ id: 's1', order: 1 })\n    const s2 = mockTaskRaw({ id: 's2', order: 2 })\n    await adapter.batch([\n      ['create', 'tasks', s1],\n      ['create', 'tasks', s2],\n    ])\n    adapter = await adapter.testClone()\n\n    // first time we see it, get full object\n    expectSortedEqual(await queryAll(), [s1, s2])\n\n    // cached next time\n    expect(await queryAll()).toEqual(['s1', 's2'])\n\n    // updating doesn't change anything\n    await adapter.batch([['update', 'tasks', s2]])\n    expect(await queryAll()).toEqual(['s1', 's2'])\n\n    // records added via adapter get cached automatically\n    const s3 = mockTaskRaw({ id: 's3' })\n    await adapter.batch([['create', 'tasks', s3]])\n    expect(await queryAll()).toEqual(['s1', 's2', 's3'])\n\n    // remove and re-add and it appears again\n    await adapter.batch([['destroyPermanently', 'tasks', s3.id]])\n    expect(await queryAll()).toEqual(['s1', 's2'])\n\n    const s3New = mockTaskRaw({ id: 's3', bool1: true })\n    await adapter.batch([['create', 'tasks', s3New]])\n    expect(await queryAll()).toEqual(['s1', 's2', 's3'])\n\n    // restart app, doesn't have the records\n    adapter = await adapter.testClone()\n    expectSortedEqual(await queryAll(), [s1, s2, s3New])\n  })\n  it('sanitizes records on query', async (_adapter) => {\n    let adapter = _adapter\n    // Unsanitized raw!\n    const t1 = { id: 't1', text1: 'foo', order: 1 }\n    const t2 = { id: 't2', text2: 'bar', order: 2 }\n\n    await adapter.batch([\n      ['create', 'tasks', t1],\n      ['create', 'tasks', t2],\n    ])\n    adapter = await adapter.testClone()\n\n    expectSortedEqual(await adapter.query(taskQuery()), [\n      sanitizedRaw(t1, testSchema.tables.tasks),\n      sanitizedRaw(t2, testSchema.tables.tasks),\n    ])\n  })\n  it('returns a COPY of the data', async (_adapter) => {\n    let adapter = _adapter\n    const raw = mockTaskRaw({ id: 't1', text1: 'bar' })\n    const originalRaw = { ...raw }\n    await adapter.batch([['create', 'tasks', raw]])\n\n    adapter = await adapter.testClone()\n    const fetchedRaw = await adapter.find('tasks', 't1')\n\n    // data is equal but not the same reference\n    expect(fetchedRaw).toEqual(originalRaw)\n    expect(fetchedRaw).toEqual(raw)\n    expect(fetchedRaw).not.toBe(raw)\n\n    // make sure same is true for query\n    adapter = await adapter.testClone()\n    const [queriedRaw] = await adapter.query(taskQuery())\n    expect(queriedRaw).toEqual(originalRaw)\n    expect(queriedRaw).not.toBe(raw)\n  })\n  it('can query record IDs', async (_adapter) => {\n    let adapter = _adapter\n    await adapter.batch([\n      ['create', 'tasks', mockTaskRaw({ id: 's1', order: 1 })],\n      ['create', 'tasks', mockTaskRaw({ id: 's2', order: 2 })],\n    ])\n\n    // reloading adapter to make sure we don't accidentally just use normal query\n    adapter = await adapter.testClone()\n    expect(await adapter.queryIds(taskQuery())).toEqual(['s1', 's2'])\n    expect(await adapter.queryIds(taskQuery())).toEqual(['s1', 's2'])\n  })\n  it('can unsafely query raws with SQL', async (adapter, AdapterClass) => {\n    await adapter.batch([\n      ['create', 'tasks', mockTaskRaw({ id: 't1', order: 1, text1: 'hello' })],\n      ['create', 'tasks', mockTaskRaw({ id: 't2', order: 2, text1: 'foo' })],\n      ['create', 'tasks', mockTaskRaw({ id: 't3', order: 3, text1: 'bar' })],\n      ['create', 'tag_assignments', mockTagAssignmentRaw({ id: 'ta1', task_id: 't1', num1: 5 })],\n      ['create', 'tag_assignments', mockTagAssignmentRaw({ id: 'ta2', task_id: 't1', num1: 9 })],\n      ['create', 'tag_assignments', mockTagAssignmentRaw({ id: 'ta3', task_id: 't3', num1: 3 })],\n    ])\n\n    if (AdapterClass.name === 'SQLiteAdapter') {\n      expect(\n        await adapter.unsafeQueryRaw(\n          taskQuery(Q.unsafeSqlQuery('select * from tasks where text1 = ?', ['bad'])),\n        ),\n      ).toEqual([])\n      expect(\n        await adapter.unsafeQueryRaw(\n          taskQuery(\n            Q.unsafeSqlQuery(\n              'select tasks.text1, count(tag_assignments.id) as tags, sum(tag_assignments.num1) as magic from tasks' +\n                ' left join tag_assignments on tasks.id = tag_assignments.task_id' +\n                ' group by tasks.id' +\n                ' order by tasks.\"order\" desc',\n            ),\n          ),\n        ),\n      ).toEqual([\n        { text1: 'bar', tags: 1, magic: 3 },\n        { text1: 'foo', tags: 0, magic: null },\n        { text1: 'hello', tags: 2, magic: 14 },\n      ])\n    } else if (AdapterClass.name === 'LokiJSAdapter') {\n      expect(await adapter.unsafeQueryRaw(taskQuery(Q.unsafeLokiTransform(() => [])))).toEqual([])\n      expect(\n        await adapter.unsafeQueryRaw(\n          taskQuery(\n            Q.unsafeLokiTransform((raws, loki) =>\n              raws\n                .sort((a, b) => b.order - a.order)\n                .map((raw) => {\n                  const { id, text1 } = raw\n                  const assignments = loki\n                    .getCollection('tag_assignments')\n                    .find({ task_id: id })\n                    .map((ta) => ta.num1)\n                  return {\n                    text1,\n                    tags: assignments.length,\n                    magic: assignments.length ? assignments.reduce((a, b) => a + b) : null,\n                  }\n                }),\n            ),\n          ),\n        ),\n      ).toEqual([\n        { text1: 'bar', tags: 1, magic: 3 },\n        { text1: 'foo', tags: 0, magic: null },\n        { text1: 'hello', tags: 2, magic: 14 },\n      ])\n    }\n  })\n  it('can update records', async (_adapter) => {\n    let adapter = _adapter\n    const raw = mockTaskRaw({ id: 't1', text1: 'bar' })\n    await adapter.batch([['create', 'tasks', raw]])\n    raw.bool1 = true\n    raw.order = 2\n    await adapter.batch([['update', 'tasks', raw]])\n\n    adapter = await adapter.testClone()\n    const fetchedUpdatedRaw = await adapter.find('tasks', 't1')\n\n    // check raws are equal (but a copy)\n    expect(fetchedUpdatedRaw.bool1).toBe(true)\n    expect(fetchedUpdatedRaw.order).toBe(2)\n    expect(fetchedUpdatedRaw).toEqual(raw)\n    expect(fetchedUpdatedRaw).not.toBe(raw)\n  })\n  it('can mark records as deleted', async (adapter) => {\n    const m1 = mockTaskRaw({ id: 't1', text1: 'bar1' })\n    await adapter.batch([['create', 'tasks', m1]])\n    expect(await adapter.query(taskQuery())).toEqual(['t1'])\n\n    await adapter.batch([['markAsDeleted', 'tasks', m1.id]])\n    expect(await adapter.query(taskQuery())).toEqual([])\n\n    // Check that the record is removed from cache\n    // HACK: Set _status to reveal the record in query (if record was cached, there would only be ID)\n    m1._status = 'synced'\n    await adapter.batch([['update', 'tasks', m1]])\n    expectSortedEqual(await adapter.query(taskQuery()), [m1])\n  })\n  it('can destroy records permanently', async (adapter) => {\n    const m1 = mockTaskRaw({ id: 't1', text1: 'bar1' })\n    const m2 = mockTaskRaw({ id: 't2', text1: 'bar2' })\n    await adapter.batch([\n      ['create', 'tasks', m1],\n      ['create', 'tasks', m2],\n    ])\n    expect(await adapter.query(taskQuery())).toEqual(['t1', 't2'])\n\n    await adapter.batch([\n      ['destroyPermanently', 'tasks', m1.id],\n      ['markAsDeleted', 'tasks', m2.id],\n    ])\n    expect(await adapter.query(taskQuery())).toEqual([])\n    await adapter.batch([['destroyPermanently', 'tasks', m2.id]])\n    expect(await adapter.query(taskQuery())).toEqual([])\n  })\n  it('can destroy permanently records already destroyed', async (adapter) => {\n    const m1 = mockTaskRaw({ id: 't1', text1: 'bar1' })\n    await adapter.batch([['create', 'tasks', m1]])\n    expect(await adapter.query(taskQuery())).toEqual(['t1'])\n\n    await adapter.batch([['destroyPermanently', 'tasks', m1.id]])\n    expect(await adapter.query(taskQuery())).toEqual([])\n\n    // this should not throw even though m1 is not present\n    await adapter.batch([['destroyPermanently', 'tasks', m1.id]])\n  })\n  it('can get deleted record ids', async (adapter) => {\n    const m1 = mockTaskRaw({ id: 't1', text1: 'bar1', order: 1 })\n    const m2 = mockTaskRaw({ id: 't2', text1: 'bar2', order: 2 })\n    await adapter.batch([\n      ['create', 'tasks', m1],\n      ['markAsDeleted', 'tasks', m1.id],\n      ['create', 'tasks', m2],\n      ['create', 'tasks', mockTaskRaw({ id: 't3', text1: 'bar3' })],\n      ['markAsDeleted', 'tasks', m2.id],\n    ])\n    expectSortedEqual(await adapter.getDeletedRecords('tasks'), ['t2', 't1'])\n  })\n  it('can destroy deleted records', async (adapter) => {\n    const m1 = mockTaskRaw({ id: 't1', text1: 'bar1', order: 1 })\n    const m2 = mockTaskRaw({ id: 't2', text1: 'bar2', order: 2 })\n    const m3 = mockTaskRaw({ id: 't3', text1: 'bar3', order: 3 })\n    await adapter.batch([\n      ['create', 'tasks', m1],\n      ['create', 'tasks', m2],\n      ['create', 'tasks', m3],\n      ['create', 'tasks', mockTaskRaw({ id: 't4', text1: 'bar4' })],\n    ])\n    await adapter.batch([\n      ['markAsDeleted', 'tasks', m1.id],\n      ['markAsDeleted', 'tasks', m2.id],\n      ['markAsDeleted', 'tasks', m3.id],\n    ])\n\n    await adapter.destroyDeletedRecords('tasks', ['t1', 't2'])\n    expectSortedEqual(await adapter.getDeletedRecords('tasks'), ['t3'])\n    expectSortedEqual(await adapter.query(taskQuery()), ['t4'])\n    expect(await adapter.find('tasks', 't1')).toBeNull()\n    expect(await adapter.find('tasks', 't2')).toBeNull()\n  })\n  it('destroyDeletedRecords can handle unsafe strings', async (adapter) => {\n    const m1 = mockTaskRaw({ id: 't1', text1: 'bar1', order: 1 })\n    const m2 = mockTaskRaw({ id: 't2', text1: 'bar2', order: 2 })\n    const m3 = mockTaskRaw({ id: 't3', text1: 'bar3', order: 3 })\n    await adapter.batch([\n      ['create', 'tasks', m1],\n      ['create', 'tasks', m2],\n      ['create', 'tasks', m3],\n    ])\n    await adapter.batch([\n      ['markAsDeleted', 'tasks', m1.id],\n      ['markAsDeleted', 'tasks', m2.id],\n      ['markAsDeleted', 'tasks', m3.id],\n    ])\n\n    await adapter.destroyDeletedRecords('tasks', [\"') or 1=1 --\"])\n    expectSortedEqual(await adapter.getDeletedRecords('tasks'), ['t1', 't2', 't3'])\n    expectSortedEqual(await adapter.query(taskQuery()), [])\n\n    await adapter.destroyDeletedRecords('tasks', [\"'); insert into tasks (id) values ('t4') --\"])\n    expectSortedEqual(await adapter.query(taskQuery()), [])\n  })\n  it('can run mixed batches', async (_adapter) => {\n    let adapter = _adapter\n    const m1 = mockTaskRaw({ id: 't1', text1: 'bar' })\n    const m3 = mockTaskRaw({ id: 't3' })\n    const m4 = mockTaskRaw({ id: 't4' })\n\n    await adapter.batch([['create', 'tasks', m1]])\n\n    m1.bool1 = true\n    const m2 = mockTaskRaw({ id: 't2', text1: 'bar', bool2: true, order: 2 })\n\n    await adapter.batch([\n      ['create', 'tasks', m3],\n      ['create', 'tasks', m4],\n      ['destroyPermanently', 'tasks', m3.id],\n      ['update', 'tasks', m1],\n      ['create', 'tasks', m2],\n      ['markAsDeleted', 'tasks', m4.id],\n    ])\n\n    adapter = await adapter.testClone()\n    const fetched1 = await adapter.find('tasks', 't1')\n    expect(fetched1.bool1).toBe(true)\n    expect(fetched1).toEqual(m1)\n\n    const fetched2 = await adapter.find('tasks', 't2')\n    expect(fetched2.bool2).toBe(true)\n\n    expect(await adapter.find('tasks', 't3')).toBeNull()\n    expect(await adapter.query(taskQuery())).toEqual(['t1', 't2'])\n\n    expect(await adapter.getDeletedRecords('tasks')).toEqual(['t4'])\n  })\n  it('batches are transactional', async (adapter, AdapterClass) => {\n    // sanity check\n    await adapter.batch([['create', 'tasks', mockTaskRaw({ id: 't1' })]])\n    expect(await adapter.query(taskQuery())).toEqual(['t1'])\n\n    await expectToRejectWithMessage(\n      adapter.batch([\n        ['create', 'tasks', mockTaskRaw({ id: 't2' })],\n        ['create', 'tasks', mockTaskRaw({ id: 't2' })], // duplicate\n      ]),\n      AdapterClass.name === 'SQLiteAdapter'\n        ? /UNIQUE constraint failed: tasks.id/\n        : /Duplicate key for property id: t2/,\n    )\n    if (AdapterClass.name !== 'LokiJSAdapter') {\n      // Regrettably, Loki is not transactional\n      expect(await adapter.query(taskQuery())).toEqual(['t1'])\n    }\n  })\n  it('can run sync-like flow', async (adapter) => {\n    const queryAll = () => adapter.query(taskQuery())\n\n    const m1 = mockTaskRaw({ id: 't1', text1: 'bar1', order: 1 })\n    const m2 = mockTaskRaw({ id: 't2', text1: 'bar2', order: 2 })\n    const m3 = mockTaskRaw({ id: 't3', text1: 'bar3', order: 3 })\n\n    await adapter.batch([\n      ['create', 'tasks', m1],\n      ['create', 'tasks', m2],\n      ['create', 'tasks', m3],\n      ['create', 'tasks', mockTaskRaw({ id: 't4', text1: 'bar4' })],\n      ['markAsDeleted', 'tasks', m1.id],\n      ['markAsDeleted', 'tasks', m3.id],\n    ])\n\n    // pull server changes - server wants us to delete some records\n    await adapter.batch([\n      ['destroyPermanently', 'tasks', m1.id],\n      ['destroyPermanently', 'tasks', m2.id],\n    ])\n    expect(await queryAll()).toHaveLength(1)\n\n    // push local changes\n    const toDelete = await adapter.getDeletedRecords('tasks')\n    expect(toDelete).toEqual(['t3'])\n    await adapter.destroyDeletedRecords('tasks', toDelete)\n\n    expect(await adapter.getDeletedRecords('tasks')).toHaveLength(0)\n    expect(await queryAll()).toHaveLength(1)\n  })\n  it(`can unsafely load from sync JSON`, async (adapter, AdapterClass, extraAdapterOptions, platform) => {\n    if (\n      !(\n        AdapterClass.name === 'SQLiteAdapter' &&\n        adapter.underlyingAdapter._dispatcherType === 'jsi' &&\n        platform !== 'windows'\n      )\n    ) {\n      await expectToRejectWithMessage(\n        adapter.unsafeLoadFromSync(0),\n        'unsafeLoadFromSync unavailable',\n      )\n      return\n    }\n\n    const loadFromSync = async (json) => {\n      const id = Math.round(Math.random() * 1000 * 1000 * 1000)\n      await adapter.provideSyncJson(id, JSON.stringify(json))\n      return adapter.unsafeLoadFromSync(id)\n    }\n\n    await loadFromSync({ changes: {} })\n    expect(\n      await loadFromSync({\n        changes: { sync_tests: { created: [], updated: [], deleted: [] } },\n        timestamp: 1000,\n      }),\n    ).toEqual({ timestamp: 1000 })\n\n    const query = modelQuery(MockSyncTestRecord).serialize()\n    expect(await adapter.unsafeQueryRaw(query)).toHaveLength(0)\n\n    const { expectedSanitizations } = require('../../RawRecord/__tests__/helpers')\n    await loadFromSync({\n      changes: {\n        sync_tests: {\n          updated: [\n            { id: 't1' },\n            {\n              id: 't2',\n              str: 'ab',\n              _changed: 'abc',\n              _status: 'updated',\n              this_column_does_not_exist: 'blaaagh',\n            },\n            { id: 't3', str: 'hy', strN: 'true', num: 3.141592137, bool: null, boolN: false },\n            { id: 't4', num: 1623666158603 },\n          ],\n          created: expectedSanitizations.map(({ value }, i) => ({\n            // NOTE: Intentionally in wrong order\n            num: value,\n            str: value,\n            boolN: value,\n            id: `x${i}`,\n            strN: value,\n            numN: value,\n            bool: value,\n          })),\n        },\n        tasks: {\n          created: [{ id: 't1', text1: 'hello' }],\n        },\n        this_table_does_not_exist: {\n          created: [],\n        },\n      },\n    })\n    const d = { _status: 'synced', _changed: '' }\n    const sqlBool = (value) => {\n      if (value === true) {\n        return 1\n      } else if (value === false) {\n        return 0\n      }\n      return value\n    }\n    expect(await adapter.unsafeQueryRaw(query)).toEqual([\n      { id: 't1', ...d, str: '', strN: null, num: 0, numN: null, bool: 0, boolN: null },\n      { id: 't2', ...d, str: 'ab', strN: null, num: 0, numN: null, bool: 0, boolN: null },\n      { id: 't3', ...d, str: 'hy', strN: 'true', num: 3.141592137, numN: null, bool: 0, boolN: 0 },\n      { id: 't4', ...d, str: '', strN: null, num: 1623666158603, numN: null, bool: 0, boolN: null },\n      ...expectedSanitizations.map((values, i) => ({\n        id: `x${i}`,\n        _status: 'synced',\n        _changed: '',\n        str: values.string[0],\n        strN: values.string[1],\n        num: values.number[0],\n        numN: values.number[1],\n        bool: sqlBool(values.boolean[0]),\n        boolN: sqlBool(values.boolean[1]),\n      })),\n    ])\n    expect(await adapter.query(taskQuery())).toEqual([\n      mockTaskRaw({ id: 't1', text1: 'hello', _status: 'synced' }),\n    ])\n    await expectToRejectWithMessage(\n      loadFromSync({ changes: { tasks: { deleted: ['t1', 't2'] } } }),\n      'expected deleted field to be empty',\n    )\n    await expectToRejectWithMessage(\n      loadFromSync({ changes: { tasks: { wat: [] } } }),\n      'bad changeset field',\n    )\n  })\n  it(`can return residual JSON from sync JSON`, async (adapter, AdapterClass, extraAdapterOptions, platform) => {\n    if (\n      !(\n        AdapterClass.name === 'SQLiteAdapter' &&\n        adapter.underlyingAdapter._dispatcherType === 'jsi' &&\n        platform !== 'windows'\n      )\n    ) {\n      await expectToRejectWithMessage(\n        adapter.unsafeLoadFromSync(0),\n        'unsafeLoadFromSync unavailable',\n      )\n      return\n    }\n\n    const check = async (obj) => {\n      const id = Math.round(Math.random() * 1000 * 1000 * 1000)\n      await adapter.provideSyncJson(id, JSON.stringify({ changes: {}, ...obj }))\n      const result = await adapter.unsafeLoadFromSync(id)\n      expect(result).toEqual({ ...obj })\n    }\n\n    await check({})\n    await check({ foo: 'bar', num: 0, num1: 1, float: 3.14, nul: null, yes: true, no: false })\n    await check({ timestamp: 1623666158603 })\n    await check({ messages: ['foo', 'bar', 'baz'] })\n    await check({ foo: { bar: [1, 2, 3], baz: 'blah' } })\n    await check({ naughty: 'foo{\\nbar\\0' })\n    await check({ _naughty: { '_naughty\\n{\\0': 'yes' } })\n  })\n  it(`destroys provided jsons after being used`, async (adapter, AdapterClass, extraAdapterOptions, platform) => {\n    if (\n      !(\n        AdapterClass.name === 'SQLiteAdapter' &&\n        adapter.underlyingAdapter._dispatcherType === 'jsi' &&\n        platform !== 'windows'\n      )\n    ) {\n      await expectToRejectWithMessage(\n        adapter.provideSyncJson(0, '{}'),\n        'provideSyncJson unavailable',\n      )\n      return\n    }\n\n    await adapter.provideSyncJson(\n      2137,\n      JSON.stringify({ changes: { tasks: { created: [{ id: 't1' }] } } }),\n    )\n\n    await adapter.unsafeLoadFromSync(2137)\n    expect(await adapter.unsafeQueryRaw(taskQuery())).toHaveLength(1)\n\n    await expectToRejectWithMessage(\n      adapter.unsafeLoadFromSync(2137),\n      'Sync json 2137 does not exist',\n    )\n  })\n  it('can unsafely reset database', async (adapter) => {\n    await adapter.batch([['create', 'tasks', mockTaskRaw({ id: 't1', text1: 'bar', order: 1 })]])\n    await adapter.unsafeResetDatabase()\n    await expect(await adapter.count(taskQuery())).toBe(0)\n\n    // check that reset database still works\n    await adapter.batch([['create', 'tasks', mockTaskRaw({ id: 't2', text1: 'baz', order: 2 })]])\n    expect(await adapter.count(taskQuery())).toBe(1)\n  })\n  it('queues actions correctly', async (adapter) => {\n    function queryable(promise) {\n      let isSettled = false\n      const result = promise.then(\n        (value) => {\n          isSettled = true\n          return value\n        },\n        (e) => {\n          isSettled = true\n          throw e\n        },\n      )\n      result.isSettled = () => isSettled\n      return result\n    }\n\n    adapter.batch([['create', 'tasks', mockTaskRaw({ id: 't1', text1: 'foo', order: 1 })]])\n    const find1Promise = queryable(adapter.find('tasks', 't1'))\n    const find2Promise = queryable(adapter.find('tasks', 't2'))\n    adapter.batch([['create', 'tasks', mockTaskRaw({ id: 't2', text1: 'bar', order: 2 })]])\n    const queryPromise = queryable(adapter.query(taskQuery()))\n    const find2Promise2 = queryable(adapter.find('tasks', 't2'))\n\n    await find2Promise2\n\n    expect(find1Promise.isSettled()).toBe(true)\n    expect(find2Promise.isSettled()).toBe(true)\n    expect(queryPromise.isSettled()).toBe(true)\n    expect(find2Promise2.isSettled()).toBe(true)\n    expect(await find1Promise).toBe('t1')\n    expect(await find2Promise).toBe(null)\n    expect(await queryPromise).toEqual(['t1', 't2'])\n    expect(await find2Promise2).toBe('t2')\n\n    // unsafeResetDatabase is the only action in loki that's necessarily asynchronous even in sync mode\n    const batchPromise = queryable(\n      adapter.batch([['create', 'tasks', mockTaskRaw({ id: 't3', text1: 'bar', order: 2 })]]),\n    )\n    adapter.unsafeResetDatabase()\n    adapter.batch([['create', 'tasks', mockTaskRaw({ id: 't1', text1: 'bar', order: 2 })]])\n    const queryPromise2 = adapter.query(taskQuery())\n\n    expect(await queryPromise2).toEqual(['t1'])\n    expect(batchPromise.isSettled()).toBe(true)\n  })\n  it('fails on bad queries, creates, updates, deletes', async (adapter) => {\n    const badQuery = new Query({ modelClass: BadModel }, []).serialize()\n    await expect(adapter.query(badQuery)).rejects.toBeInstanceOf(Error)\n    await expect(adapter.count(badQuery)).rejects.toBeInstanceOf(Error)\n\n    const record1 = new BadModel({ table: 'nonexisting' }, { id: 't1' })\n    await expect(adapter.batch([['create', record1]])).rejects.toBeInstanceOf(Error)\n\n    await expect(adapter.batch(['create', record1])).rejects.toBeInstanceOf(Error)\n\n    // TODO: Fix slight inconsistencies between loki & sqlite\n    // if (platform.isWeb) {\n    // await expect(\n    //   adapter.batch([['update', 'tasks', mockTaskRaw({ id: 'nonexists' })]]),\n    // ).rejects.toBeInstanceOf(Error)\n\n    // TODO: Mark as deleted?\n  })\n  it(`can unsafely execute raw commands`, async (adapter, AdapterClass) => {\n    if (AdapterClass.name === 'SQLiteAdapter') {\n      await adapter.unsafeExecute({\n        sqls: [['insert into tasks (id, text1) values (?, ?)', ['rec1', 'bar']]],\n      })\n    } else {\n      await adapter.unsafeExecute({\n        loki: (loki) => {\n          loki.getCollection('tasks').insert([{ id: 'rec1', text1: 'bar' }])\n        },\n      })\n    }\n\n    const record = await adapter.find('tasks', 'rec1')\n    expect(record).toMatchObject({ id: 'rec1', text1: 'bar' })\n  })\n  it('supports LocalStorage', async (adapter) => {\n    // non-existent fields return undefined\n    expect(await adapter.getLocal('nonexisting')).toBeNull()\n\n    // set\n    await adapter.setLocal('test1', 'val1')\n    expect(await adapter.getLocal('test1')).toBe('val1')\n\n    // update\n    await adapter.setLocal('test1', 'val2')\n    expect(await adapter.getLocal('test1')).toBe('val2')\n\n    // delete\n    await adapter.removeLocal('test1')\n    expect(await adapter.getLocal('test1')).toBeNull()\n\n    // can be safely reassigned\n    await adapter.setLocal('test1', 'val3')\n    expect(await adapter.getLocal('test1')).toBe('val3')\n\n    // can use keywords as keys\n    // can be safely reassigned\n    await adapter.setLocal('order', '3')\n    expect(await adapter.getLocal('order')).toBe('3')\n\n    // deleting already undefined is safe\n    await adapter.removeLocal('nonexisting')\n  })\n  it('only supports strings as LocalStorage values', async (adapter) => {\n    const expectError = (value) =>\n      expectToRejectWithMessage(adapter.setLocal('test', value), 'must be a string')\n    await expectError(0)\n    await expectError(3.14)\n    await expectError(true)\n    await expectError(null)\n    await expectError(NaN)\n    await expectError([])\n    await expectError({})\n  })\n  it('supports naughty strings in LocalStorage', async (adapter, AdapterClass, extraAdapterOptions, platform) => {\n    // eslint-disable-next-line no-restricted-syntax\n    for (const key of naughtyStrings) {\n      // console.log(key)\n      // KNOWN ISSUE: non-JSI adapter implementation gets confused by this (it's a BOM mark)\n      if (\n        AdapterClass.name === 'SQLiteAdapter' &&\n        !extraAdapterOptions.jsi &&\n        ((key === bigEndianByteOrderMark && ['android', 'ios'].includes(platform)) ||\n          (key === littleEndianByteOrderMark && platform === 'android'))\n      ) {\n        // eslint-disable-next-line no-await-in-loop\n        await adapter.setLocal(key, key)\n        // eslint-disable-next-line no-await-in-loop\n        expect(await adapter.getLocal(key)).not.toBe(key) // if this fails, it means the issue's been fixed\n      } else {\n        // eslint-disable-next-line no-await-in-loop\n        await adapter.setLocal(key, key)\n        // eslint-disable-next-line no-await-in-loop\n        expect(await adapter.getLocal(key)).toBe(key)\n      }\n    }\n  })\n  it('does not fail on (weirdly named) table named that are SQLite keywords', async (adapter) => {\n    await Promise.all(\n      ['where', 'values', 'set', 'drop', 'update'].map(async (tableName) => {\n        await adapter.batch([['create', tableName, { id: 'i1' }]])\n        await adapter.batch([['update', tableName, { id: 'i1' }]])\n        await adapter.batch([['markAsDeleted', tableName, 'i1']])\n        await adapter.batch([['create', tableName, { id: 'i2' }]])\n        await adapter.find(tableName, 'i2')\n        await adapter.query(modelQuery({ table: tableName }))\n        await adapter.count(modelQuery({ table: tableName }))\n        await adapter.getDeletedRecords(tableName)\n        await adapter.destroyDeletedRecords(tableName, ['i1'])\n        await adapter.batch([['destroyPermanently', tableName, 'i2']])\n        await adapter.getLocal(tableName)\n        await adapter.setLocal(tableName, tableName)\n        await adapter.removeLocal(tableName)\n      }),\n    )\n  })\n  it('fails quickly on non-existing table names', async (adapter) => {\n    const table = 'does-not-exist'\n    const msg = /table name '.*' does not exist/\n    await expectToRejectWithMessage(adapter.find(table, 'i'), msg)\n    await expectToRejectWithMessage(adapter.query(modelQuery({ table })), msg)\n    await expectToRejectWithMessage(adapter.count(modelQuery({ table })), msg)\n    await expectToRejectWithMessage(adapter.batch([['create', table, { id: 'i1' }]]), msg)\n    await expectToRejectWithMessage(adapter.batch([['update', table, { id: 'i1' }]]), msg)\n    await expectToRejectWithMessage(adapter.batch([['markAsDeleted', table, 'i1']]), msg)\n    await expectToRejectWithMessage(adapter.batch([['destroyPermanently', table, 'i2']]), msg)\n    await expectToRejectWithMessage(adapter.getDeletedRecords(table), msg)\n    await expectToRejectWithMessage(adapter.destroyDeletedRecords(table, []), msg)\n  })\n  it('migrates database between versions', async (_adapter, AdapterClass, extraAdapterOptions) => {\n    // launch app in one version\n    const taskColumnsV3 = [{ name: 'num1', type: 'number' }]\n    const projectColumnsV3 = [{ name: 'text1', type: 'string' }]\n    const testSchemaV3 = appSchema({\n      version: 3,\n      tables: [\n        tableSchema({ name: 'tasks', columns: taskColumnsV3 }),\n        tableSchema({ name: 'projects', columns: projectColumnsV3 }),\n      ],\n    })\n\n    let adapter = new DatabaseAdapterCompat(\n      new AdapterClass({\n        schema: testSchemaV3,\n        migrations: schemaMigrations({ migrations: [{ toVersion: 3, steps: [] }] }),\n        ...extraAdapterOptions,\n      }),\n    )\n\n    // add data\n    await adapter.batch([\n      ['create', 'tasks', { id: 't1', num1: 10 }],\n      ['create', 'tasks', { id: 't2', num1: 20 }],\n    ])\n\n    // can't add to tables that don't exist yet\n    await expect(\n      adapter.batch([['create', 'tag_assignments', { id: 'tt1', text1: 'hello' }]]),\n    ).rejects.toBeInstanceOf(Error)\n\n    // migrate to new version\n    const taskColumnsV5 = [\n      { name: 'test_string', type: 'string' },\n      { name: 'test_string_optional', type: 'string', isOptional: true },\n      { name: 'test_number', type: 'number' },\n      { name: 'test_number_optional', type: 'number', isOptional: true },\n      { name: 'test_boolean', type: 'boolean' },\n      { name: 'test_boolean_optional', type: 'boolean', isOptional: true },\n    ]\n    const projectColumnsV5 = [{ name: 'text2', type: 'string', isIndexed: true }]\n    const tagAssignmentSchema = {\n      name: 'tag_assignments',\n      columns: [{ name: 'text1', type: 'string' }],\n    }\n\n    const testSchemaV5 = appSchema({\n      version: 5,\n      tables: [\n        tableSchema({\n          name: 'tasks',\n          columns: [...taskColumnsV3, ...taskColumnsV5],\n        }),\n        tableSchema({\n          name: 'projects',\n          columns: [...projectColumnsV3, ...projectColumnsV5],\n        }),\n        tableSchema(tagAssignmentSchema),\n      ],\n    })\n    const migrationsV5 = schemaMigrations({\n      migrations: [\n        {\n          toVersion: 5,\n          steps: [addColumns({ table: 'tasks', columns: taskColumnsV5 })],\n        },\n        {\n          toVersion: 4,\n          steps: [\n            createTable(tagAssignmentSchema),\n            addColumns({ table: 'projects', columns: projectColumnsV5 }),\n          ],\n        },\n        {\n          toVersion: 3,\n          steps: [\n            createTable({\n              name: 'will_not_be_created',\n              columns: [{ name: 'num1', type: 'number' }],\n            }),\n          ],\n        },\n      ],\n    })\n    adapter = await adapter.testClone({\n      schema: testSchemaV5,\n      migrations: migrationsV5,\n    })\n\n    // check that the data is still there\n    expect(await adapter.count(new Query({ modelClass: MockTask }, []))).toBe(2)\n\n    // check if new columns were populated with appropriate default values\n    const checkTaskColumn = (columnName, expectedValue) =>\n      new Query({ modelClass: MockTask }, [Q.where(columnName, expectedValue)]).serialize()\n\n    expect(await adapter.count(checkTaskColumn('test_string', ''))).toBe(2)\n    expect(await adapter.count(checkTaskColumn('test_string_optional', null))).toBe(2)\n    expect(await adapter.count(checkTaskColumn('test_number', 0))).toBe(2)\n    expect(await adapter.count(checkTaskColumn('test_number_optional', null))).toBe(2)\n    expect(await adapter.count(checkTaskColumn('test_boolean', false))).toBe(2)\n    expect(await adapter.count(checkTaskColumn('test_boolean_optional', null))).toBe(2)\n\n    // check I can use new table and columns\n    await adapter.batch([\n      ['create', 'tag_assignments', { id: 'tt2', text1: 'hello' }],\n      ['create', 'projects', { id: 'p1', text1: 'hey', text2: 'foo' }],\n      [\n        'create',\n        'tasks',\n        { id: 't3', test_string: 'hey', test_number: 2, test_boolean_optional: true },\n      ],\n    ])\n\n    // check that out-of-range migration was not executed\n    await expect(\n      adapter.batch([['create', 'will_not_be_created', { id: 'w1', text1: 'hello' }]]),\n    ).rejects.toBeInstanceOf(Error)\n\n    // make sure new fields actually work and that migrations won't be applied again\n    adapter = await adapter.testClone()\n\n    const p1 = await adapter.find('projects', 'p1')\n    expect(p1.text2).toBe('foo')\n\n    const t1 = await adapter.find('tasks', 't3')\n    expect(t1.test_string).toBe('hey')\n    expect(t1.test_number).toBe(2)\n    expect(t1.test_boolean).toBe(false)\n\n    const tt1 = await adapter.find('tag_assignments', 'tt2')\n    expect(tt1.text1).toBe('hello')\n  })\n  it(`can perform empty migrations (regression test)`, async (_adapter, AdapterClass, extraAdapterOptions) => {\n    let adapter = new DatabaseAdapterCompat(\n      new AdapterClass({\n        schema: { ...testSchema, version: 1 },\n        migrations: schemaMigrations({ migrations: [] }),\n        ...extraAdapterOptions,\n      }),\n    )\n\n    await adapter.batch([['create', 'tasks', mockTaskRaw({ id: 't1', text1: 'foo' })]])\n    expect(await adapter.count(taskQuery())).toBe(1)\n\n    // Perform an empty migration (no steps, just version bump)\n    adapter = await adapter.testClone({\n      schema: { ...testSchema, version: 2 },\n      migrations: schemaMigrations({ migrations: [{ toVersion: 2, steps: [] }] }),\n    })\n\n    // check that migration worked, no data lost\n    expect(await adapter.count(taskQuery())).toBe(1)\n    expect((await adapter.find('tasks', 't1')).text1).toBe('foo')\n  })\n  it(`resets database when it's newer than app schema`, async (_adapter, AdapterClass, extraAdapterOptions) => {\n    // launch newer version of the app\n    let adapter = new DatabaseAdapterCompat(\n      new AdapterClass({\n        schema: { ...testSchema, version: 3 },\n        migrations: schemaMigrations({ migrations: [{ toVersion: 3, steps: [] }] }),\n        ...extraAdapterOptions,\n      }),\n    )\n\n    await adapter.batch([['create', 'tasks', mockTaskRaw({})]])\n    expect(await adapter.count(taskQuery())).toBe(1)\n\n    // launch older version of the app\n    adapter = await adapter.testClone({\n      schema: { ...testSchema, version: 1 },\n      migrations: schemaMigrations({ migrations: [] }),\n    })\n\n    expect(await adapter.count(taskQuery())).toBe(0)\n    await adapter.batch([['create', 'tasks', mockTaskRaw({})]])\n    expect(await adapter.count(taskQuery())).toBe(1)\n  })\n  it('resets database when there are no available migrations', async (_adapter, AdapterClass, extraAdapterOptions) => {\n    // launch older version of the app\n    let adapter = new DatabaseAdapterCompat(\n      new AdapterClass({\n        schema: { ...testSchema, version: 1 },\n        migrations: schemaMigrations({ migrations: [] }),\n        ...extraAdapterOptions,\n      }),\n    )\n\n    await adapter.batch([['create', 'tasks', mockTaskRaw({})]])\n    expect(await adapter.count(taskQuery())).toBe(1)\n\n    // launch newer version of the app, without migrations available\n    adapter = await adapter.testClone({\n      schema: { ...testSchema, version: 3 },\n      migrations: schemaMigrations({ migrations: [{ toVersion: 3, steps: [] }] }),\n    })\n\n    expect(await adapter.count(taskQuery())).toBe(0)\n    await adapter.batch([['create', 'tasks', mockTaskRaw({})]])\n    expect(await adapter.count(taskQuery())).toBe(1)\n  })\n  it('errors when migration fails', async (_adapter, AdapterClass, extraAdapterOptions) => {\n    // launch older version of the app\n    let adapter = new DatabaseAdapterCompat(\n      new AdapterClass({\n        schema: { ...testSchema, version: 1 },\n        migrations: schemaMigrations({ migrations: [] }),\n        ...extraAdapterOptions,\n      }),\n    )\n\n    await adapter.batch([['create', 'tasks', mockTaskRaw({})]])\n    expect(await adapter.count(taskQuery())).toBe(1)\n    // launch newer version of the app with a migration that will fail\n    const adapterPromise = adapter.testClone({\n      schema: { ...testSchema, version: 2 },\n      migrations: schemaMigrations({\n        migrations: [\n          {\n            toVersion: 2,\n            steps: [\n              // with SQLite, trying to create a duplicate table will fail, but Loki will just ignore it\n              // so let's insert something that WILL fail\n              AdapterClass.name === 'LokiJSAdapter'\n                ? { type: 'bad_type' }\n                : createTable({ name: 'tasks', columns: [] }),\n            ],\n          },\n        ],\n      }),\n    })\n\n    // TODO: Make the SQLite, LokiJS adapter behavior consistent\n    if (AdapterClass.name === 'LokiJSAdapter') {\n      adapter = await adapterPromise\n      await expect(adapter.count(taskQuery())).rejects.toBeInstanceOf(Error)\n      await expect(adapter.batch([['create', 'tasks', mockTaskRaw({})]])).rejects.toBeInstanceOf(\n        Error,\n      )\n    } else {\n      await expect(adapterPromise).rejects.toBeInstanceOf(Error)\n    }\n  })\n  it('can actually save and read from file system', async (_adapter, AdapterClass, extraAdapterOptions, platform) => {\n    if (AdapterClass.name === 'LokiJSAdapter') {\n      // Loki is tested differently\n      return\n    }\n\n    const fileName =\n      platform === 'node'\n        ? `.tmp/testDatabase-${Math.random()}.db`\n        : `testDatabase-${Math.random()}.db`\n\n    const adapter = new DatabaseAdapterCompat(\n      new AdapterClass({\n        ...extraAdapterOptions,\n        dbName: fileName,\n        schema: { ...testSchema, version: 1 },\n      }),\n    )\n    expect(adapter.dbName).toBe(fileName)\n\n    // sanity check\n    expect(await adapter.count(taskQuery())).toBe(0)\n    await adapter.batch([['create', 'tasks', mockTaskRaw({})]])\n    expect(await adapter.count(taskQuery())).toBe(1)\n\n    // open second db\n    const adapter2 = new DatabaseAdapterCompat(\n      new AdapterClass({\n        ...extraAdapterOptions,\n        dbName: fileName,\n        schema: { ...testSchema, version: 1 },\n      }),\n    )\n\n    expect(await adapter2.count(taskQuery())).toBe(1)\n\n    // reset\n    await adapter2.unsafeResetDatabase()\n    expect(await adapter2.count(taskQuery())).toBe(0)\n\n    // open third db\n    const adapter3 = new DatabaseAdapterCompat(\n      new AdapterClass({\n        ...extraAdapterOptions,\n        dbName: fileName,\n        schema: { ...testSchema, version: 1 },\n      }),\n    )\n\n    expect(await adapter3.count(taskQuery())).toBe(0)\n  })\n  matchTests.forEach((testCase) =>\n    it(`[shared match test] ${testCase.name}`, async (adapter, AdapterClass) => {\n      const perform = () => performMatchTest(adapter, testCase)\n      const shouldSkip =\n        (AdapterClass.name === 'LokiJSAdapter' && testCase.skipLoki) ||\n        (AdapterClass.name === 'SQLiteAdapter' && testCase.skipSqlite)\n      if (shouldSkip) {\n        await expect(perform()).rejects.toBeInstanceOf(Error)\n      } else {\n        await perform()\n      }\n    }),\n  )\n  joinTests.forEach((testCase) =>\n    it(`[shared join test] ${testCase.name}`, async (adapter, AdapterClass) => {\n      const perform = () => performJoinTest(adapter, testCase)\n      const shouldSkip =\n        (AdapterClass.name === 'LokiJSAdapter' && testCase.skipLoki) ||\n        (AdapterClass.name === 'SQLiteAdapter' && testCase.skipSqlite)\n      if (shouldSkip) {\n        await expect(perform()).rejects.toBeInstanceOf(Error)\n      } else {\n        await perform()\n      }\n    }),\n  )\n  it('[shared match test] can match strings from big-list-of-naughty-strings', async (adapter, AdapterClass, extraAdapterOptions, platform) => {\n    // eslint-disable-next-line no-restricted-syntax\n    for (const testCase of naughtyMatchTests) {\n      // console.log(testCase.name)\n\n      // KNOWN ISSUE: non-JSI adapter implementation gets confused by this (it's a BOM mark)\n      const naughtyString = testCase.matching[0].text1\n      if (\n        AdapterClass.name === 'SQLiteAdapter' &&\n        !extraAdapterOptions.jsi &&\n        ((naughtyString === bigEndianByteOrderMark && ['android', 'ios'].includes(platform)) ||\n          (naughtyString === littleEndianByteOrderMark && platform === 'android'))\n      ) {\n        // eslint-disable-next-line no-console\n        console.warn('skip check for a BOM naughty string - known failing test')\n      } else {\n        // eslint-disable-next-line no-await-in-loop\n        await performMatchTest(adapter, testCase)\n      }\n    }\n  })\n  it('can store and retrieve large numbers (regression test)', async (_adapter) => {\n    // NOTE: matcher test didn't catch it because both insert and query has the same bug\n    let adapter = _adapter\n    const number = 1590485104033\n    await adapter.batch([['create', 'tasks', { id: 'm1', num1: number }]])\n    // launch app again\n    adapter = await adapter.testClone()\n    const record = await adapter.find('tasks', 'm1')\n    expect(record.num1).toBe(number)\n  })\n  it('can store and retrieve naughty strings exactly', async (_adapter, AdapterClass, extraAdapterOptions, platform) => {\n    let adapter = _adapter\n    const indexedNaughtyStrings = naughtyStrings.map((string, i) => [`id${i}`, string])\n    await adapter.batch(\n      indexedNaughtyStrings.map(([id, string]) => ['create', 'tasks', { id, text1: string }]),\n    )\n\n    // launch app again\n    adapter = await adapter.testClone()\n    const allRecords = await adapter.query(taskQuery())\n\n    indexedNaughtyStrings.forEach(([id, string]) => {\n      const record = allRecords.find((model) => model.id === id)\n      // console.log(string, record)\n      // KNOWN ISSUE: non-JSI adapter implementation gets confused by this (it's a BOM mark)\n      if (\n        AdapterClass.name === 'SQLiteAdapter' &&\n        !extraAdapterOptions.jsi &&\n        ((string === bigEndianByteOrderMark && ['android', 'ios'].includes(platform)) ||\n          (string === littleEndianByteOrderMark && platform === 'android'))\n      ) {\n        expect(record.text1).not.toBe(string) // if this fails, it means the issue's been fixed\n      } else {\n        expect(!!record).toBe(true)\n        expect(record.text1).toBe(string)\n      }\n    })\n  })\n  it('can retrieve dbName', async (adapter, _, { dbName }) => {\n    expect(adapter.dbName).toBe(dbName)\n  })\n  return commonTests\n}\n"
  },
  {
    "path": "src/adapters/__tests__/helpers.js",
    "content": "import { sortBy, identity, pipe, pluck, shuffle } from 'rambdax'\n\nimport { allPromises, toPairs } from '../../utils/fp'\n\nimport Model from '../../Model'\nimport Query from '../../Query'\nimport { appSchema, tableSchema } from '../../Schema'\nimport { sanitizedRaw } from '../../RawRecord'\n\nexport class MockTask extends Model {\n  static table = 'tasks'\n\n  static associations = {\n    projects: { type: 'belongs_to', key: 'project_id' },\n    tag_assignments: { type: 'has_many', foreignKey: 'task_id' },\n  }\n}\nexport class MockProject extends Model {\n  static table = 'projects'\n\n  static associations = {\n    tasks: { type: 'has_many', foreignKey: 'project_id' },\n    teams: { type: 'belongs_to', key: 'team_id' },\n  }\n}\nexport class MockTeam extends Model {\n  static table = 'teams'\n\n  static associations = {\n    projects: { type: 'has_many', foreignKey: 'team_id' },\n    organizations: { type: 'belongs_to', key: 'organization_id' },\n  }\n}\nexport class MockOrganization extends Model {\n  static table = 'organizations'\n\n  static associations = {}\n}\nexport class MockTagAssignment extends Model {\n  static table = 'tag_assignments'\n\n  static associations = {\n    tasks: { type: 'belongs_to', key: 'task_id' },\n  }\n}\nexport class MockSyncTestRecord extends Model {\n  static table = 'sync_tests'\n}\n\nexport const testSchema = appSchema({\n  version: 1,\n  tables: [\n    tableSchema({\n      name: 'tasks',\n      columns: [\n        { name: 'project_id', type: 'string' },\n        { name: 'num1', type: 'number' },\n        { name: 'num2', type: 'number' },\n        { name: 'num3', type: 'number' },\n        { name: 'float1', type: 'number' }, // TODO: Remove me?\n        { name: 'float2', type: 'number' },\n        { name: 'text1', type: 'string' },\n        { name: 'text2', type: 'string' },\n        { name: 'bool1', type: 'boolean' },\n        { name: 'bool2', type: 'boolean' },\n        { name: 'order', type: 'number' },\n        { name: 'from', type: 'string' },\n      ],\n    }),\n    tableSchema({\n      name: 'projects',\n      columns: [\n        { name: 'team_id', type: 'string' },\n        { name: 'num1', type: 'number' },\n        { name: 'num2', type: 'number' },\n        { name: 'text1', type: 'string' },\n        { name: 'text2', type: 'string' },\n        { name: 'text3', type: 'string' },\n        { name: 'bool1', type: 'boolean' },\n      ],\n    }),\n    tableSchema({\n      name: 'teams',\n      columns: [\n        { name: 'organization_id', type: 'string' },\n        { name: 'num1', type: 'number' },\n        { name: 'num2', type: 'number' },\n        { name: 'text1', type: 'string' },\n        { name: 'bool1', type: 'boolean' },\n      ],\n    }),\n    tableSchema({\n      name: 'organizations',\n      columns: [\n        { name: 'num1', type: 'number' },\n        { name: 'text1', type: 'string' },\n        { name: 'bool1', type: 'boolean' },\n      ],\n    }),\n    tableSchema({\n      name: 'tag_assignments',\n      columns: [\n        { name: 'task_id', type: 'string' },\n        { name: 'num1', type: 'number' },\n        { name: 'num2', type: 'number' },\n        { name: 'text1', type: 'string' },\n      ],\n    }),\n    // weird names that are SQLite keywords\n    tableSchema({ name: 'where', columns: [] }),\n    tableSchema({ name: 'values', columns: [] }),\n    tableSchema({ name: 'set', columns: [] }),\n    tableSchema({ name: 'drop', columns: [] }),\n    tableSchema({ name: 'update', columns: [] }),\n    tableSchema({\n      name: 'sync_tests',\n      columns: [\n        { name: 'str', type: 'string' },\n        { name: 'strN', type: 'string', isOptional: true },\n        { name: 'num', type: 'number' },\n        { name: 'numN', type: 'number', isOptional: true },\n        { name: 'bool', type: 'boolean' },\n        { name: 'boolN', type: 'boolean', isOptional: true },\n      ],\n    }),\n  ],\n})\n\nconst mockCollections = {\n  tasks: MockTask,\n  projects: MockProject,\n  teams: MockTeam,\n  tag_assignments: MockTagAssignment,\n  sync_tests: MockSyncTestRecord,\n}\n\nexport const modelQuery = (modelClass, ...conditions) => {\n  const mockCollection = {\n    modelClass,\n    db: { get: (table) => ({ modelClass: mockCollections[table] }) },\n  }\n  return new Query(mockCollection, conditions)\n}\n\nexport const taskQuery = (...conditions) => modelQuery(MockTask, ...conditions).serialize()\nexport const projectQuery = (...conditions) => modelQuery(MockProject, ...conditions).serialize()\n\nexport const mockTaskRaw = (raw) => sanitizedRaw(raw, testSchema.tables.tasks)\nexport const mockProjectRaw = (raw) => sanitizedRaw(raw, testSchema.tables.projects)\nexport const mockTagAssignmentRaw = (raw) => sanitizedRaw(raw, testSchema.tables.tag_assignments)\n\nconst insertAll = async (adapter, table, records) =>\n  adapter.batch(\n    records.map((raw) => {\n      // TODO: Are we sure we want to test this by inserting non-sanitized records?\n      // On one hand, this _shouldn't_ happen, on the other, through error or malice\n      // (changing DB directly, outside of Wmelon), it _might_ happen\n      return ['create', table, { _status: '', ...raw }]\n    }),\n  )\n\nconst sort = sortBy(identity)\nconst getExpectedResults = pipe(pluck('id'), sort)\n\nexport const expectSortedEqual = (actual, expected) => {\n  expect(sort(actual)).toEqual(sort(expected))\n}\n\nexport const performMatchTest = async (adapter, testCase) => {\n  const { matching, nonMatching, query: conditions } = testCase\n\n  // NOTE: shuffle so that order test does not depend on insertion order\n  await insertAll(adapter, 'tasks', shuffle(matching))\n  await insertAll(adapter, 'tasks', shuffle(nonMatching))\n\n  const query = taskQuery(...conditions)\n\n  // test if query fetch is correct\n  if (!testCase.skipQuery) {\n    const results = await adapter.query(query)\n    const expectedResults = getExpectedResults(matching)\n    expect(sort(results)).toEqual(expectedResults)\n\n    if (testCase.checkOrder) {\n      expect(results).toEqual(pluck('id', matching))\n    }\n\n    // test if ID fetch is correct\n    const ids = await adapter.queryIds(query)\n    expect(sort(ids)).toEqual(expectedResults)\n  }\n\n  // test if counting is correct\n  if (!testCase.skipCount) {\n    const count = await adapter.count(query)\n    expect(count).toBe(matching.length)\n  }\n\n  // delete\n  await adapter.batch(\n    [...matching, ...nonMatching].map(({ id }) => ['destroyPermanently', 'tasks', id]),\n  )\n}\n\nexport const performJoinTest = async (adapter, testCase) => {\n  const pairs = toPairs(testCase.extraRecords)\n  await allPromises(([table, records]) => insertAll(adapter, table, records), pairs)\n  await performMatchTest(adapter, testCase)\n}\n"
  },
  {
    "path": "src/adapters/common.js",
    "content": "// @flow\n\n// don't import the whole utils/ here!\nimport invariant from '../utils/common/invariant'\nimport logger from '../utils/common/logger'\nimport { type Result } from '../utils/fp/Result'\nimport type { RecordId } from '../Model'\nimport type { TableSchema, AppSchema, TableName } from '../Schema'\nimport type { CachedQueryResult, CachedFindResult, DatabaseAdapter } from './type'\nimport { sanitizedRaw, type DirtyRaw } from '../RawRecord'\n\nexport type DirtyFindResult = RecordId | ?DirtyRaw\nexport type DirtyQueryResult = Array<RecordId | DirtyRaw>\n\nexport function validateAdapter(adapter: DatabaseAdapter): void {\n  if (process.env.NODE_ENV !== 'production') {\n    const { schema, migrations } = adapter\n    invariant(schema, `Missing schema in the adapter`)\n    // TODO: uncomment when full migrations are shipped\n    // invariant(migrations, `Missing migrations`)\n    if (migrations) {\n      invariant(\n        migrations.validated,\n        `Invalid migrations - use schemaMigrations() to create migrations. See docs for more details.`,\n      )\n\n      const { minVersion, maxVersion } = migrations\n\n      invariant(\n        maxVersion <= schema.version,\n        `Migrations can't be newer than schema. Schema is version ${schema.version} and migrations cover range from ${minVersion} to ${maxVersion}`,\n      )\n\n      invariant(\n        maxVersion === schema.version,\n        `Missing migration. Database schema is currently at version ${schema.version}, but migrations only cover range from ${minVersion} to ${maxVersion}`,\n      )\n    }\n  }\n}\n\nexport function validateTable(tableName: TableName<any>, schema: AppSchema): void {\n  invariant(\n    // $FlowFixMe\n    Object.prototype.hasOwnProperty.call(schema.tables, tableName),\n    `Could not invoke Adapter method because table name '${tableName}' does not exist in the schema. Most likely, it's a sync bug, and you're sending tables that don't exist in the current version of the app. Or, you made a mistake in migrations. Reminder: it's a serious programming error to pass non-whitelisted table names to Adapter.`,\n  )\n}\n\nexport function sanitizeFindResult(\n  dirtyRecord: DirtyFindResult,\n  tableSchema: TableSchema,\n): CachedFindResult {\n  return dirtyRecord && typeof dirtyRecord === 'object'\n    ? sanitizedRaw(dirtyRecord, tableSchema)\n    : dirtyRecord\n}\n\nexport function sanitizeQueryResult(\n  dirtyRecords: DirtyQueryResult,\n  tableSchema: TableSchema,\n): CachedQueryResult {\n  return dirtyRecords.map((dirtyRecord) =>\n    typeof dirtyRecord === 'string' ? dirtyRecord : sanitizedRaw(dirtyRecord, tableSchema),\n  )\n}\n\nexport function devSetupCallback(result: Result<any>, onSetUpError: ?(error: Error) => void): void {\n  if (result.error) {\n    logger.error(\n      `Uh-oh. Database failed to load, we're in big trouble. This might happen if you didn't set up native code correctly (iOS, Android), or if you didn't recompile native app after WatermelonDB update. It might also mean that IndexedDB or SQLite refused to open.`,\n      result.error,\n    )\n    onSetUpError && onSetUpError(result.error)\n  }\n}\n"
  },
  {
    "path": "src/adapters/compat.d.ts",
    "content": "import type { SerializedQuery } from '../Query'\nimport type { TableName, AppSchema } from '../Schema'\nimport type { SchemaMigrations } from '../Schema/migrations'\nimport type { RecordId } from '../Model'\n\nimport type {\n  DatabaseAdapter,\n  CachedFindResult,\n  CachedQueryResult,\n  BatchOperation,\n  UnsafeExecuteOperations,\n} from './type'\n\nexport default class DatabaseAdapterCompat {\n  underlyingAdapter: DatabaseAdapter\n\n  constructor(adapter: DatabaseAdapter)\n\n  get schema(): AppSchema\n\n  get dbName(): string | undefined\n\n  get migrations(): SchemaMigrations | undefined\n\n  find(table: TableName<any>, id: RecordId): Promise<CachedFindResult>\n\n  query(query: SerializedQuery): Promise<CachedQueryResult>\n\n  queryIds(query: SerializedQuery): Promise<RecordId[]>\n\n  unsafeQueryRaw(query: SerializedQuery): Promise<any[]>\n\n  count(query: SerializedQuery): Promise<number>\n\n  batch(operations: BatchOperation[]): Promise<void>\n\n  getDeletedRecords(tableName: TableName<any>): Promise<RecordId[]>\n\n  destroyDeletedRecords(tableName: TableName<any>, recordIds: RecordId[]): Promise<void>\n\n  unsafeLoadFromSync(jsonId: number): Promise<any>\n\n  provideSyncJson(id: number, syncPullResultJson: string): Promise<void>\n\n  unsafeResetDatabase(): Promise<void>\n\n  unsafeExecute(work: UnsafeExecuteOperations): Promise<void>\n\n  getLocal(key: string): Promise<string | undefined>\n\n  setLocal(key: string, value: string): Promise<void>\n\n  removeLocal(key: string): Promise<void>\n\n  // untyped - test-only code\n  testClone(options: any): Promise<any>\n}\n"
  },
  {
    "path": "src/adapters/compat.js",
    "content": "// @flow\n\nimport type { SerializedQuery } from '../Query'\nimport type { TableName, AppSchema } from '../Schema'\nimport type { SchemaMigrations } from '../Schema/migrations'\nimport type { RecordId } from '../Model'\nimport { toPromise } from '../utils/fp/Result'\n\nimport type {\n  DatabaseAdapter,\n  CachedFindResult,\n  CachedQueryResult,\n  BatchOperation,\n  UnsafeExecuteOperations,\n} from './type'\n\nexport default class DatabaseAdapterCompat {\n  underlyingAdapter: DatabaseAdapter\n\n  constructor(adapter: DatabaseAdapter): void {\n    this.underlyingAdapter = adapter\n  }\n\n  get schema(): AppSchema {\n    return this.underlyingAdapter.schema\n  }\n\n  get dbName(): ?string {\n    return this.underlyingAdapter.dbName\n  }\n\n  get migrations(): ?SchemaMigrations {\n    return this.underlyingAdapter.migrations\n  }\n\n  find(table: TableName<any>, id: RecordId): Promise<CachedFindResult> {\n    return toPromise((callback) => this.underlyingAdapter.find(table, id, callback))\n  }\n\n  query(query: SerializedQuery): Promise<CachedQueryResult> {\n    return toPromise((callback) => this.underlyingAdapter.query(query, callback))\n  }\n\n  queryIds(query: SerializedQuery): Promise<RecordId[]> {\n    return toPromise((callback) => this.underlyingAdapter.queryIds(query, callback))\n  }\n\n  unsafeQueryRaw(query: SerializedQuery): Promise<any[]> {\n    return toPromise((callback) => this.underlyingAdapter.unsafeQueryRaw(query, callback))\n  }\n\n  count(query: SerializedQuery): Promise<number> {\n    return toPromise((callback) => this.underlyingAdapter.count(query, callback))\n  }\n\n  batch(operations: BatchOperation[]): Promise<void> {\n    return toPromise((callback) => this.underlyingAdapter.batch(operations, callback))\n  }\n\n  getDeletedRecords(tableName: TableName<any>): Promise<RecordId[]> {\n    return toPromise((callback) => this.underlyingAdapter.getDeletedRecords(tableName, callback))\n  }\n\n  destroyDeletedRecords(tableName: TableName<any>, recordIds: RecordId[]): Promise<void> {\n    return toPromise((callback) =>\n      this.underlyingAdapter.destroyDeletedRecords(tableName, recordIds, callback),\n    )\n  }\n\n  unsafeLoadFromSync(jsonId: number): Promise<any> {\n    return toPromise((callback) => this.underlyingAdapter.unsafeLoadFromSync(jsonId, callback))\n  }\n\n  provideSyncJson(id: number, syncPullResultJson: string): Promise<void> {\n    return toPromise((callback) =>\n      this.underlyingAdapter.provideSyncJson(id, syncPullResultJson, callback),\n    )\n  }\n\n  unsafeResetDatabase(): Promise<void> {\n    return toPromise((callback) => this.underlyingAdapter.unsafeResetDatabase(callback))\n  }\n\n  unsafeExecute(work: UnsafeExecuteOperations): Promise<void> {\n    return toPromise((callback) => this.underlyingAdapter.unsafeExecute(work, callback))\n  }\n\n  getLocal(key: string): Promise<?string> {\n    return toPromise((callback) => this.underlyingAdapter.getLocal(key, callback))\n  }\n\n  setLocal(key: string, value: string): Promise<void> {\n    return toPromise((callback) => this.underlyingAdapter.setLocal(key, value, callback))\n  }\n\n  removeLocal(key: string): Promise<void> {\n    return toPromise((callback) => this.underlyingAdapter.removeLocal(key, callback))\n  }\n\n  // untyped - test-only code\n  async testClone(options: any): Promise<any> {\n    // $FlowFixMe\n    return new DatabaseAdapterCompat(await this.underlyingAdapter.testClone(options))\n  }\n}\n"
  },
  {
    "path": "src/adapters/error.js",
    "content": "// @flow\n/* eslint-disable getter-return */\n\n// Used as a placeholder during reset database to catch illegal\n// adapter calls\n\nconst throwError = (name: string) => {\n  throw new Error(`Cannot call database.adapter.${name} while the database is being reset`)\n}\n\nexport default class ErrorAdapter {\n  constructor(): void {\n    ;[\n      'find',\n      'query',\n      'queryIds',\n      'count',\n      'batch',\n      'getDeletedRecords',\n      'destroyDeletedRecords',\n      'unsafeResetDatabase',\n      'getLocal',\n      'setLocal',\n      'removeLocal',\n      'testClone',\n    ].forEach((name) => {\n      // $FlowFixMe\n      this[name] = () => throwError(name)\n    })\n  }\n\n  get underlyingAdapter(): void {\n    throwError('underlyingAdapter')\n  }\n\n  get schema(): void {\n    throwError('schema')\n  }\n\n  get migrations(): void {\n    throwError('migrations')\n  }\n}\n"
  },
  {
    "path": "src/adapters/lokijs/common.d.ts",
    "content": "import { type Result } from '../../utils/fp/Result'\nimport type { CachedQueryResult, CachedFindResult } from '../type'\nimport type { RecordId } from '../../Model'\nimport { $Exact } from '../../types'\n\nexport type WorkerExecutorType =\n  | 'setUp'\n  | 'find'\n  | 'query'\n  | 'queryIds'\n  | 'unsafeQueryRaw'\n  | 'count'\n  | 'batch'\n  | 'getDeletedRecords'\n  | 'unsafeResetDatabase'\n  | 'unsafeExecute'\n  | 'getLocal'\n  | 'setLocal'\n  | 'removeLocal'\n  | '_fatalError'\n  | 'clearCachedRecords'\n\nexport type WorkerExecutorPayload = any[]\n\nexport type WorkerResponseData = CachedQueryResult | CachedFindResult | number | RecordId[]\n\nexport type CloneMethod = 'shallowCloneDeepObjects' | 'immutable' | 'deep'\n\nexport type WorkerAction = $Exact<{\n  id: number\n  type: WorkerExecutorType\n  payload: WorkerExecutorPayload\n  cloneMethod: CloneMethod\n  returnCloneMethod: CloneMethod\n}>\n\nexport type WorkerResponse = $Exact<{\n  id: number\n  result: Result<WorkerResponseData>\n}>\n"
  },
  {
    "path": "src/adapters/lokijs/common.js",
    "content": "// @flow\n\nimport { type Result } from '../../utils/fp/Result'\nimport type { CachedQueryResult, CachedFindResult } from '../type'\nimport type { RecordId } from '../../Model'\n\nexport type WorkerExecutorType =\n  | 'setUp'\n  | 'find'\n  | 'query'\n  | 'queryIds'\n  | 'unsafeQueryRaw'\n  | 'count'\n  | 'batch'\n  | 'getDeletedRecords'\n  | 'unsafeResetDatabase'\n  | 'unsafeExecute'\n  | 'getLocal'\n  | 'setLocal'\n  | 'removeLocal'\n  | '_fatalError'\n  | 'clearCachedRecords'\n\nexport type WorkerExecutorPayload = any[]\n\nexport type WorkerResponseData = CachedQueryResult | CachedFindResult | number | RecordId[]\n\nexport type CloneMethod = 'shallowCloneDeepObjects' | 'immutable' | 'deep'\n\nexport type WorkerAction = $Exact<{\n  id: number,\n  type: WorkerExecutorType,\n  payload: WorkerExecutorPayload,\n  cloneMethod: CloneMethod,\n  returnCloneMethod: CloneMethod,\n}>\n\nexport type WorkerResponse = $Exact<{\n  id: number,\n  result: Result<WorkerResponseData>,\n}>\n"
  },
  {
    "path": "src/adapters/lokijs/dispatcher.d.ts",
    "content": "import type { ResultCallback } from '../../utils/fp/Result'\nimport type {\n  WorkerExecutorType,\n  WorkerExecutorPayload,\n  WorkerResponseData,\n  CloneMethod,\n} from './common'\n\ntype WorkerAction = {\n  id: number\n  callback: ResultCallback<WorkerResponseData>\n}\ntype WorkerActions = WorkerAction[]\n\nexport default class LokiDispatcher {\n  _worker: Worker\n\n  _pendingCalls: WorkerActions\n\n  constructor(useWebWorker: boolean)\n\n  // TODO: `any` return should be `WorkerResponsePayload`\n  call<T>(\n    type: WorkerExecutorType,\n    payload: WorkerExecutorPayload | undefined,\n    callback: ResultCallback<T>,\n    // NOTE: This are used when not using web workers (otherwise, the data naturally is just copied)\n    cloneMethod?: CloneMethod,\n    returnCloneMethod?: CloneMethod,\n  ): void\n}\n"
  },
  {
    "path": "src/adapters/lokijs/dispatcher.js",
    "content": "// @flow\n\nimport type { ResultCallback } from '../../utils/fp/Result'\nimport type {\n  WorkerExecutorType,\n  WorkerResponse,\n  WorkerExecutorPayload,\n  WorkerResponseData,\n  CloneMethod,\n} from './common'\n\ntype WorkerAction = {\n  id: number,\n  callback: ResultCallback<WorkerResponseData>,\n}\ntype WorkerActions = WorkerAction[]\n\nfunction createWorker(useWebWorker: boolean): Worker {\n  if (useWebWorker) {\n    const LokiWebWorker = (require('./worker/loki.worker'): any)\n    return new LokiWebWorker()\n  }\n\n  const LokiSynchronousWorker = (require('./worker/synchronousWorker').default: any)\n  return new LokiSynchronousWorker()\n}\n\nlet _actionId = 0\n\nfunction nextActionId(): number {\n  _actionId += 1\n  return _actionId\n}\n\nexport default class LokiDispatcher {\n  _worker: Worker\n\n  _pendingCalls: WorkerActions = []\n\n  constructor(useWebWorker: boolean): void {\n    this._worker = createWorker(useWebWorker)\n    this._worker.onmessage = ({ data }) => {\n      const { result, id: responseId }: WorkerResponse = (data: any)\n      const { callback, id } = this._pendingCalls.shift()\n\n      // sanity check\n      if (id !== responseId) {\n        callback({ error: (new Error('Loki worker responses are out of order'): any) })\n        return\n      }\n\n      callback(result)\n    }\n  }\n\n  // TODO: `any` return should be `WorkerResponsePayload`\n  call<T>(\n    type: WorkerExecutorType,\n    payload: WorkerExecutorPayload = [],\n    callback: ResultCallback<T> = () => {},\n    // NOTE: This are used when not using web workers (otherwise, the data naturally is just copied)\n    cloneMethod: CloneMethod = 'immutable',\n    returnCloneMethod: CloneMethod = 'immutable',\n  ): void {\n    const id = nextActionId()\n    this._pendingCalls.push({\n      callback: (callback: any),\n      id,\n    })\n    this._worker.postMessage({ id, type, payload, cloneMethod, returnCloneMethod })\n  }\n}\n"
  },
  {
    "path": "src/adapters/lokijs/index.d.ts",
    "content": "import type { LokiMemoryAdapter } from './type'\nimport type { ResultCallback } from '../../utils/fp/Result'\n\nimport type { RecordId } from '../../Model'\nimport type { TableName, AppSchema } from '../../Schema'\nimport type { DirtyRaw } from '../../RawRecord'\nimport type { SchemaMigrations } from '../../Schema/migrations'\nimport type { SerializedQuery } from '../../Query'\nimport type {\n  DatabaseAdapter,\n  CachedQueryResult,\n  CachedFindResult,\n  BatchOperation,\n  UnsafeExecuteOperations,\n} from '../type'\n\nimport LokiDispatcher from './dispatcher'\n\nimport { $Exact, $Shape } from '../../types'\n\nexport type LokiAdapterOptions = $Exact<{\n  dbName?: string\n  schema: AppSchema\n  migrations?: SchemaMigrations\n  // (true by default) Although web workers may have some throughput benefits, disabling them\n  // may lead to lower memory consumption, lower latency, and easier debugging\n  useWebWorker?: boolean\n  useIncrementalIndexedDB?: boolean\n  // Called when database failed to set up (initialize) correctly. It's possible that\n  // it's some transient IndexedDB error that will be solved by a reload, but it's\n  // very likely that the error is persistent (e.g. a corrupted database).\n  // Pass a callback to offer to the user to reload the app or log out\n  onSetUpError?: (error: Error) => void\n  // Called when underlying IndexedDB encountered a quota exceeded error (ran out of allotted disk space for app)\n  // This means that app can't save more data or that it will fall back to using in-memory database only\n  // Note that this only works when `useWebWorker: false`\n  onQuotaExceededError?: (error: Error) => void\n  // extra options passed to Loki constructor\n  extraLokiOptions?: $Exact<{\n    autosave?: boolean\n    autosaveInterval?: number\n  }>\n  // extra options passed to IncrementalIDBAdapter constructor\n  extraIncrementalIDBOptions?: $Exact<{\n    // Called when this adapter is forced to overwrite contents of IndexedDB.\n    // This happens if there's another open tab of the same app that's making changes.\n    // You might use it as an opportunity to alert user to the potential loss of data\n    onDidOverwrite?: () => void\n    // Called when internal IndexedDB version changed (most likely the database was deleted in another browser tab)\n    // Pass a callback to force log out in this copy of the app as well\n    // (Due to a race condition, it's usually best to just reload the web app)\n    // Note that this only works when not using web workers\n    onversionchange?: () => void\n    // Called with a chunk (array of Loki documents) before it's saved to IndexedDB/loaded from IDB. You can use it to\n    // manually compress on-disk representation for faster database loads.\n    // Hint: Hand-written conversion of objects to arrays is very profitable for performance.\n    // Note that this only works when not using web workers\n    serializeChunk?: (table: TableName<any>, chunk: DirtyRaw[]) => any\n    deserializeChunk?: (table: TableName<any>, chunk: any) => DirtyRaw[]\n    // Called when IndexedDB fetch has begun. Use this as an opportunity to execute code concurrently\n    // while IDB does work on a separate thread.\n    // Note that this only works when not using web workers\n    onFetchStart?: () => void\n    // Collections (by table name) that Loki should deserialize lazily. This is only profitable for\n    // collections that are most likely not required for launch - making everything lazy makes it slower\n    lazyCollections?: TableName<any>[]\n  }>\n  // -- internal --\n  _testLokiAdapter?: LokiMemoryAdapter\n  _onFatalError?: (error: Error) => void // (experimental)\n  _betaLoki?: boolean // (experimental)\n}>\n\nexport default class LokiJSAdapter implements DatabaseAdapter {\n  static adapterType: string\n\n  _dispatcher: LokiDispatcher\n\n  schema: AppSchema\n\n  dbName: string\n\n  migrations?: SchemaMigrations\n\n  _options: LokiAdapterOptions\n\n  constructor(options: LokiAdapterOptions)\n\n  testClone(options?: $Shape<LokiAdapterOptions>): Promise<LokiJSAdapter>\n\n  find(table: TableName<any>, id: RecordId, callback: ResultCallback<CachedFindResult>): void\n\n  query(query: SerializedQuery, callback: ResultCallback<CachedQueryResult>): void\n\n  queryIds(query: SerializedQuery, callback: ResultCallback<RecordId[]>): void\n\n  unsafeQueryRaw(query: SerializedQuery, callback: ResultCallback<any[]>): void\n\n  count(query: SerializedQuery, callback: ResultCallback<number>): void\n\n  batch(operations: BatchOperation[], callback: ResultCallback<void>): void\n\n  getDeletedRecords(table: TableName<any>, callback: ResultCallback<RecordId[]>): void\n\n  destroyDeletedRecords(\n    table: TableName<any>,\n    recordIds: RecordId[],\n    callback: ResultCallback<void>,\n  ): void\n\n  unsafeLoadFromSync(jsonId: number, callback: ResultCallback<any>): void\n\n  provideSyncJson(id: number, syncPullResultJson: string, callback: ResultCallback<void>): void\n\n  unsafeResetDatabase(callback: ResultCallback<void>): void\n\n  unsafeExecute(operations: UnsafeExecuteOperations, callback: ResultCallback<void>): void\n\n  getLocal(key: string, callback: ResultCallback<string | undefined>): void\n\n  setLocal(key: string, value: string, callback: ResultCallback<void>): void\n\n  removeLocal(key: string, callback: ResultCallback<void>): void\n\n  // dev/debug utility\n  get _driver(): any\n\n  // (experimental)\n  _fatalError(error: Error): void\n\n  // (experimental)\n  _clearCachedRecords(): void\n\n  _debugDignoseMissingRecord(table: TableName<any>, id: RecordId): void\n}\n"
  },
  {
    "path": "src/adapters/lokijs/index.js",
    "content": "// @flow\n\n// don't import the whole utils/ here!\nimport type { LokiMemoryAdapter } from './type'\nimport invariant from '../../utils/common/invariant'\nimport logger from '../../utils/common/logger'\nimport type { ResultCallback, Result } from '../../utils/fp/Result'\n\nimport type { RecordId } from '../../Model'\nimport type { TableName, AppSchema } from '../../Schema'\nimport type { DirtyRaw } from '../../RawRecord'\nimport type { SchemaMigrations } from '../../Schema/migrations'\nimport type { SerializedQuery } from '../../Query'\nimport type {\n  DatabaseAdapter,\n  CachedQueryResult,\n  CachedFindResult,\n  BatchOperation,\n  UnsafeExecuteOperations,\n} from '../type'\nimport { devSetupCallback, validateAdapter, validateTable } from '../common'\n\nimport LokiDispatcher from './dispatcher'\n\nexport type LokiAdapterOptions = $Exact<{\n  dbName?: ?string,\n  schema: AppSchema,\n  migrations?: SchemaMigrations,\n  // (true by default) Although web workers may have some throughput benefits, disabling them\n  // may lead to lower memory consumption, lower latency, and easier debugging\n  useWebWorker?: boolean,\n  useIncrementalIndexedDB?: boolean,\n  // Called when database failed to set up (initialize) correctly. It's possible that\n  // it's some transient IndexedDB error that will be solved by a reload, but it's\n  // very likely that the error is persistent (e.g. a corrupted database).\n  // Pass a callback to offer to the user to reload the app or log out\n  onSetUpError?: (error: Error) => void,\n  // Called when underlying IndexedDB encountered a quota exceeded error (ran out of allotted disk space for app)\n  // This means that app can't save more data or that it will fall back to using in-memory database only\n  // Note that this only works when `useWebWorker: false`\n  onQuotaExceededError?: (error: Error) => void,\n  // extra options passed to Loki constructor\n  extraLokiOptions?: $Exact<{\n    autosave?: boolean,\n    autosaveInterval?: number,\n  }>,\n  // extra options passed to IncrementalIDBAdapter constructor\n  extraIncrementalIDBOptions?: $Exact<{\n    // Called when this adapter is forced to overwrite contents of IndexedDB.\n    // This happens if there's another open tab of the same app that's making changes.\n    // You might use it as an opportunity to alert user to the potential loss of data\n    onDidOverwrite?: () => void,\n    // Called when internal IndexedDB version changed (most likely the database was deleted in another browser tab)\n    // Pass a callback to force log out in this copy of the app as well\n    // (Due to a race condition, it's usually best to just reload the web app)\n    // Note that this only works when not using web workers\n    onversionchange?: () => void,\n    // Called with a chunk (array of Loki documents) before it's saved to IndexedDB/loaded from IDB. You can use it to\n    // manually compress on-disk representation for faster database loads.\n    // Hint: Hand-written conversion of objects to arrays is very profitable for performance.\n    // Note that this only works when not using web workers\n    serializeChunk?: (TableName<any>, DirtyRaw[]) => any,\n    deserializeChunk?: (TableName<any>, any) => DirtyRaw[],\n    // Called when IndexedDB fetch has begun. Use this as an opportunity to execute code concurrently\n    // while IDB does work on a separate thread.\n    // Note that this only works when not using web workers\n    onFetchStart?: () => void,\n    // Collections (by table name) that Loki should deserialize lazily. This is only profitable for\n    // collections that are most likely not required for launch - making everything lazy makes it slower\n    lazyCollections?: TableName<any>[],\n  }>,\n  // -- internal --\n  _testLokiAdapter?: LokiMemoryAdapter,\n  _onFatalError?: (error: Error) => void, // (experimental)\n  _betaLoki?: boolean, // (experimental)\n}>\n\nexport default class LokiJSAdapter implements DatabaseAdapter {\n  static adapterType: string = 'loki'\n\n  _dispatcher: LokiDispatcher\n\n  schema: AppSchema\n\n  dbName: string\n\n  migrations: ?SchemaMigrations\n\n  _options: LokiAdapterOptions\n\n  constructor(options: LokiAdapterOptions): void {\n    this._options = options\n    this.dbName = options.dbName || 'loki'\n    const { schema, migrations } = options\n\n    const useWebWorker = options.useWebWorker ?? process.env.NODE_ENV !== 'test'\n    this._dispatcher = new LokiDispatcher(useWebWorker)\n\n    this.schema = schema\n    this.migrations = migrations\n\n    if (process.env.NODE_ENV !== 'production') {\n      invariant(\n        'useWebWorker' in options,\n        'LokiJSAdapter `useWebWorker` option is required. Pass `{ useWebWorker: false }` to adopt the new behavior, or `{ useWebWorker: true }` to supress this warning with no changes',\n      )\n      if (options.useWebWorker === true) {\n        logger.warn(\n          'LokiJSAdapter {useWebWorker: true} option is now deprecated. If you rely on this feature, please file an issue',\n        )\n      }\n      invariant(\n        'useIncrementalIndexedDB' in options,\n        'LokiJSAdapter `useIncrementalIndexedDB` option is required. Pass `{ useIncrementalIndexedDB: true }` to adopt the new behavior, or `{ useIncrementalIndexedDB: false }` to supress this warning with no changes',\n      )\n      if (options.useIncrementalIndexedDB === false) {\n        logger.warn(\n          'LokiJSAdapter {useIncrementalIndexedDB: false} option is now deprecated. If you rely on this feature, please file an issue',\n        )\n      }\n      validateAdapter(this)\n    }\n    const callback = (result: Result<any>) => devSetupCallback(result, options.onSetUpError)\n    this._dispatcher.call('setUp', [options], callback)\n  }\n\n  // eslint-disable-next-line no-use-before-define\n  async testClone(options?: $Shape<LokiAdapterOptions> = {}): Promise<LokiJSAdapter> {\n    // Ensure data is saved to memory\n    // $FlowFixMe\n    const driver = this._driver\n    driver.loki.close()\n\n    // $FlowFixMe\n    return new LokiJSAdapter({\n      ...this._options,\n      _testLokiAdapter: driver.loki.persistenceAdapter,\n      ...options,\n    })\n  }\n\n  find(table: TableName<any>, id: RecordId, callback: ResultCallback<CachedFindResult>): void {\n    validateTable(table, this.schema)\n    this._dispatcher.call('find', [table, id], callback)\n  }\n\n  query(query: SerializedQuery, callback: ResultCallback<CachedQueryResult>): void {\n    validateTable(query.table, this.schema)\n    this._dispatcher.call('query', [query], callback)\n  }\n\n  queryIds(query: SerializedQuery, callback: ResultCallback<RecordId[]>): void {\n    validateTable(query.table, this.schema)\n    this._dispatcher.call('queryIds', [query], callback)\n  }\n\n  unsafeQueryRaw(query: SerializedQuery, callback: ResultCallback<any[]>): void {\n    validateTable(query.table, this.schema)\n    this._dispatcher.call('unsafeQueryRaw', [query], callback)\n  }\n\n  count(query: SerializedQuery, callback: ResultCallback<number>): void {\n    validateTable(query.table, this.schema)\n    this._dispatcher.call('count', [query], callback)\n  }\n\n  batch(operations: BatchOperation[], callback: ResultCallback<void>): void {\n    operations.forEach(([, table]) => validateTable(table, this.schema))\n    // batches are only strings + raws which only have JSON-compatible values, rest is immutable\n    this._dispatcher.call('batch', [operations], callback, 'shallowCloneDeepObjects')\n  }\n\n  getDeletedRecords(table: TableName<any>, callback: ResultCallback<RecordId[]>): void {\n    validateTable(table, this.schema)\n    this._dispatcher.call('getDeletedRecords', [table], callback)\n  }\n\n  destroyDeletedRecords(\n    table: TableName<any>,\n    recordIds: RecordId[],\n    callback: ResultCallback<void>,\n  ): void {\n    validateTable(table, this.schema)\n    this._dispatcher.call(\n      'batch',\n      [recordIds.map((id) => ['destroyPermanently', table, id])],\n      callback,\n      'immutable',\n      'immutable',\n    )\n  }\n\n  unsafeLoadFromSync(jsonId: number, callback: ResultCallback<any>): void {\n    callback({ error: new Error('unsafeLoadFromSync unavailable in LokiJS') })\n  }\n\n  provideSyncJson(id: number, syncPullResultJson: string, callback: ResultCallback<void>): void {\n    callback({ error: new Error('provideSyncJson unavailable in LokiJS') })\n  }\n\n  unsafeResetDatabase(callback: ResultCallback<void>): void {\n    this._dispatcher.call('unsafeResetDatabase', [], callback)\n  }\n\n  unsafeExecute(operations: UnsafeExecuteOperations, callback: ResultCallback<void>): void {\n    this._dispatcher.call('unsafeExecute', [operations], callback)\n  }\n\n  getLocal(key: string, callback: ResultCallback<?string>): void {\n    this._dispatcher.call('getLocal', [key], callback)\n  }\n\n  setLocal(key: string, value: string, callback: ResultCallback<void>): void {\n    invariant(typeof value === 'string', 'adapter.setLocal() value must be a string')\n    this._dispatcher.call('setLocal', [key, value], callback)\n  }\n\n  removeLocal(key: string, callback: ResultCallback<void>): void {\n    this._dispatcher.call('removeLocal', [key], callback)\n  }\n\n  // dev/debug utility\n  get _driver(): any {\n    // $FlowFixMe\n    return this._dispatcher._worker._bridge.driver\n  }\n\n  // (experimental)\n  _fatalError(error: Error): void {\n    this._dispatcher.call('_fatalError', [error], () => {})\n  }\n\n  // (experimental)\n  _clearCachedRecords(): void {\n    this._dispatcher.call('clearCachedRecords', [], () => {})\n  }\n\n  _debugDignoseMissingRecord(table: TableName<any>, id: RecordId): void {\n    const driver = this._driver\n    if (driver) {\n      const lokiCollection = driver.loki.getCollection(table)\n      // if we can find the record by ID, it just means that the record cache ID was corrupted\n      const didFindById = !!lokiCollection.by('id', id)\n      logger.log(`Did find ${table}#${id} in Loki collection by ID? ${didFindById}`)\n\n      // if we can't, but can filter to it, it means that Loki indices are corrupted\n      const didFindByFilter = !!lokiCollection.data.filter((doc) => doc.id === id)\n      logger.log(\n        `Did find ${table}#${id} in Loki collection by filtering the collection? ${didFindByFilter}`,\n      )\n    }\n  }\n}\n"
  },
  {
    "path": "src/adapters/lokijs/test.js",
    "content": "import { testSchema } from '../__tests__/helpers'\nimport commonTests from '../__tests__/commonTests'\n\nimport LokiJSAdapter from './index'\nimport DatabaseAdapterCompat from '../compat'\n\n// require('fake-indexeddb/auto')\n\ndescribe('LokiJSAdapter (Synchronous / Memory persistence)', () => {\n  commonTests().forEach((testCase) => {\n    const [name, test] = testCase\n\n    // eslint-disable-next-line jest/valid-title\n    it(name, async () => {\n      const dbName = `test${Math.random()}`\n      const adapter = new LokiJSAdapter({\n        dbName,\n        schema: testSchema,\n        useWebWorker: false,\n        useIncrementalIndexedDB: false,\n      })\n      await test(new DatabaseAdapterCompat(adapter), LokiJSAdapter, {\n        useWebWorker: false,\n        useIncrementalIndexedDB: false,\n        dbName,\n      })\n    })\n  })\n})\n\n// TODO: Run tests with:\n// - mocked/polyfilled web worker\n// - legacy indexeddb adapter (fake-indexeddb polyfill)\n// - modern indexeddb adapter\n"
  },
  {
    "path": "src/adapters/lokijs/type.d.ts",
    "content": "export type Loki = any\nexport type LokiCollection = any\nexport type LokiResultset = any\nexport type LokiMemoryAdapter = any\n"
  },
  {
    "path": "src/adapters/lokijs/type.js",
    "content": "// @flow\n\nexport type Loki = $FlowFixMe\nexport type LokiCollection = $FlowFixMe\nexport type LokiResultset = $FlowFixMe\nexport type LokiMemoryAdapter = $FlowFixMe\n"
  },
  {
    "path": "src/adapters/lokijs/worker/DatabaseBridge.js",
    "content": "// @flow\n\n// don't import whole `utils` to keep worker size small\nimport type { Result } from '../../../utils/fp/Result'\nimport logError from '../../../utils/common/logError'\nimport invariant from '../../../utils/common/invariant'\n\nimport DatabaseDriver from './DatabaseDriver'\nimport type {\n  WorkerAction,\n  WorkerExecutorType,\n  WorkerExecutorPayload,\n  WorkerResponseData,\n} from '../common'\n\nexport default class DatabaseBridge {\n  workerContext: DedicatedWorkerGlobalScope\n\n  driver: ?DatabaseDriver\n\n  queue: WorkerAction[] = []\n\n  _actionsExecuting: number = 0\n\n  constructor(workerContext: DedicatedWorkerGlobalScope): void {\n    this.workerContext = workerContext\n    this.workerContext.onmessage = (e: MessageEvent) => {\n      const action: WorkerAction = (e.data: any)\n      // enqueue action\n      this.queue.push(action)\n\n      if (this.queue.length === 1) {\n        this.executeNext()\n      }\n    }\n  }\n\n  executeNext(): void {\n    const action = this.queue[0]\n    try {\n      invariant(this._actionsExecuting === 0, 'worker should not have ongoing actions') // sanity check\n      this._actionsExecuting += 1\n\n      const { type, payload } = action\n\n      if (type === 'setUp' || type === 'unsafeResetDatabase') {\n        this.processActionAsync(action)\n      } else {\n        const response = this._driverAction(type)(...payload)\n        this.onActionDone(action, { value: response })\n      }\n    } catch (error) {\n      this._onError(action, error)\n    }\n  }\n\n  async processActionAsync(action: WorkerAction): Promise<void> {\n    try {\n      const { type, payload } = action\n\n      if (type === 'setUp') {\n        // app just launched, set up driver with options sent\n        invariant(!this.driver, `Loki driver already set up - cannot set up again`)\n        const [options] = payload\n        const driver = new DatabaseDriver(options)\n\n        // set up, make this.driver available only if successful\n        await driver.setUp()\n        this.driver = driver\n\n        this.onActionDone(action, { value: null })\n      } else {\n        const response = await this._driverAction(type)(...payload)\n        this.onActionDone(action, { value: response })\n      }\n    } catch (error) {\n      this._onError(action, error)\n    }\n  }\n\n  onActionDone(action: WorkerAction, result: Result<WorkerResponseData>): void {\n    invariant(this._actionsExecuting === 1, 'worker should be executing 1 action') // sanity check\n    this._actionsExecuting = 0\n    this.queue.shift()\n\n    try {\n      const response = { id: action.id, result, cloneMethod: action.returnCloneMethod }\n      this.workerContext.postMessage(response)\n    } catch (error) {\n      logError(error)\n    }\n\n    if (this.queue.length) {\n      this.executeNext()\n    }\n  }\n\n  _driverAction(type: WorkerExecutorType): (WorkerExecutorPayload) => WorkerResponseData {\n    invariant(this.driver, `Cannot run actions because driver is not set up`)\n    const action = (this.driver: any)[type].bind(this.driver)\n    invariant(action, `Unknown worker action ${type}`)\n    return action\n  }\n\n  _onError(action: WorkerAction, error: any): void {\n    // Main process only receives error message (when using web workers) — this logError is to retain call stack\n    logError(error)\n    this.onActionDone(action, { error })\n  }\n}\n"
  },
  {
    "path": "src/adapters/lokijs/worker/DatabaseDriver.js",
    "content": "// @flow\n\n// don't import the whole utils/ here!\nimport logger from '../../../utils/common/logger'\nimport invariant from '../../../utils/common/invariant'\n\nimport type {\n  CachedQueryResult,\n  CachedFindResult,\n  BatchOperation,\n  UnsafeExecuteOperations,\n} from '../../type'\nimport type { TableName, AppSchema, SchemaVersion, TableSchema } from '../../../Schema'\nimport type {\n  SchemaMigrations,\n  CreateTableMigrationStep,\n  AddColumnsMigrationStep,\n  MigrationStep,\n} from '../../../Schema/migrations'\nimport type { SerializedQuery } from '../../../Query'\nimport type { RecordId } from '../../../Model'\nimport { type RawRecord, sanitizedRaw, setRawSanitized, type DirtyRaw } from '../../../RawRecord'\nimport type { Loki, LokiCollection } from '../type'\n\nimport { newLoki, deleteDatabase, lokiFatalError } from './lokiExtensions'\nimport { executeQuery, executeCount } from './executeQuery'\n\nimport type { LokiAdapterOptions } from '../index'\n\nconst SCHEMA_VERSION_KEY = '_loki_schema_version'\n\nlet experimentalAllowsFatalError = false\n\nexport function setExperimentalAllowsFatalError(): void {\n  experimentalAllowsFatalError = true\n}\n\nexport default class DatabaseDriver {\n  options: LokiAdapterOptions\n\n  schema: AppSchema\n\n  migrations: ?SchemaMigrations\n\n  loki: Loki\n\n  cachedRecords: Map<TableName<any>, Set<RecordId>> = new Map()\n\n  // (experimental) if true, DatabaseDriver is in a broken state and should not be used anymore\n  _isBroken: boolean = false\n\n  constructor(options: LokiAdapterOptions): void {\n    const { schema, migrations } = options\n    this.options = options\n    this.schema = schema\n    this.migrations = migrations\n  }\n\n  async setUp(): Promise<void> {\n    await this._openDatabase()\n    await this._migrateIfNeeded()\n  }\n\n  isCached(table: TableName<any>, id: RecordId): boolean {\n    const cachedSet = this.cachedRecords.get(table)\n    return cachedSet ? cachedSet.has(id) : false\n  }\n\n  markAsCached(table: TableName<any>, id: RecordId): void {\n    const cachedSet = this.cachedRecords.get(table)\n    if (cachedSet) {\n      cachedSet.add(id)\n    } else {\n      this.cachedRecords.set(table, new Set([id]))\n    }\n  }\n\n  removeFromCache(table: TableName<any>, id: RecordId): void {\n    const cachedSet = this.cachedRecords.get(table)\n    if (cachedSet) {\n      cachedSet.delete(id)\n    }\n  }\n\n  clearCachedRecords(): void {\n    this.cachedRecords = new Map()\n  }\n\n  getCache(table: TableName<any>): Set<RecordId> {\n    const cache = this.cachedRecords.get(table)\n    if (cache) {\n      return cache\n    }\n\n    const newCache = new Set([])\n    this.cachedRecords.set(table, newCache)\n    return newCache\n  }\n\n  find(table: TableName<any>, id: RecordId): CachedFindResult {\n    if (this.isCached(table, id)) {\n      return id\n    }\n\n    const raw = this.loki.getCollection(table).by('id', id)\n\n    if (!raw) {\n      return null\n    }\n\n    this.markAsCached(table, id)\n    return sanitizedRaw(raw, this.schema.tables[table])\n  }\n\n  query(query: SerializedQuery): CachedQueryResult {\n    const records = executeQuery(query, this.loki)\n    return this._compactQueryResults(records, query.table)\n  }\n\n  queryIds(query: SerializedQuery): RecordId[] {\n    return executeQuery(query, this.loki).map((record) => record.id)\n  }\n\n  unsafeQueryRaw(query: SerializedQuery): any[] {\n    return executeQuery(query, this.loki)\n  }\n\n  count(query: SerializedQuery): number {\n    return executeCount(query, this.loki)\n  }\n\n  batch(operations: BatchOperation[]): void {\n    // NOTE: Mutations to LokiJS db are *not* transactional!\n    // This is terrible and lame for a database, but there's just no simple and good solution to this\n    // Loki transactions rely on making a full copy of the data, and reverting to it if something breaks.\n    // This is just unbearable for production-sized databases (too much memory required)\n    // It could be done with some sort of advanced journaling/CoW structure scheme, but that would\n    // be very complicated (in itself a source of bugs), and possibly quite expensive cpu-wise\n    //\n    // So instead, we assume that writes MUST succeed. If they don't, we put DatabaseDriver in a \"broken\"\n    // state, refuse to persist or further mutate the DB, and notify the app (and user) about it.\n    //\n    // It can be assumed that Loki-level mutations that fail are WatermelonDB bugs that must be fixed\n    this._assertNotBroken()\n    try {\n      const recordsToCreate: { [TableName<any>]: RawRecord[] } = {}\n\n      operations.forEach((operation) => {\n        const [type, table, raw] = operation\n        switch (type) {\n          case 'create':\n            if (!recordsToCreate[table]) {\n              recordsToCreate[table] = []\n            }\n            recordsToCreate[table].push((raw: $FlowFixMe<RawRecord>))\n\n            break\n          default:\n            break\n        }\n      })\n\n      // We're doing a second pass, because batch insert is much faster in Loki\n      Object.entries(recordsToCreate).forEach((args: any) => {\n        const [table, raws]: [TableName<any>, RawRecord[]] = args\n        const shouldRebuildIndexAfterInsert = raws.length >= 1000 // only profitable for large inserts\n        this.loki.getCollection(table).insert(raws, shouldRebuildIndexAfterInsert)\n\n        const cache = this.getCache(table)\n        raws.forEach((raw) => {\n          cache.add(raw.id)\n        })\n      })\n\n      operations.forEach((operation) => {\n        const [type, table, rawOrId] = operation\n        const collection = this.loki.getCollection(table)\n\n        switch (type) {\n          case 'update': {\n            // Loki identifies records using internal $loki ID so we must find the saved record first\n            const lokiId = collection.by('id', (rawOrId: any).id).$loki\n            const raw: DirtyRaw = rawOrId\n            raw.$loki = lokiId\n            collection.update(raw)\n            break\n          }\n          case 'markAsDeleted': {\n            const id: RecordId = (rawOrId: any)\n            const record = collection.by('id', id)\n            if (record) {\n              record._status = 'deleted'\n              collection.update(record)\n              this.removeFromCache(table, id)\n            }\n            break\n          }\n          case 'destroyPermanently': {\n            const id: RecordId = (rawOrId: any)\n            const record = collection.by('id', id)\n            record && collection.remove(record)\n            this.removeFromCache(table, id)\n            break\n          }\n          default:\n            break\n        }\n      })\n    } catch (error) {\n      this._fatalError(error)\n    }\n  }\n\n  getDeletedRecords(table: TableName<any>): RecordId[] {\n    return this.loki\n      .getCollection(table)\n      .find({ _status: { $eq: 'deleted' } })\n      .map((record) => record.id)\n  }\n\n  unsafeExecute(operations: UnsafeExecuteOperations): void {\n    if (process.env.NODE_ENV !== 'production') {\n      invariant(\n        operations &&\n          typeof operations === 'object' &&\n          Object.keys(operations).length === 1 &&\n          typeof operations.loki === 'function',\n        'unsafeExecute expects an { loki: loki => { ... } } object',\n      )\n    }\n    const lokiBlock: (Loki) => void = (operations: any).loki\n    lokiBlock(this.loki)\n  }\n\n  async unsafeResetDatabase(): Promise<void> {\n    await deleteDatabase(this.loki)\n\n    this.cachedRecords.clear()\n    logger.log('[Loki] Database is now reset')\n\n    await this._openDatabase()\n    this._setUpSchema()\n  }\n\n  // *** LocalStorage ***\n\n  getLocal(key: string): ?string {\n    const record = this._findLocal(key)\n    return record ? record.value : null\n  }\n\n  setLocal(key: string, value: string): void {\n    this._assertNotBroken()\n    try {\n      const record = this._findLocal(key)\n\n      if (record) {\n        record.value = value\n        this._localStorage.update(record)\n      } else {\n        const newRecord = { key, value }\n        this._localStorage.insert(newRecord)\n      }\n    } catch (error) {\n      this._fatalError(error)\n    }\n  }\n\n  removeLocal(key: string): void {\n    this._assertNotBroken()\n    try {\n      const record = this._findLocal(key)\n\n      if (record) {\n        this._localStorage.remove(record)\n      }\n    } catch (error) {\n      this._fatalError(error)\n    }\n  }\n\n  // *** Internals ***\n\n  async _openDatabase(): Promise<void> {\n    logger.log('[Loki] Initializing IndexedDB')\n\n    this.loki = await newLoki(this.options)\n\n    logger.log('[Loki] Database loaded')\n  }\n\n  _setUpSchema(): void {\n    logger.log('[Loki] Setting up schema')\n\n    // Add collections\n    const tables: TableSchema[] = (Object.values(this.schema.tables): any)\n    tables.forEach((tableSchema) => {\n      this._addCollection(tableSchema)\n    })\n\n    this.loki.addCollection('local_storage', {\n      unique: ['key'],\n      indices: [],\n      disableMeta: true,\n    })\n\n    // Set database version\n    this._databaseVersion = this.schema.version\n\n    logger.log('[Loki] Database collections set up')\n  }\n\n  _addCollection(tableSchema: TableSchema): void {\n    const { name, columnArray } = tableSchema\n    const indexedColumns: string[] = columnArray.reduce(\n      (indexes: string[], column) =>\n        column.isIndexed ? indexes.concat([(column.name: string)]) : indexes,\n      [],\n    )\n\n    this.loki.addCollection(name, {\n      unique: ['id'],\n      indices: ['_status', ...indexedColumns],\n      disableMeta: true,\n    })\n  }\n\n  get _databaseVersion(): SchemaVersion {\n    const databaseVersionRaw = this.getLocal(SCHEMA_VERSION_KEY) || ''\n    return parseInt(databaseVersionRaw, 10) || 0\n  }\n\n  set _databaseVersion(version: SchemaVersion): void {\n    this.setLocal(SCHEMA_VERSION_KEY, `${version}`)\n  }\n\n  async _migrateIfNeeded(): Promise<void> {\n    const dbVersion = this._databaseVersion\n    const schemaVersion = this.schema.version\n\n    if (dbVersion === schemaVersion) {\n      // All good!\n    } else if (dbVersion === 0) {\n      logger.log('[Loki] Empty database, setting up')\n      await this.unsafeResetDatabase()\n    } else if (dbVersion > 0 && dbVersion < schemaVersion) {\n      logger.log('[Loki] Database has old schema version. Migration is required.')\n      const migrationSteps = this._getMigrationSteps(dbVersion)\n\n      if (migrationSteps) {\n        logger.log(`[Loki] Migrating from version ${dbVersion} to ${this.schema.version}...`)\n        try {\n          await this._migrate(migrationSteps)\n        } catch (error) {\n          logger.error('[Loki] Migration failed', error)\n          throw error\n        }\n      } else {\n        logger.warn(\n          '[Loki] Migrations not available for this version range, resetting database instead',\n        )\n        await this.unsafeResetDatabase()\n      }\n    } else {\n      logger.warn(\n        `[Loki] Database has newer version ${dbVersion} than app schema ${schemaVersion}. Resetting database.`,\n      )\n      await this.unsafeResetDatabase()\n    }\n  }\n\n  _getMigrationSteps(fromVersion: SchemaVersion): ?(MigrationStep[]) {\n    // TODO: Remove this after migrations are shipped\n    const { migrations } = this\n    if (!migrations) {\n      return null\n    }\n\n    const { stepsForMigration } = require('../../../Schema/migrations/stepsForMigration')\n    return stepsForMigration({\n      migrations,\n      fromVersion,\n      toVersion: this.schema.version,\n    })\n  }\n\n  async _migrate(steps: MigrationStep[]): Promise<void> {\n    steps.forEach((step) => {\n      if (step.type === 'create_table') {\n        this._executeCreateTableMigration(step)\n      } else if (step.type === 'add_columns') {\n        this._executeAddColumnsMigration(step)\n      } else if (step.type === 'sql') {\n        // ignore\n      } else {\n        throw new Error(`Unsupported migration step ${step.type}`)\n      }\n    })\n\n    // Set database version\n    this._databaseVersion = this.schema.version\n\n    logger.log(`[Loki] Migration successful`)\n  }\n\n  _executeCreateTableMigration({ schema }: CreateTableMigrationStep): void {\n    this._addCollection(schema)\n  }\n\n  _executeAddColumnsMigration({ table, columns }: AddColumnsMigrationStep): void {\n    const collection = this.loki.getCollection(table)\n\n    // update ALL records in the collection, adding new fields\n    collection.findAndUpdate({}, (record) => {\n      columns.forEach((column) => {\n        setRawSanitized(record, column.name, null, column)\n      })\n    })\n\n    // add indexes, if needed\n    columns.forEach((column) => {\n      if (column.isIndexed) {\n        collection.ensureIndex(column.name)\n      }\n    })\n  }\n\n  // Maps records to their IDs if the record is already cached on JS side\n  _compactQueryResults(records: DirtyRaw[], table: TableName<any>): CachedQueryResult {\n    const cache = this.getCache(table)\n    return records.map((raw) => {\n      const { id } = raw\n\n      if (cache.has(id)) {\n        return id\n      }\n\n      cache.add(id)\n      return sanitizedRaw(raw, this.schema.tables[table])\n    })\n  }\n\n  get _localStorage(): LokiCollection {\n    return this.loki.getCollection('local_storage')\n  }\n\n  _findLocal(key: string): ?{ value: string } {\n    const localStorage = this._localStorage\n    return localStorage && localStorage.by('key', key)\n  }\n\n  _assertNotBroken(): void {\n    if (this._isBroken) {\n      throw new Error('DatabaseDriver is in a broken state, bailing...')\n    }\n  }\n\n  // (experimental)\n  // TODO: Setup, migrations, delete database should also break driver\n  _fatalError(error: Error): void {\n    if (!experimentalAllowsFatalError) {\n      logger.warn(\n        'DatabaseDriver is broken, but experimentalAllowsFatalError has not been enabled to do anything about it...',\n      )\n      throw error\n    }\n    // Stop further mutations\n    this._isBroken = true\n\n    // Disable Loki autosave\n    lokiFatalError(this.loki)\n\n    // Notify handler\n    logger.error('DatabaseDriver is broken. App must be reloaded before continuing.')\n    const handler = this.options._onFatalError\n    handler && handler(error)\n\n    // Rethrow error\n    throw error\n  }\n}\n"
  },
  {
    "path": "src/adapters/lokijs/worker/cloneMessage/index.js",
    "content": "// @flow\n\n// shallow-clones objects (without checking their contents), but copies arrays\nexport function shallowCloneDeepObjects(value: any): any {\n  if (Array.isArray(value)) {\n    const returned = new Array(value.length)\n    for (let i = 0, len = value.length; i < len; i += 1) {\n      returned[i] = shallowCloneDeepObjects(value[i])\n    }\n    return returned\n  } else if (value && typeof value === 'object') {\n    return Object.assign({}, value)\n  }\n\n  return value\n}\n\nexport default function cloneMessage(data: any): any {\n  // TODO: Even better, it would be great if we had zero-copy architecture (COW RawRecords?) and we didn't have to clone\n  const method = data.cloneMethod\n  if (method === 'shallowCloneDeepObjects') {\n    const clonedData = data\n    clonedData.payload = shallowCloneDeepObjects(clonedData.payload)\n    return clonedData\n  } else if (method === 'immutable') {\n    // we get a pinky promise that the payload is immutable so we don't need to copy\n    return data\n  }\n\n  throw new Error('Unknown data.clone method for cloneMessage')\n}\n"
  },
  {
    "path": "src/adapters/lokijs/worker/cloneMessage/test.js",
    "content": "import { shallowCloneDeepObjects } from './index'\n\ndescribe('shallowCloneDeepObjects', () => {\n  it('shallow clones deep objects', () => {\n    const obj = { foo: 'bar' }\n    const deep = ['foo', ['bar', [obj]]]\n    const cloned = shallowCloneDeepObjects(deep)\n    expect(cloned).toEqual(deep)\n    expect(cloned).not.toBe(deep)\n    expect(cloned[1][1][0]).toEqual(obj)\n    expect(cloned[1][1][0]).not.toBe(obj)\n    obj.bar = 'baz'\n    expect(cloned[1][1][0]).toEqual({ foo: 'bar' })\n  })\n})\n"
  },
  {
    "path": "src/adapters/lokijs/worker/encodeQuery/index.js",
    "content": "// @flow\n/* eslint-disable no-use-before-define */\n\n// don't import whole `utils` to keep worker size small\nimport invariant from '../../../../utils/common/invariant'\nimport likeToRegexp from '../../../../utils/fp/likeToRegexp'\n\nimport type { QueryAssociation, SerializedQuery } from '../../../../Query'\nimport type {\n  Operator,\n  WhereDescription,\n  On,\n  And,\n  Or,\n  Where,\n  Clause,\n  Comparison,\n} from '../../../../QueryDescription'\nimport { type TableName, type ColumnName } from '../../../../Schema'\n\nexport type LokiRawQuery = Object | typeof undefined\ntype LokiOperator =\n  | '$aeq'\n  | '$eq'\n  | '$gt'\n  | '$gte'\n  | '$lt'\n  | '$lte'\n  | '$ne'\n  | '$in'\n  | '$nin'\n  | '$between'\n  | '$regex'\n  | '$containsString'\ntype LokiKeyword = LokiOperator | '$and' | '$or'\n\nexport type LokiJoin = $Exact<{\n  table: TableName<any>,\n  query: LokiRawQuery,\n  mapKey: ColumnName,\n  joinKey: ColumnName,\n}>\n\nexport type LokiQuery = $Exact<{\n  table: TableName<any>,\n  query: LokiRawQuery,\n  hasJoins: boolean,\n}>\n\nconst weakNotNull = { $not: { $aeq: null } }\n\nconst encodeComparison = (comparison: Comparison, value: any): LokiRawQuery => {\n  // TODO: It's probably possible to improve performance of those operators by making them\n  // binary-search compatible (i.e. don't use $and, $not)\n  // TODO: We might be able to use $jgt, $jbetween, etc. — but ensure the semantics are right\n  // and it won't break indexing\n\n  const { operator } = comparison\n\n  if (comparison.right.column) {\n    // Encode for column comparisons\n    switch (operator) {\n      case 'eq':\n        return { $$aeq: value }\n      case 'notEq':\n        return { $not: { $$aeq: value } }\n      case 'gt':\n        return { $$gt: value }\n      case 'gte':\n        return { $$gte: value }\n      case 'weakGt':\n        return { $$gt: value }\n      case 'lt':\n        return { $and: [{ $$lt: value }, weakNotNull] }\n      case 'lte':\n        return { $and: [{ $$lte: value }, weakNotNull] }\n      default:\n        throw new Error(`Illegal operator ${operator} for column comparisons`)\n    }\n  } else {\n    switch (operator) {\n      case 'eq':\n        return { $aeq: value }\n      case 'notEq':\n        return { $not: { $aeq: value } }\n      case 'gt':\n        return { $gt: value }\n      case 'gte':\n        return { $gte: value }\n      case 'weakGt':\n        return { $gt: value } // Note: yup, this is correct (for non-column comparisons)\n      case 'lt':\n        return { $and: [{ $lt: value }, weakNotNull] }\n      case 'lte':\n        return { $and: [{ $lte: value }, weakNotNull] }\n      case 'oneOf':\n        return { $in: value }\n      case 'notIn':\n        return { $and: [{ $nin: value }, weakNotNull] }\n      case 'between':\n        return { $between: value }\n      case 'like':\n        return { $regex: likeToRegexp(value) }\n      case 'notLike':\n        return {\n          $and: [{ $not: { $eq: null } }, { $not: { $regex: likeToRegexp(value) } }],\n        }\n      case 'includes':\n        return { $containsString: value }\n      default:\n        throw new Error(`Unknown operator ${operator}`)\n    }\n  }\n}\n\nconst columnCompRequiresColumnNotNull: { [$FlowFixMe<Operator>]: boolean } = {\n  gt: true,\n  gte: true,\n  lt: true,\n  lte: true,\n}\n\nconst encodeWhereDescription: (WhereDescription) => LokiRawQuery = ({ left, comparison }) => {\n  const { operator, right } = comparison\n  const col: string = left\n  // $FlowFixMe - NOTE: order of ||s is important here, since .value can be falsy, but .column and .values are either truthy or are undefined\n  const comparisonRight: any = right.column || right.values || right.value\n\n  if (typeof right.value === 'string') {\n    // we can do fast path as we know that eq and aeq do the same thing for strings\n    if (operator === 'eq') {\n      return { [col]: { $eq: comparisonRight } }\n    } else if (operator === 'notEq') {\n      return { [col]: { $ne: comparisonRight } }\n    }\n  }\n  const colName: ?string = (right: any).column\n  const encodedComparison = encodeComparison(comparison, comparisonRight)\n\n  if (colName && columnCompRequiresColumnNotNull[operator]) {\n    return { $and: [{ [col]: encodedComparison }, { [colName]: weakNotNull }] }\n  }\n  return { [col]: encodedComparison }\n}\n\nconst encodeCondition: (QueryAssociation[]) => (Clause) => LokiRawQuery =\n  (associations) => (clause) => {\n    switch (clause.type) {\n      case 'and':\n        return encodeAnd(associations, clause)\n      case 'or':\n        return encodeOr(associations, clause)\n      case 'where':\n        return encodeWhereDescription(clause)\n      case 'on':\n        return encodeJoin(associations, clause)\n      case 'loki':\n        return clause.expr\n      default:\n        throw new Error(`Unknown clause ${clause.type}`)\n    }\n  }\n\nconst encodeConditions: (QueryAssociation[], Where[]) => LokiRawQuery[] = (\n  associations,\n  conditions,\n) => conditions.map(encodeCondition(associations))\n\nconst encodeAndOr =\n  (op: LokiKeyword) =>\n  (associations: QueryAssociation[], clause: And | Or): LokiRawQuery => {\n    const conditions = encodeConditions(associations, clause.conditions)\n    // flatten\n    return conditions.length === 1\n      ? conditions[0]\n      : // $FlowFixMe\n        { [op]: conditions }\n  }\n\nconst encodeAnd: (QueryAssociation[], And) => LokiRawQuery = encodeAndOr('$and')\nconst encodeOr: (QueryAssociation[], Or) => LokiRawQuery = encodeAndOr('$or')\n\n// Note: empty query returns `undefined` because\n// Loki's Collection.count() works but count({}) doesn't\nconst concatRawQueries = (queries: LokiRawQuery[]): LokiRawQuery => {\n  switch (queries.length) {\n    case 0:\n      return undefined\n    case 1:\n      return queries[0]\n    default:\n      return { $and: queries }\n  }\n}\n\nconst encodeRootConditions: (QueryAssociation[], Where[]) => LokiRawQuery = (\n  associations,\n  conditions,\n) => concatRawQueries(encodeConditions(associations, conditions))\n\nconst encodeJoin = (associations: QueryAssociation[], on: On): LokiRawQuery => {\n  const { table, conditions } = on\n  const association = associations.find(({ to }) => table === to)\n  invariant(\n    association,\n    'To nest Q.on inside Q.and/Q.or you must explicitly declare Q.experimentalJoinTables at the beginning of the query',\n  )\n  const { info } = association\n  return {\n    $join: {\n      table,\n      query: encodeRootConditions(associations, (conditions: any)),\n      mapKey: info.type === 'belongs_to' ? 'id' : info.foreignKey,\n      joinKey: info.type === 'belongs_to' ? info.key : 'id',\n    },\n  }\n}\n\nexport default function encodeQuery(query: SerializedQuery): LokiQuery {\n  const {\n    table,\n    description: { where, joinTables, sql },\n    associations,\n  } = query\n\n  invariant(!sql, '[Loki] Q.unsafeSqlQuery are not supported with LokiJSAdapter')\n\n  return {\n    table,\n    query: encodeRootConditions(associations, where),\n    hasJoins: !!joinTables.length,\n  }\n}\n"
  },
  {
    "path": "src/adapters/lokijs/worker/encodeQuery/test.js",
    "content": "import Query from '../../../../Query'\nimport Model from '../../../../Model'\nimport * as Q from '../../../../QueryDescription'\nimport encodeQueryRaw from './index'\n\n// TODO: Standardize these mocks (same as in sqlite encodeQuery, query test)\n\nclass MockTask extends Model {\n  static table = 'tasks'\n\n  static associations = {\n    projects: { type: 'belongs_to', key: 'project_id' },\n    tag_assignments: { type: 'has_many', foreignKey: 'task_id' },\n  }\n}\n\nclass MockProject extends Model {\n  static table = 'projects'\n\n  static associations = {\n    teams: { type: 'belongs_to', key: 'team_id' },\n  }\n}\n\nconst mockCollection = Object.freeze({\n  modelClass: MockTask,\n  db: { get: (table) => (table === 'projects' ? { modelClass: MockProject } : {}) },\n})\n\nconst encoded = (clauses) => encodeQueryRaw(new Query(mockCollection, clauses).serialize())\n\ndescribe('LokiJS encodeQuery', () => {\n  it('encodes simple queries', () => {\n    expect(encoded([])).toEqual({\n      table: 'tasks',\n      query: { _status: { $ne: 'deleted' } },\n      hasJoins: false,\n    })\n  })\n  it('encodes a single condition', () => {\n    expect(encoded([Q.where('col', 'hello')])).toEqual({\n      table: 'tasks',\n      query: {\n        $and: [{ col: { $eq: 'hello' } }, { _status: { $ne: 'deleted' } }],\n      },\n      hasJoins: false,\n    })\n  })\n  it('encodes multiple conditions and value types', () => {\n    expect(\n      encoded([\n        Q.where('col1', `value \"'with'\" quotes`),\n        Q.where('col2', 2),\n        Q.where('col3', true),\n        Q.where('col4', false),\n        Q.where('col5', null),\n      ]),\n    ).toEqual({\n      table: 'tasks',\n      query: {\n        $and: [\n          { col1: { $eq: `value \"'with'\" quotes` } },\n          { col2: { $aeq: 2 } },\n          { col3: { $aeq: true } },\n          { col4: { $aeq: false } },\n          { col5: { $aeq: null } },\n          { _status: { $ne: 'deleted' } },\n        ],\n      },\n      hasJoins: false,\n    })\n  })\n  it('encodes multiple operators', () => {\n    expect(\n      encoded([\n        Q.where('col1', Q.eq('val1')),\n        Q.where('col2', Q.gt(2)),\n        Q.where('col3', Q.gte(3)),\n        Q.where('col3_5', Q.weakGt(3.5)),\n        Q.where('col4', Q.lt(4)),\n        Q.where('col5', Q.lte(5)),\n        Q.where('col6', Q.notEq(null)),\n        Q.where('col7', Q.oneOf([1, 2, 3])),\n        Q.where('col8', Q.notIn(['\"a\"', 'b', 'c'])),\n        Q.where('col9', Q.between(10, 11)),\n        Q.where('col10', Q.like('%abc')),\n        Q.where('col11', Q.notLike('%abc')),\n        Q.where('col12', Q.includes('foo')),\n      ]),\n    ).toEqual({\n      table: 'tasks',\n      query: {\n        $and: [\n          { col1: { $eq: 'val1' } },\n          { col2: { $gt: 2 } },\n          { col3: { $gte: 3 } },\n          { col3_5: { $gt: 3.5 } },\n          { col4: { $and: [{ $lt: 4 }, { $not: { $aeq: null } }] } },\n          { col5: { $and: [{ $lte: 5 }, { $not: { $aeq: null } }] } },\n          { col6: { $not: { $aeq: null } } },\n          { col7: { $in: [1, 2, 3] } },\n          { col8: { $and: [{ $nin: ['\"a\"', 'b', 'c'] }, { $not: { $aeq: null } }] } },\n          { col9: { $between: [10, 11] } },\n          { col10: { $regex: /^.*abc$/is } },\n          { col11: { $and: [{ $not: { $eq: null } }, { $not: { $regex: /^.*abc$/is } }] } },\n          { col12: { $containsString: 'foo' } },\n          { _status: { $ne: 'deleted' } },\n        ],\n      },\n      hasJoins: false,\n    })\n  })\n  it('encodes column comparisons', () => {\n    expect(\n      encoded([\n        Q.where('col1', Q.eq(Q.column('right'))),\n        Q.where('col2', Q.gt(Q.column('right'))),\n        Q.where('col3', Q.gte(Q.column('right'))),\n        Q.where('col3_5', Q.weakGt(Q.column('right'))),\n        Q.where('col4', Q.lt(Q.column('right'))),\n        Q.where('col5', Q.lte(Q.column('right'))),\n        Q.where('col6', Q.notEq(Q.column('right'))),\n      ]),\n    ).toEqual({\n      table: 'tasks',\n      query: {\n        $and: [\n          { col1: { $$aeq: 'right' } },\n          { $and: [{ col2: { $$gt: 'right' } }, { right: { $not: { $aeq: null } } }] },\n          { $and: [{ col3: { $$gte: 'right' } }, { right: { $not: { $aeq: null } } }] },\n          { col3_5: { $$gt: 'right' } },\n          {\n            $and: [\n              { col4: { $and: [{ $$lt: 'right' }, { $not: { $aeq: null } }] } },\n              { right: { $not: { $aeq: null } } },\n            ],\n          },\n          {\n            $and: [\n              { col5: { $and: [{ $$lte: 'right' }, { $not: { $aeq: null } }] } },\n              { right: { $not: { $aeq: null } } },\n            ],\n          },\n          { col6: { $not: { $$aeq: 'right' } } },\n          { _status: { $ne: 'deleted' } },\n        ],\n      },\n      hasJoins: false,\n    })\n  })\n  it('encodes AND/OR nesting', () => {\n    expect(\n      encoded([\n        Q.where('col1', 'value'),\n        Q.or(\n          Q.where('col2', true),\n          Q.where('col3', null),\n          Q.and(Q.where('col4', Q.gt(5)), Q.where('col5', Q.notIn([6, 7]))),\n        ),\n      ]),\n    ).toEqual({\n      table: 'tasks',\n      query: {\n        $and: [\n          { col1: { $eq: 'value' } },\n          {\n            $or: [\n              { col2: { $aeq: true } },\n              { col3: { $aeq: null } },\n              {\n                $and: [\n                  { col4: { $gt: 5 } },\n                  { col5: { $and: [{ $nin: [6, 7] }, { $not: { $aeq: null } }] } },\n                ],\n              },\n            ],\n          },\n          { _status: { $ne: 'deleted' } },\n        ],\n      },\n      hasJoins: false,\n    })\n  })\n  it('encodes JOIN queries', () => {\n    expect(\n      encoded([\n        Q.on('projects', 'team_id', 'abcdef'),\n        Q.where('left_column', 'right_value'),\n        Q.on('tag_assignments', 'tag_id', Q.oneOf(['a', 'b', 'c'])),\n        Q.on('projects', 'is_active', true),\n      ]),\n    ).toEqual({\n      table: 'tasks',\n      query: {\n        $and: [\n          {\n            $join: {\n              table: 'projects',\n              query: {\n                $and: [{ team_id: { $eq: 'abcdef' } }, { _status: { $ne: 'deleted' } }],\n              },\n              mapKey: 'id',\n              joinKey: 'project_id',\n            },\n          },\n          { left_column: { $eq: 'right_value' } },\n          {\n            $join: {\n              table: 'tag_assignments',\n              query: {\n                $and: [{ tag_id: { $in: ['a', 'b', 'c'] } }, { _status: { $ne: 'deleted' } }],\n              },\n              mapKey: 'task_id',\n              joinKey: 'id',\n            },\n          },\n          {\n            $join: {\n              table: 'projects',\n              query: {\n                $and: [{ is_active: { $aeq: true } }, { _status: { $ne: 'deleted' } }],\n              },\n              mapKey: 'id',\n              joinKey: 'project_id',\n            },\n          },\n          { _status: { $ne: 'deleted' } },\n        ],\n      },\n      hasJoins: true,\n    })\n  })\n  it(`encodes on()s nested inside AND/ORs`, () => {\n    expect(\n      encoded([\n        Q.experimentalJoinTables(['projects', 'tag_assignments']),\n        Q.or(\n          Q.where('is_followed', true),\n          Q.on('projects', 'is_followed', true),\n          Q.and(Q.on('tag_assignments', 'foo', 'bar')),\n        ),\n      ]),\n    ).toEqual({\n      table: 'tasks',\n      query: {\n        $and: [\n          {\n            $or: [\n              { is_followed: { $aeq: true } },\n              {\n                $join: {\n                  table: 'projects',\n                  query: {\n                    $and: [{ is_followed: { $aeq: true } }, { _status: { $ne: 'deleted' } }],\n                  },\n                  mapKey: 'id',\n                  joinKey: 'project_id',\n                },\n              },\n              {\n                $join: {\n                  table: 'tag_assignments',\n                  query: {\n                    $and: [{ foo: { $eq: 'bar' } }, { _status: { $ne: 'deleted' } }],\n                  },\n                  mapKey: 'task_id',\n                  joinKey: 'id',\n                },\n              },\n            ],\n          },\n          { _status: { $ne: 'deleted' } },\n        ],\n      },\n      hasJoins: true,\n    })\n  })\n  it(`encodes Q.on nested inside Q.on`, () => {\n    expect(\n      encoded([\n        Q.experimentalNestedJoin('projects', 'teams'),\n        Q.on('projects', Q.on('teams', 'foo', 'bar')),\n      ]),\n    ).toEqual({\n      table: 'tasks',\n      query: {\n        $and: [\n          {\n            $join: {\n              table: 'projects',\n              query: {\n                $and: [\n                  {\n                    $join: {\n                      table: 'teams',\n                      query: { $and: [{ foo: { $eq: 'bar' } }, { _status: { $ne: 'deleted' } }] },\n                      mapKey: 'id',\n                      joinKey: 'team_id',\n                    },\n                  },\n                  { _status: { $ne: 'deleted' } },\n                ],\n              },\n              mapKey: 'id',\n              joinKey: 'project_id',\n            },\n          },\n          { _status: { $ne: 'deleted' } },\n        ],\n      },\n      hasJoins: true,\n    })\n  })\n  it(`encodes multiple conditions on Q.on`, () => {\n    expect(\n      encoded([\n        Q.on('projects', [\n          Q.where('foo', 'bar'),\n          Q.or(Q.where('bar', 'baz'), Q.where('bla', Q.gt(Q.column('boop')))),\n        ]),\n      ]),\n    ).toEqual({\n      table: 'tasks',\n      query: {\n        $and: [\n          {\n            $join: {\n              table: 'projects',\n              query: {\n                $and: [\n                  { foo: { $eq: 'bar' } },\n                  {\n                    $or: [\n                      { bar: { $eq: 'baz' } },\n                      { $and: [{ bla: { $$gt: 'boop' } }, { boop: { $not: { $aeq: null } } }] },\n                    ],\n                  },\n                  { _status: { $ne: 'deleted' } },\n                ],\n              },\n              mapKey: 'id',\n              joinKey: 'project_id',\n            },\n          },\n          { _status: { $ne: 'deleted' } },\n        ],\n      },\n      hasJoins: true,\n    })\n  })\n  it('encodes unsafe loki subexpressions', () => {\n    expect(\n      encoded([\n        Q.unsafeLokiExpr({ foo: { $jgt: 10 } }),\n        Q.on('projects', Q.unsafeLokiExpr({ bar: { $jbetween: [1, 2] } })),\n      ]),\n    ).toEqual({\n      table: 'tasks',\n      query: {\n        $and: [\n          { foo: { $jgt: 10 } },\n          {\n            $join: {\n              table: 'projects',\n              query: { $and: [{ bar: { $jbetween: [1, 2] } }, { _status: { $ne: 'deleted' } }] },\n              mapKey: 'id',\n              joinKey: 'project_id',\n            },\n          },\n          { _status: { $ne: 'deleted' } },\n        ],\n      },\n      hasJoins: true,\n    })\n  })\n  it(`fails to encode nested on without explicit joinTables`, () => {\n    expect(() => encoded([Q.or(Q.on('projects', 'is_followed', true))])).toThrow(\n      'explicitly declare Q.experimentalJoinTables',\n    )\n  })\n  it(`throws an error on unsupported query clauses`, () => {\n    expect(() => encoded([Q.unsafeSqlExpr('haha sql goes brrr')])).toThrow('Unknown clause')\n    expect(() => encoded([Q.unsafeSqlQuery('select * from tasks')])).toThrow('not supported')\n  })\n})\n"
  },
  {
    "path": "src/adapters/lokijs/worker/executeQuery.js",
    "content": "// @flow\n\nimport type { SerializedQuery } from '../../../Query'\n\nimport type { DirtyRaw } from '../../../RawRecord'\n\nimport encodeQuery from './encodeQuery'\nimport performJoins from './performJoins'\nimport type { Loki, LokiResultset } from '../type'\nimport type { LokiJoin } from './encodeQuery'\n\n// Finds IDs of matching records on foreign table\nfunction performJoin(join: LokiJoin, loki: Loki): DirtyRaw[] {\n  const { table, query } = join\n\n  const collection = loki.getCollection(table).chain()\n  const records = collection.find(query).data()\n\n  return records\n}\n\nfunction performQuery(query: SerializedQuery, loki: Loki): LokiResultset {\n  // Step one: perform all inner queries (JOINs) to get the single table query\n  const lokiQuery = encodeQuery(query)\n  const mainQuery = performJoins(lokiQuery, (join) => performJoin(join, loki))\n\n  // Step two: fetch all records matching query\n  const collection = loki.getCollection(query.table).chain()\n  let resultset = collection.find(mainQuery)\n\n  // Step three: sort, skip, take\n  const { sortBy, take, skip } = query.description\n  if (sortBy.length) {\n    resultset = resultset.compoundsort(\n      sortBy.map(({ sortColumn, sortOrder }) => [sortColumn, sortOrder === 'desc']),\n    )\n  }\n  if (skip) {\n    resultset = resultset.offset(skip)\n  }\n  if (take) {\n    resultset = resultset.limit(take)\n  }\n\n  return resultset\n}\n\nexport function executeQuery(query: SerializedQuery, loki: Loki): DirtyRaw[] {\n  const { lokiTransform } = query.description\n  const results = performQuery(query, loki).data()\n\n  if (lokiTransform) {\n    return lokiTransform(results, loki)\n  }\n\n  return results\n}\n\nexport function executeCount(query: SerializedQuery, loki: Loki): number {\n  const { lokiTransform } = query.description\n  const resultset = performQuery(query, loki)\n\n  if (lokiTransform) {\n    const records = lokiTransform(resultset.data(), loki)\n    return records.length\n  }\n  return resultset.count()\n}\n"
  },
  {
    "path": "src/adapters/lokijs/worker/loki.worker.js",
    "content": "// @flow\n/* eslint-disable no-restricted-globals */\n\nimport DatabaseBridge from './DatabaseBridge'\nimport type Worker from './synchronousWorker'\n\nconst getDefaultExport = (): any => {\n  self.workerClass = new DatabaseBridge(self)\n  return self\n}\n\nexport default (getDefaultExport(): Worker)\n"
  },
  {
    "path": "src/adapters/lokijs/worker/lokiExtensions.js",
    "content": "// @flow\n/* eslint-disable no-undef */\n\n// don't import the whole utils/ here!\nimport logger from '../../../utils/common/logger'\nimport type { LokiAdapterOptions } from '../index'\nimport type { Loki } from '../type'\n\nconst isIDBAvailable = (onQuotaExceededError: ?(error: Error) => void) => {\n  return new Promise((resolve) => {\n    // $FlowFixMe\n    if (typeof indexedDB === 'undefined') {\n      resolve(false)\n    }\n\n    // in Firefox private mode, IDB will be available, but will fail to open\n    // $FlowFixMe\n    const checkRequest: IDBOpenDBRequest = indexedDB.open('WatermelonIDBChecker')\n    checkRequest.onsuccess = (e) => {\n      const db: IDBDatabase = e.target.result\n      db.close()\n      resolve(true)\n    }\n    checkRequest.onerror = (event) => {\n      const error: ?Error = event?.target?.error\n      // this is what Firefox in Private Mode returns:\n      // DOMException: \"A mutation operation was attempted on a database that did not allow mutations.\"\n      // code: 11, name: InvalidStateError\n      logger.error(\n        '[Loki] IndexedDB checker failed to open. Most likely, user is in Private Mode. It could also be a quota exceeded error. Will fall back to in-memory database.',\n        event,\n        error,\n      )\n      if (error && error.name === 'QuotaExceededError') {\n        logger.log('[Loki] Looks like disk quota was exceeded: ', error)\n        onQuotaExceededError && onQuotaExceededError(error)\n      }\n      resolve(false)\n    }\n    checkRequest.onblocked = () => {\n      logger.error('IndexedDB checker call is blocked')\n    }\n  })\n}\n\nasync function getLokiAdapter(options: LokiAdapterOptions): mixed {\n  const {\n    useIncrementalIndexedDB,\n    _testLokiAdapter: adapter,\n    onQuotaExceededError,\n    dbName,\n    extraIncrementalIDBOptions = {},\n  } = options\n  if (adapter) {\n    return adapter\n  } else if (await isIDBAvailable(onQuotaExceededError)) {\n    if (useIncrementalIndexedDB) {\n      const IncrementalIDBAdapter = options._betaLoki\n        ? require('lokijs/src/incremental-indexeddb-adapter')\n        : require('lokijs/src/incremental-indexeddb-adapter')\n      // $FlowFixMe\n      return new IncrementalIDBAdapter(extraIncrementalIDBOptions)\n    }\n    const LokiIndexedAdapter = require('lokijs/src/loki-indexed-adapter')\n    return new LokiIndexedAdapter(dbName)\n  }\n\n  // if IDB is unavailable (that happens in private mode), fall back to memory adapter\n  // we could also fall back to localstorage adapter, but it will fail in all but the smallest dbs\n  const { LokiMemoryAdapter } = options._betaLoki ? require('lokijs') : require('lokijs')\n  return new LokiMemoryAdapter()\n}\n\nexport async function newLoki(options: LokiAdapterOptions): Loki {\n  const { extraLokiOptions = {} } = options\n  const LokiDb = options._betaLoki ? require('lokijs') : require('lokijs')\n  // $FlowFixMe\n  const loki: Loki = new LokiDb(options.dbName, {\n    adapter: await getLokiAdapter(options),\n    autosave: true,\n    autosaveInterval: 500,\n    verbose: true,\n    ...extraLokiOptions,\n  })\n\n  // force load database now\n  await new Promise((resolve, reject) => {\n    loki.loadDatabase({}, (error) => {\n      error ? reject(error) : resolve()\n    })\n  })\n\n  return loki\n}\n\nexport async function deleteDatabase(loki: Loki): Promise<void> {\n  await new Promise((resolve, reject) => {\n    // Works around a race condition - Loki doesn't disable autosave or drain save queue before\n    // deleting database, so it's possible to delete and then have the database be saved\n    loki.close(() => {\n      loki.deleteDatabase({}, (response) => {\n        // LokiIndexedAdapter responds with `{ success: true }`, while\n        // LokiMemory adapter just calls it with no params\n        if ((response && response.success) || response === undefined) {\n          resolve()\n        } else {\n          reject(response)\n        }\n      })\n    })\n  })\n}\n\n// In case of a fatal error, break Loki so that it cannot save its contents to disk anymore\n// This might result in a loss of data in recent changes, but we assume that whatever caused the\n// fatal error has corrupted the database, so we want to prevent it from being persisted\n// There's no recovery from this, app must be restarted with a fresh LokiJSAdapter.\nexport function lokiFatalError(loki: Loki): void {\n  try {\n    // below is some very ugly defensive coding, but we're fatal and don't trust anyone anymore\n    const fatalHandler = () => {\n      throw new Error('Illegal attempt to save Loki database after a fatal error')\n    }\n    loki.save = fatalHandler\n    loki.saveDatabase = fatalHandler\n    loki.saveDatabaseInternal = fatalHandler\n    // disable autosave\n    loki.autosave = false\n    loki.autosaveDisable()\n    // close db\n    loki.close()\n  } catch (error) {\n    logger.error('Failed to perform loki fatal error')\n    logger.error(error)\n  }\n}\n"
  },
  {
    "path": "src/adapters/lokijs/worker/performJoins/index.js",
    "content": "// @flow\n\nimport type { LokiQuery, LokiJoin, LokiRawQuery } from '../encodeQuery'\nimport type { DirtyRaw } from '../../../../RawRecord'\n\ntype QueryPerformer = (join: LokiJoin) => DirtyRaw[]\n\nfunction performJoinsImpl(query: LokiRawQuery, performer: QueryPerformer): LokiRawQuery {\n  if (!query) {\n    return query\n  } else if (query.$join) {\n    const join: LokiJoin = query.$join\n    const joinQuery = performJoinsImpl(join.query, performer)\n    join.query = joinQuery\n    const records = performer(join)\n\n    // for queries on `belongs_to` tables, matchingIds will be IDs of the parent table records\n    //   (e.g. task: { project_id in ids })\n    // and for `has_many` tables, it will be IDs of the main table records\n    //   (e.g. task: { id in (ids from tag_assignment.task_id) })\n    const matchingIds = records.map((record) => record[join.mapKey])\n    return { [(join.joinKey: string)]: { $in: matchingIds } }\n  } else if (query.$and) {\n    return { $and: query.$and.map((clause) => performJoinsImpl(clause, performer)) }\n  } else if (query.$or) {\n    return { $or: query.$or.map((clause) => performJoinsImpl(clause, performer)) }\n  }\n  return query\n}\n\nexport default function performJoins(\n  lokiQuery: LokiQuery,\n  performer: QueryPerformer,\n): LokiRawQuery {\n  const { query, hasJoins } = lokiQuery\n\n  if (!hasJoins) {\n    return query\n  }\n\n  return performJoinsImpl(query, performer)\n}\n"
  },
  {
    "path": "src/adapters/lokijs/worker/performJoins/test.js",
    "content": "import performJoins from './index'\nimport encodeQuery from '../encodeQuery'\nimport Query from '../../../../Query'\nimport Model from '../../../../Model'\nimport * as Q from '../../../../QueryDescription'\n\n// TODO: Standardize these mocks (same as in sqlite encodeQuery, query test)\n\nclass MockTask extends Model {\n  static table = 'tasks'\n\n  static associations = {\n    projects: { type: 'belongs_to', key: 'project_id' },\n    tag_assignments: { type: 'has_many', foreignKey: 'task_id' },\n  }\n}\n\nclass MockProject extends Model {\n  static table = 'projects'\n\n  static associations = {\n    teams: { type: 'belongs_to', key: 'team_id' },\n  }\n}\n\nconst mockCollection = Object.freeze({\n  modelClass: MockTask,\n  db: { get: (table) => (table === 'projects' ? { modelClass: MockProject } : {}) },\n})\n\nconst testQuery = (query, performer) => performJoins(encodeQuery(query.serialize()), performer)\n\ndescribe('performJoins', () => {\n  it(`returns simple queries as is`, () => {\n    const query = new Query(mockCollection, [Q.where('col', 'hello')])\n    const performer = jest.fn()\n    expect(testQuery(query, performer)).toEqual({\n      $and: [{ col: { $eq: 'hello' } }, { _status: { $ne: 'deleted' } }],\n    })\n    expect(performer).toHaveBeenCalledTimes(0)\n  })\n  const makePerformer = () =>\n    jest.fn(({ table }) => {\n      if (table === 'projects') {\n        return [{ id: 'p1' }, { id: 'p2' }, { id: 'p3' }]\n      } else if (table === 'tag_assignments') {\n        return [{ task_id: 't1' }, { task_id: 't2' }]\n      } else if (table === 'teams') {\n        return [{ id: 't1' }, { id: 't2' }]\n      }\n      return []\n    })\n  it(`performs JOIN queries`, () => {\n    const query = new Query(mockCollection, [\n      Q.on('projects', 'team_id', 'abcdef'),\n      Q.where('left_column', 'right_value'),\n      Q.on('tag_assignments', 'tag_id', Q.oneOf(['a', 'b', 'c'])),\n      Q.on('projects', 'is_active', true),\n    ])\n    const performer = makePerformer()\n    expect(testQuery(query, performer)).toEqual({\n      $and: [\n        { project_id: { $in: ['p1', 'p2', 'p3'] } },\n        { left_column: { $eq: 'right_value' } },\n        { id: { $in: ['t1', 't2'] } },\n        { project_id: { $in: ['p1', 'p2', 'p3'] } },\n        { _status: { $ne: 'deleted' } },\n      ],\n    })\n    expect(performer).toHaveBeenCalledTimes(3)\n    expect(performer).toHaveBeenCalledWith({\n      table: 'projects',\n      query: {\n        $and: [{ team_id: { $eq: 'abcdef' } }, { _status: { $ne: 'deleted' } }],\n      },\n      mapKey: 'id',\n      joinKey: 'project_id',\n    })\n    expect(performer).toHaveBeenLastCalledWith({\n      table: 'projects',\n      query: {\n        $and: [{ is_active: { $aeq: true } }, { _status: { $ne: 'deleted' } }],\n      },\n      mapKey: 'id',\n      joinKey: 'project_id',\n    })\n    expect(performer).toHaveBeenCalledWith({\n      table: 'tag_assignments',\n      query: {\n        $and: [{ tag_id: { $in: ['a', 'b', 'c'] } }, { _status: { $ne: 'deleted' } }],\n      },\n      mapKey: 'task_id',\n      joinKey: 'id',\n    })\n  })\n  it(`performs on()s nested inside AND/ORs`, () => {\n    const query = new Query(mockCollection, [\n      Q.experimentalJoinTables(['projects', 'tag_assignments']),\n      Q.or(\n        Q.where('is_followed', true),\n        Q.on('projects', 'is_followed', true),\n        Q.and(Q.on('tag_assignments', 'foo', 'bar')),\n      ),\n    ])\n    const performer = makePerformer()\n    expect(testQuery(query, performer)).toEqual({\n      $and: [\n        {\n          $or: [\n            { is_followed: { $aeq: true } },\n            { project_id: { $in: ['p1', 'p2', 'p3'] } },\n            { id: { $in: ['t1', 't2'] } },\n          ],\n        },\n        { _status: { $ne: 'deleted' } },\n      ],\n    })\n    expect(performer).toHaveBeenCalledTimes(2)\n    expect(performer).toHaveBeenCalledWith({\n      table: 'projects',\n      query: {\n        $and: [{ is_followed: { $aeq: true } }, { _status: { $ne: 'deleted' } }],\n      },\n      mapKey: 'id',\n      joinKey: 'project_id',\n    })\n    expect(performer).toHaveBeenCalledWith({\n      table: 'tag_assignments',\n      query: {\n        $and: [{ foo: { $eq: 'bar' } }, { _status: { $ne: 'deleted' } }],\n      },\n      mapKey: 'task_id',\n      joinKey: 'id',\n    })\n  })\n  it(`performs Q.on nested inside Q.on`, () => {\n    const query = new Query(mockCollection, [\n      Q.experimentalJoinTables(['projects']),\n      Q.experimentalNestedJoin('projects', 'teams'),\n      Q.on('projects', Q.on('teams', 'foo', 'bar')),\n    ])\n    const performer = makePerformer()\n    expect(testQuery(query, performer)).toEqual({\n      $and: [{ project_id: { $in: ['p1', 'p2', 'p3'] } }, { _status: { $ne: 'deleted' } }],\n    })\n    expect(performer).toHaveBeenCalledTimes(2)\n    expect(performer).toHaveBeenCalledWith({\n      table: 'teams',\n      query: { $and: [{ foo: { $eq: 'bar' } }, { _status: { $ne: 'deleted' } }] },\n      mapKey: 'id',\n      joinKey: 'team_id',\n    })\n    expect(performer).toHaveBeenCalledWith({\n      table: 'projects',\n      query: { $and: [{ team_id: { $in: ['t1', 't2'] } }, { _status: { $ne: 'deleted' } }] },\n      mapKey: 'id',\n      joinKey: 'project_id',\n    })\n  })\n})\n"
  },
  {
    "path": "src/adapters/lokijs/worker/synchronousWorker.js",
    "content": "// @flow\n\nimport DatabaseBridge from './DatabaseBridge'\nimport cloneMessage from './cloneMessage'\n\n// Simulates the web worker API\nexport default class SynchronousWorker {\n  _bridge: DatabaseBridge\n\n  _workerContext: DedicatedWorkerGlobalScope\n\n  onmessage: ({ data: any }) => void = () => {}\n\n  constructor(): void {\n    // $FlowFixMe\n    this._workerContext = {\n      postMessage: (data) => {\n        this.onmessage({ data: cloneMessage(data) })\n      },\n      onmessage: () => {},\n    }\n    // $FlowFixMe\n    this._bridge = new DatabaseBridge(this._workerContext)\n  }\n\n  postMessage(data: any): void {\n    this._workerContext.onmessage(({ data: cloneMessage(data) }: any))\n  }\n}\n"
  },
  {
    "path": "src/adapters/sqlite/devtools.js",
    "content": "// @flow\n\nimport Query from '../../Query'\nimport encodeQuery from './encodeQuery'\nimport type { SQL } from './index'\n\n// $FlowFixMe\nQuery.prototype._sql = function _sql(count: boolean = false): SQL {\n  const query: Query<any> = this\n  const [sql] = encodeQuery(query.serialize(), count)\n  return sql\n}\n"
  },
  {
    "path": "src/adapters/sqlite/encodeBatch/index.js",
    "content": "// @flow\n/* eslint-disable import/no-import-module-exports */\nimport type { RecordId } from '../../../Model'\nimport type { TableName, TableSchema, AppSchema } from '../../../Schema'\nimport type { RawRecord } from '../../../RawRecord'\nimport type { BatchOperation } from '../../type'\nimport { validateTable } from '../../common'\nimport type { SQL, SQLiteArg, NativeBridgeBatchOperation } from '../type'\n\nfunction encodeInsertSql(schema: TableSchema): SQL {\n  const columns = schema.columnArray\n  const columnsSql = `\"id\", \"_status\", \"_changed${columns\n    .map((column) => `\", \"${column.name}`)\n    .join('')}\"`\n  const placeholders = Array(columns.length + 3)\n    .fill('?')\n    .join(', ')\n  return `insert into \"${schema.name}\" (${columnsSql}) values (${placeholders})`\n}\n\nfunction encodeInsertArgs(tableSchema: TableSchema, raw: RawRecord): SQLiteArg[] {\n  const columns = tableSchema.columnArray\n  const len = columns.length\n\n  const args = Array(len + 3)\n  args[0] = raw.id\n  args[1] = raw._status\n  args[2] = raw._changed\n  for (let i = 0; i < len; i++) {\n    args[i + 3] = raw[(columns[i].name: any)]\n  }\n\n  return args\n}\n\nfunction encodeUpdateSql(schema: TableSchema): SQL {\n  const columns = schema.columnArray\n  const placeholders = columns.map((column) => `, \"${column.name}\" = ?`).join('')\n  return `update \"${schema.name}\" set \"_status\" = ?, \"_changed\" = ?${placeholders} where \"id\" is ?`\n}\n\nfunction encodeUpdateArgs(tableSchema: TableSchema, raw: RawRecord): SQLiteArg[] {\n  const columns = tableSchema.columnArray\n  const len = columns.length\n\n  const args = Array(len + 3)\n  args[0] = raw._status\n  args[1] = raw._changed\n  for (let i = 0; i < len; i++) {\n    args[i + 2] = raw[(columns[i].name: any)]\n  }\n  args[len + 2] = raw.id\n\n  return args\n}\n\ntype GroupedBatchOperation =\n  | ['create', TableName<any>, RawRecord[]]\n  | ['update', TableName<any>, RawRecord[]]\n  | ['markAsDeleted', TableName<any>, RecordId[]]\n  | ['destroyPermanently', TableName<any>, RecordId[]]\n\nconst REMOVE_FROM_CACHE = -1\nconst IGNORE_CACHE = 0\nconst ADD_TO_CACHE = 1\n\nfunction groupOperations(operations: BatchOperation[]): GroupedBatchOperation[] {\n  const grouppedOperations: GroupedBatchOperation[] = []\n  let previousType: ?string = null\n  let previousTable: ?TableName<any> = null\n  let currentOperation: ?GroupedBatchOperation = null\n  operations.forEach((operation) => {\n    const [type, table, rawOrId] = operation\n    if (type !== previousType || table !== previousTable) {\n      if (currentOperation) {\n        grouppedOperations.push(currentOperation)\n      }\n      previousType = type\n      previousTable = table\n      // $FlowFixMe\n      currentOperation = [type, table, []]\n    }\n\n    // $FlowFixMe\n    currentOperation[2].push(rawOrId)\n  })\n  if (currentOperation) {\n    grouppedOperations.push(currentOperation)\n  }\n  return grouppedOperations\n}\n\nfunction withRecreatedIndices(\n  operations: NativeBridgeBatchOperation[],\n  schema: AppSchema,\n): NativeBridgeBatchOperation[] {\n  const { encodeDropIndices, encodeCreateIndices } = require('../encodeSchema')\n  const toEncodedOperations = (sqlStr: SQL) =>\n    sqlStr\n      .split(';') // TODO: This will break when FTS is merged\n      .filter((sql) => sql)\n      .map((sql) => [0, null, sql, [[]]])\n  operations.unshift(...toEncodedOperations(encodeDropIndices(schema)))\n  operations.push(...toEncodedOperations(encodeCreateIndices(schema)))\n  return operations\n}\n\nexport default function encodeBatch(\n  operations: BatchOperation[],\n  schema: AppSchema,\n): NativeBridgeBatchOperation[] {\n  const nativeOperations = groupOperations(operations).map(([type, table, recordsOrIds]) => {\n    validateTable(table, schema)\n\n    switch (type) {\n      case 'create':\n        return [\n          ADD_TO_CACHE,\n          table,\n          encodeInsertSql(schema.tables[table]),\n          recordsOrIds.map((raw) => encodeInsertArgs(schema.tables[table], (raw: any))),\n        ]\n      case 'update':\n        return [\n          IGNORE_CACHE,\n          null,\n          encodeUpdateSql(schema.tables[table]),\n          recordsOrIds.map((raw) => encodeUpdateArgs(schema.tables[table], (raw: any))),\n        ]\n      case 'markAsDeleted':\n        return [\n          REMOVE_FROM_CACHE,\n          table,\n          `update \"${table}\" set \"_status\" = 'deleted' where \"id\" == ?`,\n          recordsOrIds.map((id) => [(id: any)]),\n        ]\n      case 'destroyPermanently':\n        return [\n          REMOVE_FROM_CACHE,\n          table,\n          `delete from \"${table}\" where \"id\" == ?`,\n          recordsOrIds.map((id) => [(id: any)]),\n        ]\n      default:\n        throw new Error('unknown batch operation type')\n    }\n  })\n\n  // For large batches, it's profitable to delete all indices and then recreate them\n  if (operations.length >= 1000) {\n    return withRecreatedIndices(nativeOperations, schema)\n  }\n  return nativeOperations\n}\n\nif (process.env.NODE_ENV === 'test') {\n  /* eslint-disable dot-notation */\n  module['exports'].encodeInsertSql = encodeInsertSql\n  module['exports'].encodeInsertArgs = encodeInsertArgs\n  module['exports'].encodeUpdateSql = encodeUpdateSql\n  module['exports'].encodeUpdateArgs = encodeUpdateArgs\n  module['exports'].groupOperations = groupOperations\n}\n"
  },
  {
    "path": "src/adapters/sqlite/encodeBatch/test.js",
    "content": "import { appSchema, tableSchema } from '../../../Schema'\nimport { sanitizedRaw } from '../../../RawRecord'\nimport encodeBatch, {\n  encodeInsertArgs,\n  encodeInsertSql,\n  encodeUpdateSql,\n  encodeUpdateArgs,\n  groupOperations,\n} from './index'\n\nconst testSchema = appSchema({\n  version: 1,\n  tables: [\n    tableSchema({\n      name: 'tasks',\n      columns: [\n        { name: 'author_id', type: 'string', isIndexed: true },\n        { name: 'order', type: 'number', isOptional: true },\n        { name: 'created_at', type: 'number' },\n        { name: 'is_followed', type: 'boolean' },\n      ],\n    }),\n  ],\n})\n\nconst { tasks } = testSchema.tables\nconst sanitize = (raw) => sanitizedRaw(raw, tasks)\n\ndescribe('encodeInsertSql', () => {\n  it(`encodes insert for a table`, () => {\n    expect(encodeInsertSql(tasks)).toBe(\n      `insert into \"tasks\" (\"id\", \"_status\", \"_changed\", \"author_id\", \"order\", \"created_at\", \"is_followed\") values (?, ?, ?, ?, ?, ?, ?)`,\n    )\n  })\n})\n\ndescribe('encodeUpdateSql', () => {\n  it(`encodes update for a table`, () => {\n    expect(encodeUpdateSql(tasks)).toBe(\n      `update \"tasks\" set \"_status\" = ?, \"_changed\" = ?, \"author_id\" = ?, \"order\" = ?, \"created_at\" = ?, \"is_followed\" = ? where \"id\" is ?`,\n    )\n  })\n})\n\ndescribe('encodeInsertArgs', () => {\n  it(`encodes sql args for the insert query`, () => {\n    expect(encodeInsertArgs(tasks, sanitize({ id: 'abcdef' }))).toEqual([\n      'abcdef',\n      'created',\n      '',\n      '',\n      null,\n      0,\n      false,\n    ])\n    expect(\n      encodeInsertArgs(\n        tasks,\n        sanitize({\n          id: 'abcdef',\n          _status: 'updated',\n          _changed: 'order',\n          author_id: 'a1',\n          order: 3.14,\n          created_at: 1234567890,\n          is_followed: true,\n        }),\n      ),\n    ).toEqual(['abcdef', 'updated', 'order', 'a1', 3.14, 1234567890, true])\n  })\n})\n\ndescribe('encodeUpdateArgs', () => {\n  it(`encodes sql args for the update query`, () => {\n    expect(encodeUpdateArgs(tasks, sanitize({ id: 'abcdef' }))).toEqual([\n      'created',\n      '',\n      '',\n      null,\n      0,\n      false,\n      'abcdef',\n    ])\n    expect(\n      encodeUpdateArgs(\n        tasks,\n        sanitize({\n          id: 'abcdef',\n          _status: 'updated',\n          _changed: 'order',\n          author_id: 'a1',\n          order: 3.14,\n          created_at: 1234567890,\n          is_followed: true,\n        }),\n      ),\n    ).toEqual(['updated', 'order', 'a1', 3.14, 1234567890, true, 'abcdef'])\n  })\n})\n\ndescribe('groupOperations', () => {\n  it(`can group operations by type and table`, () => {\n    expect(groupOperations([])).toEqual([])\n    expect(\n      groupOperations([\n        ['create', 't1', 1],\n        ['create', 't1', 2],\n        ['create', 't1', 3],\n      ]),\n    ).toEqual([['create', 't1', [1, 2, 3]]])\n    expect(\n      groupOperations([\n        ['create', 't1', 10],\n        ['create', 't1', 11],\n        ['create', 't2', 21],\n        ['create', 't1', 12],\n        ['update', 't1', 31],\n        ['update', 't1', 32],\n      ]),\n    ).toEqual([\n      ['create', 't1', [10, 11]],\n      ['create', 't2', [21]],\n      ['create', 't1', [12]],\n      ['update', 't1', [31, 32]],\n    ])\n  })\n})\n\ndescribe('encodeBatch', () => {\n  it(`can encode a native batch`, () => {\n    expect(encodeBatch([], testSchema)).toEqual([])\n    expect(\n      encodeBatch(\n        [\n          ['create', 'tasks', sanitize({ id: 't1' })],\n          ['create', 'tasks', sanitize({ id: 't2' })],\n          ['update', 'tasks', sanitize({ id: 't3' })],\n          ['markAsDeleted', 'tasks', 'foo'],\n          ['destroyPermanently', 'tasks', 'bar'],\n          ['destroyPermanently', 'tasks', 'baz'],\n        ],\n        testSchema,\n      ),\n    ).toEqual([\n      [\n        1,\n        'tasks',\n        encodeInsertSql(tasks),\n        [\n          encodeInsertArgs(tasks, sanitize({ id: 't1' })),\n          encodeInsertArgs(tasks, sanitize({ id: 't2' })),\n        ],\n      ],\n      [0, null, encodeUpdateSql(tasks), [encodeUpdateArgs(tasks, sanitize({ id: 't3' }))]],\n      [-1, 'tasks', `update \"tasks\" set \"_status\" = 'deleted' where \"id\" == ?`, [['foo']]],\n      [-1, 'tasks', `delete from \"tasks\" where \"id\" == ?`, [['bar'], ['baz']]],\n    ])\n  })\n  it(`can recreate indices for large batches`, () => {\n    expect(encodeBatch(Array(1000).fill(['markAsDeleted', 'tasks', 'foo']), testSchema)).toEqual([\n      [0, null, 'drop index if exists \"tasks_author_id\"', [[]]],\n      [0, null, 'drop index if exists \"tasks__status\"', [[]]],\n      [\n        -1,\n        'tasks',\n        `update \"tasks\" set \"_status\" = 'deleted' where \"id\" == ?`,\n        Array(1000).fill(['foo']),\n      ],\n      [0, null, 'create index if not exists \"tasks_author_id\" on \"tasks\" (\"author_id\")', [[]]],\n      [0, null, 'create index if not exists \"tasks__status\" on \"tasks\" (\"_status\")', [[]]],\n    ])\n  })\n})\n"
  },
  {
    "path": "src/adapters/sqlite/encodeQuery/index.js",
    "content": "// @flow\n/* eslint-disable no-use-before-define */\n\nimport { invariant } from '../../../utils/common'\nimport type { SerializedQuery, QueryAssociation } from '../../../Query'\nimport type {\n  NonNullValues,\n  Operator,\n  Where,\n  ComparisonRight,\n  Comparison,\n  SortBy,\n  QueryDescription,\n} from '../../../QueryDescription'\nimport * as Q from '../../../QueryDescription'\nimport { type TableName, type ColumnName } from '../../../Schema'\n\nimport encodeValue from '../encodeValue'\nimport type { SQL, SQLiteArg } from '../index'\n\nfunction mapJoin<T>(array: T[], mapper: (T) => string, joiner: string): string {\n  // NOTE: DO NOT try to optimize this by concatenating strings together. In non-JIT JSC,\n  // concatenating strings is extremely slow (5000ms vs 120ms on 65K sample)\n  return array.map(mapper).join(joiner)\n}\n\nconst encodeValues: (NonNullValues) => string = (values) =>\n  `(${mapJoin((values: any[]), encodeValue, ', ')})`\n\nconst getComparisonRight = (table: TableName<any>, comparisonRight: ComparisonRight): string => {\n  if (comparisonRight.values) {\n    return encodeValues(comparisonRight.values)\n  } else if (comparisonRight.column) {\n    return `\"${table}\".\"${comparisonRight.column}\"`\n  }\n\n  return typeof comparisonRight.value !== 'undefined' ? encodeValue(comparisonRight.value) : 'null'\n}\n\n// Note: it's necessary to use `is` / `is not` for NULL comparisons to work correctly\n// See: https://sqlite.org/lang_expr.html\nconst operators: { [Operator]: string } = {\n  eq: 'is',\n  notEq: 'is not',\n  gt: '>',\n  gte: '>=',\n  weakGt: '>', // For non-column comparison case\n  lt: '<',\n  lte: '<=',\n  oneOf: 'in',\n  notIn: 'not in',\n  between: 'between',\n  like: 'like',\n  notLike: 'not like',\n}\n\nconst encodeComparison = (table: TableName<any>, comparison: Comparison) => {\n  const { operator } = comparison\n  if (operator === 'between') {\n    const { right } = comparison\n    return right.values\n      ? `between ${encodeValue(right.values[0])} and ${encodeValue(right.values[1])}`\n      : ''\n  }\n\n  return `${operators[operator]} ${getComparisonRight(table, comparison.right)}`\n}\n\nconst encodeWhere =\n  (table: TableName<any>, associations: QueryAssociation[]) =>\n  (where: Where): string => {\n    switch (where.type) {\n      case 'and':\n        return `(${encodeAndOr(associations, 'and', table, where.conditions)})`\n      case 'or':\n        return `(${encodeAndOr(associations, 'or', table, where.conditions)})`\n      case 'where':\n        return encodeWhereCondition(associations, table, where.left, where.comparison)\n      case 'on':\n        if (process.env.NODE_ENV !== 'production') {\n          invariant(\n            associations.some(({ to }) => to === where.table),\n            'To nest Q.on inside Q.and/Q.or you must explicitly declare Q.experimentalJoinTables at the beginning of the query',\n          )\n        }\n        return `(${encodeAndOr(associations, 'and', where.table, where.conditions)})`\n      case 'sql':\n        return where.expr\n      default:\n        throw new Error(`Unknown clause ${where.type}`)\n    }\n  }\n\nconst encodeWhereCondition = (\n  associations: QueryAssociation[],\n  table: TableName<any>,\n  left: ColumnName,\n  comparison: Comparison,\n): string => {\n  const { operator } = comparison\n  // if right operand is a value, we can use simple comparison\n  // if a column, we must check for `not null > null`\n  if (operator === 'weakGt' && comparison.right.column) {\n    return encodeWhere(\n      table,\n      associations,\n    )(\n      Q.or(\n        // $FlowFixMe\n        Q.where(left, Q.gt(Q.column(comparison.right.column))),\n        Q.and(Q.where(left, Q.notEq(null)), Q.where((comparison.right: any).column, null)),\n      ),\n    )\n  } else if (operator === 'includes') {\n    return `instr(\"${table}\".\"${left}\", ${getComparisonRight(table, comparison.right)})`\n  }\n\n  return `\"${table}\".\"${left}\" ${encodeComparison(table, comparison)}`\n}\n\nconst encodeAndOr = (\n  associations: QueryAssociation[],\n  op: string,\n  table: TableName<any>,\n  conditions: Where[],\n) => {\n  if (conditions.length) {\n    return mapJoin(conditions, encodeWhere(table, associations), ` ${op} `)\n  }\n  return ''\n}\n\nconst andJoiner = ' and '\n\nconst encodeConditions = (\n  table: TableName<any>,\n  description: QueryDescription,\n  associations: QueryAssociation[],\n): string => {\n  const clauses = mapJoin(description.where, encodeWhere(table, associations), andJoiner)\n\n  return clauses.length ? ` where ${clauses}` : ''\n}\n\n// If query contains `on()` conditions on tables with which the primary table has a has-many\n// relation, then we need to add `distinct` on the query to ensure there are no duplicates\nconst encodeMethod = (\n  table: TableName<any>,\n  countMode: boolean,\n  needsDistinct: boolean,\n): string => {\n  if (countMode) {\n    return needsDistinct\n      ? `select count(distinct \"${table}\".\"id\") as \"count\" from \"${table}\"`\n      : `select count(*) as \"count\" from \"${table}\"`\n  }\n\n  return needsDistinct\n    ? `select distinct \"${table}\".* from \"${table}\"`\n    : `select \"${table}\".* from \"${table}\"`\n}\n\nconst encodeAssociation =\n  (description: QueryDescription) =>\n  ({ from: mainTable, to: joinedTable, info: association }: QueryAssociation): string => {\n    // TODO: We have a problem here. For all of eternity, WatermelonDB Q.ons were encoded using JOIN\n    // However, this precludes many legitimate use cases for Q.ons once you start nesting them\n    // (e.g. get tasks where X or has a tag assignment that Y -- if there is no tag assignment, this will\n    // fail to join)\n    // LEFT JOIN needs to be used to address this… BUT technically that's a breaking change. I never\n    // considered a possiblity of making a query like `Q.on(relation_id, x != 'bla')`. Before this would\n    // only match if there IS a relation, but with LEFT JOIN it would also match if record does not have\n    // this relation. I don't know if there are legitimate use cases where this would change anything\n    // so I need more time to think about whether this breaking change is OK to make or if we need to\n    // do something more clever/add option/whatever.\n    // so for now, i'm making an extreeeeemelyyyy bad hack to make sure that there's no breaking change\n    // for existing code and code with nested Q.ons probably works (with caveats)\n    const usesOldJoinStyle = description.where.some(\n      (clause) => clause.type === 'on' && clause.table === joinedTable,\n    )\n    const joinKeyword = usesOldJoinStyle ? ' join ' : ' left join '\n    const joinBeginning = `${joinKeyword}\"${joinedTable}\" on \"${joinedTable}\".`\n    return association.type === 'belongs_to'\n      ? `${joinBeginning}\"id\" = \"${mainTable}\".\"${association.key}\"`\n      : `${joinBeginning}\"${association.foreignKey}\" = \"${mainTable}\".\"id\"`\n  }\n\nconst encodeJoin = (description: QueryDescription, associations: QueryAssociation[]): string =>\n  associations.length ? associations.map(encodeAssociation(description)).join('') : ''\n\nconst encodeOrderBy = (table: TableName<any>, sortBys: SortBy[]) => {\n  if (sortBys.length === 0) {\n    return ''\n  }\n  const orderBys = sortBys\n    .map((sortBy) => {\n      return `\"${table}\".\"${sortBy.sortColumn}\" ${sortBy.sortOrder}`\n    })\n    .join(', ')\n  return ` order by ${orderBys}`\n}\n\nconst encodeLimitOffset = (limit: ?number, offset: ?number) => {\n  if (!limit) {\n    return ''\n  }\n  const optionalOffsetStmt = offset ? ` offset ${offset}` : ''\n\n  return ` limit ${limit}${optionalOffsetStmt}`\n}\n\nconst encodeQuery = (query: SerializedQuery, countMode: boolean = false): [SQL, SQLiteArg[]] => {\n  const { table, description, associations } = query\n\n  // TODO: Test if encoding a `select x.id from x` query speeds up queryIds() calls\n  if (description.sql) {\n    const { sql, values } = description.sql\n    return [sql, values]\n  }\n\n  const hasToManyJoins = associations.some(({ info }) => info.type === 'has_many')\n\n  if (process.env.NODE_ENV !== 'production') {\n    description.take &&\n      invariant(\n        !countMode,\n        'take/skip is not currently supported with counting. Please contribute to fix this!',\n      )\n    invariant(!description.lokiTransform, 'unsafeLokiTransform not supported with SQLite')\n  }\n\n  const sql =\n    encodeMethod(table, countMode, hasToManyJoins) +\n    encodeJoin(description, associations) +\n    encodeConditions(table, description, associations) +\n    encodeOrderBy(table, description.sortBy) +\n    encodeLimitOffset(description.take, description.skip)\n\n  return [sql, []]\n}\n\nexport default encodeQuery\n"
  },
  {
    "path": "src/adapters/sqlite/encodeQuery/test.js",
    "content": "/* eslint-disable prefer-template */\nimport Query from '../../../Query'\nimport Model from '../../../Model'\nimport * as Q from '../../../QueryDescription'\nimport encodeQuery from './index'\n\n// TODO: Standardize these mocks (same as in sqlite encodeQuery, query test)\n\nclass MockTask extends Model {\n  static table = 'tasks'\n\n  static associations = {\n    projects: { type: 'belongs_to', key: 'project_id' },\n    tag_assignments: { type: 'has_many', foreignKey: 'task_id' },\n  }\n}\n\nclass MockProject extends Model {\n  static table = 'projects'\n\n  static associations = {\n    teams: { type: 'belongs_to', key: 'team_id' },\n  }\n}\n\nconst mockCollection = Object.freeze({\n  modelClass: MockTask,\n  db: { get: (table) => (table === 'projects' ? { modelClass: MockProject } : {}) },\n})\n\nconst encodedWithArgs = (clauses, countMode) =>\n  encodeQuery(new Query(mockCollection, clauses), countMode)\n\nconst encoded = (clauses, countMode) => {\n  const [sql] = encodedWithArgs(clauses, countMode)\n  return sql\n}\n\ndescribe('SQLite encodeQuery', () => {\n  it('encodes simple queries', () => {\n    expect(encoded([])).toBe(\n      `select \"tasks\".* from \"tasks\" where \"tasks\".\"_status\" is not 'deleted'`,\n    )\n  })\n  it('encodes multiple conditions and value types', () => {\n    expect(\n      encoded([\n        Q.where('col1', `value \"'with'\" quotes`),\n        Q.where('col2', 2),\n        Q.where('col3', true),\n        Q.where('col4', false),\n        Q.where('col5', null),\n      ]),\n    ).toBe(\n      `select \"tasks\".* from \"tasks\" where \"tasks\".\"col1\" is 'value \"''with''\" quotes'` +\n        ` and \"tasks\".\"col2\" is 2` +\n        ` and \"tasks\".\"col3\" is 1` +\n        ` and \"tasks\".\"col4\" is 0` +\n        ` and \"tasks\".\"col5\" is null` +\n        ` and \"tasks\".\"_status\" is not 'deleted'`,\n    )\n  })\n  it('encodes multiple operators', () => {\n    expect(\n      encoded([\n        Q.where('col1', Q.eq('val1')),\n        Q.where('col2', Q.gt(2)),\n        Q.where('col3', Q.gte(3)),\n        Q.where('col3_5', Q.weakGt(3.5)),\n        Q.where('col4', Q.lt(4)),\n        Q.where('col5', Q.lte(5)),\n        Q.where('col6', Q.notEq(null)),\n        Q.where('col7', Q.oneOf([1, 2, 3])),\n        Q.where('col8', Q.notIn(['\"a\"', \"'b'\", 'c'])),\n        Q.where('col9', Q.between(10, 11)),\n        Q.where('col10', Q.like('%abc')),\n        Q.where('col11', Q.notLike('def%')),\n        Q.where('col12', Q.includes('foo')),\n      ]),\n    ).toBe(\n      `select \"tasks\".* from \"tasks\" where \"tasks\".\"col1\" is 'val1'` +\n        ` and \"tasks\".\"col2\" > 2` +\n        ` and \"tasks\".\"col3\" >= 3` +\n        ` and \"tasks\".\"col3_5\" > 3.5` +\n        ` and \"tasks\".\"col4\" < 4` +\n        ` and \"tasks\".\"col5\" <= 5` +\n        ` and \"tasks\".\"col6\" is not null` +\n        ` and \"tasks\".\"col7\" in (1, 2, 3)` +\n        ` and \"tasks\".\"col8\" not in ('\"a\"', '''b''', 'c')` +\n        ` and \"tasks\".\"col9\" between 10 and 11` +\n        ` and \"tasks\".\"col10\" like '%abc'` +\n        ` and \"tasks\".\"col11\" not like 'def%'` +\n        ` and instr(\"tasks\".\"col12\", 'foo')` +\n        ` and \"tasks\".\"_status\" is not 'deleted'`,\n    )\n  })\n  it('encodes column comparisons', () => {\n    expect(\n      encoded([\n        Q.where('left1', Q.gte(Q.column('right1'))),\n        Q.where('left2', Q.weakGt(Q.column('right2'))),\n        // Q.where('left3', Q.includes(Q.column('right3'))),\n      ]),\n    ).toBe(\n      `select \"tasks\".* from \"tasks\" where \"tasks\".\"left1\" >= \"tasks\".\"right1\"` +\n        ` and (\"tasks\".\"left2\" > \"tasks\".\"right2\" or (\"tasks\".\"left2\" is not null and \"tasks\".\"right2\" is null))` +\n        // ` and instr(\"tasks\".\"left3\", \"tasks\".\"right3\")` +\n        ` and \"tasks\".\"_status\" is not 'deleted'`,\n    )\n  })\n  it(`encodes raw SQL expressions`, () => {\n    expect(encoded([Q.unsafeSqlExpr('tasks.left1 >= projects.right1')])).toBe(\n      `select \"tasks\".* from \"tasks\" where tasks.left1 >= projects.right1 and \"tasks\".\"_status\" is not 'deleted'`,\n    )\n  })\n  it('encodes AND/OR nesting', () => {\n    expect(\n      encoded([\n        Q.where('col1', 'value'),\n        Q.or(\n          Q.where('col2', true),\n          Q.where('col3', null),\n          Q.and(Q.where('col4', Q.gt(5)), Q.where('col5', Q.notIn([6, 7]))),\n        ),\n      ]),\n    ).toBe(\n      `select \"tasks\".* from \"tasks\" where \"tasks\".\"col1\" is 'value'` +\n        ` and (\"tasks\".\"col2\" is 1 or \"tasks\".\"col3\" is null` +\n        ` or (\"tasks\".\"col4\" > 5` +\n        ` and \"tasks\".\"col5\" not in (6, 7)))` +\n        ` and \"tasks\".\"_status\" is not 'deleted'`,\n    )\n  })\n  it('encodes count queries', () => {\n    expect(encoded([Q.where('col1', 'value')], true)).toBe(\n      `select count(*) as \"count\" from \"tasks\" where \"tasks\".\"col1\" is 'value' and \"tasks\".\"_status\" is not 'deleted'`,\n    )\n  })\n  it('encodes JOIN queries', () => {\n    const query = [\n      Q.on('projects', 'team_id', 'abcdef'),\n      Q.on('projects', 'is_active', true),\n      Q.where('left_column', 'right_value'),\n      Q.on('tag_assignments', 'tag_id', Q.oneOf(['a', 'b', 'c'])),\n    ]\n    const expectedQuery =\n      `join \"projects\" on \"projects\".\"id\" = \"tasks\".\"project_id\"` +\n      ` join \"tag_assignments\" on \"tag_assignments\".\"task_id\" = \"tasks\".\"id\"` +\n      ` where (\"projects\".\"team_id\" is 'abcdef'` +\n      ` and \"projects\".\"_status\" is not 'deleted')` +\n      ` and (\"projects\".\"is_active\" is 1` +\n      ` and \"projects\".\"_status\" is not 'deleted')` +\n      ` and \"tasks\".\"left_column\" is 'right_value'` +\n      ` and (\"tag_assignments\".\"tag_id\" in ('a', 'b', 'c')` +\n      ` and \"tag_assignments\".\"_status\" is not 'deleted')` +\n      ` and \"tasks\".\"_status\" is not 'deleted'`\n    expect(encoded(query)).toBe(`select distinct \"tasks\".* from \"tasks\" ${expectedQuery}`)\n    expect(encoded(query, true)).toBe(\n      `select count(distinct \"tasks\".\"id\") as \"count\" from \"tasks\" ${expectedQuery}`,\n    )\n  })\n  it('encodes column comparisons on JOIN queries', () => {\n    expect(\n      encoded([\n        Q.on('projects', 'left_column', Q.lte(Q.column('right_column'))),\n        Q.on('projects', 'left2', Q.weakGt(Q.column('right2'))),\n      ]),\n    ).toBe(\n      `select \"tasks\".* from \"tasks\"` +\n        ` join \"projects\" on \"projects\".\"id\" = \"tasks\".\"project_id\"` +\n        ` where (\"projects\".\"left_column\" <= \"projects\".\"right_column\"` +\n        ` and \"projects\".\"_status\" is not 'deleted')` +\n        ` and ((\"projects\".\"left2\" > \"projects\".\"right2\"` +\n        ` or (\"projects\".\"left2\" is not null` +\n        ` and \"projects\".\"right2\" is null))` +\n        ` and \"projects\".\"_status\" is not 'deleted')` +\n        ` and \"tasks\".\"_status\" is not 'deleted'`,\n    )\n  })\n  it(`encodes on nested in and/or`, () => {\n    expect(\n      encoded([\n        Q.experimentalJoinTables(['projects', 'tag_assignments']),\n        Q.or(\n          Q.where('is_followed', true),\n          Q.on('projects', 'is_followed', true),\n          Q.and(Q.on('tag_assignments', 'foo', 'bar')),\n        ),\n      ]),\n    ).toBe(\n      `select distinct \"tasks\".* from \"tasks\"` +\n        ` left join \"projects\" on \"projects\".\"id\" = \"tasks\".\"project_id\"` +\n        ` left join \"tag_assignments\" on \"tag_assignments\".\"task_id\" = \"tasks\".\"id\"` +\n        ` where (\"tasks\".\"is_followed\" is 1` +\n        ` or (\"projects\".\"is_followed\" is 1 and \"projects\".\"_status\" is not 'deleted')` +\n        ` or ((\"tag_assignments\".\"foo\" is 'bar' and \"tag_assignments\".\"_status\" is not 'deleted')))` +\n        ` and \"tasks\".\"_status\" is not 'deleted'`,\n    )\n  })\n  it(`encodes Q.on nested inside Q.on`, () => {\n    expect(\n      encoded([\n        Q.experimentalNestedJoin('projects', 'teams'),\n        Q.on('projects', Q.on('teams', 'foo', 'bar')),\n      ]),\n    ).toBe(\n      `select \"tasks\".* from \"tasks\"` +\n        ` join \"projects\" on \"projects\".\"id\" = \"tasks\".\"project_id\"` +\n        ` left join \"teams\" on \"teams\".\"id\" = \"projects\".\"team_id\"` +\n        ` where ((\"teams\".\"foo\" is 'bar'` +\n        ` and \"teams\".\"_status\" is not 'deleted')` +\n        ` and \"projects\".\"_status\" is not 'deleted')` +\n        ` and \"tasks\".\"_status\" is not 'deleted'`,\n    )\n  })\n  it(`encodes multiple conditions on Q.on`, () => {\n    expect(\n      encoded([\n        Q.on('projects', [\n          Q.where('foo', 'bar'),\n          Q.or(Q.where('bar', 'baz'), Q.where('bla', 'boop')),\n        ]),\n      ]),\n    ).toBe(\n      `select \"tasks\".* from \"tasks\"` +\n        ` join \"projects\" on \"projects\".\"id\" = \"tasks\".\"project_id\"` +\n        ` where (\"projects\".\"foo\" is 'bar'` +\n        ` and (\"projects\".\"bar\" is 'baz'` +\n        ` or \"projects\".\"bla\" is 'boop')` +\n        ` and \"projects\".\"_status\" is not 'deleted')` +\n        ` and \"tasks\".\"_status\" is not 'deleted'`,\n    )\n  })\n  it('fails to encode bad oneOf/notIn values', () => {\n    expect(() => encoded([Q.where('col7', Q.oneOf([{}]))])).toThrow(\n      'Invalid value to encode into query',\n    )\n    expect(() => encoded([Q.where('col7', Q.notIn([{}]))])).toThrow(\n      'Invalid value to encode into query',\n    )\n  })\n  it(`fails to encode nested on without explicit joinTables`, () => {\n    expect(() => encoded([Q.or(Q.on('projects', 'is_followed', true))])).toThrow(\n      'explicitly declare Q.experimentalJoinTables',\n    )\n  })\n  it('encodes order by clause', () => {\n    expect(encoded([Q.sortBy('sortable_column', Q.desc)])).toBe(\n      `select \"tasks\".* from \"tasks\" where \"tasks\".\"_status\" is not 'deleted' order by \"tasks\".\"sortable_column\" desc`,\n    )\n  })\n  it('encodes multiple order by clauses', () => {\n    expect(\n      encoded([Q.sortBy('sortable_column', Q.desc), Q.sortBy('sortable_column2', Q.asc)]),\n    ).toBe(\n      `select \"tasks\".* from \"tasks\" where \"tasks\".\"_status\" is not 'deleted' order by \"tasks\".\"sortable_column\" desc, \"tasks\".\"sortable_column2\" asc`,\n    )\n  })\n  it('encodes limit clause', () => {\n    expect(encoded([Q.take(100)])).toBe(\n      `select \"tasks\".* from \"tasks\" where \"tasks\".\"_status\" is not 'deleted' limit 100`,\n    )\n  })\n  it('encodes limit with offset clause', () => {\n    expect(encoded([Q.take(100), Q.skip(200)])).toBe(\n      `select \"tasks\".* from \"tasks\" where \"tasks\".\"_status\" is not 'deleted' limit 100 offset 200`,\n    )\n  })\n  it('encodes order by together with limit and offset clause', () => {\n    expect(encoded([Q.sortBy('sortable_column', 'desc'), Q.take(100), Q.skip(200)])).toBe(\n      `select \"tasks\".* from \"tasks\" where \"tasks\".\"_status\" is not 'deleted' order by \"tasks\".\"sortable_column\" desc limit 100 offset 200`,\n    )\n  })\n  it(`encodes unsafe SQL queries`, () => {\n    expect(encoded([Q.unsafeSqlQuery(`select * from tasks where foo = 'bar'`)])).toBe(\n      `select * from tasks where foo = 'bar'`,\n    )\n    expect(\n      encoded([Q.unsafeSqlQuery(`select count(*) as count from tasks where foo = 'bar'`)], true),\n    ).toBe(`select count(*) as count from tasks where foo = 'bar'`)\n\n    expect(\n      encodedWithArgs([\n        Q.unsafeSqlQuery(`select * from tasks where text1 is ? and num1 is ? and bool1 is ?`, [\n          'foo',\n          10,\n          true,\n        ]),\n      ]),\n    ).toEqual([\n      `select * from tasks where text1 is ? and num1 is ? and bool1 is ?`,\n      ['foo', 10, true],\n    ])\n  })\n  it(`does not encode loki-specific syntax`, () => {\n    expect(() => encoded([Q.unsafeLokiExpr({ hi: true })])).toThrow('Unknown clause')\n    expect(() => encoded([Q.unsafeLokiTransform(() => {})])).toThrow('not supported')\n  })\n})\n"
  },
  {
    "path": "src/adapters/sqlite/encodeSchema/index.js",
    "content": "// @flow\n\nimport type { TableSchema, AppSchema, ColumnSchema, TableName } from '../../../Schema'\nimport { nullValue } from '../../../RawRecord'\nimport type { MigrationStep, AddColumnsMigrationStep } from '../../../Schema/migrations'\nimport type { SQL } from '../index'\n\nimport encodeValue from '../encodeValue'\n\nconst standardColumns = `\"id\" primary key, \"_changed\", \"_status\"`\nconst commonSchema =\n  'create table \"local_storage\" (\"key\" varchar(16) primary key not null, \"value\" text not null);' +\n  'create index \"local_storage_key_index\" on \"local_storage\" (\"key\");'\n\nconst encodeCreateTable = ({ name, columns }: TableSchema): SQL => {\n  const columnsSQL = [standardColumns]\n    .concat(Object.keys(columns).map((column) => `\"${column}\"`))\n    .join(', ')\n  return `create table \"${name}\" (${columnsSQL});`\n}\n\nconst encodeIndex = (column: ColumnSchema, tableName: TableName<any>): SQL =>\n  column.isIndexed\n    ? `create index if not exists \"${tableName}_${column.name}\" on \"${tableName}\" (\"${column.name}\");`\n    : ''\n\nconst encodeTableIndicies = ({ name: tableName, columns }: TableSchema): SQL =>\n  Object.values(columns)\n    // $FlowFixMe\n    .map((column) => encodeIndex(column, tableName))\n    .concat([`create index if not exists \"${tableName}__status\" on \"${tableName}\" (\"_status\");`])\n    .join('')\n\nconst identity = (sql: SQL, _?: any): SQL => sql\n\nconst encodeTable = (table: TableSchema): SQL =>\n  (table.unsafeSql || identity)(encodeCreateTable(table) + encodeTableIndicies(table))\n\nexport const encodeSchema = ({ tables, unsafeSql }: AppSchema): SQL => {\n  const sql = Object.values(tables)\n    // $FlowFixMe\n    .map(encodeTable)\n    .join('')\n  return (unsafeSql || identity)(commonSchema + sql, 'setup')\n}\n\nexport function encodeCreateIndices({ tables, unsafeSql }: AppSchema): SQL {\n  const sql = Object.values(tables)\n    // $FlowFixMe\n    .map(encodeTableIndicies)\n    .join('')\n  return (unsafeSql || identity)(sql, 'create_indices')\n}\n\nexport function encodeDropIndices({ tables, unsafeSql }: AppSchema): SQL {\n  const sql = Object.values(tables)\n    // $FlowFixMe\n    .map(({ name: tableName, columns }) =>\n      Object.values(columns)\n        // $FlowFixMe\n        .map((column) =>\n          column.isIndexed ? `drop index if exists \"${tableName}_${column.name}\";` : '',\n        )\n        .concat([`drop index if exists \"${tableName}__status\";`])\n        .join(''),\n    )\n    .join('')\n  return (unsafeSql || identity)(sql, 'drop_indices')\n}\n\nconst encodeAddColumnsMigrationStep: (AddColumnsMigrationStep) => SQL = ({\n  table,\n  columns,\n  unsafeSql,\n}) =>\n  columns\n    .map((column) => {\n      const addColumn = `alter table \"${table}\" add \"${column.name}\";`\n      const setDefaultValue = `update \"${table}\" set \"${column.name}\" = ${encodeValue(\n        nullValue(column),\n      )};`\n      const addIndex = encodeIndex(column, table)\n\n      return (unsafeSql || identity)(addColumn + setDefaultValue + addIndex)\n    })\n    .join('')\n\nexport const encodeMigrationSteps: (MigrationStep[]) => SQL = (steps) =>\n  steps\n    .map((step) => {\n      if (step.type === 'create_table') {\n        return encodeTable(step.schema)\n      } else if (step.type === 'add_columns') {\n        return encodeAddColumnsMigrationStep(step)\n      } else if (step.type === 'sql') {\n        return step.sql\n      }\n\n      throw new Error(`Unsupported migration step ${step.type}`)\n    })\n    .join('')\n"
  },
  {
    "path": "src/adapters/sqlite/encodeSchema/test.js",
    "content": "/* eslint-disable prefer-template */\nimport { appSchema, tableSchema } from '../../../Schema'\nimport { addColumns, createTable, unsafeExecuteSql } from '../../../Schema/migrations'\n\nimport { encodeSchema, encodeMigrationSteps, encodeCreateIndices, encodeDropIndices } from './index'\n\nconst expectedCommonSchema =\n  'create table \"local_storage\" (\"key\" varchar(16) primary key not null, \"value\" text not null);' +\n  'create index \"local_storage_key_index\" on \"local_storage\" (\"key\");'\n\nconst testSchema = appSchema({\n  version: 1,\n  tables: [\n    tableSchema({\n      name: 'tasks',\n      columns: [\n        { name: 'author_id', type: 'string', isIndexed: true },\n        { name: 'order', type: 'number', isOptional: true, isIndexed: true },\n        { name: 'created_at', type: 'number' },\n      ],\n    }),\n    tableSchema({\n      name: 'comments',\n      columns: [\n        { name: 'is_ended', type: 'boolean' },\n        { name: 'reactions', type: 'number' },\n      ],\n    }),\n  ],\n})\n\ndescribe('encodeSchema', () => {\n  it('encodes schema', () => {\n    expect(encodeSchema(testSchema)).toBe(\n      expectedCommonSchema +\n        'create table \"tasks\" (\"id\" primary key, \"_changed\", \"_status\", \"author_id\", \"order\", \"created_at\");' +\n        'create index if not exists \"tasks_author_id\" on \"tasks\" (\"author_id\");' +\n        'create index if not exists \"tasks_order\" on \"tasks\" (\"order\");' +\n        'create index if not exists \"tasks__status\" on \"tasks\" (\"_status\");' +\n        'create table \"comments\" (\"id\" primary key, \"_changed\", \"_status\", \"is_ended\", \"reactions\");' +\n        'create index if not exists \"comments__status\" on \"comments\" (\"_status\");',\n    )\n  })\n  it(`encodes schema with unsafe SQL`, () => {\n    const testSchema2 = appSchema({\n      version: 1,\n      tables: [\n        tableSchema({\n          name: 'tasks',\n          columns: [{ name: 'author_id', type: 'string', isIndexed: true }],\n          unsafeSql: (sql) => sql.replace(/create table \"tasks\" [^)]+\\)/, '$& without rowid'),\n        }),\n      ],\n      unsafeSql: (sql, kind) => {\n        if (kind !== 'setup') {\n          throw new Error('expected different unsafeSql kind')\n        }\n        return `create blabla;${sql}`\n      },\n    })\n\n    expect(encodeSchema(testSchema2)).toBe(\n      '' +\n        'create blabla;' +\n        expectedCommonSchema +\n        'create table \"tasks\" (\"id\" primary key, \"_changed\", \"_status\", \"author_id\") without rowid;' +\n        'create index if not exists \"tasks_author_id\" on \"tasks\" (\"author_id\");' +\n        'create index if not exists \"tasks__status\" on \"tasks\" (\"_status\");',\n    )\n  })\n})\n\ndescribe('encodeIndices', () => {\n  it(`encodes creation of indices`, () => {\n    expect(encodeCreateIndices(testSchema)).toBe(\n      '' +\n        'create index if not exists \"tasks_author_id\" on \"tasks\" (\"author_id\");' +\n        'create index if not exists \"tasks_order\" on \"tasks\" (\"order\");' +\n        'create index if not exists \"tasks__status\" on \"tasks\" (\"_status\");' +\n        'create index if not exists \"comments__status\" on \"comments\" (\"_status\");',\n    )\n  })\n  it(`encodes removal of indices`, () => {\n    expect(encodeDropIndices(testSchema)).toBe(\n      '' +\n        'drop index if exists \"tasks_author_id\";' +\n        'drop index if exists \"tasks_order\";' +\n        'drop index if exists \"tasks__status\";' +\n        'drop index if exists \"comments__status\";',\n    )\n  })\n  it(`encodes creation of indices with unsafe sql`, () => {\n    const testSchema2 = {\n      ...testSchema,\n      unsafeSql: (sql, kind) => {\n        if (kind !== 'create_indices') {\n          throw new Error('expected different unsafeSql kind')\n        }\n        return sql + 'boop'\n      },\n    }\n    expect(encodeCreateIndices(testSchema2)).toBe(\n      '' +\n        'create index if not exists \"tasks_author_id\" on \"tasks\" (\"author_id\");' +\n        'create index if not exists \"tasks_order\" on \"tasks\" (\"order\");' +\n        'create index if not exists \"tasks__status\" on \"tasks\" (\"_status\");' +\n        'create index if not exists \"comments__status\" on \"comments\" (\"_status\");' +\n        'boop',\n    )\n  })\n  it(`encodes removal of indices with unsafe sql`, () => {\n    const testSchema2 = {\n      ...testSchema,\n      unsafeSql: (sql, kind) => {\n        if (kind !== 'drop_indices') {\n          throw new Error('expected different unsafeSql kind')\n        }\n        return sql.replace(/drop/g, 'yeet')\n      },\n    }\n    expect(encodeDropIndices(testSchema2)).toBe(\n      '' +\n        'yeet index if exists \"tasks_author_id\";' +\n        'yeet index if exists \"tasks_order\";' +\n        'yeet index if exists \"tasks__status\";' +\n        'yeet index if exists \"comments__status\";',\n    )\n  })\n})\n\ndescribe('encodeMigrationSteps', () => {\n  it('encodes migrations', () => {\n    const migrationSteps = [\n      addColumns({\n        table: 'posts',\n        columns: [{ name: 'subtitle', type: 'string', isOptional: true }],\n      }),\n      createTable({\n        name: 'comments',\n        columns: [\n          { name: 'post_id', type: 'string', isIndexed: true },\n          { name: 'body', type: 'string' },\n        ],\n      }),\n      addColumns({\n        table: 'posts',\n        columns: [\n          { name: 'author_id', type: 'string', isIndexed: true },\n          { name: 'is_pinned', type: 'boolean', isIndexed: true },\n        ],\n      }),\n    ]\n\n    expect(encodeMigrationSteps(migrationSteps)).toBe(\n      '' +\n        `alter table \"posts\" add \"subtitle\";` +\n        `update \"posts\" set \"subtitle\" = null;` +\n        `create table \"comments\" (\"id\" primary key, \"_changed\", \"_status\", \"post_id\", \"body\");` +\n        `create index if not exists \"comments_post_id\" on \"comments\" (\"post_id\");` +\n        `create index if not exists \"comments__status\" on \"comments\" (\"_status\");` +\n        `alter table \"posts\" add \"author_id\";` +\n        `update \"posts\" set \"author_id\" = '';` +\n        `create index if not exists \"posts_author_id\" on \"posts\" (\"author_id\");` +\n        `alter table \"posts\" add \"is_pinned\";` +\n        `update \"posts\" set \"is_pinned\" = 0;` +\n        `create index if not exists \"posts_is_pinned\" on \"posts\" (\"is_pinned\");`,\n    )\n  })\n  it(`encodes migrations with unsafe SQL`, () => {\n    const migrationSteps = [\n      addColumns({\n        table: 'posts',\n        columns: [{ name: 'subtitle', type: 'string', isOptional: true }],\n        unsafeSql: (sql) => `${sql}bla;`,\n      }),\n      createTable({\n        name: 'comments',\n        columns: [{ name: 'body', type: 'string' }],\n        unsafeSql: (sql) => sql.replace(/create table [^)]+\\)/, '$& without rowid'),\n      }),\n      unsafeExecuteSql('boop;'),\n    ]\n\n    expect(encodeMigrationSteps(migrationSteps)).toBe(\n      '' +\n        `alter table \"posts\" add \"subtitle\";` +\n        `update \"posts\" set \"subtitle\" = null;` +\n        'bla;' +\n        `create table \"comments\" (\"id\" primary key, \"_changed\", \"_status\", \"body\") without rowid;` +\n        `create index if not exists \"comments__status\" on \"comments\" (\"_status\");` +\n        'boop;',\n    )\n  })\n})\n"
  },
  {
    "path": "src/adapters/sqlite/encodeValue/index.js",
    "content": "// @flow\n\nimport escapeString from 'sql-escape-string'\nimport { logError } from '../../../utils/common'\n\nimport type { Value } from '../../../QueryDescription'\n\n// Note: SQLite doesn't support literal TRUE and FALSE; expects 1 or 0 instead\n// It also doesn't encode strings the same way\n// Also: catches invalid values (undefined, NaN) early\n\nexport default function encodeValue(value: Value): string {\n  if (value === true) {\n    return '1'\n  } else if (value === false) {\n    return '0'\n  } else if (Number.isNaN(value)) {\n    logError('Passed NaN to query')\n    return 'null'\n  } else if (value === undefined) {\n    logError('Passed undefined to query')\n    return 'null'\n  } else if (value === null) {\n    return 'null'\n  } else if (typeof value === 'number') {\n    return `${value}`\n  } else if (typeof value === 'string') {\n    // TODO: We shouldn't ever encode SQL values directly — use placeholders\n    return escapeString(value)\n  }\n  throw new Error('Invalid value to encode into query')\n}\n"
  },
  {
    "path": "src/adapters/sqlite/encodeValue/test.js",
    "content": "import { logger } from '../../../utils/common'\nimport encodeValue from './index'\n\ndescribe('SQLite encodeValue', () => {\n  it('encodes SQLite values', () => {\n    expect(encodeValue(true)).toBe('1')\n    expect(encodeValue(false)).toBe('0')\n    expect(encodeValue(null)).toBe('null')\n    expect(encodeValue(10)).toBe('10')\n    expect(encodeValue(3.14)).toBe('3.14')\n    expect(encodeValue(`foo 'bar \"baz\" blah' hah`)).toBe(`'foo ''bar \"baz\" blah'' hah'`)\n  })\n  it('catches invalid values', () => {\n    const spy = jest.spyOn(logger, 'error').mockImplementation(() => {})\n    expect(encodeValue(undefined)).toBe('null')\n    expect(encodeValue(NaN)).toBe('null')\n    expect(spy).toHaveBeenCalledTimes(2)\n    spy.mockRestore()\n\n    expect(() => encodeValue([])).toThrow()\n    expect(() => encodeValue({})).toThrow()\n  })\n})\n"
  },
  {
    "path": "src/adapters/sqlite/index.d.ts",
    "content": "import type { ConnectionTag } from '../../utils/common'\nimport type { ResultCallback } from '../../utils/fp/Result'\n\nimport type { RecordId } from '../../Model'\nimport type { SerializedQuery } from '../../Query'\nimport type { TableName, AppSchema, SchemaVersion } from '../../Schema'\nimport type { SchemaMigrations, MigrationStep } from '../../Schema/migrations'\nimport type {\n  DatabaseAdapter,\n  CachedQueryResult,\n  CachedFindResult,\n  BatchOperation,\n  UnsafeExecuteOperations,\n} from '../type'\nimport type {\n  DispatcherType,\n  SQL,\n  SQLiteAdapterOptions,\n  SQLiteArg,\n  SQLiteQuery,\n  SqliteDispatcher,\n  MigrationEvents,\n} from './type'\n\nimport { $Shape } from '../../types'\n\nexport type { SQL, SQLiteArg, SQLiteQuery }\n\nexport default class SQLiteAdapter implements DatabaseAdapter {\n  static adapterType: string\n\n  schema: AppSchema\n\n  migrations?: SchemaMigrations\n\n  _migrationEvents?: MigrationEvents\n\n  _tag: ConnectionTag\n\n  dbName: string\n\n  _dispatcherType: DispatcherType\n\n  _dispatcher: SqliteDispatcher\n\n  _initPromise: Promise<void>\n\n  constructor(options: SQLiteAdapterOptions)\n\n  get initializingPromise(): Promise<void>\n\n  testClone(options?: $Shape<SQLiteAdapterOptions>): Promise<SQLiteAdapter>\n\n  _getName(name?: string): string\n\n  _init(callback: ResultCallback<void>): void\n\n  _setUpWithMigrations(databaseVersion: SchemaVersion, callback: ResultCallback<void>): void\n\n  _setUpWithSchema(callback: ResultCallback<void>): void\n\n  find(table: TableName<any>, id: RecordId, callback: ResultCallback<CachedFindResult>): void\n\n  query(query: SerializedQuery, callback: ResultCallback<CachedQueryResult>): void\n\n  queryIds(query: SerializedQuery, callback: ResultCallback<RecordId[]>): void\n\n  unsafeQueryRaw(query: SerializedQuery, callback: ResultCallback<any[]>): void\n\n  count(query: SerializedQuery, callback: ResultCallback<number>): void\n\n  batch(operations: BatchOperation[], callback: ResultCallback<void>): void\n\n  getDeletedRecords(table: TableName<any>, callback: ResultCallback<RecordId[]>): void\n\n  destroyDeletedRecords(\n    table: TableName<any>,\n    recordIds: RecordId[],\n    callback: ResultCallback<void>,\n  ): void\n\n  unsafeLoadFromSync(jsonId: number, callback: ResultCallback<any>): void\n\n  provideSyncJson(id: number, syncPullResultJson: string, callback: ResultCallback<void>): void\n\n  unsafeResetDatabase(callback: ResultCallback<void>): void\n\n  unsafeExecute(operations: UnsafeExecuteOperations, callback: ResultCallback<void>): void\n\n  getLocal(key: string, callback: ResultCallback<string | undefined>): void\n\n  setLocal(key: string, value: string, callback: ResultCallback<void>): void\n\n  removeLocal(key: string, callback: ResultCallback<void>): void\n\n  _encodedSchema(): SQL\n\n  _migrationSteps(fromVersion: SchemaVersion): MigrationStep[] | undefined\n}\n"
  },
  {
    "path": "src/adapters/sqlite/index.js",
    "content": "// @flow\n/* eslint-disable global-require */\n\nimport { connectionTag, type ConnectionTag, logger, invariant } from '../../utils/common'\nimport { type ResultCallback, mapValue, toPromise } from '../../utils/fp/Result'\nimport { mapObj } from '../../utils/fp'\n\nimport type { RecordId } from '../../Model'\nimport type { SerializedQuery } from '../../Query'\nimport type { TableName, AppSchema, SchemaVersion } from '../../Schema'\nimport type { SchemaMigrations, MigrationStep } from '../../Schema/migrations'\nimport type {\n  DatabaseAdapter,\n  CachedQueryResult,\n  CachedFindResult,\n  BatchOperation,\n  UnsafeExecuteOperations,\n} from '../type'\nimport {\n  sanitizeFindResult,\n  sanitizeQueryResult,\n  devSetupCallback,\n  validateAdapter,\n  validateTable,\n} from '../common'\nimport type {\n  DispatcherType,\n  SQL,\n  SQLiteAdapterOptions,\n  SQLiteArg,\n  SQLiteQuery,\n  SqliteDispatcher,\n  MigrationEvents,\n} from './type'\n\nimport encodeQuery from './encodeQuery'\n\nimport { makeDispatcher, getDispatcherType } from './makeDispatcher'\n\nexport type { SQL, SQLiteArg, SQLiteQuery }\n\nif (process.env.NODE_ENV !== 'production') {\n  require('./devtools')\n}\n\nconst IGNORE_CACHE = 0\n\nexport default class SQLiteAdapter implements DatabaseAdapter {\n  static adapterType: string = 'sqlite'\n\n  schema: AppSchema\n\n  migrations: ?SchemaMigrations\n\n  _migrationEvents: ?MigrationEvents\n\n  _tag: ConnectionTag = connectionTag()\n\n  dbName: string\n\n  _dispatcherType: DispatcherType\n\n  _dispatcher: SqliteDispatcher\n\n  _initPromise: Promise<void>\n\n  constructor(options: SQLiteAdapterOptions): void {\n    // console.log(`---> Initializing new adapter (${this._tag})`)\n    const {\n      dbName,\n      schema,\n      migrations,\n      migrationEvents,\n      usesExclusiveLocking = false,\n      experimentalUnsafeNativeReuse = false,\n    } = options\n    this.schema = schema\n    this.migrations = migrations\n    this._migrationEvents = migrationEvents\n    this.dbName = this._getName(dbName)\n    this._dispatcherType = getDispatcherType(options)\n    // Hacky-ish way to create an object with NativeModule-like shape, but that can dispatch method\n    // calls to async, synch NativeModule, or JSI implementation w/ type safety in rest of the impl\n    this._dispatcher = makeDispatcher(this._dispatcherType, this._tag, this.dbName, {\n      usesExclusiveLocking,\n      experimentalUnsafeNativeReuse,\n    })\n\n    if (process.env.NODE_ENV !== 'production') {\n      validateAdapter(this)\n    }\n\n    this._initPromise = toPromise((callback) => {\n      this._init((result) => {\n        callback(result)\n        devSetupCallback(result, options.onSetUpError)\n      })\n    })\n  }\n\n  get initializingPromise(): Promise<void> {\n    return this._initPromise\n  }\n\n  // eslint-disable-next-line no-use-before-define\n  async testClone(options?: $Shape<SQLiteAdapterOptions> = {}): Promise<SQLiteAdapter> {\n    // $FlowFixMe\n    const clone = new SQLiteAdapter({\n      dbName: this.dbName,\n      schema: this.schema,\n      jsi: this._dispatcherType === 'jsi',\n      ...(this.migrations ? { migrations: this.migrations } : {}),\n      ...options,\n    })\n    invariant(\n      clone._dispatcherType === this._dispatcherType,\n      'testCloned adapter has bad dispatcher type',\n    )\n    await clone._initPromise\n    return clone\n  }\n\n  _getName(name: ?string): string {\n    if (process.env.NODE_ENV === 'test') {\n      return name || `file:testdb${this._tag}?mode=memory&cache=shared`\n    }\n\n    return name || 'watermelon'\n  }\n\n  _init(callback: ResultCallback<void>): void {\n    // Try to initialize the database with just the schema number. If it matches the database,\n    // we're good. If not, we try again, this time sending the compiled schema or a migration set\n    // This is to speed up the launch (less to do and pass through bridge), and avoid repeating\n    // migration logic inside native code\n    this._dispatcher.call('initialize', [this.dbName, this.schema.version], (result) => {\n      if (result.error) {\n        callback(result)\n        return\n      }\n\n      const status = result.value\n      if (status.code === 'schema_needed') {\n        this._setUpWithSchema(callback)\n      } else if (status.code === 'migrations_needed') {\n        this._setUpWithMigrations(status.databaseVersion, callback)\n      } else if (status.code !== 'ok') {\n        callback({ error: new Error('Invalid database initialization status') })\n      } else {\n        callback({ value: undefined })\n      }\n    })\n  }\n\n  _setUpWithMigrations(databaseVersion: SchemaVersion, callback: ResultCallback<void>): void {\n    logger.log('[SQLite] Database needs migrations')\n    invariant(databaseVersion > 0, 'Invalid database schema version')\n\n    const migrationSteps = this._migrationSteps(databaseVersion)\n\n    if (migrationSteps) {\n      logger.log(`[SQLite] Migrating from version ${databaseVersion} to ${this.schema.version}...`)\n\n      if (this._migrationEvents && this._migrationEvents.onStart) {\n        this._migrationEvents.onStart()\n      }\n\n      this._dispatcher.call(\n        'setUpWithMigrations',\n        [\n          this.dbName,\n          require('./encodeSchema').encodeMigrationSteps(migrationSteps),\n          databaseVersion,\n          this.schema.version,\n        ],\n        (result) => {\n          if (result.error) {\n            logger.error('[SQLite] Migration failed', result.error)\n            if (this._migrationEvents && this._migrationEvents.onError) {\n              this._migrationEvents.onError(result.error)\n            }\n          } else {\n            logger.log('[SQLite] Migration successful')\n            if (this._migrationEvents && this._migrationEvents.onSuccess) {\n              this._migrationEvents.onSuccess()\n            }\n          }\n          callback(result)\n        },\n      )\n    } else {\n      logger.warn(\n        '[SQLite] Migrations not available for this version range, resetting database instead',\n      )\n      this._setUpWithSchema(callback)\n    }\n  }\n\n  _setUpWithSchema(callback: ResultCallback<void>): void {\n    logger.log(`[SQLite] Setting up database with schema version ${this.schema.version}`)\n    this._dispatcher.call(\n      'setUpWithSchema',\n      [this.dbName, this._encodedSchema(), this.schema.version],\n      (result) => {\n        if (!result.error) {\n          logger.log(`[SQLite] Schema set up successfully`)\n        }\n        callback(result)\n      },\n    )\n  }\n\n  find(table: TableName<any>, id: RecordId, callback: ResultCallback<CachedFindResult>): void {\n    validateTable(table, this.schema)\n    this._dispatcher.call('find', [table, id], (result) =>\n      callback(\n        mapValue((rawRecord) => sanitizeFindResult(rawRecord, this.schema.tables[table]), result),\n      ),\n    )\n  }\n\n  query(query: SerializedQuery, callback: ResultCallback<CachedQueryResult>): void {\n    validateTable(query.table, this.schema)\n    const { table } = query\n    const [sql, args] = encodeQuery(query)\n    this._dispatcher.call('query', [table, sql, args], (result) =>\n      callback(\n        mapValue(\n          (rawRecords) => sanitizeQueryResult(rawRecords, this.schema.tables[table]),\n          result,\n        ),\n      ),\n    )\n  }\n\n  queryIds(query: SerializedQuery, callback: ResultCallback<RecordId[]>): void {\n    validateTable(query.table, this.schema)\n    this._dispatcher.call(\n      'queryIds',\n      // $FlowFixMe\n      encodeQuery(query),\n      callback,\n    )\n  }\n\n  unsafeQueryRaw(query: SerializedQuery, callback: ResultCallback<any[]>): void {\n    validateTable(query.table, this.schema)\n    this._dispatcher.call(\n      'unsafeQueryRaw',\n      // $FlowFixMe\n      encodeQuery(query),\n      callback,\n    )\n  }\n\n  count(query: SerializedQuery, callback: ResultCallback<number>): void {\n    validateTable(query.table, this.schema)\n    this._dispatcher.call(\n      'count',\n      // $FlowFixMe\n      encodeQuery(query, true),\n      callback,\n    )\n  }\n\n  batch(operations: BatchOperation[], callback: ResultCallback<void>): void {\n    this._dispatcher.call(\n      'batch',\n      [require('./encodeBatch').default(operations, this.schema)],\n      callback,\n    )\n  }\n\n  getDeletedRecords(table: TableName<any>, callback: ResultCallback<RecordId[]>): void {\n    validateTable(table, this.schema)\n    this._dispatcher.call(\n      'queryIds',\n      [`select id from \"${table}\" where _status='deleted'`, []],\n      callback,\n    )\n  }\n\n  destroyDeletedRecords(\n    table: TableName<any>,\n    recordIds: RecordId[],\n    callback: ResultCallback<void>,\n  ): void {\n    validateTable(table, this.schema)\n    const operation = [\n      0,\n      null,\n      `delete from \"${table}\" where \"id\" == ?`,\n      recordIds.map((id) => [id]),\n    ]\n    this._dispatcher.call('batch', [[operation]], callback)\n  }\n\n  unsafeLoadFromSync(jsonId: number, callback: ResultCallback<any>): void {\n    if (this._dispatcherType !== 'jsi') {\n      callback({ error: new Error('unsafeLoadFromSync unavailable. Use JSI mode to enable.') })\n      return\n    }\n\n    const { encodeDropIndices, encodeCreateIndices } = require('./encodeSchema')\n    const { schema } = this\n    this._dispatcher.call(\n      'unsafeLoadFromSync',\n      [jsonId, schema, encodeDropIndices(schema), encodeCreateIndices(schema)],\n      (result) =>\n        callback(\n          mapValue(\n            // { key: JSON.stringify(value) } -> { key: value }\n            (residualValues) => mapObj((values) => JSON.parse(values), residualValues),\n            result,\n          ),\n        ),\n    )\n  }\n\n  provideSyncJson(id: number, syncPullResultJson: string, callback: ResultCallback<void>): void {\n    if (this._dispatcherType !== 'jsi') {\n      callback({ error: new Error('provideSyncJson unavailable. Use JSI mode to enable.') })\n      return\n    }\n\n    this._dispatcher.call('provideSyncJson', [id, syncPullResultJson], callback)\n  }\n\n  unsafeResetDatabase(callback: ResultCallback<void>): void {\n    this._dispatcher.call(\n      'unsafeResetDatabase',\n      [this._encodedSchema(), this.schema.version],\n      (result) => {\n        if (result.value) {\n          logger.log('[SQLite] Database is now reset')\n        }\n        callback(result)\n      },\n    )\n  }\n\n  unsafeExecute(operations: UnsafeExecuteOperations, callback: ResultCallback<void>): void {\n    if (process.env.NODE_ENV !== 'production') {\n      invariant(\n        operations &&\n          typeof operations === 'object' &&\n          Object.keys(operations).length === 1 &&\n          (Array.isArray(operations.sqls) || typeof operations.sqlString === 'string'),\n        \"unsafeExecute expects an { sqls: [ [sql, [args..]], ... ] } or { sqlString: 'foo; bar' } object\",\n      )\n    }\n    if (operations.sqls) {\n      const queries: SQLiteQuery[] = (operations: any).sqls\n      const batchOperations = queries.map(([sql, args]) => [IGNORE_CACHE, null, sql, [args]])\n      this._dispatcher.call('batch', [batchOperations], callback)\n    } else if (operations.sqlString) {\n      this._dispatcher.call('unsafeExecuteMultiple', [operations.sqlString], callback)\n    }\n  }\n\n  getLocal(key: string, callback: ResultCallback<?string>): void {\n    this._dispatcher.call('getLocal', [key], callback)\n  }\n\n  setLocal(key: string, value: string, callback: ResultCallback<void>): void {\n    invariant(typeof value === 'string', 'adapter.setLocal() value must be a string')\n    const operation = [\n      IGNORE_CACHE,\n      null,\n      `insert or replace into \"local_storage\" (\"key\", \"value\") values (?, ?)`,\n      [[key, value]],\n    ]\n    this._dispatcher.call('batch', [[operation]], callback)\n  }\n\n  removeLocal(key: string, callback: ResultCallback<void>): void {\n    const operation = [IGNORE_CACHE, null, `delete from \"local_storage\" where \"key\" == ?`, [[key]]]\n    this._dispatcher.call('batch', [[operation]], callback)\n  }\n\n  _encodedSchema(): SQL {\n    return require('./encodeSchema').encodeSchema(this.schema)\n  }\n\n  _migrationSteps(fromVersion: SchemaVersion): ?(MigrationStep[]) {\n    const { stepsForMigration } = require('../../Schema/migrations/stepsForMigration')\n    const { migrations } = this\n    // TODO: Remove this after migrations are shipped\n    if (!migrations) {\n      return null\n    }\n    return stepsForMigration({\n      migrations,\n      fromVersion,\n      toVersion: this.schema.version,\n    })\n  }\n}\n"
  },
  {
    "path": "src/adapters/sqlite/integrationTest.js",
    "content": "import { Platform } from 'react-native'\nimport SQLiteAdapter from './index'\nimport { testSchema } from '../__tests__/helpers'\nimport commonTests from '../__tests__/commonTests'\nimport { invariant } from '../../utils/common'\nimport DatabaseAdapterCompat from '../compat'\n\nconst SQLiteAdapterTest = (spec) => {\n  const configurations = [\n    Platform.OS !== 'windows'\n      ? {\n          name: 'SQLiteAdapter (async mode)',\n          options: {},\n          expectedDispatcherType: 'asynchronous',\n        }\n      : null,\n    { name: 'SQLiteAdapter (JSI mode)', options: { jsi: true }, expectedDispatcherType: 'jsi' },\n  ].filter(Boolean)\n\n  configurations.forEach(({ name: configurationName, options, expectedDispatcherType }) => {\n    spec.describe(configurationName, () => {\n      spec.it('configures adapter correctly', () => {\n        const adapter = new SQLiteAdapter({ schema: testSchema, ...options })\n        expect(adapter._dispatcherType).toBe(expectedDispatcherType)\n      })\n\n      const testCases = commonTests()\n      const onlyTestCases = testCases.filter(([, , isOnly]) => isOnly)\n      const testCasesToRun = onlyTestCases.length ? onlyTestCases : testCases\n\n      testCasesToRun.forEach((testCase) => {\n        const [name, test] = testCase\n        spec.it(name, async () => {\n          const dbName = `file:testdb${Math.random()}?mode=memory&cache=shared`\n          const adapter = new SQLiteAdapter({ schema: testSchema, dbName, ...options })\n          invariant(\n            adapter._dispatcherType === expectedDispatcherType,\n            `Expected adapter to be ${expectedDispatcherType}`,\n          )\n          await test(\n            new DatabaseAdapterCompat(adapter),\n            SQLiteAdapter,\n            { dbName, ...options },\n            Platform.OS,\n          )\n        })\n      })\n\n      if (onlyTestCases.length) {\n        spec.it('BROKEN SETUP', async () => {\n          throw new Error('Do not commit tests with it.only')\n        })\n      }\n    })\n  })\n}\n\nexport default SQLiteAdapterTest\n"
  },
  {
    "path": "src/adapters/sqlite/makeDispatcher/decodeQueryResult/index.js",
    "content": "// @flow\n\n// Compressed records have this syntax:\n// [\n//   ['id', 'body', ...], // 0: column names\n//   ['foo', 'bar', ...], // values matching column names\n//   'id',                // only cached id\n// ]\nexport default function decodeQueryResult(compressedRecords: any[]): any[] {\n  const len = compressedRecords.length\n  if (!len) {\n    return []\n  }\n  const columnNames = compressedRecords[0]\n  const columnsLen = columnNames.length\n\n  const rawRecords = new Array(len - 1)\n  let rawRecord, compressedRecord\n  for (let i = 1; i < len; i++) {\n    compressedRecord = compressedRecords[i]\n    if (typeof compressedRecord === 'string') {\n      rawRecord = compressedRecord\n    } else {\n      rawRecord = ({}: { [any]: any })\n      for (let j = 0; j < columnsLen; j++) {\n        rawRecord[columnNames[j]] = compressedRecord[j]\n      }\n    }\n    rawRecords[i - 1] = rawRecord\n  }\n  return rawRecords\n}\n"
  },
  {
    "path": "src/adapters/sqlite/makeDispatcher/decodeQueryResult/test.js",
    "content": "import decodeQueryResult from './index'\n\ndescribe('decodeQueryResult', () => {\n  it(`decodes query result`, () => {\n    expect(decodeQueryResult([])).toEqual([])\n    expect(decodeQueryResult([['a', 'b', 'c']])).toEqual([])\n    expect(\n      decodeQueryResult([\n        ['a', 'b', 'c'],\n        [1, 2, 3],\n      ]),\n    ).toEqual([{ a: 1, b: 2, c: 3 }])\n    expect(decodeQueryResult([['a', 'b', 'c'], 'foo'])).toEqual(['foo'])\n    expect(decodeQueryResult([['a', 'b', 'c'], 'foo', [1, 2, 3], 'bar', [10, 20, 30]])).toEqual([\n      'foo',\n      { a: 1, b: 2, c: 3 },\n      'bar',\n      { a: 10, b: 20, c: 30 },\n    ])\n  })\n})\n"
  },
  {
    "path": "src/adapters/sqlite/makeDispatcher/index.js",
    "content": "// @flow\n/* eslint-disable global-require */\n\nimport DatabaseBridge from '../sqlite-node/DatabaseBridge'\nimport { type ConnectionTag } from '../../../utils/common'\nimport { type ResultCallback } from '../../../utils/fp/Result'\nimport type {\n  DispatcherType,\n  SQLiteAdapterOptions,\n  SqliteDispatcher,\n  SqliteDispatcherMethod,\n  SqliteDispatcherOptions,\n} from '../type'\n\nclass SqliteNodeDispatcher implements SqliteDispatcher {\n  _tag: ConnectionTag\n\n  constructor(tag: ConnectionTag): void {\n    this._tag = tag\n  }\n\n  call(methodName: SqliteDispatcherMethod, args: any[], callback: ResultCallback<any>): void {\n    // $FlowFixMe\n    const method = DatabaseBridge[methodName].bind(DatabaseBridge)\n    method(\n      this._tag,\n      ...args,\n      (value) => callback({ value }),\n      (code, message, error) => callback({ error }),\n    )\n  }\n}\n\nexport const makeDispatcher = (\n  _type: DispatcherType,\n  tag: ConnectionTag,\n  _dbName: string,\n  _options: SqliteDispatcherOptions,\n): SqliteDispatcher => {\n  return new SqliteNodeDispatcher(tag)\n}\n\nexport function getDispatcherType(_options: SQLiteAdapterOptions): DispatcherType {\n  return 'asynchronous'\n}\n"
  },
  {
    "path": "src/adapters/sqlite/makeDispatcher/index.native.js",
    "content": "// @flow\n/* eslint-disable global-require */\n\nimport { NativeModules, Platform } from 'react-native'\nimport { type ConnectionTag, logger, invariant } from '../../../utils/common'\nimport { fromPromise, type ResultCallback } from '../../../utils/fp/Result'\nimport type {\n  DispatcherType,\n  SQLiteAdapterOptions,\n  SqliteDispatcher,\n  SqliteDispatcherMethod,\n  SqliteDispatcherOptions,\n} from '../type'\n\nconst { WMDatabaseBridge, WMDatabaseJSIBridge } = NativeModules\n\nclass SqliteNativeModulesDispatcher implements SqliteDispatcher {\n  _tag: ConnectionTag\n  _unsafeNativeReuse: boolean\n  _bridge: any\n\n  constructor(\n    tag: ConnectionTag,\n    bridge: any,\n    { experimentalUnsafeNativeReuse }: SqliteDispatcherOptions,\n  ): void {\n    this._tag = tag\n    this._bridge = bridge\n    this._unsafeNativeReuse = experimentalUnsafeNativeReuse\n    if (process.env.NODE_ENV !== 'production') {\n      invariant(\n        this._bridge,\n        `NativeModules.WMDatabaseBridge is not defined! This means that you haven't properly linked WatermelonDB native module. Refer to docs for instructions about installation (and the changelog if this happened after an upgrade).`,\n      )\n\n      invariant(\n        Platform.OS !== 'windows',\n        'Windows is only supported via JSI. Pass { jsi: true } to SQLiteAdapter constructor.',\n      )\n    }\n  }\n\n  call(name: SqliteDispatcherMethod, _args: any[], callback: ResultCallback<any>): void {\n    let methodName: string = name\n    let args = _args\n    if (methodName === 'batch' && this._bridge.batchJSON) {\n      methodName = 'batchJSON'\n      args = [JSON.stringify(args[0])]\n    } else if (\n      ['initialize', 'setUpWithSchema', 'setUpWithMigrations'].includes(methodName) &&\n      Platform.OS === 'android'\n    ) {\n      // FIXME: Hacky, refactor once native reuse isn't an \"unsafe experimental\" option\n      args.push(this._unsafeNativeReuse)\n    }\n    fromPromise(this._bridge[methodName](this._tag, ...args), callback)\n  }\n}\n\nclass SqliteJsiDispatcher implements SqliteDispatcher {\n  _db: any\n  _unsafeErrorListener: (Error) => void // debug hook for NT use\n\n  constructor(dbName: string, { usesExclusiveLocking }: SqliteDispatcherOptions): void {\n    this._db = global.nativeWatermelonCreateAdapter(dbName, usesExclusiveLocking)\n    this._unsafeErrorListener = () => {}\n  }\n\n  call(name: SqliteDispatcherMethod, _args: any[], callback: ResultCallback<any>): void {\n    let methodName: string = name\n    let args = _args\n\n    if (methodName === 'query' && !global.HermesInternal) {\n      // NOTE: compressing results of a query into a compact array makes querying 15-30% faster on JSC\n      // but actually 9% slower on Hermes (presumably because Hermes has faster C++ JSI and slower JS execution)\n      methodName = 'queryAsArray'\n    } else if (methodName === 'batch') {\n      methodName = 'batchJSON'\n      args = [JSON.stringify(args[0])]\n    } else if (\n      Platform.OS === 'windows' &&\n      (methodName === 'provideSyncJson' || methodName === 'unsafeLoadFromSync')\n    ) {\n      callback({ error: new Error(`${methodName} unavailable on Windows. Please contribute.`) })\n    } else if (methodName === 'provideSyncJson') {\n      fromPromise(WMDatabaseBridge.provideSyncJson(...args), callback)\n      return\n    }\n\n    try {\n      const method = this._db[methodName]\n      if (!method) {\n        throw new Error(\n          `Cannot run database method ${methodName} because database failed to open. Hint: Did you install JSI correctly? This happens if you forgot to configure Proguard correctly ${Object.keys(\n            this._db,\n          ).join(',')}`,\n        )\n      }\n      let result = method(...args)\n      // On Android, errors are returned, not thrown - see DatabaseBridge.cpp\n      if (result instanceof Error) {\n        throw result\n      } else {\n        if (methodName === 'queryAsArray') {\n          result = require('./decodeQueryResult').default(result)\n        }\n        callback({ value: result })\n      }\n    } catch (error) {\n      this._unsafeErrorListener(error)\n      callback({ error })\n    }\n  }\n}\n\nexport const makeDispatcher = (\n  type: DispatcherType,\n  tag: ConnectionTag,\n  dbName: string,\n  options: SqliteDispatcherOptions,\n): SqliteDispatcher => {\n  switch (type) {\n    case 'jsi':\n      return new SqliteJsiDispatcher(dbName, options)\n    case 'asynchronous':\n      return new SqliteNativeModulesDispatcher(tag, WMDatabaseBridge, options)\n    default:\n      throw new Error('Unknown DispatcherType')\n  }\n}\n\nconst initializeJSI = () => {\n  if (global.nativeWatermelonCreateAdapter) {\n    return true\n  }\n\n  const bridge = WMDatabaseBridge\n  if (bridge.initializeJSI) {\n    try {\n      bridge.initializeJSI()\n      return !!global.nativeWatermelonCreateAdapter\n    } catch (e) {\n      logger.error('[SQLite] Failed to initialize JSI')\n      logger.error(e)\n    }\n  } else if (WMDatabaseJSIBridge && WMDatabaseJSIBridge.install) {\n    WMDatabaseJSIBridge.install()\n    return !!global.nativeWatermelonCreateAdapter\n  }\n\n  return false\n}\n\nexport function getDispatcherType(options: SQLiteAdapterOptions): DispatcherType {\n  if (options.jsi) {\n    if (initializeJSI()) {\n      return 'jsi'\n    }\n\n    logger.warn(\n      `JSI SQLiteAdapter not available… falling back to asynchronous operation. This will happen if you're using remote debugger, and may happen if you forgot to recompile native app after WatermelonDB update`,\n    )\n  }\n\n  return 'asynchronous'\n}\n"
  },
  {
    "path": "src/adapters/sqlite/sqlite-node/Database.js",
    "content": "// @flow\nconst fs = require(`fs`)\nconst SQliteDatabase = require('better-sqlite3')\n\ntype SQLiteDatabaseType = any\n\nclass Database {\n  instance: $FlowFixMe<SQLiteDatabaseType> = undefined\n\n  path: string\n\n  constructor(path: string = ':memory:'): void {\n    this.path = path\n    // this.instance = new SQliteDatabase(path);\n    this.open()\n  }\n\n  open(): void {\n    let { path } = this\n    if (path === 'file::memory:' || path.indexOf('?mode=memory') >= 0) {\n      path = ':memory:'\n    }\n\n    try {\n      // eslint-disable-next-line no-console\n      this.instance = new SQliteDatabase(path, { verboze: console.log })\n    } catch (error) {\n      throw new Error(`Failed to open the database. - ${error.message}`)\n    }\n\n    if (!this.instance || !this.instance.open) {\n      throw new Error('Failed to open the database.')\n    }\n  }\n\n  inTransaction(executeBlock: () => void): void {\n    this.instance.transaction(executeBlock)()\n  }\n\n  execute(query: string, args: any[] = []): any {\n    return this.instance.prepare(query).run(args)\n  }\n\n  executeStatements(queries: string): any {\n    return this.instance.exec(queries)\n  }\n\n  queryRaw(query: string, args: any[] = []): any | any[] {\n    let results = []\n    const stmt = this.instance.prepare(query)\n    if (stmt.get(args)) {\n      results = stmt.all(args)\n    }\n    return results\n  }\n\n  count(query: string, args: any[] = []): number {\n    const results = this.instance.prepare(query).all(args)\n\n    if (results.length === 0) {\n      throw new Error('Invalid count query, can`t find next() on the result')\n    }\n\n    const result = results[0]\n\n    if (result.count === undefined) {\n      throw new Error('Invalid count query, can`t find `count` column')\n    }\n\n    return Number.parseInt(result.count, 10)\n  }\n\n  get userVersion(): number {\n    return this.instance.pragma('user_version', {\n      simple: true,\n    })\n  }\n\n  set userVersion(version: number): void {\n    this.instance.pragma(`user_version = ${version}`)\n  }\n\n  unsafeDestroyEverything(): void {\n    // Deleting files by default because it seems simpler, more reliable\n    // And we have a weird problem with sqlite code 6 (database busy) in sync mode\n    // But sadly this won't work for in-memory (shared) databases, so in those cases,\n    // drop all tables, indexes, and reset user version to 0\n\n    if (this.isInMemoryDatabase()) {\n      this.inTransaction(() => {\n        const results = this.queryRaw(`SELECT * FROM sqlite_master WHERE type = 'table'`)\n        const tables = results.map((table) => table.name)\n\n        tables.forEach((table) => {\n          this.execute(`DROP TABLE IF EXISTS '${table}'`)\n        })\n\n        this.execute('PRAGMA writable_schema=1')\n        const count = this.queryRaw(`SELECT * FROM sqlite_master`).length\n        if (count) {\n          // IF required to avoid SQLIte Error\n          this.execute('DELETE FROM sqlite_master')\n        }\n        this.execute('PRAGMA user_version=0')\n        this.execute('PRAGMA writable_schema=0')\n      })\n    } else {\n      this.instance.close()\n      if (this.instance.open) {\n        throw new Error('Could not close database')\n      }\n\n      if (fs.existsSync(this.path)) {\n        fs.unlinkSync(this.path)\n      }\n      if (fs.existsSync(`${this.path}-wal`)) {\n        fs.unlinkSync(`${this.path}-wal`)\n      }\n      if (fs.existsSync(`${this.path}-shm`)) {\n        fs.unlinkSync(`${this.path}-shm`)\n      }\n\n      this.open()\n    }\n  }\n\n  isInMemoryDatabase(): any {\n    return this.instance.memory\n  }\n}\n\nexport default Database\n"
  },
  {
    "path": "src/adapters/sqlite/sqlite-node/DatabaseBridge.js",
    "content": "// @flow\n\nimport DatabaseDriver from './DatabaseDriver'\n\ntype Connection = {\n  driver: DatabaseDriver,\n  queue: any[],\n  status: string,\n}\n\nclass DatabaseBridge {\n  connections: { [key: number]: Connection } = {}\n\n  // MARK: - Asynchronous connections\n\n  connected(tag: number, driver: DatabaseDriver): void {\n    this.connections[tag] = { driver, queue: [], status: 'connected' }\n  }\n\n  waiting(tag: number, driver: DatabaseDriver): void {\n    this.connections[tag] = { driver, queue: [], status: 'waiting' }\n  }\n\n  initialize(\n    tag: number,\n    databaseName: string,\n    schemaVersion: number,\n    resolve: (status: { code: string, databaseVersion?: number }) => void,\n    reject: () => void,\n  ): void {\n    let driver\n    try {\n      this.assertNoConnection(tag)\n      driver = new DatabaseDriver()\n      driver.initialize(databaseName, schemaVersion)\n      this.connected(tag, driver)\n\n      resolve({ code: 'ok' })\n    } catch (error) {\n      if (driver && error.type === 'SchemaNeededError') {\n        this.waiting(tag, driver)\n        resolve({ code: 'schema_needed' })\n      } else if (driver && error.type === 'MigrationNeededError') {\n        this.waiting(tag, driver)\n        resolve({ code: 'migrations_needed', databaseVersion: error.databaseVersion })\n      } else {\n        this.sendReject(reject, error, 'initialize')\n      }\n    }\n  }\n\n  setUpWithSchema(\n    tag: number,\n    databaseName: string,\n    schema: string,\n    schemaVersion: number,\n    resolve: (boolean) => void,\n    _reject: () => void,\n  ): void {\n    const driver = new DatabaseDriver()\n    driver.setUpWithSchema(databaseName, schema, schemaVersion)\n    this.connectDriverAsync(tag, driver)\n    resolve(true)\n  }\n\n  setUpWithMigrations(\n    tag: number,\n    databaseName: string,\n    migrations: string,\n    fromVersion: number,\n    toVersion: number,\n    resolve: (boolean) => void,\n    reject: () => void,\n  ): void {\n    try {\n      const driver = new DatabaseDriver()\n      driver.setUpWithMigrations(databaseName, {\n        from: fromVersion,\n        to: toVersion,\n        sql: migrations,\n      })\n      this.connectDriverAsync(tag, driver)\n      resolve(true)\n    } catch (error) {\n      this.disconnectDriver(tag)\n      this.sendReject(reject, error, 'setUpWithMigrations')\n    }\n  }\n\n  // MARK: - Asynchronous actions\n\n  find(\n    tag: number,\n    table: string,\n    id: string,\n    resolve: (any) => void,\n    reject: (string) => void,\n  ): void {\n    this.withDriver(tag, resolve, reject, 'find', (driver) => driver.find(table, id))\n  }\n\n  query(\n    tag: number,\n    table: string,\n    query: string,\n    args: any[],\n    resolve: (any) => void,\n    reject: (string) => void,\n  ): void {\n    this.withDriver(tag, resolve, reject, 'query', (driver) =>\n      driver.cachedQuery(table, query, args),\n    )\n  }\n\n  queryIds(\n    tag: number,\n    query: string,\n    args: any[],\n    resolve: (any) => void,\n    reject: (string) => void,\n  ): void {\n    this.withDriver(tag, resolve, reject, 'queryIds', (driver) => driver.queryIds(query, args))\n  }\n\n  unsafeQueryRaw(\n    tag: number,\n    query: string,\n    args: any[],\n    resolve: (any) => void,\n    reject: (string) => void,\n  ): void {\n    this.withDriver(tag, resolve, reject, 'unsafeQueryRaw', (driver) =>\n      driver.unsafeQueryRaw(query, args),\n    )\n  }\n\n  count(\n    tag: number,\n    query: string,\n    args: any[],\n    resolve: (any) => void,\n    reject: (string) => void,\n  ): void {\n    this.withDriver(tag, resolve, reject, 'count', (driver) => driver.count(query, args))\n  }\n\n  batch(tag: number, operations: any[], resolve: (any) => void, reject: (string) => void): void {\n    this.withDriver(tag, resolve, reject, 'batch', (driver) => driver.batch(operations))\n  }\n\n  unsafeResetDatabase(\n    tag: number,\n    schema: string,\n    schemaVersion: number,\n    resolve: (any) => void,\n    reject: (string) => void,\n  ): void {\n    this.withDriver(tag, resolve, reject, 'unsafeResetDatabase', (driver) =>\n      driver.unsafeResetDatabase({ version: schemaVersion, sql: schema }),\n    )\n  }\n\n  getLocal(tag: number, key: string, resolve: (any) => void, reject: (string) => void): void {\n    this.withDriver(tag, resolve, reject, 'getLocal', (driver) => driver.getLocal(key))\n  }\n\n  // MARK: - Helpers\n\n  withDriver(\n    tag: number,\n    resolve: (any) => void,\n    reject: (any) => void,\n    functionName: string,\n    action: (driver: DatabaseDriver) => any,\n  ): void {\n    try {\n      const connection = this.connections[tag]\n      if (!connection) {\n        throw new Error(`No driver for with tag ${tag} available`)\n      }\n      if (connection.status === 'connected') {\n        const result = action(connection.driver)\n        resolve(result)\n      } else if (connection.status === 'waiting') {\n        // consoleLog('Operation for driver (tagID) enqueued')\n        // try again when driver is ready\n        connection.queue.push(() => {\n          this.withDriver(tag, resolve, reject, functionName, action)\n        })\n      }\n    } catch (error) {\n      this.sendReject(reject, error, functionName)\n    }\n  }\n\n  connectDriverAsync(tag: number, driver: DatabaseDriver): void {\n    const { queue = [] } = this.connections[tag]\n    this.connections[tag] = { driver, queue: [], status: 'connected' }\n\n    queue.forEach((operation) => operation())\n  }\n\n  disconnectDriver(tag: number): void {\n    const { queue = [] } = this.connections[tag]\n    delete this.connections[tag]\n\n    queue.forEach((operation) => operation())\n  }\n\n  assertNoConnection(tag: number): void {\n    if (this.connections[tag]) {\n      throw new Error(`A driver with tag ${tag} already set up`)\n    }\n  }\n\n  sendReject(reject: (string, string, Error) => void, error: Error, functionName: string): void {\n    if (reject) {\n      reject(`db.${functionName}.error`, error.message, error)\n    } else {\n      throw new Error(`db.${functionName} missing reject (${error.message})`)\n    }\n  }\n}\n\nconst databaseBridge: DatabaseBridge = new DatabaseBridge()\n\nexport default databaseBridge\n"
  },
  {
    "path": "src/adapters/sqlite/sqlite-node/DatabaseDriver.js",
    "content": "// @flow\n\nimport Database from './Database'\n\nfunction fixArgs(args: any[]): any[] {\n  return args.map((value) => {\n    if (typeof value === 'boolean') {\n      return value ? 1 : 0\n    }\n    return value\n  })\n}\n\ntype Migrations = { from: number, to: number, sql: string }\n\nclass MigrationNeededError extends Error {\n  databaseVersion: number\n\n  type: string\n\n  constructor(databaseVersion: number): void {\n    super('MigrationNeededError')\n    this.databaseVersion = databaseVersion\n    this.type = 'MigrationNeededError'\n    this.message = 'MigrationNeededError'\n  }\n}\n\nclass SchemaNeededError extends Error {\n  type: string\n\n  constructor(): void {\n    super('SchemaNeededError')\n    this.type = 'SchemaNeededError'\n    this.message = 'SchemaNeededError'\n  }\n}\n\nexport function getPath(dbName: string): string {\n  if (dbName === ':memory:' || dbName === 'file::memory:') {\n    return dbName\n  }\n\n  let path =\n    dbName.startsWith('/') || dbName.startsWith('file:') ? dbName : `${process.cwd()}/${dbName}`\n  if (path.indexOf('.db') === -1) {\n    if (path.indexOf('?') >= 0) {\n      const index = path.indexOf('?')\n      path = `${path.substring(0, index)}.db${path.substring(index)}`\n    } else {\n      path = `${path}.db`\n    }\n  }\n\n  return path\n}\n\nclass DatabaseDriver {\n  static sharedMemoryConnections: { [dbName: string]: Database } = {}\n\n  database: Database\n\n  cachedRecords: any = {}\n\n  initialize(dbName: string, schemaVersion: number): void {\n    this.init(dbName)\n    this.isCompatible(schemaVersion)\n  }\n\n  setUpWithSchema(dbName: string, schema: string, schemaVersion: number): void {\n    this.init(dbName)\n    this.unsafeResetDatabase({ version: schemaVersion, sql: schema })\n    this.isCompatible(schemaVersion)\n  }\n\n  setUpWithMigrations(dbName: string, migrations: Migrations): void {\n    this.init(dbName)\n    this.migrate(migrations)\n    this.isCompatible(migrations.to)\n  }\n\n  init(dbName: string): void {\n    this.database = new Database(getPath(dbName))\n\n    const isSharedMemory = dbName.indexOf('mode=memory') > 0 && dbName.indexOf('cache=shared') > 0\n    if (isSharedMemory) {\n      if (!DatabaseDriver.sharedMemoryConnections[dbName]) {\n        DatabaseDriver.sharedMemoryConnections[dbName] = this.database\n      }\n      this.database = DatabaseDriver.sharedMemoryConnections[dbName]\n    }\n  }\n\n  find(table: string, id: string): any | null | string {\n    if (this.isCached(table, id)) {\n      return id\n    }\n\n    const query = `SELECT * FROM '${table}' WHERE id == ? LIMIT 1`\n    const results = this.database.queryRaw(query, [id])\n\n    if (results.length === 0) {\n      return null\n    }\n\n    this.markAsCached(table, id)\n    return results[0]\n  }\n\n  cachedQuery(table: string, query: string, args: any[]): any[] {\n    const results = this.database.queryRaw(query, fixArgs(args))\n    return results.map((row: any) => {\n      const id = `${row.id}`\n      if (this.isCached(table, id)) {\n        return id\n      }\n      this.markAsCached(table, id)\n      return row\n    })\n  }\n\n  queryIds(query: string, args: any[]): string[] {\n    return this.database.queryRaw(query, fixArgs(args)).map((row) => `${row.id}`)\n  }\n\n  unsafeQueryRaw(query: string, args: any[]): any[] {\n    return this.database.queryRaw(query, fixArgs(args))\n  }\n\n  count(query: string, args: any[]): number {\n    return this.database.count(query, fixArgs(args))\n  }\n\n  batch(operations: any[]): void {\n    const newIds = []\n    const removedIds = []\n\n    this.database.inTransaction(() => {\n      operations.forEach((operation: any[]) => {\n        const [cacheBehavior, table, sql, argBatches] = operation\n        argBatches.forEach((args) => {\n          this.database.execute(sql, fixArgs(args))\n          if (cacheBehavior === 1) {\n            newIds.push([table, args[0]])\n          } else if (cacheBehavior === -1) {\n            removedIds.push([table, args[0]])\n          }\n        })\n      })\n    })\n\n    newIds.forEach(([table, id]) => {\n      this.markAsCached(table, id)\n    })\n\n    removedIds.forEach(([table, id]) => {\n      this.removeFromCache(table, id)\n    })\n  }\n\n  // MARK: - LocalStorage\n\n  getLocal(key: string): any | null {\n    const results = this.database.queryRaw('SELECT `value` FROM `local_storage` WHERE `key` = ?', [\n      key,\n    ])\n\n    if (results.length > 0) {\n      return results[0].value\n    }\n\n    return null\n  }\n\n  // MARK: - Record caching\n\n  hasCachedTable(table: string): any {\n    // $FlowFixMe\n    return Object.prototype.hasOwnProperty.call(this.cachedRecords, table)\n  }\n\n  isCached(table: string, id: string): boolean {\n    if (this.hasCachedTable(table)) {\n      return this.cachedRecords[table].has(id)\n    }\n    return false\n  }\n\n  markAsCached(table: string, id: string): void {\n    if (!this.hasCachedTable(table)) {\n      this.cachedRecords[table] = new Set()\n    }\n    this.cachedRecords[table].add(id)\n  }\n\n  removeFromCache(table: string, id: string): void {\n    if (this.hasCachedTable(table) && this.cachedRecords[table].has(id)) {\n      this.cachedRecords[table].delete(id)\n    }\n  }\n\n  // MARK: - Other private details\n\n  isCompatible(schemaVersion: number): void {\n    const databaseVersion = this.database.userVersion\n    if (schemaVersion !== databaseVersion) {\n      if (databaseVersion > 0 && databaseVersion < schemaVersion) {\n        throw new MigrationNeededError(databaseVersion)\n      } else {\n        throw new SchemaNeededError()\n      }\n    }\n  }\n\n  unsafeResetDatabase(schema: { sql: string, version: number }): void {\n    this.database.unsafeDestroyEverything()\n    this.cachedRecords = {}\n\n    this.database.inTransaction(() => {\n      this.database.executeStatements(schema.sql)\n      this.database.userVersion = schema.version\n    })\n  }\n\n  migrate(migrations: Migrations): void {\n    const databaseVersion = this.database.userVersion\n\n    if (`${databaseVersion}` !== `${migrations.from}`) {\n      throw new Error(\n        `Incompatbile migration set applied. DB: ${databaseVersion}, migration: ${migrations.from}`,\n      )\n    }\n\n    this.database.inTransaction(() => {\n      this.database.executeStatements(migrations.sql)\n      this.database.userVersion = migrations.to\n    })\n  }\n}\n\nexport default DatabaseDriver\n"
  },
  {
    "path": "src/adapters/sqlite/sqlite-node/__tests__/DatabaseDriver.test.js",
    "content": "import { getPath } from '../DatabaseDriver'\n\ndescribe('NodeJS DatabaseDriver', () => {\n  test.each([\n    ['foo'],\n    ['file:foo'],\n    ['/path/foo'],\n    ['foo.sqlite'],\n    // ?mode=memory\n    ['foo?mode=memory'],\n    ['file:foo?mode=memory'],\n    ['/path/foo?mode=memory'],\n    ['foo.sqlite?mode=memory'],\n    // ?bar=baz\n    ['foo?bar=baz'],\n    ['file:foo?bar=baz'],\n    ['/path/foo?bar=baz'],\n    ['foo.sqlite?bar=baz'],\n  ])('getPath will add extension for %s', (dbName) => {\n    const path = getPath(dbName)\n    expect(path).toContain('.db')\n    expect(path.split('.db')).toHaveLength(2)\n  })\n\n  test.each([[':memory:'], ['file::memory:']])(\n    'getPath will not add extension for %s',\n    (dbName) => {\n      expect(getPath(dbName)).not.toContain('.db')\n    },\n  )\n})\n"
  },
  {
    "path": "src/adapters/sqlite/test.js",
    "content": "import fs from 'fs'\nimport { testSchema } from '../__tests__/helpers'\nimport commonTests from '../__tests__/commonTests'\n\nimport SqliteAdapter from './index'\nimport DatabaseAdapterCompat from '../compat'\n\nfunction removeIfExists(file, dbName) {\n  if (file && fs.existsSync(dbName)) {\n    fs.unlinkSync(dbName)\n  }\n}\n\ndescribe.each([\n  // ['SQLiteAdapterNode', 'Asynchronous', 'File'],\n  ['SQLiteAdapterNode', 'Asynchronous', 'Memory'],\n])('%s (%s/%s)', (adapterSubclass, fileString) => {\n  commonTests().forEach((testCase) => {\n    const [name, test] = testCase\n\n    if (name.match(/from file system/) && process.platform === 'win32') {\n      // eslint-disable-next-line no-console\n      console.error(`FIXME: Broken test on Windows! ${name}`)\n      return\n    }\n\n    // eslint-disable-next-line jest/valid-title\n    it(name, async () => {\n      const file = fileString.toLowerCase() === 'file'\n\n      // NOTE: one test uses .tmp/xx path, but we have to create it first\n      if (!fs.existsSync('.tmp')) {\n        fs.mkdirSync('.tmp')\n      }\n\n      const dbName = `${process.cwd()}/test${Math.random()}.db${\n        file ? '' : '?mode=memory&cache=shared'\n      }`\n      const extraAdapterOptions = {\n        dbName,\n        adapterSubclass,\n      }\n      const adapter = new SqliteAdapter({\n        dbName,\n        schema: testSchema,\n      })\n\n      try {\n        await adapter.initializingPromise\n        await test(new DatabaseAdapterCompat(adapter), SqliteAdapter, extraAdapterOptions, 'node')\n      } finally {\n        removeIfExists(file, dbName)\n      }\n    })\n  })\n})\n"
  },
  {
    "path": "src/adapters/sqlite/type.d.ts",
    "content": "import type { ResultCallback } from '../../utils/fp/Result'\nimport type { AppSchema } from '../../Schema'\nimport type { SchemaMigrations } from '../../Schema/migrations'\nimport { $Exact } from '../../types'\n\nexport type SQL = string\nexport type SQLiteArg = string | boolean | number | null\nexport type SQLiteQuery = [SQL, SQLiteArg[]]\n\nexport type MigrationEvents = {\n  onSuccess: () => void\n  onStart: () => void\n  onError: (error: Error) => void\n}\n\nexport type SQLiteAdapterOptions = $Exact<{\n  dbName?: string\n  schema: AppSchema\n  migrations?: SchemaMigrations\n  // The new way to run the database in synchronous mode.\n  jsi?: boolean\n  migrationEvents?: MigrationEvents\n  // Called when database failed to set up (initialize) correctly. It's possible that\n  // it's some transient error that will be solved by a reload, but it's\n  // very likely that the error is persistent (e.g. a corrupted database).\n  // Pass a callback to offer to the user to reload the app or log out\n  onSetUpError?: (error: Error) => void\n  // Sets exclusive file locking mode in sqlite. Use this ONLY if you need to - e.g. seems to fix\n  // mysterious \"database is malformed\" issues on JSI+Android when using Headless JS\n  usesExclusiveLocking?: boolean\n}>\n\nexport type DispatcherType = 'asynchronous' | 'jsi'\n\nexport type SqliteDispatcherMethod =\n  | 'initialize'\n  | 'setUpWithSchema'\n  | 'setUpWithMigrations'\n  | 'find'\n  | 'query'\n  | 'queryIds'\n  | 'unsafeQueryRaw'\n  | 'count'\n  | 'batch'\n  | 'unsafeLoadFromSync'\n  | 'provideSyncJson'\n  | 'unsafeResetDatabase'\n  | 'getLocal'\n  | 'unsafeExecuteMultiple'\n\nexport interface SqliteDispatcher {\n  call(methodName: SqliteDispatcherMethod, args: any[], callback: ResultCallback<any>): void\n}\n"
  },
  {
    "path": "src/adapters/sqlite/type.js",
    "content": "// @flow\n\nimport { type ResultCallback } from '../../utils/fp/Result'\n\nimport type { AppSchema, TableName, SchemaVersion } from '../../Schema'\nimport type { SchemaMigrations } from '../../Schema/migrations'\n\nexport type SQL = string\nexport type SQLiteArg = string | boolean | number | null\nexport type SQLiteQuery = [SQL, SQLiteArg[]]\n\nexport type MigrationEvents = {\n  onSuccess: () => void,\n  onStart: () => void,\n  onError: (error: Error) => void,\n}\n\nexport type SQLiteAdapterOptions = $Exact<{\n  dbName?: string,\n  schema: AppSchema,\n  migrations?: SchemaMigrations,\n  // The new way to run the database in synchronous mode.\n  jsi?: boolean,\n  migrationEvents?: MigrationEvents,\n  // Called when database failed to set up (initialize) correctly. It's possible that\n  // it's some transient error that will be solved by a reload, but it's\n  // very likely that the error is persistent (e.g. a corrupted database).\n  // Pass a callback to offer to the user to reload the app or log out\n  onSetUpError?: (error: Error) => void,\n  // (JSI only) Sets exclusive file locking mode in sqlite. Use this ONLY if you need to - e.g. seems to fix\n  // mysterious \"database is malformed\" issues on JSI+Android when using Headless JS\n  usesExclusiveLocking?: boolean,\n  // (Android/non-JSI only) If `true`, this database connection will be accessible from native code\n  // like so:\n  //   import com.nozbe.watermelondb.*\n  //   Database.getInstance(dbName, context) // use the same dbName as in JS\n  experimentalUnsafeNativeReuse?: boolean,\n}>\n\nexport type DispatcherType = 'asynchronous' | 'jsi'\n\n// This is the internal format of batch operations\n// It's ugly, but optimized for performance and versatility, e.g.:\n// adding a record:  [1, 'table', 'insert into...', [['id', 'created', ...]]]\n// updating a record [0, null, 'update...', [['id', 'created', ...]]]\n// removing a record [-1, table, 'delete...', [['id', 'created', ...]]]\ntype NativeBridgeBatchOperationCacheBehavior =\n  | -1 // remove from cache\n  | 0 // ignore\n  | 1 // add to cache\nexport type NativeBridgeBatchOperation = [\n  NativeBridgeBatchOperationCacheBehavior,\n  ?TableName<any>, // table to add/remove from cache\n  SQL,\n  Array<SQLiteArg[]>, // id must be at [0] if cacheBehavior != 0\n]\n\nexport type InitializeStatus =\n  | { code: 'ok' | 'schema_needed' }\n  | { code: 'migrations_needed', databaseVersion: SchemaVersion }\n\nexport type SyncReturn<T> =\n  | { status: 'success', result: T }\n  | { status: 'error', code: string, message: string }\n\nexport type SqliteDispatcherOptions = $Exact<{\n  usesExclusiveLocking: boolean,\n  experimentalUnsafeNativeReuse: boolean,\n}>\n\nexport type SqliteDispatcherMethod =\n  | 'initialize'\n  | 'setUpWithSchema'\n  | 'setUpWithMigrations'\n  | 'find'\n  | 'query'\n  | 'queryIds'\n  | 'unsafeQueryRaw'\n  | 'count'\n  | 'batch'\n  | 'unsafeLoadFromSync'\n  | 'provideSyncJson'\n  | 'unsafeResetDatabase'\n  | 'getLocal'\n  | 'unsafeExecuteMultiple'\n\nexport interface SqliteDispatcher {\n  call(methodName: SqliteDispatcherMethod, args: any[], callback: ResultCallback<any>): void;\n}\n"
  },
  {
    "path": "src/adapters/type.d.ts",
    "content": "import type { SerializedQuery } from '../Query'\nimport type { TableName, AppSchema } from '../Schema'\nimport type { SchemaMigrations } from '../Schema/migrations'\nimport type { RecordId } from '../Model'\nimport type { RawRecord } from '../RawRecord'\nimport type { ResultCallback } from '../utils/fp/Result'\n\nimport type { SQLiteQuery, SQL } from './sqlite/type'\nimport type { Loki } from './lokijs/type'\nimport type { $Exact } from '../types'\n\nexport type CachedFindResult = RecordId | RawRecord | undefined\nexport type CachedQueryResult = Array<RecordId | RawRecord>\nexport type BatchOperationType = 'create' | 'update' | 'markAsDeleted' | 'destroyPermanently'\nexport type BatchOperation =\n  | ['create', TableName<any>, RawRecord]\n  | ['update', TableName<any>, RawRecord]\n  | ['markAsDeleted', TableName<any>, RecordId]\n  | ['destroyPermanently', TableName<any>, RecordId]\n\nexport type UnsafeExecuteOperations =\n  | $Exact<{ sqls: SQLiteQuery[] }>\n  | $Exact<{ sqlString: SQL }> // JSI-only\n  | $Exact<{ loki: (_: Loki) => void }>\n\nexport interface DatabaseAdapter {\n  schema: AppSchema\n\n  dbName: string\n\n  migrations?: SchemaMigrations // TODO: Not optional\n\n  // Fetches given (one) record or null. Should not send raw object if already cached in JS\n  find(table: TableName<any>, id: RecordId, callback: ResultCallback<CachedFindResult>): void\n\n  // Fetches matching records. Should not send raw object if already cached in JS\n  query(query: SerializedQuery, callback: ResultCallback<CachedQueryResult>): void\n\n  // Fetches IDs of matching records\n  queryIds(query: SerializedQuery, callback: ResultCallback<RecordId[]>): void\n\n  // Fetches unsafe, unsanitized objects according to query. You must not mutate these objects.\n  unsafeQueryRaw(query: SerializedQuery, callback: ResultCallback<any[]>): void\n\n  // Counts matching records\n  count(query: SerializedQuery, callback: ResultCallback<number>): void\n\n  // Executes multiple prepared operations\n  batch(operations: BatchOperation[], callback: ResultCallback<void>): void\n\n  // Return marked as deleted records\n  getDeletedRecords(tableName: TableName<any>, callback: ResultCallback<RecordId[]>): void\n\n  // Destroy deleted records from sync\n  destroyDeletedRecords(\n    tableName: TableName<any>,\n    recordIds: RecordId[],\n    callback: ResultCallback<void>,\n  ): void\n\n  // Unsafely adds records from a serialized (json) SyncPullResult provided earlier via native API\n  unsafeLoadFromSync(jsonId: number, callback: ResultCallback<any>): void\n\n  // Provides JSON for use by unsafeLoadFromSync\n  provideSyncJson(id: number, syncPullResultJson: string, callback: ResultCallback<void>): void\n\n  // Destroys the whole database, its schema, indexes, everything.\n  unsafeResetDatabase(callback: ResultCallback<void>): void\n\n  // Performs work on the underlying database - see concrete DatabaseAdapter implementation for more details\n  unsafeExecute(work: UnsafeExecuteOperations, callback: ResultCallback<void>): void\n\n  // Fetches string value from local storage\n  getLocal(key: string, callback: ResultCallback<string | undefined>): void\n\n  // Sets string value to a local storage key\n  setLocal(key: string, value: string, callback: ResultCallback<void>): void\n\n  // Removes key from local storage\n  removeLocal(key: string, callback: ResultCallback<void>): void\n}\n"
  },
  {
    "path": "src/adapters/type.js",
    "content": "// @flow\n\nimport type { SerializedQuery } from '../Query'\nimport type { TableName, AppSchema } from '../Schema'\nimport type { SchemaMigrations } from '../Schema/migrations'\nimport type { RecordId } from '../Model'\nimport type { RawRecord } from '../RawRecord'\nimport type { ResultCallback } from '../utils/fp/Result'\n\nimport type { SQLiteQuery, SQL } from './sqlite/type'\nimport type { Loki } from './lokijs/type'\n\nexport type CachedFindResult = RecordId | ?RawRecord\nexport type CachedQueryResult = Array<RecordId | RawRecord>\nexport type BatchOperationType = 'create' | 'update' | 'markAsDeleted' | 'destroyPermanently'\nexport type BatchOperation =\n  | ['create', TableName<any>, RawRecord]\n  | ['update', TableName<any>, RawRecord]\n  | ['markAsDeleted', TableName<any>, RecordId]\n  | ['destroyPermanently', TableName<any>, RecordId]\n\nexport type UnsafeExecuteOperations =\n  | $Exact<{ sqls: SQLiteQuery[] }>\n  | $Exact<{ sqlString: SQL }> // JSI-only\n  | $Exact<{ loki: (Loki) => void }>\n\nexport interface DatabaseAdapter {\n  schema: AppSchema;\n\n  dbName: string;\n\n  migrations: ?SchemaMigrations; // TODO: Not optional\n\n  // Fetches given (one) record or null. Should not send raw object if already cached in JS\n  find(table: TableName<any>, id: RecordId, callback: ResultCallback<CachedFindResult>): void;\n\n  // Fetches matching records. Should not send raw object if already cached in JS\n  query(query: SerializedQuery, callback: ResultCallback<CachedQueryResult>): void;\n\n  // Fetches IDs of matching records\n  queryIds(query: SerializedQuery, callback: ResultCallback<RecordId[]>): void;\n\n  // Fetches unsafe, unsanitized objects according to query. You must not mutate these objects.\n  unsafeQueryRaw(query: SerializedQuery, callback: ResultCallback<any[]>): void;\n\n  // Counts matching records\n  count(query: SerializedQuery, callback: ResultCallback<number>): void;\n\n  // Executes multiple prepared operations\n  batch(operations: BatchOperation[], callback: ResultCallback<void>): void;\n\n  // Return marked as deleted records\n  getDeletedRecords(tableName: TableName<any>, callback: ResultCallback<RecordId[]>): void;\n\n  // Destroy deleted records from sync\n  destroyDeletedRecords(\n    tableName: TableName<any>,\n    recordIds: RecordId[],\n    callback: ResultCallback<void>,\n  ): void;\n\n  // Unsafely adds records from a serialized (json) SyncPullResult provided earlier via native API\n  unsafeLoadFromSync(jsonId: number, callback: ResultCallback<any>): void;\n\n  // Provides JSON for use by unsafeLoadFromSync\n  provideSyncJson(id: number, syncPullResultJson: string, callback: ResultCallback<void>): void;\n\n  // Destroys the whole database, its schema, indexes, everything.\n  unsafeResetDatabase(callback: ResultCallback<void>): void;\n\n  // Performs work on the underlying database - see concrete DatabaseAdapter implementation for more details\n  unsafeExecute(work: UnsafeExecuteOperations, callback: ResultCallback<void>): void;\n\n  // Fetches string value from local storage\n  getLocal(key: string, callback: ResultCallback<?string>): void;\n\n  // Sets string value to a local storage key\n  setLocal(key: string, value: string, callback: ResultCallback<void>): void;\n\n  // Removes key from local storage\n  removeLocal(key: string, callback: ResultCallback<void>): void;\n}\n"
  },
  {
    "path": "src/decorators/action/index.d.ts",
    "content": "export const action: MethodDecorator\n\nexport default action\n\nexport const writer: MethodDecorator\nexport const reader: MethodDecorator\n"
  },
  {
    "path": "src/decorators/action/index.js",
    "content": "// @flow\n\nimport type { Descriptor } from '../../utils/common/makeDecorator'\n\n// Wraps function calls in `database.write(() => { ... })`. See docs for more details\n// You can use this on Model subclass methods (or methods of any object that has a `database` property)\nexport function writer(target: Object, key: string, descriptor: Descriptor): Descriptor {\n  const actionName = `${target.table || target.constructor.name}.${key}`\n  return {\n    ...descriptor,\n    value(...args): Promise<any> {\n      // $FlowFixMe\n      return this.database.write(() => descriptor.value.apply(this, args), actionName)\n    },\n  }\n}\n\n// Wraps function calls in `database.read(() => { ... })`. See docs for more details\n// You can use this on Model subclass methods (or methods of any object that has a `database` property)\nexport function reader(target: Object, key: string, descriptor: Descriptor): Descriptor {\n  const actionName = `${target.table || target.constructor.name}.${key}`\n  return {\n    ...descriptor,\n    value(...args): Promise<any> {\n      // $FlowFixMe\n      return this.database.read(() => descriptor.value.apply(this, args), actionName)\n    },\n  }\n}\n"
  },
  {
    "path": "src/decorators/action/test.js",
    "content": "import { MockTask, mockDatabase } from '../../__tests__/testModels'\nimport { writer, reader } from './index'\n\nclass MockTaskExtended extends MockTask {\n  @reader\n  async returnArgs(a, b, ...c) {\n    return [this.name, a, b, c]\n  }\n\n  @writer\n  async nested(...args) {\n    this.callWriter(() => this.returnArgs('sub', ...args))\n    this.callWriter(() => this.db.write(async () => 42))\n\n    return this.callReader(() => this.returnArgs('sub', ...args))\n  }\n}\n\ndescribe('@writer', () => {\n  it('calls db.writer() and passes arguments correctly', async () => {\n    const { database, tasks } = mockDatabase()\n    const record = new MockTaskExtended(tasks, { name: 'test' })\n\n    const spy = jest.spyOn(database, 'read')\n\n    expect(await record.returnArgs(1, 2, 3, 4)).toEqual(['test', 1, 2, [3, 4]])\n\n    expect(spy).toHaveBeenCalledTimes(1)\n    expect(spy.mock.calls[0][0]).toBeInstanceOf(Function)\n    expect(spy.mock.calls[0][1]).toBe('mock_tasks.returnArgs')\n  })\n  it('can call subactions using this.callReader/callWriter', async () => {\n    const { tasks } = mockDatabase()\n    const record = new MockTaskExtended(tasks, { name: 'test' })\n\n    expect(await record.nested(1, 2, 3, 4)).toEqual(['test', 'sub', 1, [2, 3, 4]])\n  })\n  it('works with arbitrary classes', async () => {\n    const { database } = mockDatabase()\n    const spy = jest.spyOn(database, 'read')\n    class TestClass {\n      database\n\n      @reader async test() {\n        return 42\n      }\n    }\n\n    const test = new TestClass()\n    test.database = database\n\n    expect(await test.test()).toEqual(42)\n    expect(spy).toHaveBeenCalledTimes(1)\n  })\n})\n"
  },
  {
    "path": "src/decorators/children/index.d.ts",
    "content": "import { TableName } from '../../Schema'\n\ndeclare function children(childTable: TableName<any>): PropertyDecorator\nexport default children\n"
  },
  {
    "path": "src/decorators/children/index.js",
    "content": "// @flow\n\nimport makeDecorator, { type Decorator } from '../../utils/common/makeDecorator'\nimport logError from '../../utils/common/logError'\nimport invariant from '../../utils/common/invariant'\n\nimport * as Q from '../../QueryDescription'\nimport type { TableName } from '../../Schema'\nimport type Model from '../../Model'\nimport type Query from '../../Query'\n\n// Defines a model property that queries records that *belong_to* this model\n// Pass name of the table with desired records. (The model defining a @children property must\n// have a has_many association defined with this table)\n//\n// Example: a Task has_many Comments, so it may define:\n//   @children('comment') comments: Query<Comment>\n\nconst children: Decorator = makeDecorator((childTable: TableName<any>) => () => ({\n  get(): Query<Model> {\n    // $FlowFixMe\n    const that = this\n    // Use cached Query if possible\n    that._childrenQueryCache = that._childrenQueryCache || {}\n    const cachedQuery = that._childrenQueryCache[childTable]\n    if (cachedQuery) {\n      return cachedQuery\n    }\n\n    // Cache new Query\n    const model: Model = that.asModel\n    const childCollection = model.collections.get(childTable)\n\n    const association = model.constructor.associations[childTable]\n    invariant(\n      association && association.type === 'has_many',\n      `@children decorator used for a table that's not has_many`,\n    )\n\n    const query = childCollection.query(Q.where(association.foreignKey, model.id))\n\n    that._childrenQueryCache[childTable] = query\n    return query\n  },\n  set(): void {\n    logError('Setter called on a @children-marked property')\n  },\n}))\n\nexport default children\n"
  },
  {
    "path": "src/decorators/children/test.js",
    "content": "import { appSchema, tableSchema } from '../../Schema'\nimport * as Q from '../../QueryDescription'\nimport Model from '../../Model'\nimport Database from '../../Database'\nimport { field } from '..'\nimport { logger } from '../../utils/common'\n\nimport children from './index'\n\nclass MockParent extends Model {\n  static table = 'mock_parent'\n\n  static associations = {\n    mock_child: { type: 'has_many', foreignKey: 'parent_id' },\n  }\n\n  @children('mock_child') children\n}\n\nclass MockChild extends Model {\n  static table = 'mock_child'\n\n  static associations = {\n    mock_parent: { type: 'belongs_to', key: 'parent_id' },\n  }\n\n  @field('parent_id') parentId\n}\n\nconst makeDatabase = () =>\n  new Database({\n    adapter: {\n      schema: appSchema({\n        version: 1,\n        tables: [\n          tableSchema({ name: 'mock_parent', columns: [] }),\n          tableSchema({ name: 'mock_child', columns: [{ name: 'parent_id', type: 'string' }] }),\n        ],\n      }),\n    },\n    modelClasses: [MockParent, MockChild],\n  })\n\ndescribe('decorators/children', () => {\n  it('fetches children of a model', async () => {\n    const database = makeDatabase()\n    database.adapter.batch = jest.fn()\n\n    const parentMock = await database.write(() => database.collections.get('mock_parent').create())\n\n    const expectedQuery = database.collections\n      .get('mock_child')\n      .query(Q.where('parent_id', parentMock.id))\n    expect(parentMock.children).toEqual(expectedQuery)\n  })\n  it('works on arbitrary objects with asModel', async () => {\n    const database = makeDatabase()\n    database.adapter.batch = jest.fn()\n\n    const parent = await database.write(() => database.collections.get('mock_parent').create())\n    class ParentProxy {\n      asModel = parent\n\n      @children('mock_child') children\n    }\n    const parentProxy = new ParentProxy()\n    expect(parentProxy.children).toEqual(parent.children)\n  })\n  it('throws error if set is attempted', async () => {\n    const database = makeDatabase()\n    database.adapter.batch = jest.fn()\n\n    const parent = await database.write(() => database.collections.get('mock_parent').create())\n\n    const spy = jest.spyOn(logger, 'error').mockImplementation(() => {})\n    parent.children = []\n    expect(spy).toHaveBeenCalledTimes(1)\n    spy.mockRestore()\n  })\n  it('caches created Query', () => {\n    const database = makeDatabase()\n    const parent = new MockParent(database.collections.get('mock_parent'), { id: 'parent' })\n\n    const query1 = parent.children\n    const query2 = parent.children\n    expect(query1).toBe(query2)\n  })\n})\n"
  },
  {
    "path": "src/decorators/common.d.ts",
    "content": "import type { ColumnName } from '../Schema'\n\nexport function ensureDecoratorUsedProperly(\n  columnName: ColumnName,\n  target: Object,\n  key: string,\n  descriptor: Object,\n): void\n"
  },
  {
    "path": "src/decorators/common.js",
    "content": "// @flow\n\nimport invariant from '../utils/common/invariant'\n\nimport type { ColumnName } from '../Schema'\n\n// eslint-disable-next-line\nexport function ensureDecoratorUsedProperly(\n  columnName: ColumnName,\n  target: Object,\n  key: string,\n  descriptor: Object,\n): void {\n  invariant(\n    columnName,\n    `Pass column name (raw field name) to the decorator - error in ${target.constructor.name}.prototype.${key} given.`,\n  )\n  if (descriptor) {\n    invariant(\n      'initializer' in descriptor,\n      `Model field decorators can only be used for simple properties - method, setter or getter ${target.constructor.name}.prototype.${key} given.`,\n    )\n    invariant(\n      typeof descriptor.initializer !== 'function',\n      `Model field decorators must not be used on properties with a default value - error in \"${target.constructor.name}.prototype.${key}\".`,\n    )\n  }\n}\n"
  },
  {
    "path": "src/decorators/date/index.d.ts",
    "content": "import { ColumnName } from '../../Schema'\n\ndeclare function date(columnName: ColumnName): PropertyDecorator\nexport default date\n"
  },
  {
    "path": "src/decorators/date/index.js",
    "content": "// @flow\n\nimport makeDecorator, { type Decorator } from '../../utils/common/makeDecorator'\nimport { onLowMemory } from '../../utils/common/memory'\nimport { type ColumnName } from '../../Schema'\n\nimport { ensureDecoratorUsedProperly } from '../common'\n\n// Defines a model property representing a date\n//\n// Serializes dates to milisecond-precision Unix timestamps, and deserializes them to Date objects\n// (but passes null values as-is)\n//\n// Pass the database column name as an argument\n//\n// Examples:\n//   @date('reacted_at') reactedAt: Date\n\nconst cache = new Map<number, Date>()\nonLowMemory(() => cache.clear())\n\nconst dateDecorator: Decorator = makeDecorator(\n  (columnName: ColumnName) => (target: Object, key: string, descriptor: Object) => {\n    ensureDecoratorUsedProperly(columnName, target, key, descriptor)\n\n    return {\n      configurable: true,\n      enumerable: true,\n      get(): ?Date {\n        // $FlowFixMe\n        const rawValue = this.asModel._getRaw(columnName)\n        if (typeof rawValue === 'number') {\n          const cached = cache.get(rawValue)\n          if (cached) {\n            return cached\n          }\n          const date = new Date(rawValue)\n          cache.set(rawValue, date)\n          return date\n        }\n        return null\n      },\n      set(date: ?Date): void {\n        const rawValue = date ? +new Date(date) : null\n        if (rawValue && date) {\n          cache.set(rawValue, new Date(date))\n        }\n        // $FlowFixMe\n        this.asModel._setRaw(columnName, rawValue)\n      },\n    }\n  },\n)\n\nexport default dateDecorator\n"
  },
  {
    "path": "src/decorators/date/test.js",
    "content": "import Model from '../../Model'\n\nimport { tableSchema } from '../../Schema'\nimport date from './index'\n\nconst schema = tableSchema({\n  name: 'mock',\n  columns: [{ name: 'date', type: 'number', isOptional: true }],\n})\n\nclass MockModel extends Model {\n  static table = 'mock'\n\n  @date('date')\n  date\n}\n\ndescribe('decorators/timestamp', () => {\n  it('returns timestamps cast to Date', () => {\n    const model = new MockModel({ schema }, { date: 1400000000000 })\n    expect(model.date).toBeInstanceOf(Date)\n    expect(+model.date).toBe(1400000000000)\n  })\n  it('returns null if raw field is null', () => {\n    const model = new MockModel({ schema }, { date: null })\n    expect(model.date).toBe(null)\n  })\n  it('sets timestamps cast from dates', () => {\n    const model = new MockModel({ schema }, {})\n    model._isEditing = true\n    model.date = Date.now()\n    expect(model._getRaw('date')).toBeGreaterThan(1500000000000)\n  })\n  it('sets null if passed', () => {\n    const model = new MockModel({ schema }, {})\n    model._isEditing = true\n    model.date = null\n    expect(model._getRaw('date')).toBe(null)\n  })\n  it('returns 1970 date, not null if timestamp=0', () => {\n    const model = new MockModel({ schema }, { date: 0 })\n    expect(model.date).toBeInstanceOf(Date)\n    expect(+model.date).toBe(0)\n  })\n  it('sets 1970 date, not null if timestamp', () => {\n    const model = new MockModel({ schema }, {})\n    model._isEditing = true\n    model.date = new Date(0)\n    expect(model._getRaw('date')).toBe(0)\n    expect(+model.date).toBe(0)\n  })\n  it('fails if applied to incorrect fields', () => {\n    expect(\n      () =>\n        class {\n          @date\n          noName\n        },\n    ).toThrow('column name')\n  })\n  it('returns a instance of date if cached', () => {\n    const model = new MockModel({ schema }, { date: 0 })\n    expect(model.date).toBeInstanceOf(Date)\n    model._isEditing = true\n    model.date = '2011-10-05T14:48:00.000Z'\n    expect(model.date).toBeInstanceOf(Date)\n  })\n})\n"
  },
  {
    "path": "src/decorators/experimentalFailsafe/index.d.ts",
    "content": "declare function failsafe(fallback?: any): PropertyDecorator\nexport default failsafe\n"
  },
  {
    "path": "src/decorators/experimentalFailsafe/index.js",
    "content": "// @flow\n\nimport { isObj } from '../../utils/fp'\nimport { catchError, of } from '../../utils/rx'\n\ntype FailsafeDecorator = (\n  fallback?: any,\n) => (target: Object, key: string, descriptor: Object) => Object\n\nconst failsafe: FailsafeDecorator =\n  (fallback = undefined) =>\n  (target, key, descriptor) => {\n    return {\n      ...descriptor,\n      get(): any {\n        let value\n        // $FlowFixMe[object-this-reference]\n        const unsafeThis = this\n\n        if ('value' in descriptor) {\n          value = descriptor.value\n        } else if ('get' in descriptor) {\n          value = descriptor.get.call(unsafeThis)\n        } else if ('initializer' in descriptor) {\n          value = descriptor.initializer.call(unsafeThis)\n        }\n\n        if (value && isObj(value)) {\n          const originalFetch = value.fetch\n          const originalObserve = value.observe\n\n          if (typeof originalFetch === 'function') {\n            value.fetch = function fetch(...args): any {\n              const result = originalFetch.apply(value, args)\n              if (isObj(result) && typeof result.catch === 'function') {\n                return result.catch(() => fallback)\n              }\n              return result\n            }\n          }\n\n          if (typeof originalObserve === 'function') {\n            value.observe = function observe(...args): any {\n              const result = originalObserve.apply(value, args)\n              if (isObj(result) && typeof result.pipe === 'function') {\n                return result.pipe(catchError(() => of(fallback)))\n              }\n              return result\n            }\n          }\n        }\n\n        Object.defineProperty(unsafeThis, key, {\n          value,\n          enumerable: descriptor.enumerable,\n        })\n\n        return value\n      },\n    }\n  }\n\nexport default failsafe\n"
  },
  {
    "path": "src/decorators/field/index.d.ts",
    "content": "import { ColumnName } from '../../Schema'\n\ndeclare function field(columnName: ColumnName): PropertyDecorator\nexport default field\n"
  },
  {
    "path": "src/decorators/field/index.js",
    "content": "// @flow\n\nimport makeDecorator, { type Decorator } from '../../utils/common/makeDecorator'\n\nimport { type Value } from '../../QueryDescription'\nimport { type ColumnName } from '../../Schema'\n\nimport { ensureDecoratorUsedProperly } from '../common'\n\n// Defines a model property\n//\n// Returns and sets values as-is, except that `undefined` and missing fields are normalized to `null`\n// If you have a more specific propety, use the correct decorator (@boolean, @text, etc.)\n//\n// Pass the database column name as an argument\n//\n// Example:\n//   @field('some_field') someField\n\nconst field: Decorator = makeDecorator(\n  (columnName: ColumnName) => (target: Object, key: string, descriptor: Object) => {\n    ensureDecoratorUsedProperly(columnName, target, key, descriptor)\n\n    return {\n      configurable: true,\n      enumerable: true,\n      get(): Value {\n        // $FlowFixMe\n        return this.asModel._getRaw(columnName)\n      },\n      set(value: any): void {\n        // $FlowFixMe\n        this.asModel._setRaw(columnName, value)\n      },\n    }\n  },\n)\n\nexport default field\n"
  },
  {
    "path": "src/decorators/field/test.js",
    "content": "import { MockTask, mockDatabase } from '../../__tests__/testModels'\nimport field from './index'\n\ndescribe('decorators/field', () => {\n  it('delegates accesses to _getRaw/_setRaw', () => {\n    const { tasks } = mockDatabase()\n    const model = new MockTask(tasks, {})\n    model._getRaw = jest.fn()\n    model._setRaw = jest.fn()\n\n    model.projectId\n    model.projectId = 'xx'\n    model.projectId\n    model.projectId = 'bar'\n\n    expect(model._getRaw).toHaveBeenCalledTimes(2)\n    expect(model._getRaw).toHaveBeenCalledWith('project_id')\n    expect(model._setRaw).toHaveBeenCalledTimes(2)\n    expect(model._setRaw).toHaveBeenCalledWith('project_id', 'xx')\n    expect(model._setRaw).toHaveBeenLastCalledWith('project_id', 'bar')\n  })\n  it('works with arbitrary objects with asModel', () => {\n    const { tasks } = mockDatabase()\n    const model = new MockTask(tasks, {})\n    class ModelProxy {\n      asModel = model\n\n      @field('name') name\n    }\n    model._isEditing = true\n    model.name = 'a'\n    const proxy = new ModelProxy()\n    expect(proxy.name).toBe('a')\n    proxy.name = 'b'\n    expect(model.name).toBe('b')\n  })\n  it('fails if applied to incorrect fields', () => {\n    expect(\n      () =>\n        class {\n          @field\n          noName\n        },\n    ).toThrow('column name')\n    expect(\n      () =>\n        class {\n          @field()\n          noName\n        },\n    ).toThrow('column name')\n    expect(\n      () =>\n        class {\n          @field('field_with_default_value')\n          fieldWithDefaultValue = 'hey'\n        },\n    ).toThrow('properties with a default value')\n    expect(\n      () =>\n        class {\n          @field('getter')\n          get someGetter() {\n            return 'hey'\n          }\n        },\n    ).toThrow('simple properties')\n    expect(\n      () =>\n        class {\n          @field('method')\n          method() {}\n        },\n    ).toThrow('simple properties')\n  })\n})\n"
  },
  {
    "path": "src/decorators/immutableRelation/index.d.ts",
    "content": "import { ColumnName, TableName } from '../../Schema'\n\ndeclare function immutableRelation(\n  relationTable: TableName<any>,\n  relationIdColumn: ColumnName,\n): PropertyDecorator\n\nexport default immutableRelation\n"
  },
  {
    "path": "src/decorators/immutableRelation/index.js",
    "content": "// @flow\n\nimport { type Decorator } from '../../utils/common/makeDecorator'\nimport type { ColumnName, TableName } from '../../Schema'\n\nimport relation from '../relation'\n\n// Defines a model property that fetches a record with a specific ID\n// The property defined must be *immutable*, i.e. the relation ID must never change\n// Returns an immutable Relation object. See watermelondb/Relation for more information\n//\n// If the property *can* change, use `relation` instead\n//\n// You can only assign a value inside a `collection.create()` or `collection.prepareCreate()` block\n//\n// relationIdColumn - name of the column with record ID\n// relationTable - name of the table containing desired recods\n//\n// Example: a Comment has an author (and an author can never change), so it may define:\n//   @immutableRelation('team_member', 'author_id') author: Relation<TeamMember>\n\nconst immutableRelation: Decorator = (\n  relationTable: TableName<any>,\n  relationIdColumn: ColumnName,\n) => relation(relationTable, relationIdColumn, { isImmutable: true })\n\nexport default immutableRelation\n"
  },
  {
    "path": "src/decorators/immutableRelation/test.js",
    "content": "import { MockComment, mockDatabase } from '../../__tests__/testModels'\n\nimport Relation from '../../Relation'\n\ndescribe('decorators/immutableRelation', () => {\n  it('creates immutable Relation object', () => {\n    const { comments } = mockDatabase()\n    const primary = new MockComment(comments, { task_id: 's1' })\n\n    const relation = primary.task\n    expect(relation).toEqual(new Relation(primary, 'mock_tasks', 'task_id', { isImmutable: true }))\n  })\n})\n"
  },
  {
    "path": "src/decorators/index.d.ts",
    "content": "export { default as action, writer, reader } from './action'\nexport { default as children } from './children'\nexport { default as json } from './json'\nexport { default as nochange } from './nochange'\nexport { default as field } from './field'\nexport { default as date } from './date'\nexport { default as text } from './text'\nexport { default as readonly } from './readonly'\nexport { default as lazy } from './lazy'\nexport { default as relation } from './relation'\nexport { default as immutableRelation } from './immutableRelation'\nexport { default as experimentalFailsafe } from './experimentalFailsafe'\n"
  },
  {
    "path": "src/decorators/index.js",
    "content": "// @flow\n\nexport { writer, reader } from './action'\nexport { default as children } from './children'\nexport { default as json } from './json'\nexport { default as nochange } from './nochange'\nexport { default as field } from './field'\nexport { default as date } from './date'\nexport { default as text } from './text'\nexport { default as readonly } from './readonly'\nexport { default as lazy } from './lazy'\nexport { default as relation } from './relation'\nexport { default as immutableRelation } from './immutableRelation'\nexport { default as experimentalFailsafe } from './experimentalFailsafe'\n"
  },
  {
    "path": "src/decorators/json/index.d.ts",
    "content": "import { ColumnName } from '../../Schema'\nimport Model from '../../Model'\n\nexport type Sanitizer = (source: any, model?: Model) => any\n\nexport type Options = {\n  /** Use cached value if possible rather than sanitizing the raw value for every read. Default: `false` */\n  memo: boolean\n}\n\ndeclare function json(\n  rawFieldName: ColumnName,\n  sanitizer: Sanitizer,\n  options?: Options,\n): PropertyDecorator\n\nexport default json\n"
  },
  {
    "path": "src/decorators/json/index.js",
    "content": "// @flow\n\nimport { type Decorator } from '../../utils/common/makeDecorator'\n\nimport { type ColumnName } from '../../Schema'\nimport type Model from '../../Model'\n\nimport { ensureDecoratorUsedProperly } from '../common'\n\n// Defines a model property that's (de)serialized to and from JSON using custom sanitizer function.\n//\n// Pass the database column name as first argument, and sanitizer function as second.\n//\n// Stored value will be parsed to JSON if possible, and passed to sanitizer as argument, or\n// undefined will be passed on parsing error. Field value will be result of sanitizer call.\n//\n// Value assigned to field will be passed to sanitizer and its results will be stored as stringified\n// value.\n//\n// Examples:\n//   @json('contact_info', jsonValue => jasonValue || {}) contactInfo: ContactInfo\n\nconst parseJSON = (value: any) => {\n  // fast path\n  if (value === null || value === undefined || value === '') {\n    return undefined\n  }\n  try {\n    return JSON.parse(value)\n  } catch (_) {\n    return undefined\n  }\n}\n\nconst defaultOptions = { memo: false }\n\nexport const jsonDecorator: Decorator =\n  (\n    rawFieldName: ColumnName,\n    sanitizer: (json: any, model?: Model) => any,\n    options?: $Exact<{ memo?: boolean }> = defaultOptions,\n  ) =>\n  (target: Object, key: string, descriptor: Object) => {\n    ensureDecoratorUsedProperly(rawFieldName, target, key, descriptor)\n\n    return {\n      configurable: true,\n      enumerable: true,\n      get(): any {\n        // $FlowFixMe\n        const model = this\n        const rawValue = model.asModel._getRaw(rawFieldName)\n\n        if (options.memo) {\n          // Use cached value if possible\n          model._jsonDecoratorCache = model._jsonDecoratorCache || {}\n          const cachedEntry = model._jsonDecoratorCache[rawFieldName]\n          if (cachedEntry && cachedEntry[0] === rawValue) {\n            return cachedEntry[1]\n          }\n        }\n\n        const parsedValue = parseJSON(rawValue)\n        const sanitized = sanitizer(parsedValue, model)\n\n        if (options.memo) {\n          model._jsonDecoratorCache[rawFieldName] = [rawValue, sanitized]\n        }\n\n        return sanitized\n      },\n      set(json: any): void {\n        // $FlowFixMe\n        const model = this\n        const sanitizedValue = sanitizer(json, model)\n        const stringifiedValue = sanitizedValue != null ? JSON.stringify(sanitizedValue) : null\n\n        model.asModel._setRaw(rawFieldName, stringifiedValue)\n      },\n    }\n  }\n\nexport default jsonDecorator\n"
  },
  {
    "path": "src/decorators/json/test.js",
    "content": "import Model from '../../Model'\n\nimport { tableSchema } from '../../Schema'\nimport json from './index'\nimport field from '../field'\n\nconst schema = tableSchema({\n  name: 'mock',\n  columns: [{ name: 'extras', type: 'string', isOptional: true }],\n})\n\nconst schema2 = tableSchema({\n  name: 'mock',\n  columns: [\n    { name: 'kind', type: 'string' },\n    { name: 'extras', type: 'string', isOptional: true },\n  ],\n})\n\nconst mockSanitizer = (storedValue) =>\n  storedValue && Array.isArray(storedValue.elements)\n    ? { elements: storedValue.elements }\n    : { elements: [] }\n\nconst mockSanitizer2 = (storedValue, model) =>\n  model.kind === 'A' ? { dataA: storedValue.dataA } : { dataB: storedValue.dataB }\n\nclass MockModel extends Model {\n  static table = 'mock'\n\n  @json('extras', mockSanitizer)\n  extras\n}\n\nclass MockModel2 extends Model {\n  static table = 'mock'\n\n  @json('extras', () => null)\n  extras\n}\n\nclass MockModel3 extends Model {\n  static table = 'mock'\n\n  @field('kind') kind\n\n  @json('extras', mockSanitizer2)\n  extras\n\n  @json('extras', mockSanitizer2, { memo: true })\n  extrasMemoized\n}\n\ndescribe('decorators/json', () => {\n  it('deserializes value from JSON', () => {\n    const model = new MockModel(\n      { schema },\n      { extras: '{\"elements\":[10,false,\"foo\",{\"foo\":\"bar\"}]}' },\n    )\n    expect(model.extras).toEqual({ elements: [10, false, 'foo', { foo: 'bar' }] })\n\n    const model2 = new MockModel({ schema }, { extras: '-Infinity' })\n    expect(model2.extras).toEqual({ elements: [] })\n\n    const model3 = new MockModel({ schema }, { extras: null })\n    expect(model3.extras).toEqual({ elements: [] })\n\n    const model4 = new MockModel2({ schema }, { extras: { data: [1, 2, 3, 4] } })\n    expect(model4.extras).toEqual(null)\n\n    const model5 = new MockModel3({ schema2 }, { kind: 'A', extras: '{ \"dataA\": [1, 2, 3, 4] }' })\n    expect(model5.extras).toEqual({ dataA: [1, 2, 3, 4] })\n\n    const model6 = new MockModel3({ schema2 }, { kind: 'B', extras: '{ \"dataB\": [1, 2, 3, 4] }' })\n    expect(model6.extras).toEqual({ dataB: [1, 2, 3, 4] })\n  })\n  it('serializes value to JSON', () => {\n    const model = new MockModel({ schema }, {})\n    model._isEditing = true\n\n    model.extras = { elements: [true, 3.14, { bar: 'baz' }], otherValue: true }\n    expect(model._getRaw('extras')).toBe('{\"elements\":[true,3.14,{\"bar\":\"baz\"}]}')\n\n    model.extras = null\n    expect(model._getRaw('extras')).toBe('{\"elements\":[]}')\n\n    const model2 = new MockModel2({ schema }, {})\n    model2._isEditing = true\n    model2.extras = { data: [1, 2, 3, 4] }\n    expect(model2._getRaw('extras')).toBe(null)\n  })\n  it(`can memoize deserialized values`, () => {\n    const model = new MockModel3({ schema2 }, { kind: 'B', extras: '{ \"dataB\": [1, 2, 3, 4] }' })\n    const extras = model.extrasMemoized\n    expect(extras).toEqual(model.extras)\n    expect(extras).not.toBe(model.extras)\n    expect(extras).toBe(model.extrasMemoized)\n  })\n  // FIXME: missing test?\n  // eslint-disable-next-line jest/no-commented-out-tests\n  // it('fails if applied to incorrect fields', () => {\n  //   expect(\n  //     () =>\n  //       class {\n  //         @json\n  //         noName\n  //       },\n  //   ).toThrow('column name')\n  // })\n})\n"
  },
  {
    "path": "src/decorators/lazy/index.d.ts",
    "content": "// Copied from lib.es5.d.ts, PropertyDecorator\ndeclare function lazy(target: Object, propertyKey: string | symbol): void\ndeclare function lazy(): PropertyDecorator\nexport default lazy\n"
  },
  {
    "path": "src/decorators/lazy/index.js",
    "content": "// @flow\n\nimport type { Descriptor } from '../../utils/common/makeDecorator'\n\n// Defines a property whose value is evaluated the first time it is accessed\n// For example:\n//\n// class X {\n//   @lazy date = new Date()\n// }\n//\n// `date` will be set to the current date not when constructed, but only when `xx.date` is called.\n// All subsequent calls will return the same value\n\nexport default function lazy(target: Object, key: string, descriptor: Descriptor): Descriptor {\n  const { configurable, enumerable, initializer, value } = descriptor\n  return {\n    configurable,\n    enumerable,\n    get(): any {\n      // $FlowFixMe\n      const that = this\n      // This happens if someone accesses the\n      // property directly on the prototype\n      if (that === target) {\n        return undefined\n      }\n\n      const returnValue = initializer ? initializer.call(that) : value\n\n      // Next time this property is called, skip the decorator, and just return the precomputed value\n      Object.defineProperty(that, key, {\n        configurable,\n        enumerable,\n        writable: true,\n        value: returnValue,\n      })\n\n      return returnValue\n    },\n    // TODO: What should be the behavior on set?\n  }\n}\n\n// Implementation inspired by lazyInitialize from `core-decorators`\n"
  },
  {
    "path": "src/decorators/lazy/test.js",
    "content": "import lazy from './index'\n\ndescribe('decorators/lazy', () => {\n  it('calculates value on first evaluation only', () => {\n    let fooMakesCounter = 0\n    const makeFoo = () => {\n      fooMakesCounter += 1\n      return { id: fooMakesCounter }\n    }\n\n    class X {\n      @lazy\n      foo = makeFoo()\n    }\n    const x = new X()\n\n    // No evaluation on construction\n    expect(fooMakesCounter).toBe(0)\n\n    // Check first evaluation\n    const { foo } = x\n    expect(foo).toEqual({ id: 1 })\n    expect(fooMakesCounter).toBe(1)\n\n    // No subsequent evaluations\n    expect(x.foo).toBe(foo)\n    expect(x.foo).toEqual({ id: 1 })\n    expect(fooMakesCounter).toBe(1)\n\n    // Try another object\n    const x2 = new X()\n    expect(fooMakesCounter).toBe(1)\n    expect(x2.foo).toEqual({ id: 2 })\n    expect(x2.foo).toEqual({ id: 2 })\n    expect(fooMakesCounter).toBe(2)\n  })\n})\n"
  },
  {
    "path": "src/decorators/nochange/index.d.ts",
    "content": "// Copied from lib.es5.d.ts, PropertyDecorator\ndeclare function nochange(target: Object, propertyKey: string | symbol): void\ndeclare function nochange(): PropertyDecorator\n\nexport default nochange\n"
  },
  {
    "path": "src/decorators/nochange/index.js",
    "content": "// @flow\n\nimport makeDecorator, { type Decorator } from '../../utils/common/makeDecorator'\nimport invariant from '../../utils/common/invariant'\n\n// Marks a model field as immutable after create — you can set and change the value in\n// create() and prepareCreate(), but after it's saved to the database, it cannot be changed\n\nconst nochange: Decorator = makeDecorator(\n  () => (target: Object, key: string, descriptor: Object) => {\n    invariant(\n      descriptor.set,\n      `@nochange can only be applied to model fields (to properties with a setter)`,\n    )\n\n    const errorMessage = `Attempt to set a new value on a @nochange field: ${target.constructor.name}.prototype.${key}`\n\n    return {\n      ...descriptor,\n      set(value: any): void {\n        // $FlowFixMe\n        const model = this\n        invariant(model.asModel._preparedState === 'create', errorMessage)\n        descriptor.set.call(model, value)\n      },\n    }\n  },\n)\n\nexport default nochange\n"
  },
  {
    "path": "src/decorators/nochange/test.js",
    "content": "import { expectToRejectWithMessage } from '../../__tests__/utils'\nimport { appSchema, tableSchema } from '../../Schema'\n\nimport Database from '../../Database'\nimport Model from '../../Model'\nimport field from '../field'\n\nimport nochange from './index'\n\nclass MockModel extends Model {\n  static table = 'mock'\n\n  @nochange\n  @field('foo')\n  foo\n}\n\nconst makeDatabase = () =>\n  new Database({\n    adapter: {\n      schema: appSchema({\n        version: 1,\n        tables: [\n          tableSchema({\n            name: 'mock',\n            columns: [{ name: 'foo', type: 'string', isOptional: true }],\n          }),\n        ],\n      }),\n    },\n    modelClasses: [MockModel],\n  })\n\ndescribe('decorators/nochange', () => {\n  it('allows setting values in create()', async () => {\n    const database = makeDatabase()\n    database.adapter.batch = jest.fn()\n\n    const model = await database.write(() =>\n      database.collections.get('mock').create((mock) => {\n        expect(mock.foo).toBe(null)\n        mock.foo = 't1'\n        expect(mock.foo).toBe('t1')\n        mock.foo = 't2'\n        expect(mock.foo).toBe('t2')\n        mock.foo = null\n        expect(mock.foo).toBe(null)\n        mock.foo = 't3'\n      }),\n    )\n\n    expect(model.foo).toBe('t3')\n  })\n  it('allows setting value in prepareCreate', () => {\n    const database = makeDatabase()\n    const model = database.collections.get('mock').prepareCreate((mock) => {\n      mock.foo = 't1'\n      mock.foo = 't2'\n    })\n    expect(model.foo).toBe('t2')\n  })\n  it('throws error if change after create is attempted', async () => {\n    const database = makeDatabase()\n    database.adapter.batch = jest.fn()\n\n    const model = await database.write(() =>\n      database.collections.get('mock').create((mock) => {\n        mock.foo = 't1'\n      }),\n    )\n\n    await expectToRejectWithMessage(\n      database.write(() =>\n        model.update((mock) => {\n          mock.foo = 't2'\n        }),\n      ),\n      'set a new value',\n    )\n    expect(model.foo).toBe('t1')\n  })\n  it('fails if applied to incorrect fields', () => {\n    expect(\n      () =>\n        class {\n          @nochange\n          simpleField\n        },\n    ).toThrow()\n  })\n})\n"
  },
  {
    "path": "src/decorators/readonly/index.d.ts",
    "content": "// Copied from lib.es5.d.ts, PropertyDecorator\ndeclare function readonly(target: Object, propertyKey: string | symbol): void\ndeclare function readonly(): PropertyDecorator\n\nexport default readonly\n"
  },
  {
    "path": "src/decorators/readonly/index.js",
    "content": "// @flow\n\nimport makeDecorator, { type Decorator } from '../../utils/common/makeDecorator'\nimport invariant from '../../utils/common/invariant'\n\n// Marks a field as non-writable (throws an error when attempting to set a new value)\n// When using multiple decorators, remember to mark as @readonly *last* (leftmost)\n\nconst readonly: Decorator = makeDecorator(\n  () => (target: Object, key: string, descriptor: Object) => {\n    // Set a new setter on getter/setter fields\n    if (descriptor.get || descriptor.set) {\n      return {\n        ...descriptor,\n        set(): void {\n          invariant(\n            false,\n            `Attempt to set new value on a property ${target.constructor.name}.prototype.${key} marked as @readonly`,\n          )\n        },\n      }\n    }\n\n    // Mark as writable=false for simple fields\n    descriptor.writable = false\n    return descriptor\n  },\n)\n\nexport default readonly\n"
  },
  {
    "path": "src/decorators/readonly/test.js",
    "content": "import Model from '../../Model'\nimport { field } from '..'\n\nimport { tableSchema } from '../../Schema'\nimport readonly from './index'\n\nconst schema = tableSchema({ name: 'mock', columns: [{ name: 'test', type: 'string' }] })\n\ndescribe('decorators/utils/readonly', () => {\n  it('throws on attempt to call a setter of @readonly field', () => {\n    class Mock extends Model {\n      @readonly\n      @field('test')\n      test\n    }\n    const object = new Mock({ schema }, {})\n    object.test\n    expect(() => {\n      object.test = 'foo'\n    }).toThrow()\n  })\n  it('throws on attempt to set a new value to @readonly field', () => {\n    class Mock extends Model {\n      @readonly\n      test = 'blah'\n    }\n    const object = new Mock({ schema }, {})\n    object.test\n    expect(() => {\n      object.test = 'foo'\n    }).toThrow()\n  })\n})\n"
  },
  {
    "path": "src/decorators/relation/index.d.ts",
    "content": "import { ColumnName, TableName } from '../../Schema'\nimport { Options } from '../../Relation'\n\ndeclare function relation(\n  relationTable: TableName<any>,\n  relationIdColumn: ColumnName,\n  options?: Options,\n): PropertyDecorator\n\nexport default relation\n"
  },
  {
    "path": "src/decorators/relation/index.js",
    "content": "// @flow\n\nimport { ensureDecoratorUsedProperly } from '../common'\n\nimport Relation, { type Options } from '../../Relation'\nimport type Model from '../../Model'\nimport type { ColumnName, TableName } from '../../Schema'\n\n// Defines a model property that fetches a record with a specific ID\n// Returns an mutable Relation object\n// - when the fetched record changes\n// - when the record ID changes (new record must be fetched)\n// - … or emits null whenever record ID is null\n//\n// If the record ID *can't* change, use `immutableRelation` for efficiency\n//\n// Property's setter assigns a new record (you pass the record, and the ID is set)\n//\n// relationIdColumn - name of the column with record ID\n// relationTable - name of the table containing desired recods\n//\n// Example: a Task has a project it belongs to (and the project can change), so it may define:\n//   @relation('project', 'project_id') project: Relation<Project>\n\nconst relation =\n  (\n    relationTable: TableName<any>,\n    relationIdColumn: ColumnName,\n    options: ?Options,\n  ): ((\n    target: any,\n    key: string,\n    descriptor: any,\n  ) => {| get: () => Relation<Model>, set: () => void |}) =>\n  (target: Object, key: string, descriptor: Object) => {\n    ensureDecoratorUsedProperly(relationIdColumn, target, key, descriptor)\n\n    return {\n      get(): Relation<Model> {\n        // $FlowFixMe\n        const model = this\n        model._relationCache = model._relationCache || {}\n        const cachedRelation = model._relationCache[key]\n        if (cachedRelation) {\n          return cachedRelation\n        }\n\n        const newRelation = new Relation(\n          model.asModel,\n          relationTable,\n          relationIdColumn,\n          options || { isImmutable: false },\n        )\n        model._relationCache[key] = newRelation\n\n        return newRelation\n      },\n      set(): void {\n        throw new Error(`Don't set relation directly. Use relation.set() instead`)\n      },\n    }\n  }\n\nexport default relation\n"
  },
  {
    "path": "src/decorators/relation/test.js",
    "content": "import { MockTask, mockDatabase } from '../../__tests__/testModels'\n\nimport relation from './index'\nimport Relation from '../../Relation'\n\ndescribe('decorators/relation', () => {\n  it('creates Relation object', () => {\n    const { tasks } = mockDatabase()\n    const primary = new MockTask(tasks, { project_id: 's1' })\n    expect(primary.project).toEqual(\n      new Relation(primary, 'mock_projects', 'project_id', { isImmutable: false }),\n    )\n  })\n  it('works on arbitrary objects with asModel', () => {\n    const { tasks } = mockDatabase()\n    const primary = new MockTask(tasks, { project_id: 's1' })\n\n    class PrimaryProxy {\n      asModel = primary\n\n      @relation('mock_projects', 'project_id') project\n    }\n    const primaryProxy = new PrimaryProxy()\n    expect(primaryProxy.project).toEqual(primary.project)\n  })\n  it('disallows to set relation directly', () => {\n    const { tasks } = mockDatabase()\n    const primary = new MockTask(tasks, { project_id: 's1' })\n\n    expect(() => {\n      primary.project = 'blah'\n    }).toThrow()\n  })\n  it('caches Relation object', () => {\n    const { tasks } = mockDatabase()\n    const primary = new MockTask(tasks, { project_id: 's1' })\n\n    const relation1 = primary.project\n    const relation2 = primary.project\n    expect(relation1).toBe(relation2)\n  })\n})\n"
  },
  {
    "path": "src/decorators/text/index.d.ts",
    "content": "import { ColumnName } from '../../Schema'\n\ndeclare function text(columnName: ColumnName): PropertyDecorator\n\nexport default text\n"
  },
  {
    "path": "src/decorators/text/index.js",
    "content": "// @flow\n\nimport makeDecorator, { type Decorator } from '../../utils/common/makeDecorator'\n\nimport { ensureDecoratorUsedProperly } from '../common'\n\nimport { type ColumnName } from '../../Schema'\n\n// Defines a model property representing user-input text\n//\n// On set, all strings are trimmed (whitespace is removed from beginning/end)\n// and all non-string values are converted to strings\n// (Except null which is passed as-is)\n//\n// Pass the database column name as an argument\n//\n// Examples:\n//   @text(Column.name) name: string\n//   @text('full_description') fullDescription: string\n\nconst text: Decorator = makeDecorator(\n  (columnName: ColumnName) => (target: Object, key: string, descriptor: Object) => {\n    ensureDecoratorUsedProperly(columnName, target, key, descriptor)\n\n    return {\n      configurable: true,\n      enumerable: true,\n      get(): ?string {\n        // $FlowFixMe\n        return this.asModel._getRaw(columnName)\n      },\n      set(value: ?string): void {\n        // $FlowFixMe\n        this.asModel._setRaw(columnName, typeof value === 'string' ? value.trim() : null)\n      },\n    }\n  },\n)\n\nexport default text\n"
  },
  {
    "path": "src/decorators/text/test.js",
    "content": "import Model from '../../Model'\n\nimport { tableSchema } from '../../Schema'\nimport text from './index'\n\nconst schema = tableSchema({\n  name: 'mock',\n  columns: [\n    { name: 'string', type: 'string' },\n    { name: 'string2', type: 'string', isOptional: true },\n  ],\n})\n\nclass MockModel extends Model {\n  @text('string')\n  string\n\n  @text('string2')\n  string2\n}\n\ndescribe('decorators/text', () => {\n  it('trims strings when setting', () => {\n    const model = new MockModel({ schema }, {})\n    model._isEditing = true\n    model.string = '   val2  '\n    expect(model.string).toBe('val2')\n  })\n  it('converts non-strings to null', () => {\n    const model = new MockModel({ schema }, {})\n    model._isEditing = true\n    model.string = 10\n    expect(model.string).toBe('')\n    model.string = false\n    expect(model.string).toBe('')\n    model.string = null\n    expect(model.string).toBe('')\n    model.string = undefined\n    expect(model.string).toBe('')\n    model.string = ''\n    expect(model.string).toBe('')\n    // nullable\n    model.string2 = false\n    expect(model.string2).toBe(null)\n    model.string2 = null\n    expect(model.string2).toBe(null)\n    model.string2 = undefined\n    expect(model.string2).toBe(null)\n    model.string2 = ''\n    expect(model.string2).toBe('')\n  })\n  it('fails if applied to incorrect fields', () => {\n    expect(\n      () =>\n        class {\n          @text\n          noName\n        },\n    ).toThrow('column name')\n  })\n})\n"
  },
  {
    "path": "src/diagnostics/censorRaw.js",
    "content": "// @flow\n\nimport { mapObj } from '../utils/fp'\nimport type { DirtyRaw } from '../RawRecord'\n\n// beginning, end, length\nexport const censorValue = (value: string): string =>\n  `${value.slice(0, 2)}***${value.slice(-2)}(${value.length})`\n\nconst shouldCensorKey = (key: string): boolean =>\n  key !== 'id' && !key.endsWith('_id') && key !== '_status' && key !== '_changed'\n\n// $FlowFixMe\nconst censorRaw: (DirtyRaw) => DirtyRaw = mapObj((value, key) =>\n  shouldCensorKey(key) && typeof value === 'string' ? censorValue(value) : value,\n)\n\nexport default censorRaw\n"
  },
  {
    "path": "src/diagnostics/diagnoseDatabaseStructure/impl.js",
    "content": "// @flow\n/* eslint-disable no-continue */\n\nimport forEachAsync from '../../utils/fp/forEachAsync'\nimport type { Database } from '../..'\nimport { columnName } from '../../Schema'\nimport * as Q from '../../QueryDescription'\nimport censorRaw from '../censorRaw'\nimport type { DiagnoseDatabaseStructureOptions, DatabaseStructureDiagnosis } from './index'\n\nconst pad = (text: string, len: number) => {\n  const padding = Array(Math.max(0, len - text.length))\n    .fill(' ')\n    .join('')\n  return `${text}${padding}`\n}\n\nconst yieldLog = () =>\n  new Promise((resolve) => {\n    setTimeout(resolve, 0)\n  })\n\nconst getCollections = (db: Database) =>\n  Object.entries(db.collections.map).map(([table, collection]) => {\n    return {\n      name: table,\n      // $FlowFixMe\n      parents: Object.entries(collection.modelClass.associations)\n        // $FlowFixMe\n        .filter(([, association]) => association.type === 'belongs_to')\n        // $FlowFixMe\n        .map(([parentTable, association]) => [parentTable, association.key]),\n    }\n  })\n\nconst logCollections = (\n  log: (text?: string) => void,\n  collections: Array<$Exact<{ name: string, parents: Array<Array<any | string>> }>>,\n) => {\n  collections.forEach(({ name, parents }) => {\n    const parentsText = parents.length\n      ? parents.map(([table, key]) => pad(`${table}(${key})`, 27)).join(', ')\n      : '(root)'\n\n    log(`- ${pad(name, 20)}: ${parentsText}`)\n  })\n  log()\n}\n\nconst isUniqueIndexValid = (collection: any, key: string) => {\n  const index = collection.constraints.unique[key]\n\n  if (!index) {\n    return { skip: true }\n  }\n\n  const lokiMap = Object.entries(index.lokiMap)\n  // >= and undefined checks are needed because items are not removed from unique index, just made undefined\n  const lokiMapValid =\n    lokiMap.length >= collection.data.length &&\n    lokiMap.every(([lokiId, value]) => value === undefined || collection.get(lokiId)[key] === value)\n\n  const keyMap = Object.entries(index.keyMap)\n  const keyMapValid =\n    keyMap.length >= collection.data.length &&\n    keyMap.every(\n      ([value, record]) =>\n        record === undefined ||\n        // $FlowFixMe\n        (record[key] === value && collection.get(record.$loki) === record),\n    )\n\n  return { skip: false, lokiMapValid, keyMapValid }\n}\n\nasync function verifyLokiIndices(db: Database, log: (text?: string) => void): Promise<number> {\n  log('## Verify LokiJS indices')\n  let issueCount = 0\n\n  // $FlowFixMe\n  const { loki } = db.adapter.underlyingAdapter._driver\n  loki.collections.forEach((collection) => {\n    const { name, idIndex, data, binaryIndices, uniqueNames } = collection\n    log(`**Indices of \\`${name}\\`**`)\n    log()\n\n    // check idIndex\n    if (idIndex) {\n      if (\n        idIndex.length === data.length &&\n        idIndex.every((lokiId, i) => data[i].$loki === lokiId)\n      ) {\n        log('idIndex: ok')\n      } else {\n        log('❌ idIndex: corrupted!')\n        issueCount += 1\n      }\n    } else {\n      log('idIndex: (skipping)')\n    }\n\n    // check binary indices\n    const binKeys = Object.keys(binaryIndices)\n    binKeys.forEach((binKey) => {\n      if (collection.checkIndex(binKey, { repair: true })) {\n        log(`${binKey} binary index: ok`)\n      } else {\n        log(`❌ ${binKey} binary index: corrupted! checking if repaired...`)\n        issueCount += 1\n\n        if (collection.checkIndex(binKey)) {\n          log('repaired ok')\n        } else {\n          log('❌❌ still broken after repair!')\n        }\n      }\n    })\n\n    // check unique indices\n    if (name !== 'local_storage' && !(uniqueNames.length === 1 && uniqueNames[0] === 'id')) {\n      log(`❌ expected to only have a single unique index for 'id', has: ${uniqueNames.join(', ')}`)\n      issueCount += 1\n    }\n\n    uniqueNames.forEach((key) => {\n      const results = isUniqueIndexValid(collection, key)\n      if (!results.skip) {\n        if (results.lokiMapValid) {\n          log(`${key} index loki map: ok`)\n        } else {\n          log(`❌ ${key} index loki map: corrupted!`)\n          issueCount += 1\n        }\n\n        if (results.keyMapValid) {\n          log(`${key} index key map: ok`)\n        } else {\n          log(`❌ ${key} index key map: corrupted!`)\n          issueCount += 1\n        }\n      } else {\n        log(`${key} index: (skipping)`)\n      }\n    })\n    log()\n  })\n\n  return issueCount\n}\n\nexport default function diagnoseDatabaseStructure({\n  db,\n  log: _log = () => {},\n  shouldSkipParent = () => false,\n  isOrphanAllowed = async () => false,\n}: DiagnoseDatabaseStructureOptions): Promise<DatabaseStructureDiagnosis> {\n  return db.read(async () => {\n    const startTime = Date.now()\n    let logText = ''\n    const log = (text: string = '') => {\n      logText = `${logText}\\n${text}`\n      _log(text)\n    }\n\n    let totalIssueCount = 0\n\n    log('# Database structure diagnostics')\n    log()\n\n    if ((db.adapter.underlyingAdapter.constructor: any).adapterType === 'loki') {\n      // eslint-disable-next-line require-atomic-updates\n      totalIssueCount += await verifyLokiIndices(db, log)\n    }\n\n    log('## Collection parent-child relations')\n    log()\n\n    const collections = getCollections(db)\n    // log(JSON.stringify(collections, null, 2))\n    log('```')\n    logCollections(log, collections)\n    log('```')\n    await yieldLog()\n\n    await forEachAsync(collections, async ({ name, parents }) => {\n      log(`## Structure of ${name}`)\n      log()\n\n      if (!parents.length) {\n        log(`(skipping - no parents)`)\n        log()\n        return\n      }\n      await yieldLog()\n\n      const records = await db.collections\n        // $FlowFixMe\n        .get(name)\n        .query()\n        .fetch()\n      log(`Found ${records.length} \\`${name}\\``)\n      await yieldLog()\n\n      let collectionOrphanCount = 0\n\n      await forEachAsync(parents, async ([parentName, key]) => {\n        const expectedParentSet = new Set([])\n        records.forEach((record) => {\n          const id = record._getRaw(key)\n          if (\n            id !== null &&\n            !shouldSkipParent({\n              tableName: (name: any),\n              parentTableName: (parentName: any),\n              relationKey: (key: any),\n              record: record._raw,\n            })\n          ) {\n            expectedParentSet.add(id)\n          }\n        })\n        const expectedParents = [...expectedParentSet]\n        const parentsFound = await db.collections\n          // $FlowFixMe\n          .get(parentName)\n          // $FlowFixMe\n          .query(Q.where(columnName('id'), Q.oneOf(expectedParents)))\n          .fetch()\n        log()\n        log(`Found ${parentsFound.length} parent \\`${parentName}\\` (via \\`${name}.${key}\\`)`)\n\n        const allowedOprhans = []\n\n        if (parentsFound.length !== expectedParents.length) {\n          const foundParentSet = new Set(parentsFound.map((record) => record.id))\n          const orphans = []\n\n          await forEachAsync(records, async (record) => {\n            const parentId = record._getRaw(key)\n            if (\n              parentId === null ||\n              foundParentSet.has(parentId) ||\n              shouldSkipParent({\n                tableName: (name: any),\n                parentTableName: (parentName: any),\n                relationKey: (key: any),\n                record: record._raw,\n              })\n            ) {\n              // ok\n            } else if (\n              await isOrphanAllowed({\n                tableName: (name: any),\n                parentTableName: (parentName: any),\n                relationKey: (key: any),\n                record: record._raw,\n              })\n            ) {\n              allowedOprhans.push(record)\n            } else {\n              orphans.push(record)\n            }\n          })\n\n          if (orphans.length) {\n            collectionOrphanCount += orphans.length\n            log(\n              `❌ Error! ${\n                expectedParents.length - parentsFound.length\n              } missing parent \\`${parentName}\\` across ${orphans.length} orphans:`,\n            )\n            orphans.forEach((orphan) => {\n              log()\n              log(`MISSING PARENT \\`${parentName}.${orphan._getRaw(key)} (via ${key})\\`:`)\n              log()\n              log('```')\n              log(`${JSON.stringify(censorRaw(orphan._raw), null, '  ')}`)\n              log('```')\n            })\n          }\n          await yieldLog()\n\n          if (allowedOprhans.length) {\n            log(`❓ Config allowed ${allowedOprhans.length} orphans for this field`)\n            // log(allowedOprhans.join(','))\n          }\n        }\n\n        await yieldLog()\n      })\n\n      if (!collectionOrphanCount) {\n        // log(`No orphans found in ${name}`)\n      }\n      totalIssueCount += collectionOrphanCount\n      log()\n    })\n\n    log('## Conclusion')\n    log()\n    if (totalIssueCount) {\n      log(`❌ ${totalIssueCount} issues found`)\n    } else {\n      log(`✅ No issues found in this database!`)\n    }\n\n    log()\n    log(`Done in ${(Date.now() - startTime) / 1000} s.`)\n    return { issueCount: totalIssueCount, log: logText }\n  })\n}\n"
  },
  {
    "path": "src/diagnostics/diagnoseDatabaseStructure/index.js",
    "content": "// @flow\n\nimport type { RawRecord, Database, TableName, ColumnName } from '../..'\n\nexport type DiagnoseDatabaseStructureOptions = $Exact<{\n  db: Database,\n\n  /**\n   * Optionally pass function to log messages as diagnostics are performed instead of only a bulk\n   * report at the end\n   */\n  log?: (string) => void,\n\n  /**\n   * Return `false` to skip checking record's given parent.\n   *\n   * Do this when your data model's logic dictates that this parent is not valid. For example,\n   * if you have a `parent_id` and `parent_type` columns, you only want to check one of the parents.\n   */\n  shouldSkipParent?: (\n    $Exact<{\n      tableName: TableName<any>,\n      parentTableName: TableName<any>,\n      relationKey: ColumnName,\n      record: RawRecord,\n    }>,\n  ) => boolean,\n\n  /**\n   * When an orphan record is found, this function is consulted to determine whether this orphan relation\n   * is allowed.\n   *\n   * Note that relations that can be orphaned should be marked as `@failsafe @relation(...)` in Model\n   * or otherwise checked before fetched. Otherwise, allowing orphans here can lead to false negatives\n   * in the diagnostics, and crashes in reality.\n   */\n  isOrphanAllowed?: (\n    $Exact<{\n      tableName: TableName<any>,\n      parentTableName: TableName<any>,\n      relationKey: ColumnName,\n      record: RawRecord,\n    }>,\n  ) => Promise<boolean>,\n}>\nexport type DatabaseStructureDiagnosis = $Exact<{ issueCount: number, log: string }>\n\nexport default function diagnoseDatabaseStructure(\n  options: DiagnoseDatabaseStructureOptions,\n): Promise<DatabaseStructureDiagnosis> {\n  return require('./impl').default(options)\n}\n"
  },
  {
    "path": "src/diagnostics/diagnoseSyncConsistency/impl.js",
    "content": "// @flow\n/* eslint-disable no-continue */\n\nimport forEachAsync from '../../utils/fp/forEachAsync'\nimport type { DirtyRaw } from '../..'\nimport { hasUnsyncedChanges } from '../../sync'\nimport { sanitizedRaw } from '../../RawRecord'\nimport { getLastPulledAt } from '../../sync/impl'\nimport { changeSetCount } from '../../sync/impl/helpers'\nimport censorRaw from '../censorRaw'\nimport type { DiagnoseSyncConsistencyOptions, SyncConsistencyDiagnosis } from './index'\n\nconst yieldLog = () =>\n  new Promise((resolve) => {\n    setTimeout(resolve, 0)\n  })\n\nconst recordsToMap = (records: Object): Map<string, Object> => {\n  const map = new Map()\n  records.forEach((record) => {\n    if (map.has(record.id)) {\n      throw new Error(`❌ Array of records has a duplicate ID ${record.id}`)\n    }\n    map.set(record.id, record)\n  })\n  return map\n}\n\nconst renderRecord = (record: DirtyRaw) => {\n  // eslint-disable-next-line no-unused-vars\n  const { _status, _changed, ...rest } = record\n  return JSON.stringify(censorRaw(rest), null, '  ')\n}\n\n// Indicates uncertainty whether local and remote states are fully synced - requires a retry\nclass InconsistentSyncError extends Error {}\n\nasync function diagnoseSyncConsistencyImpl(\n  {\n    db,\n    synchronize,\n    pullChanges,\n    isInconsistentRecordAllowed = async () => false,\n    isExcessLocalRecordAllowed = async () => false,\n    isMissingLocalRecordAllowed = async () => false,\n  }: DiagnoseSyncConsistencyOptions,\n  log: (text?: string) => void,\n): Promise<number> {\n  log('# Sync consistency diagnostics')\n  log()\n\n  let totalCorruptionCount = 0\n\n  // synchronize first, to ensure we're at consistent state\n  // (twice to deal with just-resolved conflicts or data just pushed)\n  log('Syncing once...')\n  await synchronize()\n  log('Syncing twice...')\n  await synchronize()\n  log('Synced.')\n\n  // disallow further local changes\n  await db.read(async (reader) => {\n    // ensure no more local changes\n    if (await reader.callReader(() => hasUnsyncedChanges({ database: db }))) {\n      log(\n        '❌ Sync consistency diagnostics failed because there are unsynced local changes - please try again.',\n      )\n      throw new InconsistentSyncError('unsynced local changes')\n    }\n    log()\n\n    // fetch ALL data\n    log('Fetching all data. This may take a while (same as initial login), please be patient...')\n    const { schema } = db\n    const allUserData = await pullChanges({\n      lastPulledAt: null,\n      schemaVersion: schema.version,\n      migration: null,\n    })\n    log(`Fetched all ${changeSetCount(allUserData)} records`)\n\n    // Ensure that all data is consistent with current data - if so,\n    // an incremental sync will be empty\n    // NOTE: Fetching all data takes enough time that there's a great risk\n    // that many test will fail here. It would be easier to fetch all data\n    // first and then do a quick incremental sync, but that doesn't give us\n    // a guarantee of consistency\n    log(`Ensuring no new remote changes...`)\n    const lastPulledAt = await getLastPulledAt(db)\n    const recentChanges = await pullChanges({\n      lastPulledAt,\n      schemaVersion: schema.version,\n      migration: null,\n    })\n\n    const recentChangeCount = changeSetCount(recentChanges)\n    if (recentChangeCount > 0) {\n      log(\n        `❌ Sync consistency diagnostics failed because there were changes on the server between initial synchronization and now. Please try again.`,\n      )\n      log()\n      throw new InconsistentSyncError(\n        'there were changes on the server between initial synchronization and now',\n      )\n    }\n    log()\n\n    // Compare all the data\n    const collections = Object.keys(db.collections.map)\n    await forEachAsync(collections, async (table) => {\n      log(`## Consistency of \\`${table}\\``)\n      log()\n      await yieldLog()\n\n      let tableCorruptionCount = 0\n\n      const records = await db.collections\n        // $FlowFixMe\n        .get(table)\n        .query()\n        .fetch()\n\n      // $FlowFixMe\n      const { created, updated, deleted } = allUserData[table]\n      if (deleted.length) {\n        log(\n          `❓ Warning: ${deleted.length} deleted ${table} found in full (login) sync -- should not be necessary:`,\n        )\n        log(deleted.join(','))\n      }\n\n      const remoteRecords = created.concat(updated)\n      log(`Found ${records.length} \\`${table}\\` locally, ${remoteRecords.length} remotely`)\n\n      // Transform records into hash maps for efficient lookup\n      const localMap = recordsToMap(records.map((r) => r._raw))\n\n      // $FlowFixMe\n      const tableSchema = schema.tables[table]\n      const remoteMap = recordsToMap(remoteRecords.map((r) => sanitizedRaw(r, tableSchema)))\n      await yieldLog()\n\n      const inconsistentRecords = []\n      const excessRecords = []\n      const missingRecords = []\n\n      await forEachAsync(Array.from(remoteMap.entries()), async ([id, remote]) => {\n        const local = localMap.get(id)\n        if (!local) {\n          if (await isMissingLocalRecordAllowed({ tableName: table, remote })) {\n            missingRecords.push(id)\n          } else {\n            log()\n            log(\n              `❌ MISSING: Record \\`${table}.${id}\\` is present on server, but missing in local db`,\n            )\n            log()\n            log('```')\n            log(`REMOTE: ${renderRecord(remote)}`)\n            log('```')\n            tableCorruptionCount += 1\n          }\n        }\n      })\n      await yieldLog()\n\n      const columnsToCheck: string[] = tableSchema.columnArray.map((column) => column.name)\n\n      await forEachAsync(Array.from(localMap.entries()), async ([id, record]) => {\n        const local: any = record\n        const remote = remoteMap.get(id)\n        // console.log(id, local, remote)\n        if (!remote) {\n          if (await isExcessLocalRecordAllowed({ tableName: table, local })) {\n            excessRecords.push(id)\n          } else {\n            log()\n            log(`❌ EXCESS: Record \\`${table}.${id}\\` is present in local db, but not on server`)\n            log()\n            log('```')\n            log(`LOCAL: ${renderRecord(local)}`)\n            log('```')\n            tableCorruptionCount += 1\n          }\n        } else {\n          const recordIsConsistent =\n            local.id === remote.id &&\n            local._status === 'synced' &&\n            local._changed === '' &&\n            columnsToCheck.every((column) => local[column] === remote[column])\n\n          if (!recordIsConsistent) {\n            const inconsistentColumns = columnsToCheck.filter(\n              (column) => local[column] !== remote[column],\n            )\n\n            if (\n              await isInconsistentRecordAllowed({\n                tableName: table,\n                local,\n                remote,\n                inconsistentColumns,\n              })\n            ) {\n              inconsistentRecords.push(id)\n            } else {\n              tableCorruptionCount += 1\n              log()\n              log(`❌ INCONSISTENCY: Record \\`${table}.${id}\\` differs between server and local db`)\n              log()\n              log('```')\n              log(`LOCAL: ${renderRecord(local)}`)\n              log(`REMOTE: ${renderRecord(remote)}`)\n              log(`DIFFERENCE:`)\n              inconsistentColumns.forEach((column) => {\n                log(\n                  `- ${column} | local: ${JSON.stringify(local[column])} | remote: ${JSON.stringify(\n                    remote[column],\n                  )}`,\n                )\n              })\n              log('```')\n            }\n          }\n        }\n      })\n\n      log()\n\n      if (inconsistentRecords.length) {\n        log(`❓ Config allowed ${inconsistentRecords.length} inconsistent \\`${table}\\``)\n        // log(inconsistentRecords.join(','))\n      }\n      if (excessRecords.length) {\n        log(`❓ Config allowed ${excessRecords.length} excess local \\`${table}\\``)\n        // log(excessRecords.join(','))\n      }\n      if (missingRecords.length) {\n        log(`❓ Config allowed ${missingRecords.length} locally missing \\`${table}\\``)\n        // log(missingRecords.join(','))\n      }\n\n      if (!tableCorruptionCount) {\n        log(`No corruption found in this table`)\n      }\n      totalCorruptionCount += tableCorruptionCount\n      log()\n      await yieldLog()\n    })\n\n    log('## Conclusion')\n    log()\n    if (totalCorruptionCount) {\n      log(`❌ ${totalCorruptionCount} issues found`)\n    } else {\n      log(`✅ No corruption found in this database!`)\n    }\n  })\n\n  return totalCorruptionCount\n}\n\nexport default async function diagnoseSyncConsistency(\n  options: DiagnoseSyncConsistencyOptions,\n): Promise<SyncConsistencyDiagnosis> {\n  const startTime = Date.now()\n  let logText = ''\n  const log = (text: string = '') => {\n    logText = `${logText}\\n${text}`\n    options.log?.(text)\n  }\n\n  // If we're not sure if we've synced properly (can't do it transactionally, we always have to check\n  // if there are new changes), retry\n  let allowedAttempts = 5\n  // eslint-disable-next-line no-constant-condition\n  while (true) {\n    allowedAttempts -= 1\n    try {\n      // eslint-disable-next-line no-await-in-loop\n      const issueCount = await diagnoseSyncConsistencyImpl(options, log)\n\n      log()\n      log(`Done in ${(Date.now() - startTime) / 1000} s.`)\n      return { issueCount, log: logText }\n    } catch (error) {\n      if (error instanceof InconsistentSyncError && allowedAttempts >= 1) {\n        continue // retry\n      } else {\n        throw error\n      }\n    }\n  }\n  // eslint-disable-next-line no-unreachable\n  throw new Error('unreachable')\n}\n"
  },
  {
    "path": "src/diagnostics/diagnoseSyncConsistency/index.js",
    "content": "// @flow\n\nimport type { Database, DirtyRaw } from '../..'\nimport { type SyncPullArgs, type SyncDatabaseChangeSet } from '../../sync'\n\nexport type DiagnoseSyncConsistencyOptions = $Exact<{\n  db: Database,\n\n  /**\n   * This function should perform standard synchronization in your app (i.e. bring local database up\n   * to date with server)\n   */\n  synchronize: () => Promise<void>,\n\n  /**\n   * This function should perform a pull sync with specified arguments (similar to `pullChanges` argument\n   * of `synchronize` function in your sync implementation), then return `changes` from the response\n   *\n   * This is used to fetch the first/full sync, to compare against local database\n   */\n  pullChanges: (SyncPullArgs) => Promise<SyncDatabaseChangeSet>,\n\n  /**\n   * Optionally pass function to log messages as diagnostics are performed instead of only a bulk\n   * report at the end\n   */\n  log?: (string) => void,\n\n  /**\n   * If inconsistent record is found, `isInconsistentRecordAllowed` is consulted to determine whether\n   * this inconsistency is allowed/expected (e.g. due to partial/selective syncing).\n   *\n   * @param local - local version of the record\n   * @param remote - server version of the record\n   * @param inconsistentColumns - list of column names where local and remote versions differ\n   */\n  isInconsistentRecordAllowed?: (\n    $Exact<{ tableName: string, local: DirtyRaw, remote: DirtyRaw, inconsistentColumns: string[] }>,\n  ) => Promise<boolean>,\n\n  /**\n   * If excess local record (i.e. not present in first sync) is found, `isExcessLocalRecordAllowed`\n   * is consulted to determine whether this excess record is allowed/expected (e.g. due to\n   * partial/selective syncing).\n   */\n  isExcessLocalRecordAllowed?: ($Exact<{ tableName: string, local: DirtyRaw }>) => Promise<boolean>,\n\n  /**\n   * If missing local record (i.e. present in first sync) is found, `isMissingLocalRecordAllowed`\n   * is consulted to determine whether this missing record is allowed/expected (e.g. due to\n   * partial/selective syncing).\n   */\n  isMissingLocalRecordAllowed?: (\n    $Exact<{ tableName: string, remote: DirtyRaw }>,\n  ) => Promise<boolean>,\n}>\nexport type SyncConsistencyDiagnosis = $Exact<{ issueCount: number, log: string }>\n\nexport default function diagnoseSyncConsistency(\n  options: DiagnoseSyncConsistencyOptions,\n): Promise<SyncConsistencyDiagnosis> {\n  return require('./impl').default(options)\n}\n"
  },
  {
    "path": "src/diagnostics/index.js",
    "content": "// @flow\n\nexport { default as censorRaw } from './censorRaw'\nexport { default as diagnoseDatabaseStructure } from './diagnoseDatabaseStructure'\nexport { default as diagnoseSyncConsistency } from './diagnoseSyncConsistency'\n"
  },
  {
    "path": "src/hooks/index.d.ts",
    "content": "export { default as useDatabase } from '../react/useDatabase'\n"
  },
  {
    "path": "src/hooks/index.js",
    "content": "// @flow\nexport { default as useDatabase } from '../react/useDatabase'\n"
  },
  {
    "path": "src/index.d.ts",
    "content": "import * as Q from './QueryDescription'\n\nexport { default as Collection } from './Collection'\nexport { default as Database } from './Database'\nexport { default as Relation } from './Relation'\nexport { default as Model, associations } from './Model'\nexport { default as Query } from './Query'\nexport { tableName, columnName, appSchema, tableSchema } from './Schema'\n\nexport type { default as CollectionMap } from './Database/CollectionMap'\n\nexport type { LocalStorageKey } from './Database/LocalStorage'\nexport { localStorageKey } from './Database/LocalStorage'\n\nexport type { DatabaseAdapter } from './adapters/type'\nexport type { RawRecord, DirtyRaw } from './RawRecord'\nexport type { RecordId } from './Model'\nexport type {\n  TableName,\n  ColumnName,\n  ColumnType,\n  ColumnSchema,\n  TableSchema,\n  AppSchema,\n} from './Schema'\nexport type { SchemaMigrations } from './Schema/migrations'\n\nexport { Q }\n"
  },
  {
    "path": "src/index.integrationTests.native.js",
    "content": "/* eslint-disable import/no-extraneous-dependencies */\n/* eslint-disable import/first */\n\nprocess.env.NODE_ENV = 'test'\nimport React from 'react'\nimport { AppRegistry, Text, View, NativeModules, Platform } from 'react-native'\n\n// Mysteriously fixes React Native stacktrace symbolication ¯\\_(ツ)_/¯\nif (typeof global.self === 'undefined') {\n  global.self = global\n}\n\n// NOTE: Set to `true` to run src/__playground__/index.js\n// WARN: DO NOT commit this change!\nconst openPlayground = false\n\nif (openPlayground) {\n  // eslint-disable-next-line react/function-component-definition\n  const PlaygroundPlaceholder = () => <Text style={{ paddingTop: 100 }}>Playground is running</Text>\n  AppRegistry.registerComponent('watermelonTest', () => PlaygroundPlaceholder)\n  require('./__playground__')\n} else {\n  // eslint-disable-next-line react/function-component-definition\n  const TestRoot = () => {\n    require('./__tests__/setUpIntegrationTestEnv')\n\n    const [status, setStatus] = React.useState('testing')\n\n    const Tester = require('cavy/src/Tester').default\n    const TestHookStore = require('cavy/src/TestHookStore').default\n    const integrationTests = require('./__tests__/integrationTests').default\n\n    const { current: testHookStore } = React.useRef(new TestHookStore())\n    const sendReport = (report) => {\n      // eslint-disable-next-line\n      console.log('Done:')\n      const { results, ...rest } = report\n      // eslint-disable-next-line\n      console.log(rest)\n      // eslint-disable-next-line\n      results.forEach((result) => console.log(result))\n      // FIXME: Add test runner on windows\n      if (Platform.OS !== 'windows') {\n        NativeModules.BridgeTestReporter.testsFinished(report)\n      }\n      setStatus(report.errorCount ? 'error' : 'done')\n    }\n\n    return (\n      <Tester\n        specs={integrationTests}\n        store={testHookStore}\n        // start delay allows initial render to occur while running JSI (blocking) tests\n        startDelay={500}\n        waitTime={4000}\n        sendReport={true}\n        customReporter={sendReport}\n      >\n        <View testID=\"WatermelonTesterContent\">\n          <Text style={{ paddingTop: 100 }}>Watermelon tester!</Text>\n          <Text>Using hermes? {global.HermesInternal ? 'YES' : 'NO'}</Text>\n          {status === 'testing' ? (\n            <Text testID=\"WatermelonTesterStatus\" style={{ fontSize: 30 }}>\n              The tests are running. Please remain calm.\n            </Text>\n          ) : null}\n          {status === 'done' ? (\n            <Text testID=\"WatermelonTesterStatus\" style={{ fontSize: 30, color: 'green' }}>\n              Done\n            </Text>\n          ) : null}\n          {status === 'error' ? (\n            <Text testID=\"WatermelonTesterStatus\" style={{ fontSize: 30, color: 'red' }}>\n              Error\n            </Text>\n          ) : null}\n        </View>\n      </Tester>\n    )\n  }\n\n  AppRegistry.registerComponent(\n    // FIXME: Should be consistent; find RNW API to change module name or rename RNW project\n    Platform.OS === 'windows' ? 'WatermelonTester' : 'watermelonTest',\n    () => TestRoot,\n  )\n}\n"
  },
  {
    "path": "src/index.js",
    "content": "// @flow\n\nimport * as Q from './QueryDescription'\n\nexport { default as Collection } from './Collection'\nexport { default as Database } from './Database'\nexport { default as Relation } from './Relation'\nexport { default as Model, associations } from './Model'\nexport { default as Query } from './Query'\nexport { tableName, columnName, appSchema, tableSchema } from './Schema'\n\nexport type { default as CollectionMap } from './Database/CollectionMap'\n\nexport type { LocalStorageKey } from './Database/LocalStorage'\nexport { localStorageKey } from './Database/LocalStorage'\n\nexport type { DatabaseAdapter } from './adapters/type'\nexport type { RawRecord, DirtyRaw } from './RawRecord'\nexport type { RecordId } from './Model'\nexport type {\n  TableName,\n  ColumnName,\n  ColumnType,\n  ColumnSchema,\n  TableSchema,\n  AppSchema,\n} from './Schema'\nexport type { SchemaMigrations } from './Schema/migrations'\n\nexport { Q }\n"
  },
  {
    "path": "src/observation/encodeMatcher/canEncode.js",
    "content": "// @flow\n\nimport type { QueryDescription } from '../../QueryDescription'\n\nexport const forbiddenError = `Queries with joins, sortBy, take, skip, lokiTransform can't be encoded into a matcher`\n\nexport default function canEncodeMatcher(query: QueryDescription): boolean {\n  const { joinTables, nestedJoinTables, sortBy, take, skip, lokiTransform, sql } = query\n\n  return (\n    !joinTables.length &&\n    !nestedJoinTables.length &&\n    !sortBy.length &&\n    !take &&\n    !skip &&\n    !lokiTransform &&\n    !sql\n  )\n}\n"
  },
  {
    "path": "src/observation/encodeMatcher/index.js",
    "content": "// @flow\n/* eslint-disable no-use-before-define */\n\nimport allPass from '../../utils/fp/allPass'\nimport anyPass from '../../utils/fp/anyPass'\n\nimport invariant from '../../utils/common/invariant'\n\nimport type { QueryDescription, WhereDescription, Where } from '../../QueryDescription'\nimport type { RawRecord } from '../../RawRecord'\nimport type Model from '../../Model'\n\nimport operators from './operators'\nimport canEncodeMatcher, { forbiddenError } from './canEncode'\n\n// eslint-disable-next-line no-unused-vars\nexport type Matcher<Element: Model> = (RawRecord) => boolean\n\nconst encodeWhereDescription: (WhereDescription) => Matcher<Model> =\n  (description) => (rawRecord) => {\n    const left = (rawRecord: Object)[description.left]\n    const { comparison } = description\n    const operator = operators[comparison.operator]\n\n    const compRight = comparison.right\n    let right\n\n    // TODO: What about `undefined`s ?\n    if (compRight.value !== undefined) {\n      right = compRight.value\n    } else if (compRight.values) {\n      right = compRight.values\n    } else if (compRight.column) {\n      right = (rawRecord: Object)[compRight.column]\n    } else {\n      throw new Error('Invalid comparisonRight')\n    }\n\n    return operator(left, right)\n  }\n\nconst encodeWhere: (Where) => Matcher<Model> = (where) => {\n  switch (where.type) {\n    case 'where':\n      return encodeWhereDescription(where)\n    case 'and':\n      return allPass(where.conditions.map(encodeWhere))\n    case 'or':\n      return anyPass(where.conditions.map(encodeWhere))\n    case 'on':\n      throw new Error(\n        'Illegal Q.on found -- nested Q.ons require explicit Q.experimentalJoinTables declaration',\n      )\n    default:\n      throw new Error(`Illegal clause ${where.type}`)\n  }\n}\n\nconst encodeConditions: (Array<Where>) => Matcher<Model> = (conditions) =>\n  allPass(conditions.map(encodeWhere))\n\nexport default function encodeMatcher<Element: Model>(query: QueryDescription): Matcher<Element> {\n  invariant(canEncodeMatcher(query), forbiddenError)\n\n  return (encodeConditions(query.where): any)\n}\n"
  },
  {
    "path": "src/observation/encodeMatcher/operators.js",
    "content": "// @flow\n/* eslint-disable eqeqeq */\n\nimport likeToRegexp from '../../utils/fp/likeToRegexp'\n\nimport type { Value, CompoundValue, Operator } from '../../QueryDescription'\n\ntype OperatorFunction = $FlowFixMe<(Value, CompoundValue) => boolean>\n\nconst between: OperatorFunction = (left, [lower, upper]) => left >= lower && left <= upper\n\nexport const rawFieldEquals: OperatorFunction = (left, right) => left == right\n\nconst rawFieldNotEquals: OperatorFunction = (left, right) => !(left == right)\n\nconst noNullComparisons: (OperatorFunction) => OperatorFunction = (operator) => (left, right) => {\n  // return false if any operand is null/undefined\n  if (left == null || right == null) {\n    return false\n  }\n\n  return operator(left, right)\n}\n\n// Same as `a > b`, but `5 > undefined` is also true\nconst weakGt = (left: any, right: any) => left > right || (left != null && right == null)\n\nconst handleLikeValue = (v: any, defaultV: string) => (typeof v === 'string' ? v : defaultV)\n\nexport const like: OperatorFunction = (left, right) => {\n  const leftV = handleLikeValue(left, '')\n\n  return likeToRegexp(right).test(leftV)\n}\n\nexport const notLike: OperatorFunction = (left, right) => {\n  // Mimic SQLite behaviour\n  if (left === null) {\n    return false\n  }\n  const leftV = handleLikeValue(left, '')\n\n  return !likeToRegexp(right).test(leftV)\n}\n\nconst oneOf: OperatorFunction = (value, values) => values.includes(value)\nconst notOneOf: OperatorFunction = (value, values) => !values.includes(value)\n\nconst gt = (a: any, b: any) => a > b\nconst gte = (a: any, b: any) => a >= b\nconst lt = (a: any, b: any) => a < b\nconst lte = (a: any, b: any) => a <= b\nconst includes = (a: any, b: any) => typeof a === 'string' && a.includes(b)\n\nconst operators: { [Operator]: OperatorFunction } = {\n  eq: rawFieldEquals,\n  notEq: rawFieldNotEquals,\n  gt: noNullComparisons(gt),\n  gte: noNullComparisons(gte),\n  weakGt,\n  lt: noNullComparisons(lt),\n  lte: noNullComparisons(lte),\n  oneOf,\n  notIn: noNullComparisons(notOneOf),\n  between,\n  like,\n  notLike,\n  includes,\n}\n\nexport default operators\n"
  },
  {
    "path": "src/observation/encodeMatcher/test.js",
    "content": "import Query from '../../Query'\nimport * as Q from '../../QueryDescription'\nimport encodeMatcher from './index'\nimport canEncodeMatcher from './canEncode'\n\nimport { matchTests, naughtyMatchTests } from '../../__tests__/databaseTests'\n\nconst mockModelClass = { table: 'tasks' }\nconst mockCollection = { modelClass: mockModelClass }\n\nconst makeDescription = (conditions) => new Query(mockCollection, conditions).description\nconst makeMatcher = (conditions) => encodeMatcher(makeDescription(conditions))\n\nconst expectTrue = (matcher, raw) => expect(matcher(raw)).toBe(true)\nconst expectFalse = (matcher, raw) => expect(matcher(raw)).toBe(false)\n\nconst unencodableQueries = [\n  [Q.on('projects', 'team_id', 'abcdef')],\n  [Q.experimentalJoinTables(['foo'])],\n  [Q.experimentalNestedJoin('foo', 'bar')],\n  [Q.sortBy('left_column', 'asc')],\n  [Q.take(100)],\n  [Q.take(100)],\n  [Q.unsafeLokiTransform(() => {})],\n  [Q.unsafeSqlQuery('select * from tasks')],\n]\n\ndescribe('SQLite encodeMatcher', () => {\n  matchTests.forEach((testCase) => {\n    it(`passes db test: ${testCase.name}`, () => {\n      if (testCase.skipMatcher) {\n        return\n      }\n      const matcher = makeMatcher(testCase.query)\n\n      testCase.matching.forEach((matchingRaw) => {\n        expectTrue(matcher, matchingRaw)\n      })\n\n      testCase.nonMatching.forEach((nonMatchingRaw) => {\n        expectFalse(matcher, nonMatchingRaw)\n      })\n    })\n  })\n  it('passes big-list-of-naughty-string matches', () => {\n    naughtyMatchTests.forEach((testCase) => {\n      // console.log(testCase.name)\n      const matcher = makeMatcher(testCase.query)\n\n      testCase.matching.forEach((matchingRaw) => {\n        expectTrue(matcher, matchingRaw)\n      })\n\n      testCase.nonMatching.forEach((nonMatchingRaw) => {\n        expectFalse(matcher, nonMatchingRaw)\n      })\n    })\n  })\n  it('throws on queries it cannot encode', () => {\n    unencodableQueries.forEach((query) => {\n      // console.log(query)\n      expect(() => makeMatcher(query)).toThrow(`can't be encoded into a matcher`)\n    })\n    expect(() => makeMatcher([Q.or(Q.on('projects', 'team_id', 'abcdef'))])).toThrow('Illegal Q.on')\n    expect(() => makeMatcher([Q.or(Q.unsafeSqlExpr(''))])).toThrow('Illegal')\n    expect(() => makeMatcher([Q.or(Q.unsafeLokiExpr({}))])).toThrow('Illegal')\n  })\n})\n\ndescribe('canEncodeMatcher', () => {\n  it(`can tell you if a query is encodable`, () => {\n    expect(canEncodeMatcher(makeDescription([Q.where('foo', 'bar')]))).toBe(true)\n    unencodableQueries.forEach((query) => {\n      expect(canEncodeMatcher(makeDescription(query))).toBe(false)\n    })\n  })\n})\n"
  },
  {
    "path": "src/observation/subscribeToCount/index.d.ts",
    "content": "/* eslint-disable import/no-named-as-default-member */\n/* eslint-disable import/no-named-as-default */\n\nimport type { Unsubscribe } from '../../utils/subscriptions'\n\nimport type Query from '../../Query'\nimport type Model from '../../Model'\n\nexport function experimentalDisableObserveCountThrottling(): void\n\n// Produces an observable version of a query count by re-querying the database\n// when any change occurs in any of the relevant Stores.\n//\n// TODO: Potential optimizations:\n// - increment/decrement counter using matchers on insert/delete\nexport default function subscribeToCount<Record extends Model>(\n  query: Query<Record>,\n  isThrottled: boolean,\n  subscriber: (_: number) => void,\n): Unsubscribe\n"
  },
  {
    "path": "src/observation/subscribeToCount/index.js",
    "content": "// @flow\n\nimport { Observable, switchMap, distinctUntilChanged, throttleTime } from '../../utils/rx'\nimport { logError } from '../../utils/common'\nimport { toPromise } from '../../utils/fp/Result'\nimport { type Unsubscribe } from '../../utils/subscriptions'\n\nimport type Query from '../../Query'\nimport type Model from '../../Model'\n\nlet isThrottlingDisabled = false\n\nexport function experimentalDisableObserveCountThrottling(): void {\n  isThrottlingDisabled = true\n}\n\n// Produces an observable version of a query count by re-querying the database\n// when any change occurs in any of the relevant Stores.\n//\n// TODO: Potential optimizations:\n// - increment/decrement counter using matchers on insert/delete\n\nfunction observeCountThrottled<Record: Model>(query: Query<Record>): Observable<number> {\n  const { collection } = query\n  return collection.database.withChangesForTables(query.allTables).pipe(\n    throttleTime(250), // Note: this has a bug, but we'll delete it anyway\n    switchMap(() => toPromise((callback) => collection._fetchCount(query, callback))),\n    distinctUntilChanged(),\n  )\n}\n\nexport default function subscribeToCount<Record: Model>(\n  query: Query<Record>,\n  isThrottled: boolean,\n  subscriber: (number) => void,\n): Unsubscribe {\n  if (isThrottled && !isThrottlingDisabled) {\n    const observable = observeCountThrottled(query)\n    const subscription = observable.subscribe(subscriber)\n    return () => subscription.unsubscribe()\n  }\n\n  const { collection } = query\n  let unsubscribed = false\n\n  let previousCount = -1\n  const observeCountFetch = () => {\n    collection._fetchCount(query, (result) => {\n      if (result.error) {\n        logError(result.error.toString())\n        return\n      }\n\n      const count = result.value\n      const shouldEmit = count !== previousCount && !unsubscribed\n      previousCount = count\n      shouldEmit && subscriber(count)\n    })\n  }\n\n  const unsubscribe = collection.database.experimentalSubscribe(\n    query.allTables,\n    observeCountFetch,\n    { name: 'subscribeToCount', query, subscriber },\n  )\n  observeCountFetch()\n\n  return () => {\n    unsubscribed = true\n    unsubscribe()\n  }\n}\n"
  },
  {
    "path": "src/observation/subscribeToCount/test.js",
    "content": "import { mockDatabase } from '../../__tests__/testModels'\nimport * as Q from '../../QueryDescription'\nimport subscribeToCount from './index'\n\nconst prepareTask = (tasks, isCompleted) =>\n  tasks.prepareCreate((mock) => {\n    mock.isCompleted = isCompleted\n  })\n\nconst createTask = async (tasks, isCompleted) => {\n  const task = prepareTask(tasks, isCompleted)\n  await tasks.database.batch(task)\n  return task\n}\n\nconst updateTask = (task, updater) => task.collection.database.write(() => task.update(updater))\n\ndescribe('subscribeToCount', () => {\n  it('observes changes to count', async () => {\n    const { db, tasks } = mockDatabase()\n\n    const query = tasks.query(Q.where('is_completed', true))\n\n    // start observing\n    const observer = jest.fn()\n    const unsubscribe = subscribeToCount(query, false, observer)\n\n    const waitForNextQuery = () => tasks.query().fetch()\n    await waitForNextQuery() // wait for initial query to go through\n\n    expect(observer).toHaveBeenCalledTimes(1)\n    expect(observer).toHaveBeenLastCalledWith(0)\n\n    // add matching model\n    const t1 = await db.write(() => createTask(tasks, true))\n\n    await waitForNextQuery()\n    expect(observer).toHaveBeenCalledTimes(2)\n    expect(observer).toHaveBeenLastCalledWith(1)\n\n    // add many\n    let t2\n    let t3\n    await db.write(() => {\n      t2 = prepareTask(tasks, true)\n      t3 = prepareTask(tasks, true)\n      return db.batch(t2, t3)\n    })\n\n    await waitForNextQuery()\n    expect(observer).toHaveBeenCalledTimes(3)\n    expect(observer).toHaveBeenLastCalledWith(3)\n\n    // irrelevant chagne\n    await updateTask(t2, () => {\n      t2.name = 'hello'\n    })\n\n    await waitForNextQuery()\n    expect(observer).toHaveBeenCalledTimes(3)\n\n    // remove some\n    await db.write(() => t2.destroyPermanently())\n\n    await waitForNextQuery()\n    expect(observer).toHaveBeenCalledTimes(4)\n    expect(observer).toHaveBeenLastCalledWith(2)\n\n    // change to no longer match\n    await updateTask(t1, () => {\n      t1.isCompleted = false\n    })\n\n    await waitForNextQuery()\n    expect(observer).toHaveBeenCalledTimes(5)\n    expect(observer).toHaveBeenLastCalledWith(1)\n\n    // ensure record subscriptions are disposed properly\n    unsubscribe()\n    await updateTask(t3, () => {\n      t3.isCompleted = false\n    })\n    expect(observer).toHaveBeenCalledTimes(5)\n  })\n})\n"
  },
  {
    "path": "src/observation/subscribeToQuery.d.ts",
    "content": "/* eslint-disable import/no-named-as-default-member */\n/* eslint-disable import/no-named-as-default */\nimport type { Unsubscribe } from '../utils/subscriptions'\n\nimport type Query from '../Query'\nimport type Model from '../Model'\n\nexport default function subscribeToQuery<Record extends Model>(\n  query: Query<Record>,\n  subscriber: (records: Record[]) => void,\n): Unsubscribe\n"
  },
  {
    "path": "src/observation/subscribeToQuery.js",
    "content": "// @flow\n\nimport { type Unsubscribe } from '../utils/subscriptions'\n\nimport type Query from '../Query'\nimport type Model from '../Model'\n\nimport subscribeToQueryReloading from './subscribeToQueryReloading'\nimport subscribeToSimpleQuery from './subscribeToSimpleQuery'\nimport canEncodeMatcher from './encodeMatcher/canEncode'\n\nexport default function subscribeToQuery<Record: Model>(\n  query: Query<Record>,\n  subscriber: (Record[]) => void,\n): Unsubscribe {\n  return canEncodeMatcher(query.description)\n    ? subscribeToSimpleQuery(query, subscriber)\n    : subscribeToQueryReloading(query, subscriber)\n}\n"
  },
  {
    "path": "src/observation/subscribeToQueryReloading/index.d.ts",
    "content": "/* eslint-disable import/no-named-as-default-member */\n/* eslint-disable import/no-named-as-default */\nimport type { Unsubscribe } from '../../utils/subscriptions'\n\nimport type Query from '../../Query'\nimport type Model from '../../Model'\n\n// Produces an observable version of a query by re-querying the database\n// when any change occurs in any of the relevant Stores.\n// This is inefficient for simple queries, but necessary for complex queries\nexport default function subscribeToQueryReloading<Record extends Model>(\n  query: Query<Record>,\n  subscriber: (records: Record[]) => void,\n  // Emits `false` when query fetch begins + always emits even if no change - internal trick needed\n  // by observeWithColumns\n  shouldEmitStatus?: boolean,\n): Unsubscribe\n"
  },
  {
    "path": "src/observation/subscribeToQueryReloading/index.js",
    "content": "// @flow\n\nimport { logError } from '../../utils/common'\nimport identicalArrays from '../../utils/fp/identicalArrays'\nimport { type Unsubscribe } from '../../utils/subscriptions'\n\nimport type Query from '../../Query'\nimport type Model from '../../Model'\n\n// Produces an observable version of a query by re-querying the database\n// when any change occurs in any of the relevant Stores.\n// This is inefficient for simple queries, but necessary for complex queries\n\nexport default function subscribeToQueryReloading<Record: Model>(\n  query: Query<Record>,\n  subscriber: (Record[]) => void,\n  // Emits `false` when query fetch begins + always emits even if no change - internal trick needed\n  // by observeWithColumns\n  shouldEmitStatus: boolean = false,\n): Unsubscribe {\n  const { collection } = query\n  let previousRecords: ?(Record[]) = null\n  let unsubscribed = false\n\n  function reloadingObserverFetch(): void {\n    if (shouldEmitStatus) {\n      !unsubscribed && subscriber((false: any))\n    }\n\n    collection._fetchQuery(query, (result) => {\n      if (result.error) {\n        logError(result.error.toString())\n        return\n      }\n\n      const records = result.value\n      const shouldEmit =\n        !unsubscribed &&\n        (shouldEmitStatus || !previousRecords || !identicalArrays(records, previousRecords))\n      previousRecords = records\n      shouldEmit && subscriber(records)\n    })\n  }\n\n  const unsubscribe = collection.database.experimentalSubscribe(\n    query.allTables,\n    reloadingObserverFetch,\n    { name: 'subscribeToQueryReloading observation', query, subscriber },\n  )\n  reloadingObserverFetch()\n\n  return () => {\n    unsubscribed = true\n    unsubscribe()\n  }\n}\n"
  },
  {
    "path": "src/observation/subscribeToQueryReloading/test.js",
    "content": "import { mockDatabase } from '../../__tests__/testModels'\nimport * as Q from '../../QueryDescription'\nimport subscribeToQueryReloading from './index'\n\nconst prepareTask = (tasks, name, isCompleted) =>\n  tasks.prepareCreate((mock) => {\n    mock.name = name\n    mock.isCompleted = isCompleted\n    mock.project.id = 'MOCK_PROJECT'\n  })\n\nconst createTask = async (tasks, name, isCompleted) => {\n  const task = prepareTask(tasks, name, isCompleted)\n  await tasks.database.batch(task)\n  return task\n}\n\nconst updateTask = (task, updater) => task.collection.database.write(() => task.update(updater))\n\ndescribe('subscribeToQueryReloading', () => {\n  it('observes changes to query', async () => {\n    const { db, tasks, projects } = mockDatabase()\n\n    const query = tasks.query(\n      Q.where('is_completed', true),\n      Q.on('mock_projects', Q.where('name', 'hello')),\n    )\n\n    // preparation - create mock project\n    let project\n    let m1\n    let m2\n    let m3\n    await db.write(() => {\n      project = projects.prepareCreateFromDirtyRaw({ id: 'MOCK_PROJECT', name: 'hello' })\n      m1 = prepareTask(tasks, 'name1', true)\n      m2 = prepareTask(tasks, 'name2', true)\n      m3 = prepareTask(tasks, 'name3', false)\n      return db.batch(project, m1, m2, m3)\n    })\n\n    // start observing\n    const observer = jest.fn()\n    const unsubscribe = subscribeToQueryReloading(query, observer)\n\n    const waitForNextQuery = () => tasks.query().fetch()\n    await waitForNextQuery() // wait for initial query to go through\n\n    expect(observer).toHaveBeenCalledTimes(1)\n    expect(observer).toHaveBeenLastCalledWith([m1, m2])\n\n    // add matching model\n    const m4 = await db.write(() => createTask(tasks, 'name4', true))\n    await waitForNextQuery()\n    expect(observer).toHaveBeenCalledTimes(2)\n    expect(observer).toHaveBeenLastCalledWith([m1, m2, m4])\n\n    // remove matching model\n    await db.write(() => m1.markAsDeleted())\n\n    await waitForNextQuery()\n    expect(observer).toHaveBeenCalledTimes(3)\n    expect(observer).toHaveBeenLastCalledWith([m2, m4])\n\n    // some irrelevant change (no emission)\n    await updateTask(m2, (task) => {\n      task.name = 'changed name'\n    })\n    await waitForNextQuery()\n    expect(observer).toHaveBeenCalledTimes(3)\n\n    // change model in other table\n    await db.write(() =>\n      project.update(() => {\n        project.name = 'other'\n      }),\n    )\n\n    await waitForNextQuery()\n    expect(observer).toHaveBeenCalledTimes(4)\n    expect(observer).toHaveBeenLastCalledWith([])\n\n    // ensure record subscriptions are disposed properly\n    unsubscribe()\n    await db.write(() =>\n      project.update(() => {\n        project.name = 'hello'\n      }),\n    )\n    expect(observer).toHaveBeenCalledTimes(4)\n  })\n  it('calls observer even if query is empty (regression test)', async () => {\n    const { tasks } = mockDatabase()\n\n    const observer = jest.fn()\n    const unsubscribe = subscribeToQueryReloading(tasks.query(), observer)\n\n    const waitForNextQuery = () => tasks.query().fetch()\n    await waitForNextQuery() // wait for initial query to go through\n\n    expect(observer).toHaveBeenCalledTimes(1)\n    expect(observer).toHaveBeenLastCalledWith([])\n    unsubscribe()\n  })\n})\n"
  },
  {
    "path": "src/observation/subscribeToQueryWithColumns/index.js",
    "content": "// @flow\n\nimport identicalArrays from '../../utils/fp/identicalArrays'\nimport { type Unsubscribe } from '../../utils/subscriptions'\n\nimport { type Value } from '../../QueryDescription'\nimport { type ColumnName } from '../../Schema'\nimport type Query from '../../Query'\nimport type { CollectionChangeSet } from '../../Collection'\n\nimport type Model, { RecordId } from '../../Model'\nimport subscribeToSimpleQuery from '../subscribeToSimpleQuery'\nimport subscribeToQueryReloading from '../subscribeToQueryReloading'\nimport canEncodeMatcher from '../encodeMatcher/canEncode'\n\ntype RecordState = Value[]\n\nconst getRecordState: (Model, ColumnName[]) => RecordState = (record, columnNames) => {\n  const state = []\n  const raw = record._raw\n  for (let i = 0, len = columnNames.length; i < len; i++) {\n    // $FlowFixMe\n    state.push(raw[columnNames[i]])\n  }\n  return state\n}\n\n// Invariant: same length and order of keys!\nconst recordStatesEqual: (left: RecordState, right: RecordState) => boolean = identicalArrays\n\n// Observes the given observable list of records, and in those records,\n// changes to given `rawFields`\n//\n// Emits a list of records when:\n// - source observable emits a new list\n// - any of the records in the list has any of the given fields changed\n//\n// TODO: Possible future optimizations:\n// - simpleObserver could emit added/removed events, and this could operate on those instead of\n//   re-deriving the same thing. For reloadingObserver, a Rx adapter could be fitted\n// - multiple levels of array copying could probably be omitted\n\nexport default function subscribeToQueryWithColumns<Record: Model>(\n  query: Query<Record>,\n  columnNames: ColumnName[],\n  subscriber: (Record[]) => void,\n): Unsubscribe {\n  // State kept for comparison between emissions\n  let unsubscribed = false\n  let sourceIsFetching = true // do not emit record-level changes while source is fetching new data\n  let hasPendingColumnChanges = false\n  let firstEmission = true\n  let observedRecords: Record[] = []\n  const recordStates = new Map<RecordId, RecordState>()\n\n  const emitCopy = (records: Array<Record>) => {\n    !unsubscribed && subscriber(records.slice(0))\n  }\n\n  // NOTE:\n  // Observing both the source subscription and changes to columns is very tricky\n  // if we want to avoid unnecessary emissions (we do, because that triggers wasted app renders).\n  // The compounding factor is that we have two methods of observation: simpleObserver which is\n  // synchronous, and reloadingObserver, which is asynchronous.\n  //\n  // For reloadingObserver, we use `reloadingObserverWithStatus` to be notified that an async DB query\n  // has begun. If it did, we will not emit column-only changes until query has come back.\n  //\n  // For simpleObserver, we need to configure it to always emit on collection changes. This is a\n  // workaround to solve a race condition - collection observation for column check will always\n  // emit first, but we don't know if the list of observed records isn't about to change, so we\n  // flag, and wait for source response.\n  //\n  // FIXME: The above explanation is outdated in practice because modern WatermelonDB uses synchronous\n  // adapters... However, JSI on Android isn't yet fully shipped (so this is currently broken), and\n  // we may get back to some asynchronicity where appropriate...\n\n  // prepare source observable\n  // TODO: On one hand it would be nice to bring in the source logic to this function to optimize\n  // on the other, it would be good to have source provided as Observable, not Query\n  // so that we can reuse cached responses -- but they don't have compatible format\n  const canUseSimpleObservation = canEncodeMatcher(query.description)\n  const subscribeToSource = canUseSimpleObservation\n    ? (observer: (recordsOrStatus: Array<Record>) => void) =>\n        subscribeToSimpleQuery(query, observer, true)\n    : (observer) => subscribeToQueryReloading(query, observer, true)\n  const asyncSource = !canUseSimpleObservation\n\n  // Observe changes to records we have on the list\n  const debugInfo = { name: 'subscribeToQueryWithColumns', query, columnNames }\n  const collectionUnsubscribe = query.collection.experimentalSubscribe(\n    // eslint-disable-next-line prefer-arrow-callback\n    function observeWithColumnsCollectionChanged(changeSet: CollectionChangeSet<Record>): void {\n      let hasColumnChanges = false\n      // Can't use `Array.some`, because then we'd skip saving record state for relevant records\n      changeSet.forEach(({ record, type }) => {\n        // See if change is relevant to our query\n        if (type !== 'updated') {\n          return\n        }\n\n        const previousState = recordStates.get(record.id)\n        if (!previousState) {\n          return\n        }\n\n        // Check if record changed one of its observed fields\n        const newState = getRecordState(record, columnNames)\n        if (!recordStatesEqual(previousState, newState)) {\n          recordStates.set(record.id, newState)\n          hasColumnChanges = true\n        }\n      })\n\n      if (hasColumnChanges) {\n        if (sourceIsFetching || !asyncSource) {\n          // Mark change; will emit on source emission to avoid duplicate emissions\n          hasPendingColumnChanges = true\n        } else {\n          emitCopy(observedRecords)\n        }\n      }\n    },\n    debugInfo,\n  )\n\n  // Observe the source records list (list of records matching a query)\n  // eslint-disable-next-line prefer-arrow-callback\n  const sourceUnsubscribe = subscribeToSource(function observeWithColumnsSourceChanged(\n    recordsOrStatus,\n  ): void {\n    // $FlowFixMe\n    if (recordsOrStatus === false) {\n      sourceIsFetching = true\n      return\n    }\n    sourceIsFetching = false\n\n    // Emit changes if one of observed columns changed OR list of matching records changed\n    const records: Record[] = recordsOrStatus\n    const shouldEmit =\n      firstEmission || hasPendingColumnChanges || !identicalArrays(records, observedRecords)\n\n    hasPendingColumnChanges = false\n    firstEmission = false\n\n    // Find changes, and save current list for comparison on next emission\n    const arrayDifference = require('../../utils/fp/arrayDifference').default\n    const { added, removed } = arrayDifference(observedRecords, records)\n    observedRecords = records\n\n    // Unsubscribe from records removed from list\n    removed.forEach((record) => {\n      recordStates.delete(record.id)\n    })\n\n    // Save current record state for later comparison\n    added.forEach((newRecord) => {\n      recordStates.set(newRecord.id, getRecordState(newRecord, columnNames))\n    })\n\n    // Emit\n    shouldEmit && emitCopy(records)\n  })\n\n  return () => {\n    unsubscribed = true\n    sourceUnsubscribe()\n    collectionUnsubscribe()\n  }\n}\n"
  },
  {
    "path": "src/observation/subscribeToQueryWithColumns/test.js",
    "content": "import { last } from 'rambdax'\nimport { mockDatabase } from '../../__tests__/testModels'\nimport * as Q from '../../QueryDescription'\nimport subscribeToQueryWithColumns from './index'\n\nconst prepareTask = (tasks, name, isCompleted, position) =>\n  tasks.prepareCreate((mock) => {\n    mock.name = name\n    mock.isCompleted = isCompleted\n    mock.position = position\n    mock.project.id = 'MOCK_PROJECT'\n  })\n\nconst createTask = async (tasks, name, isCompleted, position) => {\n  const task = prepareTask(tasks, name, isCompleted, position)\n  await tasks.database.batch(task)\n  return task\n}\n\nconst updateTask = (task, updater) => task.collection.database.write(() => task.update(updater))\n\ndescribe('subscribeToQueryWithColumns', () => {\n  async function fullObservationTest(mockDb, query, asyncSource) {\n    const { db, tasks, projects } = mockDb\n\n    // preparation - create mock project\n    await db.write(() => db.batch(projects.prepareCreateFromDirtyRaw({ id: 'MOCK_PROJECT' })))\n\n    // start observing\n    const observer = jest.fn()\n    const unsubscribe = subscribeToQueryWithColumns(query, ['position'], observer)\n\n    const waitForNextQuery = () => tasks.query().fetch()\n    await waitForNextQuery() // wait for initial query to go through\n\n    expect(observer).toHaveBeenCalledTimes(1)\n    expect(observer).toHaveBeenLastCalledWith([])\n\n    // make some models\n    let m1\n    let m2\n    let m3\n    await db.write(async () => {\n      m1 = prepareTask(tasks, 'name1', true, 10)\n      m2 = prepareTask(tasks, 'name2', true, 20)\n      m3 = prepareTask(tasks, 'name3', false, 30)\n      await db.batch(m1, prepareTask(tasks, 'name_irrelevant', false, 30), m2, m3)\n    })\n\n    asyncSource && (await waitForNextQuery())\n    expect(observer).toHaveBeenCalledTimes(2)\n    expect(observer).toHaveBeenLastCalledWith([m1, m2])\n\n    // add matching model\n    const m4 = await db.write(() => createTask(tasks, 'name4', true, 40))\n\n    asyncSource && (await waitForNextQuery())\n    expect(observer).toHaveBeenCalledTimes(3)\n    expect(observer).toHaveBeenLastCalledWith([m1, m2, m4])\n\n    // remove matching model\n    await db.write(() => m1.markAsDeleted())\n\n    asyncSource && (await waitForNextQuery())\n    expect(observer).toHaveBeenCalledTimes(4)\n    expect(observer).toHaveBeenLastCalledWith([m2, m4])\n\n    // some irrelevant change (no emission)\n    await updateTask(m2, (task) => {\n      task.name = 'changed name'\n    })\n    asyncSource && (await waitForNextQuery())\n    expect(observer).toHaveBeenCalledTimes(4)\n\n    // change model to start matching\n    await updateTask(m3, (task) => {\n      task.isCompleted = true\n    })\n\n    asyncSource && (await waitForNextQuery())\n    expect(observer).toHaveBeenCalledTimes(5)\n    expect(last(observer.mock.calls)[0]).toHaveLength(3)\n    expect(last(observer.mock.calls)[0]).toEqual(expect.arrayContaining([m2, m3, m4]))\n\n    // change model to no longer match\n    // make sure changed model isn't re-emitted before source query removes it\n    await updateTask(m2, (task) => {\n      task.isCompleted = false\n    })\n\n    asyncSource && (await waitForNextQuery())\n    expect(observer).toHaveBeenCalledTimes(6)\n    expect(last(observer.mock.calls)[0]).toHaveLength(2)\n    expect(last(observer.mock.calls)[0]).toEqual(expect.arrayContaining([m3, m4]))\n\n    // change a relevant field in previously-observed record (no emission)\n    await updateTask(m2, (task) => {\n      task.position = 10\n    })\n    asyncSource && (await waitForNextQuery())\n    expect(observer).toHaveBeenCalledTimes(6)\n\n    // make multiple simultaneous changes to observed records - expect only one emission\n    await db.write(() =>\n      db.batch(\n        m2.prepareUpdate(() => {\n          // not observed anymore - irrelevant\n          m2.position = 100\n        }),\n        m3.prepareUpdate(() => {\n          m3.position = 100\n        }),\n        m4.prepareUpdate(() => {\n          m4.position = 100\n        }),\n      ),\n    )\n\n    asyncSource && (await waitForNextQuery())\n    expect(observer).toHaveBeenCalledTimes(7)\n    expect(observer).toHaveBeenLastCalledWith(\n      ...observer.mock.calls[observer.mock.calls.length - 2],\n    )\n\n    // make an irrelevant change to recently changed record (no emission)\n    // Note: This is a regression check for a situation where task had a relevant change,\n    // but new record state was not cached, so another irrelevant change triggered an update\n    await updateTask(m4, (task) => {\n      task.name = 'different name'\n    })\n    asyncSource && (await waitForNextQuery())\n    expect(observer).toHaveBeenCalledTimes(7)\n\n    // make irrelevant changes to secondary table (async join query)\n    if (asyncSource) {\n      await db.write(() => db.batch(projects.prepareCreate(), projects.prepareCreate()))\n      await waitForNextQuery()\n      expect(observer).toHaveBeenCalledTimes(7)\n    }\n\n    // ensure record subscriptions are disposed properly\n    unsubscribe()\n    await updateTask(m3, (mock) => {\n      mock.position += 1\n    })\n    expect(observer).toHaveBeenCalledTimes(7)\n  }\n  it('observes changes correctly - test with simple observer', async () => {\n    const mockDb = mockDatabase()\n    const query = mockDb.tasks.query(Q.where('is_completed', true))\n    await fullObservationTest(mockDb, query, false)\n  })\n  it('observes changes correctly - test with reloading observer', async () => {\n    const mockDb = mockDatabase()\n    const query = mockDb.tasks.query(\n      Q.where('is_completed', true),\n      // fake query to force to use reloading observer\n      Q.on('mock_projects', Q.where('id', Q.notEq(null))),\n    )\n    await fullObservationTest(mockDb, query, true)\n  })\n})\n"
  },
  {
    "path": "src/observation/subscribeToSimpleQuery/index.js",
    "content": "// @flow\n\nimport { logError } from '../../utils/common'\nimport { type Unsubscribe } from '../../utils/subscriptions'\n\nimport type Query from '../../Query'\nimport type Model from '../../Model'\n\nimport type { Matcher } from '../encodeMatcher'\n\nexport default function subscribeToSimpleQuery<Record: Model>(\n  query: Query<Record>,\n  subscriber: (Record[]) => void,\n  // if true, emissions will always be made on collection change -- this is an internal hack needed by\n  // observeQueryWithColumns\n  alwaysEmit: boolean = false,\n): Unsubscribe {\n  let matcher: ?Matcher<Record> = null\n  let unsubscribed = false\n  let unsubscribe = null\n\n  // eslint-disable-next-line prefer-arrow-callback\n  query.collection._fetchQuery(query, function observeQueryInitialEmission(result): void {\n    if (unsubscribed) {\n      return\n    }\n\n    if (result.error) {\n      logError(result.error.toString())\n      return\n    }\n\n    const initialRecords = result.value\n\n    // Send initial matching records\n    const matchingRecords: Record[] = initialRecords\n    const emitCopy = () => !unsubscribed && subscriber(matchingRecords.slice(0))\n    emitCopy()\n\n    // Check if emitCopy haven't completed source observable to avoid memory leaks\n    if (unsubscribed) {\n      return\n    }\n\n    // Observe changes to the collection\n    const debugInfo = { name: 'subscribeToSimpleQuery', query, subscriber }\n    // eslint-disable-next-line prefer-arrow-callback\n    unsubscribe = query.collection.experimentalSubscribe(function observeQueryCollectionChanged(\n      changeSet,\n    ): void {\n      if (!matcher) {\n        matcher = require('../encodeMatcher').default(query.description)\n      }\n      // $FlowFixMe\n      const shouldEmit = require('./processChangeSet').default(changeSet, matcher, matchingRecords)\n      if (shouldEmit || alwaysEmit) {\n        emitCopy()\n      }\n    }, debugInfo)\n  })\n\n  return () => {\n    unsubscribed = true\n    unsubscribe && unsubscribe()\n  }\n}\n"
  },
  {
    "path": "src/observation/subscribeToSimpleQuery/processChangeSet.js",
    "content": "// @flow\n\nimport type { CollectionChangeSet } from '../../Collection'\nimport type Model from '../../Model'\nimport type { Matcher } from '../encodeMatcher'\n\n// WARN: Mutates arguments\nexport default function processChangeSet<Record: Model>(\n  changeSet: CollectionChangeSet<Record>,\n  matcher: Matcher<Record>,\n  mutableMatchingRecords: Record[],\n): boolean {\n  let shouldEmit = false\n  changeSet.forEach((change) => {\n    const { record, type } = change\n    const index = mutableMatchingRecords.indexOf(record)\n    const currentlyMatching = index > -1\n\n    if (type === 'destroyed') {\n      if (currentlyMatching) {\n        // Remove if record was deleted\n        mutableMatchingRecords.splice(index, 1)\n        shouldEmit = true\n      }\n      return\n    }\n\n    const matches = matcher(record._raw)\n\n    if (currentlyMatching && !matches) {\n      // Remove if doesn't match anymore\n      mutableMatchingRecords.splice(index, 1)\n      shouldEmit = true\n    } else if (matches && !currentlyMatching) {\n      // Add if should be included but isn't\n      mutableMatchingRecords.push(record)\n      shouldEmit = true\n    }\n  })\n  return shouldEmit\n}\n"
  },
  {
    "path": "src/observation/subscribeToSimpleQuery/test.js",
    "content": "import { mockDatabase } from '../../__tests__/testModels'\n\nimport Query from '../../Query'\nimport * as Q from '../../QueryDescription'\n\nimport subscribeToSimpleQuery from './index'\n\nconst makeMock = (db, name) =>\n  db.write(() =>\n    db.get('mock_tasks').create((mock) => {\n      mock.name = name\n    }),\n  )\n\ndescribe('subscribeToSimpleQuery', () => {\n  it('observes changes correctly', async () => {\n    const { db } = mockDatabase()\n\n    // insert a few models\n    const m1 = await makeMock(db, 'bad_name')\n    const m2 = await makeMock(db, 'foo')\n\n    // start observing\n    const query = new Query(db.collections.get('mock_tasks'), [Q.where('name', 'foo')])\n    const observer = jest.fn()\n    const unsubscribe = subscribeToSimpleQuery(query, observer)\n\n    // check initial matches\n    await new Promise(process.nextTick) // give time to propagate\n    expect(observer).toHaveBeenCalledWith([m2])\n\n    // make some irrelevant changes (no emission)\n    const m3 = await makeMock(db, 'irrelevant')\n    await db.write(async () => {\n      await m1.update((mock) => {\n        mock.name = 'still_bad_name'\n      })\n      await m1.destroyPermanently()\n    })\n\n    // add a matching record\n    const m4 = await makeMock(db, 'foo')\n    expect(observer).toHaveBeenCalledWith([m2, m4])\n\n    // change existing record to match\n    await db.write(() =>\n      m3.update((mock) => {\n        mock.name = 'foo'\n      }),\n    )\n    expect(observer).toHaveBeenCalledWith([m2, m4, m3])\n\n    // change existing record to no longer match\n    await db.write(() =>\n      m4.update((mock) => {\n        mock.name = 'nope'\n      }),\n    )\n    expect(observer).toHaveBeenCalledWith([m2, m3])\n\n    // change matching record in irrelevant ways (no emission)\n    await db.write(() => m3.update())\n\n    // remove matching record\n    await db.write(() => m2.destroyPermanently())\n    expect(observer).toHaveBeenCalledWith([m3])\n\n    // ensure no extra emissions\n    unsubscribe()\n    expect(observer).toHaveBeenCalledTimes(5)\n  })\n})\n"
  },
  {
    "path": "src/observation/test.js",
    "content": "import { mockDatabase } from '../__tests__/testModels'\nimport * as Q from '../QueryDescription'\n\nimport subscribeToQueryWithColumns from './subscribeToQueryWithColumns'\nimport subscribeToQuery from './subscribeToQuery'\n\nconst prepareTask = (tasks, name, isCompleted, position) =>\n  tasks.prepareCreate((mock) => {\n    mock.name = name\n    mock.isCompleted = isCompleted\n    mock.position = position\n    mock.project.id = 'MOCK_PROJECT'\n  })\n\nconst createTask = async (tasks, name, isCompleted, position) => {\n  const task = prepareTask(tasks, name, isCompleted, position)\n  await tasks.database.batch(task)\n  return task\n}\n\nconst updateTask = (task, updater) => task.collection.database.write(() => task.update(updater))\n\ndescribe('common observation tests', () => {\n  async function updatesListBeforeModelTest(mockDb, subscribe) {\n    // If we observe a list of records, and then for each of them we observe the record\n    // We must emit list changes first - otherwise, a change to a record that removes it from the list\n    // will re-render its component unnecessarily before the whole list is re-rendered to remove it\n    const { db, tasks, projects } = mockDb\n\n    // create a task\n    const task = await db.write(async () => {\n      await db.batch(projects.prepareCreateFromDirtyRaw({ id: 'MOCK_PROJECT' }))\n      return createTask(tasks, 'task', true, 30)\n    })\n\n    // start observing list\n    const events = []\n    const listObserver = jest.fn(() => events.push('list'))\n    const listUnsubscribe = subscribe(listObserver)\n    //\n\n    const waitForNextQuery = () => tasks.query().fetch()\n    await waitForNextQuery() // wait for initial query to go through\n    expect(listObserver).toHaveBeenLastCalledWith([task])\n    expect(events.join(',')).toBe('list')\n\n    // start observing task (two ways)\n    const taskObserver = jest.fn(() => events.push('task'))\n    const taskUnsubsribe = task.experimentalSubscribe(taskObserver)\n\n    const taskObserver2 = jest.fn(() => events.push('task2'))\n    const taskUnsubsribe2 = task.observe().subscribe(taskObserver2)\n    expect(events.join(',')).toBe('list,task2')\n\n    // make a change removing from list\n    await updateTask(task, () => {\n      task.isCompleted = false\n    })\n    await waitForNextQuery()\n\n    expect(listObserver).toHaveBeenLastCalledWith([])\n    expect(events.join(',')).toBe('list,task2,list,task2,task')\n\n    // clean up\n    listUnsubscribe()\n    taskUnsubsribe()\n    taskUnsubsribe2.unsubscribe()\n  }\n  const simpleQuery = Q.where('is_completed', true)\n  const complexQuery = [\n    Q.where('is_completed', true),\n    // fake query to force to use reloading observer\n    Q.on('mock_projects', Q.where('id', Q.notEq(null))),\n  ]\n  it(`updates list before model - test with subscribeToSimpleQuery`, async () => {\n    const mockDb = mockDatabase()\n    await updatesListBeforeModelTest(mockDb, (observer) =>\n      subscribeToQuery(mockDb.tasks.query(simpleQuery), observer),\n    )\n  })\n  it(`updates list before model - test with reloadingObserver`, async () => {\n    const mockDb = mockDatabase()\n    await updatesListBeforeModelTest(mockDb, (observer) =>\n      subscribeToQuery(mockDb.tasks.query(...complexQuery), observer),\n    )\n  })\n  it(`updates list before model - test with subscribeToQueryWithColumns and simple observer`, async () => {\n    const mockDb = mockDatabase()\n    await updatesListBeforeModelTest(mockDb, (observer) =>\n      subscribeToQueryWithColumns(mockDb.tasks.query(simpleQuery), ['position'], observer),\n    )\n  })\n  it(`updates list before model - test with subscribeToQueryWithColumns and reloading observer`, async () => {\n    const mockDb = mockDatabase()\n    await updatesListBeforeModelTest(mockDb, (observer) =>\n      subscribeToQueryWithColumns(mockDb.tasks.query(...complexQuery), ['position'], observer),\n    )\n  })\n})\n"
  },
  {
    "path": "src/react/DatabaseContext.d.ts",
    "content": "import { Provider as ReactProvider, Consumer as ReactConsumer, Context } from 'react'\nimport type Database from '../Database'\n\ntype DatabaseContext = Context<Database>\n\nexport type DatabaseConsumer = ReactConsumer<any>\nexport type Provider = ReactProvider<any>\n\nexport default DatabaseContext\n"
  },
  {
    "path": "src/react/DatabaseContext.js",
    "content": "// @flow\nimport React from 'react'\nimport type Database from '../Database'\n\nconst DatabaseContext: React$Context<Database> = React.createContext<Database>((undefined: any))\nconst { Provider, Consumer } = DatabaseContext\n\nexport { Consumer as DatabaseConsumer, Provider }\n\nexport default DatabaseContext\n"
  },
  {
    "path": "src/react/DatabaseProvider.d.ts",
    "content": "import { ReactNode } from 'react'\nimport Database from '../Database'\n\nexport type Props = {\n  database: Database\n  children: ReactNode\n}\n\n/**\n * Database provider to create the database context\n * to allow child components to consume the database without prop drilling\n */\ndeclare function DatabaseProvider({ children, database }: Props): JSX.Element\n\nexport { default as withDatabase } from './withDatabase'\nexport { default as DatabaseContext, DatabaseConsumer } from './DatabaseContext'\nexport default DatabaseProvider\n"
  },
  {
    "path": "src/react/DatabaseProvider.js",
    "content": "// @flow\nimport React from 'react'\nimport Database from '../Database'\nimport { Provider } from './DatabaseContext'\n\nexport type Props = {\n  database: Database,\n  children: React$Node,\n}\n\n/**\n * Database provider to create the database context\n * to allow child components to consume the database without prop drilling\n */\nfunction DatabaseProvider({ children, database }: Props): React$Element<typeof Provider> {\n  if (!(database instanceof Database)) {\n    throw new Error('You must supply a valid database prop to the DatabaseProvider')\n  }\n  return <Provider value={database}>{children}</Provider>\n}\n\nexport default DatabaseProvider\n"
  },
  {
    "path": "src/react/DatabaseProvider.test.js",
    "content": "import React from 'react'\nimport * as TestRenderer from 'react-test-renderer'\nimport Database from '../Database'\nimport { mockDatabase } from '../__tests__/testModels'\nimport DatabaseProvider from './DatabaseProvider'\nimport { DatabaseConsumer } from './DatabaseContext'\nimport withDatabase from './withDatabase'\n\n// Simple mock component\nfunction MockComponent() {\n  return <span />\n}\n\ndescribe('DatabaseProvider', () => {\n  let database\n  beforeAll(() => {\n    database = mockDatabase().db\n  })\n  it('throws if no database or adapter supplied', () => {\n    expect(() => {\n      TestRenderer.create(\n        <DatabaseProvider>\n          <p />\n        </DatabaseProvider>,\n      )\n    }).toThrow(/You must supply a valid database/i)\n    expect(() => {\n      TestRenderer.create(\n        <DatabaseProvider database={{ fake: 'db' }}>\n          <p />\n        </DatabaseProvider>,\n      )\n    }).toThrow(/You must supply a valid database/i)\n  })\n  it('passes database to consumer', () => {\n    const instance = TestRenderer.create(\n      <DatabaseProvider database={database}>\n        <DatabaseConsumer>{(db) => <MockComponent database={db} />}</DatabaseConsumer>\n      </DatabaseProvider>,\n    )\n    const component = instance.root.find(MockComponent)\n    expect(component.props.database).toBeInstanceOf(Database)\n  })\n\n  describe('withDatabase', () => {\n    test('should pass the database from the context to the consumer', () => {\n      const Child = withDatabase(MockComponent)\n      const instance = TestRenderer.create(\n        <DatabaseProvider database={database}>\n          <Child />\n        </DatabaseProvider>,\n      )\n      const component = instance.root.find(MockComponent)\n      expect(component.props.database).toBeInstanceOf(Database)\n    })\n  })\n})\n"
  },
  {
    "path": "src/react/WithObservablesComponent.js",
    "content": "// @flow\n\nimport { useRef } from 'react'\nimport type { Observable } from 'rxjs'\n\nimport identicalArrays from '../utils/fp/identicalArrays'\n\nimport withObservables, { type ExtractTypeFromObservable } from './withObservables'\nimport compose from './compose'\nimport withHooks from './withHooks'\nimport { type HOC } from './helpers'\n\ntype ExportProps<ObservableProps> = $Exact<{\n  resetOn: any[],\n  observables: ObservableProps,\n  children: ($ObjMap<ObservableProps, ExtractTypeFromObservable>) => React$Node,\n}>\n\ntype InitialProps = $Exact<{\n  resetOn: any[],\n  observables: { [string]: Observable<any> },\n  children: ({ [string]: any }) => React$Node,\n}>\n\nconst WithObservables = (props: InitialProps) => {\n  const { children } = props\n\n  return children(props)\n}\n\nconst enhance: HOC<any, InitialProps> = compose(\n  withHooks(({ resetOn, observables }) => {\n    const triggeringProps = useRef(resetOn)\n    if (!identicalArrays(triggeringProps.current, resetOn)) {\n      triggeringProps.current = resetOn\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      const keys = Object.keys(observables)\n      if (\n        keys.includes('resetOn') ||\n        keys.includes('observables') ||\n        keys.includes('children') ||\n        keys.includes('__triggeringProps')\n      ) {\n        throw new Error(`Do not use reserved keys in WithObservables's observables props`)\n      }\n    }\n\n    return {\n      __triggeringProps: triggeringProps.current,\n    }\n  }),\n  withObservables(['__triggeringProps'], ({ observables }) => (observables: any)),\n)\n\nexport default ((enhance(WithObservables): any): <T>(ExportProps<T>) => React$Node)\n"
  },
  {
    "path": "src/react/compose.d.ts",
    "content": "declare function compose<A>(): (arg0: A) => A\ndeclare function compose<A, B>(fn: (arg0: A) => B): (arg0: A) => B\ndeclare function compose<A, B, C>(fn0: (arg0: B) => C, fn1: (arg0: A) => B): (arg0: A) => C\ndeclare function compose<A, B, C, D>(\n  fn0: (arg0: C) => D,\n  fn1: (arg0: B) => C,\n  fn2: (arg0: A) => B,\n): (arg0: A) => D\ndeclare function compose<A, B, C, D, E>(\n  fn0: (arg0: D) => E,\n  fn1: (arg0: C) => D,\n  fn2: (arg0: B) => C,\n  fn3: (arg0: A) => B,\n): (arg0: A) => E\ndeclare function compose<A, B, C, D, E, F>(\n  fn0: (arg0: E) => F,\n  fn1: (arg0: D) => E,\n  fn2: (arg0: C) => D,\n  fn3: (arg0: B) => C,\n  fn4: (arg0: A) => B,\n): (arg0: A) => F\ndeclare function compose<A, B, C, D, E, F, G>(\n  fn0: (arg0: F) => G,\n  fn1: (arg0: E) => F,\n  fn2: (arg0: D) => E,\n  fn3: (arg0: C) => D,\n  fn4: (arg0: B) => C,\n  fn5: (arg0: A) => B,\n): (arg0: A) => G\ndeclare function compose<A, B, C, D, E, F, G, H>(\n  fn0: (arg0: G) => H,\n  fn1: (arg0: F) => G,\n  fn2: (arg0: E) => F,\n  fn3: (arg0: D) => E,\n  fn4: (arg0: C) => D,\n  fn5: (arg0: B) => C,\n  fn6: (arg0: A) => B,\n): (arg0: A) => H\ndeclare function compose<A, B, C, D, E, F, G, H, I>(\n  fn0: (arg0: H) => I,\n  fn1: (arg0: G) => H,\n  fn2: (arg0: F) => G,\n  fn3: (arg0: E) => F,\n  fn4: (arg0: D) => E,\n  fn5: (arg0: C) => D,\n  fn6: (arg0: B) => C,\n  fn7: (arg0: A) => B,\n): (arg0: A) => I\ndeclare function compose<A, B, C, D, E, F, G, H, I, J>(\n  fn0: (arg0: I) => J,\n  fn1: (arg0: H) => I,\n  fn2: (arg0: G) => H,\n  fn3: (arg0: F) => G,\n  fn4: (arg0: E) => F,\n  fn5: (arg0: D) => E,\n  fn6: (arg0: C) => D,\n  fn7: (arg0: B) => C,\n  fn8: (arg0: A) => B,\n): (arg0: A) => I\n\nexport default compose\n"
  },
  {
    "path": "src/react/compose.js",
    "content": "// @flow\n\nconst compose: any =\n  (...funcs) =>\n  (Component) => {\n    const enhance = funcs.reduce(\n      (a, b) =>\n        (...args) =>\n          a(b(...args)),\n      (arg) => arg,\n    )\n    const EnhancedComponent = enhance(Component)\n    EnhancedComponent.displayName = `${Component.name}.Enhanced`\n    return EnhancedComponent\n  }\n\nexport default (compose: $Compose)\n"
  },
  {
    "path": "src/react/helpers.js",
    "content": "// @flow\nimport { createElement } from 'react'\n\nexport type HOC<Base, Enhanced> = (React$ComponentType<Base>) => React$ComponentType<Enhanced>\n\nlet _createFactory: any = (Component) => {\n  // eslint-disable-next-line react/function-component-definition, react/display-name\n  return (props) => createElement(Component, props)\n}\n\n// undocumented binding for NT perf hack\nexport function _setCreateFactory(newCreateFactory: any): void {\n  _createFactory = newCreateFactory\n}\n\nexport function createFactory<ElementType: React$ElementType>(\n  Component: ElementType,\n): React$ElementFactory<ElementType> {\n  return _createFactory(Component)\n}\n"
  },
  {
    "path": "src/react/index.d.ts",
    "content": "export { default as DatabaseContext } from './DatabaseContext'\nexport { default as withDatabase } from './withDatabase'\nexport { default as DatabaseProvider } from './DatabaseProvider'\nexport { default as useDatabase } from './useDatabase'\n// export { default as withHooks } from './withHooks' // TODO: Add TS types\nexport { default as compose } from './compose'\nexport { default as withObservables, ExtractedObservables } from './withObservables'\n// export { default as WithObservables } from './WithObservablesComponent' // TODO: Add TS types\n"
  },
  {
    "path": "src/react/index.js",
    "content": "// @flow\n\nexport { default as DatabaseContext } from './DatabaseContext'\nexport { default as withDatabase } from './withDatabase'\nexport { default as DatabaseProvider } from './DatabaseProvider'\nexport { default as useDatabase } from './useDatabase'\nexport { default as compose } from './compose'\nexport { default as withHooks } from './withHooks'\nexport { default as withObservables } from './withObservables'\nexport { default as WithObservables } from './WithObservablesComponent'\n"
  },
  {
    "path": "src/react/useDatabase.d.ts",
    "content": "import type Database from '../Database'\n\nexport default function useDatabase(): Database\n"
  },
  {
    "path": "src/react/useDatabase.js",
    "content": "// @flow\nimport React from 'react'\nimport { DatabaseContext } from '../DatabaseProvider'\nimport invariant from '../utils/common/invariant'\n\nimport type Database from '../Database'\n\nexport default function useDatabase(): Database {\n  const database = React.useContext(DatabaseContext)\n\n  invariant(\n    database,\n    'Could not find database context, please make sure the component is wrapped in the <DatabaseProvider>',\n  )\n\n  return database\n}\n"
  },
  {
    "path": "src/react/useDatabase.test.js",
    "content": "import React from 'react'\nimport * as TestRenderer from 'react-test-renderer'\nimport { renderHook } from '@testing-library/react-hooks'\nimport useDatabase from './useDatabase'\nimport DatabaseProvider from './DatabaseProvider'\nimport Database from '../Database'\nimport { mockDatabase } from '../__tests__/testModels'\n\n// Note: this uses two testing libraries; react-test-renderer and @testing-library/react-hooks.\n// This is probably overkill for such a simple hook but I will leave these here in case more\n// hooks are added in the future.\n\ndescribe('useDatabase hook', () => {\n  let database\n  beforeAll(() => {\n    database = mockDatabase().db\n  })\n  test('should use database', () => {\n    const wrapper = ({ children }) => (\n      <DatabaseProvider database={database}>{children}</DatabaseProvider>\n    )\n    const { result } = renderHook(() => useDatabase(), { wrapper })\n    expect(result.current).toBeInstanceOf(Database)\n  })\n  test('should throw without Provider', () => {\n    const Component = () => {\n      useDatabase()\n    }\n    expect(() => {\n      TestRenderer.create(<Component />)\n    }).toThrow(\n      /Could not find database context, please make sure the component is wrapped in the <DatabaseProvider>/i,\n    )\n  })\n})\n"
  },
  {
    "path": "src/react/withDatabase.d.ts",
    "content": "import * as React from 'react'\nimport { NonReactStatics } from 'hoist-non-react-statics'\nimport type Database from '../Database'\n\ntype WithDatabaseProps<T> = T & {\n  database: Database\n}\n\ntype GetProps<C> = C extends React.ComponentType<infer P & { database?: Database }> ? P : never\n\n// HoC to inject the database into the props of consumers\nexport default function withDatabase<\n  C extends React.ComponentType<any>,\n  P = GetProps<C>,\n  R = Omit<P, 'database'>,\n>(Component: C): React.FunctionComponent<R> & NonReactStatics<C>\n"
  },
  {
    "path": "src/react/withDatabase.js",
    "content": "// @flow\nimport React from 'react'\nimport hoistNonReactStatics from 'hoist-non-react-statics'\nimport type Database from '../Database'\nimport { DatabaseConsumer } from './DatabaseContext'\n\ntype WithDatabaseProps<T: {}> = {\n  ...T,\n  database: Database,\n}\n// HoC to inject the database into the props of consumers\nexport default function withDatabase<T: {}>(\n  Component: React$ComponentType<WithDatabaseProps<T>>,\n): React$ComponentType<T> {\n  function DatabaseComponent(props: any): React$Element<any> {\n    return (\n      <DatabaseConsumer>\n        {(database: Database) => <Component {...props} database={database} />}\n      </DatabaseConsumer>\n    )\n  }\n\n  return hoistNonReactStatics(DatabaseComponent, Component)\n}\n"
  },
  {
    "path": "src/react/withHooks.js",
    "content": "// @flow\nimport { type HOC, createFactory } from './helpers'\n\ntype GetNewProps = <T: { ... }>(T) => T\ntype Props$Merge<A, B> = { ...$Exact<A>, ...$Exact<B> }\ntype EnhancedProps<PropsInput, NewProps> = Props$Merge<PropsInput, $Call<GetNewProps, NewProps>>\n\nexport default function withHooks<PropsInput: { ... }, NewProps: { ... }>(\n  hookTransformer: (props: PropsInput) => NewProps,\n): HOC<EnhancedProps<PropsInput, NewProps>, PropsInput> {\n  return (BaseComponent) => {\n    const factory = createFactory(BaseComponent)\n    const enhanced = function WithHooks(props: any): any {\n      const newProps = hookTransformer(props)\n      return factory({ ...props, ...newProps })\n    }\n    if (process.env.NODE_ENV !== 'production') {\n      const baseName = BaseComponent.displayName || BaseComponent.name || 'anon'\n      // $FlowFixMe\n      enhanced.displayName = `withHooks[${baseName}]`\n    }\n    return enhanced\n  }\n}\n"
  },
  {
    "path": "src/react/withObservables/garbageCollector.js",
    "content": "// @flow\n\nconst cleanUpBatchingInterval = 250 // ms\nconst cleanUpInterval = 2000 // ms\n\nlet pendingCleanupActions: Array<() => void> = []\nlet scheduledCleanUpScheduler: ?TimeoutID = null\n\nfunction cleanUpWithObservablesActions(actions: Array<() => void>): void {\n  actions.forEach((action) => action())\n}\n\nfunction scheduleCleanUp(): void {\n  scheduledCleanUpScheduler = null\n  const actions = pendingCleanupActions.slice(0)\n  pendingCleanupActions = []\n  setTimeout(() => {\n    cleanUpWithObservablesActions(actions)\n  }, cleanUpInterval)\n}\n\n// Apparently, setTimeout/clearTimeout functions are very expensive (22 microseconds/call)\n// But we must schedule a cleanup / garbage collection action\n// (https://github.com/facebook/react/issues/15317#issuecomment-491269433)\n// The workaround is this: all cleanup actions scheduled within a 250ms window will be scheduled\n// together (for 2500ms later).\n// This way, all actions within that window will only call setTimeout twice\nexport default function scheduleForCleanup(fn: () => void): void {\n  pendingCleanupActions.push(fn)\n\n  if (!scheduledCleanUpScheduler) {\n    scheduledCleanUpScheduler = setTimeout(scheduleCleanUp, cleanUpBatchingInterval)\n  }\n}\n"
  },
  {
    "path": "src/react/withObservables/index.d.ts",
    "content": "import { ComponentType, NamedExoticComponent } from 'react'\nimport { Observable } from 'rxjs'\nimport hoistNonReactStatics = require('hoist-non-react-statics')\n\ninterface ObservableConvertible<T> {\n  readonly observe: () => Observable<T>\n}\n\ntype ExtractObservableType<T> =\n  T extends Observable<infer U> ? U : T extends ObservableConvertible<infer U> ? U : T\n\nexport type ExtractedObservables<T> = {\n  [K in keyof T]: ExtractObservableType<T[K]>\n}\n\n/**\n * A property P will be present if:\n * - it is present in DecorationTargetProps\n *\n * Its value will be dependent on the following conditions\n * - if property P is present in InjectedProps and its definition extends the definition\n *   in DecorationTargetProps, then its definition will be that of DecorationTargetProps[P]\n * - if property P is not present in InjectedProps then its definition will be that of\n *   DecorationTargetProps[P]\n * - if property P is present in InjectedProps but does not extend the\n *   DecorationTargetProps[P] definition, its definition will be that of InjectedProps[P]\n */\ntype Matching<InjectedProps, DecorationTargetProps> = {\n  [P in keyof DecorationTargetProps]: P extends keyof InjectedProps\n    ? InjectedProps[P] extends DecorationTargetProps[P]\n      ? DecorationTargetProps[P]\n      : InjectedProps[P]\n    : DecorationTargetProps[P]\n}\n\n// Infers prop type from component C\ntype GetProps<C> = C extends ComponentType<infer P> ? P : never\n\n/**\n * a property P will be present if :\n * - it is present in both DecorationTargetProps and InjectedProps\n * - InjectedProps[P] can satisfy DecorationTargetProps[P]\n * ie: decorated component can accept more types than decorator is injecting\n *\n * For decoration, inject props or ownProps are all optionally\n * required by the decorated (right hand side) component.\n * But any property required by the decorated component must be satisfied by the injected property.\n */\ntype Shared<InjectedProps, DecorationTargetProps> = {\n  [P in Extract<\n    keyof InjectedProps,\n    keyof DecorationTargetProps\n  >]?: InjectedProps[P] extends DecorationTargetProps[P] ? DecorationTargetProps[P] : never\n}\n\n// Applies LibraryManagedAttributes (proper handling of defaultProps\n// and propTypes), as well as defines WrappedComponent.\ntype ConnectedComponent<C extends ComponentType<any>, P> = NamedExoticComponent<\n  JSX.LibraryManagedAttributes<C, P>\n> &\n  hoistNonReactStatics.NonReactStatics<C> & {\n    WrappedComponent: C\n  }\n\n// Injects props and removes them from the prop requirements.\n// Will not pass through the injected props if they are passed in during\n// render. Also adds new prop requirements from TNeedsProps.\ntype InferableComponentEnhancer<TInjectedProps, TNeedsProps> = <\n  C extends ComponentType<Matching<TInjectedProps, GetProps<C>>>,\n>(\n  component: C,\n) => ConnectedComponent<\n  C,\n  Omit<GetProps<C>, keyof Shared<TInjectedProps, GetProps<C>>> & TNeedsProps\n>\n\ntype Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>\ntype ObservableifyProps<T, O extends keyof T, C extends keyof T = never> = {\n  [K in keyof Pick<T, O>]: Observable<T[K]>\n} & {\n  [K in keyof Pick<T, C>]: ObservableConvertible<T[K]>\n} & Omit<T, O | C>\n\nexport default function withObservables<InputProps, ObservableProps>(\n  triggerProps: Array<keyof InputProps>,\n  getObservables: (props: InputProps) => ObservableProps,\n): InferableComponentEnhancer<ExtractedObservables<ObservableProps>, InputProps>\n"
  },
  {
    "path": "src/react/withObservables/index.js",
    "content": "// @flow\n/* eslint-disable react/no-direct-mutation-state */\n/* eslint-disable react/sort-comp */\n\nimport type { Observable } from 'rxjs'\nimport { Component, createElement } from 'react'\nimport hoistNonReactStatics from 'hoist-non-react-statics'\n\nimport scheduleForCleanup from './garbageCollector'\n\ntype UnaryFn<A, R> = (a: A) => R\ntype HOC<Base, Enhanced> = UnaryFn<React$ComponentType<Base>, React$ComponentType<Enhanced>>\n\nexport interface ObservableConvertible<T> {\n  observe(): Observable<T>;\n}\n\nexport type ExtractTypeFromObservable = <T>(value: Observable<T> | ObservableConvertible<T>) => T\n\ntype TriggerProps<A> = $Keys<A>[] | null\ntype GetObservables<A, B> = (props: A) => B\n\ntype WithObservables<Props, ObservableProps> = HOC<\n  { ...$Exact<Props>, ...$ObjMap<ObservableProps, ExtractTypeFromObservable> },\n  Props,\n>\n\ntype Unsubscribe = () => void\n\nfunction subscribe(\n  value: any,\n  onNext: (any) => void,\n  onError: (Error) => void,\n  onComplete: () => void,\n): Unsubscribe {\n  const wmelonTag = value && value.constructor && value.constructor._wmelonTag\n  if (wmelonTag === 'model') {\n    onNext(value)\n    return value.experimentalSubscribe((isDeleted) => {\n      if (isDeleted) {\n        onComplete()\n      } else {\n        onNext(value)\n      }\n    })\n  } else if (wmelonTag === 'query') {\n    return value.experimentalSubscribe(onNext)\n  } else if (typeof value.observe === 'function') {\n    const subscription = value.observe().subscribe(onNext, onError, onComplete)\n    return () => subscription.unsubscribe()\n  } else if (typeof value.subscribe === 'function') {\n    const subscription = value.subscribe(onNext, onError, onComplete)\n    return () => subscription.unsubscribe()\n  }\n\n  // eslint-disable-next-line no-console\n  console.error(\n    `[withObservable] Value passed to withObservables doesn't appear to be observable:`,\n    value,\n  )\n  throw new Error(\n    `[withObservable] Value passed to withObservables doesn't appear to be observable. See console for details`,\n  )\n}\n\nfunction identicalArrays<T, V: T[]>(left: V, right: V): boolean {\n  if (left.length !== right.length) {\n    return false\n  }\n\n  for (let i = 0, len = left.length; i < len; i += 1) {\n    if (left[i] !== right[i]) {\n      return false\n    }\n  }\n\n  return true\n}\n\nfunction getTriggeringProps<PropsInput: { ... }>(\n  props: PropsInput,\n  propNames: TriggerProps<PropsInput>,\n): any[] {\n  if (!propNames) {\n    return []\n  }\n\n  return propNames.map((name) => props[name])\n}\n\nconst hasOwn = (obj: Object, key: string): boolean => {\n  // $FlowFixMe\n  return Object.prototype.hasOwnProperty.call(obj, key)\n}\n\n// TODO: This is probably not going to be 100% safe to use under React async mode\n// Do more research\nclass WithObservablesComponent<AddedValues: any, PropsInput: { ... }> extends Component<\n  *,\n  {\n    isFetching: boolean,\n    values: $FlowFixMe<AddedValues>,\n    error: ?Error,\n    triggeredFromProps: any[],\n  },\n> {\n  BaseComponent: React$ComponentType<Object>\n\n  triggerProps: TriggerProps<PropsInput>\n\n  getObservables: (PropsInput) => Observable<Object>\n\n  _unsubscribe: ?Unsubscribe = null\n\n  _prefetchTimeoutCanceled: boolean = false\n\n  _exitedConstructor = false\n\n  constructor(\n    props: PropsInput,\n    BaseComponent: React$ComponentType<Object>,\n    getObservables: GetObservables<PropsInput, Object>,\n    triggerProps: TriggerProps<PropsInput>,\n  ): void {\n    super(props)\n    this.BaseComponent = BaseComponent\n    this.triggerProps = triggerProps\n    this.getObservables = getObservables\n    this.state = {\n      isFetching: true,\n      values: {},\n      error: null,\n      triggeredFromProps: getTriggeringProps(props, triggerProps),\n    }\n\n    // The recommended React practice is to subscribe to async sources on `didMount`\n    // Unfortunately, that's slow, because we have an unnecessary empty render even if we\n    // can get first values before render.\n    //\n    // So we're subscribing in constructor, but that's dangerous. We have no guarantee that\n    // the component will actually be mounted (and therefore that `willUnmount` will be called\n    // to safely unsubscribe). So we're setting a safety timeout to avoid leaking memory.\n    // If component is not mounted before timeout, we'll unsubscribe just to be sure.\n    // (If component is mounted after all, just super slow, we'll subscribe again on didMount)\n    this.subscribeWithoutSettingState(this.props)\n\n    scheduleForCleanup(() => {\n      if (!this._prefetchTimeoutCanceled) {\n        // eslint-disable-next-line no-console\n        console.warn(`[withObservables] Unsubscribing from source. Leaky component!`)\n        this.unsubscribe()\n      }\n    })\n\n    this._exitedConstructor = true\n  }\n\n  componentDidMount(): void {\n    this.cancelPrefetchTimeout()\n\n    if (!this._unsubscribe) {\n      // eslint-disable-next-line no-console\n      console.warn(\n        `[withObservables] Component mounted but no subscription present. Slow component (timed out) or a bug! Re-subscribing...`,\n      )\n\n      const newTriggeringProps = getTriggeringProps(this.props, this.triggerProps)\n      this.subscribe(this.props, newTriggeringProps)\n    }\n  }\n\n  // eslint-disable-next-line\n  UNSAFE_componentWillReceiveProps(nextProps: PropsInput): void {\n    const { triggeredFromProps } = this.state\n    const newTriggeringProps = getTriggeringProps(nextProps, this.triggerProps)\n\n    if (!identicalArrays(triggeredFromProps, newTriggeringProps)) {\n      this.subscribe(nextProps, newTriggeringProps)\n    }\n  }\n\n  subscribe(props: PropsInput, triggeredFromProps: any[]): void {\n    this.setState({\n      isFetching: true,\n      values: {},\n      triggeredFromProps,\n    })\n\n    this.subscribeWithoutSettingState(props)\n  }\n\n  // NOTE: This is a hand-coded equivalent of Rx combineLatestObject\n  subscribeWithoutSettingState(props: PropsInput): void {\n    this.unsubscribe()\n\n    const observablesObject = this.getObservables(props)\n\n    let subscriptions: Unsubscribe[] = []\n    let isUnsubscribed = false\n    const unsubscribe = () => {\n      isUnsubscribed = true\n      subscriptions.forEach((_unsubscribe) => _unsubscribe())\n      subscriptions = []\n    }\n\n    const values: { [string]: any } = {}\n    let valueCount = 0\n\n    const keys = Object.keys(observablesObject)\n    const keyCount = keys.length\n    keys.forEach((key) => {\n      if (isUnsubscribed) {\n        return\n      }\n\n      // $FlowFixMe\n      const subscribable = observablesObject[key]\n      subscriptions.push(\n        subscribe(\n          // $FlowFixMe\n          subscribable,\n          (value) => {\n            // console.log(`new value for ${key}, all keys: ${keys}`)\n            // Check if we have values for all observables; if yes - we can render; otherwise - only set value\n            const isFirstEmission = !hasOwn(values, key)\n            if (isFirstEmission) {\n              valueCount += 1\n            }\n\n            values[key] = value\n\n            const hasAllValues = valueCount === keyCount\n            if (hasAllValues && !isUnsubscribed) {\n              // console.log('okay, all values')\n              this.withObservablesOnChange((values: any))\n            }\n          },\n          (error) => {\n            // Error in one observable should cause all observables to be unsubscribed from - the component is, in effect, broken now\n            unsubscribe()\n            this.withObservablesOnError(error)\n          },\n          () => {\n            // TODO: Should we do anything on completion?\n            // console.log(`completed for ${key}`)\n          },\n        ),\n      )\n    })\n\n    if (process.env.NODE_ENV !== 'production') {\n      const renderedTriggerProps = this.triggerProps ? this.triggerProps.join(',') : 'null'\n      const renderedKeys = keys.join(', ')\n      this.constructor.displayName = `withObservables[${renderedTriggerProps}] { ${renderedKeys} }`\n    }\n\n    this._unsubscribe = unsubscribe\n  }\n\n  // DO NOT rename (we want on call stack as debugging help)\n  withObservablesOnChange(values: AddedValues): void {\n    if (this._exitedConstructor) {\n      this.setState({\n        values,\n        isFetching: false,\n      })\n    } else {\n      // Source has called with first values synchronously while we're still in the\n      // constructor. Here, `this.setState` does not work and we must mutate this.state\n      // directly\n      this.state.values = values\n      this.state.isFetching = false\n    }\n  }\n\n  // DO NOT rename (we want on call stack as debugging help)\n  withObservablesOnError(error: Error): void {\n    // console.error(`[withObservables] Error in Rx composition`, error)\n    if (this._exitedConstructor) {\n      this.setState({\n        error,\n        isFetching: false,\n      })\n    } else {\n      this.state.error = error\n      this.state.isFetching = false\n    }\n  }\n\n  unsubscribe(): void {\n    this._unsubscribe && this._unsubscribe()\n    this.cancelPrefetchTimeout()\n  }\n\n  cancelPrefetchTimeout(): void {\n    this._prefetchTimeoutCanceled = true\n  }\n\n  shouldComponentUpdate(nextProps: $FlowFixMe, nextState: $FlowFixMe): boolean {\n    // If one of the triggering props change but we don't yet have first values from the new\n    // observable, *don't* render anything!\n    return !nextState.isFetching\n  }\n\n  componentWillUnmount(): void {\n    this.unsubscribe()\n  }\n\n  render(): * {\n    const { isFetching, values, error } = this.state\n\n    if (isFetching) {\n      return null\n    } else if (error) {\n      // rethrow error found in Rx composition as to unify withObservables errors with other React errors\n      // the responsibility for handling errors is on the user (by using an Error Boundary)\n      throw error\n    } else {\n      return createElement(this.BaseComponent, Object.assign({}, this.props, values))\n    }\n  }\n}\n\n/**\n *\n * Injects new props to a component with values from the passed Observables\n *\n * Every time one of the `triggerProps` changes, `getObservables()` is called\n * and the returned Observables are subscribed to.\n *\n * Every time one of the Observables emits a new value, the matching inner prop is updated.\n *\n * You can return multiple Observables in the function. You can also return arbitrary objects that have\n * an `observe()` function that returns an Observable.\n *\n * The inner component will not render until all supplied Observables return their first values.\n * If `triggerProps` change, renders will also be paused until the new Observables emit first values.\n *\n * If you only want to subscribe to Observables once (the Observables don't depend on outer props),\n * pass `null` to `triggerProps`.\n *\n * Errors are re-thrown in render(). Use React Error Boundary to catch them.\n *\n * Example use:\n * ```js\n *   withObservables(['task'], ({ task }) => ({\n *     task: task,\n *     comments: task.comments.observe()\n *   }))\n * ```\n */\nconst withObservables = <PropsInput: { ... }, ObservableProps: { ... }>(\n  triggerProps: TriggerProps<PropsInput>,\n  getObservables: GetObservables<PropsInput, ObservableProps>,\n): WithObservables<PropsInput, ObservableProps> => {\n  type AddedValues = Object\n\n  return (BaseComponent) => {\n    class ConcreteWithObservablesComponent extends WithObservablesComponent<\n      AddedValues,\n      PropsInput,\n    > {\n      constructor(props: PropsInput): void {\n        super(props, BaseComponent, getObservables, triggerProps)\n      }\n    }\n    if (process.env.NODE_ENV !== 'production') {\n      const renderedTriggerProps = triggerProps ? triggerProps.join(',') : 'null'\n      ConcreteWithObservablesComponent.displayName = `withObservables[${renderedTriggerProps}]`\n    }\n\n    return hoistNonReactStatics(ConcreteWithObservablesComponent, BaseComponent)\n  }\n}\n\nexport default withObservables\n"
  },
  {
    "path": "src/react/withObservables/withObservables.test.js",
    "content": "import * as React from 'react'\nimport withObservables from './index'\n\ndescribe('withObservables', () => {\n  it('should hoist non react statics', () => {\n    class A extends React.PureComponent {\n      static nonReactProp = 'temp_string'\n      render() {\n        return null\n      }\n    }\n    const getObservables = () => {}\n    const WrappedComponent = withObservables([], getObservables)(A)\n    expect(WrappedComponent.nonReactProp).toBe(A.nonReactProp)\n  })\n})\n"
  },
  {
    "path": "src/sync/SyncLogger/index.d.ts",
    "content": "import type { SyncLog } from '../index'\n\nexport default class SyncLogger {\n  _limit: number\n\n  _logs: SyncLog[]\n\n  constructor(limit: number)\n\n  newLog(): SyncLog\n\n  get logs(): SyncLog[]\n\n  get formattedLogs(): string\n}\n"
  },
  {
    "path": "src/sync/SyncLogger/index.js",
    "content": "// @flow\n\nimport { mapObj } from '../../utils/fp'\nimport type { SyncLog } from '../index'\nimport censorRaw from '../../diagnostics/censorRaw'\n\nconst censorLog = (log: SyncLog): SyncLog => ({\n  ...log,\n  // $FlowFixMe\n  ...(log.resolvedConflicts\n    ? {\n        // $FlowFixMe\n        resolvedConflicts: log.resolvedConflicts.map((conflict) => mapObj(censorRaw)(conflict)),\n      }\n    : {}),\n})\nconst censorLogs = (logs: Array<SyncLog>) => logs.map(censorLog)\n\nexport default class SyncLogger {\n  _limit: number\n\n  _logs: SyncLog[] = []\n\n  constructor(limit: number = 10): void {\n    this._limit = limit\n  }\n\n  newLog(): SyncLog {\n    if (this._logs.length >= this._limit) {\n      this._logs.shift()\n    }\n    const log: SyncLog = {}\n    this._logs.push(log)\n    return log\n  }\n\n  get logs(): SyncLog[] {\n    // censor logs before viewing them\n    return censorLogs(this._logs)\n  }\n\n  get formattedLogs(): string {\n    return JSON.stringify(this.logs, null, 2)\n  }\n}\n"
  },
  {
    "path": "src/sync/SyncLogger/test.js",
    "content": "import SyncLogger from './index'\n\ndescribe('SyncLogger', () => {\n  it('allows to make and read logs', () => {\n    const logger = new SyncLogger()\n    const log1 = logger.newLog()\n    log1.a = 'a'\n    log1.b = 'b'\n\n    const log2 = logger.newLog()\n    log2.c = 'c'\n\n    const expectedLogs = [{ a: 'a', b: 'b' }, { c: 'c' }]\n    expect(logger.logs).toEqual(expectedLogs)\n    expect(logger.logs).toEqual(expectedLogs)\n  })\n  it('censors logs properly', () => {\n    const logger = new SyncLogger()\n    const log1 = logger.newLog()\n    log1.startedAt = new Date()\n    log1.resolvedConflicts = [\n      {\n        local: { int: 10, id: 'id1', name: 'Hello' },\n        remote: { name: '', proj_id: 'proj' },\n        resolved: { name: 'LongName', some: null },\n      },\n      {\n        local: { name: 'Foo' },\n        remote: { name: '', name2: 'N' },\n      },\n    ]\n\n    const log2 = logger.newLog()\n    log2.resolvedConflicts = [\n      { local: { field: 'Censor' }, resolved: { field: 'Censor', id: 'id2', other_id: null } },\n    ]\n\n    expect(logger.logs).toEqual([\n      {\n        startedAt: log1.startedAt,\n        resolvedConflicts: [\n          {\n            local: { int: 10, id: 'id1', name: 'He***lo(5)' },\n            remote: { name: '***(0)', proj_id: 'proj' },\n            resolved: { name: 'Lo***me(8)', some: null },\n          },\n          {\n            local: { name: 'Fo***oo(3)' },\n            remote: { name: '***(0)', name2: 'N***N(1)' },\n          },\n        ],\n      },\n      {\n        resolvedConflicts: [\n          {\n            local: { field: 'Ce***or(6)' },\n            resolved: { field: 'Ce***or(6)', id: 'id2', other_id: null },\n          },\n        ],\n      },\n    ])\n  })\n  it(`returns formatted logs`, () => {\n    const logger = new SyncLogger()\n    const log1 = logger.newLog()\n    log1.a = 'a'\n    expect(logger.formattedLogs).toEqual(`[\\n  {\\n    \"a\": \"a\"\\n  }\\n]`)\n  })\n  it(`Respects the log limit`, () => {\n    const logger = new SyncLogger(2)\n    const log1 = logger.newLog()\n    const log2 = logger.newLog()\n    expect(logger.logs).toEqual([log1, log2])\n    const log3 = logger.newLog()\n    expect(logger.logs).toEqual([log2, log3])\n  })\n})\n"
  },
  {
    "path": "src/sync/debugPrintChanges/index.d.ts",
    "content": "export default function debugPrintChanges(changes: null, isPush: boolean): void\n"
  },
  {
    "path": "src/sync/debugPrintChanges/index.js",
    "content": "// @flow\n/* eslint-disable no-console */\n\nimport toPairs from '../../utils/fp/toPairs'\nimport isRN from '../../utils/common/isRN'\n\nif (process.env.NODE_ENV === 'production') {\n  throw new Error('debugPrintChanges() MUST NOT BE USED IN PRODUCTION!')\n}\n\nif (!isRN) {\n  console.log(\n    '%c debugPrintChanges() is enabled!',\n    `font-size: 40px; background: red; color: white; font-weight: bold`,\n  )\n}\nconsole.warn('WARNING: DO NOT commit import of @nozbe/watermelondb/sync/debugPrintChanges!')\n\nexport default function debugPrintChanges(changes: null, isPush: boolean): void {\n  if (process.env.NODE_ENV === 'production') {\n    return\n  }\n  const pushPullColor = isPush ? 'red' : 'blue'\n\n  if (isRN) {\n    console.log('========================================================================')\n    console.log('##                                                                    ##')\n    isPush &&\n      console.log('##                         PUSHING CHANGES                            ##')\n    !isPush &&\n      console.log('##                             PULLING                                ##')\n    console.log('##                                                                    ##')\n    console.log('========================================================================')\n  } else {\n    console.log(\n      `%c --- ${isPush ? 'PUSHING CHANGES' : 'PULLING'} --- `,\n      `font-size: 40px; background: #eee; color: ${pushPullColor}; font-weight: bold`,\n    )\n  }\n\n  toPairs(changes).forEach(([table, tableChanges]) => {\n    toPairs(tableChanges).forEach(([changeType, records]) => {\n      if (records.length) {\n        const typeToColor = {\n          created: '#22cc33',\n          updated: 'orange',\n          deleted: 'red',\n        }\n\n        if (isRN) {\n          console.log(`| ${isPush ? 'pushing!' : 'PULL'} | ${table} | ${changeType} |`)\n          console.log('________________________________________________________________________')\n        } else {\n          console.log(\n            `%c ${isPush ? 'pushing!' : 'PULL'} %c ${table} %c ${changeType} `,\n            `font-size: 20px; background: #eee; color: ${pushPullColor}; font-weight: bold`,\n            'font-size: 20px; background: black; color: white',\n            `font-size: 20px; background: ${typeToColor[changeType]}; color: white`,\n          )\n        }\n        console.table(records)\n      }\n    })\n  })\n\n  if (isRN) {\n    console.log('============================')\n    console.log('##                        ##')\n    console.log('##          DONE          ##')\n    console.log('##                        ##')\n    console.log('============================')\n  } else {\n    console.log(\n      '%c done ',\n      `font-size: 20px; background: #eee; color: ${pushPullColor}; font-weight: bold`,\n    )\n  }\n}\n"
  },
  {
    "path": "src/sync/helpers.d.ts",
    "content": "import type { ColumnName } from '..'\nimport type { RawRecord } from '../RawRecord'\n\nexport function addToRawSet(rawSet: string, value: string): string\n\nexport function setRawColumnChange(rawRecord: RawRecord, columnName: ColumnName): void\n"
  },
  {
    "path": "src/sync/helpers.js",
    "content": "// @flow\n\nimport type { ColumnName } from '..'\nimport type { RawRecord } from '../RawRecord'\n\nexport function addToRawSet(rawSet: string, value: string): string {\n  const array = rawSet ? rawSet.split(',') : []\n  const set = new Set(array)\n  set.add(value)\n  return Array.from(set).join(',')\n}\n\n// Mutates `rawRecord` to mark `columName` as modified for sync purposes\nexport function setRawColumnChange(rawRecord: RawRecord, columnName: ColumnName): void {\n  rawRecord._changed = addToRawSet(rawRecord._changed, columnName)\n  if (rawRecord._status !== 'created') {\n    rawRecord._status = 'updated'\n  }\n}\n"
  },
  {
    "path": "src/sync/helpers.test.js",
    "content": "import { addToRawSet, setRawColumnChange } from './helpers'\n\ndescribe('addToRawSet', () => {\n  it('transforms raw set', () => {\n    expect(addToRawSet('', 'foo')).toBe('foo')\n    expect(addToRawSet('foo', 'bar')).toBe('foo,bar')\n    expect(addToRawSet('foo,bar', 'baz')).toBe('foo,bar,baz')\n    expect(addToRawSet('foo,bar', 'foo')).toBe('foo,bar')\n    expect(addToRawSet('foo,bar', 'bar')).toBe('foo,bar')\n  })\n})\n\ndescribe('setRawColumnChange', () => {\n  it('adds to _changed if needed', () => {\n    const test = (input, column, output) => {\n      const raw = { ...input }\n      setRawColumnChange(raw, column)\n      expect(raw).toEqual(output)\n    }\n    test({ _status: 'synced', _changed: '' }, 'foo', { _status: 'updated', _changed: 'foo' })\n    test({ _status: 'created', _changed: '' }, 'foo', { _status: 'created', _changed: 'foo' })\n    test({ _status: 'updated', _changed: '' }, 'foo', { _status: 'updated', _changed: 'foo' })\n    test({ _status: 'updated', _changed: 'foo,bar' }, 'bar', {\n      _status: 'updated',\n      _changed: 'foo,bar',\n    })\n  })\n})\n"
  },
  {
    "path": "src/sync/impl/__tests__/applyRemote.test.js",
    "content": "import { omit } from 'rambdax'\nimport { expectToRejectWithMessage } from '../../../__tests__/utils'\nimport * as Q from '../../../QueryDescription'\nimport {\n  makeDatabase,\n  emptyLocalChanges,\n  emptyChangeSet,\n  allDeletedRecords,\n  countAll,\n  allIds,\n  expectSyncedAndMatches,\n  getRaw,\n  makeLocalChanges,\n  makeChangeSet,\n  expectDoesNotExist,\n  prepareCreateFromRaw,\n} from './helpers'\n\nimport { fetchLocalChanges, applyRemoteChanges } from '../index'\n\nconst testApplyRemoteChanges = (db, set, extraContext = {}) =>\n  db.write(() => applyRemoteChanges(makeChangeSet(set), { db, ...extraContext }))\n\ndescribe('applyRemoteChanges', () => {\n  it('does nothing if no remote changes', async () => {\n    const { database } = makeDatabase()\n\n    await makeLocalChanges(database)\n    const localChanges1 = await fetchLocalChanges(database)\n\n    await database.write(() => applyRemoteChanges(emptyChangeSet, { db: database }))\n\n    const localChanges2 = await fetchLocalChanges(database)\n    expect(localChanges1).toEqual(localChanges2)\n  })\n  // Note: We need to test all possible status combinations - xproduct of:\n  // remote: created/updated/deleted\n  // local: synced/created/updated/deleted/doesn't exist\n  // (15 cases)\n  it('can create, update, delete records', async () => {\n    const { database, projects, tasks, comments } = makeDatabase()\n\n    await makeLocalChanges(database)\n    await testApplyRemoteChanges(database, {\n      mock_projects: {\n        // create / doesn't exist - create\n        created: [{ id: 'new_project', name: 'remote' }],\n      },\n      mock_tasks: {\n        // update / synced - update (stay synced)\n        updated: [{ id: 'tSynced', name: 'remote' }],\n      },\n      mock_comments: {\n        // delete / synced - destroy\n        deleted: ['cSynced'],\n      },\n    })\n\n    await expectSyncedAndMatches(projects, 'new_project', { name: 'remote' })\n    await expectSyncedAndMatches(tasks, 'tSynced', { name: 'remote' })\n    await expectDoesNotExist(comments, 'cSynced')\n  })\n  it('can resolve update conflicts', async () => {\n    const { database, tasks, comments } = makeDatabase()\n\n    await makeLocalChanges(database)\n    await testApplyRemoteChanges(database, {\n      mock_tasks: {\n        updated: [\n          // update / updated - resolve and update (stay updated)\n          { id: 'tUpdated', name: 'remote', description: 'remote' },\n        ],\n      },\n      mock_comments: {\n        // update / deleted - ignore (will be synced anyway)\n        updated: [{ id: 'cDeleted', body: 'remote' }],\n      },\n    })\n\n    await expectSyncedAndMatches(tasks, 'tUpdated', {\n      _status: 'updated',\n      _changed: 'name,position',\n      name: 'local', // local change preserved\n      position: 100,\n      description: 'remote', // remote change\n      project_id: 'orig', // unchanged\n    })\n    await expectSyncedAndMatches(comments, 'cDeleted', { _status: 'deleted', body: '' })\n  })\n  it('can delete records in all edge cases', async () => {\n    const { database, projects } = makeDatabase()\n\n    await makeLocalChanges(database)\n    await testApplyRemoteChanges(database, {\n      mock_projects: {\n        deleted: [\n          'does_not_exist', // delete / doesn't exist - ignore\n          'pCreated', // delete / created - weird. destroy\n          'pUpdated', // delete / updated - destroy\n          'pDeleted', // delete / deleted - destroy\n        ],\n      },\n    })\n\n    await expectDoesNotExist(projects, 'does_not_exist')\n    await expectDoesNotExist(projects, 'pCreated')\n    await expectDoesNotExist(projects, 'pUpdated')\n    await expectDoesNotExist(projects, 'pDeleted')\n  })\n  it('can handle sync failure cases', async () => {\n    const { database, tasks } = makeDatabase()\n\n    await makeLocalChanges(database)\n    await testApplyRemoteChanges(database, {\n      mock_tasks: {\n        // these cases can occur when sync fails for some reason and the same records are fetched and reapplied:\n        created: [\n          // create / synced - resolve and update (stay synced)\n          { id: 'tSynced', name: 'remote' },\n          // create / updated - resolve and update (stay updated)\n          { id: 'tUpdated', name: 'remote', description: 'remote' },\n          // create / deleted - destroy and recreate? (or just un-delete?)\n          { id: 'tDeleted', name: 'remote' },\n        ],\n      },\n    })\n\n    await expectSyncedAndMatches(tasks, 'tSynced', { name: 'remote' })\n    await expectSyncedAndMatches(tasks, 'tUpdated', {\n      _status: 'updated',\n      _changed: 'name,position',\n      name: 'local', // local change preserved\n      position: 100,\n      description: 'remote', // remote change\n      project_id: 'orig', // unchanged\n    })\n    await expectSyncedAndMatches(tasks, 'tDeleted', { name: 'remote' })\n  })\n  it('can handle weird edge cases', async () => {\n    const { database, projects, tasks } = makeDatabase()\n\n    await makeLocalChanges(database)\n    await testApplyRemoteChanges(database, {\n      mock_projects: {\n        created: [\n          // create / created - very weird case. resolve and update\n          // this and update/created could happen if app crashes after pushing\n          { id: 'pCreated1', name: 'remote' },\n        ],\n      },\n      mock_tasks: {\n        updated: [\n          // update / created - very weird. resolve and update\n          { id: 'tCreated', name: 'remote' },\n          // update / doesn't exist - create (stay synced)\n          { id: 'does_not_exist', name: 'remote' },\n        ],\n      },\n    })\n\n    expect(await getRaw(projects, 'pCreated1')).toMatchObject({\n      _status: 'created',\n      _changed: '',\n      name: 'remote',\n    })\n    expect(await getRaw(tasks, 'tCreated')).toMatchObject({\n      _status: 'created',\n      _changed: '',\n      name: 'remote',\n    })\n    await expectSyncedAndMatches(tasks, 'does_not_exist', { name: 'remote' })\n  })\n  describe('replacement sync', () => {\n    it(`can clear database using replacement strategy`, async () => {\n      const { database, projects, tasks, comments } = makeDatabase()\n\n      // create only synced/updated records\n      await database.write(async () => {\n        await database.batch(\n          prepareCreateFromRaw(projects, { id: 'p1', name: 'orig' }),\n          prepareCreateFromRaw(tasks, {\n            id: 't1',\n            _status: 'updated',\n            _updated: 'name',\n            name: 'local',\n          }),\n        )\n      })\n\n      expect(await countAll([projects, tasks, comments])).toBe(2)\n\n      await testApplyRemoteChanges(database, {}, { strategy: 'replacement' })\n      expect(await countAll([projects, tasks, comments])).toBe(0)\n      expect(await allDeletedRecords([projects, tasks, comments])).toEqual([])\n    })\n    it(`can clear database using replacement strategy (but locally created are preserved)`, async () => {\n      const { database, projects, tasks, comments } = makeDatabase()\n\n      await makeLocalChanges(database)\n      expect(await countAll([projects, tasks, comments])).toBe(10)\n\n      await testApplyRemoteChanges(database, {}, { strategy: 'replacement' })\n      expect(await countAll([projects, tasks, comments])).toBe(4)\n      expect(await allDeletedRecords([projects, tasks, comments])).toEqual([])\n    })\n    it(`can apply changes using replacement strategy`, async () => {\n      const { database, projects, tasks, comments } = makeDatabase()\n\n      await makeLocalChanges(database)\n      await testApplyRemoteChanges(\n        database,\n        {\n          mock_projects: {\n            created: [\n              // same as local\n              { id: 'pSynced' },\n              // created / created - resolve and update\n              { id: 'pCreated1' },\n              // newly created by remote\n              { id: 'new_project', name: 'remote' },\n            ],\n            updated: [\n              // updated / created - resolve and update\n              { id: 'pCreated2', name: 'remote' },\n              // updated / updated - resolve and update (actually no remote change)\n              { id: 'pUpdated', name: 'remote' },\n            ],\n          },\n          mock_tasks: {\n            created: [\n              // created / updated - resolve and update\n              { id: 'tUpdated', name: 'remote', description: 'remote' },\n            ],\n          },\n          mock_comments: {\n            deleted: [\n              // explicit deletions aren't disallowed when doing replacement strategy\n              // (but pointless unless you do replacement per-collection)\n              'cUpdated',\n              'cDeleted',\n              'cDestroyed',\n              'cDoesNotExist',\n              // exception: if record is created locally, it wouldn't be deleted if not in this list\n              // (weird edge that shouldn't happen, but it's not incorrect - if first replacement sync failed to mark\n              // records as synced after push, but were received by server and added to list of records to push-delete,\n              // then this could theoretically happen)\n              'cCreated',\n            ],\n          },\n        },\n        { strategy: 'replacement' },\n      )\n\n      await expectSyncedAndMatches(projects, 'pSynced', {})\n      expect(await getRaw(projects, 'pCreated1')).toMatchObject({\n        _status: 'created',\n        _changed: '',\n        name: '',\n      })\n      await expectSyncedAndMatches(projects, 'new_project', { name: 'remote' })\n      expect(await getRaw(projects, 'pCreated2')).toMatchObject({\n        _status: 'created',\n        _changed: '',\n        name: 'remote',\n      })\n      expect(await getRaw(projects, 'pUpdated')).toMatchObject({\n        _status: 'updated',\n        _changed: 'name',\n        name: 'local',\n      })\n      expect(await getRaw(tasks, 'tUpdated')).toMatchObject({\n        _status: 'updated',\n        _changed: 'name,position',\n        name: 'local',\n        position: 100,\n        description: 'remote',\n        project_id: 'orig',\n      })\n\n      // everything else is deleted\n      await expectDoesNotExist(comments, 'cSynced')\n      await expectDoesNotExist(comments, 'cUpdated')\n      const recordsInDataset = 6\n      const createdRecordsKept = 1 // tCreated. pCreated1/pCreated2 are in dataset, cCreated is explicitly deleted\n      expect(await countAll([projects, tasks, comments])).toBe(\n        recordsInDataset + createdRecordsKept,\n      )\n      expect(await allDeletedRecords([projects, tasks, comments])).toEqual([])\n    })\n    it(`can apply changes using replacement with per-table granularity`, async () => {\n      const { database, projects, tasks, comments } = makeDatabase()\n\n      await makeLocalChanges(database)\n      await testApplyRemoteChanges(\n        database,\n        {\n          mock_projects: {\n            updated: [\n              // same as local\n              { id: 'pSynced' },\n              // newly created by remote\n              { id: 'new_project', name: 'remote' },\n            ],\n          },\n          mock_tasks: {\n            created: [{ id: 'new_task' }],\n          },\n        },\n        {\n          strategy: {\n            default: 'incremental',\n            override: {\n              mock_projects: 'replacement',\n            },\n          },\n        },\n      )\n\n      // projects are replaced\n      expect(await countAll([projects])).toBe(2 + 2) // 2 in dataset, 2 created locally\n      expect(await allDeletedRecords([projects])).toEqual([])\n\n      // tasks, comments are incremental\n      expect(await countAll([tasks, comments])).toBe(4 + 3)\n      expect(await allDeletedRecords([tasks, comments])).toEqual(['tDeleted', 'cDeleted'])\n    })\n    it(`can apply changes using partial replacement`, async () => {\n      const { database, projects, tasks, comments } = makeDatabase()\n\n      await database.write(async () => {\n        const recs = [\n          // records in the \"needs replacement\" segment\n          prepareCreateFromRaw(tasks, { id: '1', project_id: 'deleted' }), // deleted remotely\n          prepareCreateFromRaw(tasks, { id: '2', project_id: 'deleted' }), // deleted remotely\n          prepareCreateFromRaw(tasks, { id: '2_del', project_id: 'deleted' }), // deleted remotely and locally\n          prepareCreateFromRaw(tasks, { id: '3', project_id: 'permsChanged' }), // unchanged\n          prepareCreateFromRaw(tasks, {\n            id: '3b',\n            _status: 'updated',\n            _changed: 'name',\n            project_id: 'permsChanged',\n            name: 'local',\n          }), // updated remotely\n          prepareCreateFromRaw(tasks, { id: '3_del', project_id: 'permsChanged' }), // locally deleted\n          prepareCreateFromRaw(tasks, { id: '4', project_id: 'permsChanged' }), // lost access (deleted)\n          prepareCreateFromRaw(tasks, { id: '5', _status: 'created', project_id: 'deleted' }),\n\n          // other records, that will be processed incrementally\n          prepareCreateFromRaw(tasks, { id: 'a', project_id: 'foo' }), // deleted remotely\n          prepareCreateFromRaw(tasks, { id: 'b', project_id: 'foo' }), // updated remotely\n          prepareCreateFromRaw(tasks, { id: 'c', project_id: 'bar' }), // unchanged\n          prepareCreateFromRaw(tasks, { id: 'c1', _status: 'updated', project_id: 'bar' }), // unchanged\n          prepareCreateFromRaw(tasks, { id: 'c_del' }), // locally deleted\n          prepareCreateFromRaw(tasks, { id: 'd', _status: 'created', project_id: 'baz' }), // created locally\n        ]\n        await database.batch(recs)\n        await recs.find((rec) => rec.id === '2_del').markAsDeleted()\n        await recs.find((rec) => rec.id === '3_del').markAsDeleted()\n        await recs.find((rec) => rec.id === 'c_del').markAsDeleted()\n        return recs\n      })\n\n      await testApplyRemoteChanges(\n        database,\n        {\n          mock_tasks: {\n            updated: [\n              // replacement segment\n              { id: '3', project_id: 'permsChanged' }, // unchanged\n              { id: '3b', project_id: 'permsChanged', name: 'orig' }, // unchanged (but updated locally)\n              { id: '3_del', project_id: 'permsChanged' }, // unchanged (but deleted locally)\n              { id: '6', project_id: 'permsChanged' }, // new\n              // incremental changes\n              { id: 'b', name: 'remote' },\n              { id: 'e' }, // new\n            ],\n            deleted: ['a'],\n          },\n        },\n        {\n          strategy: {\n            default: 'replacement',\n            override: {},\n            experimentalQueryRecordsForReplacement: {\n              mock_tasks: () => [Q.where('project_id', Q.oneOf(['deleted', 'permsChanged']))],\n            },\n          },\n        },\n      )\n\n      // check results\n      expect((await allIds([tasks])).sort()).toEqual(\n        [\n          // replacement\n          '3',\n          '3b',\n          '5',\n          '6',\n          // incremental\n          'b',\n          'c',\n          'c1',\n          'd',\n          'e',\n        ].sort(),\n      )\n      expect(await getRaw(tasks, 'b')).toMatchObject({ name: 'remote' })\n      expect(await getRaw(tasks, '3b')).toMatchObject({ _status: 'updated', name: 'local' })\n      expect(await allDeletedRecords([tasks])).toEqual([\n        'c_del', // kept (not in replacement segment)\n        // 2_del not kept (in replacement segment, but not in dataset)\n        '3_del', // kept (in dataset, needs to be pushed)\n      ])\n\n      expect(await countAll([projects, comments])).toBe(0)\n    })\n  })\n  describe('timestamp management', () => {\n    it(`doesn't touch created_at/updated_at when applying updates`, async () => {\n      const { database, comments } = makeDatabase()\n\n      await makeLocalChanges(database)\n      await testApplyRemoteChanges(database, {\n        mock_comments: {\n          updated: [{ id: 'cSynced', body: 'remote' }],\n        },\n      })\n\n      await expectSyncedAndMatches(comments, 'cSynced', {\n        created_at: 1000,\n        updated_at: 2000,\n        body: 'remote',\n      })\n    })\n    it('can replace created_at/updated_at during sync', async () => {\n      const { database, comments } = makeDatabase()\n\n      await makeLocalChanges(database)\n      await testApplyRemoteChanges(database, {\n        mock_comments: {\n          created: [{ id: 'cNew', created_at: 1, updated_at: 2 }],\n          updated: [{ id: 'cSynced', created_at: 10, updated_at: 20 }],\n        },\n      })\n\n      await expectSyncedAndMatches(comments, 'cNew', { created_at: 1, updated_at: 2, body: '' })\n      await expectSyncedAndMatches(comments, 'cSynced', {\n        created_at: 10,\n        updated_at: 20,\n        body: '',\n      })\n    })\n  })\n  it.skip(`doesn't destroy dependent objects`, async () => {\n    // TODO: Add this test when fast delete is implemented\n  })\n  it.skip('only emits one collection batch change', async () => {\n    // TODO: Implement and unskip test when batch change emissions are implemented\n  })\n  it('rejects invalid records', async () => {\n    const { database } = makeDatabase()\n\n    const expectChangeFails = (changes) =>\n      expectToRejectWithMessage(\n        testApplyRemoteChanges(database, { mock_projects: changes }),\n        /invalid raw record/i,\n      )\n\n    const expectCreateFails = (raw) => expectChangeFails({ created: [raw] })\n    const expectUpdateFails = (raw) => expectChangeFails({ updated: [raw] })\n\n    await expectCreateFails({ id: 'foo', _status: 'created' })\n    await expectCreateFails({ id: 'foo', _changed: 'bla' })\n    await expectCreateFails({ foo: 'bar' })\n\n    await expectUpdateFails({ id: 'foo', _status: 'created' })\n    await expectUpdateFails({ id: 'foo', _changed: 'bla' })\n    await expectUpdateFails({ foo: 'bar' })\n\n    expect(await fetchLocalChanges(database)).toEqual(emptyLocalChanges)\n  })\n  it(`safely skips collections that don't exist`, async () => {\n    const { database } = makeDatabase()\n\n    await testApplyRemoteChanges(database, { invalid_project: { created: [{ id: 'foo' }] } })\n    await testApplyRemoteChanges(database, { __proto__: { created: [{ id: 'foo' }] } }) // oof, naughty\n  })\n  it(`doesn't currupt RecordCache (regression test)`, async () => {\n    // eslint-disable-next-line\n    let { database, cloneDatabase } = makeDatabase()\n\n    const { tSynced } = await makeLocalChanges(database)\n\n    // simulate reload\n    database = await cloneDatabase()\n\n    // touch tSynced, but don't actually create its JS model\n    const previousRaw = omit(['_status', '_changed'], tSynced._raw)\n    await testApplyRemoteChanges(database, {\n      mock_tasks: {\n        updated: [{ id: 'tSynced', ...previousRaw }],\n      },\n    })\n\n    // Now actually fetch tSynced to trigger RecordCache corruption\n    //   Record ID mock_tasks#tSynced was sent over the bridge, but it's not cached\n    await database.get('mock_tasks').find('tSynced')\n  })\n})\n"
  },
  {
    "path": "src/sync/impl/__tests__/fetchLocal.test.js",
    "content": "import clone from 'lodash.clonedeep'\nimport { makeDatabase, emptyLocalChanges, makeLocalChanges, makeChangeSet } from './helpers'\n\nimport { fetchLocalChanges } from '../index'\nimport { hasUnsyncedChanges } from '../../index'\n\ndescribe('fetchLocalChanges', () => {\n  it('returns empty object if no changes', async () => {\n    const { database } = makeDatabase()\n    expect(await fetchLocalChanges(database)).toEqual(emptyLocalChanges)\n  })\n  it('fetches all local changes', async () => {\n    // eslint-disable-next-line\n    let { database, cloneDatabase } = makeDatabase()\n\n    const { pCreated1, pCreated2, pUpdated, tCreated, tUpdated, tDeleted, cCreated, cUpdated } =\n      await makeLocalChanges(database)\n\n    // check\n    expect(pCreated1._raw._status).toBe('created')\n    expect(pUpdated._raw._status).toBe('updated')\n    expect(pUpdated._raw._changed).toBe('name')\n\n    expect(tDeleted._raw._status).toBe('deleted')\n    const expectedChanges = clone(\n      makeChangeSet({\n        mock_projects: {\n          created: [pCreated2._raw, pCreated1._raw],\n          updated: [pUpdated._raw],\n          deleted: ['pDeleted'],\n        },\n        mock_tasks: { created: [tCreated._raw], updated: [tUpdated._raw], deleted: ['tDeleted'] },\n        mock_comments: {\n          created: [cCreated._raw],\n          updated: [cUpdated._raw],\n          deleted: ['cDeleted'],\n        },\n      }),\n    )\n    const expectedAffectedRecords = [\n      pCreated2,\n      pCreated1,\n      pUpdated,\n      tCreated,\n      tUpdated,\n      cCreated,\n      cUpdated,\n    ]\n    const result = await fetchLocalChanges(database)\n    expect(result.changes).toEqual(expectedChanges)\n    expect(result.affectedRecords).toEqual(expectedAffectedRecords)\n\n    // simulate reload\n    database = await cloneDatabase()\n    const result2 = await fetchLocalChanges(database)\n    expect(result2.changes).toEqual(expectedChanges)\n    expect(result2.affectedRecords.map((r) => r._raw)).toEqual(\n      expectedAffectedRecords.map((r) => r._raw),\n    )\n  })\n  it('returns object copies', async () => {\n    const { database } = makeDatabase()\n\n    const { pUpdated } = await makeLocalChanges(database)\n\n    const { changes } = await fetchLocalChanges(database)\n    const changesCloned = clone(changes)\n\n    // raws should be cloned - further changes don't affect result\n    await database.write(() =>\n      pUpdated.update((p) => {\n        p.name = 'y'\n      }),\n    )\n    expect(changes).toEqual(changesCloned)\n  })\n})\n\ndescribe('hasUnsyncedChanges', () => {\n  it('has no unsynced changes by default', async () => {\n    const { database } = makeDatabase()\n    expect(await hasUnsyncedChanges({ database })).toBe(false)\n  })\n  it('has unsynced changes if made', async () => {\n    const { database } = makeDatabase()\n    await makeLocalChanges(database)\n    expect(await hasUnsyncedChanges({ database })).toBe(true)\n  })\n  it('just one update is enough', async () => {\n    const { database } = makeDatabase()\n    const collection = database.get('mock_comments')\n    const record = await database.write(() =>\n      collection.create((rec) => {\n        rec._raw._status = 'synced'\n      }),\n    )\n\n    expect(await hasUnsyncedChanges({ database })).toBe(false)\n\n    await database.write(async () => {\n      await record.update(() => {\n        record.body = 'changed'\n      })\n    })\n\n    expect(await hasUnsyncedChanges({ database })).toBe(true)\n  })\n  it('just one delete is enough', async () => {\n    const { database } = makeDatabase()\n    const collection = database.get('mock_comments')\n    const record = await database.write(() =>\n      collection.create((rec) => {\n        rec._raw._status = 'synced'\n      }),\n    )\n\n    expect(await hasUnsyncedChanges({ database })).toBe(false)\n\n    await database.write(() => record.markAsDeleted())\n\n    expect(await hasUnsyncedChanges({ database })).toBe(true)\n  })\n})\n"
  },
  {
    "path": "src/sync/impl/__tests__/helpers.js",
    "content": "import { change } from 'rambdax'\nimport { allPromises } from '../../../utils/fp'\nimport { mockDatabase } from '../../../__tests__/testModels'\nimport { sanitizedRaw } from '../../../RawRecord'\n\nexport const makeDatabase = () => mockDatabase()\n\nexport const countAll = async (collections) => {\n  const counts = await allPromises((collection) => collection.query().fetchCount(), collections)\n  return counts.reduce((a, b) => a + b, 0)\n}\n\nexport const allIds = async (collections) => {\n  const ids = await allPromises(async (collection) => {\n    const records = await collection.query().fetch()\n    return records.map((record) => record.id)\n  }, collections)\n  return ids.flatMap((x) => x)\n}\n\nexport const allDeletedRecords = async (collections) => {\n  const deletedRecords = await allPromises(\n    (collection) => collection.database.adapter.getDeletedRecords(collection.table),\n    collections,\n  )\n  return deletedRecords.flatMap((records) => records)\n}\n\nexport const prepareCreateFromRaw = (collection, dirtyRaw) =>\n  collection.prepareCreate((record) => {\n    record._raw = sanitizedRaw({ _status: 'synced', ...dirtyRaw }, record.collection.schema)\n  })\n\nexport const getRaw = (collection, id) =>\n  collection.find(id).then(\n    (record) => record._raw,\n    () => null,\n  )\n\nexport const expectSyncedAndMatches = async (collection, id, match) =>\n  expect(await getRaw(collection, id)).toMatchObject({\n    _status: 'synced',\n    _changed: '',\n    id,\n    ...match,\n  })\nexport const expectDoesNotExist = async (collection, id) =>\n  expect(await getRaw(collection, id)).toBe(null)\n\nexport const emptyChangeSet = Object.freeze({\n  mock_projects: { created: [], updated: [], deleted: [] },\n  mock_project_sections: { created: [], updated: [], deleted: [] },\n  mock_tasks: { created: [], updated: [], deleted: [] },\n  mock_comments: { created: [], updated: [], deleted: [] },\n})\nexport const emptyLocalChanges = Object.freeze({ changes: emptyChangeSet, affectedRecords: [] })\n\nexport const makeChangeSet = (set) => change(emptyChangeSet, '', set)\n\nexport const sorted = (models) => {\n  const copy = models.slice()\n  copy.sort((a, b) => {\n    if (a.id < b.id) {\n      return -1\n    } else if (a.id > b.id) {\n      return 1\n    }\n    return 0\n  })\n  return copy\n}\n\nexport const makeLocalChanges = (database) =>\n  database.write(async () => {\n    const projects = database.get('mock_projects')\n    const tasks = database.get('mock_tasks')\n    const comments = database.get('mock_comments')\n\n    // create records\n    const created = (obj) => ({ _status: 'created', ...obj })\n    const timestamps = { created_at: 1000, updated_at: 2000 }\n\n    const records = {\n      pSynced: prepareCreateFromRaw(projects, { id: 'pSynced' }),\n      pCreated1: prepareCreateFromRaw(projects, created({ id: 'pCreated1' })),\n      pCreated2: prepareCreateFromRaw(projects, created({ id: 'pCreated2' })),\n      pUpdated: prepareCreateFromRaw(projects, { id: 'pUpdated' }),\n      pDeleted: prepareCreateFromRaw(projects, { id: 'pDeleted' }),\n      tSynced: prepareCreateFromRaw(tasks, { id: 'tSynced' }),\n      tCreated: prepareCreateFromRaw(tasks, created({ id: 'tCreated' })),\n      tUpdated: prepareCreateFromRaw(tasks, {\n        id: 'tUpdated',\n        name: 'orig',\n        description: 'orig',\n        project_id: 'orig',\n      }),\n      tDeleted: prepareCreateFromRaw(tasks, { id: 'tDeleted' }),\n      cSynced: prepareCreateFromRaw(comments, { id: 'cSynced', ...timestamps }),\n      cCreated: prepareCreateFromRaw(comments, created({ id: 'cCreated', ...timestamps })),\n      cUpdated: prepareCreateFromRaw(comments, { id: 'cUpdated', ...timestamps }),\n      cDeleted: prepareCreateFromRaw(comments, { id: 'cDeleted', ...timestamps }),\n      cDestroyed: prepareCreateFromRaw(comments, { id: 'cDestroyed' }),\n    }\n\n    await database.batch(...Object.values(records))\n\n    // update records\n    await records.pUpdated.update((p) => {\n      p.name = 'local'\n    })\n    await records.tUpdated.update((p) => {\n      p.name = 'local'\n      p.position = 100\n    })\n    await records.cUpdated.update((c) => {\n      c.body = 'local'\n    })\n    await records.tDeleted.update((t) => {\n      t.name = 'local'\n    })\n\n    // delete records\n    await records.pDeleted.markAsDeleted()\n    await records.tDeleted.markAsDeleted()\n    await records.cDeleted.markAsDeleted()\n    await records.cDestroyed.destroyPermanently() // sanity check\n\n    return records\n  })\n\nexport const emptyPull =\n  (timestamp = 1500) =>\n  async () => ({ changes: emptyChangeSet, timestamp })\n"
  },
  {
    "path": "src/sync/impl/__tests__/helpers.test.js",
    "content": "import { isChangeSetEmpty, requiresUpdate, resolveConflict } from '../helpers'\nimport { makeDatabase, emptyChangeSet, makeChangeSet, prepareCreateFromRaw } from './helpers'\n\ndescribe('resolveConflict', () => {\n  it('can resolve per-column conflicts', () => {\n    expect(\n      resolveConflict(\n        { col1: 'a', col2: true, col3: 10, _status: 'updated', _changed: 'col2' },\n        { col1: 'b', col2: false, col3: 10 },\n      ),\n    ).toEqual({ _status: 'updated', _changed: 'col2', col1: 'b', col2: true, col3: 10 })\n    expect(\n      resolveConflict(\n        { col1: 'a', col2: true, col3: 20, _status: 'updated', _changed: 'col2,col3' },\n        { col1: 'b', col2: false, col3: 10 },\n      ),\n    ).toEqual({ _status: 'updated', _changed: 'col2,col3', col1: 'b', col2: true, col3: 20 })\n  })\n  it('ignores missing remote columns', () => {\n    expect(\n      resolveConflict(\n        { col1: 'a', col2: true, col3: 20, _status: 'updated', _changed: 'col2' },\n        { col2: false },\n      ),\n    ).toEqual({ _status: 'updated', _changed: 'col2', col1: 'a', col2: true, col3: 20 })\n  })\n})\n\ndescribe('isChangeSetEmpty', () => {\n  it('empty changeset is empty', () => {\n    expect(isChangeSetEmpty(emptyChangeSet)).toBe(true)\n    expect(isChangeSetEmpty({})).toBe(true)\n  })\n  it('just one change is enough to dirty the changeset', () => {\n    expect(\n      isChangeSetEmpty(\n        makeChangeSet({\n          mock_projects: { created: [{ id: 'foo' }] },\n        }),\n      ),\n    ).toBe(false)\n    expect(\n      isChangeSetEmpty(\n        makeChangeSet({\n          mock_tasks: { updated: [{ id: 'foo' }] },\n        }),\n      ),\n    ).toBe(false)\n    expect(\n      isChangeSetEmpty(\n        makeChangeSet({\n          mock_comments: { deleted: ['foo'] },\n        }),\n      ),\n    ).toBe(false)\n  })\n})\n\ndescribe('requiresUpdate', () => {\n  it(`know how to skip unnecessary updates`, () => {\n    const { tasks } = makeDatabase()\n    const check = (local, remote) =>\n      requiresUpdate(tasks, prepareCreateFromRaw(tasks, local)._raw, remote)\n    expect(check({ id: 't1', name: 'foo' }, { id: 't1', name: 'foo' })).toBe(false)\n    expect(\n      check({ id: 't1', name: 'foo' }, { id: 't1', name: 'foo', description: null, position: 0 }),\n    ).toBe(false)\n\n    expect(check({ id: 't1', name: 'foo' }, { id: 't1' })).toBe(true)\n    expect(check({ id: 't1', name: 'foo' }, { id: 't2', name: 'foo' })).toBe(true)\n    expect(check({ id: 't1', name: 'foo' }, { id: 't1', name: 'bar' })).toBe(true)\n    expect(check({ _status: 'updated', id: 't1', name: 'foo' }, { id: 't1', name: 'foo' })).toBe(\n      true,\n    )\n  })\n})\n"
  },
  {
    "path": "src/sync/impl/__tests__/markAsSynced.test.js",
    "content": "import {\n  makeDatabase,\n  emptyLocalChanges,\n  emptyChangeSet,\n  allDeletedRecords,\n  expectSyncedAndMatches,\n  getRaw,\n  makeLocalChanges,\n  makeChangeSet,\n  sorted,\n} from './helpers'\n\nimport { fetchLocalChanges, markLocalChangesAsSynced } from '../index'\n\ndescribe('markLocalChangesAsSynced', () => {\n  it('does nothing for empty local changes', async () => {\n    const { database } = makeDatabase()\n\n    const destroyDeletedRecordsSpy = jest.spyOn(database.adapter, 'destroyDeletedRecords')\n\n    await makeLocalChanges(database)\n    const localChanges1 = await fetchLocalChanges(database)\n\n    await markLocalChangesAsSynced(database, { changes: emptyChangeSet, affectedRecords: [] })\n\n    const localChanges2 = await fetchLocalChanges(database)\n    expect(localChanges1).toEqual(localChanges2)\n\n    // Should NOT call `database.adapter.destroyDeletedRecords` if no records present\n    expect(destroyDeletedRecordsSpy).toHaveBeenCalledTimes(0)\n  })\n  it('marks local changes as synced', async () => {\n    const { database, projects, tasks, comments } = makeDatabase()\n\n    await makeLocalChanges(database)\n\n    const projectCount = await projects.query().fetchCount()\n    const taskCount = await tasks.query().fetchCount()\n\n    await markLocalChangesAsSynced(database, await fetchLocalChanges(database))\n\n    // no more changes\n    expect(await fetchLocalChanges(database)).toEqual(emptyLocalChanges)\n\n    // still just as many objects\n    const projectList = await projects.query().fetch()\n    const taskList = await tasks.query().fetch()\n    expect(projectList.length).toBe(projectCount)\n    expect(taskList.length).toBe(taskCount)\n\n    // all objects marked as synced\n    expect(projectList.every((record) => record.syncStatus === 'synced')).toBe(true)\n    expect(taskList.every((record) => record.syncStatus === 'synced')).toBe(true)\n\n    // no objects marked as deleted\n    expect(await allDeletedRecords([projects, tasks, comments])).toEqual([])\n  })\n  it(`doesn't modify updated_at timestamps`, async () => {\n    const { database, comments } = makeDatabase()\n\n    await makeLocalChanges(database)\n    const updatedAt = (await getRaw(comments, 'cUpdated')).updated_at\n    await markLocalChangesAsSynced(database, await fetchLocalChanges(database))\n\n    await expectSyncedAndMatches(comments, 'cCreated', { created_at: 1000, updated_at: 2000 })\n    await expectSyncedAndMatches(comments, 'cUpdated', { created_at: 1000, updated_at: updatedAt })\n    await expectSyncedAndMatches(comments, 'cSynced', { created_at: 1000, updated_at: 2000 })\n  })\n  it(`doesn't mark as synced records that changed since changes were fetched`, async () => {\n    const { database, projects, tasks } = makeDatabase()\n\n    const destroyDeletedRecordsSpy = jest.spyOn(database.adapter, 'destroyDeletedRecords')\n\n    const { pSynced, tSynced, tCreated, tUpdated, cSynced, cCreated, cUpdated, cDeleted } =\n      await makeLocalChanges(database)\n    const localChanges = await fetchLocalChanges(database)\n\n    // simulate user making changes the the app while sync push request is in progress\n    let newProject\n    await database.write(async () => {\n      // non-confliting changes: new record, update synced record, delete synced record\n      newProject = await projects.create()\n      await pSynced.update(() => {\n        pSynced.name = 'local2'\n      })\n      await tSynced.markAsDeleted()\n      await cSynced.destroyPermanently()\n\n      // conflicting changes: update updated/created, delete created/updated/deleted\n      await tCreated.update(() => {\n        tCreated.name = 'local2'\n      })\n      await tUpdated.update(() => {\n        tUpdated.name = 'local2' // change what was already changed\n        tUpdated.description = 'local2' // new change\n      })\n      await cCreated.markAsDeleted()\n      await cUpdated.markAsDeleted()\n      await cDeleted.destroyPermanently()\n    })\n    expect(destroyDeletedRecordsSpy).toHaveBeenCalledTimes(0)\n\n    // mark local changes as synced; check if new changes are still pending sync\n    await markLocalChangesAsSynced(database, localChanges)\n    expect(destroyDeletedRecordsSpy).toHaveBeenCalledTimes(3)\n    expect(destroyDeletedRecordsSpy).toHaveBeenCalledWith('mock_projects', ['pDeleted'])\n    expect(destroyDeletedRecordsSpy).toHaveBeenCalledWith('mock_tasks', ['tDeleted'])\n    expect(destroyDeletedRecordsSpy).toHaveBeenCalledWith('mock_comments', ['cDeleted'])\n    destroyDeletedRecordsSpy.mockClear()\n\n    const localChanges2 = await fetchLocalChanges(database)\n    expect(localChanges2.changes).toEqual(\n      makeChangeSet({\n        mock_projects: { created: [newProject._raw], updated: [pSynced._raw] },\n        mock_tasks: { created: [tCreated._raw], updated: [tUpdated._raw], deleted: ['tSynced'] },\n        mock_comments: { deleted: ['cUpdated', 'cCreated'] },\n      }),\n    )\n    expect(sorted(localChanges2.affectedRecords)).toEqual(\n      sorted([newProject, tCreated, pSynced, tUpdated]),\n    )\n    expect(destroyDeletedRecordsSpy).toHaveBeenCalledTimes(0)\n\n    await expectSyncedAndMatches(tasks, 'tUpdated', {\n      _status: 'updated',\n      // TODO: ideally position would probably not be here\n      _changed: 'name,position,description',\n      name: 'local2',\n      description: 'local2',\n      position: 100,\n    })\n\n    // test that second push will mark all as synced\n    await markLocalChangesAsSynced(database, localChanges2)\n    expect(destroyDeletedRecordsSpy).toHaveBeenCalledTimes(2)\n    expect(await fetchLocalChanges(database)).toEqual(emptyLocalChanges)\n\n    expect(destroyDeletedRecordsSpy).toHaveBeenCalledTimes(2)\n    expect(destroyDeletedRecordsSpy).toHaveBeenCalledWith('mock_tasks', ['tSynced'])\n    expect(destroyDeletedRecordsSpy).toHaveBeenCalledWith('mock_comments', ['cUpdated', 'cCreated'])\n  })\n  it(`doesn't mark as synced records in the rejectedIds object`, async () => {\n    const { database, comments } = makeDatabase()\n\n    const { pCreated1, pUpdated } = await makeLocalChanges(database)\n    const localChanges = await fetchLocalChanges(database)\n\n    // mark as synced\n    await markLocalChangesAsSynced(database, localChanges, {\n      mock_projects: ['pCreated1', 'pUpdated'],\n      mock_comments: ['cDeleted'],\n    })\n\n    // verify\n    const localChanges2 = await fetchLocalChanges(database)\n    expect(localChanges2.changes).toEqual(\n      makeChangeSet({\n        mock_projects: { created: [pCreated1._raw], updated: [pUpdated._raw] },\n        mock_comments: { deleted: ['cDeleted'] },\n      }),\n    )\n    expect(await allDeletedRecords([comments])).toEqual(['cDeleted'])\n  })\n  it(`can mark records as synced when ids are per-table not globally unique`, async () => {\n    const { database, projects, tasks, comments } = makeDatabase()\n\n    await makeLocalChanges(database)\n    await database.write(async () => {\n      await database.batch(\n        projects.prepareCreateFromDirtyRaw({ id: 'hello' }),\n        tasks.prepareCreateFromDirtyRaw({ id: 'hello' }),\n        comments.prepareCreateFromDirtyRaw({ id: 'hello' }),\n      )\n    })\n\n    await markLocalChangesAsSynced(database, await fetchLocalChanges(database))\n\n    // no more changes\n    expect(await fetchLocalChanges(database)).toEqual(emptyLocalChanges)\n  })\n  // TODO: Unskip the test when batch collection emissions are implemented\n  it.skip('only emits one collection batch change', async () => {\n    const { database, projects } = makeDatabase()\n\n    const { pCreated1 } = await makeLocalChanges(database)\n    const localChanges = await fetchLocalChanges(database)\n\n    const projectsObserver = jest.fn()\n    projects.changes.subscribe(projectsObserver)\n\n    await markLocalChangesAsSynced(database, localChanges)\n\n    expect(projectsObserver).toHaveBeenCalledTimes(1)\n    expect(projectsObserver).toHaveBeenCalledWith([\n      { type: 'created', record: pCreated1 },\n      // TODO: missing changes + changes in other collections\n    ])\n  })\n  it.skip(`doesn't send _status, _changed fields`, async () => {\n    // TODO: Future improvement\n  })\n  it.skip('only returns changed fields', async () => {\n    // TODO: Possible future improvement?\n  })\n})\n"
  },
  {
    "path": "src/sync/impl/__tests__/synchronize-abort.test.js",
    "content": "import { expectToRejectWithMessage } from '../../../__tests__/utils'\nimport { makeDatabase, makeLocalChanges, makeChangeSet, emptyPull } from './helpers'\n\nimport { synchronize } from '../../index'\nimport { getLastPulledAt } from '../index'\n\ndescribe('synchronize - aborts', () => {\n  it('aborts on concurrent synchronization', async () => {\n    const { database } = makeDatabase()\n\n    const delayPromise = (delay) =>\n      new Promise((resolve) => {\n        setTimeout(resolve, delay)\n      })\n    const syncWithDelay = (delay) =>\n      synchronize({\n        database,\n        pullChanges: () => delayPromise(delay).then(emptyPull(delay)),\n        pushChanges: jest.fn(),\n      })\n\n    const sync1 = syncWithDelay(100)\n    const sync2 = syncWithDelay(300).catch((error) => error)\n\n    expect(await sync1).toBe(undefined)\n    expect(await sync2).toMatchObject({ message: expect.stringMatching(/concurrent sync/i) })\n    expect(await getLastPulledAt(database)).toBe(100)\n  })\n  it('aborts if database is cleared during sync', async () => {\n    const { database, projects } = makeDatabase()\n    const pushChanges = jest.fn()\n    await expectToRejectWithMessage(\n      synchronize({\n        database,\n        pullChanges: jest.fn(async () => {\n          await database.write(() => database.unsafeResetDatabase())\n          return {\n            changes: makeChangeSet({\n              mock_projects: {\n                created: [{ id: 'new_project', name: 'remote' }],\n              },\n            }),\n            timestamp: 1500,\n          }\n        }),\n        pushChanges,\n      }),\n      'database was reset',\n    )\n    await expectToRejectWithMessage(projects.find('new_project'), 'not found')\n    expect(pushChanges).not.toHaveBeenCalled()\n  })\n  it('aborts if database is cleared during sync — different case', async () => {\n    const { database, projects } = makeDatabase()\n    await makeLocalChanges(database) // make changes so pushChanges is called\n    await expectToRejectWithMessage(\n      synchronize({\n        database,\n        pullChanges: () => ({\n          changes: makeChangeSet({\n            mock_projects: {\n              created: [{ id: 'new_project', name: 'remote' }],\n            },\n          }),\n          timestamp: 1500,\n        }),\n        pushChanges: () => database.write(() => database.unsafeResetDatabase()),\n      }),\n      'database was reset',\n    )\n    await expectToRejectWithMessage(projects.find('new_project'), 'not found')\n  })\n})\n"
  },
  {
    "path": "src/sync/impl/__tests__/synchronize-benchmark.test.js",
    "content": "import { times, map, length } from 'rambdax'\nimport { noop } from '../../../utils/fp'\nimport { randomId } from '../../../utils/common'\nimport {\n  makeDatabase,\n  emptyLocalChanges,\n  makeChangeSet,\n  prepareCreateFromRaw,\n  countAll,\n  getRaw,\n} from './helpers'\n\nimport { synchronize, hasUnsyncedChanges } from '../../index'\nimport { fetchLocalChanges } from '../index'\n\ndescribe('synchronize - benchmark', () => {\n  it('can synchronize lots of data', async () => {\n    const { database, projects, tasks, comments } = makeDatabase()\n\n    // TODO: This is kinda useless right now, but would make a great fuzz test or a benchmark\n\n    // local changes\n    const sample = 500\n    await database.write(async () => {\n      const createdProjects = times(() => projects.prepareCreate(noop), sample)\n      const updatedTasks = times(() => prepareCreateFromRaw(tasks, { id: randomId() }), sample)\n      const deletedComments = times(\n        () => prepareCreateFromRaw(comments, { id: randomId() }),\n        sample,\n      )\n      await database.batch(...createdProjects, ...updatedTasks, ...deletedComments)\n      await database.batch(\n        ...updatedTasks.map((task) =>\n          task.prepareUpdate(() => {\n            task.name = 'x'\n          }),\n        ),\n      )\n      await database.batch(...deletedComments.map((comment) => comment.prepareMarkAsDeleted()))\n    })\n\n    // remote changes\n    const pullChanges = jest.fn(async () => ({\n      changes: makeChangeSet({\n        mock_projects: {\n          deleted: times(() => randomId(), sample),\n        },\n        mock_tasks: {\n          created: times(() => ({ id: randomId() }), sample),\n        },\n      }),\n      timestamp: 1500,\n    }))\n    const pushChanges = jest.fn()\n\n    // check\n    // TODO: Remove the flag -- temporarily taking over this test to test _unsafeBatchPerCollection\n    await synchronize({ database, pullChanges, pushChanges, _unsafeBatchPerCollection: true })\n\n    expect(await projects.query().fetchCount()).toBe(sample) // local\n    expect(await tasks.query().fetchCount()).toBe(sample + sample) // local + remote\n    expect(await comments.query().fetchCount()).toBe(0) // all deleted\n\n    expect(await fetchLocalChanges(database)).toEqual(emptyLocalChanges)\n    expect(await hasUnsyncedChanges({ database })).toBe(false)\n    const pushedChanges = pushChanges.mock.calls[0][0].changes\n    const pushedCounts = map(map(length), pushedChanges)\n    expect(pushedCounts).toEqual({\n      mock_projects: { created: sample, updated: 0, deleted: 0 },\n      mock_project_sections: { created: 0, updated: 0, deleted: 0 },\n      mock_tasks: { created: 0, updated: sample, deleted: 0 },\n      mock_comments: { created: 0, updated: 0, deleted: sample },\n    })\n  })\n  it(`can run a large replacement sync`, async () => {\n    const { database, tasks } = makeDatabase()\n\n    const sample = 500\n    const unchanged = times(() => ({ id: randomId() }), sample)\n    const modified = times(() => ({ id: randomId() }), sample)\n    const deleted = times(() => ({ id: randomId() }), sample)\n\n    // create local changes\n    await database.write(async () => {\n      await database.batch(\n        ...unchanged.map((raw) => prepareCreateFromRaw(tasks, raw)),\n        ...modified.map((raw) =>\n          prepareCreateFromRaw(tasks, {\n            ...raw,\n            _status: 'updated',\n            _changed: 'name',\n            name: 'local',\n            description: 'orig',\n          }),\n        ),\n        ...deleted.map((raw) => prepareCreateFromRaw(tasks, raw)),\n      )\n    })\n    expect(await countAll([tasks])).toBe(3 * sample) // sanity check\n\n    // run replacement (with the same data, there should be no changes)\n    await synchronize({\n      database,\n      pullChanges: async () => ({\n        changes: makeChangeSet({\n          mock_tasks: {\n            updated: [\n              ...unchanged,\n              ...modified.map((raw) => ({ ...raw, name: 'remote', description: 'remote' })),\n            ],\n          },\n        }),\n        timestamp: 1500,\n        experimentalStrategy: 'replacement',\n      }),\n      pushChanges: jest.fn(),\n    })\n\n    // sanity checks\n    expect(await countAll([tasks])).toBe(2 * sample)\n    expect(await getRaw(tasks, modified[0].id)).toMatchObject({\n      _status: 'synced',\n      name: 'local',\n      description: 'remote',\n    })\n  })\n})\n"
  },
  {
    "path": "src/sync/impl/__tests__/synchronize-migration.test.js",
    "content": "import { mockDatabase, testSchema } from '../../../__tests__/testModels'\nimport { expectToRejectWithMessage } from '../../../__tests__/utils'\nimport { schemaMigrations, createTable, addColumns } from '../../../Schema/migrations'\nimport { emptyPull } from './helpers'\n\nimport { synchronize } from '../../index'\nimport { getLastPulledSchemaVersion, setLastPulledAt, setLastPulledSchemaVersion } from '../index'\n\ndescribe('synchronize - migration syncs', () => {\n  const testSchema10 = { ...testSchema, version: 10 }\n  const migrations = schemaMigrations({\n    migrations: [\n      {\n        toVersion: 10,\n        steps: [\n          addColumns({\n            table: 'attachment_versions',\n            columns: [{ name: 'reactions', type: 'string' }],\n          }),\n        ],\n      },\n      {\n        toVersion: 9,\n        steps: [\n          createTable({\n            name: 'attachments',\n            columns: [{ name: 'parent_id', type: 'string', isIndexed: true }],\n          }),\n        ],\n      },\n      { toVersion: 8, steps: [] },\n    ],\n  })\n  it(`remembers synced schema version on first sync`, async () => {\n    const { database } = mockDatabase({ schema: testSchema10, migrations })\n    const pullChanges = jest.fn(emptyPull())\n\n    await synchronize({\n      database,\n      pullChanges,\n      pushChanges: jest.fn(),\n      migrationsEnabledAtVersion: 7,\n    })\n    expect(pullChanges).toHaveBeenCalledWith({\n      lastPulledAt: null,\n      schemaVersion: 10,\n      migration: null,\n    })\n    expect(await getLastPulledSchemaVersion(database)).toBe(10)\n    // check underlying database since it's an implicit API\n    expect(await database.adapter.getLocal('__watermelon_last_pulled_schema_version')).toBe('10')\n  })\n  it(`remembers synced schema version on first sync, even if migrations are not enabled`, async () => {\n    const { database } = mockDatabase({ schema: testSchema10 })\n    const pullChanges = jest.fn(emptyPull())\n\n    await synchronize({ database, pullChanges, pushChanges: jest.fn() })\n    expect(pullChanges).toHaveBeenCalledWith({\n      lastPulledAt: null,\n      schemaVersion: 10,\n      migration: null,\n    })\n    expect(await getLastPulledSchemaVersion(database)).toBe(10)\n  })\n  it(`does not remember schema version if migration syncs are not enabled`, async () => {\n    const { database } = mockDatabase({ schema: testSchema10 })\n    await setLastPulledAt(database, 100)\n    const pullChanges = jest.fn(emptyPull())\n\n    await synchronize({ database, pullChanges, pushChanges: jest.fn() })\n    expect(pullChanges).toHaveBeenCalledWith({\n      lastPulledAt: 100,\n      schemaVersion: 10,\n      migration: null,\n    })\n    expect(await getLastPulledSchemaVersion(database)).toBe(null)\n  })\n  it(`performs no migration if up to date`, async () => {\n    const { database } = mockDatabase({ schema: testSchema10, migrations })\n    await setLastPulledAt(database, 1500)\n    await setLastPulledSchemaVersion(database, 10)\n\n    const pullChanges = jest.fn(emptyPull(2500))\n    await synchronize({\n      database,\n      pullChanges,\n      pushChanges: jest.fn(),\n      migrationsEnabledAtVersion: 7,\n    })\n    expect(pullChanges).toHaveBeenCalledWith({\n      lastPulledAt: 1500,\n      schemaVersion: 10,\n      migration: null,\n    })\n    expect(await getLastPulledSchemaVersion(database)).toBe(10)\n  })\n  it(`performs migration sync on schema version bump`, async () => {\n    const { database } = mockDatabase({ schema: testSchema10, migrations })\n    await setLastPulledAt(database, 1500)\n    await setLastPulledSchemaVersion(database, 9)\n\n    const pullChanges = jest.fn(emptyPull(2500))\n    await synchronize({\n      database,\n      pullChanges,\n      pushChanges: jest.fn(),\n      migrationsEnabledAtVersion: 7,\n    })\n    expect(pullChanges).toHaveBeenCalledWith({\n      lastPulledAt: 1500,\n      schemaVersion: 10,\n      migration: {\n        from: 9,\n        tables: [],\n        columns: [{ table: 'attachment_versions', columns: ['reactions'] }],\n      },\n    })\n    expect(await getLastPulledSchemaVersion(database)).toBe(10)\n  })\n  it(`performs fallback migration sync`, async () => {\n    const { database } = mockDatabase({ schema: testSchema10, migrations })\n    await setLastPulledAt(database, 1500)\n\n    const pullChanges = jest.fn(emptyPull(2500))\n    await synchronize({\n      database,\n      pullChanges,\n      pushChanges: jest.fn(),\n      migrationsEnabledAtVersion: 8,\n    })\n    expect(pullChanges).toHaveBeenCalledWith({\n      lastPulledAt: 1500,\n      schemaVersion: 10,\n      migration: {\n        from: 8,\n        tables: ['attachments'],\n        columns: [{ table: 'attachment_versions', columns: ['reactions'] }],\n      },\n    })\n    expect(await getLastPulledSchemaVersion(database)).toBe(10)\n  })\n  it(`does not remember schema version if pull fails`, async () => {\n    const { database } = mockDatabase({ schema: testSchema10, migrations })\n    await synchronize({\n      database,\n      pullChanges: jest.fn(() => Promise.reject(new Error('pull-fail'))),\n      pushChanges: jest.fn(),\n      migrationsEnabledAtVersion: 8,\n    }).catch((e) => e)\n    expect(await getLastPulledSchemaVersion(database)).toBe(null)\n  })\n  it(`fails on programmer errors`, async () => {\n    const { database } = mockDatabase({ schema: testSchema10, migrations })\n\n    await expectToRejectWithMessage(\n      synchronize({ database, migrationsEnabledAtVersion: '9' }),\n      'Invalid migrationsEnabledAtVersion',\n    )\n    await expectToRejectWithMessage(\n      synchronize({ database, migrationsEnabledAtVersion: 11 }),\n      'migrationsEnabledAtVersion must not be greater than current schema version',\n    )\n    await expectToRejectWithMessage(\n      synchronize({\n        database: mockDatabase({ schema: testSchema10 }).db,\n        migrationsEnabledAtVersion: 9,\n      }),\n      'Migration syncs cannot be enabled on a database that does not support migrations',\n    )\n    await expectToRejectWithMessage(\n      synchronize({ database, migrationsEnabledAtVersion: 6 }),\n      `migrationsEnabledAtVersion is too low - not possible to migrate from schema version 6`,\n    )\n  })\n  it(`fails on last synced schema version > current schema version`, async () => {\n    const { database } = mockDatabase({ schema: testSchema10, migrations })\n    await setLastPulledAt(database, 1500)\n    await setLastPulledSchemaVersion(database, 11)\n    await expectToRejectWithMessage(\n      synchronize({ database, migrationsEnabledAtVersion: 10 }),\n      /Last synced schema version \\(11\\) is greater than current schema version \\(10\\)/,\n    )\n  })\n})\n"
  },
  {
    "path": "src/sync/impl/__tests__/synchronize-partialRejections.test.js",
    "content": "import { makeDatabase, makeLocalChanges, makeChangeSet, emptyPull } from './helpers'\n\nimport { synchronize } from '../../index'\nimport { fetchLocalChanges } from '../index'\n\ndescribe('synchronize - partial push rejections', () => {\n  it(`can partially reject a push`, async () => {\n    const { database } = makeDatabase()\n\n    const { tCreated, tUpdated } = await makeLocalChanges(database)\n\n    const rejectedIds = Object.freeze({\n      mock_tasks: ['tCreated', 'tUpdated'],\n      mock_comments: ['cDeleted'],\n    })\n    const log = {}\n    await synchronize({\n      database,\n      pullChanges: jest.fn(emptyPull()),\n      pushChanges: jest.fn(() => ({ experimentalRejectedIds: rejectedIds })),\n      log,\n    })\n    expect((await fetchLocalChanges(database)).changes).toEqual(\n      makeChangeSet({\n        mock_tasks: { created: [tCreated._raw], updated: [tUpdated._raw] },\n        mock_comments: { deleted: ['cDeleted'] },\n      }),\n    )\n    expect(log.rejectedIds).toBe(rejectedIds)\n  })\n  it(`can partially reject a push and make changes during push`, async () => {\n    const { database, comments } = makeDatabase()\n\n    const { pCreated1, tUpdated } = await makeLocalChanges(database)\n    const pCreated1Raw = { ...pCreated1._raw }\n    let newComment\n    await synchronize({\n      database,\n      pullChanges: jest.fn(emptyPull()),\n      pushChanges: jest.fn(async () => {\n        await database.write(async () => {\n          await pCreated1.update((p) => {\n            p.name = 'updated!'\n          })\n          newComment = await comments.create((c) => {\n            c.body = 'bazinga'\n          })\n        })\n        return {\n          experimentalRejectedIds: {\n            mock_tasks: ['tUpdated'],\n            mock_comments: ['cDeleted'],\n          },\n        }\n      }),\n    })\n    expect((await fetchLocalChanges(database)).changes).toEqual(\n      makeChangeSet({\n        mock_projects: { created: [{ ...pCreated1Raw, _changed: 'name', name: 'updated!' }] },\n        mock_tasks: { updated: [tUpdated._raw] },\n        mock_comments: { created: [newComment._raw], deleted: ['cDeleted'] },\n      }),\n    )\n  })\n})\n"
  },
  {
    "path": "src/sync/impl/__tests__/synchronize-replacement.test.js",
    "content": "import { expectToRejectWithMessage } from '../../../__tests__/utils'\nimport {\n  makeDatabase,\n  allDeletedRecords,\n  countAll,\n  getRaw,\n  makeLocalChanges,\n  makeChangeSet,\n  emptyChangeSet,\n} from './helpers'\n\nimport { synchronize } from '../../index'\n\ndescribe('synchronize - replacement syncs', () => {\n  it('can synchronize using replacement strategy', async () => {\n    const { database, projects, tasks, comments } = makeDatabase()\n\n    await makeLocalChanges(database)\n\n    const pullChanges = async () => ({\n      changes: makeChangeSet({\n        mock_projects: {\n          updated: [\n            // no changes, keep\n            { id: 'pSynced' },\n          ],\n        },\n        mock_tasks: {\n          updated: [\n            // update\n            { id: 'tSynced', name: 'remote', description: 'remote' },\n            // create\n            { id: 'new_task', name: 'remote' },\n          ],\n        },\n      }),\n      timestamp: 1500,\n      experimentalStrategy: 'replacement',\n    })\n    const pushChanges = jest.fn()\n    const log = {}\n    await synchronize({ database, pullChanges, pushChanges, sendCreatedAsUpdated: true, log })\n\n    // check replacement behavior\n    expect(await getRaw(tasks, 'tSynced')).toMatchObject({\n      _status: 'synced',\n      _changed: '',\n      name: 'remote',\n    })\n    expect(await countAll([projects, tasks, comments])).toBe(3 + 4) // dataset + created\n    expect(await allDeletedRecords([projects, tasks, comments])).toEqual([])\n\n    // expect 4 created records to be sent\n    expect(pushChanges).toHaveBeenCalledTimes(1)\n    expect(log.localChangeCount).toBe(4)\n  })\n  it(`fails on incorrect strategy`, async () => {\n    const { database } = makeDatabase()\n\n    const check = (strategy) =>\n      expectToRejectWithMessage(\n        synchronize({\n          database,\n          pullChanges: async () => ({\n            changes: emptyChangeSet,\n            timestamp: 1500,\n            experimentalStrategy: strategy,\n          }),\n          pushChanges: jest.fn(),\n        }),\n        'Invalid pull strategy',\n      )\n\n    await check('bad')\n    await check({ default: 'bad', override: {} })\n    await check({ default: 'incremental', override: { mock_projects: 'bad' } })\n  })\n})\n"
  },
  {
    "path": "src/sync/impl/__tests__/synchronize-turbo.test.js",
    "content": "import { expectToRejectWithMessage } from '../../../__tests__/utils'\nimport { makeDatabase, emptyPull } from './helpers'\n\nimport { synchronize } from '../../index'\nimport { getLastPulledAt } from '../index'\n\ndescribe('synchronize - turbo', () => {\n  it(`validates turbo sync settings`, async () => {\n    const { database } = makeDatabase()\n\n    await expectToRejectWithMessage(\n      synchronize({\n        database,\n        pullChanges: () => ({ syncJson: '{}' }),\n        unsafeTurbo: true,\n        _unsafeBatchPerCollection: true,\n      }),\n      'unsafeTurbo must not be used with _unsafeBatchPerCollection',\n    )\n\n    await expectToRejectWithMessage(\n      synchronize({ database, pullChanges: () => ({}), unsafeTurbo: true }),\n      'missing syncJson/syncJsonId',\n    )\n\n    await synchronize({ database, pullChanges: emptyPull() })\n    await expectToRejectWithMessage(\n      synchronize({ database, pullChanges: () => ({ syncJson: '{} ' }), unsafeTurbo: true }),\n      'unsafeTurbo can only be used as the first sync',\n    )\n  })\n  it(`can pull with turbo login`, async () => {\n    const { database, adapter } = makeDatabase()\n    // FIXME: Test on real native db instead of mocking\n    adapter.provideSyncJson = jest\n      .fn()\n      .mockImplementationOnce((id, json, callback) => callback({ value: true }))\n    adapter.unsafeLoadFromSync = jest\n      .fn()\n      .mockImplementationOnce((id, callback) => callback({ value: { timestamp: 1011 } }))\n\n    const json = '{ hello! }'\n    const log = {}\n    await synchronize({ database, pullChanges: () => ({ syncJson: json }), unsafeTurbo: true, log })\n\n    expect(await getLastPulledAt(database)).toBe(1011)\n    expect(log.lastPulledAt).toBe(null)\n    expect(log.newLastPulledAt).toBe(1011)\n\n    expect(adapter.provideSyncJson.mock.calls.length).toBe(1)\n    const jsonId = adapter.provideSyncJson.mock.calls[0][0]\n    expect(typeof jsonId).toBe('number')\n    expect(adapter.provideSyncJson.mock.calls[0][1]).toBe(json)\n    expect(adapter.unsafeLoadFromSync.mock.calls.length).toBe(1)\n    expect(adapter.unsafeLoadFromSync.mock.calls[0][0]).toBe(jsonId)\n  })\n  it(`can pull with turbo login (using native id)`, async () => {\n    const { database, adapter } = makeDatabase()\n    // FIXME: Test on real native db instead of mocking\n    adapter.provideSyncJson = jest.fn()\n    adapter.unsafeLoadFromSync = jest\n      .fn()\n      .mockImplementationOnce((id, callback) => callback({ value: { timestamp: 1012 } }))\n\n    const log = {}\n    await synchronize({\n      database,\n      pullChanges: () => ({ syncJsonId: 2137 }),\n      unsafeTurbo: true,\n      log,\n    })\n\n    expect(await getLastPulledAt(database)).toBe(1012)\n    expect(log.lastPulledAt).toBe(null)\n    expect(log.newLastPulledAt).toBe(1012)\n\n    expect(adapter.provideSyncJson.mock.calls.length).toBe(0)\n    expect(adapter.unsafeLoadFromSync.mock.calls.length).toBe(1)\n    expect(adapter.unsafeLoadFromSync.mock.calls[0][0]).toBe(2137)\n  })\n  describe('onDidPullChanges', () => {\n    it(`calls onDidPullChanges`, async () => {\n      const { database } = makeDatabase()\n\n      const onDidPullChanges = jest.fn()\n      await synchronize({\n        database,\n        pullChanges: () => ({ changes: {}, timestamp: 1000, hello: 'hi' }),\n        onDidPullChanges,\n      })\n      expect(onDidPullChanges).toHaveBeenCalledTimes(1)\n      expect(onDidPullChanges).toHaveBeenCalledWith({ timestamp: 1000, hello: 'hi' })\n    })\n    it(`calls onDidPullChanges in turbo`, async () => {\n      const { database, adapter } = makeDatabase()\n      // FIXME: Test on real native db instead of mocking\n      adapter.unsafeLoadFromSync = jest\n        .fn()\n        .mockImplementationOnce((id, callback) =>\n          callback({ value: { timestamp: 1000, hello: 'hi' } }),\n        )\n\n      const onDidPullChanges = jest.fn()\n      await synchronize({\n        database,\n        pullChanges: () => ({ syncJsonId: 0 }),\n        unsafeTurbo: true,\n        onDidPullChanges,\n      })\n      expect(onDidPullChanges).toHaveBeenCalledTimes(1)\n      expect(onDidPullChanges).toHaveBeenCalledWith({ timestamp: 1000, hello: 'hi' })\n    })\n  })\n})\n"
  },
  {
    "path": "src/sync/impl/__tests__/synchronize.test.js",
    "content": "import clone from 'lodash.clonedeep'\nimport { delay, omit } from 'rambdax'\nimport { skip as skip$ } from 'rxjs/operators'\nimport { expectToRejectWithMessage } from '../../../__tests__/utils'\nimport {\n  makeDatabase,\n  emptyLocalChanges,\n  expectSyncedAndMatches,\n  getRaw,\n  makeLocalChanges,\n  makeChangeSet,\n  expectDoesNotExist,\n  prepareCreateFromRaw,\n  emptyPull,\n} from './helpers'\n\nimport { synchronize, hasUnsyncedChanges } from '../../index'\nimport { fetchLocalChanges, getLastPulledAt } from '../index'\n\nconst observeDatabase = (database) => {\n  const observer = jest.fn()\n  const tables = ['mock_projects', 'mock_project_sections', 'mock_tasks', 'mock_comments']\n  expect(tables).toEqual(Object.keys(database.collections.map))\n  database.withChangesForTables(tables).pipe(skip$(1)).subscribe(observer)\n  return observer\n}\n\ndescribe('synchronize', () => {\n  it('can perform an empty sync', async () => {\n    const { database } = makeDatabase()\n    const observer = observeDatabase(database)\n\n    const pullChanges = jest.fn(emptyPull())\n\n    await synchronize({ database, pullChanges, pushChanges: jest.fn() })\n\n    expect(observer).toHaveBeenCalledTimes(0)\n    expect(pullChanges).toHaveBeenCalledTimes(1)\n    expect(pullChanges).toHaveBeenCalledWith({\n      lastPulledAt: null,\n      schemaVersion: 1,\n      migration: null,\n    })\n  })\n  it(`doesn't push changes if nothing to push`, async () => {\n    const { database } = makeDatabase()\n\n    const pushChanges = jest.fn()\n    await synchronize({ database, pullChanges: jest.fn(emptyPull()), pushChanges })\n\n    expect(pushChanges).toHaveBeenCalledTimes(0)\n  })\n  it('can log basic information about a sync', async () => {\n    const { database } = makeDatabase()\n\n    const log = {}\n    await synchronize({\n      database,\n      pullChanges: async () => {\n        // ensure we take more than 1ms for the log test\n        await new Promise((resolve) => {\n          setTimeout(resolve, 10)\n        })\n        return emptyPull()()\n      },\n      pushChanges: () => {},\n      log,\n    })\n\n    expect(log.startedAt).toBeInstanceOf(Date)\n    expect(log.finishedAt).toBeInstanceOf(Date)\n    expect(log.finishedAt.getTime()).toBeGreaterThan(log.startedAt.getTime())\n    expect(log.phase).toBe('done')\n\n    expect(log.lastPulledAt).toBe(null)\n    expect(log.newLastPulledAt).toBe(1500)\n\n    expect(log.error).toBe(undefined)\n\n    expect(log.remoteChangeCount).toBe(0)\n    expect(log.localChangeCount).toBe(0)\n  })\n  it(`notifies user about remote change count`, async () => {\n    const { database } = makeDatabase()\n\n    const onWillApplyRemoteChanges = jest.fn()\n    await synchronize({\n      database,\n      pullChanges: emptyPull(),\n      pushChanges: () => {},\n      onWillApplyRemoteChanges,\n    })\n    expect(onWillApplyRemoteChanges).toHaveBeenCalledTimes(1)\n    expect(onWillApplyRemoteChanges).toHaveBeenCalledWith({ remoteChangeCount: 0 })\n\n    // real changes\n    const onWillApplyRemoteChanges2 = jest.fn(async () => {\n      await delay(100)\n    })\n    await synchronize({\n      database,\n      pullChanges: () => ({\n        changes: makeChangeSet({\n          mock_projects: {\n            created: [{ id: 'new_project', name: 'remote' }],\n          },\n          mock_tasks: {\n            updated: [{ id: 'task_1', name: 'remote' }],\n            deleted: ['task_2'],\n          },\n        }),\n        timestamp: 1500,\n      }),\n      pushChanges: () => {},\n      onWillApplyRemoteChanges: onWillApplyRemoteChanges2,\n    })\n    expect(onWillApplyRemoteChanges2).toHaveBeenCalledTimes(1)\n    expect(onWillApplyRemoteChanges2).toHaveBeenCalledWith({ remoteChangeCount: 3 })\n  })\n  it('will not push changes if no `pushChanges`', async () => {\n    const { database } = makeDatabase()\n\n    await makeLocalChanges(database)\n\n    const pullChanges = async () => {\n      // ensure we take more than 1ms for the log test\n      await new Promise((resolve) => {\n        setTimeout(resolve, 10)\n      })\n      return emptyPull()()\n    }\n    const log = {}\n    await synchronize({ database, pullChanges, log })\n    expect(log.startedAt).toBeInstanceOf(Date)\n    expect(log.finishedAt).toBeInstanceOf(Date)\n    expect(log.finishedAt.getTime()).toBeGreaterThan(log.startedAt.getTime())\n    expect(log.phase).toBe('done')\n  })\n  it('can push changes', async () => {\n    const { database } = makeDatabase()\n\n    await makeLocalChanges(database)\n    const localChanges = await fetchLocalChanges(database)\n\n    const pullChanges = jest.fn(emptyPull())\n    const pushChanges = jest.fn()\n    const log = {}\n    await synchronize({ database, pullChanges, pushChanges, log })\n\n    expect(pushChanges).toHaveBeenCalledWith({ changes: localChanges.changes, lastPulledAt: 1500 })\n    expect(await fetchLocalChanges(database)).toEqual(emptyLocalChanges)\n    expect(log.localChangeCount).toBe(10)\n  })\n  it('can pull changes', async () => {\n    const { database, projects, tasks } = makeDatabase()\n\n    const pullChanges = jest.fn(async () => ({\n      changes: makeChangeSet({\n        mock_projects: {\n          created: [{ id: 'new_project', name: 'remote' }],\n          updated: [{ id: 'pSynced', name: 'remote' }],\n        },\n        mock_tasks: {\n          deleted: ['tSynced'],\n        },\n      }),\n      timestamp: 1500,\n    }))\n\n    await synchronize({ database, pullChanges, pushChanges: jest.fn() })\n\n    expect(pullChanges).toHaveBeenCalledWith({\n      lastPulledAt: null,\n      schemaVersion: 1,\n      migration: null,\n    })\n\n    expect(await fetchLocalChanges(database)).toEqual(emptyLocalChanges)\n    await expectSyncedAndMatches(projects, 'new_project', { name: 'remote' })\n    await expectSyncedAndMatches(projects, 'pSynced', { name: 'remote' })\n    await expectDoesNotExist(tasks, 'tSynced')\n  })\n  it('can synchronize changes with conflicts', async () => {\n    const { database, projects, tasks, comments } = makeDatabase()\n\n    const records = await makeLocalChanges(database)\n    const tUpdatedInitial = { ...records.tUpdated._raw }\n    const cUpdatedInitial = { ...records.cUpdated._raw }\n\n    const localChanges = await fetchLocalChanges(database)\n\n    const pullChanges = async () => ({\n      changes: makeChangeSet({\n        mock_projects: {\n          created: [{ id: 'pCreated1', name: 'remote' }], // error - update, stay synced\n          deleted: ['pUpdated', 'does_not_exist', 'pDeleted'],\n        },\n        mock_tasks: {\n          updated: [\n            { id: 'tUpdated', name: 'remote', description: 'remote' }, // just a conflict; stay updated\n            { id: 'tDeleted', body: 'remote' }, // ignore\n          ],\n        },\n        mock_comments: {\n          created: [\n            { id: 'cUpdated', body: 'remote', task_id: 'remote' }, // error - resolve and update (stay updated)\n          ],\n        },\n      }),\n      timestamp: 1500,\n    })\n    const pushChanges = jest.fn()\n\n    const log = {}\n    await synchronize({ database, pullChanges, pushChanges, log })\n\n    expect(pushChanges).toHaveBeenCalledTimes(1)\n    const pushedChanges = pushChanges.mock.calls[0][0].changes\n    expect(pushedChanges).not.toEqual(localChanges.changes)\n    expect(pushedChanges.mock_projects.created).not.toContainEqual(\n      await getRaw(projects, 'pCreated1'),\n    )\n    expect(pushedChanges.mock_projects.deleted).not.toContain('pDeleted')\n    const tUpdatedResolvedExpected = {\n      // TODO: That's just dirty\n      ...(await getRaw(tasks, 'tUpdated')),\n      _status: 'updated',\n      _changed: 'name,position',\n    }\n    expect(pushedChanges.mock_tasks.updated).toContainEqual(tUpdatedResolvedExpected)\n    expect(pushedChanges.mock_tasks.deleted).toContain('tDeleted')\n    const cUpdatedResolvedExpected = {\n      // TODO: That's just dirty\n      ...(await getRaw(comments, 'cUpdated')),\n      _status: 'updated',\n      _changed: 'updated_at,body',\n    }\n    expect(pushedChanges.mock_comments.updated).toContainEqual(cUpdatedResolvedExpected)\n\n    await expectSyncedAndMatches(projects, 'pCreated1', { name: 'remote' })\n    await expectDoesNotExist(projects, 'pUpdated')\n    await expectDoesNotExist(projects, 'pDeleted')\n    await expectSyncedAndMatches(tasks, 'tUpdated', { name: 'local', description: 'remote' })\n    await expectDoesNotExist(tasks, 'tDeleted')\n    await expectSyncedAndMatches(comments, 'cUpdated', { body: 'local', task_id: 'remote' })\n\n    expect(await fetchLocalChanges(database)).toEqual(emptyLocalChanges)\n\n    // check that log is good\n    expect(log.remoteChangeCount).toBe(7)\n    expect(log.resolvedConflicts).toEqual([\n      {\n        local: tUpdatedInitial,\n        remote: { id: 'tUpdated', name: 'remote', description: 'remote' },\n        resolved: tUpdatedResolvedExpected,\n      },\n      {\n        local: cUpdatedInitial,\n        remote: { id: 'cUpdated', body: 'remote', task_id: 'remote' },\n        resolved: cUpdatedResolvedExpected,\n      },\n    ])\n  })\n  it(`allows conflict resolution to be customized`, async () => {\n    const { database, projects, tasks } = makeDatabase()\n\n    await database.write(async () => {\n      await database.batch(\n        prepareCreateFromRaw(projects, { id: 'p1', _status: 'synced', name: 'local' }),\n        prepareCreateFromRaw(projects, { id: 'p2', _status: 'created', name: 'local' }),\n        prepareCreateFromRaw(tasks, { id: 't1', _status: 'synced' }),\n        prepareCreateFromRaw(tasks, { id: 't2', _status: 'created' }),\n        prepareCreateFromRaw(tasks, {\n          id: 't3',\n          _status: 'updated',\n          name: 'local',\n          _changd: 'name',\n        }),\n      )\n    })\n\n    const conflictResolver = jest.fn((table, local, remote, resolved) => {\n      if (table === 'mock_tasks') {\n        resolved.name = 'GOTCHA'\n      }\n      return resolved\n    })\n\n    const pullChanges = async () => ({\n      changes: makeChangeSet({\n        mock_projects: {\n          created: [{ id: 'p2', name: 'remote' }], // error - update, stay synced\n          updated: [{ id: 'p1', name: 'change' }], // update\n        },\n        mock_tasks: {\n          updated: [\n            { id: 't1', name: 'remote' }, // update\n            { id: 't3', name: 'remote' }, // conflict\n          ],\n        },\n      }),\n      timestamp: 1500,\n    })\n    await synchronize({ database, pullChanges, pushChanges: jest.fn(), conflictResolver })\n\n    expect(conflictResolver).toHaveBeenCalledTimes(4)\n    expect(conflictResolver.mock.calls[0]).toMatchObject([\n      'mock_projects',\n      { id: 'p2', _status: 'created', name: 'local' },\n      { name: 'remote' },\n      { name: 'remote' },\n    ])\n    expect(conflictResolver.mock.calls[1]).toMatchObject([\n      'mock_projects',\n      { id: 'p1', _status: 'synced' },\n      { name: 'change' },\n      { _status: 'synced' },\n    ])\n    expect(conflictResolver.mock.results[1].value).toBe(conflictResolver.mock.calls[1][3])\n    expect(conflictResolver.mock.calls[2]).toMatchObject([\n      'mock_tasks',\n      { id: 't1', _status: 'synced', name: '' },\n      { name: 'remote' },\n      { name: 'GOTCHA' }, // we're mutating this arg in function, that's why\n    ])\n\n    await expectSyncedAndMatches(tasks, 't1', { name: 'GOTCHA' })\n    await expectSyncedAndMatches(tasks, 't3', { name: 'GOTCHA' })\n\n    expect(await fetchLocalChanges(database)).toEqual(emptyLocalChanges)\n  })\n  it('remembers last_synced_at timestamp', async () => {\n    const { database } = makeDatabase()\n\n    let pullChanges = jest.fn(emptyPull(1500))\n    await synchronize({ database, pullChanges, pushChanges: jest.fn() })\n\n    expect(pullChanges).toHaveBeenCalledWith({\n      lastPulledAt: null,\n      schemaVersion: 1,\n      migration: null,\n    })\n\n    pullChanges = jest.fn(emptyPull(2500))\n    const log = {}\n    await synchronize({ database, pullChanges, pushChanges: jest.fn(), log })\n\n    expect(pullChanges).toHaveBeenCalledTimes(1)\n    expect(pullChanges).toHaveBeenCalledWith({\n      lastPulledAt: 1500,\n      schemaVersion: 1,\n      migration: null,\n    })\n    expect(await getLastPulledAt(database)).toBe(2500)\n    expect(log.lastPulledAt).toBe(1500)\n    expect(log.newLastPulledAt).toBe(2500)\n    // check underlying database since it's an implicit API\n    expect(await database.adapter.getLocal('__watermelon_last_pulled_at')).toBe('2500')\n  })\n  it(`validates timestamp returned from pullChanges`, async () => {\n    const { database } = makeDatabase()\n    await expectToRejectWithMessage(\n      synchronize({ database, pullChanges: jest.fn(emptyPull(0)), pushChanges: jest.fn() }),\n      /pullChanges\\(\\) returned invalid timestamp/,\n    )\n  })\n  it('can recover from pull failure', async () => {\n    const { database } = makeDatabase()\n    // make change to make sure pushChagnes isn't called because of pull failure and not lack of changes\n    await makeLocalChanges(database)\n\n    const observer = observeDatabase(database)\n    const error = new Error('pull-fail')\n    const pullChanges = jest.fn(() => Promise.reject(error))\n    const pushChanges = jest.fn()\n    const log = {}\n    const sync = await synchronize({ database, pullChanges, pushChanges, log }).catch((e) => e)\n\n    expect(observer).toHaveBeenCalledTimes(0)\n    expect(pullChanges).toHaveBeenCalledTimes(1)\n    expect(pushChanges).toHaveBeenCalledTimes(0)\n    expect(sync).toMatchObject({ message: 'pull-fail' })\n    expect(await getLastPulledAt(database)).toBe(null)\n    expect(log.phase).toBe('ready to pull')\n    expect(log.error).toBe(error)\n  })\n  it('can recover from push failure', async () => {\n    const { database, projects } = makeDatabase()\n\n    await makeLocalChanges(database)\n    const localChanges = await fetchLocalChanges(database)\n\n    const observer = observeDatabase(database)\n    const pullChanges = async () => ({\n      changes: makeChangeSet({\n        mock_projects: {\n          created: [{ id: 'new_project', name: 'remote' }],\n        },\n      }),\n      timestamp: 1500,\n    })\n    const pushChanges = jest.fn(() => Promise.reject(new Error('push-fail')))\n    const sync = await synchronize({ database, pullChanges, pushChanges }).catch((e) => e)\n\n    // full sync failed - local changes still awaiting sync\n    expect(pushChanges).toHaveBeenCalledWith({ changes: localChanges.changes, lastPulledAt: 1500 })\n    expect(sync).toMatchObject({ message: 'push-fail' })\n    expect(await fetchLocalChanges(database)).toEqual(localChanges)\n\n    // but pull phase succeeded\n    expect(await getLastPulledAt(database)).toBe(1500)\n    expect(observer).toHaveBeenCalledTimes(1)\n    await expectSyncedAndMatches(projects, 'new_project', { name: 'remote' })\n  })\n  it('can safely handle local changes during sync', async () => {\n    const { database, projects } = makeDatabase()\n\n    await makeLocalChanges(database)\n    const localChanges = await fetchLocalChanges(database)\n\n    const pullChanges = jest.fn(async () => ({\n      changes: makeChangeSet({\n        mock_projects: {\n          created: [{ id: 'new_project', name: 'remote' }],\n        },\n      }),\n      timestamp: 1500,\n    }))\n\n    let betweenFetchAndMarkAction\n    const pushChanges = jest.fn(\n      () => betweenFetchAndMarkAction(), // this will run before push completes\n    )\n\n    let syncCompleted = false\n    const sync = synchronize({ database, pullChanges, pushChanges }).then(() => {\n      syncCompleted = true\n    })\n\n    const createProject = (name) =>\n      projects.create((project) => {\n        project.name = name\n      })\n\n    // run this between fetchLocalChanges and markLocalChangesAsSynced\n    // (doesn't really matter if it's before or after pushChanges is called)\n    let project3\n    betweenFetchAndMarkAction = jest.fn(() =>\n      database.write(async () => {\n        await expectSyncedAndMatches(projects, 'new_project', {})\n        expect(syncCompleted).toBe(false)\n        project3 = await createProject('project3')\n      }, 'betweenFetchAndMarkAction'),\n    )\n\n    // run this between applyRemoteChanges and fetchLocalChanges\n    let project2\n    const betweenApplyAndFetchAction = jest.fn(async () => {\n      await expectSyncedAndMatches(projects, 'new_project', {})\n      expect(pushChanges).toHaveBeenCalledTimes(0)\n      project2 = (await createProject('project2'))._raw\n    })\n\n    // run this before applyRemoteChanges\n    let project1\n    const beforeApplyAction = jest.fn(async () => {\n      await expectDoesNotExist(projects, 'new_project')\n      project1 = (await createProject('project1'))._raw\n      database.write(betweenApplyAndFetchAction, 'betweenApplyAndFetchAction')\n    })\n    database.write(beforeApplyAction, 'beforeApplyAction')\n\n    // we sync successfully and have received an object\n    await sync\n\n    expect(beforeApplyAction).toHaveBeenCalledTimes(1)\n    expect(betweenApplyAndFetchAction).toHaveBeenCalledTimes(1)\n    expect(betweenFetchAndMarkAction).toHaveBeenCalledTimes(1)\n\n    await expectSyncedAndMatches(projects, 'new_project', {})\n\n    // Expect project1, project2 to have been pushed\n    const pushedChanges = pushChanges.mock.calls[0][0].changes\n    expect(pushedChanges).not.toEqual(localChanges.changes)\n    const expectedPushedChanges = clone(localChanges.changes)\n    expectedPushedChanges.mock_projects.created = [\n      project2,\n      project1,\n      ...expectedPushedChanges.mock_projects.created,\n    ]\n    expect(pushedChanges).toEqual(expectedPushedChanges)\n\n    // Expect project3 to still need pushing\n    const localChanges2 = await fetchLocalChanges(database)\n    expect(localChanges2).not.toEqual(emptyLocalChanges)\n    expect(await hasUnsyncedChanges({ database })).toBe(true)\n    expect(localChanges2).toEqual({\n      changes: makeChangeSet({\n        mock_projects: {\n          created: [project3._raw],\n        },\n      }),\n      affectedRecords: [project3],\n    })\n  })\n  it(`can safely update created records during push (regression test)`, async () => {\n    const { database, tasks } = makeDatabase()\n    const task = tasks.prepareCreateFromDirtyRaw({\n      id: 't1',\n      name: 'Task name',\n      position: 1,\n      is_completed: false,\n      project_id: 'p1',\n    })\n    await database.write(() => database.batch(task))\n    const initialRaw = { ...task._raw }\n    expect(task._raw).toMatchObject({\n      _status: 'created',\n      _changed: '',\n      position: 1,\n      is_completed: false,\n    })\n    await synchronize({\n      database,\n      pullChanges: emptyPull(1000),\n      pushChanges: async () => {\n        // this runs between fetchLocalChanges and markLocalChangesAsSynced\n        // user modifies record\n        await database.write(() =>\n          task.update(() => {\n            task.isCompleted = true\n            task.position = 20\n          }),\n        )\n      },\n    })\n    expect(task._raw).toMatchObject({\n      _status: 'created',\n      _changed: 'is_completed,position',\n      position: 20,\n      is_completed: true,\n    })\n    await synchronize({\n      database,\n      pullChanges: () => ({\n        changes: makeChangeSet({\n          mock_tasks: {\n            // backend serves the pushed record back\n            updated: [omit(['_changed', '_status'], initialRaw)],\n          },\n        }),\n        timestamp: 1500,\n      }),\n      pushChanges: () => {\n        expect(task._raw).toMatchObject({ _status: 'created', _changed: 'is_completed,position' })\n      },\n    })\n    expect(task._raw).toMatchObject({\n      _status: 'synced',\n      _changed: '',\n      position: 20,\n      is_completed: true,\n    })\n  })\n  it.skip(`can accept remote changes received during push`, async () => {\n    // TODO: future improvement?\n  })\n  it.skip(`can resolve push-time sync conflicts`, async () => {\n    // TODO: future improvement?\n  })\n  it.skip(`only emits one collection batch change`, async () => {\n    // TODO: unskip when batch change emissions are implemented\n  })\n})\n"
  },
  {
    "path": "src/sync/impl/applyRemote.d.ts",
    "content": "import type { Database } from '../..'\n\nimport type { SyncDatabaseChangeSet, SyncLog, SyncConflictResolver } from '../index'\n\nexport default function applyRemoteChanges(\n  remoteChanges: SyncDatabaseChangeSet,\n  opts: {\n    db: Database\n    sendCreatedAsUpdated: boolean\n    log?: SyncLog\n    conflictResolver?: SyncConflictResolver\n    _unsafeBatchPerCollection?: boolean\n  },\n): Promise<void>\n"
  },
  {
    "path": "src/sync/impl/applyRemote.js",
    "content": "// @flow\n\nimport { mapObj, filterObj, pipe, toPairs } from '../../utils/fp'\nimport splitEvery from '../../utils/fp/splitEvery'\nimport allPromisesObj from '../../utils/fp/allPromisesObj'\nimport { toPromise } from '../../utils/fp/Result'\nimport { logError, invariant, logger } from '../../utils/common'\nimport type {\n  Database,\n  RecordId,\n  Collection,\n  Model,\n  TableName,\n  DirtyRaw,\n  Query,\n  RawRecord,\n} from '../..'\nimport * as Q from '../../QueryDescription'\nimport { columnName } from '../../Schema'\n\nimport type {\n  SyncTableChangeSet,\n  SyncDatabaseChangeSet,\n  SyncLog,\n  SyncConflictResolver,\n  SyncPullStrategy,\n} from '../index'\nimport { prepareCreateFromRaw, prepareUpdateFromRaw, recordFromRaw } from './helpers'\n\ntype ApplyRemoteChangesContext = $Exact<{\n  db: Database,\n  strategy?: ?SyncPullStrategy,\n  sendCreatedAsUpdated?: boolean,\n  log?: SyncLog,\n  conflictResolver?: SyncConflictResolver,\n  _unsafeBatchPerCollection?: boolean,\n}>\n\n// NOTE: Creating JS models is expensive/memory-intensive, so we want to avoid it if possible\n// In replacement sync, we can avoid it if record already exists and didn't change. Note that we're not\n// using unsafeQueryRaw, because we DO want to reuse JS model if already in memory\n// This is only safe to do within a single db.write block, because otherwise we risk that the record\n// changed and we can no longer instantiate a JS model from an outdated raw record\nconst unsafeFetchAsRaws = async <T: Model>(query: Query<T>): Promise<RawRecord[]> => {\n  const { db } = query.collection\n  const result = await toPromise((callback) =>\n    db.adapter.underlyingAdapter.query(query.serialize(), callback),\n  )\n  const raws = query.collection._cache.rawRecordsFromQueryResult(result)\n  // FIXME: The above actually causes RecordCache corruption, because we're not adding record to\n  // RecordCache, but adapter notes that we did. Temporary quick fix below to undo the optimization.\n  raws.forEach((raw) => {\n    query.collection._cache._modelForRaw(raw, false)\n  })\n\n  return raws\n}\n\nconst idsForChanges = ({ created, updated, deleted }: SyncTableChangeSet): RecordId[] => {\n  const ids = []\n  created.forEach((record) => {\n    ids.push(record.id)\n  })\n  updated.forEach((record) => {\n    ids.push(record.id)\n  })\n  return ids.concat(deleted)\n}\n\nconst fetchRecordsForChanges = <T: Model>(\n  collection: Collection<T>,\n  changes: SyncTableChangeSet,\n): Promise<RawRecord[]> => {\n  const ids = idsForChanges(changes)\n\n  if (ids.length) {\n    return unsafeFetchAsRaws(collection.query(Q.where(columnName('id'), Q.oneOf(ids))))\n  }\n\n  return Promise.resolve([])\n}\n\ntype RecordsToApplyRemoteChangesTo<T: Model> = $Exact<{\n  ...SyncTableChangeSet,\n  recordsMap: Map<RecordId, RawRecord>,\n  recordsToDestroy: T[],\n  locallyDeletedIds: RecordId[],\n  deletedRecordsToDestroy: RecordId[],\n}>\n\nasync function recordsToApplyRemoteChangesTo_incremental<T: Model>(\n  collection: Collection<T>,\n  changes: SyncTableChangeSet,\n  context: ApplyRemoteChangesContext,\n): Promise<RecordsToApplyRemoteChangesTo<T>> {\n  const { db } = context\n  const { table } = collection\n\n  const { deleted: deletedIds } = changes\n  const deletedIdsSet = new Set(deletedIds)\n\n  const [rawRecords, locallyDeletedIds] = await Promise.all([\n    fetchRecordsForChanges(collection, changes),\n    db.adapter.getDeletedRecords(table),\n  ])\n\n  return {\n    ...changes,\n    recordsMap: new Map(rawRecords.map((raw) => [raw.id, raw])),\n    locallyDeletedIds,\n    recordsToDestroy: rawRecords\n      .filter((raw) => deletedIdsSet.has(raw.id))\n      .map((raw) => recordFromRaw(raw, collection)),\n    deletedRecordsToDestroy: locallyDeletedIds.filter((id) => deletedIdsSet.has(id)),\n  }\n}\n\nasync function recordsToApplyRemoteChangesTo_replacement<T: Model>(\n  collection: Collection<T>,\n  changes: SyncTableChangeSet,\n  context: ApplyRemoteChangesContext,\n): Promise<RecordsToApplyRemoteChangesTo<T>> {\n  const { db } = context\n  const { table } = collection\n\n  const queryForReplacement: ?(Q.Where[]) =\n    context.strategy &&\n    typeof context.strategy === 'object' &&\n    context.strategy.experimentalQueryRecordsForReplacement\n      ? context.strategy.experimentalQueryRecordsForReplacement[table]?.()\n      : null\n\n  const { created, updated, deleted: changesDeletedIds } = changes\n  const deletedIdsSet = new Set(changesDeletedIds)\n\n  const [rawRecords, locallyDeletedIds] = await Promise.all([\n    unsafeFetchAsRaws(\n      collection.query(\n        queryForReplacement\n          ? [\n              Q.or(\n                Q.where(columnName('id'), Q.oneOf(idsForChanges(changes))),\n                Q.and(queryForReplacement),\n              ),\n            ]\n          : [],\n      ),\n    ),\n    db.adapter.getDeletedRecords(table),\n  ])\n\n  // HACK: We need to figure out which records deleted locally are subject to replacement, but\n  // there's no officially supported way to do that, so we're using an internal API and make sure\n  // we don't add these to RecordCache. Note that there could be edge cases when using join queries\n  // and some of the other referenced records are also deleted.\n  const replacementRecords = await (async () => {\n    if (queryForReplacement) {\n      const clauses: Q.Clause[] = (queryForReplacement: any)\n      const modifiedQuery = collection.query(clauses)\n      modifiedQuery.description = modifiedQuery._rawDescription\n      return new Set(await modifiedQuery.fetchIds())\n    }\n    return null\n  })()\n\n  const recordsToKeep = new Set([\n    ...created.map((record) => (record.id: RecordId)),\n    ...updated.map((record) => (record.id: RecordId)),\n  ])\n\n  return {\n    ...changes,\n    recordsMap: new Map(rawRecords.map((raw) => [raw.id, raw])),\n    locallyDeletedIds,\n    recordsToDestroy: rawRecords\n      .filter((raw) => {\n        if (deletedIdsSet.has(raw.id)) {\n          return true\n        }\n\n        const subjectToReplacement = replacementRecords ? replacementRecords.has(raw.id) : true\n        return subjectToReplacement && !recordsToKeep.has(raw.id) && raw._status !== 'created'\n      })\n      .map((raw) => recordFromRaw(raw, collection)),\n    deletedRecordsToDestroy: locallyDeletedIds.filter((id) => {\n      if (deletedIdsSet.has(id)) {\n        return true\n      }\n      const subjectToReplacement = replacementRecords ? replacementRecords.has(id) : true\n      return subjectToReplacement && !recordsToKeep.has(id)\n    }),\n  }\n}\n\nconst strategyForCollection = (\n  collection: Collection<any>,\n  strategy: ?SyncPullStrategy,\n): SyncPullStrategy => {\n  if (!strategy) {\n    return 'incremental'\n  } else if (typeof strategy === 'string') {\n    return strategy\n  }\n\n  return strategy.override[collection.table] || strategy.default\n}\n\nasync function recordsToApplyRemoteChangesTo<T: Model>(\n  collection: Collection<T>,\n  changes: SyncTableChangeSet,\n  context: ApplyRemoteChangesContext,\n): Promise<RecordsToApplyRemoteChangesTo<T>> {\n  const strategy = strategyForCollection(collection, context.strategy)\n  invariant(['incremental', 'replacement'].includes(strategy), '[Sync] Invalid pull strategy')\n\n  switch (strategy) {\n    case 'replacement':\n      return recordsToApplyRemoteChangesTo_replacement(collection, changes, context)\n    case 'incremental':\n    default:\n      return recordsToApplyRemoteChangesTo_incremental(collection, changes, context)\n  }\n}\n\ntype AllRecordsToApply = interface { [TableName<any>]: RecordsToApplyRemoteChangesTo<Model> }\n\nconst getAllRecordsToApply = (\n  remoteChanges: SyncDatabaseChangeSet,\n  context: ApplyRemoteChangesContext,\n): AllRecordsToApply => {\n  const { db } = context\n  return allPromisesObj(\n    pipe(\n      filterObj((_changes, tableName: TableName<any>) => {\n        const collection = db.get((tableName: any))\n\n        if (!collection) {\n          logger.warn(\n            `You are trying to sync a collection named ${tableName}, but it does not exist. Will skip it (for forward-compatibility). If this is unexpected, perhaps you forgot to add it to your Database constructor's modelClasses property?`,\n          )\n        }\n\n        return !!collection\n      }),\n      mapObj((changes, tableName: TableName<any>) =>\n        recordsToApplyRemoteChangesTo(db.get((tableName: any)), changes, context),\n      ),\n    )(remoteChanges),\n  )\n}\n\nfunction validateRemoteRaw(raw: DirtyRaw): void {\n  // TODO: I think other code is actually resilient enough to handle illegal _status and _changed\n  // would be best to change that part to a warning - but tests are needed\n  invariant(\n    raw && typeof raw === 'object' && 'id' in raw && !('_status' in raw || '_changed' in raw),\n    `[Sync] Invalid raw record supplied to Sync. Records must be objects, must have an 'id' field, and must NOT have a '_status' or '_changed' fields`,\n  )\n}\n\nfunction prepareApplyRemoteChangesToCollection<T: Model>(\n  recordsToApply: RecordsToApplyRemoteChangesTo<T>,\n  collection: Collection<T>,\n  context: ApplyRemoteChangesContext,\n): Array<?T> {\n  const { db, sendCreatedAsUpdated, log, conflictResolver } = context\n  const { table } = collection\n  const {\n    created,\n    updated,\n    recordsToDestroy: deleted,\n    recordsMap,\n    locallyDeletedIds,\n  } = recordsToApply\n\n  // if `sendCreatedAsUpdated`, server should send all non-deleted records as `updated`\n  // log error if it doesn't — but disable standard created vs updated errors\n  if (sendCreatedAsUpdated && created.length) {\n    logError(\n      `[Sync] 'sendCreatedAsUpdated' option is enabled, and yet server sends some records as 'created'`,\n    )\n  }\n\n  const recordsToBatch: Array<?T> = [] // mutating - perf critical\n\n  // Insert and update records\n  created.forEach((raw) => {\n    validateRemoteRaw(raw)\n    const currentRecord = recordsMap.get(raw.id)\n    if (currentRecord) {\n      logError(\n        `[Sync] Server wants client to create record ${table}#${raw.id}, but it already exists locally. This may suggest last sync partially executed, and then failed; or it could be a serious bug. Will update existing record instead.`,\n      )\n      recordsToBatch.push(\n        prepareUpdateFromRaw(currentRecord, raw, collection, log, conflictResolver),\n      )\n    } else if (locallyDeletedIds.includes(raw.id)) {\n      logError(\n        `[Sync] Server wants client to create record ${table}#${raw.id}, but it already exists locally and is marked as deleted. This may suggest last sync partially executed, and then failed; or it could be a serious bug. Will delete local record and recreate it instead.`,\n      )\n      // Note: we're not awaiting the async operation (but it will always complete before the batch)\n      db.adapter.destroyDeletedRecords(table, [raw.id])\n      recordsToBatch.push(prepareCreateFromRaw(collection, raw))\n    } else {\n      recordsToBatch.push(prepareCreateFromRaw(collection, raw))\n    }\n  })\n\n  updated.forEach((raw) => {\n    validateRemoteRaw(raw)\n    const currentRecord = recordsMap.get(raw.id)\n\n    if (currentRecord) {\n      recordsToBatch.push(\n        prepareUpdateFromRaw(currentRecord, raw, collection, log, conflictResolver),\n      )\n    } else if (locallyDeletedIds.includes(raw.id)) {\n      // Nothing to do, record was locally deleted, deletion will be pushed later\n    } else {\n      // Record doesn't exist (but should) — just create it\n      !sendCreatedAsUpdated &&\n        logError(\n          `[Sync] Server wants client to update record ${table}#${raw.id}, but it doesn't exist locally. This could be a serious bug. Will create record instead. If this was intentional, please check the flag sendCreatedAsUpdated in https://watermelondb.dev/docs/Sync/Frontend#additional-synchronize-flags`,\n        )\n\n      recordsToBatch.push(prepareCreateFromRaw(collection, raw))\n    }\n  })\n\n  deleted.forEach((record) => {\n    // $FlowFixMe\n    recordsToBatch.push(record.prepareDestroyPermanently())\n  })\n\n  return recordsToBatch\n}\n\nconst destroyAllDeletedRecords = async (\n  db: Database,\n  recordsToApply: AllRecordsToApply,\n): Promise<void> => {\n  const promises = toPairs(recordsToApply).map(([tableName, { deletedRecordsToDestroy }]) =>\n    deletedRecordsToDestroy.length\n      ? db.adapter.destroyDeletedRecords((tableName: any), deletedRecordsToDestroy)\n      : null,\n  )\n  await Promise.all(promises)\n}\n\nconst applyAllRemoteChanges = async (\n  recordsToApply: AllRecordsToApply,\n  context: ApplyRemoteChangesContext,\n): Promise<void> => {\n  const { db } = context\n  const allRecords: Array<?Model> = []\n  toPairs(recordsToApply).forEach(([tableName, records]) => {\n    prepareApplyRemoteChangesToCollection(records, db.get((tableName: any)), context).forEach(\n      (record) => {\n        allRecords.push(record)\n      },\n    )\n  })\n  // $FlowFixMe\n  await db.batch(allRecords)\n}\n\n// See _unsafeBatchPerCollection - temporary fix\nconst unsafeApplyAllRemoteChangesByBatches = async (\n  recordsToApply: AllRecordsToApply,\n  context: ApplyRemoteChangesContext,\n): Promise<void> => {\n  const { db } = context\n  const promises = []\n  toPairs(recordsToApply).forEach(([tableName, records]) => {\n    const preparedModels: Array<?Model> = prepareApplyRemoteChangesToCollection(\n      records,\n      db.get((tableName: any)),\n      context,\n    )\n    splitEvery(5000, preparedModels).forEach((recordBatch) => {\n      promises.push(db.batch(recordBatch))\n    })\n  })\n  await Promise.all(promises)\n}\n\nexport default async function applyRemoteChanges(\n  remoteChanges: SyncDatabaseChangeSet,\n  context: ApplyRemoteChangesContext,\n): Promise<void> {\n  const { db, _unsafeBatchPerCollection } = context\n\n  const recordsToApply = await getAllRecordsToApply(remoteChanges, context)\n\n  // Perform steps concurrently\n  await Promise.all([\n    destroyAllDeletedRecords(db, recordsToApply),\n    _unsafeBatchPerCollection\n      ? unsafeApplyAllRemoteChangesByBatches(recordsToApply, context)\n      : applyAllRemoteChanges(recordsToApply, context),\n  ])\n}\n"
  },
  {
    "path": "src/sync/impl/fetchLocal.d.ts",
    "content": "import type { Database } from '../..'\n\nimport type { SyncLocalChanges } from '../index'\n\nexport default function fetchLocalChanges(db: Database): Promise<SyncLocalChanges>\n\nexport function hasUnsyncedChanges(db: Database): Promise<boolean>\n"
  },
  {
    "path": "src/sync/impl/fetchLocal.js",
    "content": "// @flow\n\nimport {\n  // $FlowFixMe\n  values,\n  identity,\n  unnest,\n  allPromises,\n  mapObj,\n} from '../../utils/fp'\nimport allPromisesObj from '../../utils/fp/allPromisesObj'\nimport type { Database, Collection, Model } from '../..'\nimport * as Q from '../../QueryDescription'\nimport { columnName } from '../../Schema'\n\nimport type { SyncTableChangeSet, SyncLocalChanges } from '../index'\n\n// NOTE: Two separate queries are faster than notEq(synced) on LokiJS\nconst createdQuery = Q.where(columnName('_status'), 'created')\nconst updatedQuery = Q.where(columnName('_status'), 'updated')\n\nasync function fetchLocalChangesForCollection<T: Model>(\n  collection: Collection<T>,\n): Promise<[SyncTableChangeSet, T[]]> {\n  const [createdRecords, updatedRecords, deletedRecords] = await Promise.all([\n    collection.query(createdQuery).fetch(),\n    collection.query(updatedQuery).fetch(),\n    collection.database.adapter.getDeletedRecords(collection.table),\n  ])\n  const changeSet = {\n    created: [],\n    updated: [],\n    deleted: deletedRecords,\n  }\n  // TODO: It would be best to omit _status, _changed fields, since they're not necessary for the server\n  // but this complicates markLocalChangesAsDone, since we don't have the exact copy to compare if record changed\n  // TODO: It would probably also be good to only send to server locally changed fields, not full records\n  // perf-critical - using mutation\n  createdRecords.forEach((record) => {\n    // $FlowFixMe\n    changeSet.created.push(Object.assign({}, record._raw))\n  })\n  updatedRecords.forEach((record) => {\n    // $FlowFixMe\n    changeSet.updated.push(Object.assign({}, record._raw))\n  })\n  const changedRecords = createdRecords.concat(updatedRecords)\n\n  return [changeSet, changedRecords]\n}\n\nexport default function fetchLocalChanges(db: Database): Promise<SyncLocalChanges> {\n  return db.read(async () => {\n    const changes = await allPromisesObj(mapObj(fetchLocalChangesForCollection, db.collections.map))\n    // TODO: deep-freeze changes object (in dev mode only) to detect mutations (user bug)\n    return {\n      // $FlowFixMe\n      changes: mapObj(([changeSet]) => changeSet)(changes),\n      affectedRecords: unnest(values(changes).map(([, records]) => records)),\n    }\n  }, 'sync-fetchLocalChanges')\n}\n\nexport function hasUnsyncedChanges(db: Database): Promise<boolean> {\n  // action is necessary to ensure other code doesn't make changes under our nose\n  return db.read(async () => {\n    // $FlowFixMe\n    const collections = values(db.collections.map)\n    const hasUnsynced = async (collection: Collection<any>) => {\n      const created = await collection.query(createdQuery).fetchCount()\n      const updated = await collection.query(updatedQuery).fetchCount()\n      const deleted = await db.adapter.getDeletedRecords(collection.table)\n      return created + updated + deleted.length > 0\n    }\n    // $FlowFixMe\n    const unsyncedFlags = await allPromises(hasUnsynced, collections)\n    return unsyncedFlags.some(identity)\n  }, 'sync-hasUnsyncedChanges')\n}\n"
  },
  {
    "path": "src/sync/impl/helpers.d.ts",
    "content": "import type { Model, Collection, Database } from '../..'\nimport type { RawRecord, DirtyRaw } from '../../RawRecord'\nimport type { SyncLog, SyncDatabaseChangeSet, SyncConflictResolver } from '../index'\n\n// Returns raw record with naive solution to a conflict based on local `_changed` field\n// This is a per-column resolution algorithm. All columns that were changed locally win\n// and will be applied on top of the remote version.\nexport function resolveConflict(local: RawRecord, remote: DirtyRaw): DirtyRaw\n\nexport function prepareCreateFromRaw<T extends Model = Model>(\n  collection: Collection<T>,\n  dirtyRaw: DirtyRaw,\n): T\n\nexport function prepareUpdateFromRaw<T extends Model = Model>(\n  record: T,\n  updatedDirtyRaw: DirtyRaw,\n  log?: SyncLog,\n  conflictResolver?: SyncConflictResolver,\n): T\n\nexport function prepareMarkAsSynced<T extends Model = Model>(record: T): T\n\nexport function ensureSameDatabase(database: Database, initialResetCount: number): void\n\nexport const isChangeSetEmpty: (_: SyncDatabaseChangeSet) => boolean\n\nexport const changeSetCount: (_: SyncDatabaseChangeSet) => number\n"
  },
  {
    "path": "src/sync/impl/helpers.js",
    "content": "// @flow\n\nimport { values } from '../../utils/fp'\nimport areRecordsEqual from '../../utils/fp/areRecordsEqual'\nimport { invariant } from '../../utils/common'\n\nimport type { Model, Collection, Database } from '../..'\nimport { type RawRecord, type DirtyRaw, sanitizedRaw } from '../../RawRecord'\nimport type { SyncLog, SyncDatabaseChangeSet, SyncConflictResolver } from '../index'\n\n// Returns raw record with naive solution to a conflict based on local `_changed` field\n// This is a per-column resolution algorithm. All columns that were changed locally win\n// and will be applied on top of the remote version.\nexport function resolveConflict(local: RawRecord, remote: DirtyRaw): DirtyRaw {\n  // We SHOULD NOT have a reference to a `deleted` record, but since it was locally\n  // deleted, there's nothing to update, since the local deletion will still be pushed to the server -- return raw as is\n  if (local._status === 'deleted') {\n    return local\n  }\n\n  // mutating code - performance-critical path\n  const resolved = {\n    // use local fields if remote is missing columns (shouldn't but just in case)\n    ...local,\n    // Note: remote MUST NOT have a _status of _changed fields (will replace them anyway just in case)\n    ...remote,\n    id: local.id,\n    _status: local._status,\n    _changed: local._changed,\n  }\n\n  // Use local properties where changed\n  local._changed.split(',').forEach((column) => {\n    resolved[column] = local[column]\n  })\n\n  return resolved\n}\n\nfunction replaceRaw(record: Model, dirtyRaw: DirtyRaw): void {\n  record._raw = sanitizedRaw(dirtyRaw, record.collection.schema)\n}\n\nexport function prepareCreateFromRaw<T: Model>(collection: Collection<T>, dirtyRaw: DirtyRaw): T {\n  // TODO: Think more deeply about this - it's probably unnecessary to do this check, since it would\n  // mean malicious sync server, which is a bigger problem\n  invariant(\n    // $FlowFixMe\n    !Object.prototype.hasOwnProperty.call(dirtyRaw, '__proto__'),\n    'Malicious dirtyRaw detected - contains a __proto__ key',\n  )\n  const raw = Object.assign({}, dirtyRaw, { _status: 'synced', _changed: '' }) // faster than object spread\n  return collection.prepareCreateFromDirtyRaw(raw)\n}\n\n// optimization - don't run DB update if received record is the same as local\n// (this happens a lot during replacement sync)\nexport function requiresUpdate<T: Model>(\n  collection: Collection<T>,\n  local: RawRecord,\n  dirtyRemote: DirtyRaw,\n): boolean {\n  if (local._status !== 'synced') {\n    return true\n  }\n\n  const remote = sanitizedRaw(dirtyRemote, collection.schema)\n  remote._status = 'synced'\n\n  const canSkipSafely = areRecordsEqual(local, remote)\n  return !canSkipSafely\n}\n\nexport const recordFromRaw = <T: Model>(raw: RawRecord, collection: Collection<T>): T =>\n  collection._cache._modelForRaw(raw, false)\n\nexport function prepareUpdateFromRaw<T: Model>(\n  localRaw: RawRecord,\n  remoteDirtyRaw: DirtyRaw,\n  collection: Collection<T>,\n  log: ?SyncLog,\n  conflictResolver?: SyncConflictResolver,\n): ?T {\n  if (!requiresUpdate(collection, localRaw, remoteDirtyRaw)) {\n    return null\n  }\n\n  const local = recordFromRaw(localRaw, collection)\n\n  // Note COPY for log - only if needed\n  const logConflict = log && !!localRaw._changed\n  const logLocal = logConflict\n    ? {\n        // $FlowFixMe\n        ...localRaw,\n      }\n    : {}\n  const logRemote = logConflict ? { ...remoteDirtyRaw } : {}\n\n  let newRaw = resolveConflict(localRaw, remoteDirtyRaw)\n\n  if (conflictResolver) {\n    newRaw = conflictResolver(collection.table, localRaw, remoteDirtyRaw, newRaw)\n  }\n\n  // $FlowFixMe\n  return local.prepareUpdate(() => {\n    replaceRaw(local, newRaw)\n\n    // log resolved conflict - if any\n    if (logConflict && log) {\n      log.resolvedConflicts = log.resolvedConflicts || []\n      log.resolvedConflicts.push({\n        local: logLocal,\n        remote: logRemote,\n        // $FlowFixMe\n        resolved: { ...newRaw },\n      })\n    }\n  })\n}\n\nexport function prepareMarkAsSynced<T: Model>(record: T): T {\n  // $FlowFixMe\n  const newRaw = Object.assign({}, record._raw, { _status: 'synced', _changed: '' }) // faster than object spread\n  // $FlowFixMe\n  return record.prepareUpdate(() => {\n    replaceRaw(record, newRaw)\n  })\n}\n\nexport function ensureSameDatabase(database: Database, initialResetCount: number): void {\n  invariant(\n    database._resetCount === initialResetCount,\n    `[Sync] Sync aborted because database was reset`,\n  )\n}\n\nexport const isChangeSetEmpty: (SyncDatabaseChangeSet) => boolean = (changeset) =>\n  values(changeset).every(\n    ({ created, updated, deleted }) => created.length + updated.length + deleted.length === 0,\n  )\n\nconst sum: (number[]) => number = (xs) => xs.reduce((a, b) => a + b, 0)\nexport const changeSetCount: (SyncDatabaseChangeSet) => number = (changeset) =>\n  sum(\n    values(changeset).map(\n      ({ created, updated, deleted }) => created.length + updated.length + deleted.length,\n    ),\n  )\n"
  },
  {
    "path": "src/sync/impl/index.d.ts",
    "content": "import { $Exact } from '../../types'\nimport type { Database } from '../..'\n\nimport type { Timestamp, SyncLog } from '../index'\nimport type { SchemaVersion } from '../../Schema'\nimport type { MigrationSyncChanges } from '../../Schema/migrations/getSyncChanges'\n\nexport { default as applyRemoteChanges } from './applyRemote'\nexport { default as fetchLocalChanges, hasUnsyncedChanges } from './fetchLocal'\nexport { default as markLocalChangesAsSynced } from './markAsSynced'\n\nexport function getLastPulledAt(database: Database): Promise<Timestamp | null>\n\nexport function setLastPulledAt(database: Database, timestamp: Timestamp): Promise<void>\n\nexport function getLastPulledSchemaVersion(database: Database): Promise<SchemaVersion | null>\n\nexport function setLastPulledSchemaVersion(\n  database: Database,\n  version: SchemaVersion,\n): Promise<void>\n\ntype MigrationInfo = $Exact<{\n  schemaVersion: SchemaVersion\n  migration: MigrationSyncChanges\n  shouldSaveSchemaVersion: boolean\n}>\n\nexport function getMigrationInfo(\n  database: Database,\n  log?: SyncLog,\n  lastPulledAt?: Timestamp,\n  migrationsEnabledAtVersion?: SchemaVersion,\n): Promise<MigrationInfo>\n"
  },
  {
    "path": "src/sync/impl/index.js",
    "content": "// @flow\n\nimport type { Database } from '../..'\nimport { invariant, logError, logger } from '../../utils/common'\n\nimport type { Timestamp, SyncLog } from '../index'\nimport type { SchemaVersion } from '../../Schema'\nimport getSyncChanges, { type MigrationSyncChanges } from '../../Schema/migrations/getSyncChanges'\n\nexport { default as applyRemoteChanges } from './applyRemote'\nexport { default as fetchLocalChanges, hasUnsyncedChanges } from './fetchLocal'\nexport { default as markLocalChangesAsSynced } from './markAsSynced'\n\nconst lastPulledAtKey = '__watermelon_last_pulled_at'\nconst lastPulledSchemaVersionKey = '__watermelon_last_pulled_schema_version'\n\nexport async function getLastPulledAt(database: Database): Promise<?Timestamp> {\n  return parseInt(await database.adapter.getLocal(lastPulledAtKey), 10) || null\n}\n\nexport async function setLastPulledAt(database: Database, timestamp: Timestamp): Promise<void> {\n  const previousTimestamp = (await getLastPulledAt(database)) || 0\n  if (timestamp < previousTimestamp) {\n    logError(\n      `[Sync] Pull has finished and received server time ${timestamp} — but previous pulled-at time was greater - ${previousTimestamp}. This is most likely server bug.`,\n    )\n  }\n\n  await database.adapter.setLocal(lastPulledAtKey, `${timestamp}`)\n}\n\nexport async function getLastPulledSchemaVersion(database: Database): Promise<?SchemaVersion> {\n  return parseInt(await database.adapter.getLocal(lastPulledSchemaVersionKey), 10) || null\n}\n\nexport async function setLastPulledSchemaVersion(\n  database: Database,\n  version: SchemaVersion,\n): Promise<void> {\n  await database.adapter.setLocal(lastPulledSchemaVersionKey, `${version}`)\n}\n\ntype MigrationInfo = $Exact<{\n  schemaVersion: SchemaVersion,\n  migration: MigrationSyncChanges,\n  shouldSaveSchemaVersion: boolean,\n}>\n\nexport async function getMigrationInfo(\n  database: Database,\n  log: ?SyncLog,\n  lastPulledAt: ?Timestamp,\n  migrationsEnabledAtVersion: ?SchemaVersion,\n): Promise<MigrationInfo> {\n  const isFirstSync = !lastPulledAt\n  const schemaVersion = database.schema.version\n\n  const lastPulledSchemaVersion = await getLastPulledSchemaVersion(database)\n  log && (log.lastPulledSchemaVersion = lastPulledSchemaVersion)\n\n  const areMigrationsEnabled = !!migrationsEnabledAtVersion\n  const { migrations } = database.adapter\n  if (lastPulledSchemaVersion && isFirstSync) {\n    logError(\n      '[Sync] lastPulledSchemaVersion is set, but this is the first sync. This most likely means that the backend does not return a correct timestamp',\n    )\n  }\n  if (areMigrationsEnabled) {\n    invariant(\n      typeof migrationsEnabledAtVersion === 'number' && migrationsEnabledAtVersion >= 1,\n      '[Sync] Invalid migrationsEnabledAtVersion',\n    )\n    invariant(\n      migrationsEnabledAtVersion <= schemaVersion,\n      '[Sync] migrationsEnabledAtVersion must not be greater than current schema version',\n    )\n    invariant(\n      migrations,\n      '[Sync] Migration syncs cannot be enabled on a database that does not support migrations',\n    )\n    invariant(\n      migrationsEnabledAtVersion >= migrations.minVersion,\n      `[Sync] migrationsEnabledAtVersion is too low - not possible to migrate from schema version ${migrationsEnabledAtVersion}`,\n    )\n    lastPulledSchemaVersion &&\n      invariant(\n        lastPulledSchemaVersion <= schemaVersion,\n        `[Sync] Last synced schema version (${lastPulledSchemaVersion}) is greater than current schema version (${schemaVersion}). This indicates programmer error`,\n      )\n  }\n\n  const migrateFrom = lastPulledSchemaVersion || migrationsEnabledAtVersion || 0\n  const shouldMigrate = areMigrationsEnabled && migrateFrom < schemaVersion && !isFirstSync\n  const migration =\n    migrations && shouldMigrate ? getSyncChanges(migrations, migrateFrom, schemaVersion) : null\n\n  log && (log.migration = migration)\n\n  if (migration) {\n    logger.log(`[Sync] Performing migration sync from ${migrateFrom} to ${schemaVersion}`)\n    if (!lastPulledSchemaVersion) {\n      logger.warn(\n        `[Sync] Using fallback initial schema version. The migration sync might not contain all necessary migrations`,\n      )\n    }\n  }\n\n  return {\n    schemaVersion,\n    migration,\n    shouldSaveSchemaVersion: shouldMigrate || isFirstSync,\n  }\n}\n"
  },
  {
    "path": "src/sync/impl/markAsSynced.d.ts",
    "content": "import type { Database, Model, TableName } from '../..'\n\nimport type { SyncLocalChanges, SyncRejectedIds } from '../index'\n\nexport default function markLocalChangesAsSynced(\n  db: Database,\n  syncedLocalChanges: SyncLocalChanges,\n  rejectedIds?: SyncRejectedIds,\n): Promise<void>\n"
  },
  {
    "path": "src/sync/impl/markAsSynced.js",
    "content": "// @flow\n\nimport areRecordsEqual from '../../utils/fp/areRecordsEqual'\nimport { logError } from '../../utils/common'\nimport type { Database, Model, TableName } from '../..'\n\nimport { prepareMarkAsSynced } from './helpers'\nimport type { SyncLocalChanges, SyncRejectedIds } from '../index'\n\nconst recordsToMarkAsSynced = (\n  { changes, affectedRecords }: SyncLocalChanges,\n  allRejectedIds: SyncRejectedIds,\n): Model[] => {\n  const syncedRecords = []\n\n  Object.keys(changes).forEach((table) => {\n    const { created, updated } = changes[(table: any)]\n    const raws = created.concat(updated)\n    const rejectedIds = new Set(allRejectedIds[(table: any)])\n\n    raws.forEach((raw) => {\n      const { id } = raw\n      const record = affectedRecords.find((model) => model.id === id && model.table === table)\n      if (!record) {\n        logError(\n          `[Sync] Looking for record ${table}#${id} to mark it as synced, but I can't find it. Will ignore it (it should get synced next time). This is probably a Watermelon bug — please file an issue!`,\n        )\n        return\n      }\n      if (areRecordsEqual(record._raw, raw) && !rejectedIds.has(id)) {\n        syncedRecords.push(record)\n      }\n    })\n  })\n  return syncedRecords\n}\n\nconst destroyDeletedRecords = (\n  db: Database,\n  { changes }: SyncLocalChanges,\n  allRejectedIds: SyncRejectedIds,\n): Promise<any>[] =>\n  Object.keys(changes).map((_tableName) => {\n    const tableName: TableName<any> = (_tableName: any)\n    const rejectedIds = new Set(allRejectedIds[tableName])\n    const deleted = changes[tableName].deleted.filter((id) => !rejectedIds.has(id))\n    return deleted.length ? db.adapter.destroyDeletedRecords(tableName, deleted) : Promise.resolve()\n  })\n\nexport default function markLocalChangesAsSynced(\n  db: Database,\n  syncedLocalChanges: SyncLocalChanges,\n  rejectedIds?: ?SyncRejectedIds,\n): Promise<void> {\n  return db.write(async () => {\n    // update and destroy records concurrently\n    await Promise.all([\n      db.batch(\n        recordsToMarkAsSynced(syncedLocalChanges, rejectedIds || {}).map(prepareMarkAsSynced),\n      ),\n      ...destroyDeletedRecords(db, syncedLocalChanges, rejectedIds || {}),\n    ])\n  }, 'sync-markLocalChangesAsSynced')\n}\n"
  },
  {
    "path": "src/sync/impl/synchronize.d.ts",
    "content": "import type { SyncArgs } from '../index'\n\nexport default function synchronize({\n  database,\n  pullChanges,\n  onDidPullChanges,\n  pushChanges,\n  sendCreatedAsUpdated,\n  migrationsEnabledAtVersion,\n  log,\n  conflictResolver,\n  _unsafeBatchPerCollection,\n  unsafeTurbo,\n}: SyncArgs): Promise<void>\n"
  },
  {
    "path": "src/sync/impl/synchronize.js",
    "content": "// @flow\n\nimport { invariant } from '../../utils/common'\n\nimport {\n  applyRemoteChanges,\n  fetchLocalChanges,\n  markLocalChangesAsSynced,\n  getLastPulledAt,\n  setLastPulledAt,\n  setLastPulledSchemaVersion,\n  getMigrationInfo,\n} from './index'\nimport { ensureSameDatabase, isChangeSetEmpty, changeSetCount } from './helpers'\nimport type { SyncArgs, Timestamp, SyncPullStrategy } from '../index'\n\nexport default async function synchronize({\n  database,\n  pullChanges,\n  onWillApplyRemoteChanges,\n  onDidPullChanges,\n  pushChanges,\n  sendCreatedAsUpdated = false,\n  migrationsEnabledAtVersion,\n  log,\n  conflictResolver,\n  _unsafeBatchPerCollection,\n  unsafeTurbo,\n}: SyncArgs): Promise<void> {\n  const resetCount = database._resetCount\n  log && (log.startedAt = new Date())\n  log && (log.phase = 'starting')\n\n  // TODO: Wrap the three computionally intensive phases in `requestIdleCallback`\n\n  // pull phase\n  const lastPulledAt = await getLastPulledAt(database)\n  log && (log.lastPulledAt = lastPulledAt)\n\n  const { schemaVersion, migration, shouldSaveSchemaVersion } = await getMigrationInfo(\n    database,\n    log,\n    lastPulledAt,\n    migrationsEnabledAtVersion,\n  )\n  log && (log.phase = 'ready to pull')\n\n  // $FlowFixMe\n  const pullResult = await pullChanges({\n    lastPulledAt,\n    schemaVersion,\n    migration,\n  })\n  log && (log.phase = 'pulled')\n\n  let newLastPulledAt: Timestamp = (pullResult: any).timestamp\n  const remoteChangeCount = pullResult.changes ? changeSetCount(pullResult.changes) : NaN\n\n  if (onWillApplyRemoteChanges) {\n    await onWillApplyRemoteChanges({ remoteChangeCount })\n  }\n\n  await database.write(async () => {\n    ensureSameDatabase(database, resetCount)\n    invariant(\n      lastPulledAt === (await getLastPulledAt(database)),\n      '[Sync] Concurrent synchronization is not allowed. More than one synchronize() call was running at the same time, and the later one was aborted before committing results to local database.',\n    )\n\n    if (unsafeTurbo) {\n      invariant(\n        !_unsafeBatchPerCollection,\n        'unsafeTurbo must not be used with _unsafeBatchPerCollection',\n      )\n      invariant(\n        'syncJson' in pullResult || 'syncJsonId' in pullResult,\n        'missing syncJson/syncJsonId',\n      )\n      invariant(lastPulledAt === null, 'unsafeTurbo can only be used as the first sync')\n\n      const syncJsonId = pullResult.syncJsonId || Math.floor(Math.random() * 1000000000)\n\n      if (pullResult.syncJson) {\n        await database.adapter.provideSyncJson(syncJsonId, pullResult.syncJson)\n      }\n\n      const resultRest = await database.adapter.unsafeLoadFromSync(syncJsonId)\n      newLastPulledAt = resultRest.timestamp\n      onDidPullChanges && onDidPullChanges(resultRest)\n    }\n\n    log && (log.newLastPulledAt = newLastPulledAt)\n    invariant(\n      typeof newLastPulledAt === 'number' && newLastPulledAt > 0,\n      `pullChanges() returned invalid timestamp ${newLastPulledAt}. timestamp must be a non-zero number`,\n    )\n\n    if (!unsafeTurbo) {\n      // $FlowFixMe\n      const { changes: remoteChanges, ...resultRest } = pullResult\n      log && (log.remoteChangeCount = remoteChangeCount)\n      // $FlowFixMe\n      await applyRemoteChanges(remoteChanges, {\n        db: database,\n        strategy: ((pullResult: any).experimentalStrategy: ?SyncPullStrategy),\n        sendCreatedAsUpdated,\n        log,\n        conflictResolver,\n        _unsafeBatchPerCollection,\n      })\n      onDidPullChanges && onDidPullChanges(resultRest)\n    }\n\n    log && (log.phase = 'applied remote changes')\n    await setLastPulledAt(database, newLastPulledAt)\n\n    if (shouldSaveSchemaVersion) {\n      await setLastPulledSchemaVersion(database, schemaVersion)\n    }\n  }, 'sync-synchronize-apply')\n\n  // push phase\n  if (pushChanges) {\n    log && (log.phase = 'ready to fetch local changes')\n\n    const localChanges = await fetchLocalChanges(database)\n    log && (log.localChangeCount = changeSetCount(localChanges.changes))\n    log && (log.phase = 'fetched local changes')\n\n    ensureSameDatabase(database, resetCount)\n    if (!isChangeSetEmpty(localChanges.changes)) {\n      log && (log.phase = 'ready to push')\n      const pushResult =\n        (await pushChanges({ changes: localChanges.changes, lastPulledAt: newLastPulledAt })) || {}\n      log && (log.phase = 'pushed')\n      log && (log.rejectedIds = pushResult.experimentalRejectedIds)\n\n      ensureSameDatabase(database, resetCount)\n      await markLocalChangesAsSynced(database, localChanges, pushResult.experimentalRejectedIds)\n      log && (log.phase = 'marked local changes as synced')\n    }\n  } else {\n    log && (log.phase = 'pushChanges not defined')\n  }\n\n  log && (log.finishedAt = new Date())\n  log && (log.phase = 'done')\n}\n"
  },
  {
    "path": "src/sync/index.d.ts",
    "content": "import { $Exact } from '../types'\n\nimport type { Database, RecordId, TableName, Model } from '..'\nimport type { DirtyRaw } from '../RawRecord'\n\nimport type { SchemaVersion } from '../Schema'\nimport type { MigrationSyncChanges } from '../Schema/migrations/getSyncChanges'\n\nexport type Timestamp = number\n\nexport type SyncTableChangeSet = $Exact<{\n  created: DirtyRaw[]\n  updated: DirtyRaw[]\n  deleted: RecordId[]\n}>\nexport type SyncDatabaseChangeSet = { [tableName: TableName<any>]: SyncTableChangeSet }\n\nexport type SyncLocalChanges = $Exact<{ changes: SyncDatabaseChangeSet; affectedRecords: Model[] }>\n\nexport type SyncPullArgs = $Exact<{\n  lastPulledAt?: Timestamp\n  schemaVersion: SchemaVersion\n  migration: MigrationSyncChanges\n}>\nexport type SyncPullResult =\n  | $Exact<{ changes: SyncDatabaseChangeSet; timestamp: Timestamp }>\n  | $Exact<{ syncJson: string }>\n  | $Exact<{ syncJsonId: number }>\n\nexport type SyncRejectedIds = { [tableName: TableName<any>]: RecordId[] }\n\nexport type SyncPushArgs = $Exact<{ changes: SyncDatabaseChangeSet; lastPulledAt: Timestamp }>\n\nexport type SyncPushResult = $Exact<{ experimentalRejectedIds?: SyncRejectedIds }>\n\ntype SyncConflict = $Exact<{ local: DirtyRaw; remote: DirtyRaw; resolved: DirtyRaw }>\nexport type SyncLog = {\n  startedAt?: Date\n  lastPulledAt?: number\n  lastPulledSchemaVersion?: SchemaVersion\n  migration?: MigrationSyncChanges\n  newLastPulledAt?: number\n  resolvedConflicts?: SyncConflict[]\n  rejectedIds?: SyncRejectedIds\n  finishedAt?: Date\n  remoteChangeCount?: number\n  localChangeCount?: number\n  phase?: string // NOTE: an textual information, not a stable API!\n  error?: Error\n}\n\nexport type SyncConflictResolver = (\n  table: TableName<any>,\n  local: DirtyRaw,\n  remote: DirtyRaw,\n  resolved: DirtyRaw,\n) => DirtyRaw\n\nexport type SyncArgs = $Exact<{\n  database: Database\n  pullChanges: (_: SyncPullArgs) => Promise<SyncPullResult>\n  pushChanges?: (_: SyncPushArgs) => Promise<SyncPushResult | undefined | void>\n  // version at which support for migration syncs was added - the version BEFORE first syncable migration\n  migrationsEnabledAtVersion?: SchemaVersion\n  sendCreatedAsUpdated?: boolean\n  log?: SyncLog\n  // Advanced (unsafe) customization point. Useful when you have subtle invariants between multiple\n  // columns and want to have them updated consistently, or to implement partial sync\n  // It's called for every record being updated locally, so be sure that this function is FAST.\n  // If you don't want to change default behavior for a given record, return `resolved` as is\n  // Note that it's safe to mutate `resolved` object, so you can skip copying it for performance.\n  conflictResolver?: SyncConflictResolver\n  // commits changes in multiple batches, and not one - temporary workaround for memory issue\n  _unsafeBatchPerCollection?: boolean\n  // Advanced optimization - pullChanges must return syncJson or syncJsonId to be processed by native code.\n  // This can only be used on initial (login) sync, not for incremental syncs.\n  // This can only be used with SQLiteAdapter with JSI enabled.\n  // The exact API may change between versions of WatermelonDB.\n  // See documentation for more details.\n  unsafeTurbo?: boolean\n  // Called after pullChanges with whatever was returned by pullChanges, minus `changes`. Useful\n  // when using turbo mode\n  onDidPullChanges?: (_: Object) => Promise<void>\n  // Called after pullChanges is done, but before these changes are applied. Some stats about the pulled\n  // changes are passed as arguments. An advanced user can use this for example to show some UI to the user\n  // when processing a very large sync (could be useful for replacement syncs). Note that remote change count\n  // is NaN in turbo mode.\n  onWillApplyRemoteChanges?: (info: $Exact<{ remoteChangeCount: number }>) => Promise<void>\n}>\n\nexport function synchronize(args: SyncArgs): Promise<void>\n\nexport function hasUnsyncedChanges({ database }: $Exact<{ database: Database }>): Promise<boolean>\n"
  },
  {
    "path": "src/sync/index.js",
    "content": "// @flow\n\nimport type { Database, RecordId, TableName, Model } from '..'\nimport type { Where } from '../QueryDescription'\nimport { type DirtyRaw } from '../RawRecord'\n\nimport type { SchemaVersion } from '../Schema'\nimport { type MigrationSyncChanges } from '../Schema/migrations/getSyncChanges'\n\nexport type Timestamp = number\n\nexport type SyncTableChangeSet = $Exact<{\n  created: DirtyRaw[],\n  updated: DirtyRaw[],\n  deleted: RecordId[],\n}>\nexport type SyncDatabaseChangeSet = { [TableName<any>]: SyncTableChangeSet }\n\nexport type SyncLocalChanges = $Exact<{ changes: SyncDatabaseChangeSet, affectedRecords: Model[] }>\n\nexport type SyncPullArgs = $Exact<{\n  lastPulledAt: ?Timestamp,\n  schemaVersion: SchemaVersion,\n  migration: MigrationSyncChanges,\n}>\nexport type SyncPullStrategyType =\n  // Standard sync strategy (default)\n  | 'incremental'\n  // Advanced alternative strategy: indicates that `changes` contains a full dataset (same as during\n  // initial sync). Local records not present in the changeset will be deleted. Other records will be\n  // applied as usual (created, updated, local update conflicts resolved).\n  // This is useful to recover from a corrupted local database, or to deal with very large state changes\n  // such that server doesn't know how to efficiently send incremental changes and wants to send a full\n  // changeset instead.\n  // See docs for more details.\n  | 'replacement'\nexport type SyncPullStrategy =\n  | SyncPullStrategyType\n  | $Exact<{\n      default: SyncPullStrategyType,\n      override: { [TableName<any>]: SyncPullStrategyType },\n      experimentalQueryRecordsForReplacement?: {\n        [TableName<any>]: () => Where[],\n      },\n    }>\n\nexport type SyncPullResult =\n  | $Exact<{\n      changes: SyncDatabaseChangeSet,\n      timestamp: Timestamp,\n      experimentalStrategy?: SyncPullStrategy,\n    }>\n  | $Exact<{ syncJson: string }>\n  | $Exact<{ syncJsonId: number }>\n\nexport type SyncRejectedIds = { [TableName<any>]: RecordId[] }\n\nexport type SyncPushArgs = $Exact<{ changes: SyncDatabaseChangeSet, lastPulledAt: Timestamp }>\n\nexport type SyncPushResult = $Exact<{ experimentalRejectedIds?: SyncRejectedIds }>\n\ntype SyncConflict = $Exact<{ local: DirtyRaw, remote: DirtyRaw, resolved: DirtyRaw }>\nexport type SyncLog = {\n  startedAt?: Date,\n  lastPulledAt?: ?number,\n  lastPulledSchemaVersion?: ?SchemaVersion,\n  migration?: ?MigrationSyncChanges,\n  newLastPulledAt?: number,\n  resolvedConflicts?: SyncConflict[],\n  rejectedIds?: SyncRejectedIds,\n  finishedAt?: Date,\n  remoteChangeCount?: number,\n  localChangeCount?: number,\n  phase?: string, // NOTE: an textual information, not a stable API!\n  error?: Error,\n}\n\nexport type SyncConflictResolver = (\n  table: TableName<any>,\n  local: DirtyRaw,\n  remote: DirtyRaw,\n  resolved: DirtyRaw,\n) => DirtyRaw\n\n// TODO: JSDoc'ify this\nexport type SyncArgs = $Exact<{\n  database: Database,\n  pullChanges: (SyncPullArgs) => Promise<SyncPullResult>,\n  pushChanges?: (SyncPushArgs) => Promise<?SyncPushResult>,\n  // version at which support for migration syncs was added - the version BEFORE first syncable migration\n  migrationsEnabledAtVersion?: SchemaVersion,\n  sendCreatedAsUpdated?: boolean,\n  log?: SyncLog,\n  // Advanced (unsafe) customization point. Useful when you have subtle invariants between multiple\n  // columns and want to have them updated consistently, or to implement partial sync\n  // It's called for every record being updated locally, so be sure that this function is FAST.\n  // If you don't want to change default behavior for a given record, return `resolved` as is\n  // Note that it's safe to mutate `resolved` object, so you can skip copying it for performance.\n  conflictResolver?: SyncConflictResolver,\n  // commits changes in multiple batches, and not one - temporary workaround for memory issue\n  _unsafeBatchPerCollection?: boolean,\n  // Advanced optimization - pullChanges must return syncJson or syncJsonId to be processed by native code.\n  // This can only be used on initial (login) sync, not for incremental syncs.\n  // This can only be used with SQLiteAdapter with JSI enabled.\n  // The exact API may change between versions of WatermelonDB.\n  // See documentation for more details.\n  unsafeTurbo?: boolean,\n  // Called after changes are pulled with whatever was returned by pullChanges, minus `changes`. Useful\n  // when using turbo mode\n  onDidPullChanges?: (Object) => Promise<void>,\n  // Called after pullChanges is done, but before these changes are applied. Some stats about the pulled\n  // changes are passed as arguments. An advanced user can use this for example to show some UI to the user\n  // when processing a very large sync (could be useful for replacement syncs). Note that remote change count\n  // is NaN in turbo mode.\n  onWillApplyRemoteChanges?: (info: $Exact<{ remoteChangeCount: number }>) => Promise<void>,\n}>\n\n/**\n * Synchronizes database with a remote server\n *\n * See docs for more details\n */\nexport async function synchronize(args: SyncArgs): Promise<void> {\n  try {\n    const synchronizeImpl = require('./impl/synchronize').default\n    await synchronizeImpl(args)\n  } catch (error) {\n    args.log && (args.log.error = error)\n    throw error\n  }\n}\n\n/**\n * Returns `true` if database has any unsynced changes.\n *\n * Use this to check if you can safely log out (delete the database)\n */\nexport function hasUnsyncedChanges({ database }: $Exact<{ database: Database }>): Promise<boolean> {\n  return require('./impl').hasUnsyncedChanges(database)\n}\n"
  },
  {
    "path": "src/types.d.ts",
    "content": "export type $Shape<T> = T\n\nexport type $NonMaybeType<T> = T\n\nexport type $ObjMap<O, T> = { [K in keyof O]: T }\n\nexport type $Exact<Type> = Type\n\nexport type $RE<Type> = Readonly<$Exact<Type>>\n\nexport type $Keys<Type> = { k: keyof Type }\n\nexport type Array<Type> = Type[]\n\n// TODO: FIX TS\nexport type $Call<F, T> = any\n\nexport type $ReadOnlyArray<T> = T[]\n\nexport type Class<T> = new (...args: any[]) => T\n"
  },
  {
    "path": "src/types.js",
    "content": "// @flow\n\n// TODO: Move more of the basic Watermelon types here\n\nexport type $RE<Type> = $ReadOnly<$Exact<Type>>\n"
  },
  {
    "path": "src/utils/common/connectionTag/index.d.ts",
    "content": "// @flow\n\nexport type ConnectionTag = number\n\nexport default function connectionTag(): ConnectionTag\n"
  },
  {
    "path": "src/utils/common/connectionTag/index.js",
    "content": "// @flow\n\nexport opaque type ConnectionTag: number = number\n\nlet previousTag = 0\n\nexport default function connectionTag(): ConnectionTag {\n  previousTag += 1\n  return previousTag\n}\n"
  },
  {
    "path": "src/utils/common/deepFreeze/index.d.ts",
    "content": "// Deep-freezes an object, but DOES NOT handle cycles\nexport default function deepFreeze<T = Object>(object: T): T\n"
  },
  {
    "path": "src/utils/common/deepFreeze/index.js",
    "content": "// @flow\n\nimport invariant from '../invariant'\n\n// Deep-freezes an object, but DOES NOT handle cycles\nexport default function deepFreeze<T: Object>(object: T): T {\n  invariant(object && typeof object === 'object', 'Invalid attempt to deepFreeze not-an-Object')\n\n  Object.getOwnPropertyNames(object).forEach((name: string) => {\n    const value = object[name]\n\n    if (value && typeof value === 'object') {\n      deepFreeze(value)\n    }\n  })\n\n  return Object.freeze(object)\n}\n"
  },
  {
    "path": "src/utils/common/deepFreeze/test.js",
    "content": "import deepFreeze from './index'\n\ndescribe('deepFreeze', () => {\n  it('can deep freeze an object', () => {\n    const obj = { foo: { bar: [], baz: { blah: 1 } } }\n    const second = deepFreeze(obj)\n    expect(second).toBe(obj)\n    expect(obj.foo.baz.blah).toBe(1)\n    expect(() => {\n      obj.foo = {}\n    }).toThrow()\n    expect(() => {\n      obj.foo.bar.push(1)\n    }).toThrow()\n    expect(() => {\n      obj.foo.baz.blah = 2\n    }).toThrow()\n    expect(obj.foo.baz.blah).toBe(1)\n    expect(obj.foo.bar.length).toBe(0)\n  })\n})\n"
  },
  {
    "path": "src/utils/common/deprecated/index.d.ts",
    "content": "export default function deprecated(name: string, deprecationInfo: string): void\n"
  },
  {
    "path": "src/utils/common/deprecated/index.js",
    "content": "// @flow\n\nimport logger from '../logger'\n\nconst deprecationsReported: { [string]: boolean } = {}\n\nexport default function deprecated(name: string, deprecationInfo: string): void {\n  if (!deprecationsReported[name]) {\n    deprecationsReported[name] = true\n    logger.warn(\n      `DEPRECATION: ${name} is deprecated. ${deprecationInfo} See changelog & docs for more info.`,\n    )\n  }\n}\n"
  },
  {
    "path": "src/utils/common/devMeasureTime/index.d.ts",
    "content": "export const getPreciseTime: () => number\n\nexport function devMeasureTime<T>(executeBlock: () => T): [T, number]\n\nexport function devMeasureTimeAsync<T>(executeBlock: () => Promise<T>): Promise<[T, number]>\n"
  },
  {
    "path": "src/utils/common/devMeasureTime/index.js",
    "content": "// @flow\n\nconst getPreciseTimeFunction: () => () => number = () => {\n  if (typeof global !== 'undefined' && global.nativePerformanceNow) {\n    return global.nativePerformanceNow\n  } else if (typeof window !== 'undefined' && window.performance && window.performance.now) {\n    return window.performance.now.bind(window.performance)\n  }\n\n  // $FlowFixMe\n  return Date.now\n}\nconst getPreciseTime: () => number = getPreciseTimeFunction()\n\nexport { getPreciseTime }\n\nexport function devMeasureTime<T>(executeBlock: () => T): [T, number] {\n  const start = getPreciseTime()\n  const result = executeBlock()\n  const time = getPreciseTime() - start\n  return [result, time]\n}\n\nexport async function devMeasureTimeAsync<T>(executeBlock: () => Promise<T>): Promise<[T, number]> {\n  const start = getPreciseTime()\n  const result = await executeBlock()\n  const time = getPreciseTime() - start\n  return [result, time]\n}\n"
  },
  {
    "path": "src/utils/common/diagnosticError/index.d.ts",
    "content": "export type DiagnosticErrorFunction = (_: string) => Error\n\nexport function useCustomDiagnosticErrorFunction(\n  diagnosticErrorFunction: DiagnosticErrorFunction,\n): void\n\nexport default function diagnosticError(errorMessage: string): Error\n"
  },
  {
    "path": "src/utils/common/diagnosticError/index.js",
    "content": "// @flow\n\nexport type DiagnosticErrorFunction = (string) => Error\nlet customDiagnosticErrorFunction: ?DiagnosticErrorFunction = null\n\n// Use this to replace default diagnosticError function to inject your custom logic\n// (e.g. only display errors in development, or log errors to external service)\nexport function useCustomDiagnosticErrorFunction(\n  diagnosticErrorFunction: DiagnosticErrorFunction,\n): void {\n  customDiagnosticErrorFunction = diagnosticErrorFunction\n}\n\nexport default function diagnosticError(errorMessage: string): Error {\n  if (customDiagnosticErrorFunction) {\n    return customDiagnosticErrorFunction(errorMessage)\n  }\n\n  const error: any = new Error(errorMessage)\n\n  // hides `diagnosticError` from RN stack trace\n  error.framesToPop = 1\n  error.name = 'Diagnostic error'\n\n  return error\n}\n"
  },
  {
    "path": "src/utils/common/ensureSync/index.d.ts",
    "content": "export default function ensureSync<T>(value: T): T\n"
  },
  {
    "path": "src/utils/common/ensureSync/index.js",
    "content": "// @flow\n\nimport invariant from '../invariant'\n\n// Throws if passed value is a Promise\n// Otherwise, returns the passed value as-is.\n//\n// Use to ensure API users aren't passing async functions\n\nexport default function ensureSync<T>(value: T): T {\n  invariant(\n    !(value instanceof Promise),\n    'Unexpected Promise. Passed function should be synchronous.',\n  )\n\n  return value\n}\n"
  },
  {
    "path": "src/utils/common/ensureSync/test.js",
    "content": "import ensureSync from './index'\n\ndescribe('ensureSync', () => {\n  it('passes values through', () => {\n    expect(ensureSync('hello')).toBe('hello')\n    expect(ensureSync(true)).toBe(true)\n    expect(ensureSync(null)).toBe(null)\n    expect(ensureSync(undefined)).toBe(undefined)\n  })\n  it('throws an error if Promise is returned', () => {\n    expect(() => ensureSync(Promise.resolve('hello'))).toThrow()\n    const asyncFunc = async () => 'blah'\n    expect(() => ensureSync(asyncFunc())).toThrow()\n  })\n})\n"
  },
  {
    "path": "src/utils/common/index.d.ts",
    "content": "export { getPreciseTime, devMeasureTime, devMeasureTimeAsync } from './devMeasureTime'\nexport { default as randomId } from './randomId'\nexport { default as makeDecorator } from './makeDecorator'\nexport { default as ensureSync } from './ensureSync'\nexport { default as invariant } from './invariant'\nexport { default as logError } from './logError'\nexport { default as logger } from './logger'\nexport { default as isRN } from './isRN'\nexport { default as deprecated } from './deprecated'\nexport { default as connectionTag } from './connectionTag'\nexport type { ConnectionTag } from './connectionTag'\n"
  },
  {
    "path": "src/utils/common/index.js",
    "content": "// @flow\n\nexport { getPreciseTime, devMeasureTime, devMeasureTimeAsync } from './devMeasureTime'\nexport { default as randomId } from './randomId'\nexport { default as makeDecorator } from './makeDecorator'\nexport { default as ensureSync } from './ensureSync'\nexport { default as invariant } from './invariant'\nexport { default as logError } from './logError'\nexport { default as logger } from './logger'\nexport { default as isRN } from './isRN'\nexport { default as deprecated } from './deprecated'\nexport { default as connectionTag } from './connectionTag'\nexport type { ConnectionTag } from './connectionTag'\n"
  },
  {
    "path": "src/utils/common/invariant/index.d.ts",
    "content": "import diagnosticError from '../diagnosticError'\n\nexport default function invariant(condition: any, errorMessage?: string): void\n"
  },
  {
    "path": "src/utils/common/invariant/index.js",
    "content": "// @flow\n\nimport diagnosticError from '../diagnosticError'\n\n// If `condition` is falsy, throws an Error with the passed message\n\nexport default function invariant(condition: any, errorMessage?: string): void {\n  if (!condition) {\n    const error: any = diagnosticError(errorMessage || 'Broken invariant')\n    error.framesToPop += 1\n    throw error\n  }\n}\n"
  },
  {
    "path": "src/utils/common/isRN/index.d.ts",
    "content": "declare const isRN: boolean\n\nexport default isRN\n"
  },
  {
    "path": "src/utils/common/isRN/index.js",
    "content": "// @flow\n\nexport default false\n"
  },
  {
    "path": "src/utils/common/isRN/index.native.js",
    "content": "// @flow\n\nexport default true\n"
  },
  {
    "path": "src/utils/common/logError/index.d.ts",
    "content": "export default function logError(errorMessage: string): void\n"
  },
  {
    "path": "src/utils/common/logError/index.js",
    "content": "// @flow\n\nimport diagnosticError from '../diagnosticError'\nimport logger from '../logger'\n\n// Logs an Error to the console with the given message\n//\n// Use when a *recoverable* error occurs (so you don't want it to throw)\n\nexport default function logError(errorMessage: string): void {\n  const error: any = diagnosticError(errorMessage)\n  error.framesToPop += 1\n\n  logger.error(error)\n}\n"
  },
  {
    "path": "src/utils/common/logger/index.d.ts",
    "content": "declare class Logger {\n  silent: boolean\n\n  debug(...messages: any[]): void\n\n  log(...messages: any[]): void\n\n  warn(...messages: any[]): void\n\n  error(...messages: any[]): void\n\n  silence(): void\n}\n\ndeclare const logger: Logger\n\nexport default logger\n"
  },
  {
    "path": "src/utils/common/logger/index.js",
    "content": "// @flow\n/* eslint-disable no-console */\n\nconst formatMessages = (messages: Array<any>) => {\n  const [first, ...other] = messages\n  return [typeof first === 'string' ? `[🍉] ${first}` : first, ...other]\n}\n\nclass Logger {\n  silent: boolean = false\n\n  debug(...messages: any[]): void {\n    !this.silent && console.debug(...formatMessages(messages))\n  }\n\n  log(...messages: any[]): void {\n    !this.silent && console.log(...formatMessages(messages))\n  }\n\n  warn(...messages: any[]): void {\n    !this.silent && console.warn(...formatMessages(messages))\n  }\n\n  error(...messages: any[]): void {\n    !this.silent && console.error(...formatMessages(messages))\n  }\n\n  silence(): void {\n    this.silent = true\n  }\n}\n\nexport default (new Logger(): Logger)\n"
  },
  {
    "path": "src/utils/common/makeDecorator/index.d.ts",
    "content": "export type Descriptor = Object\nexport type RawDecorator = (target: Object, key: string, descriptor: Descriptor) => Descriptor\nexport type Decorator = (...any: any[]) => Descriptor | RawDecorator\n\nexport default function makeDecorator(decorator: (...any: any[]) => RawDecorator): Decorator\n"
  },
  {
    "path": "src/utils/common/makeDecorator/index.js",
    "content": "// @flow\n\nexport type Descriptor = Object\nexport type RawDecorator = (target: Object, key: string, descriptor: Descriptor) => Descriptor\nexport type Decorator = (...any) => Descriptor | RawDecorator\n\n// Converts a function with signature `(args) => (target, key, descriptor)` to a decorator\n// that works both when called `@decorator foo` and with arguments, like `@decorator(arg) foo`\nexport default function makeDecorator(decorator: (...any) => RawDecorator): Decorator {\n  return (...args) => {\n    // Decorator called with an argument, JS expects a decorator function\n    if (args.length < 3) {\n      return decorator(...args)\n    }\n\n    // Decorator called without an argument, JS expects a descriptor object\n    return decorator()(...args)\n  }\n}\n"
  },
  {
    "path": "src/utils/common/memory/index.d.ts",
    "content": "type Callback = () => void\n\nexport function onLowMemory(callback: Callback): void\n\nexport function _triggerOnLowMemory(): void\n"
  },
  {
    "path": "src/utils/common/memory/index.js",
    "content": "// @flow\n\ntype Callback = () => void\nconst lowMemoryCallbacks: Callback[] = []\n\nexport function onLowMemory(callback: Callback): void {\n  lowMemoryCallbacks.push(callback)\n}\n\n// TODO: Not currently hooked up to anything\nexport function _triggerOnLowMemory(): void {\n  lowMemoryCallbacks.forEach((callback) => callback())\n}\n"
  },
  {
    "path": "src/utils/common/randomId/fallback.js",
    "content": "// @flow\n\nconst alphabet = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'\n\nexport default function fallbackRandomId(): string {\n  let id = ''\n  let v = 0\n  for (let i = 0; i < 16; i += 1) {\n    v = Math.floor(Math.random() * 62)\n    id += alphabet[v % 62]\n  }\n\n  return id\n}\n"
  },
  {
    "path": "src/utils/common/randomId/index.d.ts",
    "content": "declare let generator: () => string\n\nexport const setGenerator: (newGenerator: () => string) => void\n\nexport default generator\n"
  },
  {
    "path": "src/utils/common/randomId/index.js",
    "content": "// @flow\n\nimport randomId from './randomId'\n\nlet generator: () => string = randomId\n\n// NOTE: It's is only safe for the ID to contain [a-zA-Z0-9._]. It must not contain other characters\n// (especially '\"\\/$). Never, ever allow the ID to be set by the user w/o validating - this breaks security!\nexport const setGenerator = (newGenerator: () => string) => {\n  if (typeof newGenerator() !== 'string') {\n    throw new Error('RandomId generator function needs to return a string type.')\n  }\n  generator = newGenerator\n}\n\nexport default (): string => generator()\n"
  },
  {
    "path": "src/utils/common/randomId/randomId.js",
    "content": "// @flow\n/* eslint-disable no-bitwise */\n\nconst alphabet = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'\n\nconst randomNumbers = new Uint8Array(256)\nlet cur = 9999999\n\ndeclare var globalThis: WindowProxy\nfunction cryptoRandomId(): string {\n  let id = ''\n  let len = 0\n  let v = 0\n  while (len < 16) {\n    if (cur < 256) {\n      v = randomNumbers[cur] >> 2\n      cur++\n      if (v < 62) {\n        id += alphabet[v]\n        len++\n      }\n    } else {\n      globalThis.crypto.getRandomValues(randomNumbers)\n      cur = 0\n    }\n  }\n\n  return id\n}\n\nconst isCryptoAvailable: boolean = globalThis.crypto && globalThis.crypto.getRandomValues\nconst randomId: () => string = isCryptoAvailable ? cryptoRandomId : require('./fallback').default\n\nexport default randomId\n"
  },
  {
    "path": "src/utils/common/randomId/randomId.native.js",
    "content": "// @flow\n/* eslint-disable no-bitwise */\nimport { NativeModules } from 'react-native'\nimport nativeRandomId_v2 from './randomId_v2.native'\nimport nativeRandomId_fallback from './fallback'\n\nconst alphabet = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'\n\nlet randomNumbers = []\nlet cur = 9999999\n\n// TODO: This is 3-5x slower than Math.random()-based implementation\n// Should be migrated to JSI, or simply implemented fully in native\n// (bridging is the bottleneck)\nfunction nativeRandomId_v1(): string {\n  let id = ''\n  let len = 0\n  let v = 0\n  while (len < 16) {\n    if (cur < 256) {\n      v = randomNumbers[cur] >> 2\n      cur++\n      if (v < 62) {\n        id += alphabet[v]\n        len++\n      }\n    } else {\n      randomNumbers = NativeModules.WMDatabaseBridge.getRandomBytes(256)\n      cur = 0\n    }\n  }\n\n  return id\n}\n\nconst nativeRandomId: () => string = (() => {\n  if (NativeModules.WMDatabaseBridge?.getRandomIds) {\n    return nativeRandomId_v2\n  } else if (NativeModules.WMDatabaseBridge?.getRandomBytes) {\n    return nativeRandomId_v1\n  }\n  return nativeRandomId_fallback\n})()\n\nexport default nativeRandomId\n"
  },
  {
    "path": "src/utils/common/randomId/randomId_v2.native.js",
    "content": "// @flow\nimport { NativeModules } from 'react-native'\n\nlet randomIds = []\nlet cur = 9999\n\n// NOTE: This is 2x faster thn Math.random on iOS (6x faster than _v1)\n// Should be ported to Java too… or better yet, implemented in JSI\nexport default function nativeRandomId_v2(): string {\n  if (cur >= 64) {\n    randomIds = NativeModules.WMDatabaseBridge.getRandomIds().split(',')\n    cur = 0\n  }\n\n  return randomIds[cur++]\n}\n"
  },
  {
    "path": "src/utils/common/randomId/test.js",
    "content": "import randomId, { setGenerator } from './index'\n\ndescribe('randomId', () => {\n  it('generates a random string', () => {\n    const id1 = randomId()\n    expect(id1.length).toBe(16)\n\n    const id2 = randomId()\n    expect(id2).not.toBe(id1)\n  })\n  it('always generates a valid id', () => {\n    const alphabet = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'\n    for (let i = 0; i < 250; i += 1) {\n      const id = randomId()\n      expect(id.length).toBe(16)\n      expect(id.split('').every((char) => alphabet.includes(char))).toBe(true)\n    }\n  })\n\n  it('allows to override the generator function', () => {\n    const generator = () => new Date().getTime().toString().substr(1, 4)\n\n    setGenerator(generator)\n\n    expect(randomId().length).toBe(4)\n\n    const invalidGenerator = () => 5\n\n    expect(() => setGenerator(invalidGenerator)).toThrow()\n  })\n})\n"
  },
  {
    "path": "src/utils/fp/Result/index.d.ts",
    "content": "// @flow\nimport { $Exact } from '../../../types'\n\n// lightweight type-only Result (Success(T) | Error) monad\nexport type Result<T> = $Exact<{ value: T }> | $Exact<{ error: Error }>\n\nexport type ResultCallback<T> = (r: Result<T>) => void\n\nexport function toPromise<T>(withCallback: (r: ResultCallback<T>) => void): Promise<T>\n\nexport function fromPromise<T>(promise: Promise<T>, callback: ResultCallback<T>): void\n\nexport function mapValue<T, U>(mapper: (_: T) => U, result: Result<T>): Result<U>\n"
  },
  {
    "path": "src/utils/fp/Result/index.js",
    "content": "// @flow\n\n// lightweight type-only Result (Success(T) | Error) monad\nexport type Result<T> = $Exact<{ value: T }> | $Exact<{ error: Error }>\n\nexport type ResultCallback<T> = (Result<T>) => void\n\nexport function toPromise<T>(withCallback: (ResultCallback<T>) => void): Promise<T> {\n  return new Promise((resolve, reject) => {\n    withCallback((result) => {\n      if (result.error) {\n        reject(result.error)\n      }\n\n      // $FlowFixMe - yes, you do have a value\n      resolve(result.value)\n    })\n  })\n}\n\nexport function fromPromise<T>(promise: Promise<T>, callback: ResultCallback<T>): void {\n  promise.then(\n    (value) => callback({ value }),\n    (error) => callback({ error }),\n  )\n}\n\nexport function mapValue<T, U>(mapper: (T) => U, result: Result<T>): Result<U> {\n  if (result.error) {\n    return result\n  }\n\n  try {\n    return { value: mapper(result.value) }\n  } catch (error) {\n    return { error }\n  }\n}\n"
  },
  {
    "path": "src/utils/fp/allPass/index.d.ts",
    "content": "export default function allPass<T>(predicates: Array<(_: T) => boolean>): (__: T) => boolean\n"
  },
  {
    "path": "src/utils/fp/allPass/index.js",
    "content": "// @flow\n\nexport default function allPass<T>(predicates: Array<(T) => boolean>): (T) => boolean {\n  const len = predicates.length\n  return (obj) => {\n    for (let i = 0; i < len; i++) {\n      if (!predicates[i](obj)) {\n        return false\n      }\n    }\n    return true\n  }\n}\n"
  },
  {
    "path": "src/utils/fp/allPass/test.js",
    "content": "import allPass from './index'\n\ndescribe('allPass', () => {\n  it(`works correctly`, () => {\n    const isFoo = (x) => x.foo\n    const isBar = (x) => x.bar\n    expect(allPass([isFoo])({ foo: true })).toBe(true)\n    expect(allPass([isFoo])({ foo: true, bar: true })).toBe(true)\n    expect(allPass([isFoo])({ bar: true })).toBe(false)\n\n    expect(allPass([isBar])({ bar: true })).toBe(true)\n    expect(allPass([isBar])({ bar: true, foo: true })).toBe(true)\n    expect(allPass([isBar])({ foo: true })).toBe(false)\n\n    expect(allPass([isFoo, isBar])({})).toBe(false)\n    expect(allPass([isFoo, isBar])({ foo: true })).toBe(false)\n    expect(allPass([isFoo, isBar])({ bar: true })).toBe(false)\n    expect(allPass([isFoo, isBar])({ foo: true, bar: true })).toBe(true)\n\n    expect(allPass([])({})).toBe(true)\n  })\n})\n"
  },
  {
    "path": "src/utils/fp/allPromises/index.d.ts",
    "content": "export default function <T, U>(action: (_: T) => Promise<U>, promises: T[]): Promise<U[]>\n"
  },
  {
    "path": "src/utils/fp/allPromises/index.js",
    "content": "// @flow\n\nconst allPromises = <T, U>(action: (T) => Promise<U>, promises: T[]): Promise<U[]> =>\n  Promise.all(promises.map(action))\n\nexport default allPromises\n"
  },
  {
    "path": "src/utils/fp/allPromisesObj/index.d.ts",
    "content": "// @flow\n\nimport { Key } from 'react'\nimport { $ObjMap } from '../../../types'\n\ntype UnpackPromise = <T>(promise: Promise<T>) => T\n\nexport default function allPromisesObj<T, Key, Spec = { [key: string | number]: Promise<T> }>(\n  promisesObj: Spec,\n): Promise<$ObjMap<Spec, UnpackPromise>>\n"
  },
  {
    "path": "src/utils/fp/allPromisesObj/index.js",
    "content": "// @flow\n\ntype UnpackPromise = <T>(promise: Promise<T>) => T\n\nexport default function allPromisesObj<T, Key, Spec: { [Key]: Promise<T> }>(\n  promisesObj: Spec,\n  // $FlowFixMe\n): Promise<$ObjMap<Spec, UnpackPromise>> {\n  return new Promise((resolve, reject) => {\n    const keys = Object.keys(promisesObj)\n    const len = keys.length\n\n    Promise.all(Object.values(promisesObj)).then((result) => {\n      const resultObj: { [string]: mixed } = {}\n      for (let i = 0; i < len; i++) {\n        resultObj[keys[i]] = result[i]\n      }\n      // $FlowFixMe\n      resolve(resultObj)\n    }, reject)\n  })\n}\n"
  },
  {
    "path": "src/utils/fp/allPromisesObj/test.js",
    "content": "import allPromisesObj from './index'\n\ndescribe('allPromisesObj', () => {\n  it(`works correctly`, async () => {\n    const delayed = (ms) =>\n      new Promise((resolve) => {\n        setTimeout(() => resolve(ms), ms)\n      })\n\n    expect(\n      await allPromisesObj({\n        a: delayed(2),\n        b: delayed(1),\n        c: delayed(3),\n      }),\n    ).toEqual({\n      a: 2,\n      b: 1,\n      c: 3,\n    })\n  })\n})\n"
  },
  {
    "path": "src/utils/fp/anyPass/index.d.ts",
    "content": "export default function anyPass<T>(predicates: Array<(_: T) => boolean>): (__: T) => boolean\n"
  },
  {
    "path": "src/utils/fp/anyPass/index.js",
    "content": "// @flow\n\nexport default function anyPass<T>(predicates: Array<(T) => boolean>): (T) => boolean {\n  const len = predicates.length\n  return (obj) => {\n    for (let i = 0; i < len; i++) {\n      if (predicates[i](obj)) {\n        return true\n      }\n    }\n    return false\n  }\n}\n"
  },
  {
    "path": "src/utils/fp/anyPass/test.js",
    "content": "import anyPass from './index'\n\ndescribe('anyPass', () => {\n  it(`works correctly`, () => {\n    const isFoo = (x) => x.foo\n    const isBar = (x) => x.bar\n    expect(anyPass([isFoo])({ foo: true })).toBe(true)\n    expect(anyPass([isFoo])({ bar: true })).toBe(false)\n\n    expect(anyPass([isBar])({ bar: true })).toBe(true)\n    expect(anyPass([isBar])({ foo: true })).toBe(false)\n\n    expect(anyPass([isFoo, isBar])({})).toBe(false)\n    expect(anyPass([isFoo, isBar])({ foo: true })).toBe(true)\n    expect(anyPass([isFoo, isBar])({ bar: true })).toBe(true)\n    expect(anyPass([isFoo, isBar])({ foo: true, bar: true })).toBe(true)\n\n    expect(anyPass([])({})).toBe(false)\n  })\n})\n"
  },
  {
    "path": "src/utils/fp/areRecordsEqual/index.d.ts",
    "content": "// @flow\n\n// NOTE: Only use with records! Not guaranteed to work correctly if keys have undefineds as values\nexport default function areRecordsEqual<T = {}>(left: T, right: T): boolean\n"
  },
  {
    "path": "src/utils/fp/areRecordsEqual/index.js",
    "content": "// @flow\n\n// NOTE: Only use with records! Not guaranteed to work correctly if keys have undefineds as values\nexport default function areRecordsEqual<T: {}>(left: T, right: T): boolean {\n  if (left === right) {\n    return true\n  }\n\n  const leftKeys = Object.keys(left)\n  const leftKeysLen = leftKeys.length\n\n  if (leftKeysLen !== Object.keys(right).length) {\n    return false\n  }\n\n  let key\n  for (let i = 0; i < leftKeysLen; i++) {\n    key = leftKeys[i]\n    if (left[key] !== right[key]) {\n      return false\n    }\n  }\n  return true\n}\n"
  },
  {
    "path": "src/utils/fp/areRecordsEqual/test.js",
    "content": "import areRecordsEqual from './index'\n\ndescribe('areRecordsEqual', () => {\n  it(`works correctly`, () => {\n    expect(areRecordsEqual({}, {})).toBe(true)\n    expect(areRecordsEqual({ a: 3.14, b: 'b', c: true }, { a: 3.14, b: 'b', c: true })).toBe(true)\n    expect(areRecordsEqual({ a: 3.14, b: 'b' }, { a: 3.14, b: 'c' })).toBe(false)\n    expect(areRecordsEqual({ a: 3.14, b: 'b' }, { a: 3.14 })).toBe(false)\n    expect(areRecordsEqual({ a: 3.14, b: false }, { a: 3.14 })).toBe(false)\n    expect(areRecordsEqual({ a: 3.14, b: null }, { a: 3.14 })).toBe(false)\n    expect(areRecordsEqual({ a: 3.14, b: undefined }, { a: 3.14 })).toBe(false)\n    expect(areRecordsEqual({ a: 3.14, b: undefined }, { a: 3.14, b: null })).toBe(false)\n    expect(areRecordsEqual({ a: 3.14, b: 0 }, { a: 3.14, b: '0' })).toBe(false)\n    expect(areRecordsEqual({ a: 3.14, b: 0 }, { a: 3.14, b: false })).toBe(false)\n  })\n})\n"
  },
  {
    "path": "src/utils/fp/arrayDifference/index.d.ts",
    "content": "// @flow\n\nimport { $Exact } from '../../../types'\n\nexport type ArrayDiff<T> = $Exact<{ added: T[]; removed: T[] }>\n\nexport default function <A, T = A>(previousList: T[], nextList: T[]): ArrayDiff<T>\n"
  },
  {
    "path": "src/utils/fp/arrayDifference/index.js",
    "content": "// @flow\n\nexport type ArrayDiff<T> = $Exact<{ added: T[], removed: T[] }>\n\nconst arrayDifference = <A, T: A>(previousList: T[], nextList: T[]): ArrayDiff<T> => {\n  const previous = new Set(previousList)\n  const next = new Set(nextList)\n  const added = []\n  const removed = []\n\n  let item\n  for (let i = 0, len = previousList.length; i < len; i++) {\n    item = previousList[i]\n    if (!next.has(item)) {\n      removed.push(item)\n    }\n  }\n\n  for (let i = 0, len = nextList.length; i < len; i++) {\n    item = nextList[i]\n    if (!previous.has(item)) {\n      added.push(item)\n    }\n  }\n\n  return { added, removed }\n}\n\nexport default arrayDifference\n"
  },
  {
    "path": "src/utils/fp/arrayDifference/test.js",
    "content": "import arrayDifference from './index'\n\ndescribe('arrayDifference', () => {\n  it('checks for differences between arrays', () => {\n    expect(arrayDifference([], [])).toEqual({ added: [], removed: [] })\n    expect(arrayDifference([null], [null])).toEqual({ added: [], removed: [] })\n    expect(arrayDifference([null], [])).toEqual({ added: [], removed: [null] })\n    expect(arrayDifference([], [null])).toEqual({ added: [null], removed: [] })\n    expect(arrayDifference([true], [false])).toEqual({ added: [false], removed: [true] })\n  })\n\n  it('checks for differences between arrays of ints', () => {\n    expect(arrayDifference([1], [])).toEqual({ added: [], removed: [1] })\n    expect(arrayDifference([1, 2], [])).toEqual({ added: [], removed: [1, 2] })\n    expect(arrayDifference([], [1])).toEqual({ added: [1], removed: [] })\n    expect(arrayDifference([], [1, 2])).toEqual({ added: [1, 2], removed: [] })\n    expect(arrayDifference([1, 2], [2, 3])).toEqual({ added: [3], removed: [1] })\n    expect(arrayDifference([1, 2, 3], [1, 2, 3])).toEqual({ added: [], removed: [] })\n    expect(arrayDifference([1, 2, 3], [4, 5, 6])).toEqual({ added: [4, 5, 6], removed: [1, 2, 3] })\n  })\n\n  it('checks for differences between arrays of strings', () => {\n    expect(arrayDifference([''], [''])).toEqual({ added: [], removed: [] })\n    expect(arrayDifference([''], [])).toEqual({ added: [], removed: [''] })\n    expect(arrayDifference([], [''])).toEqual({ added: [''], removed: [] })\n    expect(arrayDifference(['string'], [])).toEqual({ added: [], removed: ['string'] })\n    expect(arrayDifference([], ['string'])).toEqual({ added: ['string'], removed: [] })\n  })\n\n  it('checks for differences between arrays of objects', () => {\n    expect(arrayDifference([{}], [{}])).toEqual({ added: [{}], removed: [{}] })\n    expect(arrayDifference([{}], [])).toEqual({ added: [], removed: [{}] })\n    expect(arrayDifference([], [{}])).toEqual({ added: [{}], removed: [] })\n    expect(\n      arrayDifference(\n        [\n          {\n            name: 'Kornel',\n            isNasty: true,\n          },\n        ],\n        [\n          {\n            name: 'Kornel',\n            isNasty: true,\n          },\n        ],\n      ),\n    ).toEqual({\n      added: [\n        {\n          name: 'Kornel',\n          isNasty: true,\n        },\n      ],\n      removed: [\n        {\n          name: 'Kornel',\n          isNasty: true,\n        },\n      ],\n    })\n\n    expect(\n      arrayDifference(\n        [\n          {\n            name: 'Kornel',\n            isNasty: true,\n          },\n        ],\n        [\n          {\n            name: 'Kornel',\n            isNasty: false,\n          },\n        ],\n      ),\n    ).toEqual({\n      added: [\n        {\n          name: 'Kornel',\n          isNasty: false,\n        },\n      ],\n      removed: [\n        {\n          name: 'Kornel',\n          isNasty: true,\n        },\n      ],\n    })\n\n    expect(\n      arrayDifference(\n        [\n          {\n            name: 'Kornel',\n            isNasty: true,\n          },\n        ],\n        [],\n      ),\n    ).toEqual({\n      added: [],\n      removed: [\n        {\n          name: 'Kornel',\n          isNasty: true,\n        },\n      ],\n    })\n\n    expect(\n      arrayDifference(\n        [],\n        [\n          {\n            name: 'Kornel',\n            isNasty: false,\n          },\n        ],\n      ),\n    ).toEqual({\n      added: [\n        {\n          name: 'Kornel',\n          isNasty: false,\n        },\n      ],\n      removed: [],\n    })\n\n    expect(\n      arrayDifference(\n        [\n          {\n            name: 'Kornel',\n            isNasty: true,\n          },\n        ],\n        [\n          {\n            name: 'Kornel',\n            isNasty: false,\n          },\n        ],\n      ),\n    ).toEqual({\n      added: [\n        {\n          name: 'Kornel',\n          isNasty: false,\n        },\n      ],\n      removed: [\n        {\n          name: 'Kornel',\n          isNasty: true,\n        },\n      ],\n    })\n  })\n})\n"
  },
  {
    "path": "src/utils/fp/arrayOrSpread/index.d.ts",
    "content": "type _SpreadFn<Arg, Return> = (...args: Arg[]) => Return\ntype _ArrayFn<Arg, Return> = (args: Arg[]) => Return\n\n// This function takes either (...args: Arg[]) spread or (args: Arg[]) array argument\nexport type ArrayOrSpreadFn<Arg, Return> = _SpreadFn<Arg, Return> & _ArrayFn<Arg, Return>\n"
  },
  {
    "path": "src/utils/fp/arrayOrSpread/index.js",
    "content": "// @flow\nimport invariant from '../../common/invariant'\nimport logger from '../../common/logger'\n\n// Note: we have to write out three separate meanings of OnFunction because of a Babel bug\n// (it will remove the parentheses, changing the meaning of the flow type)\ntype _SpreadFn<Arg, Return> = (...args: $ReadOnlyArray<Arg>) => Return\ntype _ArrayFn<Arg, Return> = (args: $ReadOnlyArray<Arg>) => Return\n\n// This function takes either (...args: Arg[]) spread or (args: Arg[]) array argument\nexport type ArrayOrSpreadFn<Arg, Return> = _SpreadFn<Arg, Return> & _ArrayFn<Arg, Return>\n\n// This helper makes it easy to make functions that can take either spread or array arguments\nexport default function fromArrayOrSpread<Arg>(\n  args: any[],\n  debugName: string,\n  debugArgName: string,\n): Arg[] {\n  if (Array.isArray(args[0])) {\n    invariant(\n      args.length === 1,\n      `${debugName} should be called with either a list of '${debugArgName}' arguments or a single array, but multiple arrays were passed`,\n    )\n    return args[0]\n  }\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (args.length > 200) {\n      logger.warn(\n        `${debugName} was called with ${args.length} arguments. It might be a performance bug. For very large arrays, pass a single array instead of a spread to avoid \"Maximum callstack exceeded\" error.`,\n      )\n    }\n  }\n\n  return args\n}\n"
  },
  {
    "path": "src/utils/fp/arrayOrSpread/test.js",
    "content": "import logger from '../../common/logger'\n\nimport fromArrayOrSpread from '.'\n\nconst fn = (...args) => fromArrayOrSpread(args, 'fn', 'arg')\n\ndescribe('fromArrayOrSpread', () => {\n  it(`can return args from array or spread`, () => {\n    expect(fn(1, 2, 3, 4)).toEqual([1, 2, 3, 4])\n    expect(fn([1, 2, 3, 4])).toEqual([1, 2, 3, 4])\n    expect(() => fn([], [])).toThrow()\n\n    const spy = jest.spyOn(logger, 'warn').mockImplementation(() => {})\n    const manyArgs = Array(201).fill(1)\n    expect(fn(...manyArgs)).toEqual(manyArgs)\n    expect(spy).toHaveBeenCalledTimes(1)\n    spy.mockRestore()\n  })\n})\n"
  },
  {
    "path": "src/utils/fp/checkName/index.d.ts",
    "content": "// @flow\n\nimport invariant from '../../common/invariant'\nimport type { TableName, ColumnName } from '../../../Schema'\n\n// Asserts that `name` (table or column name) should be safe for inclusion in SQL queries\n// and Loki queries (JS objects)\n//\n// IMPORTANT: This should NEVER be used as the only line of defense! These checks may be incomplete.\n// Any table or column name passed anywhere near the database should be hardcoded or whitelisted.\n// This is a \"defense in depth\" type of check - checking for common mistakes in case library user\n// is not following safe coding practices or the primary defense fails.\n//\n// This will throw an error on:\n// - JavaScript Object prototype properties\n// - Magic Loki and SQLite column names\n// - names starting with __\n// - names that are not essentially alphanumeric\n//\n// Note that for SQL, you always MUST wrap table/column names with `'name'`, otherwise query may fail\n// for some keywords\n//\n// Note that this doesn't throw for Watermelon builtins (id, _changed, _status...)\n\n// const safeNameCharacters = /^[a-zA-Z_]\\w*$/\n// const knownSafeNames: Set<string> = new Set()\n\nexport default function checkName<T = string | TableName<any> | ColumnName>(name: T): T\n"
  },
  {
    "path": "src/utils/fp/checkName/index.js",
    "content": "// @flow\n\nimport invariant from '../../common/invariant'\nimport type { TableName, ColumnName } from '../../../Schema'\n\n// Asserts that `name` (table or column name) should be safe for inclusion in SQL queries\n// and Loki queries (JS objects)\n//\n// IMPORTANT: This should NEVER be used as the only line of defense! These checks may be incomplete.\n// Any table or column name passed anywhere near the database should be hardcoded or whitelisted.\n// This is a \"defense in depth\" type of check - checking for common mistakes in case library user\n// is not following safe coding practices or the primary defense fails.\n//\n// This will throw an error on:\n// - JavaScript Object prototype properties\n// - Magic Loki and SQLite column names\n// - names starting with __\n// - names that are not essentially alphanumeric\n//\n// Note that for SQL, you always MUST wrap table/column names with `'name'`, otherwise query may fail\n// for some keywords\n//\n// Note that this doesn't throw for Watermelon builtins (id, _changed, _status...)\n\nconst safeNameCharacters = /^[a-zA-Z_]\\w*$/\nconst knownSafeNames: Set<string> = new Set()\n\nexport default function checkName<T: string | TableName<any> | ColumnName>(name: T): T {\n  if (knownSafeNames.has((name: string))) {\n    return name\n  }\n\n  invariant(typeof name === 'string', `Unsafe name '${name}' not allowed (not a string)`)\n  invariant(\n    ![\n      '__proto__',\n      'constructor',\n      'prototype',\n      'hasOwnProperty',\n      'isPrototypeOf',\n      'toString',\n      'toLocaleString',\n      'valueOf',\n    ].includes(name),\n    `Unsafe name '${name}' not allowed (Object prototype property)`,\n  )\n  invariant(\n    name.toLowerCase() !== '$loki',\n    `Unsafe name '${name}' not allowed (reserved for LokiJS compatibility)`,\n  )\n  invariant(\n    !['rowid', 'oid', '_rowid_', 'sqlite_master'].includes(name.toLowerCase()),\n    `Unsafe name '${name}' not allowed (reserved for SQLite compatibility)`,\n  )\n  invariant(\n    !name.toLowerCase().startsWith('sqlite_stat'),\n    `Unsafe name '${name}' not allowed (reserved for SQLite compatibility)`,\n  )\n  invariant(\n    !name.startsWith('__'),\n    `Unsafe name '${name}' not allowed (names starting with '__' are reserved for internal purposes)`,\n  )\n  invariant(\n    safeNameCharacters.test(name),\n    `Unsafe name '${name}' not allowed (names must contain only safe characters ${safeNameCharacters.toString()})`,\n  )\n\n  knownSafeNames.add(name)\n  return name\n}\n"
  },
  {
    "path": "src/utils/fp/checkName/test.js",
    "content": "import checkName from './index'\n\ndescribe('checkName', () => {\n  it('returns safe names as-is', () => {\n    expect(checkName('tasks')).toBe('tasks')\n    expect(checkName('tag_assignments')).toBe('tag_assignments')\n    expect(checkName('a')).toBe('a')\n  })\n  it(`keeps returning a safe name as is`, () => {\n    expect(checkName('tasks')).toBe('tasks')\n    expect(checkName('tasks')).toBe('tasks')\n  })\n  it('does not allow unsafe names', () => {\n    const unsafeNames = [\n      '\"hey\"',\n      \"'hey'\",\n      '`hey`',\n      'hey)',\n      'hey --',\n      \"foo' and delete * from users --\",\n      '$loki',\n      '__foo',\n      '__proto__',\n      '__defineGetter__',\n      '__defineSetter__',\n      '__lookupGetter__',\n      '__lookupSetter__',\n      'toString',\n      'toLocaleString',\n      'valueOf',\n      'hasOwnProperty',\n      'isPrototypeOf',\n      'constructor',\n      'prototype',\n      'rowid',\n      'oid',\n      '_rowid_',\n      'ROWID',\n      '_ROWID_',\n      '0foo',\n      'fó',\n      'cześć',\n      'русском',\n      'foo_русском',\n      '❤️',\n      'hey\\nhey',\n      'whatsup\\n',\n      '\\nwhatsup',\n      'sqlite_master',\n      'sqlite_stat',\n      'sqlite_stat1',\n      'sqlite_stat3',\n      0,\n      undefined,\n      null,\n      [],\n      {},\n      NaN,\n    ]\n    unsafeNames.forEach((name) => {\n      // console.log(name)\n      expect(() => checkName(name)).toThrow('Unsafe name')\n    })\n  })\n})\n"
  },
  {
    "path": "src/utils/fp/filterObj/index.d.ts",
    "content": "import { $Shape } from '../../../types'\n\ntype FilterObj2 = <T, Key, Obj = { [Key: string]: T }, Fn = (_: T, __: Key, ___: Obj) => boolean>(\n  fn: Fn,\n  obj: Obj,\n) => $Shape<Obj>\ntype FilterObjCur = <T, Key, Obj = { [Key: string]: T }, Fn = (_: T, __: Key, ___: Obj) => boolean>(\n  fn: Fn,\n) => (_: Obj) => $Shape<Obj>\n\ntype FilterObj = FilterObj2 & FilterObjCur\n\ndeclare function filterObj(): FilterObj\n\nexport default filterObj\n"
  },
  {
    "path": "src/utils/fp/filterObj/index.js",
    "content": "// @flow\n/* eslint-disable no-restricted-syntax */\n/* eslint-disable guard-for-in */\n\ntype FilterObj2 = <T, Key, Obj: { [Key]: T }, Fn: (T, Key, Obj) => boolean>(\n  fn: Fn,\n  obj: Obj,\n) => $Shape<Obj>\ntype FilterObjCur = <T, Key, Obj: { [Key]: T }, Fn: (T, Key, Obj) => boolean>(\n  fn: Fn,\n) => (Obj) => $Shape<Obj>\ntype FilterObj = FilterObj2 & FilterObjCur\n\nfunction filterObj(predicate: (any, any, any) => any, obj: {}): any {\n  if (arguments.length === 1) {\n    // $FlowFixMe\n    return (_obj) => filterObj(predicate, _obj)\n  }\n  const result: { [string]: any } = {}\n  let value\n  for (const prop in obj) {\n    value = obj[prop]\n    if (predicate(value, prop, obj)) {\n      result[prop] = value\n    }\n  }\n  return result\n}\n\nexport default ((filterObj: any): FilterObj)\n"
  },
  {
    "path": "src/utils/fp/filterObj/test.js",
    "content": "import filterObj from './index'\n\ndescribe('filterObj', () => {\n  it(`works correctly`, () => {\n    const obj = {\n      c: 20,\n      a: 5,\n      b: 10,\n    }\n    expect(filterObj((x) => x > 9, obj)).toEqual({ c: 20, b: 10 })\n    expect(filterObj((x) => x < 11)(obj)).toEqual({ a: 5, b: 10 })\n    expect(filterObj((x) => x < 0)(obj)).toEqual({})\n    expect(filterObj((x) => x < 11, {})).toEqual({})\n    // TODO: Should we test for __proto__ ?\n  })\n})\n"
  },
  {
    "path": "src/utils/fp/forEachAsync/index.js",
    "content": "// @flow\n\n// Executes async action sequentially for each element in list (same as async for-of)\nexport default function forEachAsync<T>(list: T[], action: (T) => Promise<void>): Promise<void> {\n  return list.reduce(\n    (promiseChain, element) => promiseChain.then(() => action(element)),\n    Promise.resolve(),\n  )\n}\n"
  },
  {
    "path": "src/utils/fp/forEachAsync/test.js",
    "content": "import forEachAsync from './index'\n\ndescribe('forEachAsync', () => {\n  it(`works correctly`, async () => {\n    const delayed = (ms) =>\n      new Promise((resolve) => {\n        setTimeout(() => resolve(ms), ms)\n      })\n\n    const log = []\n    await forEachAsync([3, 1, 2], async (el) => {\n      await delayed(el)\n      log.push(el * 2)\n    })\n\n    expect(log).toEqual([6, 2, 4])\n  })\n})\n"
  },
  {
    "path": "src/utils/fp/fromPairs/index.d.ts",
    "content": "// inspired by ramda and rambda\n\ntype KeyValueIn<O = any> = { [k: string]: O }\ntype KeyValueOut<O = any> = [string, O][]\n\nexport default function fromPairs<O = any>(pairs: KeyValueIn<O>): KeyValueOut<O>\n"
  },
  {
    "path": "src/utils/fp/fromPairs/index.js",
    "content": "// inspired by ramda and rambda\n/* eslint-disable */\n\nexport default function fromPairs(pairs) {\n  const result = {}\n\n  for (var i = 0, l = pairs.length; i < l; i++) {\n    result[pairs[i][0]] = pairs[i][1]\n  }\n\n  return result\n}\n"
  },
  {
    "path": "src/utils/fp/groupBy/index.d.ts",
    "content": "export default function groupBy<Val, Key>(\n  predicate: (_: Val) => Key,\n): (list: Val[]) => { [k: string]: Val[] }\n"
  },
  {
    "path": "src/utils/fp/groupBy/index.js",
    "content": "// @flow\n\nexport default function groupBy<Val, Key>(\n  predicate: (Val) => Key,\n): (list: Val[]) => { [Key]: Val[] } {\n  return (list) => {\n    const groupped: { [Key]: Val[] } = {}\n    let item\n    let key\n    let group\n    for (let i = 0, len = list.length; i < len; i++) {\n      item = list[i]\n      key = predicate(item)\n      group = groupped[key]\n      if (group) {\n        group.push(item)\n      } else {\n        groupped[key] = [item]\n      }\n    }\n    return groupped\n  }\n}\n"
  },
  {
    "path": "src/utils/fp/groupBy/test.js",
    "content": "import groupBy from './index'\n\ndescribe('groupBy', () => {\n  it(`works correctly`, () => {\n    const xs = [\n      { name: 'A', score: 1 },\n      { name: 'B', score: 2 },\n      { name: 'C', score: 1 },\n      { name: 'D', score: 2 },\n    ]\n    const [a, b, c, d] = xs\n    expect(groupBy((x) => x.score)(xs)).toEqual({ 1: [a, c], 2: [b, d] })\n    expect(groupBy((x) => x.name)(xs)).toEqual({ A: [a], B: [b], C: [c], D: [d] })\n    expect(groupBy((x) => x.name)([])).toEqual({})\n  })\n})\n"
  },
  {
    "path": "src/utils/fp/identicalArrays/index.d.ts",
    "content": "// @flow\n\nexport default function identicalArrays<T, V = T[]>(left: V, right: V): boolean\n"
  },
  {
    "path": "src/utils/fp/identicalArrays/index.js",
    "content": "// @flow\n\nexport default function identicalArrays<T, V: T[]>(left: V, right: V): boolean {\n  if (left.length !== right.length) {\n    return false\n  }\n\n  for (let i = 0, len = left.length; i < len; i += 1) {\n    if (left[i] !== right[i]) {\n      return false\n    }\n  }\n\n  return true\n}\n"
  },
  {
    "path": "src/utils/fp/identicalArrays/test.js",
    "content": "import identicalArrays from './index'\n\ndescribe('identicalArrays', () => {\n  it('checks if arrays have identical contents', () => {\n    expect(identicalArrays([], [])).toBe(true)\n    expect(identicalArrays([1], [1])).toBe(true)\n    expect(identicalArrays([true], [true])).toBe(true)\n    expect(identicalArrays(['foo'], ['foo'])).toBe(true)\n    // false\n    expect(identicalArrays(['foo', 'bar'], ['foo'])).toBe(false)\n    expect(identicalArrays(['foo'], ['foo', 'bar'])).toBe(false)\n    expect(identicalArrays(['foo'], ['bar'])).toBe(false)\n    expect(identicalArrays([1], [true])).toBe(false)\n  })\n})\n"
  },
  {
    "path": "src/utils/fp/identity/index.d.ts",
    "content": "// @flow\n// inspired by rambda and ramda\n\nexport default function identity<T>(value: T): T\n"
  },
  {
    "path": "src/utils/fp/identity/index.js",
    "content": "// @flow\n// inspired by rambda and ramda\n\nexport default function identity<T>(value: T): T {\n  return value\n}\n"
  },
  {
    "path": "src/utils/fp/index.d.ts",
    "content": "// @flow\n\nexport { default as groupBy } from './groupBy'\nexport { default as allPromises } from './allPromises'\nexport { default as identicalArrays } from './identicalArrays'\nexport { default as isObj } from './isObj'\nexport { default as noop } from './noop'\nexport type { ArrayDiff } from './arrayDifference'\nexport { default as fromPairs } from './fromPairs'\nexport { default as toPairs } from './toPairs'\nexport { default as unnest } from './unnest'\nexport { default as identity } from './identity'\nexport { default as unique } from './unique'\nexport { default as keys } from './keys'\nexport { default as values } from './values'\nexport { default as pipe } from './pipe'\nexport { default as mapObj } from './mapObj'\nexport { default as filterObj } from './filterObj'\nexport type { ArrayOrSpreadFn } from './arrayOrSpread'\n// export { default as fromArrayOrSpread } from './arrayOrSpread'\n"
  },
  {
    "path": "src/utils/fp/index.js",
    "content": "// @flow\n\nexport { default as groupBy } from './groupBy'\nexport { default as allPromises } from './allPromises'\nexport { default as identicalArrays } from './identicalArrays'\nexport { default as isObj } from './isObj'\nexport { default as noop } from './noop'\nexport type { ArrayDiff } from './arrayDifference'\nexport { default as fromPairs } from './fromPairs'\nexport { default as toPairs } from './toPairs'\nexport { default as unnest } from './unnest'\nexport { default as identity } from './identity'\nexport { default as unique } from './unique'\nexport { default as keys } from './keys'\nexport { default as values } from './values'\nexport { default as pipe } from './pipe'\nexport { default as mapObj } from './mapObj'\nexport { default as filterObj } from './filterObj'\nexport type { ArrayOrSpreadFn } from './arrayOrSpread'\nexport { default as fromArrayOrSpread } from './arrayOrSpread'\n"
  },
  {
    "path": "src/utils/fp/isObj/index.d.ts",
    "content": "// @flow\n\nexport default function isObj<T>(maybeObject: T): boolean\n"
  },
  {
    "path": "src/utils/fp/isObj/index.js",
    "content": "// @flow\n\nexport default function isObj<T>(maybeObject: T): boolean {\n  return maybeObject !== null && typeof maybeObject === 'object' && !Array.isArray(maybeObject)\n}\n"
  },
  {
    "path": "src/utils/fp/isObj/test.js",
    "content": "import isObj from './index'\n\ndescribe('isObj', () => {\n  it('checks for objects correctly', () => {\n    expect(isObj({})).toBe(true)\n    expect(isObj({ foo: 1, bar: 2 })).toBe(true)\n    class A {}\n    expect(isObj(new A())).toBe(true)\n    expect(isObj([])).toBe(false)\n    expect(isObj([{}, 1, 2])).toBe(false)\n    expect(isObj(0)).toBe(false)\n    expect(isObj(1)).toBe(false)\n    expect(isObj(true)).toBe(false)\n    expect(isObj(false)).toBe(false)\n    expect(isObj(null)).toBe(false)\n    expect(isObj(undefined)).toBe(false)\n    expect(isObj('')).toBe(false)\n    expect(isObj('hey')).toBe(false)\n    expect(isObj(() => {})).toBe(false)\n  })\n})\n"
  },
  {
    "path": "src/utils/fp/keys/index.d.ts",
    "content": "// @flow\n\nimport { $Keys, Array } from '../../../types'\n\nexport default function keys<T = {}>(obj: T): Array<$Keys<T>>\n"
  },
  {
    "path": "src/utils/fp/keys/index.js",
    "content": "// @flow\n\nexport default function keys<T: {}>(obj: T): Array<$Keys<T>> {\n  // $FlowFixMe\n  return Object.keys(obj)\n}\n"
  },
  {
    "path": "src/utils/fp/keys/test.js",
    "content": "import keys from './index'\n\ndescribe('keys', () => {\n  it(`works correctly`, () => {\n    expect(keys({ foo: '1', bar: 2, baz: null })).toEqual(['foo', 'bar', 'baz'])\n    expect(keys({})).toEqual([])\n  })\n})\n"
  },
  {
    "path": "src/utils/fp/likeToRegexp/index.d.ts",
    "content": "export default function likeToRegexp(likeQuery: string): RegExp\n"
  },
  {
    "path": "src/utils/fp/likeToRegexp/index.js",
    "content": "// @flow\n\nexport default function likeToRegexp(likeQuery: string): RegExp {\n  const regexp = `^${likeQuery}$`.replace(/%/g, '.*').replace(/_/g, '.')\n  return new RegExp(regexp, 'is')\n}\n"
  },
  {
    "path": "src/utils/fp/mapObj/index.d.ts",
    "content": "import { $ObjMap } from '../../../types'\n\ntype MapObj2 = <T, Key, Obj = { [key: string]: T }, U = any, Fn = (_: T, __: Key, ___: Obj) => U>(\n  fn: Fn,\n  obj: Obj,\n) => $ObjMap<Obj, (_: T) => U>\ntype MapObjCur = <T, Key, Obj = { [key: string]: T }, U = any, Fn = (_: T, __: Key, ___: Obj) => U>(\n  fn: Fn,\n) => (_: Obj) => $ObjMap<Obj, (__: T) => U>\ntype MapObj = MapObj2 & MapObjCur\n\ndeclare function mapObj(fn: (a: any, b: string, c: any) => any, obj: {}): MapObj\n\nexport default mapObj\n"
  },
  {
    "path": "src/utils/fp/mapObj/index.js",
    "content": "// @flow\n/* eslint-disable no-restricted-syntax */\n/* eslint-disable guard-for-in */\n\ntype MapObj2 = <T, Key, Obj: { [Key]: T }, U, Fn: (T, Key, Obj) => U>(\n  fn: Fn,\n  obj: Obj,\n) => $ObjMap<Obj, (T) => U>\ntype MapObjCur = <T, Key, Obj: { [Key]: T }, U, Fn: (T, Key, Obj) => U>(\n  fn: Fn,\n) => (Obj) => $ObjMap<Obj, (T) => U>\ntype MapObj = MapObj2 & MapObjCur\n\nfunction mapObj(fn: (any, string, any) => any, obj: {}): any {\n  if (arguments.length === 1) {\n    // $FlowFixMe\n    return (_obj) => mapObj(fn, _obj)\n  }\n  const result: { [string]: any } = {}\n  for (const prop in obj) {\n    result[prop] = fn(obj[prop], prop, obj)\n  }\n  return result\n}\n\nexport default ((mapObj: any): MapObj)\n"
  },
  {
    "path": "src/utils/fp/mapObj/test.js",
    "content": "import mapObj from './index'\n\ndescribe('mapObj', () => {\n  it(`works correctly`, () => {\n    const obj = {\n      a: 5,\n      b: 10,\n      c: 20,\n    }\n    expect(mapObj((x) => x + 1, obj)).toEqual({ a: 6, b: 11, c: 21 })\n    expect(mapObj((x) => x + 1)(obj)).toEqual({ a: 6, b: 11, c: 21 })\n    expect(mapObj((x) => x + 1, {})).toEqual({})\n    // TODO: Should we test for __proto__ ?\n  })\n})\n"
  },
  {
    "path": "src/utils/fp/noop/index.d.ts",
    "content": "// @flow\n\n// Does nothing\nexport default function noop(): void\n"
  },
  {
    "path": "src/utils/fp/noop/index.js",
    "content": "// @flow\n\n// Does nothing\nexport default function noop(): void {}\n"
  },
  {
    "path": "src/utils/fp/pipe/index.d.ts",
    "content": "type Pipe = (<A, B, C, D, E, F, G>(\n  ab: (_: A) => B,\n  bc: (_: B) => C,\n  cd: (_: C) => D,\n  de: (_: D) => E,\n  ef: (_: E) => F,\n  fg: (_: F) => G,\n) => (_: A) => G) &\n  (<A, B, C, D, E, F>(\n    ab: (_: A) => B,\n    bc: (_: B) => C,\n    cd: (_: C) => D,\n    de: (_: D) => E,\n    ef: (_: E) => F,\n  ) => (_: A) => F) &\n  (<A, B, C, D, E>(\n    ab: (_: A) => B,\n    bc: (_: B) => C,\n    cd: (_: C) => D,\n    de: (_: D) => E,\n  ) => (_: A) => E) &\n  (<A, B, C, D>(ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D) => (_: A) => D) &\n  (<A, B, C>(ab: (_: A) => B, bc: (_: B) => C) => (_: A) => C) &\n  (<A, B>(ab: (_: A) => B) => (_: A) => B)\n\ndeclare function pipe(...fns: ((_: any) => any)[]): Pipe\n\nexport default pipe\n"
  },
  {
    "path": "src/utils/fp/pipe/index.js",
    "content": "// @flow\n\ntype Pipe = (<A, B, C, D, E, F, G>(\n  ab: (A) => B,\n  bc: (B) => C,\n  cd: (C) => D,\n  de: (D) => E,\n  ef: (E) => F,\n  fg: (F) => G,\n) => (A) => G) &\n  (<A, B, C, D, E, F>(\n    ab: (A) => B,\n    bc: (B) => C,\n    cd: (C) => D,\n    de: (D) => E,\n    ef: (E) => F,\n  ) => (A) => F) &\n  (<A, B, C, D, E>(ab: (A) => B, bc: (B) => C, cd: (C) => D, de: (D) => E) => (A) => E) &\n  (<A, B, C, D>(ab: (A) => B, bc: (B) => C, cd: (C) => D) => (A) => D) &\n  (<A, B, C>(ab: (A) => B, bc: (B) => C) => (A) => C) &\n  (<A, B>(ab: (A) => B) => (A) => B)\n\nfunction pipe(...fns: ((any) => any)[]): (any) => any {\n  const fnsLen = fns.length\n  return (...args) => {\n    let result\n\n    if (fnsLen) {\n      result = fns[0](...args)\n      for (let i = 1; i < fnsLen; i++) {\n        result = fns[i](result)\n      }\n    }\n\n    return result\n  }\n}\n\nexport default (pipe: Pipe)\n"
  },
  {
    "path": "src/utils/fp/pipe/test.js",
    "content": "import pipe from './index'\n\ndescribe('pipe', () => {\n  it(`works correctly`, () => {\n    const add = (a, b) => a + b\n    const plus10 = (a) => a + 10\n    const times5 = (a) => a * 5\n\n    expect(pipe()()).toBe(undefined)\n    expect(pipe()(1, 2)).toBe(undefined)\n    expect(pipe(add)(1, 2)).toBe(3)\n    expect(pipe(add, plus10)(1, 2)).toBe(13)\n    expect(pipe(add, times5, (x) => x - 5, plus10)(3, 4)).toBe(40)\n  })\n})\n"
  },
  {
    "path": "src/utils/fp/sortBy/index.d.ts",
    "content": "// @flow\n\nexport default function sortBy<T, U>(sorter: (_: T) => U, list: T[]): T[]\n"
  },
  {
    "path": "src/utils/fp/sortBy/index.js",
    "content": "// @flow\n\nexport default function sortBy<T, U>(sorter: (T) => U, list: T[]): T[] {\n  const clone = list.slice()\n  let a\n  let b\n  return clone.sort((left, right) => {\n    a = sorter(left)\n    b = sorter(right)\n\n    if (a === b) {\n      return 0\n    }\n    // $FlowFixMe\n    return a < b ? -1 : 1\n  })\n}\n"
  },
  {
    "path": "src/utils/fp/sortBy/test.js",
    "content": "import sortBy from './index'\n\ndescribe('sortBy', () => {\n  it(`works correctly`, () => {\n    const a = { name: 'andrew', age: 24 }\n    const b = { name: 'bartholomeus', age: 69 }\n    const c = { name: 'cecil', age: 15 }\n    expect(sortBy((x) => x.name, [a, b, c])).toEqual([a, b, c])\n    expect(sortBy((x) => x.name, [c, a, b])).toEqual([a, b, c])\n    expect(sortBy((x) => x.age, [a, b, c])).toEqual([c, a, b])\n    expect(sortBy((x) => x.age, [b, a, c])).toEqual([c, a, b])\n    expect(sortBy((x) => -x.age, [a, b, c])).toEqual([b, a, c])\n  })\n  it(`does not mutate`, () => {\n    const arr = [123, 4, 23]\n    sortBy((x) => x, arr)\n    expect(arr).toEqual([123, 4, 23])\n  })\n})\n"
  },
  {
    "path": "src/utils/fp/splitEvery/index.d.ts",
    "content": "// @flow\n\nexport default function splitEvery<T>(n: number, list: T[]): T[][]\n"
  },
  {
    "path": "src/utils/fp/splitEvery/index.js",
    "content": "// @flow\n\nexport default function splitEvery<T>(n: number, list: T[]): T[][] {\n  const splitted = []\n  let position = 0\n  const { length } = list\n  while (position < length) {\n    splitted.push(list.slice(position, (position += n)))\n  }\n  return splitted\n}\n"
  },
  {
    "path": "src/utils/fp/splitEvery/test.js",
    "content": "import splitEvery from './index'\n\ndescribe('splitEvery', () => {\n  it(`works correctly`, () => {\n    const long = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]\n    const short = [1, 2, 3]\n    const empty = []\n\n    expect(splitEvery(10, long)).toEqual([long])\n    expect(splitEvery(3, long)).toEqual([[1, 2, 3], [4, 5, 6], [7, 8, 9], [0]])\n    expect(splitEvery(4, short)).toEqual([short])\n    expect(splitEvery(3, short)).toEqual([short])\n    expect(splitEvery(2, short)).toEqual([[1, 2], [3]])\n    expect(splitEvery(1, short)).toEqual([[1], [2], [3]])\n    expect(splitEvery(1, empty)).toEqual([])\n  })\n})\n"
  },
  {
    "path": "src/utils/fp/toPairs/index.d.ts",
    "content": "// inspired by ramda and rambda\n\ntype KeyValueOut<O = any> = { [k: string]: O }\ntype KeyValueIn<O = any> = [string, O][]\n\nexport default function toPairs(obj: KeyValueIn): KeyValueOut\n"
  },
  {
    "path": "src/utils/fp/toPairs/index.js",
    "content": "// inspired by ramda and rambda\n/* eslint-disable */\n\nexport default function toPairs(obj) {\n  var pairs = []\n\n  if (obj) {\n    var keys = Object.keys(obj)\n\n    for (var i = 0, len = keys.length; i < len; i++) {\n      var prop = keys[i]\n      var value = obj[prop]\n      if (prop in obj) {\n        pairs[i] = [prop, value]\n      }\n    }\n  }\n\n  return pairs\n}\n"
  },
  {
    "path": "src/utils/fp/unique/index.d.ts",
    "content": "// @flow\n\n// Returns a list of unique elements, compared by identity (===)\n// This is a replacement for rambdax uniq() which is based on slow equals()\nexport default function unique<T>(list: T[]): T[]\n"
  },
  {
    "path": "src/utils/fp/unique/index.js",
    "content": "// @flow\n\n// Returns a list of unique elements, compared by identity (===)\n// This is a replacement for rambdax uniq() which is based on slow equals()\nexport default function unique<T>(list: T[]): T[] {\n  const result: T[] = []\n\n  for (let i = 0, len = list.length; i < len; i += 1) {\n    const value = list[i]\n\n    let isUnique = true\n    for (let j = 0, resultLen = result.length; j < resultLen; j += 1) {\n      if (value === result[j]) {\n        isUnique = false\n        break\n      }\n    }\n    if (isUnique) {\n      result.push(value)\n    }\n  }\n\n  return result\n}\n"
  },
  {
    "path": "src/utils/fp/unique/test.js",
    "content": "import unique from './index'\n\ndescribe('unique', () => {\n  it(`returns a list of unique elements, by identity`, () => {\n    expect(unique([1, 4, 5, 1, 6, 4, 1, 9])).toEqual([1, 4, 5, 6, 9])\n    expect(unique(['a', 'c', 'b', 'c', 'd', 'a'])).toEqual(['a', 'c', 'b', 'd'])\n    const o1 = []\n    const o2 = []\n    const o3 = []\n    expect(unique([o1, o2, o3, o2, o1])).toEqual([o1, o2, o3])\n  })\n})\n"
  },
  {
    "path": "src/utils/fp/unnest/index.d.ts",
    "content": "// inspired by ramda and rambda\n/* eslint-disable */\n\nexport default function unnest(arr: any[]): any[]\n"
  },
  {
    "path": "src/utils/fp/unnest/index.js",
    "content": "// inspired by ramda and rambda\n/* eslint-disable */\n\nexport default function unnest(arr) {\n  var result = []\n\n  for (var i = 0, l = arr.length; i < l; i++) {\n    var value = arr[i]\n\n    if (Array.isArray(value)) {\n      result = result.concat(value)\n    } else {\n      result.push(value)\n    }\n  }\n\n  return result\n}\n"
  },
  {
    "path": "src/utils/fp/values/index.d.ts",
    "content": "// @flow\n\nexport default function values<T, Key, O = { [k: string]: T }>(obj: O): T[]\n"
  },
  {
    "path": "src/utils/fp/values/index.js",
    "content": "// @flow\n\nexport default function values<T, Key, O: { [Key]: T }>(obj: O): T[] {\n  // $FlowFixMe\n  return Object.values(obj)\n}\n"
  },
  {
    "path": "src/utils/fp/values/test.js",
    "content": "import values from './index'\n\ndescribe('values', () => {\n  it(`works correctly`, () => {\n    expect(values({ foo: '1', bar: 2, baz: null })).toEqual(['1', 2, null])\n    expect(values({})).toEqual([])\n  })\n})\n"
  },
  {
    "path": "src/utils/rx/__wmelonRxShim/index.d.ts",
    "content": "// @flow\n\n// NOTE: All Rx imports in WatermelonDB MUST go through this file\n// this is a magic shim that can be replaced via babel onto another shim that imports Rx files\n// from different locations\n// This allows manual tree shaking on React Native\n\nexport {\n  // classes\n  Observable,\n  Subject,\n  ReplaySubject,\n  BehaviorSubject,\n  // observables\n  of,\n  merge,\n  defer,\n} from 'rxjs'\nexport {\n  // operators\n  multicast,\n  distinctUntilChanged,\n  map,\n  switchMap,\n  throttleTime,\n  startWith,\n  catchError\n} from 'rxjs/operators'\nexport type { ConnectableObservable } from 'rxjs'\n"
  },
  {
    "path": "src/utils/rx/__wmelonRxShim/index.js",
    "content": "// @flow\n\n// NOTE: All Rx imports in WatermelonDB MUST go through this file\n// this is a magic shim that can be replaced via babel onto another shim that imports Rx files\n// from different locations\n// This allows manual tree shaking on React Native\n\nexport {\n  // classes\n  Observable,\n  Subject,\n  ReplaySubject,\n  BehaviorSubject,\n  // observables\n  of,\n  merge,\n  defer,\n} from 'rxjs'\nexport {\n  // operators\n  multicast,\n  distinctUntilChanged,\n  map,\n  switchMap,\n  throttleTime,\n  startWith,\n  catchError,\n} from 'rxjs/operators'\nexport type { ConnectableObservable } from 'rxjs'\n"
  },
  {
    "path": "src/utils/rx/__wmelonRxShimESM2015/index.d.ts",
    "content": "// @flow\n\n// classes\nexport { Observable } from 'rxjs'\nexport { Subject } from 'rxjs'\nexport { ReplaySubject } from 'rxjs'\nexport { BehaviorSubject } from 'rxjs'\n\n// observables\nexport { of } from 'rxjs'\nexport { merge } from 'rxjs'\nexport { defer } from 'rxjs'\n\n// operators\nexport { multicast } from 'rxjs'\nexport { distinctUntilChanged } from 'rxjs'\nexport { map } from 'rxjs'\nexport { switchMap } from 'rxjs'\nexport { throttleTime } from 'rxjs'\nexport { startWith } from 'rxjs'\n"
  },
  {
    "path": "src/utils/rx/__wmelonRxShimESM2015/index.js",
    "content": "// @flow\n\n// classes\nexport { Observable } from 'rxjs/dist/esm5/internal/Observable'\nexport { Subject } from 'rxjs/dist/esm5/internal/Subject'\nexport { ReplaySubject } from 'rxjs/dist/esm5/internal/ReplaySubject'\nexport { BehaviorSubject } from 'rxjs/dist/esm5/internal/BehaviorSubject'\n\n// observables\nexport { of } from 'rxjs/dist/esm5/internal/observable/of'\nexport { merge } from 'rxjs/dist/esm5/internal/observable/merge'\nexport { defer } from 'rxjs/dist/esm5/internal/observable/defer'\n\n// operators\nexport { multicast } from 'rxjs/dist/esm5/internal/operators/multicast'\nexport { distinctUntilChanged } from 'rxjs/dist/esm5/internal/operators/distinctUntilChanged'\nexport { map } from 'rxjs/dist/esm5/internal/operators/map'\nexport { switchMap } from 'rxjs/dist/esm5/internal/operators/switchMap'\nexport { throttleTime } from 'rxjs/dist/esm5/internal/operators/throttleTime'\nexport { startWith } from 'rxjs/dist/esm5/internal/operators/startWith'\nexport { catchError } from 'rxjs/dist/esm5/internal/operators/catchError'\n"
  },
  {
    "path": "src/utils/rx/cacheWhileConnected/index.d.ts",
    "content": "// @flow\n\nimport type { Observable } from '../__wmelonRxShim'\n\n// Equivalent to observable |> distinctUntilChanged |> publishReplayLatestWhileConnected |> refCount\n//\n// Creates an observable that shares the connection with and replays the latest value from the underlying\n// observable, and skips emissions that are the same as the previous one\n\nexport default function cacheWhileConnected<T>(source: Observable<T>): Observable<T>\n"
  },
  {
    "path": "src/utils/rx/cacheWhileConnected/index.js",
    "content": "// @flow\n\nimport { type Observable, distinctUntilChanged } from '../__wmelonRxShim'\nimport publishReplayLatestWhileConnected from '../publishReplayLatestWhileConnected'\n\n// Equivalent to observable |> distinctUntilChanged |> publishReplayLatestWhileConnected |> refCount\n//\n// Creates an observable that shares the connection with and replays the latest value from the underlying\n// observable, and skips emissions that are the same as the previous one\n\nexport default function cacheWhileConnected<T>(source: Observable<T>): Observable<T> {\n  return source.pipe(distinctUntilChanged(), publishReplayLatestWhileConnected).refCount()\n}\n"
  },
  {
    "path": "src/utils/rx/doOnDispose/index.d.ts",
    "content": "// @flow\n\nimport { Observable } from '../__wmelonRxShim'\n\n// Performs an action when Observable is disposed; analogous to `Observable.do`\n\nexport default function doOnDispose<T>(\n  onDispose: () => void,\n): (observable: Observable<T>) => Observable<T>\n"
  },
  {
    "path": "src/utils/rx/doOnDispose/index.js",
    "content": "// @flow\n\nimport { Observable } from '../__wmelonRxShim'\n\n// Performs an action when Observable is disposed; analogous to `Observable.do`\n\nexport default function doOnDispose<T>(onDispose: () => void): (Observable<T>) => Observable<T> {\n  return (source) =>\n    Observable.create((observer) => {\n      // $FlowFixMe\n      const subscription = source.subscribe(observer)\n      return () => {\n        subscription.unsubscribe()\n        onDispose()\n      }\n    })\n}\n"
  },
  {
    "path": "src/utils/rx/doOnSubscribe/index.d.ts",
    "content": "// @flow\n\nimport type { Observable } from '../__wmelonRxShim'\n\n// Performs an action when Observable is subscribed to; analogous to `Observable.do`\n\nexport default function doOnSubscribe<T>(\n  onSubscribe: () => void,\n): (observable: Observable<T>) => Observable<T>\n"
  },
  {
    "path": "src/utils/rx/doOnSubscribe/index.js",
    "content": "// @flow\n\nimport { defer, type Observable } from '../__wmelonRxShim'\n\n// Performs an action when Observable is subscribed to; analogous to `Observable.do`\n\nexport default function doOnSubscribe<T>(\n  onSubscribe: () => void,\n): (Observable<T>) => Observable<T> {\n  return (source) =>\n    defer(() => {\n      onSubscribe()\n      return source\n    })\n}\n"
  },
  {
    "path": "src/utils/rx/index.d.ts",
    "content": "// @flow\n\nexport { default as cacheWhileConnected } from './cacheWhileConnected'\n// export { default as doOnDispose } from './doOnDispose'\n// export { default as doOnSubscribe } from './doOnSubscribe'\nexport { default as publishReplayLatestWhileConnected } from './publishReplayLatestWhileConnected'\n\nexport {\n  // classes\n  Observable,\n  Subject,\n  ReplaySubject,\n  BehaviorSubject,\n  // observables\n  of,\n  merge,\n  defer,\n  // operators\n  multicast,\n  distinctUntilChanged,\n  map,\n  switchMap,\n  throttleTime,\n  startWith,\n  catchError\n} from './__wmelonRxShim'\nexport type { ConnectableObservable } from './__wmelonRxShim'\n"
  },
  {
    "path": "src/utils/rx/index.js",
    "content": "// @flow\n\nexport { default as cacheWhileConnected } from './cacheWhileConnected'\n// export { default as doOnDispose } from './doOnDispose'\n// export { default as doOnSubscribe } from './doOnSubscribe'\nexport { default as publishReplayLatestWhileConnected } from './publishReplayLatestWhileConnected'\n\nexport {\n  // classes\n  Observable,\n  Subject,\n  ReplaySubject,\n  BehaviorSubject,\n  // observables\n  of,\n  merge,\n  defer,\n  // operators\n  multicast,\n  distinctUntilChanged,\n  map,\n  switchMap,\n  throttleTime,\n  startWith,\n  catchError,\n} from './__wmelonRxShim'\nexport type { ConnectableObservable } from './__wmelonRxShim'\n"
  },
  {
    "path": "src/utils/rx/publishReplayLatestWhileConnected/index.d.ts",
    "content": "import type { ConnectableObservable, Observable, ReplaySubject, multicast } from '../__wmelonRxShim'\n\n// Creates a Connectable observable, that, while connected, replays the latest emission\n// upon subscription. When disconnected, the replay cache is cleared.\n\nexport default function publishReplayLatestWhileConnected<T>(\n  source: Observable<T>,\n): ConnectableObservable<T>\n"
  },
  {
    "path": "src/utils/rx/publishReplayLatestWhileConnected/index.js",
    "content": "// @flow\n\nimport {\n  type ConnectableObservable,\n  type Observable,\n  ReplaySubject,\n  multicast,\n} from '../__wmelonRxShim'\n\n// Creates a Connectable observable, that, while connected, replays the latest emission\n// upon subscription. When disconnected, the replay cache is cleared.\n\nexport default function publishReplayLatestWhileConnected<T>(\n  source: Observable<T>,\n): ConnectableObservable<T> {\n  return source.pipe(multicast(() => new ReplaySubject(1)))\n}\n"
  },
  {
    "path": "src/utils/subscriptions/SharedSubscribable/index.d.ts",
    "content": "import type { Unsubscribe } from '../type'\n\nexport default class SharedSubscribable<T> {\n  _source: (subscriber: (_: T) => void) => Unsubscribe\n\n  _unsubscribeSource: Unsubscribe | null\n\n  _subscribers: [(_: T) => void, any][]\n\n  _didEmit: boolean\n\n  _lastValue: T | null\n\n  constructor(source: (subscriber: (_: T) => void) => Unsubscribe)\n\n  subscribe(subscriber: (_: T) => void, debugInfo?: any): Unsubscribe\n\n  _notify(value: T): void\n\n  _unsubscribe(entry: [(_: T) => void, any]): void\n}\n"
  },
  {
    "path": "src/utils/subscriptions/SharedSubscribable/index.js",
    "content": "// @flow\n\nimport { type Unsubscribe } from '../type'\nimport invariant from '../../common/invariant'\n\n// A subscribable that implements the equivalent of:\n// multicast(() => new ReplaySubject(1)) |> refCount Rx operation\n//\n// In other words:\n// - Upon subscription, the source subscribable is subscribed to,\n//   and its notifications are passed to subscribers here.\n// - Multiple subscribers only cause a single subscription of the source\n// - When last subscriber unsubscribes, the source is unsubscribed\n// - Upon subscription, the subscriber receives last value sent by source (if any)\nexport default class SharedSubscribable<T> {\n  _source: (subscriber: (T) => void) => Unsubscribe\n\n  _unsubscribeSource: ?Unsubscribe = null\n\n  _subscribers: [(T) => void, any][] = []\n\n  _didEmit: boolean = false\n\n  _lastValue: T = (null: any)\n\n  constructor(source: (subscriber: (T) => void) => Unsubscribe): void {\n    this._source = source\n  }\n\n  subscribe(subscriber: (T) => void, debugInfo?: any): Unsubscribe {\n    const entry = [subscriber, debugInfo]\n    this._subscribers.push(entry)\n\n    if (this._didEmit) {\n      subscriber(this._lastValue)\n    }\n\n    if (this._subscribers.length === 1) {\n      // TODO: What if this throws?\n      this._unsubscribeSource = this._source((value) => this._notify(value))\n    }\n\n    return () => this._unsubscribe(entry)\n  }\n\n  _notify(value: T): void {\n    invariant(\n      this._subscribers.length,\n      `SharedSubscribable's source emitted a value after it was unsubscribed from`,\n    )\n    this._didEmit = true\n    this._lastValue = value\n    this._subscribers.forEach(([subscriber]) => {\n      subscriber(value)\n    })\n  }\n\n  _unsubscribe(entry: [(T) => void, any]): void {\n    const idx = this._subscribers.indexOf(entry)\n    idx !== -1 && this._subscribers.splice(idx, 1)\n\n    if (!this._subscribers.length) {\n      const unsubscribe = this._unsubscribeSource\n      this._unsubscribeSource = null\n      this._didEmit = false\n      unsubscribe && unsubscribe()\n    }\n  }\n}\n"
  },
  {
    "path": "src/utils/subscriptions/SharedSubscribable/test.js",
    "content": "import SharedSubscribable from './index'\n\ndescribe('SharedSubscribable', () => {\n  it('allows a subscription to be passed through', () => {\n    let emitValue = null\n    const sourceUnsubscribe = jest.fn()\n    const source = jest.fn((subscriber) => {\n      emitValue = subscriber\n      return sourceUnsubscribe\n    })\n\n    const shared = new SharedSubscribable(source)\n    expect(source).toHaveBeenCalledTimes(0)\n    expect(emitValue).toBe(null)\n    expect(sourceUnsubscribe).toHaveBeenCalledTimes(0)\n\n    const subscriber = jest.fn()\n    const unsubscribe = shared.subscribe(subscriber)\n\n    expect(source).toHaveBeenCalledTimes(1)\n    expect(emitValue).not.toBe(null)\n    expect(subscriber).toHaveBeenCalledTimes(0)\n\n    emitValue('foo')\n    expect(subscriber).toHaveBeenCalledTimes(1)\n    expect(subscriber).toHaveBeenLastCalledWith('foo')\n\n    emitValue('bar')\n    expect(subscriber).toHaveBeenCalledTimes(2)\n    expect(subscriber).toHaveBeenLastCalledWith('bar')\n\n    expect(sourceUnsubscribe).toHaveBeenCalledTimes(0)\n    unsubscribe()\n\n    expect(source).toHaveBeenCalledTimes(1)\n    expect(sourceUnsubscribe).toHaveBeenCalledTimes(1)\n    expect(subscriber).toHaveBeenCalledTimes(2)\n  })\n  it('can multicast to multiple subscribers', async () => {\n    let emitValue = null\n    const sourceUnsubscribe = jest.fn()\n    const source = jest.fn((subscriber) => {\n      emitValue = subscriber\n      return sourceUnsubscribe\n    })\n\n    const shared = new SharedSubscribable(source)\n\n    const subscriber1 = jest.fn()\n    const unsubscribe1 = shared.subscribe(subscriber1)\n\n    const subscriber2 = jest.fn()\n    const unsubscribe2 = shared.subscribe(subscriber2)\n\n    const subscriber3 = jest.fn()\n    const unsubscribe3 = shared.subscribe(subscriber3)\n\n    emitValue('foo')\n    expect(subscriber1).toHaveBeenCalledTimes(1)\n    expect(subscriber2).toHaveBeenCalledTimes(1)\n    expect(subscriber3).toHaveBeenCalledTimes(1)\n    expect(subscriber1).toHaveBeenLastCalledWith('foo')\n    expect(subscriber2).toHaveBeenLastCalledWith('foo')\n\n    unsubscribe2()\n\n    emitValue('bar')\n    expect(subscriber1).toHaveBeenCalledTimes(2)\n    expect(subscriber2).toHaveBeenCalledTimes(1)\n    expect(subscriber3).toHaveBeenCalledTimes(2)\n    expect(subscriber3).toHaveBeenLastCalledWith('bar')\n\n    unsubscribe3()\n    emitValue('baz')\n    expect(subscriber1).toHaveBeenCalledTimes(3)\n    expect(subscriber2).toHaveBeenCalledTimes(1)\n    expect(subscriber3).toHaveBeenCalledTimes(2)\n\n    expect(sourceUnsubscribe).toHaveBeenCalledTimes(0)\n    unsubscribe1()\n    expect(sourceUnsubscribe).toHaveBeenCalledTimes(1)\n\n    expect(source).toHaveBeenCalledTimes(1)\n  })\n  it('reemits last value to new subscribers, if any', () => {\n    let emitValue = null\n    const sourceUnsubscribe = jest.fn()\n    const source = jest.fn((subscriber) => {\n      emitValue = subscriber\n      return sourceUnsubscribe\n    })\n\n    const shared = new SharedSubscribable(source)\n\n    const subscriber1 = jest.fn()\n    const unsubscribe1 = shared.subscribe(subscriber1)\n\n    emitValue('foo')\n    expect(subscriber1).toHaveBeenLastCalledWith('foo')\n\n    const subscriber2 = jest.fn()\n    const unsubscribe2 = shared.subscribe(subscriber2)\n\n    expect(subscriber2).toHaveBeenCalledTimes(1)\n    expect(subscriber2).toHaveBeenLastCalledWith('foo')\n\n    emitValue('bar')\n\n    const subscriber3 = jest.fn()\n    const unsubscribe3 = shared.subscribe(subscriber3)\n\n    expect(subscriber3).toHaveBeenCalledTimes(1)\n    expect(subscriber3).toHaveBeenLastCalledWith('bar')\n\n    unsubscribe1()\n    unsubscribe2()\n    unsubscribe3()\n    expect(subscriber1).toHaveBeenCalledTimes(2)\n    expect(subscriber2).toHaveBeenCalledTimes(2)\n    expect(subscriber3).toHaveBeenCalledTimes(1)\n    expect(sourceUnsubscribe).toHaveBeenCalledTimes(1)\n  })\n  it('source can notify subscriber synchronously with subscription', () => {\n    let emitValue = null\n    const sourceUnsubscribe = jest.fn()\n    const source = jest.fn((subscriber) => {\n      subscriber(10)\n      emitValue = subscriber\n      return sourceUnsubscribe\n    })\n\n    const shared = new SharedSubscribable(source)\n\n    const subscriber1 = jest.fn()\n    const unsubscribe1 = shared.subscribe(subscriber1)\n    expect(subscriber1).toHaveBeenCalledTimes(1)\n    expect(subscriber1).toHaveBeenLastCalledWith(10)\n\n    const subscriber2 = jest.fn()\n    const unsubscribe2 = shared.subscribe(subscriber2)\n    expect(subscriber2).toHaveBeenCalledTimes(1)\n\n    emitValue(20)\n\n    expect(subscriber2).toHaveBeenCalledTimes(2)\n    expect(subscriber2).toHaveBeenCalledTimes(2)\n    expect(subscriber2).toHaveBeenLastCalledWith(20)\n\n    unsubscribe1()\n    unsubscribe2()\n    expect(sourceUnsubscribe).toHaveBeenCalledTimes(1)\n  })\n  it('can resubscribe to source', () => {\n    let emitValue = null\n    const sourceUnsubscribe = jest.fn()\n    const source = jest.fn((subscriber) => {\n      emitValue = subscriber\n      return sourceUnsubscribe\n    })\n\n    const shared = new SharedSubscribable(source)\n\n    const subscriber1 = jest.fn()\n    const unsubscribe1 = shared.subscribe(subscriber1)\n\n    emitValue(20)\n\n    const subscriber2 = jest.fn()\n    const unsubscribe2 = shared.subscribe(subscriber2)\n\n    unsubscribe1()\n    unsubscribe2()\n    expect(source).toHaveBeenCalledTimes(1)\n    expect(sourceUnsubscribe).toHaveBeenCalledTimes(1)\n\n    const subscriber3 = jest.fn()\n    const unsubscribe3 = shared.subscribe(subscriber3)\n\n    expect(source).toHaveBeenCalledTimes(2)\n    expect(subscriber3).toHaveBeenCalledTimes(0)\n\n    emitValue('heyey')\n    expect(subscriber3).toHaveBeenCalledTimes(1)\n    expect(subscriber3).toHaveBeenLastCalledWith('heyey')\n\n    unsubscribe3()\n    expect(sourceUnsubscribe).toHaveBeenCalledTimes(2)\n  })\n  it('too many calls to unsubscribe are safe', () => {\n    let emitValue = null\n    const sourceUnsubscribe = jest.fn()\n    const source = jest.fn((subscriber) => {\n      emitValue = subscriber\n      return sourceUnsubscribe\n    })\n\n    const shared = new SharedSubscribable(source)\n    const unsubscribe1 = shared.subscribe(() => {})\n\n    const subscriber2 = jest.fn()\n    const unsubscribe2 = shared.subscribe(subscriber2)\n    expect(subscriber2).toHaveBeenCalledTimes(0)\n\n    unsubscribe1()\n    unsubscribe1()\n    expect(sourceUnsubscribe).toHaveBeenCalledTimes(0)\n\n    emitValue('r u der')\n    expect(subscriber2).toHaveBeenCalledTimes(1)\n    expect(subscriber2).toHaveBeenLastCalledWith('r u der')\n\n    expect(sourceUnsubscribe).toHaveBeenCalledTimes(0)\n    unsubscribe2()\n    expect(sourceUnsubscribe).toHaveBeenCalledTimes(1)\n    unsubscribe2()\n    expect(sourceUnsubscribe).toHaveBeenCalledTimes(1)\n  })\n  it(`can subscribe with the same subscriber multiple times`, () => {\n    let emitValue = null\n    const source = jest.fn((subscriber) => {\n      emitValue = subscriber\n      return () => {}\n    })\n    const shared = new SharedSubscribable(source)\n    const subscriber = jest.fn()\n    const unsubscribe1 = shared.subscribe(subscriber)\n    emitValue()\n    expect(subscriber).toHaveBeenCalledTimes(1)\n    const unsubscribe2 = shared.subscribe(subscriber)\n    expect(subscriber).toHaveBeenCalledTimes(2)\n    emitValue()\n    expect(subscriber).toHaveBeenCalledTimes(4)\n    unsubscribe2()\n    unsubscribe2() // noop\n    emitValue()\n    expect(subscriber).toHaveBeenCalledTimes(5)\n    unsubscribe1()\n  })\n  it('proteccs from rogue sources notifying after being unsubscribed from', () => {\n    let emitValue = null\n    const sourceUnsubscribe = jest.fn()\n    const source = jest.fn((subscriber) => {\n      emitValue = subscriber\n      return sourceUnsubscribe\n    })\n\n    const shared = new SharedSubscribable(source)\n\n    const subscriber1 = jest.fn()\n    const unsubscribe1 = shared.subscribe(subscriber1)\n    unsubscribe1()\n    expect(sourceUnsubscribe).toHaveBeenCalledTimes(1)\n    expect(() => emitValue(10)).toThrow('emitted a value after')\n    expect(subscriber1).toHaveBeenCalledTimes(0)\n\n    const subscriber2 = jest.fn()\n    const unsubscribe2 = shared.subscribe(subscriber2)\n\n    expect(subscriber2).toHaveBeenCalledTimes(0)\n    unsubscribe2()\n  })\n})\n"
  },
  {
    "path": "src/utils/subscriptions/index.d.ts",
    "content": "// @flow\n\nexport { default as SharedSubscribable } from './SharedSubscribable'\nexport type { Unsubscribe } from './type'\n"
  },
  {
    "path": "src/utils/subscriptions/index.js",
    "content": "// @flow\n\nexport { default as SharedSubscribable } from './SharedSubscribable'\nexport type { Unsubscribe } from './type'\n"
  },
  {
    "path": "src/utils/subscriptions/type.d.ts",
    "content": "export type Unsubscribe = () => void\n"
  },
  {
    "path": "src/utils/subscriptions/type.js",
    "content": "// @flow\n\nexport type Unsubscribe = () => void\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"es6\",\n    \"module\": \"commonjs\",\n    \"moduleResolution\": \"node\",\n    \"declaration\": true,\n    \"emitDeclarationOnly\": true,\n    \"experimentalDecorators\": true\n  },\n  \"include\": [\n    \"src/**/*\"\n  ]\n}"
  },
  {
    "path": "tslint.json",
    "content": "{\n  \"extends\": [\n    \"tslint:recommended\",\n    \"tslint-config-prettier\"\n  ],\n  \"jsRules\": {},\n  \"rules\": {\n    \"interface-name\": false,\n    \"jsdoc-format\": false,\n    \"member-access\": false\n  },\n  \"rulesDirectory\": []\n}"
  }
]