Full Code of GameAnalytics/GA-SDK-UNITY for AI

master bd6962433559 cached
214 files
6.5 MB
1.7M tokens
3972 symbols
1 requests
Download .txt
Showing preview only (6,840K chars total). Download the full file or copy to clipboard to get everything.
Repository: GameAnalytics/GA-SDK-UNITY
Branch: master
Commit: bd6962433559
Files: 214
Total size: 6.5 MB

Directory structure:
gitextract_lmr6m39a/

├── .gitignore
├── CHANGELOG.md
├── CHANGELOG.md.meta
├── Documentation~/
│   └── index.md
├── Editor/
│   ├── Android/
│   │   ├── Dependencies.xml
│   │   └── Dependencies.xml.meta
│   ├── Android.meta
│   ├── GA_AssetPostprocessor.cs
│   ├── GA_AssetPostprocessor.cs.meta
│   ├── GA_AutoRun.cs
│   ├── GA_AutoRun.cs.meta
│   ├── GA_ContinuationManager.cs
│   ├── GA_ContinuationManager.cs.meta
│   ├── GA_EditorUtilities.cs
│   ├── GA_EditorUtilities.cs.meta
│   ├── GA_Menu.cs
│   ├── GA_Menu.cs.meta
│   ├── GA_PostprocessBuild.cs
│   ├── GA_PostprocessBuild.cs.meta
│   ├── GA_SettingsInspector.cs
│   ├── GA_SettingsInspector.cs.meta
│   ├── GA_SignUp.cs
│   ├── GA_SignUp.cs.meta
│   ├── GA_UpdateWindow.cs
│   ├── GA_UpdateWindow.cs.meta
│   ├── GameAnalyticsInspector.cs
│   ├── GameAnalyticsInspector.cs.meta
│   ├── Playmaker/
│   │   ├── PlayMakerPresenceCheck.cs
│   │   ├── PlayMakerPresenceCheck.cs.meta
│   │   ├── SendProgressionEventActionEditor.cs
│   │   ├── SendProgressionEventActionEditor.cs.meta
│   │   ├── SendResourceEventActionEditor.cs
│   │   └── SendResourceEventActionEditor.cs.meta
│   ├── Playmaker.meta
│   ├── com.gameanalytics.sdk.Editor.asmdef
│   └── com.gameanalytics.sdk.Editor.asmdef.meta
├── Editor.meta
├── Gizmos/
│   ├── GameAnalytics/
│   │   ├── Images/
│   │   │   ├── active.png.meta
│   │   │   ├── default.png.meta
│   │   │   ├── delete.png.meta
│   │   │   ├── game.png.meta
│   │   │   ├── home.png.meta
│   │   │   ├── info.png.meta
│   │   │   ├── instrument.png.meta
│   │   │   ├── question.png.meta
│   │   │   ├── update_orange.png.meta
│   │   │   └── user.png.meta
│   │   ├── Images.meta
│   │   └── gaLogo.png.meta
│   └── GameAnalytics.meta
├── Gizmos.meta
├── GooglePackages/
│   ├── com.google.external-dependency-manager-1.2.168.tgz
│   └── com.google.external-dependency-manager-1.2.168.tgz.meta
├── GooglePackages.meta
├── LICENSE.md
├── LICENSE.md.meta
├── README.md
├── README.md.meta
├── Runtime/
│   ├── Android/
│   │   ├── gameanalytics.aar
│   │   ├── gameanalytics.aar.meta
│   │   ├── unity_gameanalytics.jar
│   │   └── unity_gameanalytics.jar.meta
│   ├── Android.meta
│   ├── GameAnalytics.dll.meta
│   ├── Linux/
│   │   └── sqlite3.so.meta
│   ├── Linux.meta
│   ├── Playmaker/
│   │   ├── Examples/
│   │   │   ├── GameAnalyticsPlayMakerDemo.unitypackage
│   │   │   └── GameAnalyticsPlayMakerDemo.unitypackage.meta
│   │   ├── Examples.meta
│   │   ├── GAInitialize.cs
│   │   ├── GAInitialize.cs.meta
│   │   ├── GetABTestingId.cs
│   │   ├── GetABTestingId.cs.meta
│   │   ├── GetABTestingVariantId.cs
│   │   ├── GetABTestingVariantId.cs.meta
│   │   ├── GetRemoteConfigsValueAsString.cs
│   │   ├── GetRemoteConfigsValueAsString.cs.meta
│   │   ├── IsRemoteConfigsReady.cs
│   │   ├── IsRemoteConfigsReady.cs.meta
│   │   ├── SendAdEvent.cs
│   │   ├── SendAdEvent.cs.meta
│   │   ├── SendBusinessEvent.cs
│   │   ├── SendBusinessEvent.cs.meta
│   │   ├── SendDesignEvent.cs
│   │   ├── SendDesignEvent.cs.meta
│   │   ├── SendErrorEvent.cs
│   │   ├── SendErrorEvent.cs.meta
│   │   ├── SendProgressionEvent.cs
│   │   ├── SendProgressionEvent.cs.meta
│   │   ├── SendResourceEvent.cs
│   │   ├── SendResourceEvent.cs.meta
│   │   ├── SetCustomDimension.cs
│   │   └── SetCustomDimension.cs.meta
│   ├── Playmaker.meta
│   ├── Prefabs/
│   │   ├── GameAnalytics.prefab
│   │   └── GameAnalytics.prefab.meta
│   ├── Prefabs.meta
│   ├── SamsungTV/
│   │   ├── GameAnalytics.SamsungTV.dll.meta
│   │   ├── Mono.Data.Sqlite.dll.meta
│   │   ├── sqlite3.c
│   │   ├── sqlite3.c.meta
│   │   ├── sqlite3.h
│   │   └── sqlite3.h.meta
│   ├── SamsungTV.meta
│   ├── Scripts/
│   │   ├── ATT/
│   │   │   ├── GameAnalyticsATTClient.cs
│   │   │   ├── GameAnalyticsATTClient.cs.meta
│   │   │   ├── GameAnalyticsATTObjCBridge.cs
│   │   │   └── GameAnalyticsATTObjCBridge.cs.meta
│   │   ├── ATT.meta
│   │   ├── Enums.cs
│   │   ├── Enums.cs.meta
│   │   ├── Events/
│   │   │   ├── GAValidator.cs
│   │   │   ├── GAValidator.cs.meta
│   │   │   ├── GA_Ads.cs
│   │   │   ├── GA_Ads.cs.meta
│   │   │   ├── GA_Business.cs
│   │   │   ├── GA_Business.cs.meta
│   │   │   ├── GA_Debug.cs
│   │   │   ├── GA_Debug.cs.meta
│   │   │   ├── GA_Design.cs
│   │   │   ├── GA_Design.cs.meta
│   │   │   ├── GA_Error.cs
│   │   │   ├── GA_Error.cs.meta
│   │   │   ├── GA_Progression.cs
│   │   │   ├── GA_Progression.cs.meta
│   │   │   ├── GA_Resource.cs
│   │   │   ├── GA_Resource.cs.meta
│   │   │   ├── GA_Setup.cs
│   │   │   ├── GA_Setup.cs.meta
│   │   │   ├── GA_SpecialEvents.cs
│   │   │   └── GA_SpecialEvents.cs.meta
│   │   ├── Events.meta
│   │   ├── GameAnalytics.cs
│   │   ├── GameAnalytics.cs.meta
│   │   ├── IGameAnalyticsATTListener.cs
│   │   ├── IGameAnalyticsATTListener.cs.meta
│   │   ├── Setup/
│   │   │   ├── Settings.cs
│   │   │   └── Settings.cs.meta
│   │   ├── Setup.meta
│   │   ├── State/
│   │   │   ├── GAState.cs
│   │   │   └── GAState.cs.meta
│   │   ├── State.meta
│   │   ├── Utilities/
│   │   │   ├── GA_MiniJson.cs
│   │   │   └── GA_MiniJson.cs.meta
│   │   ├── Utilities.meta
│   │   ├── Wrapper/
│   │   │   ├── GA_AndroidWrapper.cs
│   │   │   ├── GA_AndroidWrapper.cs.meta
│   │   │   ├── GA_MonoWrapper.cs
│   │   │   ├── GA_MonoWrapper.cs.meta
│   │   │   ├── GA_TizenWrapper.cs
│   │   │   ├── GA_TizenWrapper.cs.meta
│   │   │   ├── GA_UWPWrapper.cs
│   │   │   ├── GA_UWPWrapper.cs.meta
│   │   │   ├── GA_WebGLWrapper.cs
│   │   │   ├── GA_WebGLWrapper.cs.meta
│   │   │   ├── GA_Wrapper.cs
│   │   │   ├── GA_Wrapper.cs.meta
│   │   │   ├── GA_iOSWrapper.cs
│   │   │   ├── GA_iOSWrapper.cs.meta
│   │   │   ├── GA_tvOSWrapper.cs
│   │   │   └── GA_tvOSWrapper.cs.meta
│   │   └── Wrapper.meta
│   ├── Scripts.meta
│   ├── Tizen/
│   │   ├── libGameAnalytics.a
│   │   └── libGameAnalytics.a.meta
│   ├── Tizen.meta
│   ├── WSA/
│   │   ├── ARM/
│   │   │   └── GameAnalytics.UWP.dll.meta
│   │   ├── ARM.meta
│   │   ├── x64/
│   │   │   └── GameAnalytics.UWP.dll.meta
│   │   ├── x64.meta
│   │   ├── x86/
│   │   │   └── GameAnalytics.UWP.dll.meta
│   │   └── x86.meta
│   ├── WSA.meta
│   ├── WebGL/
│   │   ├── GameAnalytics.jspre
│   │   ├── GameAnalytics.jspre.meta
│   │   ├── GameAnalyticsUnity.jslib
│   │   ├── GameAnalyticsUnity.jslib.meta
│   │   ├── GameAnalyticsUtils.jspre
│   │   └── GameAnalyticsUtils.jspre.meta
│   ├── WebGL.meta
│   ├── Windows/
│   │   ├── x64/
│   │   │   └── sqlite3.dll.meta
│   │   ├── x64.meta
│   │   ├── x86/
│   │   │   └── sqlite3.dll.meta
│   │   └── x86.meta
│   ├── Windows.meta
│   ├── com.gameanalytics.sdk.Runtime.asmdef
│   ├── com.gameanalytics.sdk.Runtime.asmdef.meta
│   ├── iOS/
│   │   ├── GameAnalytics.h
│   │   ├── GameAnalytics.h.meta
│   │   ├── GameAnalytics.xcprivacy
│   │   ├── GameAnalytics.xcprivacy.meta
│   │   ├── GameAnalyticsATTObjCBridge.h
│   │   ├── GameAnalyticsATTObjCBridge.h.meta
│   │   ├── GameAnalyticsATTObjCBridge.m
│   │   ├── GameAnalyticsATTObjCBridge.m.meta
│   │   ├── GameAnalyticsHyperBidHelper.m
│   │   ├── GameAnalyticsHyperBidHelper.m.meta
│   │   ├── GameAnalyticsTopOnHelper.m
│   │   ├── GameAnalyticsTopOnHelper.m.meta
│   │   ├── GameAnalyticsUnity.m
│   │   ├── GameAnalyticsUnity.m.meta
│   │   ├── libGameAnalytics.a
│   │   └── libGameAnalytics.a.meta
│   ├── iOS.meta
│   ├── tvOS/
│   │   ├── GameAnalyticsTVOS.h
│   │   ├── GameAnalyticsTVOS.h.meta
│   │   ├── GameAnalyticsTVOSUnity.m
│   │   ├── GameAnalyticsTVOSUnity.m.meta
│   │   ├── libGameAnalyticsTVOS.a
│   │   └── libGameAnalyticsTVOS.a.meta
│   └── tvOS.meta
├── Runtime.meta
├── package.json
└── package.json.meta

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
!Documentation~


================================================
FILE: CHANGELOG.md
================================================
Changelog
---------
<!--(CHANGELOG_TOP)-->
**7.10.6**
* Fixed a bug where GetUserID() could be called before SDK was initialized.
* GetUserID() now returns empty string if called before SDK is not done initializing.

**7.10.5**
* Android: fixed a bug regarding OAID logic
* Android: improved internal user id logic

**7.10.4**
* added fix for bug with getting user id on win32/mac/android
* added fix for tvOS platform
* fixed warning for unsupported platform
* removed unused variables
* repair Max SDK integration

**7.10.3**
* removed user sign-up form
* updated GATool links
* updated documentation links
* updated login requests
* update game and organization requests

**7.10.2**
* fixed legacy FPS warning if events were sent before sdk was initialized:fixed webgl string marshaling bug

**7.10.1**
* fixed error event validation on iOS

**7.10.0**
* added checks to safely upgrade from 7.6.0 , 7.6.1, 7.7.0 without having any impact on metrics for Android

* fixed impression callback json for Digital Turbine
* removed deprecated functions from webgl
* fixed warnings for android

**7.10.0-beta**
* added checks to safely upgrade from 7.6.0 , 7.6.1, 7.7.0 without having any impact on metrics for Android
* fixed impression callback json for Digital Turbine

**7.9.1**
* consent status is now tracked correctly on iOS
* bug fix for fps tracking on iOS
* updated ironsource impression listener

**7.9.0**
* added the iOS Privacy Manifest
* fixed app boot time measurement for Android & iOS

**7.8.0**
* added optional session performance metrics collection
* added optional app boot-time metric collection
* fixed a warning when submitting FPS before initializing the SDK
* added ad event support for webgl

**7.8.0-beta**
* beta versionadded optional session performance metrics collection
* added optional app boot-time metric collection

**7.7.2**
* added optional external user id:increased resource currency limit from 20 to 50

**7.7.1**
* fixed a bug in the android user-id generation

**7.7.0**
* updated impression listeners for AdMob 8.0.0 (please check out the migration guide: https://developers.google.com/admob/unity/migration)
* added functionality to opt out of GAID & IDFV tracking
* optional local event caching if event submission is disabled:support for AppOpen ads
* support for custom initialization callbacks

**7.6.2b**
** beta version **
* added functionality for opting out of GAID/IDFV tracking on request
* option to enable local storing of events with submission disabled
* updated impression listener for AdMob 8.0.0, please check the migration guide: https://developers.google.com/admob/unity/migration
* beta support for app open ads

**7.6.1**
* fixed openupm version

**7.6.0**
* deprecated armv7 and i386 for iOS
* added option to opt-out of GAID tracking for android

**7.5.1**
* reintroduced the health event
* added method to retrieve the user id

**7.5.0**
* Temporary removal of FPS tracking due to rare issues observed. FPS tracking will be reintroduced in the future once the cause is identified and fixed.

**7.4.4**
* dependency fix for openupm package

**7.4.2**
* bugfix for android health event error reporting

**7.4.1**
* fixed a crash with the health event on android if not on the main thread:added session_num for the init event on iOS

**7.4.0**
* Added Health event
* Includes FPS data measurement automatically sent at the end of the session


**7.3.24**
* fixed fps script for when pausing game

**7.3.23**
* fixed bug with custom fields (locale related bug)

**7.3.22**
* added external dependency manager for .unitypackage release as well to solve issues with appset id on android

**7.3.21**
* fixed bug in internal error reporting

**7.3.20**
* added event uuid to events sent

**7.3.19**
* updated dependencies

**7.3.18**
* fixed fps event script to still run coroutines when Time.timeScale = 0 by using WaitForSecondsRealtime instead of WaitForSeconds

**7.3.17**
* added method manually update gamekey and secretkey

**7.3.16**
* fixed uwp build errors

**7.3.15**
* changed frequency logic for fps events

**7.3.14**
* small fix

**7.3.13**
* fixed crash for android builds

**7.3.12**
* removed imei identifiers and other alternative identifiers from user identifier logic (android)

**7.3.11**
* updated dependency to external dependency resolver

**7.3.10**
* adding missing .meta file for upm release
* switched to using openupm for scoped registry when using upm, please update the upm setup for the unity sdk

**7.3.9**
* fixed upm package.json

**7.3.8**
* fixed upm dependecy

**7.3.7**
* added dependencies.xml for upm release

**7.3.6**
* fixed playmaker bugs

**7.3.5**
* changed settings to have FPS events turned off by default

**7.3.4**
* added error events to be sent for invalid custom event fields used
* added optional mergeFields argument to event methods to merge with global custom fields instead of overwrite them

**7.3.3**
* playmaker fixes

**7.3.2**
* fixed missing custom event fields for when trying to fix missing session end events

**7.3.1**
* fixed editor ui bug with games with the same name

**7.3.0**
* added global custom event fields function to allow to add custom fields to events sent automatically by the SDK

**7.2.1**
* added functionality to force a new user in a/b testing without having to uninstall app first, simply use custom user id function to set a new user id which hasn't been used yet

**7.2.0**
* added support for admob impression events

**7.1.1**
* fixed build errors for desktop platforms

**7.1.0**
* added custom event fields feature

**7.0.5**
* updated hyperbid ilrd integration

**7.0.4**
* added ios part for aequus ilrd integration

**7.0.3**
* renamed ATT method name to avoid dupplicate symbols

**7.0.2**
* fixes to ILRD integrations

**7.0.1**
* updated ILRD integrations

**7.0.0**
* Changed user identifier logic in preparation for Google changes to GAID. User id for a new install is now a randomised GUID. Existing installs that update SDK will continue using previous identifier logic. It is recommended to update as soon as possible to reduce impact on calculated metrics.

**6.7.1**
* fixes to max irld integration

**6.7.0**
* added option to enable native exceptions error reporting for android and ios

**6.6.4**
* prepared for google advertising identifier changes (will not use google advertising identifier when user has opted out) (android)
* it should now be possible to not show idfa consent dialog if you don't have any third party code that needs to use idfa

**6.6.3**
* removed unnecessary append of stacktrace when stacktrace is missing from warning/error messages sent to GA backend

**6.6.2**
* fixed ios compile errors
* fixed ILRD related compile error
* added ios_testflight to events coming from testflight builds

**6.6.1**
* added ILRD support for Aequus SDK
* fixed ILRD related bug

**6.6.0**
* more fixes for using ILRD when using SDK from UPM
* OBS now you need to use GameAnalyticsILRD class to subscribe to ILRD impression events (also download latest GA ILRD .unitypackage to get it to work if using SDK from UPM, see docs for more info)
* prepared for google advertising identifier changes (will not use google advertising identifier when user has opted out) (android)

**6.5.8**
* fixed compile issues when using ILRD with SDK from UPM (now you have to download a seperate .unitypackage when using ILRD with SDK from UPM)

**6.5.7**
* added missing architectures of ios libraries

**6.5.6**
* fixed crash bug for ios

**6.5.5**
* reverted back to v6.5.2 as crashes happen for ios which have not been narrowed down to what is causing this yet

**6.5.4**
* fixed typo error

**6.5.3**
* added support for max in impression events
* fixed dupplicate symbol on ios

**6.5.2**
* fixed crashes for android devices without google play API (android)

**6.5.1**
* added support for OAID (android)
* added missing export function for UWP lib (uwp)

**6.5.0**
* added app tracking transparency request function (ios)

**6.4.1**
* added idfa consent status field to events (ios)

**6.4.0**
* added support for unity package manager

**6.3.14**
* fixed playmaker scripts

**6.3.13**
* fixed compiler errors for 2017.1
* updated client ts validator

**6.3.12**
* changed AppTrackingTransparency dependency to be optional for iOS

**6.3.11**
* fixed dependencies for iOS (min. XCode 12 required)

**6.3.10**
* fix to mopub impression events, require min. mopub v5.14.0
* REMEMBER to update to this version of the SDK if you use MoPub impression events and you have min. v5.14.0 of MoPub SDK inatalled or else the SDK will not send MoPub impression event for you any more

**6.3.9**
* fixed ironsource impression event compile error

**6.3.8**
* removed memory info from automatic crash reports
* updated sqlite lib

**6.3.7**
* corrected ad event annotation

**6.3.6**
* updated validator for impression events (android, ios)

**6.3.5**
* fixed user log in function in editor for unity 2017

**6.3.4**
* fixed null exception happening some times on desktop platforms (mac, linux, windows)

**6.3.3**
* updated impression events

**6.3.2**
* fixed www build errors on unity 2017

**6.3.1**
* improved user identifer flow for ios (ios)

**6.3.0**
* updated user identifier flow to prepare for iOS 14 IDFA changes (ios)

**6.2.4**
* fixed progression events with scores (android)

**6.2.3**
* editor ui error fix

**6.2.2**
* tvos compile fix

**6.2.1**
* added better error messages for API calls potentially being removed in the future

**6.2.0**
* exposed functions to get AB testing id and variant id

**6.1.5**
* fixed bug in ui for settings.asset

**6.1.4**
* fixed instant app bug(android)
* remember to update your proguard file (https://gameanalytics.com/docs/item/unity-sdk#proguard-only-android)

**6.1.3**
* fixed sign up function
* added organizations to games overview
* you might need to delete the settings.asset file and set the keys again for the different platforms

**6.1.2**
* fixed ios compile error (ios)

**6.1.1**
* added missing instant app dependency (android)

**6.1.0**
* added new impression event, see documentation page for more info (android, ios)

**6.0.15**
* added support for android instant apps (android)

**6.0.14**
* added session_num to init requests

**6.0.13**
* logo updated

**6.0.12**
* hiding archived games bug fix in editor

**6.0.11**
* removed facebook, gender and birthyear methods

**6.0.10**
* settings namespace fix

**6.0.9**
* A/B testing fixes

**6.0.8**
* namespace bug fix
* batchmode bug fix

**6.0.7**
* fixed getRemoteConfigsValueAsString bug (ios)

**6.0.6**
* remote configs fixes

**6.0.5**
* fixed javascript events bug

**6.0.4**
* fixed ios events bug

**6.0.3**
* fixed ios build error

**6.0.2**
* corrected naming of function

**6.0.1**
* small fixes

**6.0.0**
* Remote Config calls have been updated and the old calls have deprecated. Please see GA documentation for the new SDK calls and migration guide
* A/B testing support added
* ad event added (ios, android only)

**5.2.2**
* compile error fixes for windows builds

**5.2.1**
* fixed uwp compile errors

**5.2.0**
* improved device identifier flow (android)
* removed google play services dependency
* OPS refactored IMEI code out into a seperate library, please check the documentation page for how to use it now (android, only relevant for apps using IMEI ids)

**5.1.11**
* fixed import bug for 2019.2

**5.1.10**
* fixed compile error in GA_SettingsInspector script

**5.1.9**
* fixed typo in editor script

**5.1.8**
* session fixes for desktop platforms

**5.1.7**
* bug fix for special events script: changed script to `Time.unscaledTime` instead of `Time.time` to calculate FPS. This might affect your FPS metrics if your game is using fast motion or slow motion effects in your game in other words if you change time scale frequently during your game.

**5.1.6**
* thread bug fix for desktop

**5.1.5**
* session length fixed for desktop platforms

**5.1.4**
* small correction for logging for desktop

**5.1.3**
* small timing fix for initialization

**5.1.2**
* fixes to events not being sent for desktop platforms

**5.1.1**
* ios and tvos wrapper fixes

**5.1.0**
* added enable/disable event submission function

**5.0.12**
* UnityWebRequest fixes

**5.0.11**
* fixed 2018.3 www deprecated warnings

**5.0.10**
* fixed business event validation

**5.0.9**
* fixed json deserializing for desktop platforms

**5.0.8**
* fixed freeze bug on exit for desktop platforms

**5.0.7**
* added gameanalytics android aar library file instead of jar file

**5.0.6**
* tvOS bug fixes

**5.0.5**
* added play services resolver

**5.0.4**
* added missing playmaker actions

**5.0.3**
* fixed playmaker errors

**5.0.2**
* changed log warnings to log errors for when notifying the user about not having initialized the SDK before trying to send events
* updated android google play libraries (android)

**5.0.1**
* fixed compile error for ios

**5.0.0**
* added command center functionality
* fixed various bugs

**4.0.6**
* removed mac sqlite library so local installed one is used (mac)

**4.0.5**
* fixes to not trying to send events if SDK has not been initialized yet

**4.0.4**
* fixes to android session handling
* added custom dimensions to design and error events
* fixes to sqlite db path for windows and linux platforms

**4.0.3**
* small uwp bug fix (uwp)

**4.0.2**
* small editor bug fixes for stop showing log warnings after calling initialize function

**4.0.1**
* small update for wehn signing up in editor

**4.0.0**
* dumped major version to emphasize the need to use manual initialization of the SDK now
* added log warnings to warn if the SDK has not been manually initialized before sending events

**3.11.3**
* fixed session length bug
* fixed not allowing to send event when session is not started

**3.11.2**
* updated android google play libraries (android)

**3.11.1**
* various bug fixes in android native library (android)

**3.11.0**
* ui updated for sign up dialog
* PLEASE NOTE: initialization is now manual and not automatic anymore

**3.10.5**
* 'install' field added to session start events when called for the first time (android, ios)

**3.10.4**
* fixed javascript library (webgl)

**3.10.3**
* bug fix to webgl platform (webgl)

**3.10.2**
* Android manifest file fix for Android SDK Tools v26.0.2 (android)
* Send build number option fixed for Unity 5.6 and up (ios, android)
* Added stack traces for non-development builds

**3.10.1**
* Advanced option Send Player Settings Build changed to work without refreshing the Settings object. Player Settings Build number is sent for iOS and identification Version number for Android when option is used (Unity 5)

**3.10.0**
* changed the behaviour of using IMEI with the 'READ_PHONE_STATE' permission to guarantee precise analytics for certain regions (android)

**3.9.12**
* fixed webgl wrapper to use correct namespace (webgl)

**3.9.11**
* updated to v10.2.1 of Google Play Services libraries (android)

**3.9.10**
* prevent session_num and transaction_num from resetting if app is killed (ios)

**3.9.9**
* added option to exclude Google Play libraries when building (android)

**3.9.8**
* bug fix for end session when using manual session handling

**3.9.7**
* bug fix for sending events straight after initializing sdk (webgl)

**3.9.6**
* minor fix for app version validation (android)

**3.9.5**
* removed debug log messages (webgl)

**3.9.4**
* session length precision improvement

**3.9.3**
* option added in Advanced for automatically assigning the bundle version from Player Settings as the build number (ios and android)
* fixed error at launch for builds using manual session handling (webgl)

**3.9.2**
* added app signature and channel id (which app store was the app installed from)(android)
* added IMEI as fallback option for identifier when Google AID and Android ID is not available on the device (requires to add optional READ_PHONE_STATE permission)(android)

**3.9.1**
* fixed webgl compile hang/freeze bug

**3.9.0**
* native tizen library added

**3.8.9**
* added native javascript library for WebGL (webgl)

**3.8.8**
* added bundle_id, app version and app build tracking (iOS and Android)

**3.8.7**
* possible to set custom dimensions and demographics before initialize

**3.8.6**
* session length bug fix
* fixed bug when using manual session handling (android)

**3.8.5**
* bug fix to design events sent without value

**3.8.4**
* fix to Windows Store App certification test (Windows Phone) caused by GameAnalytics plugin (wsa)

**3.8.3**
* removed x86_64h architecture from sqlite3.bundle (mac)

**3.8.2**
* fix to Windows Store App certification test caused by GameAnalytics plugin (wsa)

**3.8.1**
* fix to Windows Store App certification test caused by GameAnalytics plugin (uwp, wsa)

**3.8.0**
* added parameters validation for custom methods called during editor runtime

**3.7.2**
* updated guide
* fixed editor dynamic path finding issue on Windows machines

**3.7.1**
* added support for Tizen

**3.7.0**
* added support for Universal Windows 8 (Windows 8 and Windows Phone 8)

**3.6.3**
* fixed user_id tracking for iOS 10 (ios, tvos)
* added MetroLog to use for logging in UWP library (uwp)
* small fix related to manual session handling (android)

**3.6.2**
* fix isAppStoreReceiptSandbox bug on iOS 6 devices and lower (iOS)

**3.6.1**
* renamed methods to avoid duplicate symbols (iOS)

**3.6.0**
* Google Play Services libraries updated to version 9.4.0 (android)

**3.5.3**
* fixed manual session handling compiling issue (iOS, tvOS)

**3.5.2**
* fixed support for UWP with IL2CPP backend bug

**3.5.1**
* added manual session handling
* fixed bug for client timestamp handling and session length in certain edge cases

**3.5.0**
* added support for UWP (uwp)

**3.4.3**
* changed to use https to send events on windows, Mac, Windows, Linux and WebGL (mac, windows, linux, webgl)

**3.4.2**
* fixed playmaker bug

**3.4.1**
* external storage read and write permissions are now optional (android)

**3.4.0**
* added support for Standalone platforms (Windows, Mac, Linux) and WebGL
* reworked settings inspector UI to support new platforms
* moved Unity 4.6.x support to a separate package (see [here](https://github.com/GameAnalytics/GA-SDK-UNITY/wiki/Download%20and%20Installation) for more details)

**3.3.3**
* fixed bug related to network changes for Android API level 23 and above (android)

**3.3.2**
* Added max cap (20) for custom dimensions, resource currencies and resource item types
* tvOS library Unity asset importer bug fix

**3.3.1**
* Google Play Services libraries updated to version 8.4.0 (android)

**3.3.0**
* feature for using a custom user id
* fix testflight issue with user id generation (ios)

**3.2.3**
* fixed disappearing GameAnalytics prefab bug (happening since Unity 5.3.0)

**3.2.2**
* postprocess script fixed when ios library is not installed
* Unity 4.7.x support fix

**3.2.1**
* error events fixed (android)

**3.2.0**
* added support for tvOS (tvos)

**3.1.1**
* fixed inclusion of faulty library in 3.1.0 (ios)

**3.1.0**
* altered jailbreak check causing ios9 warning (ios)
* library / framework now compiled with bitcode (ios)
* alternative non-bitcode library (Xcode6) added (ios)
* restructuring to prepare for tvOS (ios)
* fix issue for offline initialization (android)

**3.0.0b**
* new java-only implementation (android)
* install size reduced (android)

**2.4.3**
* Google Play Services libraries updated to version 8.3.0 (android)

**2.4.2**
* Postprocessor script for XCode fixed for Unity 4.6.x (ios)

**2.4.1**
* android.permission.WRITE_EXTERNAL_STORAGE not needed anymore (android)

**2.4.0**
* fixed tracking bug with ad opt out enabled (android)

**2.3.2**
* no network connection bug fix (android)

**2.3.1**
* fix related to connection changes (android)


**2.3.0**
* 'Receiver not registered' bug fix (android)

**2.2.0**
* improved code structure (android)
* built library with Xcode7 (iOS 9.0)
* fixed missing links in setup guide
* minor tweaks

**2.1.4**
* increased allowed character count to 64 for many parameters (android)

**2.1.3**
* fix for session length (android)

**2.1.2**
* fixed enable/disable submit errors in unity settings
* improved session handling (android)
* minor bug fixes (android)

**2.1.1**
* fixed rare editor bug causing settings object replication
* minor bug fixes (android)

**2.1.0**
* Android support added
* Google Play purchase validation
* support for individual game keys for each supported platform

**2.0.4**
* fixed an issue with going-to-background on iOS 6
* fixed submit of birthyear value

**2.0.3**
* fixed an iOS 6 issue
* added a post process build script for setting up Xcode (Unity 5 only)

**2.0.2**
* fix for PlayMaker events
* fix for Critical FPS events

**2.0.1**
* fix for business event receipt rejection in some cases
* tweaked local db size trimming

**2.0.0**
* redesigned Unity SDK
* initially with **only iOS** support
* progression event
* business event validation
* resource event
* custom dimensions


================================================
FILE: CHANGELOG.md.meta
================================================
fileFormatVersion: 2
guid: b80fcd3c2bb2841c5bce7e35c4ea0c34
TextScriptImporter:
  externalObjects: {}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: Documentation~/index.md
================================================
Review the Unity SDK documentation at:
https://gameanalytics.com/docs/unity-sdk


================================================
FILE: Editor/Android/Dependencies.xml
================================================
<dependencies>
    <androidPackages>
        <androidPackage spec="com.google.android.instantapps:instantapps:1.1.0"/>
        <androidPackage spec="com.google.android.gms:play-services-appset:16.0.2"/>
    </androidPackages>
</dependencies>


================================================
FILE: Editor/Android/Dependencies.xml.meta
================================================
fileFormatVersion: 2
guid: f4d3591460e6344cca6fe66ecbde645f
TextScriptImporter:
  externalObjects: {}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: Editor/Android.meta
================================================
fileFormatVersion: 2
guid: 7f4ee4210c9704d2a9a6b650fefc3a07
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: Editor/GA_AssetPostprocessor.cs
================================================
using UnityEditor;

namespace GameAnalyticsSDK.Editor
{
    public class GA_AssetPostprocessor : AssetPostprocessor
    {
        private const string AssetsPrependPath = GA_SettingsInspector.IsCustomPackage ? "Packages/com.gameanalytics.sdk/Runtime" : "Assets/GameAnalytics";
        static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
        {
            #region iOS and tvOS
            {
                PluginImporter importer = AssetImporter.GetAtPath(AssetsPrependPath + "/Plugins/tvOS/GameAnalyticsTVOS.h") as PluginImporter;
                if(importer != null && (importer.GetCompatibleWithAnyPlatform() || !importer.GetCompatibleWithPlatform(BuildTarget.tvOS) || importer.GetCompatibleWithPlatform(BuildTarget.iOS)))
                {
                    importer.SetCompatibleWithAnyPlatform(false);
                    importer.SetCompatibleWithEditor(false);
                    importer.SetCompatibleWithPlatform(BuildTarget.Android, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinux64, false);
#if UNITY_2019_2_OR_NEWER
#else
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinux, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinuxUniversal, false);
#endif
#if UNITY_2017_3_OR_NEWER
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSX, false);
#else
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel64, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXUniversal, false);
#endif
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows64, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.iOS, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.tvOS, true);
                    importer.SetCompatibleWithPlatform(BuildTarget.WebGL, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.WSAPlayer, false);
                    importer.SaveAndReimport();
                }
            }
            {
                PluginImporter importer = AssetImporter.GetAtPath(AssetsPrependPath + "/Plugins/tvOS/GameAnalyticsTVOSUnity.m") as PluginImporter;
                if(importer != null && (importer.GetCompatibleWithAnyPlatform() || !importer.GetCompatibleWithPlatform(BuildTarget.tvOS) || importer.GetCompatibleWithPlatform(BuildTarget.iOS)))
                {
                    importer.SetCompatibleWithAnyPlatform(false);
                    importer.SetCompatibleWithEditor(false);
                    importer.SetCompatibleWithPlatform(BuildTarget.Android, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinux64, false);
#if UNITY_2019_2_OR_NEWER
#else
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinux, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinuxUniversal, false);
#endif
#if UNITY_2017_3_OR_NEWER
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSX, false);
#else
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel64, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXUniversal, false);
#endif
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows64, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.iOS, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.tvOS, true);
                    importer.SetCompatibleWithPlatform(BuildTarget.WebGL, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.WSAPlayer, false);
                    importer.SaveAndReimport();
                }
            }
            {
                PluginImporter importer = AssetImporter.GetAtPath(AssetsPrependPath + "/Plugins/tvOS/libGameAnalyticsTVOS.a") as PluginImporter;
                if(importer != null && (importer.GetCompatibleWithAnyPlatform() || !importer.GetCompatibleWithPlatform(BuildTarget.tvOS) || importer.GetCompatibleWithPlatform(BuildTarget.iOS)))
                {
                    importer.SetCompatibleWithAnyPlatform(false);
                    importer.SetCompatibleWithEditor(false);
                    importer.SetCompatibleWithPlatform(BuildTarget.Android, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinux64, false);
#if UNITY_2019_2_OR_NEWER
#else
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinux, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinuxUniversal, false);
#endif
#if UNITY_2017_3_OR_NEWER
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSX, false);
#else
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel64, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXUniversal, false);
#endif
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows64, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.iOS, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.tvOS, true);
                    importer.SetCompatibleWithPlatform(BuildTarget.WebGL, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.WSAPlayer, false);
                    importer.SaveAndReimport();
                }
            }
            #endregion // iOS and tvOS
            #region General
            {
                PluginImporter importer = AssetImporter.GetAtPath(AssetsPrependPath + "/Plugins/GameAnalytics.dll") as PluginImporter;
                if(importer != null && (importer.GetCompatibleWithAnyPlatform() ||
                    !importer.GetCompatibleWithPlatform(BuildTarget.StandaloneLinux64) ||
#if UNITY_2019_2_OR_NEWER
#else
                    !importer.GetCompatibleWithPlatform(BuildTarget.StandaloneLinux) ||
                    !importer.GetCompatibleWithPlatform(BuildTarget.StandaloneLinuxUniversal) ||
#endif
#if UNITY_2017_3_OR_NEWER
                    !importer.GetCompatibleWithPlatform(BuildTarget.StandaloneOSX) ||
#else
                    !importer.GetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel) ||
                    !importer.GetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel64) ||
                    !importer.GetCompatibleWithPlatform(BuildTarget.StandaloneOSXUniversal) ||
#endif
                    !importer.GetCompatibleWithPlatform(BuildTarget.StandaloneWindows) ||
                    !importer.GetCompatibleWithPlatform(BuildTarget.StandaloneWindows64) ||
                    importer.GetCompatibleWithPlatform(BuildTarget.WSAPlayer)))
                {
                    importer.SetCompatibleWithAnyPlatform(false);
                    importer.SetCompatibleWithEditor(false);
                    importer.SetCompatibleWithPlatform(BuildTarget.Android, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinux64, true);
#if UNITY_2019_2_OR_NEWER
#else
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinux, true);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinuxUniversal, true);
#endif
#if UNITY_2017_3_OR_NEWER
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSX, true);
#else
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel, true);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel64, true);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXUniversal, true);
                    importer.SetCompatibleWithPlatform(BuildTarget.Tizen, false);
#endif
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows, true);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows64, true);
                    importer.SetCompatibleWithPlatform(BuildTarget.iOS, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.tvOS, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.WebGL, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.WSAPlayer, false);
                    importer.SaveAndReimport();
                }
            }
            #endregion // General
            #region Standalone
            {
                PluginImporter importer = AssetImporter.GetAtPath(AssetsPrependPath + "/Plugins/Windows/x86/sqlite3.dll") as PluginImporter;
                if(importer != null && (importer.GetCompatibleWithAnyPlatform() || !importer.GetCompatibleWithPlatform(BuildTarget.StandaloneWindows)))
                {
                    importer.SetCompatibleWithAnyPlatform(false);
                    importer.SetCompatibleWithEditor(false);
                    importer.SetCompatibleWithPlatform(BuildTarget.Android, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinux64, false);
#if UNITY_2019_2_OR_NEWER
#else
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinux, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinuxUniversal, false);
#endif
#if UNITY_2017_3_OR_NEWER
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSX, false);
#else
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel64, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXUniversal, false);
#endif
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows, true);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows64, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.iOS, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.tvOS, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.WebGL, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.WSAPlayer, false);
                    importer.SaveAndReimport();
                }
            }
            {
                PluginImporter importer = AssetImporter.GetAtPath(AssetsPrependPath + "/Plugins/Windows/x64/sqlite3.dll") as PluginImporter;
                if(importer != null && (importer.GetCompatibleWithAnyPlatform() || !importer.GetCompatibleWithPlatform(BuildTarget.StandaloneWindows64)))
                {
                    importer.SetCompatibleWithAnyPlatform(false);
                    importer.SetCompatibleWithEditor(false);
                    importer.SetCompatibleWithPlatform(BuildTarget.Android, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinux64, false);
#if UNITY_2019_2_OR_NEWER
#else
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinux, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinuxUniversal, false);
#endif
#if UNITY_2017_3_OR_NEWER
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSX, false);
#else
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel64, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXUniversal, false);
#endif
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows64, true);
                    importer.SetCompatibleWithPlatform(BuildTarget.iOS, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.tvOS, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.WebGL, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.WSAPlayer, false);
                    importer.SaveAndReimport();
                }
            }
            {
                PluginImporter importer = AssetImporter.GetAtPath(AssetsPrependPath + "/Plugins/Linux/sqlite3.so") as PluginImporter;
                if(importer != null && (importer.GetCompatibleWithAnyPlatform() ||
                    !importer.GetCompatibleWithPlatform(BuildTarget.StandaloneLinux64)
#if UNITY_2019_2_OR_NEWER
#else
                    || !importer.GetCompatibleWithPlatform(BuildTarget.StandaloneLinux) ||
                    !importer.GetCompatibleWithPlatform(BuildTarget.StandaloneLinuxUniversal)
#endif
                ))
                {
                    importer.SetCompatibleWithAnyPlatform(false);
                    importer.SetCompatibleWithEditor(false);
                    importer.SetCompatibleWithPlatform(BuildTarget.Android, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinux64, true);
#if UNITY_2019_2_OR_NEWER
#else
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinux, true);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinuxUniversal, true);
#endif
#if UNITY_2017_3_OR_NEWER
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSX, false);
#else
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel64, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXUniversal, false);
#endif
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows64, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.iOS, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.tvOS, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.WebGL, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.WSAPlayer, false);
                    importer.SaveAndReimport();
                }
            }
            #endregion // Standalone
            #region WebGL
            {
                PluginImporter importer = AssetImporter.GetAtPath(AssetsPrependPath + "/Plugins/WebGL/GameAnalytics.WebGL.dll") as PluginImporter;
                if(importer != null && (importer.GetCompatibleWithAnyPlatform() || !importer.GetCompatibleWithPlatform(BuildTarget.WebGL)))
                {
                    importer.SetCompatibleWithAnyPlatform(false);
                    importer.SetCompatibleWithEditor(false);
                    importer.SetCompatibleWithPlatform(BuildTarget.Android, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinux64, false);
#if UNITY_2019_2_OR_NEWER
#else
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinux, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinuxUniversal, false);
#endif
#if UNITY_2017_3_OR_NEWER
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSX, false);
#else
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel64, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXUniversal, false);
#endif
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows64, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.iOS, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.tvOS, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.WebGL, true);
                    importer.SetCompatibleWithPlatform(BuildTarget.WSAPlayer, false);
                    importer.SaveAndReimport();
                }
            }
            {
                PluginImporter importer = AssetImporter.GetAtPath(AssetsPrependPath + "/Plugins/WebGL/HandleIO.jslib") as PluginImporter;
                if(importer != null && (importer.GetCompatibleWithAnyPlatform() || !importer.GetCompatibleWithPlatform(BuildTarget.WebGL)))
                {
                    importer.SetCompatibleWithAnyPlatform(false);
                    importer.SetCompatibleWithEditor(false);
                    importer.SetCompatibleWithPlatform(BuildTarget.Android, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinux64, false);
#if UNITY_2019_2_OR_NEWER
#else
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinux, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinuxUniversal, false);
#endif
#if UNITY_2017_3_OR_NEWER
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSX, false);
#else
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel64, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXUniversal, false);
#endif
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows64, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.iOS, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.tvOS, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.WebGL, true);
                    importer.SetCompatibleWithPlatform(BuildTarget.WSAPlayer, false);
                    importer.SaveAndReimport();
                }
            }
            {
                PluginImporter importer = AssetImporter.GetAtPath(AssetsPrependPath + "/Plugins/WebGL/Mono.Data.Sqlite.dll") as PluginImporter;
                if(importer != null && (importer.GetCompatibleWithAnyPlatform() || !importer.GetCompatibleWithPlatform(BuildTarget.WebGL)))
                {
                    importer.SetCompatibleWithAnyPlatform(false);
                    importer.SetCompatibleWithEditor(false);
                    importer.SetCompatibleWithPlatform(BuildTarget.Android, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinux64, false);
#if UNITY_2019_2_OR_NEWER
#else
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinux, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinuxUniversal, false);
#endif
#if UNITY_2017_3_OR_NEWER
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSX, false);
#else
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel64, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXUniversal, false);
#endif
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows64, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.iOS, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.tvOS, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.WebGL, true);
                    importer.SetCompatibleWithPlatform(BuildTarget.WSAPlayer, false);
                    importer.SaveAndReimport();
                }
            }
            {
                PluginImporter importer = AssetImporter.GetAtPath(AssetsPrependPath + "/Plugins/WebGL/sqlite.c") as PluginImporter;
                if(importer != null && (importer.GetCompatibleWithAnyPlatform() || !importer.GetCompatibleWithPlatform(BuildTarget.WebGL)))
                {
                    importer.SetCompatibleWithAnyPlatform(false);
                    importer.SetCompatibleWithEditor(false);
                    importer.SetCompatibleWithPlatform(BuildTarget.Android, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinux64, false);
#if UNITY_2019_2_OR_NEWER
#else
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinux, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinuxUniversal, false);
#endif
#if UNITY_2017_3_OR_NEWER
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSX, false);
#else
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel64, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXUniversal, false);
#endif
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows64, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.iOS, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.tvOS, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.WebGL, true);
                    importer.SetCompatibleWithPlatform(BuildTarget.WSAPlayer, false);
                    importer.SaveAndReimport();
                }
            }
            {
                PluginImporter importer = AssetImporter.GetAtPath(AssetsPrependPath + "/Plugins/WebGL/sqlite.h") as PluginImporter;
                if(importer != null && (importer.GetCompatibleWithAnyPlatform() || !importer.GetCompatibleWithPlatform(BuildTarget.WebGL)))
                {
                    importer.SetCompatibleWithAnyPlatform(false);
                    importer.SetCompatibleWithEditor(false);
                    importer.SetCompatibleWithPlatform(BuildTarget.Android, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinux64, false);
#if UNITY_2019_2_OR_NEWER
#else
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinux, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinuxUniversal, false);
#endif
#if UNITY_2017_3_OR_NEWER
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSX, false);
#else
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel64, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXUniversal, false);
#endif
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows64, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.iOS, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.tvOS, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.WebGL, true);
                    importer.SetCompatibleWithPlatform(BuildTarget.WSAPlayer, false);
                    importer.SaveAndReimport();
                }
            }
            #endregion // WebGL
            #region WSA
            {
                PluginImporter importer = AssetImporter.GetAtPath(AssetsPrependPath + "/Plugins/WSA/x86/GameAnalytics.UWP.dll") as PluginImporter;
                if (importer != null && (importer.GetCompatibleWithAnyPlatform() || !importer.GetCompatibleWithPlatform(BuildTarget.WSAPlayer) ||
                    !importer.GetPlatformData(BuildTarget.WSAPlayer, "SDK").Equals("UWP") ||
                    !importer.GetPlatformData(BuildTarget.WSAPlayer, "CPU").Equals("X86") ||
                    !importer.GetPlatformData(BuildTarget.WSAPlayer, "ScriptingBackend").Equals("Il2Cpp")))
                {
                    importer.SetCompatibleWithAnyPlatform(false);
                    importer.SetCompatibleWithEditor(false);
                    importer.SetCompatibleWithPlatform(BuildTarget.Android, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinux64, false);
#if UNITY_2019_2_OR_NEWER
#else
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinux, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinuxUniversal, false);
#endif
#if UNITY_2017_3_OR_NEWER
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSX, false);
#else
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel64, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXUniversal, false);
#endif
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows64, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.iOS, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.tvOS, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.WebGL, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.WSAPlayer, true);
                    importer.SetPlatformData(BuildTarget.WSAPlayer, "SDK", "UWP");
                    importer.SetPlatformData(BuildTarget.WSAPlayer, "CPU", "X86");
                    importer.SetPlatformData(BuildTarget.WSAPlayer, "ScriptingBackend", "Il2Cpp");
                    importer.SaveAndReimport();
                }
            }
            {
                PluginImporter importer = AssetImporter.GetAtPath(AssetsPrependPath + "/Plugins/WSA/x64/GameAnalytics.UWP.dll") as PluginImporter;
                if (importer != null && (importer.GetCompatibleWithAnyPlatform() || !importer.GetCompatibleWithPlatform(BuildTarget.WSAPlayer) ||
                    !importer.GetPlatformData(BuildTarget.WSAPlayer, "SDK").Equals("UWP") ||
                    !importer.GetPlatformData(BuildTarget.WSAPlayer, "CPU").Equals("X64") ||
                    !importer.GetPlatformData(BuildTarget.WSAPlayer, "ScriptingBackend").Equals("Il2Cpp")))
                {
                    importer.SetCompatibleWithAnyPlatform(false);
                    importer.SetCompatibleWithEditor(false);
                    importer.SetCompatibleWithPlatform(BuildTarget.Android, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinux64, false);
#if UNITY_2019_2_OR_NEWER
#else
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinux, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinuxUniversal, false);
#endif
#if UNITY_2017_3_OR_NEWER
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSX, false);
#else
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel64, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXUniversal, false);
#endif
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows64, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.iOS, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.tvOS, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.WebGL, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.WSAPlayer, true);
                    importer.SetPlatformData(BuildTarget.WSAPlayer, "SDK", "UWP");
                    importer.SetPlatformData(BuildTarget.WSAPlayer, "CPU", "X64");
                    importer.SetPlatformData(BuildTarget.WSAPlayer, "ScriptingBackend", "Il2Cpp");
                    importer.SaveAndReimport();
                }
            }
            {
                PluginImporter importer = AssetImporter.GetAtPath(AssetsPrependPath + "/Plugins/WSA/ARM/GameAnalytics.UWP.dll") as PluginImporter;
                if (importer != null && (importer.GetCompatibleWithAnyPlatform() || !importer.GetCompatibleWithPlatform(BuildTarget.WSAPlayer) ||
                    !importer.GetPlatformData(BuildTarget.WSAPlayer, "SDK").Equals("UWP") ||
                    !importer.GetPlatformData(BuildTarget.WSAPlayer, "CPU").Equals("ARM") ||
                    !importer.GetPlatformData(BuildTarget.WSAPlayer, "ScriptingBackend").Equals("Il2Cpp")))
                {
                    importer.SetCompatibleWithAnyPlatform(false);
                    importer.SetCompatibleWithEditor(false);
                    importer.SetCompatibleWithPlatform(BuildTarget.Android, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinux64, false);
#if UNITY_2019_2_OR_NEWER
#else
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinux, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneLinuxUniversal, false);
#endif
#if UNITY_2017_3_OR_NEWER
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSX, false);
#else
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXIntel64, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneOSXUniversal, false);
#endif
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows64, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.iOS, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.tvOS, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.WebGL, false);
                    importer.SetCompatibleWithPlatform(BuildTarget.WSAPlayer, true);
                    importer.SetPlatformData(BuildTarget.WSAPlayer, "SDK", "UWP");
                    importer.SetPlatformData(BuildTarget.WSAPlayer, "CPU", "ARM");
                    importer.SetPlatformData(BuildTarget.WSAPlayer, "ScriptingBackend", "Il2Cpp");
                    importer.SaveAndReimport();
                }
            }
            #endregion // WSA
        }
    }
}


================================================
FILE: Editor/GA_AssetPostprocessor.cs.meta
================================================
fileFormatVersion: 2
guid: a2403619fc556407983e282336344f15
timeCreated: 1457357714
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: Editor/GA_AutoRun.cs
================================================
using UnityEngine;
using UnityEditor;

namespace GameAnalyticsSDK.Editor
{
	public class GA_Autorun : AssetPostprocessor
	{
		static void OnPostprocessAllAssets ( string[] importedAssets,string[] deletedAssets,string[] movedAssets,string[] movedFromAssetPaths)
		{
			string[] splitPath = Application.dataPath.Split('/');
			
			if (!splitPath[splitPath.Length - 2].Equals("ga_unity_wrapper copy"))
			{
				GA_SettingsInspector.CheckForUpdates();
			}
		}
	}
}

================================================
FILE: Editor/GA_AutoRun.cs.meta
================================================
fileFormatVersion: 2
guid: 0a3d477cdf26e4516ab204fc8fd9a841
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 


================================================
FILE: Editor/GA_ContinuationManager.cs
================================================
using UnityEngine;
using System.Collections;

using System;
using System.Collections.Generic;
using System.Linq;
using UnityEditor;

namespace GameAnalyticsSDK
{
	//Inspired from answer on answers.unity3d.com: http://answers.unity3d.com/questions/221651/yielding-with-www-in-editor.html
	public static class GA_ContinuationManager
	{
		private class EditorCoroutine
		{
			public EditorCoroutine(IEnumerator routine, Func<bool> done)
			{
				Routine = routine;
				Done = done;
			}
			public IEnumerator Routine { get; private set; }
			public Func<bool> Done {get; private set;}
			public Action ContinueWith { get; private set; }
		}

		private static readonly List<EditorCoroutine> jobs = new List<EditorCoroutine>();

		public static void StartCoroutine(IEnumerator routine,Func<bool> done)
		{
			if (!jobs.Any())
			{
				EditorApplication.update += Update;
			}
			jobs.Add(new EditorCoroutine(routine,done));
		}

		private static void Update()
		{
			for (int i = jobs.Count-1; i>=0; --i)
			{
				var jobIt = jobs[i];
#if UNITY_2017_1_OR_NEWER
                if (!jobIt.Routine.MoveNext()) //movenext is false if coroutine completed
                {
                    jobs.RemoveAt(i);
                }
#else
                if (jobIt.Done())
				{
					if (!jobIt.Routine.MoveNext()) //movenext is false if coroutine completed
					{
                        Debug.Log("GA_ContinuationManager.Update: Routine finished");
                        jobs.RemoveAt(i);
					}
				}
#endif
            }
			if (!jobs.Any())
			{
				EditorApplication.update -= Update;
			}
		}
	}
}


================================================
FILE: Editor/GA_ContinuationManager.cs.meta
================================================
fileFormatVersion: 2
guid: 546155fc8c8e946beb7aa56aa713067c
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 


================================================
FILE: Editor/GA_EditorUtilities.cs
================================================
using UnityEngine;
using System.Collections;
using System;
using System.Collections.Generic;

namespace GameAnalyticsSDK.Editor
{
	public static class GA_EditorUtilities {

		private const string XCaller = "unity";
		private const string XCallerKey = "X-Caller";
		private const string XCallerVersionKey = "X-Caller-Version";
		private const string XCallerPlatformKey = "X-Caller-Platform";
		private const string XAuthorizationKey = "X-Authorization";

		private static string XCallerVersion
		{
			get {
				return Application.unityVersion;
			}
		}

		private static string XCallerPlatform
		{
			get {
				EPlatform platform = EPlatform.Windows;

				PlatformID platformId = Environment.OSVersion.Platform;

				if (platformId == PlatformID.MacOSX) {
					platform = EPlatform.Mac;
				}
				else if (platformId == PlatformID.Unix) {
					platform = EPlatform.Linux;
				}
				else if (platformId == PlatformID.Win32NT || 
					platformId == PlatformID.Win32S ||
					platformId == PlatformID.Win32Windows ||
					platformId == PlatformID.WinCE) {

					platform = EPlatform.Windows;
				}

				return platform.ToString ();
			}
		}

		public static Dictionary<string, string> WWWHeaders()
		{
			Dictionary<string, string> result = new Dictionary<string, string> ();
			result [XCallerKey] = XCaller;
			result [XCallerVersionKey] = XCallerVersion;
			result [XCallerPlatformKey] = XCallerPlatform;

			return result;
		}

		public static Dictionary<string, string> WWWHeadersWithAuthorization(string token)
		{
			Dictionary<string, string> result = new Dictionary<string, string> ();
			result [XCallerKey] = XCaller;
			result [XCallerVersionKey] = XCallerVersion;
			result [XCallerPlatformKey] = XCallerPlatform;
			result [XAuthorizationKey] = token;

			return result;
		}
	}

	public enum EPlatform
	{
		Windows,
		Mac,
		Linux
	}
}


================================================
FILE: Editor/GA_EditorUtilities.cs.meta
================================================
fileFormatVersion: 2
guid: dfd276755e3d24398b20a727ba63f40a
timeCreated: 1433250864
licenseType: Free
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 
  assetBundleName: 
  assetBundleVariant: 


================================================
FILE: Editor/GA_Menu.cs
================================================
using UnityEngine;
using UnityEditor;
using System.IO;
using System.Text.RegularExpressions;

namespace GameAnalyticsSDK.Editor
{
    public static class GA_Menu
    {
        [MenuItem ("Window/GameAnalytics/Select Settings", false, 0)]
        static void SelectGASettings ()
        {
            Selection.activeObject = GameAnalytics.SettingsGA;
        }

        [MenuItem ("Window/GameAnalytics/Setup Guide", false, 100)]
        static void SetupAndTour ()
        {
            GA_SignUp signup = ScriptableObject.CreateInstance<GA_SignUp> ();
            signup.maxSize = new Vector2(640, 600);
            signup.minSize = new Vector2(640, 600);

            signup.titleContent = new GUIContent ("GameAnalytics - Setup Guide");
            signup.ShowUtility ();
            signup.Opened();

            signup.SwitchToGuideStep();
        }

        [MenuItem ("Window/GameAnalytics/Create GameAnalytics Object", false, 200)]
        static void AddGASystemTracker ()
        {
            if (Object.FindObjectOfType (typeof(GameAnalytics)) == null)
            {
                GameObject go = PrefabUtility.InstantiatePrefab(AssetDatabase.LoadAssetAtPath(GameAnalytics.WhereIs("GameAnalytics.prefab", "Prefab"), typeof(GameObject))) as GameObject;
                go.name = "GameAnalytics";
                Selection.activeObject = go;
                Undo.RegisterCreatedObjectUndo(go, "Created GameAnalytics Object");
            }
            else
            {
                Debug.LogWarning ("A GameAnalytics object already exists in this scene - you should never have more than one per scene!");
            }
        }

        [MenuItem ("Window/GameAnalytics/PlayMaker/Toggle Scripts", false, 400)]
        static void TogglePlayMaker ()
        {
            bool enabled = false;
            bool fail = false;

            string searchText = "#if false";
            string replaceText = "#if true";

            string[] _files = new string[] {
                "GAInitialize.cs",
                "GetABTestingId.cs",
                "GetABTestingVariantId.cs",
                "GetRemoteConfigsValueAsString.cs",
                "IsRemoteConfigsReady.cs",
                "SendAdEvent.cs",
                "SendBusinessEvent.cs",
                "SendDesignEvent.cs",
                "SendErrorEvent.cs",
                "SendProgressionEvent.cs",
                "SendResourceEvent.cs",
                "SetCustomDimension.cs",
                "SendProgressionEventActionEditor.cs",
                "SendResourceEventActionEditor.cs"
            };

            foreach(string _file in _files)
            {
                try {
                    enabled = ReplaceInFile (GameAnalytics.WhereIs(_file, "Script"), searchText, replaceText);
                } catch {
                    Debug.Log("Failed to toggle "+_file);
                    fail = true;
                }
            }

            AssetDatabase.Refresh();

            if (fail)
            {
                PlayMakerPresenceCheck.ResetPrefs();
                Debug.Log("Failed to toggle PlayMaker Scripts.");
            }else if (enabled)
            {
                Debug.Log("Enabled PlayMaker Scripts.");
            }else
            {
                PlayMakerPresenceCheck.ResetPrefs();
                Debug.Log("Disabled PlayMaker Scripts.");
            }
        }

        public static bool ReplaceInFile (string filePath, string searchText, string replaceText)
        {
            bool enabled = false;

            StreamReader reader = new StreamReader (filePath);
            string content = reader.ReadToEnd ();
            reader.Close ();

            if (content.StartsWith(searchText))
            {
                enabled = true;
                content = Regex.Replace (content, searchText, replaceText);
            }
            else
            {
                enabled = false;
                content = Regex.Replace (content, replaceText, searchText);
            }

            StreamWriter writer = new StreamWriter (filePath);
            writer.Write (content);
            writer.Close ();

            return enabled;
        }
    }
}


================================================
FILE: Editor/GA_Menu.cs.meta
================================================
fileFormatVersion: 2
guid: 406a6696e05cc447c8d6a01396d21b90
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 


================================================
FILE: Editor/GA_PostprocessBuild.cs
================================================
using UnityEditor.Callbacks;
using UnityEditor;
using System.IO;
using System;
using System.Linq;
using System.Collections.Generic;

namespace GameAnalyticsSDK.Editor
{
#if UNITY_2018_1_OR_NEWER
    public class GA_PostprocessBuild : UnityEditor.Build.IPreprocessBuildWithReport
#else
    public class GA_PostprocessBuild
#endif
    {
        private static string gameanalytics_mopub = "gameanalytics_mopub_enabled";
        private static string gameanalytics_fyber = "gameanalytics_fyber_enabled";
        private static string gameanalytics_ironsource = "gameanalytics_ironsource_enabled";
        private static string gameanalytics_topon = "gameanalytics_topon_enabled";
        private static string gameanalytics_max = "gameanalytics_max_enabled";
        private static string gameanalytics_aequus = "gameanalytics_aequus_enabled";
        private static string gameanalytics_hyperbid = "gameanalytics_hyperbid_enabled";
        private static string gameanalytics_admob = "gameanalytics_admob_enabled";

#if UNITY_2018_1_OR_NEWER
        public int callbackOrder
        {
            get { return 0; }
        }

        public void OnPreprocessBuild(UnityEditor.Build.Reporting.BuildReport report)
        {
            Update3rdPartyIntegrations();
        }
#endif

        [DidReloadScripts]
        private static void OnScriptsReloaded()
        {
            Update3rdPartyIntegrations();
        }

        private static void Update3rdPartyIntegrations()
        {
            UpdateMoPub();
            UpdateFyber();
            UpdateIronSource();
            UpdateTopOn();
            UpdateMax();
            UpdateAequus();
            UpdateHyperBid();
            UpdateAdMob();
        }

        private static void UpdateDefines(string entry, bool enabled, BuildTargetGroup[] groups)
        {
            foreach (var group in groups)
            {
                var defines = new List<string>(PlayerSettings.GetScriptingDefineSymbolsForGroup(group).Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries));
                var edited = false;
                if (enabled && !defines.Contains(entry))
                {
                    defines.Add(entry);
                    edited = true;
                }
                else if (!enabled && defines.Contains(entry))
                {
                    defines.Remove(entry);
                    edited = true;
                }
                if (edited) {
                    PlayerSettings.SetScriptingDefineSymbolsForGroup(group, string.Join(";", defines.ToArray()));
                }
            }
        }

#region 3rd Party Lib Detection

        /// <summary>
        /// Sets the scripting define symbol `gameanalytics_mopub_enabled` to true if MoPub classes are detected within the Unity project
        /// </summary>
        private static void UpdateMoPub()
        {
            var mopubTypes = new string[] { "MoPubBase", "MoPubManager" };
            if (TypeExists(mopubTypes))
            {
                UpdateDefines(gameanalytics_mopub, true, new BuildTargetGroup[] { BuildTargetGroup.iOS, BuildTargetGroup.Android });
            }
            else
            {
                UpdateDefines(gameanalytics_mopub, false, new BuildTargetGroup[] { BuildTargetGroup.iOS, BuildTargetGroup.Android });
            }
        }

        /// <summary>
        /// Sets the scripting define symbol `gameanalytics_fyber_enabled` to true if Fyber classes are detected within the Unity project
        /// </summary>
        private static void UpdateFyber()
        {
            var fyberTypes = new string[] { "Fyber.Interstitial", "Fyber.Banner", "Fyber.Rewarded" };
            if (TypeExists(fyberTypes))
            {
                UpdateDefines(gameanalytics_fyber, true, new BuildTargetGroup[] { BuildTargetGroup.iOS, BuildTargetGroup.Android });
            }
            else
            {
                UpdateDefines(gameanalytics_fyber, false, new BuildTargetGroup[] { BuildTargetGroup.iOS, BuildTargetGroup.Android });
            }
        }

        /// <summary>
        /// Sets the scripting define symbol `gameanalytics_ironsource_enabled` to true if IronSource classes are detected within the Unity project
        /// </summary>
        private static void UpdateIronSource()
        {
            var ironSourceTypes = new string[] { "IronSourceEvents", "IronSource" };
            if (TypeExists(ironSourceTypes))
            {
                UpdateDefines(gameanalytics_ironsource, true, new BuildTargetGroup[] { BuildTargetGroup.iOS, BuildTargetGroup.Android });
            }
            else
            {
                UpdateDefines(gameanalytics_ironsource, false, new BuildTargetGroup[] { BuildTargetGroup.iOS, BuildTargetGroup.Android });
            }
        }

        /// <summary>
        /// Sets the scripting define symbol `gameanalytics_topon_enabled` to true if TopOn classes are detected within the Unity project
        /// </summary>
        private static void UpdateTopOn()
        {
            var topOnTypes = new string[] { "AnyThinkAds.Api.ATBannerAd", "AnyThinkAds.Api.ATInterstitialAd", "AnyThinkAds.Api.ATRewardedVideo", "AnyThinkAds.Api.ATNativeAd" };
            if (TypeExists(topOnTypes))
            {
                UpdateDefines(gameanalytics_topon, true, new BuildTargetGroup[] { BuildTargetGroup.iOS, BuildTargetGroup.Android });
            }
            else
            {
                UpdateDefines(gameanalytics_topon, false, new BuildTargetGroup[] { BuildTargetGroup.iOS, BuildTargetGroup.Android });
            }
        }

        /// <summary>
        /// Sets the scripting define symbol `gameanalytics_max_enabled` to true if Max classes are detected within the Unity project
        /// </summary>
        private static void UpdateMax()
        {
            var maxTypes = new string[] { "MaxSdkCallbacks", "MaxSdk", "MaxSdkBase.AdInfo" };
            if (TypeExists(maxTypes))
            {
                UpdateDefines(gameanalytics_max, true, new BuildTargetGroup[] { BuildTargetGroup.iOS, BuildTargetGroup.Android });
            }
            else
            {
                UpdateDefines(gameanalytics_max, false, new BuildTargetGroup[] { BuildTargetGroup.iOS, BuildTargetGroup.Android });
            }
        }

        /// <summary>
        /// Sets the scripting define symbol `gameanalytics_aequus_enabled` to true if Aequus classes are detected within the Unity project
        /// </summary>
        private static void UpdateAequus()
        {
            var aequusTypes = new string[] { "Mobi.Aequus.Sdk.Aequus", "Mobi.Aequus.Sdk.AequusILRDListener", "Mobi.Aequus.Sdk.ImpressionData" };
            if (TypeExists(aequusTypes))
            {
                UpdateDefines(gameanalytics_aequus, true, new BuildTargetGroup[] { BuildTargetGroup.iOS, BuildTargetGroup.Android });
            }
            else
            {
                UpdateDefines(gameanalytics_aequus, false, new BuildTargetGroup[] { BuildTargetGroup.iOS, BuildTargetGroup.Android });
            }
        }

        /// <summary>
        /// Sets the scripting define symbol `gameanalytics_hyperbid_enabled` to true if HyperBid classes are detected within the Unity project
        /// </summary>
        private static void UpdateHyperBid()
        {
            var topOnTypes = new string[] { "HyperBid.Api.HBBannerAd", "HyperBid.Api.HBInterstitialAd", "HyperBid.Api.HBRewardedVideo", "HyperBid.Api.HBNativeAd" };
            if (TypeExists(topOnTypes))
            {
                UpdateDefines(gameanalytics_hyperbid, true, new BuildTargetGroup[] { BuildTargetGroup.iOS, BuildTargetGroup.Android });
            }
            else
            {
                UpdateDefines(gameanalytics_hyperbid, false, new BuildTargetGroup[] { BuildTargetGroup.iOS, BuildTargetGroup.Android });
            }
        }

        /// <summary>
        /// Sets the scripting define symbol `gameanalytics_admob_enabled` to true if AdMob classes are detected within the Unity project
        /// </summary>
        private static void UpdateAdMob()
        {
            var topOnTypes = new string[] { "GoogleMobileAds.Api.AdRequest", "GoogleMobileAds.Api.BannerView", "GoogleMobileAds.Api.InterstitialAd", "GoogleMobileAds.Api.RewardedAd", "GoogleMobileAds.Api.RewardedInterstitialAd" };
            if (TypeExists(topOnTypes))
            {
                UpdateDefines(gameanalytics_admob, true, new BuildTargetGroup[] { BuildTargetGroup.iOS, BuildTargetGroup.Android });
            }
            else
            {
                UpdateDefines(gameanalytics_admob, false, new BuildTargetGroup[] { BuildTargetGroup.iOS, BuildTargetGroup.Android });
            }
        }

        private static bool TypeExists(params string[] types)
        {
            if (types == null || types.Length == 0)
                return false;

            var assemblies = AppDomain.CurrentDomain.GetAssemblies();
            foreach (var assembly in assemblies)
            {
                if (types.Any(type => assembly.GetType(type) != null))
                    return true;
            }

            return false;
        }

#endregion


        [PostProcessBuild]
        public static void OnPostprocessBuild(BuildTarget buildTarget, string path)
        {
            if (buildTarget == BuildTarget.iOS || buildTarget == BuildTarget.tvOS)
            {
#if UNITY_IOS || UNITY_TVOS
                string projPath = UnityEditor.iOS.Xcode.PBXProject.GetPBXProjectPath(path);

                UnityEditor.iOS.Xcode.PBXProject proj = new UnityEditor.iOS.Xcode.PBXProject();
                proj.ReadFromString(File.ReadAllText(projPath));

#if UNITY_2019_3_OR_NEWER
                string target = proj.GetUnityMainTargetGuid();
#else
                string targetName = UnityEditor.iOS.Xcode.PBXProject.GetUnityTargetName();
                string target = proj.TargetGuidByName(targetName);
#endif

                proj.AddFileToBuild(target, proj.AddFile("usr/lib/libsqlite3.dylib", "Frameworks/libsqlite3.dylib", UnityEditor.iOS.Xcode.PBXSourceTree.Sdk));
                proj.AddFileToBuild(target, proj.AddFile("usr/lib/libz.dylib", "Frameworks/libz.dylib", UnityEditor.iOS.Xcode.PBXSourceTree.Sdk));
                proj.AddFrameworkToProject(target, "AdSupport.framework", false);
                proj.AddFrameworkToProject(target, "AppTrackingTransparency.framework", true);
                //proj.SetBuildProperty(target, "ENABLE_BITCODE", "YES");
#if gameanalytics_topon_enabled
                string toponSubPath = "Libraries/GameAnalytics/Plugins/iOS/GameAnalyticsTopOnHelper.m";
                string[] topOnGuids = AssetDatabase.FindAssets("GameAnalyticsTopOnHelper", null);
                if (topOnGuids.Length > 0)
                {
                    string[] p = AssetDatabase.GUIDToAssetPath(topOnGuids[0]).Split(new char[] { '/' }, 2);
                    if(p.Length > 1)
                    {
                        toponSubPath = "Libraries/" + p[1];
                    }
                }
                string toponHelperFilePath = Path.Combine(path, toponSubPath);
                string topOncontents = File.ReadAllText(toponHelperFilePath);
                topOncontents = topOncontents.Replace("#if gameanalytics_topon_enabled", "").Replace("#endif", "");
                File.WriteAllText(toponHelperFilePath, topOncontents);
#endif
#if gameanalytics_hyperbid_enabled
                string hyperbidSubPath = "Libraries/GameAnalytics/Plugins/iOS/GameAnalyticsHyperBidHelper.m";
                string[] hyperBidGuids = AssetDatabase.FindAssets("GameAnalyticsHyperBidHelper", null);
                if (hyperBidGuids.Length > 0)
                {
                    string[] p = AssetDatabase.GUIDToAssetPath(hyperBidGuids[0]).Split(new char[] { '/' }, 2);
                    if(p.Length > 1)
                    {
                        hyperbidSubPath = "Libraries/" + p[1];
                    }
                }
                string hyperbidHelperFilePath = Path.Combine(path, hyperbidSubPath);
                string hyperbidContents = File.ReadAllText(hyperbidHelperFilePath);
                hyperbidContents = hyperbidContents.Replace("#if gameanalytics_hyperbid_enabled", "").Replace("#endif", "");
                File.WriteAllText(hyperbidHelperFilePath, hyperbidContents);
#endif

                File.WriteAllText(projPath, proj.WriteToString());
#endif
            }

        }
    }
}


================================================
FILE: Editor/GA_PostprocessBuild.cs.meta
================================================
fileFormatVersion: 2
guid: 19da6243a1a7449a585f5f945b7a1f94
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 


================================================
FILE: Editor/GA_SettingsInspector.cs
================================================
/// <summary>
/// The inspector for the GA prefab.
/// </summary>

using UnityEngine;
using UnityEditor;
using System.Collections;
using System.Collections.Generic;
using System.Reflection.Emit;
using System.Reflection;
using System;
using GameAnalyticsSDK.Utilities;
using GameAnalyticsSDK.Setup;
using System.Text.RegularExpressions;
#if UNITY_2017_1_OR_NEWER
using UnityEngine.Networking;
#endif

namespace GameAnalyticsSDK.Editor
{
    [CustomEditor(typeof(GameAnalyticsSDK.Setup.Settings))]
    public class GA_SettingsInspector : UnityEditor.Editor
    {
        public const bool IsCustomPackage = true;
        private const string AssetsPrependPath = IsCustomPackage ? "Packages/com.gameanalytics.sdk" : "Assets/GameAnalytics";

        private GUIContent _publicKeyLabel = new GUIContent("Game Key", "Your GameAnalytics Game Key - copy/paste from the GA website.");
        private GUIContent _privateKeyLabel = new GUIContent("Secret Key", "Your GameAnalytics Secret Key - copy/paste from the GA website.");
        private GUIContent _emailLabel = new GUIContent("Email", "Your GameAnalytics user account email.");
        private GUIContent _passwordLabel = new GUIContent("Password", "Your GameAnalytics user account password. Must be at least 8 characters in length.");
        private GUIContent _organizationsLabel = new GUIContent("Org.", "Organizations tied to your GameAnalytics user account.");
        private GUIContent _studiosLabel = new GUIContent("Studio", "Studios tied to your GameAnalytics user account.");
        private GUIContent _gamesLabel = new GUIContent("Game", "Games tied to the selected GameAnalytics studio.");
        private GUIContent _build = new GUIContent("Build", "The current version of the game. Updating the build name for each test version of the game will allow you to filter by build when viewing your data on the GA website.");
        private GUIContent _infoLogEditor = new GUIContent("Info Log Editor", "Show info messages from GA in the unity editor console when submitting data.");
        private GUIContent _infoLogBuild = new GUIContent("Info Log Build", "Show info messages from GA in builds (f.x. Xcode for iOS).");
        private GUIContent _verboseLogBuild = new GUIContent("Verbose Log Build", "Show full info messages from GA in builds (f.x. Xcode for iOS). Noet that this option includes long JSON messages sent to the server.");
        private GUIContent _useManualSessionHandling = new GUIContent("Use manual session handling", "Manually choose when to end and start a new session. Note initializing of the SDK will automatically start the first session.");

        private GUIContent _enableSDKInitEvent  = new GUIContent("Enable SDK Init Event (boot time on Android, iOS)", "Enable the SDK Init Event to automatically track the boot time (time from application launch to the GameAnalytics SDK initialization)");
        private GUIContent _enableHealthEvent   = new GUIContent("Enable Session Performance Metrics", "Enables automatic performance data collection across the whole session. This includes sampling fps, memory consumption & cpu usage without any noticeable performance impact.");

        private GUIContent _enableMemoryTracking     = new GUIContent("Health Memory Snapshots (Android, iOS)", "Performance & error events will take memory usage snapshots");
        private GUIContent _enableHardwareTracking   = new GUIContent("Health Hardware Info (Android, iOS)", "Memory information collected (if available) and added as properties to health events. Determining total device memory, system memory usage and app memory usage");
        private GUIContent _enableFPSHistogram       = new GUIContent("Submit Session FPS Histogram (Android, iOS)", "Enable FPS sampling across the entire session to ultimately send an FPS histogram at the end of the session. FPS insights can be reviewed in the GameAnalytics Health feature");
        private GUIContent _enableMemoryHistogram    = new GUIContent("Submit Memory Usage Histogram (Android, iOS)", "Enable memory usage sampling across the entire session to ultimately send an memory histogram at the end of the session. Memory insights can be reviewed in the GameAnalytics Health feature");

#if UNITY_5_6_OR_NEWER
        private GUIContent _usePlayerSettingsBunldeVersionForBuild = new GUIContent("Send Version* (Android, iOS) as build number", "The SDK will automatically fetch the version* number on Android and iOS and send it as the GameAnalytics build number.");
#else
        private GUIContent _usePlayerSettingsBunldeVersionForBuild = new GUIContent("Send Build number (iOS) and Version* (Android) as build number", "The SDK will automatically fetch the build number on iOS and the version* number on Android and send it as the GameAnalytics build number.");
#endif
        //private GUIContent _sendExampleToMyGame        = new GUIContent("Get Example Game Data", "If enabled data collected while playing the example tutorial game will be sent to your game (using your game key and secret key). Otherwise data will be sent to a premade GA test game, to prevent it from polluting your data.");
        private GUIContent _account = new GUIContent("Account", "This tab allows you to login and automatically retrieve your Game Key and Secret Key.");
        private GUIContent _setup = new GUIContent("Setup", "This tab shows general options which are relevant for a wide variety of messages sent to GameAnalytics.");
        private GUIContent _advanced = new GUIContent("Advanced", "This tab shows advanced and misc. options for the GameAnalytics SDK.");
        private GUIContent _customDimensions01 = new GUIContent("Custom Dimensions 01", "List of custom dimensions 01.");
        private GUIContent _customDimensions02 = new GUIContent("Custom Dimensions 02", "List of custom dimensions 02.");
        private GUIContent _customDimensions03 = new GUIContent("Custom Dimensions 03", "List of custom dimensions 03.");
        private GUIContent _resourceItemTypes = new GUIContent("Resource Item Types", "List of Resource Item Types.");
        private GUIContent _resourceCurrrencies = new GUIContent("Resource Currencies", "List of Resource Currencies.");
        private GUIContent _gaFpsAverage = new GUIContent("Submit Average FPS (Legacy)", "Submit the average frames per second. Warning: This FPS tracking approach will be replaced in a future update.");
        private GUIContent _gaFpsCritical = new GUIContent("Submit Critical FPS (Legacy)", "Submit a message whenever the frames per second falls below a certain threshold. The location of the Track Target will be used for critical FPS events. Warning: This FPS tracking approach will be replaced in a future update.");
        private GUIContent _gaFpsCriticalThreshold = new GUIContent("FPS <", "Frames per second threshold.");
        private GUIContent _gaSubmitErrors = new GUIContent("Submit Unity Errors Automatically", "Submit error and exception messages to the GameAnalytics server. Useful for getting relevant data when the game crashes, etc.");
        private GUIContent _gaNativeErrorReporting = new GUIContent("Submit Native Errors (Android, iOS) Automatically", "Submit error and exception messages from native errors and exceptions to the GameAnalytics server. Useful for getting relevant data when the game crashes, etc. from native code.");

        private GUIContent _gameSetupIcon;
        private bool _gameSetupIconOpen = false;
        private GUIContent _gameSetupIconMsg = new GUIContent("Your game and secret key will authenticate the game. Please set the build version too. All fields are required.");
        private GUIContent _customDimensionsIcon;
        private bool _customDimensionsIconOpen = false;
        private GUIContent _customDimensionsIconMsg = new GUIContent("Define your custom dimension values below. Values that are not defined will be ignored.");
        private GUIContent _resourceTypesIcon;
        private bool _resourceTypesIconOpen = false;
        private GUIContent _resourceTypesIconMsg = new GUIContent("Define all your resource currencies and resource item types. Values that are not defined will be ignored.");
        private GUIContent _advancedSettingsIcon;
        private bool _advancedSettingsIconOpen = false;
        private GUIContent _advancedSettingsIconMsg = new GUIContent("Advanced settings allows you to enable tracking of Unity errors and exceptions, and frames per second (for performance).");
        private GUIContent _debugSettingsIcon;
        private bool _debugSettingsIconOpen = false;
        private GUIContent _debugSettingsIconMsg = new GUIContent("Debug settings allows you to enable info log for the editor or for builds (Xcode, etc.). Enabling verbose logging will show additional JSON messages in builds.");

        private GUIContent  _healthEventIcon;
        private bool        _healthEventIconOpen = false;
        private GUIContent  _healthEventIconMsg  = new GUIContent("Enable automatic tracking of events to discover and address issues related to how a game is technically running on devices/clients. Tracking options include errors, fps/memory usage histograms, app boot and hardware configuration");

        private GUIContent _deleteIcon;
        private GUIContent _homeIcon;
        private GUIContent _infoIcon;
        private GUIContent _instrumentIcon;
        private GUIContent _questionIcon;

        private GUIStyle _orangeUpdateLabelStyle;
        private GUIStyle _orangeUpdateIconStyle;

        //private static readonly Texture2D _triggerAdNotEnabledTexture = new Texture2D(1, 1);
        private static bool _checkedProjectNames = false;

        private const string _unityToken = "KKy7MQNc2TEUOeK0EMtR";

        private const string _gaUrl = "https://platform.gameanalytics.com/ext/v1/";

        private const string _gaToolUrl = "https://tool.gameanalytics.com";

        private const string _gaForgotPasswordUrl = _gaToolUrl + "/forgot-password";

        private const string _gaSettingsUrl = _gaToolUrl + "/game/{0}/settings/general";

        private const string _gaOverviewUrl = _gaToolUrl + "/game/{0}/overview";

        private const string _gaLoginUrl = _gaToolUrl + "/login?";

        private const string _gaSignUpUrl = _gaToolUrl + "/signup";

        private const string _gaSupportUrl = "http://support.gameanalytics.com/";

        private const int MaxNumberOfDimensions = 20;

        private int selectedPlatformIndex = 0;
        private string[] availablePlatforms;

        private const int MAJOR_V = 0;
        private const int MINOR_V = 1;
        private const int PATCH_V = 2;
        private const int ALL_V   = 3;

        void OnEnable()
        {
            GameAnalyticsSDK.Setup.Settings ga = target as GameAnalyticsSDK.Setup.Settings;

            if (ga.UpdateIcon == null)
            {
                ga.UpdateIcon = (Texture2D)AssetDatabase.LoadAssetAtPath(AssetsPrependPath + "/Gizmos/GameAnalytics/Images/update_orange.png", typeof(Texture2D));
            }

            if (ga.DeleteIcon == null)
            {
                ga.DeleteIcon = (Texture2D)AssetDatabase.LoadAssetAtPath(AssetsPrependPath + "/Gizmos/GameAnalytics/Images/delete.png", typeof(Texture2D));
            }

            if (ga.GameIcon == null)
            {
                ga.GameIcon = (Texture2D)AssetDatabase.LoadAssetAtPath(AssetsPrependPath + "/Gizmos/GameAnalytics/Images/game.png", typeof(Texture2D));
            }

            if (ga.HomeIcon == null)
            {
                ga.HomeIcon = (Texture2D)AssetDatabase.LoadAssetAtPath(AssetsPrependPath + "/Gizmos/GameAnalytics/Images/home.png", typeof(Texture2D));
            }

            if (ga.InfoIcon == null)
            {
                ga.InfoIcon = (Texture2D)AssetDatabase.LoadAssetAtPath(AssetsPrependPath + "/Gizmos/GameAnalytics/Images/info.png", typeof(Texture2D));
            }

            if (ga.InstrumentIcon == null)
            {
                ga.InstrumentIcon = (Texture2D)AssetDatabase.LoadAssetAtPath(AssetsPrependPath + "/Gizmos/GameAnalytics/Images/instrument.png", typeof(Texture2D));
            }

            if (ga.QuestionIcon == null)
            {
                ga.QuestionIcon = (Texture2D)AssetDatabase.LoadAssetAtPath(AssetsPrependPath + "/Gizmos/GameAnalytics/Images/question.png", typeof(Texture2D));
            }

            if (ga.UserIcon == null)
            {
                ga.UserIcon = (Texture2D)AssetDatabase.LoadAssetAtPath(AssetsPrependPath + "/Gizmos/GameAnalytics/Images/user.png", typeof(Texture2D));
            }

            if (_gameSetupIcon == null)
            {
                _gameSetupIcon = new GUIContent(ga.InfoIcon, "Game Setup.");
            }

            if (_customDimensionsIcon == null)
            {
                _customDimensionsIcon = new GUIContent(ga.InfoIcon, "Custom Dimensions.");
            }

            if (_resourceTypesIcon == null)
            {
                _resourceTypesIcon = new GUIContent(ga.InfoIcon, "Resource Types.");
            }

            if (_advancedSettingsIcon == null)
            {
                _advancedSettingsIcon = new GUIContent(ga.InfoIcon, "Advanced Settings.");
            }

            if (_debugSettingsIcon == null)
            {
                _debugSettingsIcon = new GUIContent(ga.InfoIcon, "Debug Settings.");
            }

            if (_healthEventIcon == null)
            {
                _healthEventIcon = new GUIContent(ga.InfoIcon, "Performance Metrics.");
            }

            if (_deleteIcon == null)
            {
                _deleteIcon = new GUIContent(ga.DeleteIcon, "Delete.");
            }

            if (_homeIcon == null)
            {
                _homeIcon = new GUIContent(ga.HomeIcon, "Your GameAnalytics webpage tool.");
            }

            if (_instrumentIcon == null)
            {
                _instrumentIcon = new GUIContent(ga.InstrumentIcon, "GameAnalytics setup guide.");
            }

            if (_questionIcon == null)
            {
                _questionIcon = new GUIContent(ga.QuestionIcon, "GameAnalytics support.");
            }

            if (ga.Logo == null)
            {
                ga.Logo = (Texture2D)AssetDatabase.LoadAssetAtPath(AssetsPrependPath + "/Gizmos/GameAnalytics/gaLogo.png", typeof(Texture2D));
            }
        }

        public override void OnInspectorGUI()
        {
            GameAnalyticsSDK.Setup.Settings ga = target as GameAnalyticsSDK.Setup.Settings;

            EditorGUI.indentLevel = 1;
            EditorGUILayout.Space();

            if (ga.SignupButton == null)
            {
                GUIStyle signupButton = new GUIStyle(GUI.skin.button);
                signupButton.normal.background = (Texture2D)AssetDatabase.LoadAssetAtPath(AssetsPrependPath + "/Gizmos/GameAnalytics/Images/default.png", typeof(Texture2D));
                signupButton.active.background = (Texture2D)AssetDatabase.LoadAssetAtPath(AssetsPrependPath + "/Gizmos/GameAnalytics/Images/active.png", typeof(Texture2D));
                signupButton.normal.textColor = Color.white;
                signupButton.active.textColor = Color.white;
                signupButton.fontSize = 14;
                signupButton.fontStyle = FontStyle.Bold;
                ga.SignupButton = signupButton;
            }

            #region Header section

            GUILayout.BeginHorizontal();

            GUILayout.Label(ga.Logo, new GUILayoutOption[] {
                GUILayout.Width(32),
                GUILayout.Height(32)
            });

            GUILayout.BeginVertical();

            GUILayout.Space(8);

            GUILayout.BeginHorizontal();

            GUILayout.Label("Unity SDK v." + GameAnalyticsSDK.Setup.Settings.VERSION);

            GUILayout.EndHorizontal();
            GUILayout.EndVertical();

            DrawLinkButton(_homeIcon, GUI.skin.label, _gaLoginUrl, GUILayout.Width(24), GUILayout.Height(24));

            DrawLinkButton(_questionIcon, GUI.skin.label, "http://support.gameanalytics.com/", GUILayout.Width(24), GUILayout.Height(24));

            DrawLinkButton(_instrumentIcon, GUI.skin.label, _gaSignUpUrl, GUILayout.Width(24), GUILayout.Height(24));

            GUILayout.EndHorizontal();

            EditorGUILayout.Space();

            string updateStatus = GA_UpdateWindow.UpdateStatus(GameAnalyticsSDK.Setup.Settings.VERSION);

            if (!updateStatus.Equals(string.Empty))
            {
                GUILayout.BeginHorizontal();

                GUILayout.Space(10);

                _orangeUpdateLabelStyle = new GUIStyle(EditorStyles.label);
                _orangeUpdateLabelStyle.normal.textColor = new Color(0.875f, 0.309f, 0.094f);

                _orangeUpdateIconStyle = new GUIStyle(EditorStyles.label);

                if (GUILayout.Button(ga.UpdateIcon, _orangeUpdateIconStyle, GUILayout.MaxWidth(17)))
                {
                    OpenUpdateWindow();
                }

                GUILayout.Label(updateStatus, _orangeUpdateLabelStyle);

                if (ga.Organizations == null)
                {
                    GUILayout.EndHorizontal();
                    GUILayout.Space(2);
                }
            }
            else
            {
                if (ga.Organizations != null)
                {
                    GUILayout.BeginHorizontal();
                }
                else
                {
                    GUILayout.Space(22);
                }
            }

            if (ga.Organizations != null)
            {
                GUILayout.FlexibleSpace();

                float minW = 0;
                float maxW = 0;
                GUIContent email = new GUIContent(ga.EmailGA);
                EditorStyles.miniLabel.CalcMinMaxWidth(email, out minW, out maxW);
                GUILayout.Label(email, EditorStyles.miniLabel, GUILayout.MaxWidth(maxW));

                GUILayout.BeginVertical();
                //GUILayout.Space(-1);

                if (GUILayout.Button("Log out", GUILayout.MaxWidth(67)))
                {
                    ga.Organizations = null;
                    SetLoginStatus("Not logged in.", ga);
                }

                GUILayout.EndVertical();

                GUILayout.EndHorizontal();
            }

            EditorGUILayout.Space();

            #endregion // Header section

            #region IntroScreen
            if (ga.IntroScreen)
            {
                bool finishIntro = false;
                for (int i = 0; i < GameAnalytics.SettingsGA.Platforms.Count; ++i)
                {
                    if (GameAnalytics.SettingsGA.GetGameKey(i).Length > 0 || GameAnalytics.SettingsGA.GetSecretKey(i).Length > 0)
                    {
                        finishIntro = true;
                        break;
                    }
                }

                if (finishIntro)
                {
                    GameAnalytics.SettingsGA.IntroScreen = false;
                }
                else
                {
                    if (!_checkedProjectNames && !EditorPrefs.GetBool("GA_Installed" + "-" + Application.dataPath, false))
                    {
                        _checkedProjectNames = true;

                        if (!PlayerSettings.companyName.Equals("DefaultCompany"))
                        {
                            GameAnalytics.SettingsGA.StudioName = PlayerSettings.companyName;
                        }
                        if (!PlayerSettings.productName.StartsWith("New Unity Project"))
                        {
                            GameAnalytics.SettingsGA.GameName = PlayerSettings.productName;
                        }
                        EditorPrefs.SetBool("GA_Installed" + "-" + Application.dataPath, true);
                        Selection.activeObject = GameAnalytics.SettingsGA;
                    }

                    GUILayout.Space(5);

                    Splitter(new Color(0.35f, 0.35f, 0.35f));

                    GUILayout.Space(10);

                    GUIStyle largeWhiteStyle = new GUIStyle(EditorStyles.whiteLargeLabel);
                    if (!Application.HasProLicense())
                    {
                        largeWhiteStyle = new GUIStyle(EditorStyles.largeLabel);
                    }
                    largeWhiteStyle.fontSize = 16;
                    //largeWhiteStyle.fontStyle = FontStyle.Bold;

                    DrawLabelWithFlexibleSpace("Thank you for downloading!", largeWhiteStyle, 30);

                    GUILayout.Space(20);

                    GUIStyle greyStyle = new GUIStyle(EditorStyles.label);
                    greyStyle.fontSize = 12;

                    DrawLabelWithFlexibleSpace("Get started tracking your game by signing up to", greyStyle, 20);

                    GUILayout.Space(-5);

                    DrawLabelWithFlexibleSpace("GameAnalytics for FREE.", greyStyle, 20);

                    GUILayout.Space(20);

                    DrawButtonWithFlexibleSpace("Sign up", ga.SignupButton, OpenSignUp, GUILayout.Width(175), GUILayout.Height(40));

                    GUILayout.Space(15);

                    Splitter(new Color(0.35f, 0.35f, 0.35f));

                    GUILayout.Space(15);

                    DrawLabelWithFlexibleSpace("Already have an account? Please login", greyStyle, 20);

                    GUILayout.Space(15);

                    GUILayout.BeginHorizontal();
                    //GUILayout.Label("", GUILayout.Width(3));
                    GUILayout.Label(_emailLabel, GUILayout.Width(75));
                    ga.EmailGA = EditorGUILayout.TextField("", ga.EmailGA);
                    GUILayout.EndHorizontal();

                    GUILayout.BeginHorizontal();
                    //GUILayout.Label("", GUILayout.Width(3));
                    GUILayout.Label(_passwordLabel, GUILayout.Width(75));
                    ga.PasswordGA = EditorGUILayout.PasswordField("", ga.PasswordGA);
                    GUILayout.EndHorizontal();

                    EditorGUILayout.Space();

                    GUILayout.BeginHorizontal();
                    GUILayout.Label("", GUILayout.Width(90));
                    if (GUILayout.Button("Login", new GUILayoutOption[] {
                        GUILayout.Width(130),
                        GUILayout.MaxHeight(30)
                    }))
                    {
                        ga.IntroScreen = false;
                        ga.SignUpOpen = false;
                        ga.CurrentInspectorState = GameAnalyticsSDK.Setup.Settings.InspectorStates.Account;

                        ga.Organizations = null;
                        SetLoginStatus("Contacting Server..", ga);
                        LoginUser(ga);
                    }
                    GUILayout.Label("", GUILayout.Width(10));
                    GUILayout.BeginVertical();
                    GUILayout.Space(8);

                    DrawLinkButton("Forgot password?", EditorStyles.label, _gaForgotPasswordUrl, GUILayout.Width(105));
                    EditorGUIUtility.AddCursorRect(GUILayoutUtility.GetLastRect(), MouseCursor.Link);
                    GUILayout.EndVertical();
                    GUILayout.EndHorizontal();

                    GUILayout.Space(15);

                    Splitter(new Color(0.35f, 0.35f, 0.35f));

                    GUILayout.Space(15);

                    GUILayout.BeginHorizontal();
                    GUILayout.FlexibleSpace();
                    if (GUILayout.Button("I want to fill in my game keys manually", EditorStyles.label, GUILayout.Width(207)))
                    {
                        ga.IntroScreen = false;
                        ga.CurrentInspectorState = GameAnalyticsSDK.Setup.Settings.InspectorStates.Basic;
                    }
                    EditorGUIUtility.AddCursorRect(GUILayoutUtility.GetLastRect(), MouseCursor.Link);
                    GUILayout.FlexibleSpace();
                    GUILayout.EndHorizontal();
                }
            }
            #endregion // IntroScreen
            else
            {
                //Tabs
                GUILayout.BeginHorizontal();

                GUIStyle activeTabStyle = new GUIStyle(EditorStyles.miniButtonMid);
                GUIStyle activeTabStyleLeft = new GUIStyle(EditorStyles.miniButtonLeft);
                GUIStyle activeTabStyleRight = new GUIStyle(EditorStyles.miniButtonRight);

                activeTabStyle.normal = EditorStyles.miniButtonMid.active;
                activeTabStyleLeft.normal = EditorStyles.miniButtonLeft.active;
                activeTabStyleRight.normal = EditorStyles.miniButtonRight.active;

                GUIStyle inactiveTabStyle = new GUIStyle(EditorStyles.miniButtonMid);
                GUIStyle inactiveTabStyleLeft = new GUIStyle(EditorStyles.miniButtonLeft);
                GUIStyle inactiveTabStyleRight = new GUIStyle(EditorStyles.miniButtonRight);

                GUIStyle basicTabStyle = ga.CurrentInspectorState == GameAnalyticsSDK.Setup.Settings.InspectorStates.Basic ? activeTabStyleLeft : inactiveTabStyleLeft;

                if (ga.Organizations == null)
                {
                    if (GUILayout.Button(_account, ga.CurrentInspectorState == GameAnalyticsSDK.Setup.Settings.InspectorStates.Account ? activeTabStyleLeft : inactiveTabStyleLeft))
                    {
                        ga.CurrentInspectorState = GameAnalyticsSDK.Setup.Settings.InspectorStates.Account;
                    }

                    basicTabStyle = ga.CurrentInspectorState == GameAnalyticsSDK.Setup.Settings.InspectorStates.Basic ? activeTabStyle : inactiveTabStyle;
                }

                if (GUILayout.Button(_setup, basicTabStyle))
                {
                    ga.CurrentInspectorState = GameAnalyticsSDK.Setup.Settings.InspectorStates.Basic;
                }

                if (GUILayout.Button(_advanced, ga.CurrentInspectorState == GameAnalyticsSDK.Setup.Settings.InspectorStates.Pref ? activeTabStyleRight : inactiveTabStyleRight))
                {
                    ga.CurrentInspectorState = GameAnalyticsSDK.Setup.Settings.InspectorStates.Pref;
                }

                GUILayout.EndHorizontal();

                #region Settings.InspectorStates.Account
                if (ga.CurrentInspectorState == GameAnalyticsSDK.Setup.Settings.InspectorStates.Account)
                {
                    EditorGUILayout.Space();

                    GUILayout.Label("Already have an account with GameAnalytics?", EditorStyles.largeLabel);

                    EditorGUILayout.Space();

                    if (!string.IsNullOrEmpty(ga.LoginStatus) && !ga.LoginStatus.Equals("Not logged in."))
                    {
                        EditorGUILayout.Space();
                        if (ga.JustSignedUp && !ga.HideSignupWarning)
                        {
                            GUILayout.BeginHorizontal();
                            GUILayout.Label("", GUILayout.Width(-18));
                            EditorGUILayout.HelpBox("Please be aware that our service might take a few minutes to get ready to receive events. Click here to open Integration Status to follow the progress as you start sending events.", MessageType.Warning);
                            Rect r = GUILayoutUtility.GetLastRect();
                            if (GUI.Button(r, "", EditorStyles.label))
                            {
                                //Application.OpenURL("https://go.gameanalytics.com/login?token=" + ga.TokenGA + "&exp=" + ga.ExpireTime + "&goto=/game/" + ga.Studios[ga.SelectedStudio - 1].Games[ga.SelectedGame - 1].ID + "/initialize");
                            }
                            EditorGUIUtility.AddCursorRect(r, MouseCursor.Link);
                            if (GUILayout.Button("X"))
                            {
                                ga.HideSignupWarning = true;
                            }
                            GUILayout.EndHorizontal();
                            EditorGUILayout.Space();
                        }
                        GUILayout.BeginHorizontal();
                        //GUILayout.Label("", GUILayout.Width(7));
                        GUILayout.Label("Status", GUILayout.Width(88));
                        GUILayout.Label(ga.LoginStatus);
                        GUILayout.EndHorizontal();
                    }

                    EditorGUILayout.Space();

                    if (ga.Organizations == null)
                    {
                        GUILayout.Label(_emailLabel, GUILayout.Width(75));
                        GUILayout.BeginHorizontal();
                        GUILayout.Label("", GUILayout.Width(-17));
                        ga.EmailGA = EditorGUILayout.TextField("", ga.EmailGA, GUILayout.MaxWidth(270));
                        GUILayout.EndHorizontal();

                        GUILayout.Space(12);

                        GUILayout.Label(_passwordLabel, GUILayout.Width(75));
                        GUILayout.BeginHorizontal();
                        GUILayout.Label("", GUILayout.Width(-17));
                        ga.PasswordGA = EditorGUILayout.PasswordField("", ga.PasswordGA, GUILayout.MaxWidth(270));
                        GUILayout.EndHorizontal();

                        GUILayout.Space(12);

                        GUILayout.BeginHorizontal();
                        GUILayout.Space(2);
                        if (GUILayout.Button("Login", new GUILayoutOption[] {
                            GUILayout.Width(130),
                            GUILayout.MaxHeight(40)
                        }))
                        {
                            ga.Organizations = null;
                            SetLoginStatus("Contacting Server..", ga);
                            LoginUser(ga);
                        }
                        GUILayout.Label("", GUILayout.Width(10));
                        GUILayout.BeginVertical();
                        GUILayout.Space(14);
                        if (GUILayout.Button("Forgot password?", EditorStyles.label, GUILayout.Width(105)))
                        {
                            Application.OpenURL(_gaForgotPasswordUrl);
                        }
                        EditorGUIUtility.AddCursorRect(GUILayoutUtility.GetLastRect(), MouseCursor.Link);
                        GUILayout.EndVertical();
                        GUILayout.EndHorizontal();

                        GUILayout.Space(20);

                        Splitter(new Color(0.35f, 0.35f, 0.35f));

                        GUILayout.Space(16);

                        GUILayout.BeginHorizontal();
                        GUILayout.FlexibleSpace();
                        if (GUILayout.Button("I want to fill in my game keys manually", EditorStyles.label, GUILayout.Width(207)))
                        {
                            ga.CurrentInspectorState = GameAnalyticsSDK.Setup.Settings.InspectorStates.Basic;
                        }
                        EditorGUIUtility.AddCursorRect(GUILayoutUtility.GetLastRect(), MouseCursor.Link);
                        GUILayout.FlexibleSpace();
                        GUILayout.EndHorizontal();
                    }
                }
                #endregion // Settings.InspectorStates.Account
                #region Settings.InspectorStates.Basic
                else if (ga.CurrentInspectorState == GameAnalyticsSDK.Setup.Settings.InspectorStates.Basic)
                {
                    EditorGUILayout.Space();
                    EditorGUILayout.Space();

                    GUILayout.BeginHorizontal();
                    GUILayout.BeginVertical();
                    GUILayout.Space(-4);
                    GUILayout.Label("Game Setup", EditorStyles.largeLabel);
                    GUILayout.EndVertical();

                    #region Setup help
                    if (!_gameSetupIconOpen)
                    {
                        GUI.color = new Color(0.54f, 0.54f, 0.54f);
                    }
                    if (GUILayout.Button(_gameSetupIcon, GUIStyle.none, new GUILayoutOption[] {
                        GUILayout.Width(12),
                        GUILayout.Height(12)
                    }))
                    {
                        _gameSetupIconOpen = !_gameSetupIconOpen;
                    }
                    GUI.color = Color.white;
                    EditorGUIUtility.AddCursorRect(GUILayoutUtility.GetLastRect(), MouseCursor.Link);
                    GUILayout.FlexibleSpace();

                    GUILayout.EndHorizontal();

                    if (_gameSetupIconOpen)
                    {
                        GUILayout.BeginHorizontal();
                        TextAnchor tmpAnchor = GUI.skin.box.alignment;
                        GUI.skin.box.alignment = TextAnchor.UpperLeft;
                        Color tmpColor = GUI.skin.box.normal.textColor;
                        GUI.skin.box.normal.textColor = new Color(0.7f, 0.7f, 0.7f);
                        RectOffset tmpOffset = GUI.skin.box.padding;
                        GUI.skin.box.padding = new RectOffset(6, 6, 5, 32);
                        GUILayout.Box(_gameSetupIconMsg);
                        GUI.skin.box.alignment = tmpAnchor;
                        GUI.skin.box.normal.textColor = tmpColor;
                        GUI.skin.box.padding = tmpOffset;
                        //GUILayout.Label("Advanced settings are pretty awesome! They allow you to do all kinds of things, such as tracking Unity errors and exceptions, and frames per second (for performance). See http://www.support.gameanalytics.com", EditorStyles.wordWrappedMiniLabel);
                        GUILayout.EndHorizontal();

                        Rect tmpRect = GUILayoutUtility.GetLastRect();
                        if (GUI.Button(new Rect(tmpRect.x + 5, tmpRect.y + tmpRect.height - 25, 80, 20), "Learn more"))
                        {
                            Application.OpenURL("https://docs.gameanalytics.com/integrations/sdk/unity");
                        }
                    }
                    #endregion // Setup help

                    EditorGUILayout.Space();

                    if (!string.IsNullOrEmpty(ga.LoginStatus) && !ga.LoginStatus.Equals("Not logged in."))
                    {
                        if (ga.JustSignedUp && !ga.HideSignupWarning)
                        {
                            GUILayout.BeginHorizontal();
                            GUILayout.Label("", GUILayout.Width(-18));
                            EditorGUILayout.HelpBox("Please be aware that our service might take a few minutes to get ready to receive events. Click here to open Integration Status to follow the progress as you start sending events.", MessageType.Warning);
                            Rect r = GUILayoutUtility.GetLastRect();
                            if (GUI.Button(r, "", EditorStyles.label))
                            {
                                //Application.OpenURL("https://go.gameanalytics.com/login?token=" + ga.TokenGA + "&exp=" + ga.ExpireTime + "&goto=/game/" + ga.Studios[ga.SelectedStudio - 1].Games[ga.SelectedGame - 1].ID + "/initialize");
                            }
                            EditorGUIUtility.AddCursorRect(r, MouseCursor.Link);
                            if (GUILayout.Button("X"))
                            {
                                ga.HideSignupWarning = true;
                            }
                            GUILayout.EndHorizontal();
                            EditorGUILayout.Space();
                        }

                        GUILayout.BeginHorizontal();
                        //GUILayout.Label("", GUILayout.Width(7));
                        GUILayout.Label("Status", GUILayout.Width(63));
                        GUILayout.Label(ga.LoginStatus);
                        GUILayout.EndHorizontal();
                    }

                    Splitter(new Color(0.35f, 0.35f, 0.35f));

                    // sanity check
                    if(ga.SelectedPlatformOrganization.Count != GameAnalytics.SettingsGA.Platforms.Count)
                    {
                        int diff = ga.SelectedPlatformOrganization.Count - GameAnalytics.SettingsGA.Platforms.Count;

                        if(diff < 0)
                        {
                            int absDiff = Mathf.Abs(diff);

                            for(int i = 0; i < absDiff; ++i)
                            {
                                ga.SelectedPlatformOrganization.Add("");
                            }
                        }
                        else
                        {
                            for (int i = 0; i < diff; ++i)
                            {
                                ga.SelectedPlatformOrganization.RemoveAt(ga.SelectedPlatformOrganization.Count - 1);
                            }
                        }
                    }

                    for (int i = 0; i < GameAnalytics.SettingsGA.Platforms.Count; ++i)
                    {
                        ga.PlatformFoldOut[i] = EditorGUILayout.Foldout(ga.PlatformFoldOut[i], PlatformToString(GameAnalytics.SettingsGA.Platforms[i]));

                        if (ga.PlatformFoldOut[i])
                        {
                            if (ga.Organizations != null && ga.Organizations.Count > 0 && i < ga.SelectedOrganization.Count)
                            {
                                EditorGUILayout.Space();
                                //Splitter(new Color(0.35f, 0.35f, 0.35f));

                                GUILayout.BeginHorizontal();
                                //GUILayout.Label("", GUILayout.Width(7));
                                GUILayout.Label(_organizationsLabel, GUILayout.Width(50));
                                string[] organizationNames = Organization.GetOrganizationNames(ga.Organizations);
                                if (ga.SelectedOrganization[i] >= organizationNames.Length)
                                {
                                    ga.SelectedOrganization[i] = 0;
                                }
                                int tmpSelectedOrganization = ga.SelectedOrganization[i];
                                ga.SelectedOrganization[i] = EditorGUILayout.Popup("", ga.SelectedOrganization[i], organizationNames);
                                if (tmpSelectedOrganization != ga.SelectedOrganization[i])
                                {
                                    ga.SelectedStudio[i] = 0;
                                    ga.SelectedGame[i] = 0;
                                }
                                GUILayout.EndHorizontal();

                                if (ga.SelectedOrganization[i] > 0)
                                {
                                    if (tmpSelectedOrganization != ga.SelectedOrganization[i])
                                    {
                                        SelectOrganization(ga.SelectedOrganization[i], ga, i);
                                    }

                                    GUILayout.BeginHorizontal();
                                    //GUILayout.Label("", GUILayout.Width(7));
                                    GUILayout.Label(_studiosLabel, GUILayout.Width(50));
                                    string[] studioNames = Studio.GetStudioNames(ga.Organizations[ga.SelectedOrganization[i] - 1].Studios);
                                    if (ga.SelectedStudio[i] >= studioNames.Length)
                                    {
                                        ga.SelectedStudio[i] = 0;
                                    }
                                    int tmpSelectedStudio = ga.SelectedStudio[i];
                                    ga.SelectedStudio[i] = EditorGUILayout.Popup("", ga.SelectedStudio[i], studioNames);
                                    GUILayout.EndHorizontal();

                                    if (ga.SelectedStudio[i] > 0)
                                    {
                                        if (tmpSelectedStudio != ga.SelectedStudio[i])
                                        {
                                            SelectStudio(ga.SelectedStudio[i], ga, i);
                                        }

                                        GUILayout.BeginHorizontal();
                                        //GUILayout.Label("", GUILayout.Width(7));
                                        GUILayout.Label(_gamesLabel, GUILayout.Width(50));
                                        string[] gameNames = Studio.GetGameNames(ga.SelectedStudio[i] - 1, ga.Organizations[ga.SelectedOrganization[i] - 1].Studios);
                                        if (ga.SelectedGame[i] >= gameNames.Length)
                                        {
                                            ga.SelectedGame[i] = 0;
                                        }

                                        int tmpSelectedGame = ga.SelectedGame[i];
                                        ga.SelectedGame[i] = EditorGUILayout.Popup("", ga.SelectedGame[i], gameNames);
                                        GUILayout.EndHorizontal();

                                        if (ga.SelectedStudio[i] > 0 && tmpSelectedGame != ga.SelectedGame[i])
                                        {
                                            SelectGame(ga.SelectedGame[i], ga, i);
                                        }
                                    }
                                    else if (tmpSelectedStudio != ga.SelectedStudio[i])
                                    {
                                        SetLoginStatus("Please select studio..", ga);
                                    }
                                }
                                else if (tmpSelectedOrganization != ga.SelectedOrganization[i])
                                {
                                    SetLoginStatus("Please select organization..", ga);
                                }
                            }
                            else
                            {
                                GUILayout.BeginHorizontal();
                                GUILayout.Label(_organizationsLabel, GUILayout.Width(85));
                                GUILayout.Space(-10);
                                GUILayout.Label(!string.IsNullOrEmpty(ga.SelectedPlatformOrganization[i]) ? ga.SelectedPlatformOrganization[i] : "N/A");
                                GUILayout.EndHorizontal();

                                GUILayout.BeginHorizontal();
                                GUILayout.Label(_studiosLabel, GUILayout.Width(85));
                                GUILayout.Space(-10);
                                GUILayout.Label(!string.IsNullOrEmpty(ga.SelectedPlatformStudio[i]) ? ga.SelectedPlatformStudio[i] : "N/A");
                                GUILayout.EndHorizontal();

                                GUILayout.BeginHorizontal();
                                GUILayout.Label(_gamesLabel, GUILayout.Width(85));
                                GUILayout.Space(-10);
                                GUILayout.Label(!string.IsNullOrEmpty(ga.SelectedPlatformGame[i]) ? ga.SelectedPlatformGame[i] : "N/A");
                                GUILayout.EndHorizontal();
                            }

                            GUILayout.BeginHorizontal();
                            GUILayout.Label(_publicKeyLabel, GUILayout.Width(70));
                            GUILayout.Space(-10);
                            string beforeGameKey = ga.GetGameKey(i);
                            string tmpGameKey = EditorGUILayout.TextField("", ga.GetGameKey(i));

                            if (!tmpGameKey.Equals(beforeGameKey))
                            {
                                ga.SelectedPlatformOrganization[i] = "";
                                ga.SelectedPlatformStudio[i] = "";
                                ga.SelectedPlatformGame[i] = "";
                            }

                            ga.UpdateGameKey(i, tmpGameKey);

                            GUILayout.EndHorizontal();

                            GUILayout.BeginHorizontal();
                            GUILayout.Label(_privateKeyLabel, GUILayout.Width(70));
                            GUILayout.Space(-10);
                            string beforeSecretKey = ga.GetSecretKey(i);
                            string tmpSecretKey = EditorGUILayout.TextField("", ga.GetSecretKey(i));

                            if (!tmpSecretKey.Equals(beforeSecretKey))
                            {
                                ga.SelectedPlatformOrganization[i] = "";
                                ga.SelectedPlatformStudio[i] = "";
                                ga.SelectedPlatformGame[i] = "";
                            }

                            ga.UpdateSecretKey(i, tmpSecretKey);

                            GUILayout.EndHorizontal();

                            EditorGUILayout.Space();

                            switch (GameAnalytics.SettingsGA.UsePlayerSettingsBuildNumber)
                            {
                                case true:
                                    if (GameAnalytics.SettingsGA.Platforms[i] != RuntimePlatform.Android && GameAnalytics.SettingsGA.Platforms[i] != RuntimePlatform.IPhonePlayer)
                                    {
                                        GUILayout.BeginHorizontal();
                                        //GUILayout.Label("", GUILayout.Width(7));
                                        GUILayout.Label(_build, GUILayout.Width(60));
                                        ga.Build[i] = EditorGUILayout.TextField("", ga.Build[i]);
                                        GUILayout.EndHorizontal();

                                        EditorGUILayout.Space();
                                    }
                                    else
                                    {
                                        if (GameAnalytics.SettingsGA.Platforms[i] == RuntimePlatform.Android)
                                        {
                                            ga.Build[i] = PlayerSettings.bundleVersion;
                                            EditorGUILayout.HelpBox("Using Android Player Settings Version* number as build number in events. \nBuild number is currently set to \"" + ga.Build[i] + "\".", MessageType.Info);
                                        }
                                        if (GameAnalytics.SettingsGA.Platforms[i] == RuntimePlatform.IPhonePlayer)
                                        {
#if UNITY_5_6_OR_NEWER
                                            ga.Build[i] = PlayerSettings.bundleVersion;
                                            EditorGUILayout.HelpBox("Using iOS Player Settings Version* number as build number in events. \nBuild number is currently set to \"" + ga.Build[i] + "\".", MessageType.Info);
#else
									    ga.Build[i] = PlayerSettings.iOS.buildNumber;
										EditorGUILayout.HelpBox("Using iOS Player Settings Build number as build number in events. \nBuild number is currently set to \"" + ga.Build[i] + "\".", MessageType.Info);
#endif
                                        }
                                    }
                                    break;
                                case false:
                                    GUILayout.BeginHorizontal();
                                    //GUILayout.Label("", GUILayout.Width(7));
                                    GUILayout.Label(_build, GUILayout.Width(60));
                                    ga.Build[i] = EditorGUILayout.TextField("", ga.Build[i]);
                                    GUILayout.EndHorizontal();

                                    EditorGUILayout.Space();
                                    break;
                            }

                            if (ga.SelectedPlatformGameID[i] >= 0)
                            {
                                EditorGUILayout.Space();
                                GUILayout.BeginHorizontal();
                                //GUILayout.Label("View", GUILayout.Width(65));
                                if (GUILayout.Button("Integration Status"))
                                {
                                    if (string.IsNullOrEmpty(ga.TokenGA))
                                    {
                                        Application.OpenURL(String.Format(_gaOverviewUrl, ga.SelectedPlatformGameID[i]));
                                    }
                                    else
                                    {
                                        Application.OpenURL(_gaLoginUrl);
                                    }
                                }
                                if (GUILayout.Button("Game Settings"))
                                {
                                    if (string.IsNullOrEmpty(ga.TokenGA))
                                    {
                                        Application.OpenURL(String.Format(_gaSettingsUrl, ga.SelectedPlatformGameID[i]));
                                    }
                                    else
                                    {
                                        Application.OpenURL(_gaLoginUrl);
                                    }
                                }
                                GUILayout.EndHorizontal();
                            }
                        }

                        if (GUILayout.Button("Remove platform"))
                        {
                            GameAnalytics.SettingsGA.RemovePlatformAtIndex(i);
                            this.availablePlatforms = GameAnalytics.SettingsGA.GetAvailablePlatforms();
                            this.selectedPlatformIndex = 0;
                        }

                        Splitter(new Color(0.35f, 0.35f, 0.35f));
                    }

                    if (this.availablePlatforms == null)
                    {
                        this.availablePlatforms = GameAnalytics.SettingsGA.GetAvailablePlatforms();
                    }

                    this.selectedPlatformIndex = EditorGUILayout.Popup("Platform to add", this.selectedPlatformIndex, this.availablePlatforms);
                    if (GUILayout.Button("Add platform"))
                    {
                        if (this.availablePlatforms[this.selectedPlatformIndex].Equals("WSA"))
                        {
                            GameAnalytics.SettingsGA.AddPlatform(RuntimePlatform.WSAPlayerARM);
                        }
                        else
                        {
                            GameAnalytics.SettingsGA.AddPlatform((RuntimePlatform)System.Enum.Parse(typeof(RuntimePlatform), this.availablePlatforms[this.selectedPlatformIndex]));
                        }
                        this.availablePlatforms = GameAnalytics.SettingsGA.GetAvailablePlatforms();
                        this.selectedPlatformIndex = 0;
                    }

#if UNITY_IOS || UNITY_TVOS || UNITY_ANDROID || UNITY_STANDALONE || UNITY_WEBGL || UNITY_WSA || UNITY_WP_8_1 || UNITY_SAMSUNGTV
                    // Do nothing
#else

                    EditorGUILayout.Space();

                    GUILayout.BeginHorizontal();
                    GUILayout.Label("", GUILayout.Width(-18));
                    EditorGUILayout.HelpBox("PLEASE NOTICE: Currently the GameAnalytics Unity SDK does not support your selected build Platform. Please refer to the GameAnalytics documentation for additional information.", MessageType.Warning);

                    if (GUI.Button(GUILayoutUtility.GetLastRect(), "", GUIStyle.none))
                    {
                        Application.OpenURL("http://www.gameanalytics.com/docs");
                    }
                    EditorGUIUtility.AddCursorRect(GUILayoutUtility.GetLastRect(), MouseCursor.Link);

                    GUILayout.EndHorizontal();

#endif
                    EditorGUILayout.Space();
                    EditorGUILayout.Space();
                    EditorGUILayout.Space();

                    GUILayout.BeginHorizontal();

                    GUILayout.BeginVertical();
                    GUILayout.Space(-4);
                    GUILayout.Label("Custom Dimensions", EditorStyles.largeLabel);
                    GUILayout.EndVertical();

                    if (!_customDimensionsIconOpen)
                    {
                        GUI.color = new Color(0.54f, 0.54f, 0.54f);
                    }
                    if (GUILayout.Button(_customDimensionsIcon, GUIStyle.none, GUILayout.Width(12), GUILayout.Height(12)))
                    {
                        _customDimensionsIconOpen = !_customDimensionsIconOpen;
                    }
                    GUI.color = Color.white;
                    EditorGUIUtility.AddCursorRect(GUILayoutUtility.GetLastRect(), MouseCursor.Link);
                    GUILayout.FlexibleSpace();

                    GUILayout.EndHorizontal();

                    if (_customDimensionsIconOpen)
                    {
                        GUILayout.BeginHorizontal();
                        TextAnchor tmpAnchor = GUI.skin.box.alignment;
                        GUI.skin.box.alignment = TextAnchor.UpperLeft;
                        Color tmpColor = GUI.skin.box.normal.textColor;
                        GUI.skin.box.normal.textColor = new Color(0.7f, 0.7f, 0.7f);
                        RectOffset tmpOffset = GUI.skin.box.padding;
                        GUI.skin.box.padding = new RectOffset(6, 6, 5, 32);
                        GUILayout.Box(_customDimensionsIconMsg);
                        GUI.skin.box.alignment = tmpAnchor;
                        GUI.skin.box.normal.textColor = tmpColor;
                        GUI.skin.box.padding = tmpOffset;
                        //GUILayout.Label("Advanced settings are pretty awesome! They allow you to do all kinds of things, such as tracking Unity errors and exceptions, and frames per second (for performance). See http://www.support.gameanalytics.com", EditorStyles.wordWrappedMiniLabel);
                        GUILayout.EndHorizontal();

                        Rect tmpRect = GUILayoutUtility.GetLastRect();
                        if (GUI.Button(new Rect(tmpRect.x + 5, tmpRect.y + tmpRect.height - 25, 80, 20), "Learn more"))
                        {
                            Application.OpenURL("https://docs.gameanalytics.com/integrations/sdk/unity/advanced-setup#custom-dimensions");
                        }
                    }

                    EditorGUILayout.Space();
                    EditorGUILayout.Space();

                    // Custom dimensions 1
                    ga.CustomDimensions01FoldOut = EditorGUILayout.Foldout(ga.CustomDimensions01FoldOut, new GUIContent("   " + _customDimensions01.text + " (" + ga.CustomDimensions01.Count + " / " + MaxNumberOfDimensions + " values)", _customDimensions01.tooltip));

                    if (ga.CustomDimensions01FoldOut)
                    {
                        List<int> c1ToRemove = new List<int>();

                        for (int i = 0; i < ga.CustomDimensions01.Count; i++)
                        {
                            GUILayout.BeginHorizontal();
                            GUILayout.Label("", GUILayout.Width(21));
                            GUILayout.Label("-", GUILayout.Width(10));

                            ga.CustomDimensions01[i] = ValidateCustomDimensionEditor(EditorGUILayout.TextField(ga.CustomDimensions01[i]));

                            if (GUILayout.Button(_deleteIcon, GUI.skin.label, new GUILayoutOption[] {
                                GUILayout.Width(16),
                                GUILayout.Height(16)
                            }))
                            {
                                c1ToRemove.Add(i);
                            }
                            EditorGUIUtility.AddCursorRect(GUILayoutUtility.GetLastRect(), MouseCursor.Link);
                            GUILayout.EndHorizontal();
                            GUILayout.Space(2);
                        }

                        foreach (int i in c1ToRemove)
                        {
                            ga.CustomDimensions01.RemoveAt(i);
                        }

                        GUILayout.BeginHorizontal();
                        GUILayout.Label("", GUILayout.Width(21));
                        if (GUILayout.Button("Add", GUILayout.Width(63)))
                        {
                            if (ga.CustomDimensions01.Count < MaxNumberOfDimensions)
                            {
                                ga.CustomDimensions01.Add("New (" + (ga.CustomDimensions01.Count + 1) + ")");
                            }
                        }
                        GUILayout.EndHorizontal();
                    }

                    EditorGUILayout.Space();

                    // Custom dimensions 2
                    ga.CustomDimensions02FoldOut = EditorGUILayout.Foldout(ga.CustomDimensions02FoldOut, new GUIContent("   " + _customDimensions02.text + " (" + ga.CustomDimensions02.Count + " / " + MaxNumberOfDimensions + " values)", _customDimensions02.tooltip));

                    if (ga.CustomDimensions02FoldOut)
                    {
                        List<int> c2ToRemove = new List<int>();

                        for (int i = 0; i < ga.CustomDimensions02.Count; i++)
                        {
                            GUILayout.BeginHorizontal();
                            GUILayout.Label("", GUILayout.Width(21));
                            GUILayout.Label("-", GUILayout.Width(10));

                            ga.CustomDimensions02[i] = ValidateCustomDimensionEditor(EditorGUILayout.TextField(ga.CustomDimensions02[i]));

                            if (GUILayout.Button(_deleteIcon, GUI.skin.label, new GUILayoutOption[] {
                                GUILayout.Width(16),
                                GUILayout.Height(16)
                            }))
                            {
                                c2ToRemove.Add(i);
                            }
                            EditorGUIUtility.AddCursorRect(GUILayoutUtility.GetLastRect(), MouseCursor.Link);
                            GUILayout.EndHorizontal();
                            GUILayout.Space(2);
                        }

                        foreach (int i in c2ToRemove)
                        {
                            ga.CustomDimensions02.RemoveAt(i);
                        }

                        GUILayout.BeginHorizontal();
                        GUILayout.Label("", GUILayout.Width(21));
                        if (GUILayout.Button("Add", GUILayout.Width(63)))
                        {
                            if (ga.CustomDimensions02.Count < MaxNumberOfDimensions)
                            {
                                ga.CustomDimensions02.Add("New (" + (ga.CustomDimensions02.Count + 1) + ")");
                            }
                        }
                        GUILayout.EndHorizontal();
                    }

                    EditorGUILayout.Space();

                    // Custom dimensions 3
                    ga.CustomDimensions03FoldOut = EditorGUILayout.Foldout(ga.CustomDimensions03FoldOut, new GUIContent("   " + _customDimensions03.text + " (" + ga.CustomDimensions03.Count + " / " + MaxNumberOfDimensions + " values)", _customDimensions03.tooltip));

                    if (ga.CustomDimensions03FoldOut)
                    {
                        List<int> c3ToRemove = new List<int>();

                        for (int i = 0; i < ga.CustomDimensions03.Count; i++)
                        {
                            GUILayout.BeginHorizontal();
                            GUILayout.Label("", GUILayout.Width(21));
                            GUILayout.Label("-", GUILayout.Width(10));

                            ga.CustomDimensions03[i] = ValidateCustomDimensionEditor(EditorGUILayout.TextField(ga.CustomDimensions03[i]));

                            if (GUILayout.Button(_deleteIcon, GUI.skin.label, new GUILayoutOption[] {
                                GUILayout.Width(16),
                                GUILayout.Height(16)
                            }))
                            {
                                c3ToRemove.Add(i);
                            }
                            EditorGUIUtility.AddCursorRect(GUILayoutUtility.GetLastRect(), MouseCursor.Link);
                            GUILayout.EndHorizontal();
                            GUILayout.Space(2);
                        }

                        foreach (int i in c3ToRemove)
                        {
                            ga.CustomDimensions03.RemoveAt(i);
                        }

                        GUILayout.BeginHorizontal();
                        GUILayout.Label("", GUILayout.Width(21));
                        if (GUILayout.Button("Add", GUILayout.Width(63)))
                        {
                            if (ga.CustomDimensions03.Count < MaxNumberOfDimensions)
                            {
                                ga.CustomDimensions03.Add("New (" + (ga.CustomDimensions03.Count + 1) + ")");
                            }
                        }
                        GUILayout.EndHorizontal();
                    }

                    EditorGUILayout.Space();
                    EditorGUILayout.Space();
                    EditorGUILayout.Space();

                    GUILayout.BeginHorizontal();

                    GUILayout.BeginVertical();
                    GUILayout.Space(-4);
                    GUILayout.Label("Resource Types", EditorStyles.largeLabel);
                    GUILayout.EndVertical();

                    if (!_resourceTypesIconOpen)
                    {
                        GUI.color = new Color(0.54f, 0.54f, 0.54f);
                    }
                    if (GUILayout.Button(_resourceTypesIcon, GUIStyle.none, new GUILayoutOption[] {
                        GUILayout.Width(12),
                        GUILayout.Height(12)
                    }))
                    {
                        _resourceTypesIconOpen = !_resourceTypesIconOpen;
                    }
                    GUI.color = Color.white;
                    EditorGUIUtility.AddCursorRect(GUILayoutUtility.GetLastRect(), MouseCursor.Link);
                    GUILayout.FlexibleSpace();

                    GUILayout.EndHorizontal();

                    if (_resourceTypesIconOpen)
                    {
                        GUILayout.BeginHorizontal();
                        TextAnchor tmpAnchor = GUI.skin.box.alignment;
                        GUI.skin.box.alignment = TextAnchor.UpperLeft;
                        Color tmpColor = GUI.skin.box.normal.textColor;
                        GUI.skin.box.normal.textColor = new Color(0.7f, 0.7f, 0.7f);
                        RectOffset tmpOffset = GUI.skin.box.padding;
                        GUI.skin.box.padding = new RectOffset(6, 6, 5, 32);
                        GUILayout.Box(_resourceTypesIconMsg);
                        GUI.skin.box.alignment = tmpAnchor;
                        GUI.skin.box.normal.textColor = tmpColor;
                        GUI.skin.box.padding = tmpOffset;
                        GUILayout.EndHorizontal();

                        Rect tmpRect = GUILayoutUtility.GetLastRect();
                        if (GUI.Button(new Rect(tmpRect.x + 5, tmpRect.y + tmpRect.height - 25, 80, 20), "Learn more"))
                        {
                            Application.OpenURL("https://docs.gameanalytics.com/integrations/sdk/unity/advanced-setup#resource-types");
                        }
                    }

                    EditorGUILayout.Space();
                    EditorGUILayout.Space();

                    // Resource types

                    ga.ResourceCurrenciesFoldOut = EditorGUILayout.Foldout(ga.ResourceCurrenciesFoldOut, new GUIContent("   " + _resourceCurrrencies.text + " (" + ga.ResourceCurrencies.Count + " / " + MaxNumberOfDimensions + " values)", _resourceCurrrencies.tooltip));

                    if (ga.ResourceCurrenciesFoldOut)
                    {
                        List<int> rcToRemove = new List<int>();

                        for (int i = 0; i < ga.ResourceCurrencies.Count; i++)
                        {
                            GUILayout.BeginHorizontal();
                            GUILayout.Label("", GUILayout.Width(21));
                            GUILayout.Label("-", GUILayout.Width(10));
                            ga.ResourceCurrencies[i] = ValidateResourceCurrencyEditor(EditorGUILayout.TextField(ga.ResourceCurrencies[i]));

                            if (GUILayout.Button(_deleteIcon, GUI.skin.label, new GUILayoutOption[] {
                                GUILayout.Width(16),
                                GUILayout.Height(16)
                            }))
                            {
                                rcToRemove.Add(i);
                            }
                            EditorGUIUtility.AddCursorRect(GUILayoutUtility.GetLastRect(), MouseCursor.Link);
                            GUILayout.EndHorizontal();
                            GUILayout.Space(2);
                        }

                        foreach (int i in rcToRemove)
                        {
                            ga.ResourceCurrencies.RemoveAt(i);
                        }

                        GUILayout.BeginHorizontal();
                        GUILayout.Label("", GUILayout.Width(21));
                        if (GUILayout.Button("Add", GUILayout.Width(63)))
                        {
                            if (ga.ResourceCurrencies.Count < MaxNumberOfDimensions)
                            {
                                ga.ResourceCurrencies.Add("NewCurrency"); // + (ga.ResourceCurrencies.Count + 1));
                            }
                        }
                        GUILayout.EndHorizontal();
                    }

                    EditorGUILayout.Space();

                    ga.ResourceItemTypesFoldOut = EditorGUILayout.Foldout(ga.ResourceItemTypesFoldOut, new GUIContent("   " + _resourceItemTypes.text + " (" + ga.ResourceItemTypes.Count + " / " + MaxNumberOfDimensions + " values)", _resourceItemTypes.tooltip));

                    if (ga.ResourceItemTypesFoldOut)
                    {
                        List<int> ritToRemove = new List<int>();

                        for (int i = 0; i < ga.ResourceItemTypes.Count; i++)
                        {
                            GUILayout.BeginHorizontal();
                            GUILayout.Label("", GUILayout.Width(21));
                            GUILayout.Label("-", GUILayout.Width(10));
                            //string tmp = ga.ResourceTypes[i];
                            ga.ResourceItemTypes[i] = ValidateResourceItemTypeEditor(EditorGUILayout.TextField(ga.ResourceItemTypes[i]));

                            if (GUILayout.Button(_deleteIcon, GUI.skin.label, new GUILayoutOption[] {
                                GUILayout.Width(16),
                                GUILayout.Height(16)
                            }))
                            {
                                ritToRemove.Add(i);
                            }
                            EditorGUIUtility.AddCursorRect(GUILayoutUtility.GetLastRect(), MouseCursor.Link);
                            GUILayout.EndHorizontal();
                            GUILayout.Space(2);
                        }

                        foreach (int i in ritToRemove)
                        {
                            ga.ResourceItemTypes.RemoveAt(i);
                        }

                        GUILayout.BeginHorizontal();
                        GUILayout.Label("", GUILayout.Width(21));
                        if (GUILayout.Button("Add", GUILayout.Width(63)))
                        {
                            if (ga.ResourceItemTypes.Count < MaxNumberOfDimensions)
                            {
                                ga.ResourceItemTypes.Add("New (" + (ga.ResourceItemTypes.Count + 1) + ")");
                            }
                        }
                        GUILayout.EndHorizontal();
                    }

                    EditorGUILayout.Space();
                }
                #endregion // Settings.InspectorStates.Basic
                #region Settings.InspectorStates.Pref
                else if (ga.CurrentInspectorState == GameAnalyticsSDK.Setup.Settings.InspectorStates.Pref)
                {
                    EditorGUILayout.Space();
                    EditorGUILayout.Space();

                    GUILayout.BeginHorizontal();

                    GUILayout.BeginVertical();
                    GUILayout.Space(-4);
                    GUILayout.Label("Advanced Settings", EditorStyles.largeLabel);
                    GUILayout.EndVertical();

                    if (!_advancedSettingsIconOpen)
                    {
                        GUI.color = new Color(0.54f, 0.54f, 0.54f);
                    }
                    if (GUILayout.Button(_advancedSettingsIcon, GUIStyle.none, new GUILayoutOption[] {
                        GUILayout.Width(12),
                        GUILayout.Height(12)
                    }))
                    {
                        _advancedSettingsIconOpen = !_advancedSettingsIconOpen;
                    }
                    GUI.color = Color.white;
                    EditorGUIUtility.AddCursorRect(GUILayoutUtility.GetLastRect(), MouseCursor.Link);
                    GUILayout.FlexibleSpace();

                    GUILayout.EndHorizontal();

                    if (_advancedSettingsIconOpen)
                    {
                        GUILayout.BeginHorizontal();
                        TextAnchor tmpAnchor = GUI.skin.box.alignment;
                        GUI.skin.box.alignment = TextAnchor.UpperLeft;
                        Color tmpColor = GUI.skin.box.normal.textColor;
                        GUI.skin.box.normal.textColor = new Color(0.7f, 0.7f, 0.7f);
                        RectOffset tmpOffset = GUI.skin.box.padding;
                        GUI.skin.box.padding = new RectOffset(6, 6, 5, 32);
                        GUILayout.Box(_advancedSettingsIconMsg);
                        GUI.skin.box.alignment = tmpAnchor;
                        GUI.skin.box.normal.textColor = tmpColor;
                        GUI.skin.box.padding = tmpOffset;
                        GUILayout.EndHorizontal();

                        Rect tmpRect = GUILayoutUtility.GetLastRect();
                        if (GUI.Button(new Rect(tmpRect.x + 5, tmpRect.y + tmpRect.height - 25, 80, 20), "Learn more"))
                        {
                            Application.OpenURL("https://docs.gameanalytics.com/integrations/sdk/unity/advanced-setup#advanced-settings");
                        }
                    }

                    EditorGUILayout.Space();
                    EditorGUILayout.Space();

                    GUILayout.BeginHorizontal();
                    GUILayout.Label("", GUILayout.Width(-18));
                    ga.UseManualSessionHandling = EditorGUILayout.Toggle("", ga.UseManualSessionHandling, GUILayout.Width(35));
                    GUILayout.Label(_useManualSessionHandling);
                    GUILayout.EndHorizontal();

                    EditorGUILayout.Space();

                    GUILayout.BeginHorizontal();
                    GUILayout.Label("", GUILayout.Width(-18));
                    ga.UsePlayerSettingsBuildNumber = EditorGUILayout.Toggle("", ga.UsePlayerSettingsBuildNumber, GUILayout.Width(35));
                    GUILayout.Label(_usePlayerSettingsBunldeVersionForBuild);
                    GUILayout.EndHorizontal();

                    if (ga.UsePlayerSettingsBuildNumber)
                    {
#if UNITY_5_6_OR_NEWER
                        EditorGUILayout.HelpBox("PLEASE NOTICE: The SDK will use the Version* number (Android, iOS) from Player Settings as the build number in events.", MessageType.Info);
#else
                        EditorGUILayout.HelpBox("PLEASE NOTICE: The SDK will use the Build number (iOS) and the Version* number (Android) from Player Settings as the build number in events.", MessageType.Info);
#endif
                    }

                    EditorGUILayout.Space();

                    GUILayout.BeginHorizontal();
                    GUILayout.Label("", GUILayout.Width(-18));
                    ga.SubmitFpsAverage = EditorGUILayout.Toggle("", ga.SubmitFpsAverage, GUILayout.Width(35));
                    GUILayout.Label(_gaFpsAverage);
                    GUILayout.EndHorizontal();

                    GUILayout.BeginHorizontal();
                    GUILayout.Label("", GUILayout.Width(-18));
                    ga.SubmitFpsCritical = EditorGUILayout.Toggle("", ga.SubmitFpsCritical, GUILayout.Width(35));
                    GUILayout.Label(_gaFpsCritical, GUILayout.Width(200));
                    GUI.enabled = ga.SubmitFpsCritical;
                    GUILayout.Label(_gaFpsCriticalThreshold, GUILayout.Width(40));
                    GUILayout.Label("", GUILayout.Width(-26));

                    int tmpFpsCriticalThreshold = 0;
                    if (int.TryParse(EditorGUILayout.TextField(ga.FpsCriticalThreshold.ToString(), GUILayout.Width(45)), out tmpFpsCriticalThreshold))
                    {
                        ga.FpsCriticalThreshold = Mathf.Max(Mathf.Min(tmpFpsCriticalThreshold, 99), 5);
                    }
                    GUI.enabled = true;

                    GUILayout.EndHorizontal();

                    EditorGUILayout.Space();
                    EditorGUILayout.Space();
                    EditorGUILayout.Space();

                    GUILayout.BeginHorizontal();

                    GUILayout.BeginVertical();
                    GUILayout.Space(-4);
                    GUILayout.Label("Debug Settings", EditorStyles.largeLabel);
                    GUILayout.EndVertical();

                    if (!_debugSettingsIconOpen)
                    {
                        GUI.color = new Color(0.54f, 0.54f, 0.54f);
                    }
                    if (GUILayout.Button(_debugSettingsIcon, GUIStyle.none, new GUILayoutOption[] {
                        GUILayout.Width(12),
                        GUILayout.Height(12)
                    }))
                    {
                        _debugSettingsIconOpen = !_debugSettingsIconOpen;
                    }
                    GUI.color = Color.white;
                    EditorGUIUtility.AddCursorRect(GUILayoutUtility.GetLastRect(), MouseCursor.Link);
                    GUILayout.FlexibleSpace();

                    GUILayout.EndHorizontal();

                    if (_debugSettingsIconOpen)
                    {
                        GUILayout.BeginHorizontal();
                        TextAnchor tmpAnchor = GUI.skin.box.alignment;
                        GUI.skin.box.alignment = TextAnchor.UpperLeft;
                        Color tmpColor = GUI.skin.box.normal.textColor;
                        GUI.skin.box.normal.textColor = new Color(0.7f, 0.7f, 0.7f);
                        RectOffset tmpOffset = GUI.skin.box.padding;
                        GUI.skin.box.padding = new RectOffset(6, 6, 5, 32);
                        GUILayout.Box(_debugSettingsIconMsg);
                        GUI.skin.box.alignment = tmpAnchor;
                        GUI.skin.box.normal.textColor = tmpColor;
                        GUI.skin.box.padding = tmpOffset;
                        GUILayout.EndHorizontal();

                        Rect tmpRect = GUILayoutUtility.GetLastRect();
                        if (GUI.Button(new Rect(tmpRect.x + 5, tmpRect.y + tmpRect.height - 25, 80, 20), "Learn more"))
                        {
                            Application.OpenURL("https://docs.gameanalytics.com/integrations/sdk/unity/advanced-setup#advanced-settings");
                        }
                    }

                    EditorGUILayout.Space();
                    EditorGUILayout.Space();

                    GUILayout.BeginHorizontal();
                    GUILayout.Label("", GUILayout.Width(-18));
                    ga.InfoLogEditor = EditorGUILayout.Toggle("", ga.InfoLogEditor, GUILayout.Width(35));
                    GUILayout.Label(_infoLogEditor);
                    GUILayout.EndHorizontal();

                    GUILayout.BeginHorizontal();
                    GUILayout.Label("", GUILayout.Width(-18));
                    ga.InfoLogBuild = EditorGUILayout.Toggle("", ga.InfoLogBuild, GUILayout.Width(35));
                    GUILayout.Label(_infoLogBuild);
                    GUILayout.EndHorizontal();

                    GUILayout.BeginHorizontal();
                    GUILayout.Label("", GUILayout.Width(-18));
                    ga.VerboseLogBuild = EditorGUILayout.Toggle("", ga.VerboseLogBuild, GUILayout.Width(35));
                    GUILayout.Label(_verboseLogBuild);
                    GUILayout.EndHorizontal();

                    EditorGUILayout.Space();
                    EditorGUILayout.Space();
                    EditorGUILayout.Space();

                    const int layoutWidth   = 35;

                    GUILayout.BeginVertical("Performance");

                        GUILayout.BeginHorizontal();

                            GUILayout.BeginVertical();
                            GUILayout.Space(-4);
                            GUILayout.Label("Health Tracking", EditorStyles.largeLabel);
                            GUILayout.EndVertical();

                            if (!_healthEventIconOpen)
                            {
                                GUI.color = new Color(0.54f, 0.54f, 0.54f);
                            }
                            if (GUILayout.Button(_debugSettingsIcon, GUIStyle.none, new GUILayoutOption[] {
                                GUILayout.Width(12),
                                GUILayout.Height(12)
                            }))
                            {
                                _healthEventIconOpen = !_healthEventIconOpen;
                            }
                            GUI.color = Color.white;
                            EditorGUIUtility.AddCursorRect(GUILayoutUtility.GetLastRect(), MouseCursor.Link);
                            GUILayout.FlexibleSpace();

                        GUILayout.EndHorizontal();

                        if (_healthEventIconOpen)
                        {
                            GUILayout.BeginHorizontal();
                            TextAnchor tmpAnchor = GUI.skin.box.alignment;
                            GUI.skin.box.alignment = TextAnchor.UpperLeft;
                            Color tmpColor = GUI.skin.box.normal.textColor;
                            GUI.skin.box.normal.textColor = new Color(0.7f, 0.7f, 0.7f);
                            RectOffset tmpOffset = GUI.skin.box.padding;
                            GUI.skin.box.padding = new RectOffset(6, 6, 5, 32);
                            GUILayout.Box(_healthEventIconMsg);
                            GUI.skin.box.alignment = tmpAnchor;
                            GUI.skin.box.normal.textColor = tmpColor;
                            GUI.skin.box.padding = tmpOffset;
                            GUILayout.EndHorizontal();

                            Rect tmpRect = GUILayoutUtility.GetLastRect();
                            if (GUI.Button(new Rect(tmpRect.x + 5, tmpRect.y + tmpRect.height - 25, 80, 20), "Learn more"))
                            {
                                Application.OpenURL("https://docs.gameanalytics.com/features/health");
                            }
                        }

                        EditorGUILayout.Space();
                        EditorGUILayout.Space();

                        GUILayout.BeginVertical("General");

                            GUILayout.BeginHorizontal();
                            GUILayout.Space(-12);
                            EditorGUILayout.LabelField("General", EditorStyles.boldLabel);
                            GUILayout.EndHorizontal();

                            GUILayout.BeginHorizontal();
                            GUILayout.Label("", GUILayout.Width(-18));
                            ga.SubmitErrors = EditorGUILayout.Toggle("", ga.SubmitErrors, GUILayout.Width(35));
                            GUILayout.Label(_gaSubmitErrors);
                            GUILayout.EndHorizontal();

                            GUILayout.BeginHorizontal();
                            GUILayout.Label("", GUILayout.Width(-18));
                            ga.NativeErrorReporting = EditorGUILayout.Toggle("", ga.NativeErrorReporting, GUILayout.Width(35));
                            GUILayout.Label(_gaNativeErrorReporting);
                            GUILayout.EndHorizontal();

                            GUILayout.BeginHorizontal();
                            GUILayout.Label("", GUILayout.Width(-18));
                            ga.EnableSDKInitEvent = EditorGUILayout.Toggle("", ga.EnableSDKInitEvent, GUILayout.Width(layoutWidth));
                            GUILayout.Label(_enableSDKInitEvent);
                            GUILayout.EndHorizontal();

                        GUILayout.EndVertical();

                        EditorGUILayout.Space();
                        EditorGUILayout.Space();

                        GUILayout.BeginVertical("Session Performance");

                            GUILayout.BeginHorizontal();
                            GUILayout.Space(-12);
                            EditorGUILayout.LabelField("Session Performance Event", EditorStyles.boldLabel);
                            GUILayout.EndHorizontal();

                            EditorGUILayout.Space();

                            GUILayout.BeginHorizontal();
                            GUILayout.Label("", GUILayout.Width(-18));
                            ga.EnableFPSHistogram = EditorGUILayout.Toggle("", ga.EnableFPSHistogram, GUILayout.Width(layoutWidth));
                            GUILayout.Label(_enableFPSHistogram);
                            GUILayout.EndHorizontal();

                            GUILayout.BeginHorizontal();
                            GUILayout.Label("", GUILayout.Width(-18));
                            ga.EnableMemoryHistogram = EditorGUILayout.Toggle("", ga.EnableMemoryHistogram, GUILayout.Width(layoutWidth));
                            GUILayout.Label(_enableMemoryHistogram);
                            GUILayout.EndHorizontal();

                        GUILayout.EndVertical();

                        EditorGUILayout.Space();
                        EditorGUILayout.Space();

                        GUILayout.BeginVertical("EXPERIMENTAL");

                            GUILayout.BeginHorizontal();
                            GUILayout.Space(-12);
                            EditorGUILayout.LabelField("EXPERIMENTAL", EditorStyles.boldLabel);
                            GUILayout.EndHorizontal();

                            GUILayout.BeginHorizontal();
                            GUILayout.Label("", GUILayout.Width(-18));
                            ga.EnableHardwareTracking = EditorGUILayout.Toggle("", ga.EnableHardwareTracking, GUILayout.Width(layoutWidth));
                            GUILayout.Label(_enableHardwareTracking);
                            GUILayout.EndHorizontal();

                            GUILayout.BeginHorizontal();
                            GUILayout.Label("", GUILayout.Width(-18));
                            ga.EnableMemoryTracking = EditorGUILayout.Toggle("", ga.EnableMemoryTracking, GUILayout.Width(layoutWidth));
                            GUILayout.Label(_enableMemoryTracking);
                            GUILayout.EndHorizontal();

                        GUILayout.EndVertical();

                    GUILayout.EndVertical();
                }
                #endregion // Settings.InspectorStates.Pref
            }

            if (GUI.changed)
            {
                EditorUtility.SetDirty(ga);
            }
        }

        private MessageType ConvertMessageType(GameAnalyticsSDK.Setup.Settings.MessageTypes msgType)
        {
            switch (msgType)
            {
                case GameAnalyticsSDK.Setup.Settings.MessageTypes.Error:
                    return MessageType.Error;
                case GameAnalyticsSDK.Setup.Settings.MessageTypes.Info:
                    return MessageType.Info;
                case GameAnalyticsSDK.Setup.Settings.MessageTypes.Warning:
                    return MessageType.Warning;
                default:
                    return MessageType.None;
            }
        }

        private static void LoginUser(GameAnalyticsSDK.Setup.Settings ga)
        {
            Hashtable jsonTable = new Hashtable();
            jsonTable["email"] = ga.EmailGA;
            jsonTable["password"] = ga.PasswordGA;

            byte[] data = System.Text.Encoding.UTF8.GetBytes(GA_MiniJSON.Serialize(jsonTable));

            UnityWebRequest www = new UnityWebRequest(_gaUrl + "token", UnityWebRequest.kHttpVerbPOST);
            UploadHandlerRaw uH = new UploadHandlerRaw(data)
            {
                contentType = "application/json"
            };
            www.uploadHandler = uH;
            www.downloadHandler = new DownloadHandlerBuffer();

            Dictionary<string, string> headers = GA_EditorUtilities.WWWHeaders();
            foreach (KeyValuePair<string, string> entry in headers)
            {
                www.SetRequestHeader(entry.Key, entry.Value);
            }

            GA_ContinuationManager.StartCoroutine(LoginUserFrontend(www, ga), () => www.isDone);
        }


        private static IEnumerator LoginUserFrontend(UnityWebRequest www, GameAnalyticsSDK.Setup.Settings ga)
        {

            yield return www.SendWebRequest();

            while (!www.isDone)
                yield return null;

            try
            {
                string error = "";
                IDictionary<string, object> returnParam = null;

                string text = www.downloadHandler.text;

                if (!string.IsNullOrEmpty(text))
                {
                    returnParam = GA_MiniJSON.Deserialize(text) as IDictionary<string, object>;

                    if (returnParam != null && returnParam.ContainsKey("errors"))
                    {
                        IList<object> errorList = returnParam["errors"] as IList<object>;
                        if (errorList != null && errorList.Count > 0)
                        {
                            IDictionary<string, object> errors = errorList[0] as IDictionary<string, object>;
                            if (errors.ContainsKey("msg"))
                            {
                                error = errors["msg"].ToString();
                            }
                        }
                    }
                }

#if UNITY_2020_1_OR_NEWER
                if (!(www.result == UnityWebRequest.Result.ConnectionError || www.result == UnityWebRequest.Result.ProtocolError))
#elif UNITY_2017_1_OR_NEWER
                if (!(www.isNetworkError || www.isHttpError))
#else
                if (string.IsNullOrEmpty(www.error))
#endif
                {
                    if (!String.IsNullOrEmpty(error))
                    {
                        SetLoginStatus("Failed to login.", ga);
                    }
                    else if (returnParam != null)
                    {
                        IList<object> resultList = returnParam["results"] as IList<object>;
                        IDictionary<string, object> results = resultList[0] as IDictionary<string, object>;
                        ga.TokenGA = results["token"].ToString();

                        SetLoginStatus("Logged in. Getting data.", ga);

                        GetUserData(ga);
                    }
                }
                else if (www.responseCode == 301 || www.responseCode == 404 || www.responseCode == 410)
                {
                    Debug.LogError("Failed to login. GameAnalytics request not successful. API was changed. Please update your SDK to the latest version: " + www.error + " " + error);
                    SetLoginStatus("Failed to login. GameAnalytics request not successful. API was changed. Please update your SDK to the latest version.", ga);
                }
                else
                {
                    Debug.LogError("Failed to login: " + www.error + " " + error);
                    SetLoginStatus("Failed to login.", ga);
                }
            }
            catch(Exception e)
            {
                Debug.LogError("Failed to login:" + e.ToString());
                Debug.LogError(e.StackTrace);
                SetLoginStatus("Failed to login.", ga);
            }
        }

        private static void GetUserData(GameAnalyticsSDK.Setup.Settings ga)
        {
            UnityWebRequest www = UnityWebRequest.Get(_gaUrl + "user");
            Dictionary<string, string> headers = GA_EditorUtilities.WWWHeadersWithAuthorization(ga.TokenGA);
            foreach (KeyValuePair<string, string> entry in headers)
            {
                www.SetRequestHeader(entry.Key, entry.Value);
            }

            GA_ContinuationManager.StartCoroutine(GetUserDataFrontend(www, ga), () => www.isDone);
        }


        private static IEnumerator GetUserDataFrontend(UnityWebRequest www, GameAnalyticsSDK.Setup.Settings ga)
        {
            yield return www.SendWebRequest();

            while (!www.isDone)
                yield return null;

            try
            {
                IDictionary<string, object> returnParam = null;
                string error = "";

                string text = www.downloadHandler.text;

                if (!string.IsNullOrEmpty(text))
                {
                    returnParam = GA_MiniJSON.Deserialize(text) as IDictionary<string, object>;
                    if (returnParam.ContainsKey("errors"))
                    {
                        IList<object> errorList = returnParam["errors"] as IList<object>;
                        if (errorList != null && errorList.Count > 0)
                        {
                            IDictionary<string, object> errors = errorList[0] as IDictionary<string, object>;
                            if (errors.ContainsKey("msg"))
                            {
                                error = errors["msg"].ToString();
                            }
                        }
                    }
                }

#if UNITY_2020_1_OR_NEWER
                if (!(www.result == UnityWebRequest.Result.ConnectionError || www.result == UnityWebRequest.Result.ProtocolError))
#elif UNITY_2017_1_OR_NEWER
                if (!(www.isNetworkError || www.isHttpError))
#endif
                {
                    if (!String.IsNullOrEmpty(error))
                    {
                        Debug.LogError(error);
                        SetLoginStatus("Failed to get data.", ga);
                    }
                    else if (returnParam != null)
                    {
                        IList<object> resultList = returnParam["results"] as IList<object>;
                        IDictionary<string, object> results = resultList[0] as IDictionary<string, object>;
                        IDictionary<string, object> orgs = results["organizations"] as IDictionary<string, object>;
                        IList<object> studioList = results["studios"] as IList<object>;

                        Dictionary<string, GameAnalyticsSDK.Setup.Organization> organizationMap = new Dictionary<string, GameAnalyticsSDK.Setup.Organization>();
                        List<GameAnalyticsSDK.Setup.Organization> returnOrganizations = new List<GameAnalyticsSDK.Setup.Organization>();
                        foreach(KeyValuePair<string, object> pair in orgs)
                        {
                            IDictionary<string, object> organization = pair.Value as IDictionary<string, object>;
                            GameAnalyticsSDK.Setup.Organization o = new GameAnalyticsSDK.Setup.Organization(organization["name"].ToString(), organization["id"].ToString());
                            returnOrganizations.Add(o);
                            organizationMap.Add(o.ID, o);
                        }

                        for (int s = 0; s < studioList.Count; s++)
                        {
                            IDictionary<string, object> studio = studioList[s] as IDictionary<string, object>;

                            if ((!studio.ContainsKey("demo") || !((bool)studio["demo"])) && (!studio.ContainsKey("archived") || !((bool)studio["archived"])))
                            {
                                List<GameAnalyticsSDK.Setup.Game> returnGames = new List<GameAnalyticsSDK.Setup.Game>();

                                List<object> gamesList = (List<object>)studio["games"];
                                for (int g = 0; g < gamesList.Count; g++)
                                {
                                    IDictionary<string, object> game = gamesList[g] as IDictionary<string, object>;

                                    if ((!game.ContainsKey("archived") || !((bool)game["archived"])) && (!game.ContainsKey("disabled") || !((bool)game["disabled"])))
                                    {
                                        returnGames.Add(new GameAnalyticsSDK.Setup.Game(game["name"].ToString(), int.Parse(game["id"].ToString()), game["key"].ToString(), game["secret"].ToString()));
                                    }
                                }

                                GameAnalyticsSDK.Setup.Studio st = new GameAnalyticsSDK.Setup.Studio(studio["name"].ToString(), studio["id"].ToString(), studio["org_id"].ToString(), returnGames);
                                organizationMap[st.OrganizationID].Studios.Add(st);
                            }
                        }
                        ga.Organizations = returnOrganizations;

                        if (ga.Organizations.Count == 1 && ga.Organizations[0].Studios.Count == 1)
                        {
                            bool autoSelectedPlatform = false;
                            for (int i = 0; i < GameAnalytics.SettingsGA.Platforms.Count; ++i)
                            {
                                RuntimePlatform platform = GameAnalytics.SettingsGA.Platforms[i];

                                if (platform == ga.LastCreatedGamePlatform)
                                {
                                    SelectOrganization(1, ga, i);
                                    autoSelectedPlatform = true;
                                }
                            }
                            ga.LastCreatedGamePlatform = (RuntimePlatform)(-1);
                            SetLoginStatus(autoSelectedPlatform ? "Received data. Autoselected platform.." : "Received data. Add a platform..", ga);
                        }
                        else
                        {
                            SetLoginStatus("Received data. Add a platform..", ga);
                        }

                        ga.CurrentInspectorState = GameAnalyticsSDK.Setup.Settings.InspectorStates.Basic;
                    }
                }
#if UNITY_5_4_OR_NEWER
                else if (www.responseCode == 301 || www.responseCode == 404 || www.responseCode == 410)
                {
                    Debug.LogError("Failed to get data. GameAnalytics request not successful. API was changed. Please update your SDK to the latest version: " + www.error + " " + error);
                    SetLoginStatus("Failed to get data. GameAnalytics request not successful. API was changed. Please update your SDK to the latest version.", ga);
                }
#endif
                else
                {
                    Debug.LogError("Failed to get user data: " + www.error + " " + error);
                    SetLoginStatus("Failed to get data.", ga);
                }
            }
            catch (Exception e)
            {
                Debug.LogError("Failed to get user data: " + e.ToString() + ", " + e.StackTrace);
                SetLoginStatus("Failed to get data.", ga);
            }
        }

        private static void SelectOrganization(int index, GameAnalyticsSDK.Setup.Settings ga, int platform)
        {
            ga.SelectedOrganization[platform] = index;
            if (ga.Organizations[index - 1].Studios.Count == 1)
            {
                SelectStudio(1, ga, platform);
            }
            else
            {
                SetLoginStatus("Please select studio..", ga);
            }
        }

        private static void SelectStudio(int index, GameAnalyticsSDK.Setup.Settings ga, int platform)
        {
            ga.SelectedStudio[platform] = index;
            if (ga.Organizations[ga.SelectedOrganization[platform] - 1].Studios[index - 1].Games.Count == 1)
            {
                if (ga.IsGameKeyValid(platform, ga.Organizations[ga.SelectedOrganization[platform] - 1].Studios[ga.SelectedStudio[platform] - 1].Games[0].GameKey) &&
                   ga.IsSecretKeyValid(platform, ga.Organizations[ga.SelectedOrganization[platform] - 1].Studios[ga.SelectedStudio[platform] - 1].Games[0].SecretKey))
                {
                    SelectGame(1, ga, platform);
                }
            }
            else
            {
                SetLoginStatus("Please select game..", ga);
            }
        }

        private static void SelectGame(int index, GameAnalyticsSDK.Setup.Settings ga, int platform)
        {
            ga.SelectedGame[platform] = index;

            if (index == 0)
            {
                ga.UpdateGameKey(platform, "");
                ga.UpdateSecretKey(platform, "");
            }
            else if (ga.IsGameKeyValid(platform, ga.Organizations[ga.SelectedOrganization[platform] - 1].Studios[ga.SelectedStudio[platform] - 1].Games[index - 1].GameKey) &&
               ga.IsSecretKeyValid(platform, ga.Organizations[ga.SelectedOrganization[platform] - 1].Studios[ga.SelectedStudio[platform] - 1].Games[index - 1].SecretKey))
            {
                ga.SelectedPlatformOrganization[platform] = ga.Organizations[ga.SelectedOrganization[platform] - 1].Name;
                ga.SelectedPlatformStudio[platform] = ga.Organizations[ga.SelectedOrganization[platform] - 1].Studios[ga.SelectedStudio[platform] - 1].Name;
                ga.SelectedPlatformGame[platform] = ga.Organizations[ga.SelectedOrganization[platform] - 1].Studios[ga.SelectedStudio[platform] - 1].Games[index - 1].Name;
                ga.SelectedPlatformGameID[platform] = ga.Organizations[ga.SelectedOrganization[platform] - 1].Studios[ga.SelectedStudio[platform] - 1].Games[index - 1].ID;
                ga.UpdateGameKey(platform, ga.Organizations[ga.SelectedOrganization[platform] - 1].Studios[ga.SelectedStudio[platform] - 1].Games[index - 1].GameKey);
                ga.UpdateSecretKey(platform, ga.Organizations[ga.SelectedOrganization[platform] - 1].Studios[ga.SelectedStudio[platform] - 1].Games[index - 1].SecretKey);
                SetLoginStatus("Received keys. Ready to go!", ga);
            }
            else
            {
                if (!ga.IsGameKeyValid(platform, ga.Organizations[ga.SelectedOrganization[platform] - 1].Studios[ga.SelectedStudio[platform] - 1].Games[index - 1].GameKey))
                {
                    Debug.LogError("[GameAnalytics] Game key already exists for another platform. Platforms can't use the same key.");
                    ga.SelectedGame[platform] = 0;
                }
                else if (!ga.IsSecretKeyValid(platform, ga.Organizations[ga.SelectedOrganization[platform] - 1].Studios[ga.SelectedStudio[platform] - 1].Games[index - 1].SecretKey))
                {
                    Debug.LogError("[GameAnalytics] Secret key already exists for another platform. Platforms can't use the same key.");
                    ga.SelectedGame[platform] = 0;
                }
            }
        }

        private static void SetLoginStatus(string status, GameAnalyticsSDK.Setup.Settings ga)
        {
            ga.LoginStatus = status;
            EditorUtility.SetDirty(ga);
        }

        public static void CheckForUpdates()
        {
            if (GameAnalyticsSDK.Setup.Settings.CheckingForUpdates)
            {
                return;
            }

            GameAnalyticsSDK.Setup.Settings.CheckingForUpdates = true;

            UnityWebRequest www = UnityWebRequest.Get("https://s3.amazonaws.com/public.gameanalytics.com/sdk_status/current.json");
            GA_ContinuationManager.StartCoroutine(CheckForUpdatesCoroutine(www), () => www.isDone);
        }

        private static void GetChangeLogsAndShowUpdateWindow(string newVersion)
        {
#if UNITY_2017_1_OR_NEWER
            UnityWebRequest www = UnityWebRequest.Get("https://s3.amazonaws.com/public.gameanalytics.com/sdk_status/change_logs.json");
#else
            WWW www = new WWW("https://s3.amazonaws.com/public.gameanalytics.com/sdk_status/change_logs.json");
#endif
            GA_ContinuationManager.StartCoroutine(GetChangeLogsAndShowUpdateWindowCoroutine(www, newVersion), () => www.isDone);
        }

        private static IEnumerator CheckForUpdatesCoroutine(UnityWebRequest www)
        {
            yield return www.SendWebRequest();

            while (!www.isDone)
                yield return null;

            try
            {
#if UNITY_2020_1_OR_NEWER
                if (!(www.result == UnityWebRequest.Result.ConnectionError || www.result == UnityWebRequest.Result.ProtocolError))
#elif UNITY_2017_1_OR_NEWER
                if (!(www.isNetworkError || www.isHttpError))
#else
                if (string.IsNullOrEmpty(www.error))
#endif
                {
                    string text;
#if UNITY_2017_1_OR_NEWER
                    text = www.downloadHandler.text;
#else
                    text = www.text;
#endif
                    IDictionary<string, object> returnParam = GA_MiniJSON.Deserialize(text) as IDictionary<string, object>;
                    if (returnParam.ContainsKey("unity"))
                    {
                        IDictionary<string, object> unityParam = returnParam["unity"] as IDictionary<string, object>;
                        if (unityParam.ContainsKey("version"))
                        {
                            string newVersion = (returnParam["unity"] as IDictionary<string, object>)["version"].ToString();

                            if (IsNewVersion(newVersion, GameAnalyticsSDK.Setup.Settings.VERSION))
                            {
                                GetChangeLogsAndShowUpdateWindow(newVersion);
                            }
                        }
                    }
                }
            }
            catch
            {
                GameAnalyticsSDK.Setup.Settings.CheckingForUpdates = false;
            }
        }

#if UNITY_2017_1_OR_NEWER
        private static IEnumerator GetChangeLogsAndShowUpdateWindowCoroutine(UnityWebRequest www, string newVersion)
#else
        private static IEnumerator<WWW> GetChangeLogsAndShowUpdateWindowCoroutine(WWW www, string newVersion)
#endif
        {
#if UNITY_2017_1_OR_NEWER
#if UNITY_2017_2_OR_NEWER
            yield return www.SendWebRequest();
#else
            yield return www.Send();
#endif
            while (!www.isDone)
                yield return null;
#else
            yield return www;
#endif

            try
            {
#if UNITY_2020_1_OR_NEWER
                if (!(www.result == UnityWebRequest.Result.ConnectionError || www.result == UnityWebRequest.Result.ProtocolError))
#elif UNITY_2017_1_OR_NEWER
                if (!(www.isNetworkError || www.isHttpError))
#else
                if (string.IsNullOrEmpty(www.error))
#endif
                {
                    string text;
#if UNITY_2017_1_OR_NEWER
                    text = www.downloadHandler.text;
#else
                    text = www.text;
#endif
                    IDictionary<string, object> returnParam = GA_MiniJSON.Deserialize(text) as IDictionary<string, object>;

                    IList<object> unity = (returnParam["unity"] as IList<object>);
                    string newChanges = "";
                    for (int i = 0; i < unity.Count; i++)
                    {
                        IDictionary<string, object> unityHash = unity[i] as IDictionary<string, object>;
                        IList<object> changes = (unityHash["changes"] as IList<object>);

                        if (unityHash["version"].ToString() == GameAnalyticsSDK.Setup.Settings.VERSION)
                        {
                            break;
                        }

                        if (string.IsNullOrEmpty(newChanges))
                        {
                            newChanges = unityHash["version"].ToString();
                        }
                        else
                        {
                            newChanges += "\n\n" + unityHash["version"].ToString();
                        }

                        for (int u = 0; u < changes.Count; u++)
                        {
                            if (string.IsNullOrEmpty(newChanges))
                            {
                                newChanges = "- " + changes[u].ToString();
                            }
                            else
                            {
                                newChanges += "\n- " + changes[u].ToString();
                            }
                        }

                        if (unityHash["version"].ToString() == newVersion)
                        {
                            GA_UpdateWindow.SetNewVersion(newVersion);
                        }
                    }

                    string skippedVersion = EditorPrefs.GetString("ga_skip_version" + "-" + Application.dataPath, "");

                    GA_UpdateWindow.SetChanges(newChanges);
                    if (!skippedVersion.Equals(newVersion))
                    {
                        OpenUpdateWindow();
                    }

                    GameAnalyticsSDK.Setup.Settings.CheckingForUpdates = false;
                }
            }
            catch
            {
                GameAnalyticsSDK.Setup.Settings.CheckingForUpdates = false;
            }
        }

        private static void OpenUpdateWindow()
        {
#if UNITY_2018_2_OR_NEWER
            if(!Application.isBatchMode)
#else
            string commandLineOptions = System.Environment.CommandLine;
            if (!commandLineOptions.Contains("-batchmode"))
#endif
            {
                // TODO: possible to close existing window if already there?
                //GA_UpdateWindow updateWindow = ScriptableObject.CreateInstance<GA_UpdateWindow> ();
                GA_UpdateWindow updateWindow = (GA_UpdateWindow)EditorWindow.GetWindow(typeof(GA_UpdateWindow), utility: true);
                updateWindow.position = new Rect(150, 150, 415, 340);
                updateWindow.titleContent = new GUIContent("An update for GameAnalytics is available!");
                updateWindow.Show();
            }
        }

        public static void Splitter(Color rgb, float thickness = 1, int margin = 0)
        {
            GUIStyle splitter = new GUIStyle();
            splitter.normal.background = EditorGUIUtility.whiteTexture;
            splitter.stretchWidth = true;
            splitter.margin = new RectOffset(margin, margin, 7, 7);

            Rect position = GUILayoutUtility.GetRect(GUIContent.none, splitter, GUILayout.Height(thickness));

            if(Event.current.type == EventType.Repaint)
            {
                Color restoreColor = GUI.color;
                GUI.color = rgb;
                splitter.Draw(position, false, false, false, false);
                GUI.color = restoreColor;
            }
        }

        private static string PlatformToString(RuntimePlatform platform)
        {
            string result = platform.ToString();

            if (platform == RuntimePlatform.IPhonePlayer)
            {
                result = "iOS";
            }
            if (platform == RuntimePlatform.tvOS) {
                result = "tvOS";
            }
            else if (platform == RuntimePlatform.WSAPlayerARM ||
                platform == RuntimePlatform.WSAPlayerX64 ||
                platform == RuntimePlatform.WSAPlayerX86)
            {
                result = "WSA";
            }

            return result;
        }

        // versionstring is:
        // [majorVersion].[minorVersion].[patchnumber]
        static bool IsNewVersion(string newVersion, string currentVersion)
        {

            int[] newVersionInts = GetVersionIntegersFromString(newVersion);
            int[] currentVersionInts = GetVersionIntegersFromString(currentVersion);

            if(newVersionInts == null || currentVersionInts == null)
            {
                return false;
            }

            // compare majorVersion
            if(newVersionInts[MAJOR_V] > currentVersionInts[MAJOR_V])
            {
                return true;
            }
            else if(newVersionInts[MAJOR_V] < currentVersionInts[MAJOR_V])
            {
                return false;
            }

            // compare minorVersion (majorVersion is unchanged)
            if(newVersionInts[MINOR_V] > currentVersionInts[MINOR_V])
            {
                return true;
            }
            else if(newVersionInts[MINOR_V] < currentVersionInts[MINOR_V])
            {
                return false;
            }

            // compare patchnumber (majorVersion, minorVersion is unchanged)
            if(newVersionInts[PATCH_V] > currentVersionInts[PATCH_V])
            {
                return true;
            }

            // not valid new version
            return false;
        }

        // version string need to be: x.y.z
        // return validated ints in array or null
        static int[] GetVersionIntegersFromString(string versionString)
        {
            string[] versionNumbers = versionString.Split('.');
            if(versionNumbers.Length != ALL_V)
            {
                return null;
            }

            // container for validated version integers
            int[] validatedVersionNumbers = new int[ALL_V];

            // verify int parsing
            bool isIntMajorVersion = int.TryParse(versionNumbers[MAJOR_V], out validatedVersionNumbers[MAJOR_V]);
            bool isIntMinorVersion = int.TryParse(versionNumbers[MINOR_V], out validatedVersionNumbers[MINOR_V]);
            bool isIntPatchnumber  = int.TryParse(versionNumbers[PATCH_V], out validatedVersionNumbers[PATCH_V]);

            if(isIntMajorVersion && isIntMinorVersion && isIntPatchnumber)
            {
                return validatedVersionNumbers;
            }
            else
            {
                return null;
            }
        }

#region Helper functions

        private static void OpenSignUp()
        {
            Application.OpenURL(_gaSignUpUrl);
        }

        private static void OpenSignUpSwitchToGuideStep()
        {
            GA_SignUp signup = ScriptableObject.CreateInstance<GA_SignUp>();
            signup.maxSize = new Vector2(640, 600);
            signup.minSize = new Vector2(640, 600);
            signup.titleContent = new GUIContent("GameAnalytics - Setup Guide");
            signup.ShowUtility();
            signup.Opened();

            signup.SwitchToGuideStep();
        }

        private static void DrawLinkButton(string text, GUIStyle style, string url, params GUILayoutOption[] options)
        {
            DrawLinkButton(new GUIContent(text), style, url, options);
        }

        private static void DrawLinkButton(GUIContent content, GUIStyle style, string url, params GUILayoutOption[] options)
        {
            Action action = () => Application.OpenURL(url);
            DrawButton(content, style, action, options);
        }

        private static void DrawButton(string text, GUIStyle style, Action action, params GUILayoutOption[] options)
        {
            DrawButton(new GUIContent(text), style, action, options);
        }

        private static void DrawButton(GUIContent content, GUIStyle style, Action action, params GUILayoutOption[] options)
        {
            if(GUILayout.Button(content, style, options))
            {
                action();
            }
            EditorGUIUtility.AddCursorRect(GUILayoutUtility.GetLastRect(), MouseCursor.Link);
        }

        private static void DrawButtonWithFlexibleSpace(string text, GUIStyle style, Action action, params GUILayoutOption[] options)
        {
            GUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();
            DrawButton(text, style, action, options);
            GUILayout.FlexibleSpace();
            GUILayout.EndHorizontal();
        }

        private static void DrawLabelWithFlexibleSpace(string text, GUIStyle style, int height)
        {
            GUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();
            GUILayout.Label(text, style, new GUILayoutOption[] { GUILayout.Height(height) });
            GUILayout.FlexibleSpace();
            GUILayout.EndHorizontal();
        }

#endregion // Helper functions

#region UIvalidation

		/// <summary>
		/// Check if a string matches a defined pattern
		/// </summary>
		/// <returns><c>true</c>, if match <c>false</c> otherwise.</returns>
		/// <param name="s">Given string</param>
		/// <param name="pattern">Pattern.</param>
		public static bool StringMatch(string s, string pattern)
		{
			if(s == null || pattern == null)
			{
				return false;
			}

			return Regex.IsMatch(s, pattern);
		}

		private string ValidateResourceCurrencyEditor(string currency)
		{
			if (!StringMatch (currency, "^[A-Za-z]+$")) {
				if (currency != null) {
					Debug.LogError ("Validation fail - resource currency: Cannot contain other characters than 'A-Za-z'. String:'" + currency + "'");
				}
				return "Empty";
			}
			if (ConsistsOfWhiteSpace(currency)) {
				return "Empty";
			}
			return currency;
		}

		private string ValidateResourceItemTypeEditor (string itemType)
		{
			if (itemType.Length > 64) {
				Debug.LogError ("Validation fail - resource itemType cannot be longer than 64 chars.");
				return "Empty";
			}
			if (!StringMatch (itemType, "^[A-Za-z0-9\\s\\-_\\.\\(\\)\\!\\?]{1,64}$")) {
				if (itemType != null) {
					Debug.LogError ("Validation fail - resource itemType: Cannot contain other characters than A-z, 0-9, -_., ()!?. String: '" + itemType + "'");
				}
				return "Empty";
			}
			if (ConsistsOfWhiteSpace(itemType)) {
				return "Empty";
			}
			return itemType;
		}

		private string ValidateCustomDimensionEditor(string customDimension)
		{
			if (customDimension.Length > 32) {
				Debug.LogError ("Validation fail - custom dimension cannot be longer than 32 chars.");
				return "Empty";
			}
			if (!StringMatch (customDimension, "^[A-Za-z0-9\\s\\-_\\.\\(\\)\\!\\?]{1,32}$")) {
				if (customDimension != null) {
					Debug.LogError ("Validation fail - custom dimension: Cannot contain other characters than A-z, 0-9, -_., ()!?. String: '" + customDimension + "'");
				}
				return "Empty";
			}
			if (ConsistsOfWhiteSpace(customDimension)) {
				return "Empty";
			}
			return customDimension;
		}

		private bool ConsistsOfWhiteSpace(string s)
		{
			foreach (char c in s) {
				if (c != ' ')
					return false;
			}
			return true;
		}

#endregion
    }
}


================================================
FILE: Editor/GA_SettingsInspector.cs.meta
================================================
fileFormatVersion: 2
guid: 771d45ab6687246f4ac00b5bf537e520
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 


================================================
FILE: Editor/GA_SignUp.cs
================================================
using UnityEngine;
using System.Collections;
using UnityEditor;
using System.Collections.Generic;
using GameAnalyticsSDK.Setup;
using UnityEngine.Networking;

namespace GameAnalyticsSDK.Editor
{
    public class GA_SignUp : EditorWindow
    {
        public enum TourSteps
        {
            SetupGameKeys = 0,
            AddObject,
            StartTracking,
            TrackBusiness,
            TrackResources,
            TrackProgression,
            TrackDesign,
            LogErrors,
            CustomDimensions,
            FinishGuide,
            AllSteps

        }

        public TourSteps TourStep = TourSteps.SetupGameKeys;

        private bool _showGuidedTour = true;
    
        private Vector2 _appScrollPos;

        private const int INPUT_WIDTH = 230;

        private static GA_SignUp _instance;
        private RuntimePlatform _selectedPlatform;
        private int _selectedOrganization;
        private int _selectedStudio;

        private enum StringType
        {
            Label,
            TextBox,
            Link

        }

        private struct StringWithType
        {
            public string Text;
            public StringType Type;
            public string Link;
        }

        public void Opened()
        {
            if (_instance == null)
            {
                _instance = this;
            }
            else
            {
                Close();
            }
        }

        void OnDisable()
        {
            if (_instance == this)
            {
                _instance = null;
            }
        }

        void OnGUI()
        {
            if(_showGuidedTour)
            {
                #region guide gui

                    TourSteps guideStep = TourStep;

                    GUILayout.Space(20);

                    GUILayout.BeginHorizontal();
                    GUILayout.FlexibleSpace();
                    GUILayout.Label(GameAnalytics.SettingsGA.InstrumentIcon, new GUILayoutOption[] {
                        GUILayout.Width(40),
                        GUILayout.Height(40)
                    });
                    GUILayout.FlexibleSpace();
                    GUILayout.EndHorizontal();

                    GUILayout.Space(5);

                    GUILayout.BeginHorizontal();
                    GUILayout.FlexibleSpace();
                    GUILayout.Label("Start instrumenting", EditorStyles.whiteLargeLabel);
                    GUILayout.FlexibleSpace();
                    GUILayout.EndHorizontal();

                    EditorGUILayout.Space();
                    EditorGUILayout.Space();

                    GUILayout.BeginHorizontal();
                    GUILayout.FlexibleSpace();
                    GUILayout.Label("Let us guide you through getting properly setup with GameAnalytics.");
                    GUILayout.FlexibleSpace();
                    GUILayout.EndHorizontal();

                    EditorGUILayout.Space();
                    EditorGUILayout.Space();
                    EditorGUILayout.Space();

                    GA_SettingsInspector.Splitter(new Color(0.35f, 0.35f, 0.35f), 1, 30);

                    EditorGUILayout.Space();
                    EditorGUILayout.Space();
                    EditorGUILayout.Space();

                    GUILayout.BeginHorizontal();
                    GUILayout.FlexibleSpace();
                    if (guideStep == TourSteps.FinishGuide)
                        GUILayout.Label(GetGuideStepTitle(guideStep), EditorStyles.whiteLargeLabel, GUILayout.Width(464));
                    else
                        GUILayout.Label(GetGuideStepTitle(guideStep), EditorStyles.whiteLargeLabel, GUILayout.Width(470));
                    GUILayout.BeginVertical();
                    GUILayout.Space(7);
                    if (guideStep == TourSteps.FinishGuide)
                        GUILayout.Label("STEP " + (guideStep) + " OF 10", GUILayout.Width(87));
                    else
                        GUILayout.Label("STEP " + (guideStep) + " OF 10", GUILayout.Width(80));
                    GUILayout.EndVertical();
                    GUILayout.FlexibleSpace();
                    GUILayout.EndHorizontal();

                    EditorGUILayout.Space();
                    EditorGUILayout.Space();

                    GUILayout.BeginHorizontal();
                    GUILayout.FlexibleSpace();
                    GUILayout.BeginVertical();
                    StringWithType[] guideStepTexts = GetGuideStepText(guideStep);
                    foreach (StringWithType s in guideStepTexts)
                    {
                        if (s.Type == StringType.Label)
                        {
                            GUILayout.Label(
Download .txt
gitextract_lmr6m39a/

├── .gitignore
├── CHANGELOG.md
├── CHANGELOG.md.meta
├── Documentation~/
│   └── index.md
├── Editor/
│   ├── Android/
│   │   ├── Dependencies.xml
│   │   └── Dependencies.xml.meta
│   ├── Android.meta
│   ├── GA_AssetPostprocessor.cs
│   ├── GA_AssetPostprocessor.cs.meta
│   ├── GA_AutoRun.cs
│   ├── GA_AutoRun.cs.meta
│   ├── GA_ContinuationManager.cs
│   ├── GA_ContinuationManager.cs.meta
│   ├── GA_EditorUtilities.cs
│   ├── GA_EditorUtilities.cs.meta
│   ├── GA_Menu.cs
│   ├── GA_Menu.cs.meta
│   ├── GA_PostprocessBuild.cs
│   ├── GA_PostprocessBuild.cs.meta
│   ├── GA_SettingsInspector.cs
│   ├── GA_SettingsInspector.cs.meta
│   ├── GA_SignUp.cs
│   ├── GA_SignUp.cs.meta
│   ├── GA_UpdateWindow.cs
│   ├── GA_UpdateWindow.cs.meta
│   ├── GameAnalyticsInspector.cs
│   ├── GameAnalyticsInspector.cs.meta
│   ├── Playmaker/
│   │   ├── PlayMakerPresenceCheck.cs
│   │   ├── PlayMakerPresenceCheck.cs.meta
│   │   ├── SendProgressionEventActionEditor.cs
│   │   ├── SendProgressionEventActionEditor.cs.meta
│   │   ├── SendResourceEventActionEditor.cs
│   │   └── SendResourceEventActionEditor.cs.meta
│   ├── Playmaker.meta
│   ├── com.gameanalytics.sdk.Editor.asmdef
│   └── com.gameanalytics.sdk.Editor.asmdef.meta
├── Editor.meta
├── Gizmos/
│   ├── GameAnalytics/
│   │   ├── Images/
│   │   │   ├── active.png.meta
│   │   │   ├── default.png.meta
│   │   │   ├── delete.png.meta
│   │   │   ├── game.png.meta
│   │   │   ├── home.png.meta
│   │   │   ├── info.png.meta
│   │   │   ├── instrument.png.meta
│   │   │   ├── question.png.meta
│   │   │   ├── update_orange.png.meta
│   │   │   └── user.png.meta
│   │   ├── Images.meta
│   │   └── gaLogo.png.meta
│   └── GameAnalytics.meta
├── Gizmos.meta
├── GooglePackages/
│   ├── com.google.external-dependency-manager-1.2.168.tgz
│   └── com.google.external-dependency-manager-1.2.168.tgz.meta
├── GooglePackages.meta
├── LICENSE.md
├── LICENSE.md.meta
├── README.md
├── README.md.meta
├── Runtime/
│   ├── Android/
│   │   ├── gameanalytics.aar
│   │   ├── gameanalytics.aar.meta
│   │   ├── unity_gameanalytics.jar
│   │   └── unity_gameanalytics.jar.meta
│   ├── Android.meta
│   ├── GameAnalytics.dll.meta
│   ├── Linux/
│   │   └── sqlite3.so.meta
│   ├── Linux.meta
│   ├── Playmaker/
│   │   ├── Examples/
│   │   │   ├── GameAnalyticsPlayMakerDemo.unitypackage
│   │   │   └── GameAnalyticsPlayMakerDemo.unitypackage.meta
│   │   ├── Examples.meta
│   │   ├── GAInitialize.cs
│   │   ├── GAInitialize.cs.meta
│   │   ├── GetABTestingId.cs
│   │   ├── GetABTestingId.cs.meta
│   │   ├── GetABTestingVariantId.cs
│   │   ├── GetABTestingVariantId.cs.meta
│   │   ├── GetRemoteConfigsValueAsString.cs
│   │   ├── GetRemoteConfigsValueAsString.cs.meta
│   │   ├── IsRemoteConfigsReady.cs
│   │   ├── IsRemoteConfigsReady.cs.meta
│   │   ├── SendAdEvent.cs
│   │   ├── SendAdEvent.cs.meta
│   │   ├── SendBusinessEvent.cs
│   │   ├── SendBusinessEvent.cs.meta
│   │   ├── SendDesignEvent.cs
│   │   ├── SendDesignEvent.cs.meta
│   │   ├── SendErrorEvent.cs
│   │   ├── SendErrorEvent.cs.meta
│   │   ├── SendProgressionEvent.cs
│   │   ├── SendProgressionEvent.cs.meta
│   │   ├── SendResourceEvent.cs
│   │   ├── SendResourceEvent.cs.meta
│   │   ├── SetCustomDimension.cs
│   │   └── SetCustomDimension.cs.meta
│   ├── Playmaker.meta
│   ├── Prefabs/
│   │   ├── GameAnalytics.prefab
│   │   └── GameAnalytics.prefab.meta
│   ├── Prefabs.meta
│   ├── SamsungTV/
│   │   ├── GameAnalytics.SamsungTV.dll.meta
│   │   ├── Mono.Data.Sqlite.dll.meta
│   │   ├── sqlite3.c
│   │   ├── sqlite3.c.meta
│   │   ├── sqlite3.h
│   │   └── sqlite3.h.meta
│   ├── SamsungTV.meta
│   ├── Scripts/
│   │   ├── ATT/
│   │   │   ├── GameAnalyticsATTClient.cs
│   │   │   ├── GameAnalyticsATTClient.cs.meta
│   │   │   ├── GameAnalyticsATTObjCBridge.cs
│   │   │   └── GameAnalyticsATTObjCBridge.cs.meta
│   │   ├── ATT.meta
│   │   ├── Enums.cs
│   │   ├── Enums.cs.meta
│   │   ├── Events/
│   │   │   ├── GAValidator.cs
│   │   │   ├── GAValidator.cs.meta
│   │   │   ├── GA_Ads.cs
│   │   │   ├── GA_Ads.cs.meta
│   │   │   ├── GA_Business.cs
│   │   │   ├── GA_Business.cs.meta
│   │   │   ├── GA_Debug.cs
│   │   │   ├── GA_Debug.cs.meta
│   │   │   ├── GA_Design.cs
│   │   │   ├── GA_Design.cs.meta
│   │   │   ├── GA_Error.cs
│   │   │   ├── GA_Error.cs.meta
│   │   │   ├── GA_Progression.cs
│   │   │   ├── GA_Progression.cs.meta
│   │   │   ├── GA_Resource.cs
│   │   │   ├── GA_Resource.cs.meta
│   │   │   ├── GA_Setup.cs
│   │   │   ├── GA_Setup.cs.meta
│   │   │   ├── GA_SpecialEvents.cs
│   │   │   └── GA_SpecialEvents.cs.meta
│   │   ├── Events.meta
│   │   ├── GameAnalytics.cs
│   │   ├── GameAnalytics.cs.meta
│   │   ├── IGameAnalyticsATTListener.cs
│   │   ├── IGameAnalyticsATTListener.cs.meta
│   │   ├── Setup/
│   │   │   ├── Settings.cs
│   │   │   └── Settings.cs.meta
│   │   ├── Setup.meta
│   │   ├── State/
│   │   │   ├── GAState.cs
│   │   │   └── GAState.cs.meta
│   │   ├── State.meta
│   │   ├── Utilities/
│   │   │   ├── GA_MiniJson.cs
│   │   │   └── GA_MiniJson.cs.meta
│   │   ├── Utilities.meta
│   │   ├── Wrapper/
│   │   │   ├── GA_AndroidWrapper.cs
│   │   │   ├── GA_AndroidWrapper.cs.meta
│   │   │   ├── GA_MonoWrapper.cs
│   │   │   ├── GA_MonoWrapper.cs.meta
│   │   │   ├── GA_TizenWrapper.cs
│   │   │   ├── GA_TizenWrapper.cs.meta
│   │   │   ├── GA_UWPWrapper.cs
│   │   │   ├── GA_UWPWrapper.cs.meta
│   │   │   ├── GA_WebGLWrapper.cs
│   │   │   ├── GA_WebGLWrapper.cs.meta
│   │   │   ├── GA_Wrapper.cs
│   │   │   ├── GA_Wrapper.cs.meta
│   │   │   ├── GA_iOSWrapper.cs
│   │   │   ├── GA_iOSWrapper.cs.meta
│   │   │   ├── GA_tvOSWrapper.cs
│   │   │   └── GA_tvOSWrapper.cs.meta
│   │   └── Wrapper.meta
│   ├── Scripts.meta
│   ├── Tizen/
│   │   ├── libGameAnalytics.a
│   │   └── libGameAnalytics.a.meta
│   ├── Tizen.meta
│   ├── WSA/
│   │   ├── ARM/
│   │   │   └── GameAnalytics.UWP.dll.meta
│   │   ├── ARM.meta
│   │   ├── x64/
│   │   │   └── GameAnalytics.UWP.dll.meta
│   │   ├── x64.meta
│   │   ├── x86/
│   │   │   └── GameAnalytics.UWP.dll.meta
│   │   └── x86.meta
│   ├── WSA.meta
│   ├── WebGL/
│   │   ├── GameAnalytics.jspre
│   │   ├── GameAnalytics.jspre.meta
│   │   ├── GameAnalyticsUnity.jslib
│   │   ├── GameAnalyticsUnity.jslib.meta
│   │   ├── GameAnalyticsUtils.jspre
│   │   └── GameAnalyticsUtils.jspre.meta
│   ├── WebGL.meta
│   ├── Windows/
│   │   ├── x64/
│   │   │   └── sqlite3.dll.meta
│   │   ├── x64.meta
│   │   ├── x86/
│   │   │   └── sqlite3.dll.meta
│   │   └── x86.meta
│   ├── Windows.meta
│   ├── com.gameanalytics.sdk.Runtime.asmdef
│   ├── com.gameanalytics.sdk.Runtime.asmdef.meta
│   ├── iOS/
│   │   ├── GameAnalytics.h
│   │   ├── GameAnalytics.h.meta
│   │   ├── GameAnalytics.xcprivacy
│   │   ├── GameAnalytics.xcprivacy.meta
│   │   ├── GameAnalyticsATTObjCBridge.h
│   │   ├── GameAnalyticsATTObjCBridge.h.meta
│   │   ├── GameAnalyticsATTObjCBridge.m
│   │   ├── GameAnalyticsATTObjCBridge.m.meta
│   │   ├── GameAnalyticsHyperBidHelper.m
│   │   ├── GameAnalyticsHyperBidHelper.m.meta
│   │   ├── GameAnalyticsTopOnHelper.m
│   │   ├── GameAnalyticsTopOnHelper.m.meta
│   │   ├── GameAnalyticsUnity.m
│   │   ├── GameAnalyticsUnity.m.meta
│   │   ├── libGameAnalytics.a
│   │   └── libGameAnalytics.a.meta
│   ├── iOS.meta
│   ├── tvOS/
│   │   ├── GameAnalyticsTVOS.h
│   │   ├── GameAnalyticsTVOS.h.meta
│   │   ├── GameAnalyticsTVOSUnity.m
│   │   ├── GameAnalyticsTVOSUnity.m.meta
│   │   ├── libGameAnalyticsTVOS.a
│   │   └── libGameAnalyticsTVOS.a.meta
│   └── tvOS.meta
├── Runtime.meta
├── package.json
└── package.json.meta
Download .txt
Showing preview only (354K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3972 symbols across 54 files)

FILE: Editor/GA_AutoRun.cs
  class GA_Autorun (line 6) | public class GA_Autorun : AssetPostprocessor
    method OnPostprocessAllAssets (line 8) | static void OnPostprocessAllAssets ( string[] importedAssets,string[] ...

FILE: Editor/GA_ContinuationManager.cs
  class GA_ContinuationManager (line 12) | public static class GA_ContinuationManager
    class EditorCoroutine (line 14) | private class EditorCoroutine
      method EditorCoroutine (line 16) | public EditorCoroutine(IEnumerator routine, Func<bool> done)
    method StartCoroutine (line 28) | public static void StartCoroutine(IEnumerator routine,Func<bool> done)
    method Update (line 37) | private static void Update()

FILE: Editor/GA_EditorUtilities.cs
  class GA_EditorUtilities (line 8) | public static class GA_EditorUtilities {
    method WWWHeaders (line 48) | public static Dictionary<string, string> WWWHeaders()
    method WWWHeadersWithAuthorization (line 58) | public static Dictionary<string, string> WWWHeadersWithAuthorization(s...
  type EPlatform (line 70) | public enum EPlatform

FILE: Editor/GA_Menu.cs
  class GA_Menu (line 8) | public static class GA_Menu
    method SelectGASettings (line 10) | [MenuItem ("Window/GameAnalytics/Select Settings", false, 0)]
    method SetupAndTour (line 16) | [MenuItem ("Window/GameAnalytics/Setup Guide", false, 100)]
    method AddGASystemTracker (line 30) | [MenuItem ("Window/GameAnalytics/Create GameAnalytics Object", false, ...
    method TogglePlayMaker (line 46) | [MenuItem ("Window/GameAnalytics/PlayMaker/Toggle Scripts", false, 400)]
    method ReplaceInFile (line 98) | public static bool ReplaceInFile (string filePath, string searchText, ...

FILE: Editor/GA_PostprocessBuild.cs
  class GA_PostprocessBuild (line 11) | public class GA_PostprocessBuild : UnityEditor.Build.IPreprocessBuildWit...
    method OnPreprocessBuild (line 31) | public void OnPreprocessBuild(UnityEditor.Build.Reporting.BuildReport ...
    method OnScriptsReloaded (line 37) | [DidReloadScripts]
    method Update3rdPartyIntegrations (line 43) | private static void Update3rdPartyIntegrations()
    method UpdateDefines (line 55) | private static void UpdateDefines(string entry, bool enabled, BuildTar...
    method UpdateMoPub (line 82) | private static void UpdateMoPub()
    method UpdateFyber (line 98) | private static void UpdateFyber()
    method UpdateIronSource (line 114) | private static void UpdateIronSource()
    method UpdateTopOn (line 130) | private static void UpdateTopOn()
    method UpdateMax (line 146) | private static void UpdateMax()
    method UpdateAequus (line 162) | private static void UpdateAequus()
    method UpdateHyperBid (line 178) | private static void UpdateHyperBid()
    method UpdateAdMob (line 194) | private static void UpdateAdMob()
    method TypeExists (line 207) | private static bool TypeExists(params string[] types)
    method OnPostprocessBuild (line 225) | [PostProcessBuild]

FILE: Editor/GA_SettingsInspector.cs
  method OnEnable (line 128) | void OnEnable()
  method OnInspectorGUI (line 228) | public override void OnInspectorGUI()
  method ConvertMessageType (line 1636) | private MessageType ConvertMessageType(GameAnalyticsSDK.Setup.Settings.M...
  method LoginUser (line 1651) | private static void LoginUser(GameAnalyticsSDK.Setup.Settings ga)
  method LoginUserFrontend (line 1677) | private static IEnumerator LoginUserFrontend(UnityWebRequest www, GameAn...
  method GetUserData (line 1752) | private static void GetUserData(GameAnalyticsSDK.Setup.Settings ga)
  method GetUserDataFrontend (line 1765) | private static IEnumerator GetUserDataFrontend(UnityWebRequest www, Game...
  method SelectOrganization (line 1893) | private static void SelectOrganization(int index, GameAnalyticsSDK.Setup...
  method SelectStudio (line 1906) | private static void SelectStudio(int index, GameAnalyticsSDK.Setup.Setti...
  method SelectGame (line 1923) | private static void SelectGame(int index, GameAnalyticsSDK.Setup.Setting...
  method SetLoginStatus (line 1958) | private static void SetLoginStatus(string status, GameAnalyticsSDK.Setup...
  method CheckForUpdates (line 1964) | public static void CheckForUpdates()
  method GetChangeLogsAndShowUpdateWindow (line 1977) | private static void GetChangeLogsAndShowUpdateWindow(string newVersion)
  method CheckForUpdatesCoroutine (line 1987) | private static IEnumerator CheckForUpdatesCoroutine(UnityWebRequest www)
  method GetChangeLogsAndShowUpdateWindowCoroutine (line 2033) | private static IEnumerator GetChangeLogsAndShowUpdateWindowCoroutine(Uni...
  method GetChangeLogsAndShowUpdateWindowCoroutine (line 2035) | private static IEnumerator<WWW> GetChangeLogsAndShowUpdateWindowCoroutin...

FILE: Editor/GA_SignUp.cs
  class GA_SignUp (line 10) | public class GA_SignUp : EditorWindow
    type TourSteps (line 12) | public enum TourSteps
    type StringType (line 41) | private enum StringType
    type StringWithType (line 49) | private struct StringWithType
    method Opened (line 56) | public void Opened()
    method OnDisable (line 68) | void OnDisable()
    method OnGUI (line 76) | void OnGUI()
    method SwitchToGuideStep (line 223) | public void SwitchToGuideStep()
    method GetGuideStepTitle (line 228) | private string GetGuideStepTitle(TourSteps step)
    method GetGuideStepText (line 257) | private StringWithType[] GetGuideStepText(TourSteps step)
    method GetGuideStepNext (line 415) | private string GetGuideStepNext(TourSteps step)
    method PaintAppStoreIcon (line 445) | private void PaintAppStoreIcon(string storeName)
    method GetAppStoreIconTexture (line 515) | public IEnumerator GetAppStoreIconTexture(UnityWebRequest www, string ...

FILE: Editor/GA_UpdateWindow.cs
  class GA_UpdateWindow (line 9) | public class GA_UpdateWindow : EditorWindow
    method OnGUI (line 17) | void OnGUI ()
    method SetNewVersion (line 77) | public static void SetNewVersion (string newVersion)
    method GetNewVersion (line 85) | public static string GetNewVersion ()
    method SetChanges (line 90) | public static void SetChanges (string changes)
    method UpdateStatus (line 98) | public static string UpdateStatus (string currentVersion)

FILE: Editor/GameAnalyticsInspector.cs
  class GameAnalyticsInspector (line 15) | [CustomEditor(typeof(GameAnalytics))]
    method OnInspectorGUI (line 21) | override public void OnInspectorGUI ()
    method ConvertMessageType (line 51) | private MessageType ConvertMessageType(GameAnalyticsSDK.Setup.Settings...

FILE: Editor/Playmaker/PlayMakerPresenceCheck.cs
  class PlayMakerPresenceCheck (line 5) | public class PlayMakerPresenceCheck : AssetPostprocessor{
    method ResetPrefs (line 16) | public static void ResetPrefs()
    method OnPostprocessAllAssets (line 22) | static void OnPostprocessAllAssets ( string[] importedAssets,string[] ...

FILE: Editor/Playmaker/SendProgressionEventActionEditor.cs
  class SendProgressionEventActionEditor (line 11) | [CustomActionEditor(typeof (SendProgressionEvent))]
    method OnGUI (line 15) | public override bool OnGUI()

FILE: Editor/Playmaker/SendResourceEventActionEditor.cs
  class SendResourceEventActionEditor (line 11) | [CustomActionEditor(typeof (SendResourceEvent))]
    method OnGUI (line 15) | public override bool OnGUI()

FILE: Runtime/Playmaker/GAInitialize.cs
  class GAInitialize (line 10) | [ActionCategory("GameAnalytics")]
    method Reset (line 14) | public override void Reset()
    method OnEnter (line 18) | public override void OnEnter()

FILE: Runtime/Playmaker/GetABTestingId.cs
  class GetABTestingId (line 10) | [ActionCategory("GameAnalytics")]
    method Reset (line 21) | public override void Reset()
    method OnEnter (line 25) | public override void OnEnter()

FILE: Runtime/Playmaker/GetABTestingVariantId.cs
  class GetABTestingVariantId (line 10) | [ActionCategory("GameAnalytics")]
    method Reset (line 21) | public override void Reset()
    method OnEnter (line 25) | public override void OnEnter()

FILE: Runtime/Playmaker/GetRemoteConfigsValueAsString.cs
  class GetRemoteConfigsValueAsString (line 10) | [ActionCategory("GameAnalytics")]
    method Reset (line 28) | public override void Reset()
    method OnEnter (line 32) | public override void OnEnter()

FILE: Runtime/Playmaker/IsRemoteConfigsReady.cs
  class IsRemoteConfigsReady (line 10) | [ActionCategory("GameAnalytics")]
    method Reset (line 21) | public override void Reset()
    method OnEnter (line 25) | public override void OnEnter()

FILE: Runtime/Playmaker/SendAdEvent.cs
  class SendAdEvent (line 9) | [ActionCategory("GameAnalytics")]
    method Reset (line 35) | public override void Reset()
    method OnEnter (line 45) | public override void OnEnter()

FILE: Runtime/Playmaker/SendBusinessEvent.cs
  class SendBusinessEvent (line 8) | [ActionCategory("GameAnalytics")]
    method Reset (line 33) | public override void Reset()
    method OnEnter (line 42) | public override void OnEnter()
  class SendBusinessEventIOS (line 51) | [ActionCategory("GameAnalytics")]
    method Reset (line 79) | public override void Reset()
    method OnEnter (line 89) | public override void OnEnter()
  class SendBusinessEventIOSAutoFetchReceipt (line 97) | [ActionCategory("GameAnalytics")]
    method Reset (line 122) | public override void Reset()
    method OnEnter (line 131) | public override void OnEnter()
  class SendBusinessEventGooglePlay (line 141) | [ActionCategory("GameAnalytics")]
    method Reset (line 173) | public override void Reset()
    method OnEnter (line 184) | public override void OnEnter()

FILE: Runtime/Playmaker/SendDesignEvent.cs
  class SendDesignEvent (line 9) | [ActionCategory("GameAnalytics")]
    method Reset (line 21) | public override void Reset()
    method OnEnter (line 27) | public override void OnEnter()

FILE: Runtime/Playmaker/SendErrorEvent.cs
  class SendErrorEvent (line 9) | [ActionCategory("GameAnalytics")]
    method Reset (line 22) | public override void Reset()
    method OnEnter (line 28) | public override void OnEnter()

FILE: Runtime/Playmaker/SendProgressionEvent.cs
  class SendProgressionEvent (line 9) | [ActionCategory("GameAnalytics")]
    method Reset (line 33) | public override void Reset()
    method OnEnter (line 42) | public override void OnEnter()

FILE: Runtime/Playmaker/SendResourceEvent.cs
  class SendResourceEvent (line 9) | [ActionCategory("GameAnalytics")]
    method Reset (line 36) | public override void Reset()
    method OnEnter (line 45) | public override void OnEnter()

FILE: Runtime/Playmaker/SetCustomDimension.cs
  type CustomDimensionNumber (line 10) | public enum CustomDimensionNumber
  class SetCustomDimension (line 17) | [ActionCategory("GameAnalytics")]
    method Reset (line 30) | public override void Reset()
    method OnEnter (line 36) | public override void OnEnter()

FILE: Runtime/SamsungTV/sqlite3.c
  type sqlite3 (line 438) | typedef struct sqlite3 sqlite3;
  type SQLITE_INT64_TYPE (line 457) | typedef SQLITE_INT64_TYPE sqlite_int64;
  type sqlite_uint64 (line 458) | typedef unsigned SQLITE_INT64_TYPE sqlite_uint64;
  type __int64 (line 460) | typedef __int64 sqlite_int64;
  type sqlite_uint64 (line 461) | typedef unsigned __int64 sqlite_uint64;
  type sqlite_int64 (line 463) | typedef long long int sqlite_int64;
  type sqlite_uint64 (line 464) | typedef unsigned long long int sqlite_uint64;
  type sqlite_int64 (line 466) | typedef sqlite_int64 sqlite3_int64;
  type sqlite_uint64 (line 467) | typedef sqlite_uint64 sqlite3_uint64;
  type sqlite3_file (line 839) | typedef struct sqlite3_file sqlite3_file;
  type sqlite3_file (line 840) | struct sqlite3_file {
  type sqlite3_io_methods (line 934) | typedef struct sqlite3_io_methods sqlite3_io_methods;
  type sqlite3_io_methods (line 935) | struct sqlite3_io_methods {
  type sqlite3_mutex (line 1212) | typedef struct sqlite3_mutex sqlite3_mutex;
  type sqlite3_vfs (line 1371) | typedef struct sqlite3_vfs sqlite3_vfs;
  type sqlite3_vfs (line 1373) | struct sqlite3_vfs {
  type sqlite3_mem_methods (line 1666) | typedef struct sqlite3_mem_methods sqlite3_mem_methods;
  type sqlite3_mem_methods (line 1667) | struct sqlite3_mem_methods {
  type sqlite3_stmt (line 3285) | typedef struct sqlite3_stmt sqlite3_stmt;
  type sqlite3_value (line 3601) | typedef struct Mem sqlite3_value;
  type sqlite3_context (line 3615) | typedef struct sqlite3_context sqlite3_context;
  type sqlite3_vtab (line 5615) | typedef struct sqlite3_vtab sqlite3_vtab;
  type sqlite3_index_info (line 5616) | typedef struct sqlite3_index_info sqlite3_index_info;
  type sqlite3_vtab_cursor (line 5617) | typedef struct sqlite3_vtab_cursor sqlite3_vtab_cursor;
  type sqlite3_module (line 5618) | typedef struct sqlite3_module sqlite3_module;
  type sqlite3_module (line 5636) | struct sqlite3_module {
  type sqlite3_index_info (line 5736) | struct sqlite3_index_info {
  type sqlite3_vtab (line 5836) | struct sqlite3_vtab {
  type sqlite3_vtab_cursor (line 5860) | struct sqlite3_vtab_cursor {
  type sqlite3_blob (line 5915) | typedef struct sqlite3_blob sqlite3_blob;
  type sqlite3_mutex_methods (line 6343) | typedef struct sqlite3_mutex_methods sqlite3_mutex_methods;
  type sqlite3_mutex_methods (line 6344) | struct sqlite3_mutex_methods {
  type sqlite3_pcache (line 6847) | typedef struct sqlite3_pcache sqlite3_pcache;
  type sqlite3_pcache_page (line 6859) | typedef struct sqlite3_pcache_page sqlite3_pcache_page;
  type sqlite3_pcache_page (line 6860) | struct sqlite3_pcache_page {
  type sqlite3_pcache_methods2 (line 7024) | typedef struct sqlite3_pcache_methods2 sqlite3_pcache_methods2;
  type sqlite3_pcache_methods2 (line 7025) | struct sqlite3_pcache_methods2 {
  type sqlite3_pcache_methods (line 7047) | typedef struct sqlite3_pcache_methods sqlite3_pcache_methods;
  type sqlite3_pcache_methods (line 7048) | struct sqlite3_pcache_methods {
  type sqlite3_backup (line 7073) | typedef struct sqlite3_backup sqlite3_backup;
  type sqlite3_rtree_geometry (line 7868) | typedef struct sqlite3_rtree_geometry sqlite3_rtree_geometry;
  type sqlite3_rtree_query_info (line 7869) | typedef struct sqlite3_rtree_query_info sqlite3_rtree_query_info;
  type sqlite3_int64 (line 7875) | typedef sqlite3_int64 sqlite3_rtree_dbl;
  type sqlite3_rtree_dbl (line 7877) | typedef double sqlite3_rtree_dbl;
  type sqlite3_rtree_geometry (line 7898) | struct sqlite3_rtree_geometry {
  type sqlite3_rtree_query_info (line 7930) | struct sqlite3_rtree_query_info {
  type Hash (line 8472) | typedef struct Hash Hash;
  type HashElem (line 8473) | typedef struct HashElem HashElem;
  type Hash (line 8496) | struct Hash {
  type HashElem (line 8512) | struct HashElem {
  type sqlite_int64 (line 8877) | typedef sqlite_int64 i64;
  type sqlite_uint64 (line 8878) | typedef sqlite_uint64 u64;
  type UINT32_TYPE (line 8879) | typedef UINT32_TYPE u32;
  type UINT16_TYPE (line 8880) | typedef UINT16_TYPE u16;
  type INT16_TYPE (line 8881) | typedef INT16_TYPE i16;
  type UINT8_TYPE (line 8882) | typedef UINT8_TYPE u8;
  type INT8_TYPE (line 8883) | typedef INT8_TYPE i8;
  type u64 (line 8900) | typedef u64 tRowcnt;
  type u32 (line 8902) | typedef u32 tRowcnt;
  type INT16_TYPE (line 8928) | typedef INT16_TYPE LogEst;
  type BusyHandler (line 9092) | typedef struct BusyHandler BusyHandler;
  type BusyHandler (line 9093) | struct BusyHandler {
  type AggInfo (line 9186) | typedef struct AggInfo AggInfo;
  type AuthContext (line 9187) | typedef struct AuthContext AuthContext;
  type AutoincInfo (line 9188) | typedef struct AutoincInfo AutoincInfo;
  type Bitvec (line 9189) | typedef struct Bitvec Bitvec;
  type CollSeq (line 9190) | typedef struct CollSeq CollSeq;
  type Column (line 9191) | typedef struct Column Column;
  type Db (line 9192) | typedef struct Db Db;
  type Schema (line 9193) | typedef struct Schema Schema;
  type Expr (line 9194) | typedef struct Expr Expr;
  type ExprList (line 9195) | typedef struct ExprList ExprList;
  type ExprSpan (line 9196) | typedef struct ExprSpan ExprSpan;
  type FKey (line 9197) | typedef struct FKey FKey;
  type FuncDestructor (line 9198) | typedef struct FuncDestructor FuncDestructor;
  type FuncDef (line 9199) | typedef struct FuncDef FuncDef;
  type FuncDefHash (line 9200) | typedef struct FuncDefHash FuncDefHash;
  type IdList (line 9201) | typedef struct IdList IdList;
  type Index (line 9202) | typedef struct Index Index;
  type IndexSample (line 9203) | typedef struct IndexSample IndexSample;
  type KeyClass (line 9204) | typedef struct KeyClass KeyClass;
  type KeyInfo (line 9205) | typedef struct KeyInfo KeyInfo;
  type Lookaside (line 9206) | typedef struct Lookaside Lookaside;
  type LookasideSlot (line 9207) | typedef struct LookasideSlot LookasideSlot;
  type Module (line 9208) | typedef struct Module Module;
  type NameContext (line 9209) | typedef struct NameContext NameContext;
  type Parse (line 9210) | typedef struct Parse Parse;
  type PrintfArguments (line 9211) | typedef struct PrintfArguments PrintfArguments;
  type RowSet (line 9212) | typedef struct RowSet RowSet;
  type Savepoint (line 9213) | typedef struct Savepoint Savepoint;
  type Select (line 9214) | typedef struct Select Select;
  type SQLiteThread (line 9215) | typedef struct SQLiteThread SQLiteThread;
  type SelectDest (line 9216) | typedef struct SelectDest SelectDest;
  type SrcList (line 9217) | typedef struct SrcList SrcList;
  type StrAccum (line 9218) | typedef struct StrAccum StrAccum;
  type Table (line 9219) | typedef struct Table Table;
  type TableLock (line 9220) | typedef struct TableLock TableLock;
  type Token (line 9221) | typedef struct Token Token;
  type TreeView (line 9222) | typedef struct TreeView TreeView;
  type Trigger (line 9223) | typedef struct Trigger Trigger;
  type TriggerPrg (line 9224) | typedef struct TriggerPrg TriggerPrg;
  type TriggerStep (line 9225) | typedef struct TriggerStep TriggerStep;
  type UnpackedRecord (line 9226) | typedef struct UnpackedRecord UnpackedRecord;
  type VTable (line 9227) | typedef struct VTable VTable;
  type VtabCtx (line 9228) | typedef struct VtabCtx VtabCtx;
  type Walker (line 9229) | typedef struct Walker Walker;
  type WhereInfo (line 9230) | typedef struct WhereInfo WhereInfo;
  type With (line 9231) | typedef struct With With;
  type Btree (line 9278) | typedef struct Btree Btree;
  type BtCursor (line 9279) | typedef struct BtCursor BtCursor;
  type BtShared (line 9280) | typedef struct BtShared BtShared;
  type KeyInfo (line 9411) | struct KeyInfo
  type Vdbe (line 9545) | typedef struct Vdbe Vdbe;
  type Mem (line 9551) | typedef struct Mem Mem;
  type SubProgram (line 9552) | typedef struct SubProgram SubProgram;
  type VdbeOp (line 9559) | struct VdbeOp {
  type VdbeOp (line 9593) | typedef struct VdbeOp VdbeOp;
  type SubProgram (line 9599) | struct SubProgram {
  type VdbeOpList (line 9613) | struct VdbeOpList {
  type VdbeOpList (line 9619) | typedef struct VdbeOpList VdbeOpList;
  type u32 (line 10044) | typedef u32 Pgno;
  type Pager (line 10049) | typedef struct Pager Pager;
  type DbPage (line 10054) | typedef struct PgHdr DbPage;
  type PgHdr (line 10247) | typedef struct PgHdr PgHdr;
  type PCache (line 10248) | typedef struct PCache PCache;
  type PgHdr (line 10254) | struct PgHdr {
  type Db (line 10760) | struct Db {
  type Schema (line 10784) | struct Schema {
  type Lookaside (line 10847) | struct Lookaside {
  type LookasideSlot (line 10858) | struct LookasideSlot {
  type FuncDefHash (line 10868) | struct FuncDefHash {
  type sqlite3_userauth (line 10877) | typedef struct sqlite3_userauth sqlite3_userauth;
  type sqlite3_userauth (line 10878) | struct sqlite3_userauth {
  type sqlite3 (line 10914) | struct sqlite3 {
  type FuncDef (line 11124) | struct FuncDef {
  type FuncDestructor (line 11151) | struct FuncDestructor {
  type Savepoint (line 11231) | struct Savepoint {
  type Module (line 11252) | struct Module {
  type Column (line 11263) | struct Column {
  type CollSeq (line 11289) | struct CollSeq {
  type VTable (line 11387) | struct VTable {
  type Table (line 11427) | struct Table {
  type FKey (line 11516) | struct FKey {
  type KeyInfo (line 11582) | struct KeyInfo {
  type UnpackedRecord (line 11609) | struct UnpackedRecord {
  type Index (line 11646) | struct Index {
  type IndexSample (line 11696) | struct IndexSample {
  type Token (line 11712) | struct Token {
  type AggInfo (line 11730) | struct AggInfo {
  type i16 (line 11772) | typedef i16 ynVar;
  type ynVar (line 11774) | typedef int ynVar;
  type Expr (line 11840) | struct Expr {
  type ExprList (line 11965) | struct ExprList {
  type ExprSpan (line 11990) | struct ExprSpan {
  type IdList (line 12011) | struct IdList {
  type u64 (line 12026) | typedef u64 Bitmask;
  type SrcList (line 12058) | struct SrcList {
  type NameContext (line 12147) | struct NameContext {
  type Select (line 12192) | struct Select {
  type SelectDest (line 12321) | struct SelectDest {
  type AutoincInfo (line 12339) | struct AutoincInfo {
  type TriggerPrg (line 12371) | struct TriggerPrg {
  type yDbMask (line 12390) | typedef unsigned int yDbMask;
  type Parse (line 12414) | struct Parse {
  type AuthContext (line 12533) | struct AuthContext {
  type Trigger (line 12569) | struct Trigger {
  type TriggerStep (line 12631) | struct TriggerStep {
  type DbFixer (line 12649) | typedef struct DbFixer DbFixer;
  type DbFixer (line 12650) | struct DbFixer {
  type StrAccum (line 12663) | struct StrAccum {
  type InitData (line 12680) | typedef struct {
  type Sqlite3Config (line 12692) | struct Sqlite3Config {
  type Walker (line 12768) | struct Walker {
  type With (line 12803) | struct With {
  type TreeView (line 12819) | struct TreeView {
  type PrintfArguments (line 12974) | struct PrintfArguments {
  type SrcList_item (line 13105) | struct SrcList_item
  type SrcList_item (line 13157) | struct SrcList_item
  type Sqlite3Config (line 13375) | struct Sqlite3Config
  type Sqlite3Config (line 13870) | struct Sqlite3Config
  function SQLITE_STDCALL (line 14359) | SQLITE_STDCALL sqlite3_compileoption_used(const char *zOptName){
  function SQLITE_API (line 14387) | SQLITE_API const char *SQLITE_STDCALL sqlite3_compileoption_get(int N){
  type Op (line 14448) | typedef struct VdbeOp Op;
  type Bool (line 14453) | typedef unsigned Bool;
  type VdbeSorter (line 14456) | typedef struct VdbeSorter VdbeSorter;
  type Explain (line 14459) | typedef struct Explain Explain;
  type AuxData (line 14462) | typedef struct AuxData AuxData;
  type VdbeCursor (line 14477) | struct VdbeCursor {
  type VdbeCursor (line 14521) | typedef struct VdbeCursor VdbeCursor;
  type VdbeFrame (line 14544) | typedef struct VdbeFrame VdbeFrame;
  type VdbeFrame (line 14545) | struct VdbeFrame {
  type Mem (line 14578) | struct Mem {
  type AuxData (line 14665) | struct AuxData {
  type sqlite3_context (line 14686) | struct sqlite3_context {
  type Explain (line 14701) | struct Explain {
  type bft (line 14712) | typedef unsigned bft;
  type ScanStatus (line 14714) | typedef struct ScanStatus ScanStatus;
  type ScanStatus (line 14715) | struct ScanStatus {
  type Vdbe (line 14731) | struct Vdbe {
  type sqlite3StatType (line 14917) | typedef struct sqlite3StatType sqlite3StatType;
  function SQLITE_WSD (line 14918) | static SQLITE_WSD struct sqlite3StatType {
  function SQLITE_PRIVATE (line 14964) | SQLITE_PRIVATE sqlite3_int64 sqlite3StatusValue(int op){
  function SQLITE_PRIVATE (line 14984) | SQLITE_PRIVATE void sqlite3StatusUp(int op, int N){
  function SQLITE_PRIVATE (line 14995) | SQLITE_PRIVATE void sqlite3StatusDown(int op, int N){
  function SQLITE_PRIVATE (line 15009) | SQLITE_PRIVATE void sqlite3StatusSet(int op, int X){
  function SQLITE_STDCALL (line 15024) | SQLITE_STDCALL sqlite3_status64(
  function SQLITE_STDCALL (line 15049) | SQLITE_STDCALL sqlite3_status(int op, int *pCurrent, int *pHighwater, in...
  function SQLITE_STDCALL (line 15066) | SQLITE_STDCALL sqlite3_db_status(
  type DateTime (line 15294) | typedef struct DateTime DateTime;
  type DateTime (line 15295) | struct DateTime {
  function getDigits (line 15321) | static int getDigits(const char *zDate, ...){
  function parseTimezone (line 15373) | static int parseTimezone(const char *zDate, DateTime *p){
  function parseHhMmSs (line 15408) | static int parseHhMmSs(const char *zDate, DateTime *p){
  function computeJD (line 15450) | static void computeJD(DateTime *p){
  function parseYyyyMmDd (line 15496) | static int parseYyyyMmDd(const char *zDate, DateTime *p){
  function setDateTimeToCurrent (line 15533) | static int setDateTimeToCurrent(sqlite3_context *context, DateTime *p){
  function parseDateOrTime (line 15559) | static int parseDateOrTime(
  function computeYMD (line 15582) | static void computeYMD(DateTime *p){
  function computeHMS (line 15608) | static void computeHMS(DateTime *p){
  function computeYMD_HMS (line 15626) | static void computeYMD_HMS(DateTime *p){
  function clearYMD_HMS_TZ (line 15634) | static void clearYMD_HMS_TZ(DateTime *p){
  function osLocaltime (line 15672) | static int osLocaltime(time_t *t, struct tm *pTm){
  function sqlite3_int64 (line 15711) | static sqlite3_int64 localtimeOffset(
  function parseModifier (line 15790) | static int parseModifier(sqlite3_context *pCtx, const char *zMod, DateTi...
  function isDate (line 15995) | static int isDate(
  function juliandayFunc (line 16036) | static void juliandayFunc(
  function datetimeFunc (line 16053) | static void datetimeFunc(
  function timeFunc (line 16073) | static void timeFunc(
  function dateFunc (line 16092) | static void dateFunc(
  function strftimeFunc (line 16125) | static void strftimeFunc(
  function ctimeFunc (line 16263) | static void ctimeFunc(
  function cdateFunc (line 16277) | static void cdateFunc(
  function ctimestampFunc (line 16291) | static void ctimestampFunc(
  function currentTimeFunc (line 16313) | static void currentTimeFunc(
  function SQLITE_PRIVATE (line 16352) | SQLITE_PRIVATE void sqlite3RegisterDateTimeFunctions(void){
  function SQLITE_PRIVATE (line 16440) | SQLITE_PRIVATE int sqlite3OsClose(sqlite3_file *pId){
  function SQLITE_PRIVATE (line 16448) | SQLITE_PRIVATE int sqlite3OsRead(sqlite3_file *id, void *pBuf, int amt, ...
  function SQLITE_PRIVATE (line 16452) | SQLITE_PRIVATE int sqlite3OsWrite(sqlite3_file *id, const void *pBuf, in...
  function SQLITE_PRIVATE (line 16456) | SQLITE_PRIVATE int sqlite3OsTruncate(sqlite3_file *id, i64 size){
  function SQLITE_PRIVATE (line 16459) | SQLITE_PRIVATE int sqlite3OsSync(sqlite3_file *id, int flags){
  function SQLITE_PRIVATE (line 16463) | SQLITE_PRIVATE int sqlite3OsFileSize(sqlite3_file *id, i64 *pSize){
  function SQLITE_PRIVATE (line 16467) | SQLITE_PRIVATE int sqlite3OsLock(sqlite3_file *id, int lockType){
  function SQLITE_PRIVATE (line 16471) | SQLITE_PRIVATE int sqlite3OsUnlock(sqlite3_file *id, int lockType){
  function SQLITE_PRIVATE (line 16474) | SQLITE_PRIVATE int sqlite3OsCheckReservedLock(sqlite3_file *id, int *pRe...
  function SQLITE_PRIVATE (line 16487) | SQLITE_PRIVATE int sqlite3OsFileControl(sqlite3_file *id, int op, void *...
  function SQLITE_PRIVATE (line 16505) | SQLITE_PRIVATE void sqlite3OsFileControlHint(sqlite3_file *id, int op, v...
  function SQLITE_PRIVATE (line 16509) | SQLITE_PRIVATE int sqlite3OsSectorSize(sqlite3_file *id){
  function SQLITE_PRIVATE (line 16513) | SQLITE_PRIVATE int sqlite3OsDeviceCharacteristics(sqlite3_file *id){
  function SQLITE_PRIVATE (line 16516) | SQLITE_PRIVATE int sqlite3OsShmLock(sqlite3_file *id, int offset, int n,...
  function SQLITE_PRIVATE (line 16519) | SQLITE_PRIVATE void sqlite3OsShmBarrier(sqlite3_file *id){
  function SQLITE_PRIVATE (line 16522) | SQLITE_PRIVATE int sqlite3OsShmUnmap(sqlite3_file *id, int deleteFlag){
  function SQLITE_PRIVATE (line 16525) | SQLITE_PRIVATE int sqlite3OsShmMap(
  function SQLITE_PRIVATE (line 16538) | SQLITE_PRIVATE int sqlite3OsFetch(sqlite3_file *id, i64 iOff, int iAmt, ...
  function SQLITE_PRIVATE (line 16542) | SQLITE_PRIVATE int sqlite3OsUnfetch(sqlite3_file *id, i64 iOff, void *p){
  function SQLITE_PRIVATE (line 16547) | SQLITE_PRIVATE int sqlite3OsFetch(sqlite3_file *id, i64 iOff, int iAmt, ...
  function SQLITE_PRIVATE (line 16551) | SQLITE_PRIVATE int sqlite3OsUnfetch(sqlite3_file *id, i64 iOff, void *p){
  function SQLITE_PRIVATE (line 16560) | SQLITE_PRIVATE int sqlite3OsOpen(
  function SQLITE_PRIVATE (line 16577) | SQLITE_PRIVATE int sqlite3OsDelete(sqlite3_vfs *pVfs, const char *zPath,...
  function SQLITE_PRIVATE (line 16582) | SQLITE_PRIVATE int sqlite3OsAccess(
  function SQLITE_PRIVATE (line 16591) | SQLITE_PRIVATE int sqlite3OsFullPathname(
  function SQLITE_PRIVATE (line 16602) | SQLITE_PRIVATE void *sqlite3OsDlOpen(sqlite3_vfs *pVfs, const char *zPath){
  function SQLITE_PRIVATE (line 16605) | SQLITE_PRIVATE void sqlite3OsDlError(sqlite3_vfs *pVfs, int nByte, char ...
  function SQLITE_PRIVATE (line 16608) | SQLITE_PRIVATE void (*sqlite3OsDlSym(sqlite3_vfs *pVfs, void *pHdle, con...
  function SQLITE_PRIVATE (line 16611) | SQLITE_PRIVATE void sqlite3OsDlClose(sqlite3_vfs *pVfs, void *pHandle){
  function SQLITE_PRIVATE (line 16615) | SQLITE_PRIVATE int sqlite3OsRandomness(sqlite3_vfs *pVfs, int nByte, cha...
  function SQLITE_PRIVATE (line 16618) | SQLITE_PRIVATE int sqlite3OsSleep(sqlite3_vfs *pVfs, int nMicro){
  function SQLITE_PRIVATE (line 16621) | SQLITE_PRIVATE int sqlite3OsCurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_...
  function SQLITE_PRIVATE (line 16639) | SQLITE_PRIVATE int sqlite3OsOpenMalloc(
  function SQLITE_PRIVATE (line 16659) | SQLITE_PRIVATE int sqlite3OsCloseFree(sqlite3_file *pFile){
  function SQLITE_PRIVATE (line 16673) | SQLITE_PRIVATE int sqlite3OsInit(void){
  function vfsUnlink (line 16714) | static void vfsUnlink(sqlite3_vfs *pVfs){
  function SQLITE_STDCALL (line 16736) | SQLITE_STDCALL sqlite3_vfs_register(sqlite3_vfs *pVfs, int makeDflt){
  function SQLITE_STDCALL (line 16764) | SQLITE_STDCALL sqlite3_vfs_unregister(sqlite3_vfs *pVfs){
  type BenignMallocHooks (line 16808) | typedef struct BenignMallocHooks BenignMallocHooks;
  function SQLITE_WSD (line 16809) | static SQLITE_WSD struct BenignMallocHooks {
  function SQLITE_PRIVATE (line 16834) | SQLITE_PRIVATE void sqlite3BenignMallocHooks(
  function SQLITE_PRIVATE (line 16848) | SQLITE_PRIVATE void sqlite3BeginBenignMalloc(void){
  function SQLITE_PRIVATE (line 16854) | SQLITE_PRIVATE void sqlite3EndBenignMalloc(void){
  function sqlite3MemFree (line 16895) | static void sqlite3MemFree(void *pPrior){ return; }
  function sqlite3MemSize (line 16897) | static int sqlite3MemSize(void *pPrior){ return 0; }
  function sqlite3MemRoundup (line 16898) | static int sqlite3MemRoundup(int n){ return n; }
  function sqlite3MemInit (line 16899) | static int sqlite3MemInit(void *NotUsed){ return SQLITE_OK; }
  function sqlite3MemShutdown (line 16900) | static void sqlite3MemShutdown(void *NotUsed){ return; }
  function SQLITE_PRIVATE (line 16908) | SQLITE_PRIVATE void sqlite3MemSetDefault(void){
  function sqlite3MemFree (line 17082) | static void sqlite3MemFree(void *pPrior){
  function sqlite3MemSize (line 17097) | static int sqlite3MemSize(void *pPrior){
  function sqlite3MemRoundup (line 17151) | static int sqlite3MemRoundup(int n){
  function sqlite3MemInit (line 17158) | static int sqlite3MemInit(void *NotUsed){
  function sqlite3MemShutdown (line 17194) | static void sqlite3MemShutdown(void *NotUsed){
  function SQLITE_PRIVATE (line 17205) | SQLITE_PRIVATE void sqlite3MemSetDefault(void){
  type MemBlockHdr (line 17276) | struct MemBlockHdr {
  type MemBlockHdr (line 17313) | struct MemBlockHdr
  type MemBlockHdr (line 17314) | struct MemBlockHdr
  function adjustStats (line 17350) | static void adjustStats(int iSize, int increment){
  type MemBlockHdr (line 17373) | struct MemBlockHdr
  type MemBlockHdr (line 17374) | struct MemBlockHdr
  type MemBlockHdr (line 17379) | struct MemBlockHdr
  function sqlite3MemSize (line 17397) | static int sqlite3MemSize(void *p){
  function sqlite3MemInit (line 17409) | static int sqlite3MemInit(void *NotUsed){
  function sqlite3MemShutdown (line 17423) | static void sqlite3MemShutdown(void *NotUsed){
  function sqlite3MemRoundup (line 17431) | static int sqlite3MemRoundup(int n){
  function randomFill (line 17440) | static void randomFill(char *pBuf, int nByte){
  type MemBlockHdr (line 17464) | struct MemBlockHdr
  type MemBlockHdr (line 17480) | struct MemBlockHdr
  function sqlite3MemFree (line 17522) | static void sqlite3MemFree(void *pPrior){
  type MemBlockHdr (line 17565) | struct MemBlockHdr
  function SQLITE_PRIVATE (line 17585) | SQLITE_PRIVATE void sqlite3MemSetDefault(void){
  function SQLITE_PRIVATE (line 17602) | SQLITE_PRIVATE void sqlite3MemdebugSetType(void *p, u8 eType){
  function SQLITE_PRIVATE (line 17620) | SQLITE_PRIVATE int sqlite3MemdebugHasType(void *p, u8 eType){
  function SQLITE_PRIVATE (line 17642) | SQLITE_PRIVATE int sqlite3MemdebugNoType(void *p, u8 eType){
  function SQLITE_PRIVATE (line 17660) | SQLITE_PRIVATE void sqlite3MemdebugBacktrace(int depth){
  function SQLITE_PRIVATE (line 17667) | SQLITE_PRIVATE void sqlite3MemdebugBacktraceCallback(void (*xBacktrace)(...
  function SQLITE_PRIVATE (line 17674) | SQLITE_PRIVATE void sqlite3MemdebugSettitle(const char *zTitle){
  function SQLITE_PRIVATE (line 17684) | SQLITE_PRIVATE void sqlite3MemdebugSync(){
  function SQLITE_PRIVATE (line 17697) | SQLITE_PRIVATE void sqlite3MemdebugDump(const char *zFilename){
  function SQLITE_PRIVATE (line 17739) | SQLITE_PRIVATE int sqlite3MemdebugMallocCount(){
  type Mem3Block (line 17831) | typedef struct Mem3Block Mem3Block;
  type Mem3Block (line 17832) | struct Mem3Block {
  function SQLITE_WSD (line 17851) | static SQLITE_WSD struct Mem3Global {
  function memsys3UnlinkFromList (line 17898) | static void memsys3UnlinkFromList(u32 i, u32 *pRoot){
  function memsys3Unlink (line 17918) | static void memsys3Unlink(u32 i){
  function memsys3LinkIntoList (line 17938) | static void memsys3LinkIntoList(u32 i, u32 *pRoot){
  function memsys3Link (line 17952) | static void memsys3Link(u32 i){
  function memsys3Enter (line 17973) | static void memsys3Enter(void){
  function memsys3Leave (line 17979) | static void memsys3Leave(void){
  function memsys3OutOfMemory (line 17986) | static void memsys3OutOfMemory(int nByte){
  function memsys3Merge (line 18066) | static void memsys3Merge(u32 *pRoot){
  function memsys3FreeUnsafe (line 18187) | static void memsys3FreeUnsafe(void *pOld){
  function memsys3Size (line 18228) | static int memsys3Size(void *p){
  function memsys3Roundup (line 18239) | static int memsys3Roundup(int n){
  function memsys3Free (line 18262) | static void memsys3Free(void *pPrior){
  function memsys3Init (line 18303) | static int memsys3Init(void *NotUsed){
  function memsys3Shutdown (line 18328) | static void memsys3Shutdown(void *NotUsed){
  function SQLITE_PRIVATE (line 18340) | SQLITE_PRIVATE void sqlite3Memsys3Dump(const char *zFilename){
  function SQLITE_PRIVATE (line 18424) | SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetMemsys3(void){
  type Mem5Link (line 18507) | typedef struct Mem5Link Mem5Link;
  type Mem5Link (line 18508) | struct Mem5Link {
  function SQLITE_WSD (line 18532) | static SQLITE_WSD struct Mem5Global {
  function memsys5Unlink (line 18587) | static void memsys5Unlink(int i, int iLogsize){
  function memsys5Link (line 18609) | static void memsys5Link(int i, int iLogsize){
  function memsys5Enter (line 18630) | static void memsys5Enter(void){
  function memsys5Leave (line 18633) | static void memsys5Leave(void){
  function memsys5Size (line 18642) | static int memsys5Size(void *p){
  function memsys5FreeUnsafe (line 18731) | static void memsys5FreeUnsafe(void *pOld){
  function memsys5Free (line 18810) | static void memsys5Free(void *pPrior){
  function memsys5Roundup (line 18861) | static int memsys5Roundup(int n){
  function memsys5Log (line 18878) | static int memsys5Log(int iValue){
  function memsys5Init (line 18890) | static int memsys5Init(void *NotUsed){
  function memsys5Shutdown (line 18948) | static void memsys5Shutdown(void *NotUsed){
  function SQLITE_PRIVATE (line 18959) | SQLITE_PRIVATE void sqlite3Memsys5Dump(const char *zFilename){
  function SQLITE_PRIVATE (line 19002) | SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetMemsys5(void){
  function SQLITE_PRIVATE (line 19050) | SQLITE_PRIVATE int sqlite3MutexInit(void){
  function SQLITE_PRIVATE (line 19084) | SQLITE_PRIVATE int sqlite3MutexEnd(void){
  function SQLITE_PRIVATE (line 19108) | SQLITE_PRIVATE sqlite3_mutex *sqlite3MutexAlloc(int id){
  function SQLITE_STDCALL (line 19119) | SQLITE_STDCALL sqlite3_mutex_free(sqlite3_mutex *p){
  function SQLITE_STDCALL (line 19129) | SQLITE_STDCALL sqlite3_mutex_enter(sqlite3_mutex *p){
  function SQLITE_STDCALL (line 19139) | SQLITE_STDCALL sqlite3_mutex_try(sqlite3_mutex *p){
  function SQLITE_STDCALL (line 19153) | SQLITE_STDCALL sqlite3_mutex_leave(sqlite3_mutex *p){
  function SQLITE_STDCALL (line 19164) | SQLITE_STDCALL sqlite3_mutex_held(sqlite3_mutex *p){
  function SQLITE_STDCALL (line 19167) | SQLITE_STDCALL sqlite3_mutex_notheld(sqlite3_mutex *p){
  function noopMutexInit (line 19212) | static int noopMutexInit(void){ return SQLITE_OK; }
  function noopMutexEnd (line 19213) | static int noopMutexEnd(void){ return SQLITE_OK; }
  function sqlite3_mutex (line 19214) | static sqlite3_mutex *noopMutexAlloc(int id){
  function noopMutexFree (line 19218) | static void noopMutexFree(sqlite3_mutex *p){ UNUSED_PARAMETER(p); return; }
  function noopMutexEnter (line 19219) | static void noopMutexEnter(sqlite3_mutex *p){ UNUSED_PARAMETER(p); retur...
  function noopMutexTry (line 19220) | static int noopMutexTry(sqlite3_mutex *p){
  function noopMutexLeave (line 19224) | static void noopMutexLeave(sqlite3_mutex *p){ UNUSED_PARAMETER(p); retur...
  function SQLITE_PRIVATE (line 19226) | SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3NoopMutex(void){
  type sqlite3_debug_mutex (line 19254) | typedef struct sqlite3_debug_mutex {
  function debugMutexHeld (line 19263) | static int debugMutexHeld(sqlite3_mutex *pX){
  function debugMutexNotheld (line 19267) | static int debugMutexNotheld(sqlite3_mutex *pX){
  function debugMutexInit (line 19275) | static int debugMutexInit(void){ return SQLITE_OK; }
  function debugMutexEnd (line 19276) | static int debugMutexEnd(void){ return SQLITE_OK; }
  function sqlite3_mutex (line 19283) | static sqlite3_mutex *debugMutexAlloc(int id){
  function debugMutexFree (line 19314) | static void debugMutexFree(sqlite3_mutex *pX){
  function debugMutexEnter (line 19337) | static void debugMutexEnter(sqlite3_mutex *pX){
  function debugMutexTry (line 19342) | static int debugMutexTry(sqlite3_mutex *pX){
  function debugMutexLeave (line 19355) | static void debugMutexLeave(sqlite3_mutex *pX){
  function SQLITE_PRIVATE (line 19362) | SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3NoopMutex(void){
  function SQLITE_PRIVATE (line 19385) | SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void){
  type sqlite3_mutex (line 19432) | struct sqlite3_mutex {
  function pthreadMutexHeld (line 19466) | static int pthreadMutexHeld(sqlite3_mutex *p){
  function pthreadMutexNotheld (line 19469) | static int pthreadMutexNotheld(sqlite3_mutex *p){
  function pthreadMutexInit (line 19477) | static int pthreadMutexInit(void){ return SQLITE_OK; }
  function pthreadMutexEnd (line 19478) | static int pthreadMutexEnd(void){ return SQLITE_OK; }
  function sqlite3_mutex (line 19525) | static sqlite3_mutex *pthreadMutexAlloc(int iType){
  function pthreadMutexFree (line 19587) | static void pthreadMutexFree(sqlite3_mutex *p){
  function pthreadMutexEnter (line 19614) | static void pthreadMutexEnter(sqlite3_mutex *p){
  function pthreadMutexTry (line 19656) | static int pthreadMutexTry(sqlite3_mutex *p){
  function pthreadMutexLeave (line 19713) | static void pthreadMutexLeave(sqlite3_mutex *p){
  function SQLITE_PRIVATE (line 19736) | SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void){
  function sqlite_uint64 (line 19863) | __inline__ sqlite_uint64 sqlite3Hwtime(void){
  function sqlite_uint64 (line 19871) | __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){
  function sqlite_uint64 (line 19882) | __inline__ sqlite_uint64 sqlite3Hwtime(void){
  function sqlite_uint64 (line 19890) | __inline__ sqlite_uint64 sqlite3Hwtime(void){
  function sqlite3Hwtime (line 19914) | sqlite3Hwtime(void){ return ((sqlite_uint64)0); }
  function local_ioerr (line 19952) | static void local_ioerr(){
  type sqlite3_mutex (line 20096) | struct sqlite3_mutex {
  function winMutexHeld (line 20125) | static int winMutexHeld(sqlite3_mutex *p){
  function winMutexNotheld2 (line 20129) | static int winMutexNotheld2(sqlite3_mutex *p, DWORD tid){
  function winMutexNotheld (line 20133) | static int winMutexNotheld(sqlite3_mutex *p){
  function winMutexInit (line 20166) | static int winMutexInit(void){
  function winMutexEnd (line 20188) | static int winMutexEnd(void){
  function sqlite3_mutex (line 20248) | static sqlite3_mutex *winMutexAlloc(int iType){
  function winMutexFree (line 20296) | static void winMutexFree(sqlite3_mutex *p){
  function winMutexEnter (line 20320) | static void winMutexEnter(sqlite3_mutex *p){
  function winMutexTry (line 20343) | static int winMutexTry(sqlite3_mutex *p){
  function winMutexLeave (line 20393) | static void winMutexLeave(sqlite3_mutex *p){
  function SQLITE_PRIVATE (line 20415) | SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void){
  function SQLITE_STDCALL (line 20460) | SQLITE_STDCALL sqlite3_release_memory(int n){
  type ScratchFreeslot (line 20476) | typedef struct ScratchFreeslot {
  function SQLITE_WSD (line 20483) | static SQLITE_WSD struct Mem0Global {
  function SQLITE_PRIVATE (line 20518) | SQLITE_PRIVATE sqlite3_mutex *sqlite3MallocMutex(void){
  function softHeapLimitEnforcer (line 20527) | static void softHeapLimitEnforcer(
  function sqlite3MemoryAlarm (line 20539) | static int sqlite3MemoryAlarm(
  function SQLITE_STDCALL (line 20560) | SQLITE_STDCALL sqlite3_memory_alarm(
  function SQLITE_STDCALL (line 20573) | SQLITE_STDCALL sqlite3_soft_heap_limit64(sqlite3_int64 n){
  function SQLITE_STDCALL (line 20593) | SQLITE_STDCALL sqlite3_soft_heap_limit(int n){
  function SQLITE_PRIVATE (line 20601) | SQLITE_PRIVATE int sqlite3MallocInit(void){
  function SQLITE_PRIVATE (line 20648) | SQLITE_PRIVATE int sqlite3HeapNearlyFull(void){
  function SQLITE_PRIVATE (line 20655) | SQLITE_PRIVATE void sqlite3MallocEnd(void){
  function SQLITE_STDCALL (line 20665) | SQLITE_STDCALL sqlite3_memory_used(void){
  function SQLITE_STDCALL (line 20678) | SQLITE_STDCALL sqlite3_memory_highwater(int resetFlag){
  function sqlite3MallocAlarm (line 20689) | static void sqlite3MallocAlarm(int nByte){
  function mallocWithAlarm (line 20709) | static int mallocWithAlarm(int n, void **pp){
  function SQLITE_PRIVATE (line 20744) | SQLITE_PRIVATE void *sqlite3Malloc(u64 n){
  function SQLITE_API (line 20769) | SQLITE_API void *SQLITE_STDCALL sqlite3_malloc(int n){
  function SQLITE_API (line 20775) | SQLITE_API void *SQLITE_STDCALL sqlite3_malloc64(sqlite3_uint64 n){
  function SQLITE_PRIVATE (line 20801) | SQLITE_PRIVATE void *sqlite3ScratchMalloc(int n){
  function SQLITE_PRIVATE (line 20838) | SQLITE_PRIVATE void sqlite3ScratchFree(void *p){
  function isLookaside (line 20885) | static int isLookaside(sqlite3 *db, void *p){
  function SQLITE_PRIVATE (line 20896) | SQLITE_PRIVATE int sqlite3MallocSize(void *p){
  function SQLITE_PRIVATE (line 20900) | SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3 *db, void *p){
  function SQLITE_STDCALL (line 20916) | SQLITE_STDCALL sqlite3_msize(void *p){
  function SQLITE_STDCALL (line 20925) | SQLITE_STDCALL sqlite3_free(void *p){
  function SQLITE_NOINLINE (line 20944) | static SQLITE_NOINLINE void measureAllocationSize(sqlite3 *db, void *p){
  function SQLITE_PRIVATE (line 20952) | SQLITE_PRIVATE void sqlite3DbFree(sqlite3 *db, void *p){
  function SQLITE_PRIVATE (line 20982) | SQLITE_PRIVATE void *sqlite3Realloc(void *pOld, u64 nBytes){
  function SQLITE_API (line 21034) | SQLITE_API void *SQLITE_STDCALL sqlite3_realloc(void *pOld, int n){
  function SQLITE_API (line 21041) | SQLITE_API void *SQLITE_STDCALL sqlite3_realloc64(void *pOld, sqlite3_ui...
  function SQLITE_PRIVATE (line 21052) | SQLITE_PRIVATE void *sqlite3MallocZero(u64 n){
  function SQLITE_PRIVATE (line 21064) | SQLITE_PRIVATE void *sqlite3DbMallocZero(sqlite3 *db, u64 n){
  function SQLITE_PRIVATE (line 21090) | SQLITE_PRIVATE void *sqlite3DbMallocRaw(sqlite3 *db, u64 n){
  function SQLITE_PRIVATE (line 21134) | SQLITE_PRIVATE void *sqlite3DbRealloc(sqlite3 *db, void *p, u64 n){
  function SQLITE_PRIVATE (line 21170) | SQLITE_PRIVATE void *sqlite3DbReallocOrFree(sqlite3 *db, void *p, u64 n){
  function SQLITE_PRIVATE (line 21186) | SQLITE_PRIVATE char *sqlite3DbStrDup(sqlite3 *db, const char *z){
  function SQLITE_PRIVATE (line 21200) | SQLITE_PRIVATE char *sqlite3DbStrNDup(sqlite3 *db, const char *z, u64 n){
  function SQLITE_PRIVATE (line 21219) | SQLITE_PRIVATE void sqlite3SetString(char **pz, sqlite3 *db, const char ...
  function SQLITE_NOINLINE (line 21233) | static SQLITE_NOINLINE int apiOomError(sqlite3 *db){
  function SQLITE_PRIVATE (line 21252) | SQLITE_PRIVATE int sqlite3ApiExit(sqlite3* db, int rc){
  type etByte (line 21311) | typedef unsigned char etByte;
  type et_info (line 21317) | typedef struct et_info {   /* Information about each format field */
  function et_getdigit (line 21389) | static char et_getdigit(LONGDOUBLE_TYPE *val, int *cnt){
  function setStrAccumError (line 21405) | static void setStrAccumError(StrAccum *p, u8 eError){
  function sqlite3_int64 (line 21413) | static sqlite3_int64 getIntArg(PrintfArguments *p){
  function getDoubleArg (line 21417) | static double getDoubleArg(PrintfArguments *p){
  function SQLITE_PRIVATE (line 21439) | SQLITE_PRIVATE void sqlite3VXPrintf(
  function sqlite3StrAccumEnlarge (line 22015) | static int sqlite3StrAccumEnlarge(StrAccum *p, int N){
  function SQLITE_PRIVATE (line 22065) | SQLITE_PRIVATE void sqlite3AppendChar(StrAccum *p, int N, char c){
  function enlargeAndAppend (line 22081) | static void SQLITE_NOINLINE enlargeAndAppend(StrAccum *p, const char *z,...
  function SQLITE_PRIVATE (line 22093) | SQLITE_PRIVATE void sqlite3StrAccumAppend(StrAccum *p, const char *z, in...
  function SQLITE_PRIVATE (line 22110) | SQLITE_PRIVATE void sqlite3StrAccumAppendAll(StrAccum *p, const char *z){
  function SQLITE_PRIVATE (line 22120) | SQLITE_PRIVATE char *sqlite3StrAccumFinish(StrAccum *p){
  function SQLITE_PRIVATE (line 22142) | SQLITE_PRIVATE void sqlite3StrAccumReset(StrAccum *p){
  function SQLITE_PRIVATE (line 22156) | SQLITE_PRIVATE void sqlite3StrAccumInit(StrAccum *p, char *zBase, int n,...
  function SQLITE_PRIVATE (line 22170) | SQLITE_PRIVATE char *sqlite3VMPrintf(sqlite3 *db, const char *zFormat, v...
  function SQLITE_PRIVATE (line 22190) | SQLITE_PRIVATE char *sqlite3MPrintf(sqlite3 *db, const char *zFormat, ...){
  function SQLITE_PRIVATE (line 22207) | SQLITE_PRIVATE char *sqlite3MAppendf(sqlite3 *db, char *zStr, const char...
  function SQLITE_API (line 22221) | SQLITE_API char *SQLITE_STDCALL sqlite3_vmprintf(const char *zFormat, va...
  function SQLITE_API (line 22246) | SQLITE_API char *SQLITE_CDECL sqlite3_mprintf(const char *zFormat, ...){
  function SQLITE_API (line 22271) | SQLITE_API char *SQLITE_STDCALL sqlite3_vsnprintf(int n, char *zBuf, con...
  function SQLITE_API (line 22286) | SQLITE_API char *SQLITE_CDECL sqlite3_snprintf(int n, char *zBuf, const ...
  function renderLogMsg (line 22304) | static void renderLogMsg(int iErrCode, const char *zFormat, va_list ap){
  function SQLITE_CDECL (line 22318) | SQLITE_CDECL sqlite3_log(int iErrCode, const char *zFormat, ...){
  function SQLITE_PRIVATE (line 22333) | SQLITE_PRIVATE void sqlite3DebugPrintf(const char *zFormat, ...){
  function SQLITE_PRIVATE (line 22363) | SQLITE_PRIVATE TreeView *sqlite3TreeViewPush(TreeView *p, u8 moreToFollow){
  function SQLITE_PRIVATE (line 22376) | SQLITE_PRIVATE void sqlite3TreeViewPop(TreeView *p){
  function SQLITE_PRIVATE (line 22383) | SQLITE_PRIVATE void sqlite3TreeViewLine(TreeView *p, const char *zFormat...
  function SQLITE_PRIVATE (line 22405) | SQLITE_PRIVATE void sqlite3TreeViewItem(TreeView *p, const char *zLabel,...
  function SQLITE_PRIVATE (line 22414) | SQLITE_PRIVATE void sqlite3XPrintf(StrAccum *p, u32 bFlags, const char *...
  function SQLITE_WSD (line 22445) | static SQLITE_WSD struct sqlite3PrngType {
  function SQLITE_STDCALL (line 22454) | SQLITE_STDCALL sqlite3_randomness(int N, void *pBuf){
  function SQLITE_PRIVATE (line 22541) | SQLITE_PRIVATE void sqlite3PrngSaveState(void){
  function SQLITE_PRIVATE (line 22548) | SQLITE_PRIVATE void sqlite3PrngRestoreState(void){
  type SQLiteThread (line 22598) | struct SQLiteThread {
  function SQLITE_PRIVATE (line 22607) | SQLITE_PRIVATE int sqlite3ThreadCreate(
  function SQLITE_PRIVATE (line 22640) | SQLITE_PRIVATE int sqlite3ThreadJoin(SQLiteThread *p, void **ppOut){
  type SQLiteThread (line 22666) | struct SQLiteThread {
  function sqlite3ThreadProc (line 22675) | static unsigned __stdcall sqlite3ThreadProc(
  function SQLITE_PRIVATE (line 22698) | SQLITE_PRIVATE int sqlite3ThreadCreate(
  function SQLITE_PRIVATE (line 22731) | SQLITE_PRIVATE int sqlite3ThreadJoin(SQLiteThread *p, void **ppOut){
  type SQLiteThread (line 22766) | struct SQLiteThread {
  function SQLITE_PRIVATE (line 22773) | SQLITE_PRIVATE int sqlite3ThreadCreate(
  function SQLITE_PRIVATE (line 22797) | SQLITE_PRIVATE int sqlite3ThreadJoin(SQLiteThread *p, void **ppOut){
  function SQLITE_PRIVATE (line 22988) | SQLITE_PRIVATE u32 sqlite3Utf8Read(
  function sqlite3VdbeMemTranslate (line 23024) | int sqlite3VdbeMemTranslate(Mem *pMem, u8 desiredEnc){
  function SQLITE_PRIVATE (line 23167) | SQLITE_PRIVATE int sqlite3VdbeMemHandleBom(Mem *pMem){
  function SQLITE_PRIVATE (line 23205) | SQLITE_PRIVATE int sqlite3Utf8CharLen(const char *zIn, int nByte){
  function SQLITE_PRIVATE (line 23235) | SQLITE_PRIVATE int sqlite3Utf8To8(unsigned char *zIn){
  function SQLITE_PRIVATE (line 23259) | SQLITE_PRIVATE char *sqlite3Utf16to8(sqlite3 *db, const void *z, int nBy...
  function SQLITE_PRIVATE (line 23280) | SQLITE_PRIVATE int sqlite3Utf16ByteLen(const void *zIn, int nChar){
  function SQLITE_PRIVATE (line 23305) | SQLITE_PRIVATE void sqlite3UtfSelfTest(void){
  function SQLITE_PRIVATE (line 23382) | SQLITE_PRIVATE void sqlite3Coverage(int x){
  function SQLITE_PRIVATE (line 23400) | SQLITE_PRIVATE int sqlite3FaultSim(int iTest){
  function SQLITE_PRIVATE (line 23413) | SQLITE_PRIVATE int sqlite3IsNaN(double x){
  function SQLITE_PRIVATE (line 23461) | SQLITE_PRIVATE int sqlite3Strlen30(const char *z){
  function SQLITE_PRIVATE (line 23471) | SQLITE_PRIVATE void sqlite3Error(sqlite3 *db, int err_code){
  function SQLITE_PRIVATE (line 23498) | SQLITE_PRIVATE void sqlite3ErrorWithMsg(sqlite3 *db, int err_code, const...
  function SQLITE_PRIVATE (line 23530) | SQLITE_PRIVATE void sqlite3ErrorMsg(Parse *pParse, const char *zFormat, ...
  function SQLITE_PRIVATE (line 23564) | SQLITE_PRIVATE int sqlite3Dequote(char *z){
  function SQLITE_STDCALL (line 23606) | SQLITE_STDCALL sqlite3_stricmp(const char *zLeft, const char *zRight){
  function SQLITE_STDCALL (line 23618) | SQLITE_STDCALL sqlite3_strnicmp(const char *zLeft, const char *zRight, i...
  function SQLITE_PRIVATE (line 23653) | SQLITE_PRIVATE int sqlite3AtoF(const char *z, double *pResult, int lengt...
  function compare2pow63 (line 23834) | static int compare2pow63(const char *zNum, int incr){
  function SQLITE_PRIVATE (line 23870) | SQLITE_PRIVATE int sqlite3Atoi64(const char *zNum, i64 *pNum, int length...
  function SQLITE_PRIVATE (line 23952) | SQLITE_PRIVATE int sqlite3DecOrHexToI64(const char *z, i64 *pOut){
  function SQLITE_PRIVATE (line 23983) | SQLITE_PRIVATE int sqlite3GetInt32(const char *zNum, int *pValue){
  function SQLITE_PRIVATE (line 24040) | SQLITE_PRIVATE int sqlite3Atoi(const char *z){
  function putVarint64 (line 24075) | static int SQLITE_NOINLINE putVarint64(unsigned char *p, u64 v){
  function SQLITE_PRIVATE (line 24099) | SQLITE_PRIVATE int sqlite3PutVarint(unsigned char *p, u64 v){
  function SQLITE_PRIVATE (line 24129) | SQLITE_PRIVATE u8 sqlite3GetVarint(const unsigned char *p, u64 *v){
  function SQLITE_PRIVATE (line 24299) | SQLITE_PRIVATE u8 sqlite3GetVarint32(const unsigned char *p, u32 *v){
  function SQLITE_PRIVATE (line 24422) | SQLITE_PRIVATE int sqlite3VarintLen(u64 v){
  function SQLITE_PRIVATE (line 24435) | SQLITE_PRIVATE u32 sqlite3Get4byte(const u8 *p){
  function SQLITE_PRIVATE (line 24439) | SQLITE_PRIVATE void sqlite3Put4byte(unsigned char *p, u32 v){
  function SQLITE_PRIVATE (line 24453) | SQLITE_PRIVATE u8 sqlite3HexToInt(int h){
  function SQLITE_PRIVATE (line 24471) | SQLITE_PRIVATE void *sqlite3HexToBlob(sqlite3 *db, const char *z, int n){
  function logBadConnection (line 24492) | static void logBadConnection(const char *zType){
  function SQLITE_PRIVATE (line 24513) | SQLITE_PRIVATE int sqlite3SafetyCheckOk(sqlite3 *db){
  function SQLITE_PRIVATE (line 24530) | SQLITE_PRIVATE int sqlite3SafetyCheckSickOrOk(sqlite3 *db){
  function SQLITE_PRIVATE (line 24550) | SQLITE_PRIVATE int sqlite3AddInt64(i64 *pA, i64 iB){
  function SQLITE_PRIVATE (line 24566) | SQLITE_PRIVATE int sqlite3SubInt64(i64 *pA, i64 iB){
  function SQLITE_PRIVATE (line 24579) | SQLITE_PRIVATE int sqlite3MulInt64(i64 *pA, i64 iB){
  function SQLITE_PRIVATE (line 24614) | SQLITE_PRIVATE int sqlite3AbsInt32(int x){
  function SQLITE_PRIVATE (line 24638) | SQLITE_PRIVATE void sqlite3FileSuffix3(const char *zBaseFilename, char *z){
  function SQLITE_PRIVATE (line 24657) | SQLITE_PRIVATE LogEst sqlite3LogEstAdd(LogEst a, LogEst b){
  function SQLITE_PRIVATE (line 24684) | SQLITE_PRIVATE LogEst sqlite3LogEst(u64 x){
  function SQLITE_PRIVATE (line 24702) | SQLITE_PRIVATE LogEst sqlite3LogEstFromDouble(double x){
  function SQLITE_PRIVATE (line 24717) | SQLITE_PRIVATE u64 sqlite3LogEstToInt(LogEst x){
  function SQLITE_PRIVATE (line 24753) | SQLITE_PRIVATE void sqlite3HashInit(Hash *pNew){
  function SQLITE_PRIVATE (line 24765) | SQLITE_PRIVATE void sqlite3HashClear(Hash *pH){
  function strHash (line 24785) | static unsigned int strHash(const char *z){
  function insertElement (line 24798) | static void insertElement(
  function rehash (line 24832) | static int rehash(Hash *pH, unsigned int new_size){
  function HashElem (line 24872) | static HashElem *findElementWithHash(
  function removeElementGivenHash (line 24906) | static void removeElementGivenHash(
  function SQLITE_PRIVATE (line 24941) | SQLITE_PRIVATE void *sqlite3HashFind(const Hash *pH, const char *pKey){
  function SQLITE_PRIVATE (line 24965) | SQLITE_PRIVATE void *sqlite3HashInsert(Hash *pH, const char *pKey, void ...
  function SQLITE_PRIVATE (line 25009) | SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){
  type unixShm (line 25325) | typedef struct unixShm unixShm;
  type unixShmNode (line 25326) | typedef struct unixShmNode unixShmNode;
  type unixInodeInfo (line 25327) | typedef struct unixInodeInfo unixInodeInfo;
  type UnixUnusedFd (line 25328) | typedef struct UnixUnusedFd UnixUnusedFd;
  type UnixUnusedFd (line 25336) | struct UnixUnusedFd {
  type unixFile (line 25346) | typedef struct unixFile unixFile;
  type unixFile (line 25347) | struct unixFile {
  function sqlite_uint64 (line 25513) | __inline__ sqlite_uint64 sqlite3Hwtime(void){
  function sqlite_uint64 (line 25521) | __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){
  function sqlite_uint64 (line 25532) | __inline__ sqlite_uint64 sqlite3Hwtime(void){
  function sqlite_uint64 (line 25540) | __inline__ sqlite_uint64 sqlite3Hwtime(void){
  function sqlite3Hwtime (line 25564) | sqlite3Hwtime(void){ return ((sqlite_uint64)0); }
  function local_ioerr (line 25602) | static void local_ioerr(){
  function posixOpen (line 25693) | static int posixOpen(const char *zFile, int flags, int mode){
  function posixFchown (line 25702) | static int posixFchown(int fd, uid_t uid, gid_t gid){
  type unix_syscall (line 25720) | struct unix_syscall {
  type stat (line 25738) | struct stat
  type stat (line 25751) | struct stat
  function unixSetSystemCall (line 25847) | static int unixSetSystemCall(
  function sqlite3_syscall_ptr (line 25890) | static sqlite3_syscall_ptr unixGetSystemCall(
  function robust_open (line 25950) | static int robust_open(const char *z, int f, mode_t m){
  function unixEnterMutex (line 26001) | static void unixEnterMutex(void){
  function unixLeaveMutex (line 26004) | static void unixLeaveMutex(void){
  function unixMutexHeld (line 26008) | static int unixMutexHeld(void) {
  function lockTrace (line 26041) | static int lockTrace(int fd, int op, struct flock *p){
  function robust_ftruncate (line 26099) | static int robust_ftruncate(int h, sqlite3_int64 sz){
  function sqliteErrorFromPosixError (line 26124) | static int sqliteErrorFromPosixError(int posixError, int sqliteIOErr) {
  type vxworksFileId (line 26209) | struct vxworksFileId {
  type vxworksFileId (line 26221) | struct vxworksFileId
  function vxworksSimplifyName (line 26236) | static int vxworksSimplifyName(char *z, int n){
  type vxworksFileId (line 26270) | struct vxworksFileId
  type vxworksFileId (line 26271) | struct vxworksFileId
  type vxworksFileId (line 26272) | struct vxworksFileId
  function vxworksReleaseFileId (line 26312) | static void vxworksReleaseFileId(struct vxworksFileId *pId){
  type unixFileId (line 26424) | struct unixFileId {
  type unixInodeInfo (line 26442) | struct unixInodeInfo {
  function unixLogErrorAtLine (line 26484) | static int unixLogErrorAtLine(
  function robust_close (line 26549) | static void robust_close(unixFile *pFile, int h, int lineno){
  function storeLastErrno (line 26560) | static void storeLastErrno(unixFile *pFile, int error){
  function closePendingFds (line 26567) | static void closePendingFds(unixFile *pFile){
  function releaseInodeInfo (line 26585) | static void releaseInodeInfo(unixFile *pFile){
  function findInodeInfo (line 26619) | static int findInodeInfo(
  function fileHasMoved (line 26702) | static int fileHasMoved(unixFile *pFile){
  function verifyDbFile (line 26722) | static void verifyDbFile(unixFile *pFile){
  function unixCheckReservedLock (line 26760) | static int unixCheckReservedLock(sqlite3_file *id, int *pResOut){
  function unixFileLock (line 26819) | static int unixFileLock(unixFile *pFile, struct flock *pLock){
  function unixLock (line 26871) | static int unixLock(sqlite3_file *id, int eFileLock){
  function setPendingFd (line 27097) | static void setPendingFd(unixFile *pFile){
  function posixUnlock (line 27119) | static int posixUnlock(sqlite3_file *id, int eFileLock, int handleNFSUnl...
  function unixUnlock (line 27283) | static int unixUnlock(sqlite3_file *id, int eFileLock){
  function closeUnixFile (line 27305) | static int closeUnixFile(sqlite3_file *id){
  function unixClose (line 27340) | static int unixClose(sqlite3_file *id){
  function nolockCheckReservedLock (line 27385) | static int nolockCheckReservedLock(sqlite3_file *NotUsed, int *pResOut){
  function nolockLock (line 27390) | static int nolockLock(sqlite3_file *NotUsed, int NotUsed2){
  function nolockUnlock (line 27394) | static int nolockUnlock(sqlite3_file *NotUsed, int NotUsed2){
  function nolockClose (line 27402) | static int nolockClose(sqlite3_file *id) {
  function dotlockCheckReservedLock (line 27447) | static int dotlockCheckReservedLock(sqlite3_file *id, int *pResOut) {
  function dotlockLock (line 27498) | static int dotlockLock(sqlite3_file *id, int eFileLock) {
  function dotlockUnlock (line 27548) | static int dotlockUnlock(sqlite3_file *id, int eFileLock) {
  function dotlockClose (line 27593) | static int dotlockClose(sqlite3_file *id) {
  function robust_flock (line 27626) | static int robust_flock(int fd, int op){
  function flockCheckReservedLock (line 27642) | static int flockCheckReservedLock(sqlite3_file *id, int *pResOut){
  function flockLock (line 27724) | static int flockLock(sqlite3_file *id, int eFileLock) {
  function flockUnlock (line 27768) | static int flockUnlock(sqlite3_file *id, int eFileLock) {
  function flockClose (line 27802) | static int flockClose(sqlite3_file *id) {
  function semXCheckReservedLock (line 27834) | static int semXCheckReservedLock(sqlite3_file *id, int *pResOut) {
  function semXLock (line 27901) | static int semXLock(sqlite3_file *id, int eFileLock) {
  function semXUnlock (line 27934) | static int semXUnlock(sqlite3_file *id, int eFileLock) {
  function semXClose (line 27971) | static int semXClose(sqlite3_file *id) {
  type afpLockingContext (line 28006) | typedef struct afpLockingContext afpLockingContext;
  type afpLockingContext (line 28007) | struct afpLockingContext {
  type ByteRangeLockPB2 (line 28012) | struct ByteRangeLockPB2
  function afpSetLock (line 28030) | static int afpSetLock(
  function afpCheckReservedLock (line 28076) | static int afpCheckReservedLock(sqlite3_file *id, int *pResOut){
  function afpLock (line 28146) | static int afpLock(sqlite3_file *id, int eFileLock){
  function afpUnlock (line 28328) | static int afpUnlock(sqlite3_file *id, int eFileLock) {
  function afpClose (line 28431) | static int afpClose(sqlite3_file *id) {
  function nfsUnlock (line 28474) | static int nfsUnlock(sqlite3_file *id, int eFileLock){
  function seekAndRead (line 28510) | static int seekAndRead(unixFile *id, sqlite3_int64 offset, void *pBuf, i...
  function unixRead (line 28564) | static int unixRead(
  function seekAndWriteFd (line 28623) | static int seekAndWriteFd(
  function seekAndWrite (line 28669) | static int seekAndWrite(unixFile *id, i64 offset, const void *pBuf, int ...
  function unixWrite (line 28678) | static int unixWrite(
  function full_fsync (line 28813) | static int full_fsync(int fd, int fullSync, int dataOnly){
  function openDirectory (line 28904) | static int openDirectory(const char *zFilename, int *pFd){
  function unixSync (line 28937) | static int unixSync(sqlite3_file *id, int flags){
  function unixTruncate (line 28986) | static int unixTruncate(sqlite3_file *id, i64 nByte){
  function unixFileSize (line 29036) | static int unixFileSize(sqlite3_file *id, i64 *pSize){
  function fcntlSizeHint (line 29074) | static int fcntlSizeHint(unixFile *pFile, i64 nByte){
  function unixModeBit (line 29147) | static void unixModeBit(unixFile *pFile, unsigned char mask, int *pArg){
  function unixFileControl (line 29163) | static int unixFileControl(sqlite3_file *id, int op, void *pArg){
  function unixSectorSize (line 29263) | static int unixSectorSize(sqlite3_file *NotUsed){
  function unixSectorSize (line 29275) | static int unixSectorSize(sqlite3_file *id){
  function unixDeviceCharacteristics (line 29362) | static int unixDeviceCharacteristics(sqlite3_file *id){
  function unixGetpagesize (line 29383) | static int unixGetpagesize(void){
  type unixShmNode (line 29426) | struct unixShmNode {
  type unixShm (line 29457) | struct unixShm {
  function unixShmSystemLock (line 29478) | static int unixShmSystemLock(
  function unixShmRegionPerMap (line 29560) | static int unixShmRegionPerMap(void){
  function unixShmPurge (line 29574) | static void unixShmPurge(unixFile *pFd){
  function unixOpenSharedMemory (line 29634) | static int unixOpenSharedMemory(unixFile *pDbFd){
  function unixShmMap (line 29781) | static int unixShmMap(
  function unixShmLock (line 29918) | static int unixShmLock(
  function unixShmBarrier (line 30030) | static void unixShmBarrier(
  function unixShmUnmap (line 30045) | static int unixShmUnmap(
  function unixUnmapfile (line 30101) | static void unixUnmapfile(unixFile *pFd){
  function unixRemapfile (line 30126) | static void unixRemapfile(
  function unixMapfile (line 30216) | static int unixMapfile(unixFile *pFd, i64 nByte){
  function unixFetch (line 30259) | static int unixFetch(sqlite3_file *fd, i64 iOff, int nAmt, void **pp){
  function unixUnfetch (line 30290) | static int unixUnfetch(sqlite3_file *fd, i64 iOff, void *p){
  function sqlite3_io_methods (line 30510) | static const sqlite3_io_methods *autolockIoFinderImpl(
  function sqlite3_io_methods (line 30574) | static const sqlite3_io_methods *vxworksIoFinderImpl(
  type sqlite3_io_methods (line 30607) | typedef const sqlite3_io_methods *(*finder_type)(const char*,unixFile*);
  function fillInUnixFile (line 30620) | static int fillInUnixFile(
  type stat (line 30818) | struct stat
  function unixGetTempname (line 30839) | static int unixGetTempname(int nBuf, char *zBuf){
  function UnixUnusedFd (line 30901) | static UnixUnusedFd *findReusableFd(const char *zPath, int flags){
  function findCreateFileMode (line 30964) | static int findCreateFileMode(
  function unixOpen (line 31041) | static int unixOpen(
  function unixDelete (line 31298) | static int unixDelete(
  function unixAccess (line 31350) | static int unixAccess(
  function unixFullPathname (line 31393) | static int unixFullPathname(
  function unixDlError (line 31443) | static void unixDlError(sqlite3_vfs *NotUsed, int nBuf, char *zBufOut){
  function unixDlClose (line 31476) | static void unixDlClose(sqlite3_vfs *NotUsed, void *pHandle){
  function unixRandomness (line 31490) | static int unixRandomness(sqlite3_vfs *NotUsed, int nBuf, char *zBuf){
  function unixSleep (line 31537) | static int unixSleep(sqlite3_vfs *NotUsed, int microseconds){
  function unixCurrentTimeInt64 (line 31577) | static int unixCurrentTimeInt64(sqlite3_vfs *NotUsed, sqlite3_int64 *piN...
  function unixCurrentTime (line 31611) | static int unixCurrentTime(sqlite3_vfs *NotUsed, double *prNow){
  function unixGetLastError (line 31627) | static int unixGetLastError(sqlite3_vfs *NotUsed, int NotUsed2, char *No...
  type proxyLockingContext (line 31798) | typedef struct proxyLockingContext proxyLockingContext;
  type proxyLockingContext (line 31799) | struct proxyLockingContext {
  function proxyGetLockPath (line 31816) | static int proxyGetLockPath(const char *dbPath, char *lPath, size_t maxL...
  function proxyCreateLockPath (line 31857) | static int proxyCreateLockPath(const char *lockPath){
  function proxyCreateUnixFile (line 31897) | static int proxyCreateUnixFile(
  type timespec (line 31987) | struct timespec
  function proxyGetHostID (line 31992) | static int proxyGetHostID(unsigned char *pHostID, int *pError){
  function proxyBreakConchLock (line 32033) | static int proxyBreakConchLock(unixFile *pFile, uuid_t myHostID){
  function proxyConchLock (line 32093) | static int proxyConchLock(unixFile *pFile, uuid_t myHostID, int lockType){
  function proxyTakeConch (line 32171) | static int proxyTakeConch(unixFile *pFile){
  function proxyReleaseConch (line 32393) | static int proxyReleaseConch(unixFile *pFile){
  function proxyCreateConchPathname (line 32423) | static int proxyCreateConchPathname(char *dbPath, char **pConchPath){
  function switchLockProxyPath (line 32460) | static int switchLockProxyPath(unixFile *pFile, const char *path) {
  function proxyGetDbPathForUnixFile (line 32496) | static int proxyGetDbPathForUnixFile(unixFile *pFile, char *dbPath){
  function proxyTransformUnixFile (line 32527) | static int proxyTransformUnixFile(unixFile *pFile, const char *path) {
  function proxyFileControl (line 32614) | static int proxyFileControl(sqlite3_file *id, int op, void *pArg){
  function proxyCheckReservedLock (line 32687) | static int proxyCheckReservedLock(sqlite3_file *id, int *pResOut) {
  function proxyLock (line 32726) | static int proxyLock(sqlite3_file *id, int eFileLock) {
  function proxyUnlock (line 32750) | static int proxyUnlock(sqlite3_file *id, int eFileLock) {
  function proxyClose (line 32769) | static int proxyClose(sqlite3_file *id) {
  function SQLITE_STDCALL (line 32831) | SQLITE_STDCALL sqlite3_os_init(void){
  function SQLITE_STDCALL (line 32930) | SQLITE_STDCALL sqlite3_os_end(void){
  function sqlite_uint64 (line 33041) | __inline__ sqlite_uint64 sqlite3Hwtime(void){
  function sqlite_uint64 (line 33049) | __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){
  function sqlite_uint64 (line 33060) | __inline__ sqlite_uint64 sqlite3Hwtime(void){
  function sqlite_uint64 (line 33068) | __inline__ sqlite_uint64 sqlite3Hwtime(void){
  function sqlite3Hwtime (line 33092) | sqlite3Hwtime(void){ return ((sqlite_uint64)0); }
  function local_ioerr (line 33130) | static void local_ioerr(){
  type winShm (line 33367) | typedef struct winShm winShm;
  type winShmNode (line 33368) | typedef struct winShmNode winShmNode;
  type winceLock (line 33376) | typedef struct winceLock {
  type winFile (line 33388) | typedef struct winFile winFile;
  type winFile (line 33389) | struct winFile {
  type winMemData (line 33501) | typedef struct winMemData winMemData;
  type winMemData (line 33502) | struct winMemData {
  type winMemData (line 33518) | struct winMemData
  type win_syscall (line 33587) | struct win_syscall {
  function winSetSystemCall (line 34248) | static int winSetSystemCall(
  function sqlite3_syscall_ptr (line 34291) | static sqlite3_syscall_ptr winGetSystemCall(
  function SQLITE_STDCALL (line 34333) | SQLITE_STDCALL sqlite3_win32_compact_heap(LPUINT pnLargest){
  function SQLITE_STDCALL (line 34373) | SQLITE_STDCALL sqlite3_win32_reset_heap(){
  function SQLITE_STDCALL (line 34418) | SQLITE_STDCALL sqlite3_win32_write_debug(const char *zBuf, int nBuf){
  function SQLITE_STDCALL (line 34458) | SQLITE_STDCALL sqlite3_win32_sleep(DWORD milliseconds){
  function SQLITE_PRIVATE (line 34473) | SQLITE_PRIVATE DWORD sqlite3Win32Wait(HANDLE hObject){
  function SQLITE_STDCALL (line 34507) | SQLITE_STDCALL sqlite3_win32_is_nt(void){
  function winMemFree (line 34569) | static void winMemFree(void *pPrior){
  function winMemSize (line 34617) | static int winMemSize(void *p){
  function winMemRoundup (line 34641) | static int winMemRoundup(int n){
  function winMemInit (line 34648) | static int winMemInit(void *pAppData){
  function winMemShutdown (line 34697) | static void winMemShutdown(void *pAppData){
  function SQLITE_PRIVATE (line 34728) | SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetWin32(void){
  function SQLITE_PRIVATE (line 34742) | SQLITE_PRIVATE void sqlite3MemSetDefault(void){
  function LPWSTR (line 34752) | static LPWSTR winUtf8ToUnicode(const char *zFilename){
  function LPWSTR (line 34805) | static LPWSTR winMbcsToUnicode(const char *zFilename){
  function SQLITE_API (line 34861) | SQLITE_API char *SQLITE_STDCALL sqlite3_win32_mbcs_to_utf8(const char *z...
  function SQLITE_API (line 34878) | SQLITE_API char *SQLITE_STDCALL sqlite3_win32_utf8_to_mbcs(const char *z...
  function SQLITE_STDCALL (line 34898) | SQLITE_STDCALL sqlite3_win32_set_directory(DWORD type, LPCWSTR zValue){
  function winGetLastErrorMsg (line 34933) | static int winGetLastErrorMsg(DWORD lastErrno, int nBuf, char *zBuf){
  function winLogErrorAtLine (line 35024) | static int winLogErrorAtLine(
  function winRetryIoerr (line 35094) | static int winRetryIoerr(int *pnRetry, DWORD *pError){
  function winLogIoerr (line 35123) | static void winLogIoerr(int nRetry, int lineno){
  type tm (line 35142) | struct tm
  type tm (line 35144) | struct tm
  function winceMutexAcquire (line 35170) | static void winceMutexAcquire(HANDLE h){
  function winceCreateLock (line 35185) | static int winceCreateLock(const char *zFilename, winFile *pFile){
  function winceDestroyLock (line 35279) | static void winceDestroyLock(winFile *pFile){
  function BOOL (line 35313) | static BOOL winceLockFile(
  function BOOL (line 35379) | static BOOL winceUnlockFile(
  function BOOL (line 35448) | static BOOL winLockFile(
  function BOOL (line 35480) | static BOOL winUnlockFile(
  function winSeekFile (line 35525) | static int winSeekFile(winFile *pFile, sqlite3_int64 iOffset){
  function winClose (line 35598) | static int winClose(sqlite3_file *id){
  function winTruncate (line 35838) | static int winTruncate(sqlite3_file *id, sqlite3_int64 nByte){
  function winSync (line 35895) | static int winSync(sqlite3_file *id, int flags){
  function winFileSize (line 35980) | static int winFileSize(sqlite3_file *id, sqlite3_int64 *pSize){
  function winGetReadLock (line 36058) | static int winGetReadLock(winFile *pFile){
  function winUnlockReadLock (line 36093) | static int winUnlockReadLock(winFile *pFile){
  function winLock (line 36140) | static int winLock(sqlite3_file *id, int locktype){
  function winCheckReservedLock (line 36278) | static int winCheckReservedLock(sqlite3_file *id, int *pResOut){
  function winUnlock (line 36314) | static int winUnlock(sqlite3_file *id, int locktype){
  function winModeBit (line 36353) | static void winModeBit(winFile *pFile, unsigned char mask, int *pArg){
  function winFileControl (line 36371) | static int winFileControl(sqlite3_file *id, int op, void *pArg){
  function winSectorSize (line 36492) | static int winSectorSize(sqlite3_file *id){
  function winDeviceCharacteristics (line 36500) | static int winDeviceCharacteristics(sqlite3_file *id){
  function winShmEnterMutex (line 36529) | static void winShmEnterMutex(void){
  function winShmLeaveMutex (line 36532) | static void winShmLeaveMutex(void){
  function winShmMutexHeld (line 36536) | static int winShmMutexHeld(void) {
  type winShmNode (line 36564) | struct winShmNode {
  type winShm (line 36605) | struct winShm {
  function winShmSystemLock (line 36628) | static int winShmSystemLock(
  function winShmPurge (line 36676) | static void winShmPurge(sqlite3_vfs *pVfs, int deleteFlag){
  function winOpenSharedMemory (line 36725) | static int winOpenSharedMemory(winFile *pDbFd){
  function winShmUnmap (line 36836) | static int winShmUnmap(
  function winShmLock (line 36877) | static int winShmLock(
  function winShmBarrier (line 36986) | static void winShmBarrier(
  function winShmMap (line 37014) | static int winShmMap(
  function winUnmapfile (line 37154) | static int winUnmapfile(winFile *pFile){
  function winMapfile (line 37204) | static int winMapfile(winFile *pFd, sqlite3_int64 nByte){
  function winFetch (line 37301) | static int winFetch(sqlite3_file *fd, i64 iOff, int nAmt, void **pp){
  function winUnfetch (line 37342) | static int winUnfetch(sqlite3_file *fd, i64 iOff, void *p){
  function winMakeEndInDirSep (line 37460) | static int winMakeEndInDirSep(int nBuf, char *zBuf){
  function winGetTempname (line 37480) | static int winGetTempname(sqlite3_vfs *pVfs, char **pzBuf){
  function winIsDir (line 37711) | static int winIsDir(const void *zConverted){
  function winOpen (line 37738) | static int winOpen(
  function winDelete (line 38029) | static int winDelete(
  function winAccess (line 38137) | static int winAccess(
  function BOOL (line 38215) | static BOOL winIsDriveLetterAndColon(
  function BOOL (line 38227) | static BOOL winIsVerbatimPathname(
  function winFullPathname (line 38263) | static int winFullPathname(
  function winDlError (line 38487) | static void winDlError(sqlite3_vfs *pVfs, int nBuf, char *zBufOut){
  function winDlClose (line 38499) | static void winDlClose(sqlite3_vfs *pVfs, void *pHandle){
  function winRandomness (line 38515) | static int winRandomness(sqlite3_vfs *pVfs, int nBuf, char *zBuf){
  function winSleep (line 38576) | static int winSleep(sqlite3_vfs *pVfs, int microsec){
  function winCurrentTimeInt64 (line 38601) | static int winCurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_int64 *piNow){
  function winCurrentTime (line 38644) | static int winCurrentTime(sqlite3_vfs *pVfs, double *prNow){
  function winGetLastError (line 38684) | static int winGetLastError(sqlite3_vfs *pVfs, int nBuf, char *zBuf){
  function SQLITE_STDCALL (line 38692) | SQLITE_STDCALL sqlite3_os_init(void){
  function SQLITE_STDCALL (line 38767) | SQLITE_STDCALL sqlite3_os_end(void){
  type Bitvec (line 38872) | struct Bitvec {
  function SQLITE_PRIVATE (line 38893) | SQLITE_PRIVATE Bitvec *sqlite3BitvecCreate(u32 iSize){
  function SQLITE_PRIVATE (line 38908) | SQLITE_PRIVATE int sqlite3BitvecTest(Bitvec *p, u32 i){
  function SQLITE_PRIVATE (line 38944) | SQLITE_PRIVATE int sqlite3BitvecSet(Bitvec *p, u32 i){
  function SQLITE_PRIVATE (line 39015) | SQLITE_PRIVATE void sqlite3BitvecClear(Bitvec *p, u32 i, void *pBuf){
  function SQLITE_PRIVATE (line 39052) | SQLITE_PRIVATE void sqlite3BitvecDestroy(Bitvec *p){
  function SQLITE_PRIVATE (line 39067) | SQLITE_PRIVATE u32 sqlite3BitvecSize(Bitvec *p){
  function SQLITE_PRIVATE (line 39112) | SQLITE_PRIVATE int sqlite3BitvecBuiltinTest(int sz, int *aOp){
  type PCache (line 39207) | struct PCache {
  function pcacheManageDirtyList (line 39235) | static void pcacheManageDirtyList(PgHdr *pPage, u8 addRemove){
  function pcacheUnpin (line 39295) | static void pcacheUnpin(PgHdr *p){
  function numberOfCachePages (line 39310) | static int numberOfCachePages(PCache *p){
  function SQLITE_PRIVATE (line 39328) | SQLITE_PRIVATE int sqlite3PcacheInitialize(void){
  function SQLITE_PRIVATE (line 39337) | SQLITE_PRIVATE void sqlite3PcacheShutdown(void){
  function SQLITE_PRIVATE (line 39347) | SQLITE_PRIVATE int sqlite3PcacheSize(void){ return sizeof(PCache); }
  function SQLITE_PRIVATE (line 39355) | SQLITE_PRIVATE int sqlite3PcacheOpen(
  function SQLITE_PRIVATE (line 39378) | SQLITE_PRIVATE int sqlite3PcacheSetPageSize(PCache *pCache, int szPage){
  function SQLITE_PRIVATE (line 39422) | SQLITE_PRIVATE sqlite3_pcache_page *sqlite3PcacheFetch(
  function SQLITE_PRIVATE (line 39459) | SQLITE_PRIVATE int sqlite3PcacheFetchStress(
  function SQLITE_NOINLINE (line 39508) | static SQLITE_NOINLINE PgHdr *pcacheFetchFinishWithInit(
  function SQLITE_PRIVATE (line 39533) | SQLITE_PRIVATE PgHdr *sqlite3PcacheFetchFinish(
  function SQLITE_NOINLINE (line 39560) | SQLITE_NOINLINE sqlite3PcacheRelease(PgHdr *p){
  function SQLITE_PRIVATE (line 39577) | SQLITE_PRIVATE void sqlite3PcacheRef(PgHdr *p){
  function SQLITE_PRIVATE (line 39587) | SQLITE_PRIVATE void sqlite3PcacheDrop(PgHdr *p){
  function SQLITE_PRIVATE (line 39603) | SQLITE_PRIVATE void sqlite3PcacheMakeDirty(PgHdr *p){
  function SQLITE_PRIVATE (line 39616) | SQLITE_PRIVATE void sqlite3PcacheMakeClean(PgHdr *p){
  function SQLITE_PRIVATE (line 39629) | SQLITE_PRIVATE void sqlite3PcacheCleanAll(PCache *pCache){
  function SQLITE_PRIVATE (line 39639) | SQLITE_PRIVATE void sqlite3PcacheClearSyncFlags(PCache *pCache){
  function SQLITE_PRIVATE (line 39650) | SQLITE_PRIVATE void sqlite3PcacheMove(PgHdr *p, Pgno newPgno){
  function SQLITE_PRIVATE (line 39670) | SQLITE_PRIVATE void sqlite3PcacheTruncate(PCache *pCache, Pgno pgno){
  function SQLITE_PRIVATE (line 39697) | SQLITE_PRIVATE void sqlite3PcacheClose(PCache *pCache){
  function SQLITE_PRIVATE (line 39705) | SQLITE_PRIVATE void sqlite3PcacheClear(PCache *pCache){
  function PgHdr (line 39713) | static PgHdr *pcacheMergeDirtyList(PgHdr *pA, PgHdr *pB){
  function PgHdr (line 39748) | static PgHdr *pcacheSortDirtyList(PgHdr *pIn){
  function SQLITE_PRIVATE (line 39782) | SQLITE_PRIVATE PgHdr *sqlite3PcacheDirtyList(PCache *pCache){
  function SQLITE_PRIVATE (line 39793) | SQLITE_PRIVATE int sqlite3PcacheRefCount(PCache *pCache){
  function SQLITE_PRIVATE (line 39800) | SQLITE_PRIVATE int sqlite3PcachePageRefcount(PgHdr *p){
  function SQLITE_PRIVATE (line 39807) | SQLITE_PRIVATE int sqlite3PcachePagecount(PCache *pCache){
  function SQLITE_PRIVATE (line 39816) | SQLITE_PRIVATE int sqlite3PcacheGetCachesize(PCache *pCache){
  function SQLITE_PRIVATE (line 39824) | SQLITE_PRIVATE void sqlite3PcacheSetCachesize(PCache *pCache, int mxPage){
  function SQLITE_PRIVATE (line 39834) | SQLITE_PRIVATE void sqlite3PcacheShrink(PCache *pCache){
  function SQLITE_PRIVATE (line 39843) | SQLITE_PRIVATE int sqlite3HeaderSizePcache(void){ return ROUND8(sizeof(P...
  function SQLITE_PRIVATE (line 39852) | SQLITE_PRIVATE void sqlite3PcacheIterateDirty(PCache *pCache, void (*xIt...
  type PCache1 (line 39882) | typedef struct PCache1 PCache1;
  type PgHdr1 (line 39883) | typedef struct PgHdr1 PgHdr1;
  type PgFreeslot (line 39884) | typedef struct PgFreeslot PgFreeslot;
  type PGroup (line 39885) | typedef struct PGroup PGroup;
  type PGroup (line 39909) | struct PGroup {
  type PCache1 (line 39926) | struct PCache1 {
  type PgHdr1 (line 39956) | struct PgHdr1 {
  type PgFreeslot (line 39970) | struct PgFreeslot {
  function SQLITE_WSD (line 39977) | static SQLITE_WSD struct PCacheGlobal {
  function SQLITE_PRIVATE (line 40026) | SQLITE_PRIVATE void sqlite3PCacheBufferSetup(void *pBuf, int sz, int n){
  function pcache1Free (line 40093) | static int pcache1Free(void *p){
  function pcache1MemSize (line 40125) | static int pcache1MemSize(void *p){
  function PgHdr1 (line 40142) | static PgHdr1 *pcache1AllocPage(PCache1 *pCache){
  function pcache1FreePage (line 40183) | static void pcache1FreePage(PgHdr1 *p){
  function SQLITE_PRIVATE (line 40202) | SQLITE_PRIVATE void *sqlite3PageMalloc(int sz){
  function SQLITE_PRIVATE (line 40209) | SQLITE_PRIVATE void sqlite3PageFree(void *p){
  function pcache1UnderMemoryPressure (line 40230) | static int pcache1UnderMemoryPressure(PCache1 *pCache){
  function pcache1ResizeHash (line 40247) | static void pcache1ResizeHash(PCache1 *p){
  function pcache1PinPage (line 40288) | static void pcache1PinPage(PgHdr1 *pPage){
  function pcache1RemoveFromHash (line 40322) | static void pcache1RemoveFromHash(PgHdr1 *pPage){
  function pcache1EnforceMaxPage (line 40339) | static void pcache1EnforceMaxPage(PGroup *pGroup){
  function pcache1TruncateUnsafe (line 40358) | static void pcache1TruncateUnsafe(
  function pcache1Init (line 40389) | static int pcache1Init(void *NotUsed){
  function pcache1Shutdown (line 40407) | static void pcache1Shutdown(void *NotUsed){
  function sqlite3_pcache (line 40421) | static sqlite3_pcache *pcache1Create(int szPage, int szExtra, int bPurge...
  function pcache1Cachesize (line 40481) | static void pcache1Cachesize(sqlite3_pcache *p, int nMax){
  function pcache1Shrink (line 40500) | static void pcache1Shrink(sqlite3_pcache *p){
  function pcache1Pagecount (line 40517) | static int pcache1Pagecount(sqlite3_pcache *p){
  function SQLITE_NOINLINE (line 40535) | static SQLITE_NOINLINE PgHdr1 *pcache1FetchStage2(
  function sqlite3_pcache_page (line 40669) | static sqlite3_pcache_page *pcache1Fetch(
  function pcache1Unpin (line 40707) | static void pcache1Unpin(
  function pcache1Rekey (line 40749) | static void pcache1Rekey(
  function pcache1Truncate (line 40789) | static void pcache1Truncate(sqlite3_pcache *p, unsigned int iLimit){
  function pcache1Destroy (line 40804) | static void pcache1Destroy(sqlite3_pcache *p){
  function SQLITE_PRIVATE (line 40826) | SQLITE_PRIVATE void sqlite3PCacheSetDefault(void){
  function SQLITE_PRIVATE (line 40848) | SQLITE_PRIVATE int sqlite3HeaderSizePcache1(void){ return ROUND8(sizeof(...
  function SQLITE_PRIVATE (line 40854) | SQLITE_PRIVATE sqlite3_mutex *sqlite3Pcache1Mutex(void){
  function SQLITE_PRIVATE (line 40868) | SQLITE_PRIVATE int sqlite3PcacheReleaseMemory(int nReq){
  function SQLITE_PRIVATE (line 40896) | SQLITE_PRIVATE void sqlite3PcacheStats(
  type RowSetEntry (line 41000) | struct RowSetEntry {
  type RowSetChunk (line 41012) | struct RowSetChunk {
  type RowSet (line 41022) | struct RowSet {
  function SQLITE_PRIVATE (line 41052) | SQLITE_PRIVATE RowSet *sqlite3RowSetInit(sqlite3 *db, void *pSpace, unsi...
  function SQLITE_PRIVATE (line 41073) | SQLITE_PRIVATE void sqlite3RowSetClear(RowSet *p){
  type RowSetEntry (line 41095) | struct RowSetEntry
  type RowSetChunk (line 41098) | struct RowSetChunk
  function SQLITE_PRIVATE (line 41118) | SQLITE_PRIVATE void sqlite3RowSetInsert(RowSet *p, i64 rowid){
  type RowSetEntry (line 41147) | struct RowSetEntry
  type RowSetEntry (line 41148) | struct RowSetEntry
  type RowSetEntry (line 41149) | struct RowSetEntry
  type RowSetEntry (line 41151) | struct RowSetEntry
  type RowSetEntry (line 41152) | struct RowSetEntry
  type RowSetEntry (line 41184) | struct RowSetEntry
  type RowSetEntry (line 41184) | struct RowSetEntry
  type RowSetEntry (line 41186) | struct RowSetEntry
  function rowSetTreeToList (line 41212) | static void rowSetTreeToList(
  type RowSetEntry (line 41247) | struct RowSetEntry
  type RowSetEntry (line 41248) | struct RowSetEntry
  type RowSetEntry (line 41251) | struct RowSetEntry
  type RowSetEntry (line 41252) | struct RowSetEntry
  type RowSetEntry (line 41277) | struct RowSetEntry
  type RowSetEntry (line 41277) | struct RowSetEntry
  type RowSetEntry (line 41279) | struct RowSetEntry
  type RowSetEntry (line 41280) | struct RowSetEntry
  function rowSetToList (line 41302) | static void rowSetToList(RowSet *p){
  function SQLITE_PRIVATE (line 41338) | SQLITE_PRIVATE int sqlite3RowSetNext(RowSet *p, i64 *pRowid){
  function SQLITE_PRIVATE (line 41365) | SQLITE_PRIVATE int sqlite3RowSetTest(RowSet *pRowSet, int iBatch, sqlite...
  type Wal (line 41502) | typedef struct Wal Wal;
  type PagerSavepoint (line 42009) | typedef struct PagerSavepoint PagerSavepoint;
  type PagerSavepoint (line 42010) | struct PagerSavepoint {
  type Pager (line 42184) | struct Pager {
  function pagerUseWal (line 42383) | static int pagerUseWal(Pager *pPager){
  function assert_pager_state (line 42403) | static int assert_pager_state(Pager *p){
  function subjRequiresPage (line 42592) | static int subjRequiresPage(PgHdr *pPg){
  function pageInJournal (line 42609) | static int pageInJournal(Pager *pPager, PgHdr *pPg){
  function read32bits (line 42620) | static int read32bits(sqlite3_file *fd, i64 offset, u32 *pRes){
  function write32bits (line 42639) | static int write32bits(sqlite3_file *fd, i64 offset, u32 val){
  function pagerUnlockDb (line 42654) | static int pagerUnlockDb(Pager *pPager, int eLock){
  function pagerLockDb (line 42681) | static int pagerLockDb(Pager *pPager, int eLock){
  function jrnlBufferSize (line 42713) | static int jrnlBufferSize(Pager *pPager){
  function u32 (line 42745) | static u32 pager_datahash(int nByte, unsigned char *pData){
  function u32 (line 42753) | static u32 pager_pagehash(PgHdr *pPage){
  function pager_set_pagehash (line 42756) | static void pager_set_pagehash(PgHdr *pPage){
  function checkPage (line 42766) | static void checkPage(PgHdr *pPg){
  function readMasterJournal (line 42804) | static int readMasterJournal(sqlite3_file *pJrnl, char *zMaster, u32 nMa...
  function i64 (line 42858) | static i64 journalHdrOffset(Pager *pPager){
  function zeroJournalHdr (line 42891) | static int zeroJournalHdr(Pager *pPager, int doTruncate){
  function writeJournalHdr (line 42940) | static int writeJournalHdr(Pager *pPager){
  function readJournalHdr (line 43058) | static int readJournalHdr(
  function writeMasterJournal (line 43183) | static int writeMasterJournal(Pager *pPager, const char *zMaster){
  function pager_reset (line 43250) | static void pager_reset(Pager *pPager){
  function SQLITE_PRIVATE (line 43259) | SQLITE_PRIVATE u32 sqlite3PagerDataVersion(Pager *pPager){
  function releaseAllSavepoints (line 43269) | static void releaseAllSavepoints(Pager *pPager){
  function addToSavepointBitvecs (line 43288) | static int addToSavepointBitvecs(Pager *pPager, Pgno pgno){
  function pager_unlock (line 43320) | static void pager_unlock(Pager *pPager){
  function pager_error (line 43413) | static int pager_error(Pager *pPager, int rc){
  function pager_end_transaction (line 43483) | static int pager_end_transaction(Pager *pPager, int hasMaster, int bComm...
  function pagerUnlockAndRollback (line 43622) | static void pagerUnlockAndRollback(Pager *pPager){
  function u32 (line 43656) | static u32 pager_cksum(Pager *pPager, const u8 *aData){
  function pagerReportSize (line 43671) | static void pagerReportSize(Pager *pPager){
  function pager_playback_one_page (line 43718) | static int pager_playback_one_page(
  function pager_delmaster (line 43983) | static int pager_delmaster(Pager *pPager, const char *zMaster){
  function pager_truncate (line 44093) | static int pager_truncate(Pager *pPager, Pgno nPage){
  function SQLITE_PRIVATE (line 44129) | SQLITE_PRIVATE int sqlite3SectorSize(sqlite3_file *pFile){
  function setSectorSize (line 44163) | static void setSectorSize(Pager *pPager){
  function pager_playback (line 44236) | static int pager_playback(Pager *pPager, int isHot){
  function readDbPage (line 44444) | static int readDbPage(PgHdr *pPg, u32 iFrame){
  function pager_write_changecounter (line 44506) | static void pager_write_changecounter(PgHdr *pPg){
  function pagerUndoCallback (line 44533) | static int pagerUndoCallback(void *pCtx, Pgno iPg){
  function pagerRollbackWal (line 44572) | static int pagerRollbackWal(Pager *pPager){
  function pagerWalFrames (line 44604) | static int pagerWalFrames(
  function pagerBeginReadTransaction (line 44675) | static int pagerBeginReadTransaction(Pager *pPager){
  function pagerPagecount (line 44708) | static int pagerPagecount(Pager *pPager, Pgno *pnPage){
  function pagerOpenWalIfPresent (line 44770) | static int pagerOpenWalIfPresent(Pager *pPager){
  function pagerPlaybackSavepoint (line 44839) | static int pagerPlaybackSavepoint(Pager *pPager, PagerSavepoint *pSavepo...
  function SQLITE_PRIVATE (line 44950) | SQLITE_PRIVATE void sqlite3PagerSetCachesize(Pager *pPager, int mxPage){
  function pagerFixMaplimit (line 44957) | static void pagerFixMaplimit(Pager *pPager){
  function SQLITE_PRIVATE (line 44972) | SQLITE_PRIVATE void sqlite3PagerSetMmapLimit(Pager *pPager, sqlite3_int6...
  function SQLITE_PRIVATE (line 44980) | SQLITE_PRIVATE void sqlite3PagerShrink(Pager *pPager){
  function SQLITE_PRIVATE (line 45031) | SQLITE_PRIVATE void sqlite3PagerSetFlags(
  function pagerOpentemp (line 45088) | static int pagerOpentemp(
  function SQLITE_PRIVATE (line 45127) | SQLITE_PRIVATE void sqlite3PagerSetBusyhandler(
  function SQLITE_PRIVATE (line 45173) | SQLITE_PRIVATE int sqlite3PagerSetPagesize(Pager *pPager, u32 *pPageSize...
  function SQLITE_PRIVATE (line 45236) | SQLITE_PRIVATE void *sqlite3PagerTempSpace(Pager *pPager){
  function SQLITE_PRIVATE (line 45247) | SQLITE_PRIVATE int sqlite3PagerMaxPageCount(Pager *pPager, int mxPage){
  function disable_simulated_io_errors (line 45268) | void disable_simulated_io_errors(void){
  function enable_simulated_io_errors (line 45272) | void enable_simulated_io_errors(void){
  function SQLITE_PRIVATE (line 45294) | SQLITE_PRIVATE int sqlite3PagerReadFileheader(Pager *pPager, int N, unsi...
  function SQLITE_PRIVATE (line 45322) | SQLITE_PRIVATE void sqlite3PagerPagecount(Pager *pPager, int *pnPage){
  function pager_wait_on_lock (line 45343) | static int pager_wait_on_lock(Pager *pPager, int locktype){
  function assertTruncateConstraintCb (line 45385) | static void assertTruncateConstraintCb(PgHdr *pPg){
  function assertTruncateConstraint (line 45389) | static void assertTruncateConstraint(Pager *pPager){
  function SQLITE_PRIVATE (line 45407) | SQLITE_PRIVATE void sqlite3PagerTruncateImage(Pager *pPager, Pgno nPage){
  function pagerSyncHotJournal (line 45438) | static int pagerSyncHotJournal(Pager *pPager){
  function pagerAcquireMapPage (line 45459) | static int pagerAcquireMapPage(
  function pagerReleaseMapPage (line 45501) | static void pagerReleaseMapPage(PgHdr *pPg){
  function pagerFreeMapHdrs (line 45514) | static void pagerFreeMapHdrs(Pager *pPager){
  function SQLITE_PRIVATE (line 45538) | SQLITE_PRIVATE int sqlite3PagerClose(Pager *pPager){
  function SQLITE_PRIVATE (line 45595) | SQLITE_PRIVATE Pgno sqlite3PagerPagenumber(DbPage *pPg){
  function SQLITE_PRIVATE (line 45603) | SQLITE_PRIVATE void sqlite3PagerRef(DbPage *pPg){
  function syncJournal (line 45642) | static int syncJournal(Pager *pPager, int newHdr){
  function pager_write_pagelist (line 45785) | static int pager_write_pagelist(Pager *pPager, PgHdr *pList){
  function openSubJournal (line 45876) | static int openSubJournal(Pager *pPager){
  function subjournalPage (line 45901) | static int subjournalPage(PgHdr *pPg){
  function pagerStress (line 45958) | static int pagerStress(void *p, PgHdr *pPg){
  function SQLITE_PRIVATE (line 46090) | SQLITE_PRIVATE int sqlite3PagerOpen(
  function databaseIsUnmoved (line 46391) | static int databaseIsUnmoved(Pager *pPager){
  function hasHotJournal (line 46442) | static int hasHotJournal(Pager *pPager, int *pExists){
  function SQLITE_PRIVATE (line 46561) | SQLITE_PRIVATE int sqlite3PagerSharedLock(Pager *pPager){
  function pagerUnlockIfUnused (line 46782) | static void pagerUnlockIfUnused(Pager *pPager){
  function SQLITE_PRIVATE (line 46838) | SQLITE_PRIVATE int sqlite3PagerAcquire(
  function SQLITE_PRIVATE (line 47011) | SQLITE_PRIVATE DbPage *sqlite3PagerLookup(Pager *pPager, Pgno pgno){
  function SQLITE_PRIVATE (line 47029) | SQLITE_PRIVATE void sqlite3PagerUnrefNotNull(DbPage *pPg){
  function SQLITE_PRIVATE (line 47040) | SQLITE_PRIVATE void sqlite3PagerUnref(DbPage *pPg){
  function pager_open_journal (line 47066) | static int pager_open_journal(Pager *pPager){
  function SQLITE_PRIVATE (line 47155) | SQLITE_PRIVATE int sqlite3PagerBegin(Pager *pPager, int exFlag, int subj...
  function pager_write (line 47228) | static int pager_write(PgHdr *pPg){
  function SQLITE_NOINLINE (line 47365) | static SQLITE_NOINLINE int pagerWriteLargeSector(PgHdr *pPg){
  function SQLITE_PRIVATE (line 47459) | SQLITE_PRIVATE int sqlite3PagerWrite(PgHdr *pPg){
  function SQLITE_PRIVATE (line 47477) | SQLITE_PRIVATE int sqlite3PagerIswriteable(DbPage *pPg){
  function SQLITE_PRIVATE (line 47496) | SQLITE_PRIVATE void sqlite3PagerDontWrite(PgHdr *pPg){
  function pager_incr_changecounter (line 47528) | static int pager_incr_changecounter(Pager *pPager, int isDirectMode){
  function SQLITE_PRIVATE (line 47611) | SQLITE_PRIVATE int sqlite3PagerSync(Pager *pPager, const char *zMaster){
  function SQLITE_PRIVATE (line 47637) | SQLITE_PRIVATE int sqlite3PagerExclusiveLock(Pager *pPager){
  function SQLITE_PRIVATE (line 47676) | SQLITE_PRIVATE int sqlite3PagerCommitPhaseOne(
  function SQLITE_PRIVATE (line 47849) | SQLITE_PRIVATE int sqlite3PagerCommitPhaseTwo(Pager *pPager){
  function SQLITE_PRIVATE (line 47915) | SQLITE_PRIVATE int sqlite3PagerRollback(Pager *pPager){
  function SQLITE_PRIVATE (line 47964) | SQLITE_PRIVATE u8 sqlite3PagerIsreadonly(Pager *pPager){
  function SQLITE_PRIVATE (line 47971) | SQLITE_PRIVATE int sqlite3PagerRefcount(Pager *pPager){
  function SQLITE_PRIVATE (line 47979) | SQLITE_PRIVATE int sqlite3PagerMemUsed(Pager *pPager){
  function SQLITE_PRIVATE (line 47990) | SQLITE_PRIVATE int sqlite3PagerPageRefcount(DbPage *pPage){
  function SQLITE_PRIVATE (line 47998) | SQLITE_PRIVATE int *sqlite3PagerStats(Pager *pPager){
  function SQLITE_PRIVATE (line 48022) | SQLITE_PRIVATE void sqlite3PagerCacheStat(Pager *pPager, int eStat, int ...
  function SQLITE_PRIVATE (line 48042) | SQLITE_PRIVATE int sqlite3PagerIsMemdb(Pager *pPager){
  function SQLITE_PRIVATE (line 48056) | SQLITE_PRIVATE int sqlite3PagerOpenSavepoint(Pager *pPager, int nSavepoi...
  function SQLITE_PRIVATE (line 48135) | SQLITE_PRIVATE int sqlite3PagerSavepoint(Pager *pPager, int op, int iSav...
  function SQLITE_PRIVATE (line 48192) | SQLITE_PRIVATE const char *sqlite3PagerFilename(Pager *pPager, int nullI...
  function SQLITE_PRIVATE (line 48199) | SQLITE_PRIVATE const sqlite3_vfs *sqlite3PagerVfs(Pager *pPager){
  function SQLITE_PRIVATE (line 48208) | SQLITE_PRIVATE sqlite3_file *sqlite3PagerFile(Pager *pPager){
  function SQLITE_PRIVATE (line 48215) | SQLITE_PRIVATE const char *sqlite3PagerJournalname(Pager *pPager){
  function SQLITE_PRIVATE (line 48223) | SQLITE_PRIVATE int sqlite3PagerNosync(Pager *pPager){
  function SQLITE_PRIVATE (line 48231) | SQLITE_PRIVATE void sqlite3PagerSetCodec(
  function SQLITE_PRIVATE (line 48245) | SQLITE_PRIVATE void *sqlite3PagerGetCodec(Pager *pPager){
  function SQLITE_PRIVATE (line 48256) | SQLITE_PRIVATE void *sqlite3PagerCodec(PgHdr *pPg){
  function SQLITE_PRIVATE (line 48265) | SQLITE_PRIVATE int sqlite3PagerState(Pager *pPager){
  function SQLITE_PRIVATE (line 48296) | SQLITE_PRIVATE int sqlite3PagerMovepage(Pager *pPager, DbPage *pPg, Pgno...
  function SQLITE_PRIVATE (line 48431) | SQLITE_PRIVATE void sqlite3PagerRekey(DbPage *pPg, Pgno iNew, u16 flags){
  function SQLITE_PRIVATE (line 48440) | SQLITE_PRIVATE void *sqlite3PagerGetData(DbPage *pPg){
  function SQLITE_PRIVATE (line 48449) | SQLITE_PRIVATE void *sqlite3PagerGetExtra(DbPage *pPg){
  function SQLITE_PRIVATE (line 48463) | SQLITE_PRIVATE int sqlite3PagerLockingMode(Pager *pPager, int eMode){
  function SQLITE_PRIVATE (line 48496) | SQLITE_PRIVATE int sqlite3PagerSetJournalMode(Pager *pPager, int eMode){
  function SQLITE_PRIVATE (line 48592) | SQLITE_PRIVATE int sqlite3PagerGetJournalMode(Pager *pPager){
  function SQLITE_PRIVATE (line 48601) | SQLITE_PRIVATE int sqlite3PagerOkToChangeJournalMode(Pager *pPager){
  function SQLITE_PRIVATE (line 48614) | SQLITE_PRIVATE i64 sqlite3PagerJournalSizeLimit(Pager *pPager, i64 iLimit){
  function SQLITE_PRIVATE (line 48628) | SQLITE_PRIVATE sqlite3_backup **sqlite3PagerBackupPtr(Pager *pPager){
  function SQLITE_PRIVATE (line 48636) | SQLITE_PRIVATE void sqlite3PagerClearCache(Pager *pPager){
  function SQLITE_PRIVATE (line 48649) | SQLITE_PRIVATE int sqlite3PagerCheckpoint(Pager *pPager, int eMode, int ...
  function SQLITE_PRIVATE (line 48662) | SQLITE_PRIVATE int sqlite3PagerWalCallback(Pager *pPager){
  function SQLITE_PRIVATE (line 48670) | SQLITE_PRIVATE int sqlite3PagerWalSupported(Pager *pPager){
  function pagerExclusiveLock (line 48679) | static int pagerExclusiveLock(Pager *pPager){
  function pagerOpenWal (line 48699) | static int pagerOpenWal(Pager *pPager){
  function SQLITE_PRIVATE (line 48744) | SQLITE_PRIVATE int sqlite3PagerOpenWal(
  function SQLITE_PRIVATE (line 48783) | SQLITE_PRIVATE int sqlite3PagerCloseWal(Pager *pPager){
  function SQLITE_PRIVATE (line 48830) | SQLITE_PRIVATE int sqlite3PagerWalFramesize(Pager *pPager){
  type WalIndexHdr (line 49125) | typedef struct WalIndexHdr WalIndexHdr;
  type WalIterator (line 49126) | typedef struct WalIterator WalIterator;
  type WalCkptInfo (line 49127) | typedef struct WalCkptInfo WalCkptInfo;
  type WalIndexHdr (line 49140) | struct WalIndexHdr {
  type WalCkptInfo (line 49203) | struct WalCkptInfo {
  type Wal (line 49250) | struct Wal {
  type u16 (line 49295) | typedef u16 ht_slot;
  type WalIterator (line 49312) | struct WalIterator {
  function walIndexPage (line 49357) | static int walIndexPage(Wal *pWal, int iPage, volatile u32 **ppPage){
  function WalCkptInfo (line 49399) | static volatile WalCkptInfo *walCkptInfo(Wal *pWal){
  function WalIndexHdr (line 49407) | static volatile WalIndexHdr *walIndexHdr(Wal *pWal){
  function walChecksumBytes (line 49433) | static void walChecksumBytes(
  function walShmBarrier (line 49471) | static void walShmBarrier(Wal *pWal){
  function walIndexWriteHdr (line 49482) | static void walIndexWriteHdr(Wal *pWal){
  function walEncodeFrame (line 49508) | static void walEncodeFrame(
  function walDecodeFrame (line 49535) | static int walDecodeFrame(
  function walLockShared (line 49614) | static int walLockShared(Wal *pWal, int lockIdx){
  function walUnlockShared (line 49624) | static void walUnlockShared(Wal *pWal, int lockIdx){
  function walLockExclusive (line 49630) | static int walLockExclusive(Wal *pWal, int lockIdx, int n, int fBlock){
  function walUnlockExclusive (line 49641) | static void walUnlockExclusive(Wal *pWal, int lockIdx, int n){
  function walHash (line 49654) | static int walHash(u32 iPage){
  function walNextHash (line 49659) | static int walNextHash(int iPriorHash){
  function walHashGet (line 49677) | static int walHashGet(
  function walFramePage (line 49715) | static int walFramePage(u32 iFrame){
  function u32 (line 49729) | static u32 walFramePgno(Wal *pWal, u32 iFrame){
  function walCleanupHash (line 49749) | static void walCleanupHash(Wal *pWal){
  function walIndexAppend (line 49811) | static int walIndexAppend(Wal *pWal, u32 iFrame, u32 iPage){
  function walIndexRecover (line 49900) | static int walIndexRecover(Wal *pWal){
  function walIndexClose (line 50066) | static void walIndexClose(Wal *pWal, int isDelete){
  function SQLITE_PRIVATE (line 50093) | SQLITE_PRIVATE int sqlite3WalOpen(
  function SQLITE_PRIVATE (line 50163) | SQLITE_PRIVATE void sqlite3WalLimit(Wal *pWal, i64 iLimit){
  function walIteratorNext (line 50177) | static int walIteratorNext(
  function walMerge (line 50230) | static void walMerge(
  function walMergesort (line 50287) | static void walMergesort(
  function walIteratorFree (line 50346) | static void walIteratorFree(WalIterator *p){
  function walIteratorInit (line 50362) | static int walIteratorInit(Wal *pWal, WalIterator **pp){
  function walBusyLock (line 50444) | static int walBusyLock(
  function walPagesize (line 50462) | static int walPagesize(Wal *pWal){
  function walRestartHdr (line 50483) | static void walRestartHdr(Wal *pWal, u32 salt1){
  function walCheckpoint (line 50529) | static int walCheckpoint(
  function walLimitSize (line 50700) | static void walLimitSize(Wal *pWal, i64 nMax){
  function SQLITE_PRIVATE (line 50717) | SQLITE_PRIVATE int sqlite3WalClose(
  function walIndexTryHdr (line 50796) | static int walIndexTryHdr(Wal *pWal, int *pChanged){
  function walIndexReadHdr (line 50854) | static int walIndexReadHdr(Wal *pWal, int *pChanged){
  function walTryBeginRead (line 50971) | static int walTryBeginRead(Wal *pWal, int *pChanged, int useWal, int cnt){
  function SQLITE_PRIVATE (line 51160) | SQLITE_PRIVATE int sqlite3WalBeginReadTransaction(Wal *pWal, int *pChang...
  function SQLITE_PRIVATE (line 51178) | SQLITE_PRIVATE void sqlite3WalEndReadTransaction(Wal *pWal){
  function SQLITE_PRIVATE (line 51194) | SQLITE_PRIVATE int sqlite3WalFindFrame(
  function SQLITE_PRIVATE (line 51293) | SQLITE_PRIVATE int sqlite3WalReadFrame(
  function SQLITE_PRIVATE (line 51313) | SQLITE_PRIVATE Pgno sqlite3WalDbsize(Wal *pWal){
  function SQLITE_PRIVATE (line 51334) | SQLITE_PRIVATE int sqlite3WalBeginWriteTransaction(Wal *pWal){
  function SQLITE_PRIVATE (line 51371) | SQLITE_PRIVATE int sqlite3WalEndWriteTransaction(Wal *pWal){
  function SQLITE_PRIVATE (line 51392) | SQLITE_PRIVATE int sqlite3WalUndo(Wal *pWal, int (*xUndo)(void *, Pgno),...
  function SQLITE_PRIVATE (line 51432) | SQLITE_PRIVATE void sqlite3WalSavepoint(Wal *pWal, u32 *aWalData){
  function SQLITE_PRIVATE (line 51446) | SQLITE_PRIVATE int sqlite3WalSavepointUndo(Wal *pWal, u32 *aWalData){
  function walRestartLog (line 51483) | static int walRestartLog(Wal *pWal){
  type WalWriter (line 51530) | typedef struct WalWriter {
  function walWriteToLog (line 51546) | static int walWriteToLog(
  function walWriteOneFrame (line 51571) | static int walWriteOneFrame(
  function SQLITE_PRIVATE (line 51597) | SQLITE_PRIVATE int sqlite3WalFrames(
  function SQLITE_PRIVATE (line 51790) | SQLITE_PRIVATE int sqlite3WalCheckpoint(
  function SQLITE_PRIVATE (line 51898) | SQLITE_PRIVATE int sqlite3WalCallback(Wal *pWal){
  function SQLITE_PRIVATE (line 51931) | SQLITE_PRIVATE int sqlite3WalExclusiveMode(Wal *pWal, int op){
  function SQLITE_PRIVATE (line 51973) | SQLITE_PRIVATE int sqlite3WalHeapMemory(Wal *pWal){
  function SQLITE_PRIVATE (line 51983) | SQLITE_PRIVATE int sqlite3WalFramesize(Wal *pWal){
  type MemPage (line 52242) | typedef struct MemPage MemPage;
  type BtLock (line 52243) | typedef struct BtLock BtLock;
  type MemPage (line 52283) | struct MemPage {
  type BtLock (line 52325) | struct BtLock {
  type Btree (line 52357) | struct Btree {
  type BtShared (line 52419) | struct BtShared {
  type CellInfo (line 52473) | typedef struct CellInfo CellInfo;
  type CellInfo (line 52474) | struct CellInfo {
  type BtCursor (line 52513) | struct BtCursor {
  type IntegrityCk (line 52672) | typedef struct IntegrityCk IntegrityCk;
  type IntegrityCk (line 52673) | struct IntegrityCk {
  function lockBtreeMutex (line 52704) | static void lockBtreeMutex(Btree *p){
  function unlockBtreeMutex (line 52718) | static void SQLITE_NOINLINE unlockBtreeMutex(Btree *p){
  function SQLITE_PRIVATE (line 52748) | SQLITE_PRIVATE void sqlite3BtreeEnter(Btree *p){
  function btreeLockCarefully (line 52782) | static void SQLITE_NOINLINE btreeLockCarefully(Btree *p){
  function SQLITE_PRIVATE (line 52820) | SQLITE_PRIVATE void sqlite3BtreeLeave(Btree *p){
  function SQLITE_PRIVATE (line 52838) | SQLITE_PRIVATE int sqlite3BtreeHoldsMutex(Btree *p){
  function SQLITE_PRIVATE (line 52855) | SQLITE_PRIVATE void sqlite3BtreeEnterCursor(BtCursor *pCur){
  function SQLITE_PRIVATE (line 52858) | SQLITE_PRIVATE void sqlite3BtreeLeaveCursor(BtCursor *pCur){
  function SQLITE_PRIVATE (line 52878) | SQLITE_PRIVATE void sqlite3BtreeEnterAll(sqlite3 *db){
  function SQLITE_PRIVATE (line 52887) | SQLITE_PRIVATE void sqlite3BtreeLeaveAll(sqlite3 *db){
  function SQLITE_PRIVATE (line 52901) | SQLITE_PRIVATE int sqlite3BtreeSharable(Btree *p){
  function SQLITE_PRIVATE (line 52912) | SQLITE_PRIVATE int sqlite3BtreeHoldsAllMutexes(sqlite3 *db){
  function SQLITE_PRIVATE (line 52941) | SQLITE_PRIVATE int sqlite3SchemaMutexHeld(sqlite3 *db, int iDb, Schema *...
  function SQLITE_PRIVATE (line 52965) | SQLITE_PRIVATE void sqlite3BtreeEnter(Btree *p){
  function SQLITE_PRIVATE (line 52968) | SQLITE_PRIVATE void sqlite3BtreeEnterAll(sqlite3 *db){
  function SQLITE_STDCALL (line 53069) | SQLITE_STDCALL sqlite3_enable_shared_cache(int enable){
  function hasSharedCacheTableLock (line 53120) | static int hasSharedCacheTableLock(
  function hasReadConflicts (line 53207) | static int hasReadConflicts(Btree *pBtree, Pgno iRoot){
  function querySharedCacheTableLock (line 53227) | static int querySharedCacheTableLock(Btree *p, Pgno iTab, u8 eLock){
  function setSharedCacheTableLock (line 53299) | static int setSharedCacheTableLock(Btree *p, Pgno iTable, u8 eLock){
  function clearAllSharedCacheTableLocks (line 53363) | static void clearAllSharedCacheTableLocks(Btree *p){
  function downgradeAllSharedCacheTableLocks (line 53407) | static void downgradeAllSharedCacheTableLocks(Btree *p){
  function cursorHoldsMutex (line 53430) | static int cursorHoldsMutex(BtCursor *p){
  function invalidateAllOverflowCache (line 53445) | static void invalidateAllOverflowCache(BtShared *pBt){
  function invalidateIncrblobCursors (line 53467) | static void invalidateIncrblobCursors(
  function btreeSetHasContent (line 53524) | static int btreeSetHasContent(BtShared *pBt, Pgno pgno){
  function btreeGetHasContent (line 53546) | static int btreeGetHasContent(BtShared *pBt, Pgno pgno){
  function btreeClearHasContent (line 53555) | static void btreeClearHasContent(BtShared *pBt){
  function btreeReleaseAllCursorPages (line 53563) | static void btreeReleaseAllCursorPages(BtCursor *pCur){
  function saveCursorPosition (line 53580) | static int saveCursorPosition(BtCursor *pCur){
  function saveAllCursors (line 53640) | static int saveAllCursors(BtShared *pBt, Pgno iRoot, BtCursor *pExcept){
  function saveCursorsOnList (line 53655) | static int SQLITE_NOINLINE saveCursorsOnList(
  function SQLITE_PRIVATE (line 53680) | SQLITE_PRIVATE void sqlite3BtreeClearCursor(BtCursor *pCur){
  function btreeMoveto (line 53692) | static int btreeMoveto(
  function btreeRestoreCursorPosition (line 53732) | static int btreeRestoreCursorPosition(BtCursor *pCur){
  function SQLITE_PRIVATE (line 53771) | SQLITE_PRIVATE int sqlite3BtreeCursorHasMoved(BtCursor *pCur){
  function SQLITE_PRIVATE (line 53788) | SQLITE_PRIVATE int sqlite3BtreeCursorRestore(BtCursor *pCur, int *pDiffe...
  function Pgno (line 53817) | static Pgno ptrmapPageno(BtShared *pBt, Pgno pgno){
  function ptrmapPut (line 53841) | static void ptrmapPut(BtShared *pBt, Pgno key, u8 eType, Pgno parent, in...
  function ptrmapGet (line 53893) | static int ptrmapGet(BtShared *pBt, Pgno key, u8 *pEType, Pgno *pPgno){
  function u8 (line 53946) | static u8 *findOverflowCell(MemPage *pPage, int iCell){
  function btreeParseCellPtr (line 53968) | static void btreeParseCellPtr(
  function btreeParseCell (line 54035) | static void btreeParseCell(
  function u16 (line 54049) | static u16 cellSizePtr(MemPage *pPage, u8 *pCell){
  function u16 (line 54107) | static u16 cellSize(MemPage *pPage, int iCell){
  function ptrmapPutOvflPtr (line 54118) | static void ptrmapPutOvflPtr(MemPage *pPage, u8 *pCell, int *pRC){
  function defragmentPage (line 54142) | static int defragmentPage(MemPage *pPage){
  function u8 (line 54240) | static u8 *pageFindSlot(MemPage *pPg, int nByte, int *pRc, int *pbDefrag){
  function allocateSpace (line 54302) | static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){
  function freeSpace (line 54387) | static int freeSpace(MemPage *pPage, u16 iStart, u16 iSize){
  function decodeFlags (line 54485) | static int decodeFlags(MemPage *pPage, int flagByte){
  function btreeInitPage (line 54536) | static int btreeInitPage(MemPage *pPage){
  function zeroPage (line 54667) | static void zeroPage(MemPage *pPage, int flags){
  function MemPage (line 54703) | static MemPage *btreePageFromDbPage(DbPage *pDbPage, Pgno pgno, BtShared...
  function btreeGetPage (line 54724) | static int btreeGetPage(
  function MemPage (line 54746) | static MemPage *btreePageLookup(BtShared *pBt, Pgno pgno){
  function Pgno (line 54760) | static Pgno btreePagecount(BtShared *pBt){
  function SQLITE_PRIVATE (line 54763) | SQLITE_PRIVATE u32 sqlite3BtreeLastPage(Btree *p){
  function getAndInitPage (line 54777) | static int getAndInitPage(
  function releasePage (line 54808) | static void releasePage(MemPage *pPage){
  function pageReinit (line 54828) | static void pageReinit(DbPage *pData){
  function btreeInvokeBusyHandler (line 54850) | static int btreeInvokeBusyHandler(void *pArg){
  function SQLITE_PRIVATE (line 54878) | SQLITE_PRIVATE int sqlite3BtreeOpen(
  function removeFromSharingList (line 55163) | static int removeFromSharingList(BtShared *pBt){
  function allocateTempSpace (line 55202) | static void allocateTempSpace(BtShared *pBt){
  function freeTempSpace (line 55231) | static void freeTempSpace(BtShared *pBt){
  function SQLITE_PRIVATE (line 55242) | SQLITE_PRIVATE int sqlite3BtreeClose(Btree *p){
  function SQLITE_PRIVATE (line 55312) | SQLITE_PRIVATE int sqlite3BtreeSetCacheSize(Btree *p, int mxPage){
  function SQLITE_PRIVATE (line 55326) | SQLITE_PRIVATE int sqlite3BtreeSetMmapLimit(Btree *p, sqlite3_int64 szMm...
  function SQLITE_PRIVATE (line 55345) | SQLITE_PRIVATE int sqlite3BtreeSetPagerFlags(
  function SQLITE_PRIVATE (line 55362) | SQLITE_PRIVATE int sqlite3BtreeSyncDisabled(Btree *p){
  function SQLITE_PRIVATE (line 55393) | SQLITE_PRIVATE int sqlite3BtreeSetPageSize(Btree *p, int pageSize, int n...
  function SQLITE_PRIVATE (line 55426) | SQLITE_PRIVATE int sqlite3BtreeGetPageSize(Btree *p){
  function SQLITE_PRIVATE (line 55441) | SQLITE_PRIVATE int sqlite3BtreeGetReserveNoMutex(Btree *p){
  function SQLITE_PRIVATE (line 55457) | SQLITE_PRIVATE int sqlite3BtreeGetOptimalReserve(Btree *p){
  function SQLITE_PRIVATE (line 55474) | SQLITE_PRIVATE int sqlite3BtreeMaxPageCount(Btree *p, int mxPage){
  function SQLITE_PRIVATE (line 55487) | SQLITE_PRIVATE int sqlite3BtreeSecureDelete(Btree *p, int newFlag){
  function SQLITE_PRIVATE (line 55506) | SQLITE_PRIVATE int sqlite3BtreeSetAutoVacuum(Btree *p, int autoVacuum){
  function SQLITE_PRIVATE (line 55530) | SQLITE_PRIVATE int sqlite3BtreeGetAutoVacuum(Btree *p){
  function lockBtree (line 55556) | static int lockBtree(BtShared *pBt){
  function countValidCursors (line 55735) | static int countValidCursors(BtShared *pBt, int wrOnly){
  function unlockBtreeIfUnused (line 55754) | static void unlockBtreeIfUnused(BtShared *pBt){
  function newDatabase (line 55771) | static int newDatabase(BtShared *pBt){
  function SQLITE_PRIVATE (line 55815) | SQLITE_PRIVATE int sqlite3BtreeNewDb(Btree *p){
  function SQLITE_PRIVATE (line 55859) | SQLITE_PRIVATE int sqlite3BtreeBeginTrans(Btree *p, int wrflag){
  function setChildPtrmaps (line 56004) | static int setChildPtrmaps(MemPage *pPage){
  function modifyPagePointer (line 56054) | static int modifyPagePointer(MemPage *pPage, Pgno iFrom, Pgno iTo, u8 eT...
  function relocatePage (line 56114) | static int relocatePage(
  function incrVacuumStep (line 56207) | static int incrVacuumStep(BtShared *pBt, Pgno nFin, Pgno iLastPg, int bC...
  function Pgno (line 56303) | static Pgno finalDbSize(BtShared *pBt, Pgno nOrig, Pgno nFree){
  function SQLITE_PRIVATE (line 56329) | SQLITE_PRIVATE int sqlite3BtreeIncrVacuum(Btree *p){
  function autoVacuumCommit (line 56371) | static int autoVacuumCommit(BtShared *pBt){
  function SQLITE_PRIVATE (line 56450) | SQLITE_PRIVATE int sqlite3BtreeCommitPhaseOne(Btree *p, const char *zMas...
  function btreeEndTransaction (line 56477) | static void btreeEndTransaction(Btree *p){
  function SQLITE_PRIVATE (line 56539) | SQLITE_PRIVATE int sqlite3BtreeCommitPhaseTwo(Btree *p, int bCleanup){
  function SQLITE_PRIVATE (line 56571) | SQLITE_PRIVATE int sqlite3BtreeCommit(Btree *p){
  function SQLITE_PRIVATE (line 56608) | SQLITE_PRIVATE int sqlite3BtreeTripAllCursors(Btree *pBtree, int errCode...
  function SQLITE_PRIVATE (line 56651) | SQLITE_PRIVATE int sqlite3BtreeRollback(Btree *p, int tripCode, int writ...
  function SQLITE_PRIVATE (line 56720) | SQLITE_PRIVATE int sqlite3BtreeBeginStmt(Btree *p, int iStatement){
  function SQLITE_PRIVATE (line 56751) | SQLITE_PRIVATE int sqlite3BtreeSavepoint(Btree *p, int op, int iSavepoint){
  function btreeCursor (line 56808) | static int btreeCursor(
  function SQLITE_PRIVATE (line 56861) | SQLITE_PRIVATE int sqlite3BtreeCursor(
  function SQLITE_PRIVATE (line 56883) | SQLITE_PRIVATE int sqlite3BtreeCursorSize(void){
  function SQLITE_PRIVATE (line 56895) | SQLITE_PRIVATE void sqlite3BtreeCursorZero(BtCursor *p){
  function SQLITE_PRIVATE (line 56903) | SQLITE_PRIVATE int sqlite3BtreeCloseCursor(BtCursor *pCur){
  function assertCellInfo (line 56945) | static void assertCellInfo(BtCursor *pCur){
  function getCellInfo (line 56957) | static void getCellInfo(BtCursor *pCur){
  function SQLITE_PRIVATE (line 56984) | SQLITE_PRIVATE int sqlite3BtreeCursorIsValid(BtCursor *pCur){
  function SQLITE_PRIVATE (line 57001) | SQLITE_PRIVATE int sqlite3BtreeKeySize(BtCursor *pCur, i64 *pSize){
  function SQLITE_PRIVATE (line 57021) | SQLITE_PRIVATE int sqlite3BtreeDataSize(BtCursor *pCur, u32 *pSize){
  function getOverflowPage (line 57051) | static int getOverflowPage(
  function copyPayload (line 57119) | static int copyPayload(
  function accessPayload (line 57170) | static int accessPayload(
  function SQLITE_PRIVATE (line 57374) | SQLITE_PRIVATE int sqlite3BtreeKey(BtCursor *pCur, u32 offset, u32 amt, ...
  function SQLITE_PRIVATE (line 57391) | SQLITE_PRIVATE int sqlite3BtreeData(BtCursor *pCur, u32 offset, u32 amt,...
  function SQLITE_PRIVATE (line 57459) | SQLITE_PRIVATE const void *sqlite3BtreeKeyFetch(BtCursor *pCur, u32 *pAmt){
  function SQLITE_PRIVATE (line 57462) | SQLITE_PRIVATE const void *sqlite3BtreeDataFetch(BtCursor *pCur, u32 *pA...
  function moveToChild (line 57476) | static int moveToChild(BtCursor *pCur, u32 newPgno){
  function assertParentIndex (line 57512) | static void assertParentIndex(MemPage *pParent, int iIdx, Pgno iChild){
  function moveToParent (line 57534) | static void moveToParent(BtCursor *pCur){
  function moveToRoot (line 57573) | static int moveToRoot(BtCursor *pCur){
  function moveToLeftmost (line 57646) | static int moveToLeftmost(BtCursor *pCur){
  function moveToRightmost (line 57671) | static int moveToRightmost(BtCursor *pCur){
  function SQLITE_PRIVATE (line 57694) | SQLITE_PRIVATE int sqlite3BtreeFirst(BtCursor *pCur, int *pRes){
  function SQLITE_PRIVATE (line 57717) | SQLITE_PRIVATE int sqlite3BtreeLast(BtCursor *pCur, int *pRes){
  function SQLITE_PRIVATE (line 57786) | SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked(
  function SQLITE_PRIVATE (line 57996) | SQLITE_PRIVATE int sqlite3BtreeEof(BtCursor *pCur){
  function SQLITE_NOINLINE (line 58025) | static SQLITE_NOINLINE int btreeNext(BtCursor *pCur, int *pRes){
  function SQLITE_PRIVATE (line 58092) | SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor *pCur, int *pRes){
  function SQLITE_NOINLINE (line 58135) | static SQLITE_NOINLINE int btreePrevious(BtCursor *pCur, int *pRes){
  function SQLITE_PRIVATE (line 58194) | SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor *pCur, int *pRes){
  function allocateBtreePage (line 58235) | static int allocateBtreePage(
  function freePage2 (line 58563) | static int freePage2(BtShared *pBt, MemPage *pMemPage, Pgno iPage){
  function freePage (line 58690) | static void freePage(MemPage *pPage, int *pRC){
  function clearCell (line 58701) | static int clearCell(
  function fillInCell (line 58780) | static int fillInCell(
  function dropCell (line 58971) | static void dropCell(MemPage *pPage, int idx, int sz, int *pRC){
  function insertCell (line 59025) | static void insertCell(
  function rebuildPage (line 59117) | static void rebuildPage(
  function pageInsertArray (line 59183) | static int pageInsertArray(
  function pageFreeArray (line 59223) | static int pageFreeArray(
  function editPage (line 59275) | static void editPage(
  function balance_quick (line 59412) | static int balance_quick(MemPage *pParent, MemPage *pPage, u8 *pSpace){
  function ptrmapCheckPages (line 59500) | static int ptrmapCheckPages(MemPage **apPage, int nPage){
  function copyNodeContent (line 59553) | static void copyNodeContent(MemPage *pFrom, MemPage *pTo, int *pRC){
  function balance_nonroot (line 59637) | static int balance_nonroot(
  function balance_deeper (line 60330) | static int balance_deeper(MemPage *pRoot, MemPage **ppChild){
  function balance (line 60387) | static int balance(BtCursor *pCur){
  function SQLITE_PRIVATE (line 60524) | SQLITE_PRIVATE int sqlite3BtreeInsert(
  function SQLITE_PRIVATE (line 60674) | SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur){
  function btreeCreateTable (line 60797) | static int btreeCreateTable(Btree *p, int *piTable, int createTabFlags){
  function SQLITE_PRIVATE (line 60939) | SQLITE_PRIVATE int sqlite3BtreeCreateTable(Btree *p, int *piTable, int f...
  function clearDatabasePage (line 60951) | static int clearDatabasePage(
  function SQLITE_PRIVATE (line 61017) | SQLITE_PRIVATE int sqlite3BtreeClearTable(Btree *p, int iTable, int *pnC...
  function SQLITE_PRIVATE (line 61041) | SQLITE_PRIVATE int sqlite3BtreeClearTableOfCursor(BtCursor *pCur){
  function btreeDropTable (line 61065) | static int btreeDropTable(Btree *p, Pgno iTable, int *piMoved){
  function SQLITE_PRIVATE (line 61168) | SQLITE_PRIVATE int sqlite3BtreeDropTable(Btree *p, int iTable, int *piMo...
  function SQLITE_PRIVATE (line 61197) | SQLITE_PRIVATE void sqlite3BtreeGetMeta(Btree *p, int idx, u32 *pMeta){
  function SQLITE_PRIVATE (line 61227) | SQLITE_PRIVATE int sqlite3BtreeUpdateMeta(Btree *p, int idx, u32 iMeta){
  function SQLITE_PRIVATE (line 61260) | SQLITE_PRIVATE int sqlite3BtreeCount(BtCursor *pCur, i64 *pnEntry){
  function SQLITE_PRIVATE (line 61330) | SQLITE_PRIVATE Pager *sqlite3BtreePager(Btree *p){
  function checkAppendMsg (line 61338) | static void checkAppendMsg(
  function getPageReferenced (line 61370) | static int getPageReferenced(IntegrityCk *pCheck, Pgno iPg){
  function setPageReferenced (line 61378) | static void setPageReferenced(IntegrityCk *pCheck, Pgno iPg){
  function checkRef (line 61392) | static int checkRef(IntegrityCk *pCheck, Pgno iPage){
  function checkPtrmap (line 61412) | static void checkPtrmap(
  function checkList (line 61441) | static void checkList(
  function checkTreePage (line 61526) | static int checkTreePage(
  function SQLITE_PRIVATE (line 61782) | SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck(
  function SQLITE_PRIVATE (line 61900) | SQLITE_PRIVATE const char *sqlite3BtreeGetFilename(Btree *p){
  function SQLITE_PRIVATE (line 61913) | SQLITE_PRIVATE const char *sqlite3BtreeGetJournalname(Btree *p){
  function SQLITE_PRIVATE (line 61921) | SQLITE_PRIVATE int sqlite3BtreeIsInTrans(Btree *p){
  function SQLITE_PRIVATE (line 61935) | SQLITE_PRIVATE int sqlite3BtreeCheckpoint(Btree *p, int eMode, int *pnLo...
  function SQLITE_PRIVATE (line 61954) | SQLITE_PRIVATE int sqlite3BtreeIsInReadTrans(Btree *p){
  function SQLITE_PRIVATE (line 61960) | SQLITE_PRIVATE int sqlite3BtreeIsInBackup(Btree *p){
  function SQLITE_PRIVATE (line 61986) | SQLITE_PRIVATE void *sqlite3BtreeSchema(Btree *p, int nBytes, void(*xFre...
  function SQLITE_PRIVATE (line 62002) | SQLITE_PRIVATE int sqlite3BtreeSchemaLocked(Btree *p){
  function SQLITE_PRIVATE (line 62019) | SQLITE_PRIVATE int sqlite3BtreeLockTable(Btree *p, int iTab, u8 isWriteL...
  function SQLITE_PRIVATE (line 62049) | SQLITE_PRIVATE int sqlite3BtreePutData(BtCursor *pCsr, u32 offset, u32 a...
  function SQLITE_PRIVATE (line 62097) | SQLITE_PRIVATE void sqlite3BtreeIncrblobCursor(BtCursor *pCur){
  function SQLITE_PRIVATE (line 62107) | SQLITE_PRIVATE int sqlite3BtreeSetVersion(Btree *pBtree, int iVersion){
  function SQLITE_PRIVATE (line 62141) | SQLITE_PRIVATE void sqlite3BtreeCursorHints(BtCursor *pCsr, unsigned int...
  function SQLITE_PRIVATE (line 62151) | SQLITE_PRIVATE int sqlite3BtreeCursorHasHint(BtCursor *pCsr, unsigned in...
  function SQLITE_PRIVATE (line 62159) | SQLITE_PRIVATE int sqlite3BtreeIsReadonly(Btree *p){
  function SQLITE_PRIVATE (line 62166) | SQLITE_PRIVATE int sqlite3HeaderSizeBtree(void){ return ROUND8(sizeof(Me...
  type sqlite3_backup (line 62188) | struct sqlite3_backup {
  function Btree (line 62249) | static Btree *findBtree(sqlite3 *pErrorDb, sqlite3 *pDb, const char *zDb){
  function setDestPgsz (line 62286) | static int setDestPgsz(sqlite3_backup *p){
  function checkReadTransaction (line 62298) | static int checkReadTransaction(sqlite3 *db, Btree *p){
  function isFatalError (line 62392) | static int isFatalError(int rc){
  function backupOnePage (line 62401) | static int backupOnePage(
  function backupTruncateFile (line 62497) | static int backupTruncateFile(sqlite3_file *pFile, i64 iSize){
  function attachBackupObject (line 62510) | static void attachBackupObject(sqlite3_backup *p){
  function SQLITE_STDCALL (line 62522) | SQLITE_STDCALL sqlite3_backup_step(sqlite3_backup *p, int nPage){
  function SQLITE_STDCALL (line 62767) | SQLITE_STDCALL sqlite3_backup_finish(sqlite3_backup *p){
  function SQLITE_STDCALL (line 62819) | SQLITE_STDCALL sqlite3_backup_remaining(sqlite3_backup *p){
  function SQLITE_STDCALL (line 62833) | SQLITE_STDCALL sqlite3_backup_pagecount(sqlite3_backup *p){
  function SQLITE_PRIVATE (line 62855) | SQLITE_PRIVATE void sqlite3BackupUpdate(sqlite3_backup *pBackup, Pgno iP...
  function SQLITE_PRIVATE (line 62888) | SQLITE_PRIVATE void sqlite3BackupRestart(sqlite3_backup *pBackup){
  function SQLITE_PRIVATE (line 62905) | SQLITE_PRIVATE int sqlite3BtreeCopyFile(Btree *pTo, Btree *pFrom){
  function SQLITE_PRIVATE (line 62983) | SQLITE_PRIVATE int sqlite3VdbeCheckMemInvariants(Mem *p){
  function SQLITE_PRIVATE (line 63036) | SQLITE_PRIVATE int sqlite3VdbeChangeEncoding(Mem *pMem, int desiredEnc){
  function sqlite3VdbeMemGrow (line 63071) | int sqlite3VdbeMemGrow(Mem *pMem, int n, int bPreserve){
  function SQLITE_PRIVATE (line 63127) | SQLITE_PRIVATE int sqlite3VdbeMemClearAndResize(Mem *pMem, int szNew){
  function SQLITE_PRIVATE (line 63145) | SQLITE_PRIVATE int sqlite3VdbeMemMakeWriteable(Mem *pMem){
  function SQLITE_PRIVATE (line 63171) | SQLITE_PRIVATE int sqlite3VdbeMemExpandBlob(Mem *pMem){
  function SQLITE_NOINLINE (line 63199) | static SQLITE_NOINLINE int vdbeMemAddTerminator(Mem *pMem){
  function SQLITE_PRIVATE (line 63212) | SQLITE_PRIVATE int sqlite3VdbeMemNulTerminate(Mem *pMem){
  function SQLITE_PRIVATE (line 63237) | SQLITE_PRIVATE int sqlite3VdbeMemStringify(Mem *pMem, u8 enc, u8 bForce){
  function SQLITE_PRIVATE (line 63281) | SQLITE_PRIVATE int sqlite3VdbeMemFinalize(Mem *pMem, FuncDef *pFunc){
  function SQLITE_NOINLINE (line 63313) | static SQLITE_NOINLINE void vdbeMemClearExternAndSetNull(Mem *p){
  function SQLITE_NOINLINE (line 63343) | static SQLITE_NOINLINE void vdbeMemClear(Mem *p){
  function SQLITE_PRIVATE (line 63364) | SQLITE_PRIVATE void sqlite3VdbeMemRelease(Mem *p){
  function i64 (line 63376) | static i64 doubleToInt64(double r){
  function SQLITE_PRIVATE (line 63412) | SQLITE_PRIVATE i64 sqlite3VdbeIntValue(Mem *pMem){
  function SQLITE_PRIVATE (line 63437) | SQLITE_PRIVATE double sqlite3VdbeRealValue(Mem *pMem){
  function SQLITE_PRIVATE (line 63459) | SQLITE_PRIVATE void sqlite3VdbeIntegerAffinity(Mem *pMem){
  function SQLITE_PRIVATE (line 63487) | SQLITE_PRIVATE int sqlite3VdbeMemIntegerify(Mem *pMem){
  function SQLITE_PRIVATE (line 63501) | SQLITE_PRIVATE int sqlite3VdbeMemRealify(Mem *pMem){
  function SQLITE_PRIVATE (line 63518) | SQLITE_PRIVATE int sqlite3VdbeMemNumerify(Mem *pMem){
  function SQLITE_PRIVATE (line 63542) | SQLITE_PRIVATE void sqlite3VdbeMemCast(Mem *pMem, u8 aff, u8 encoding){
  function SQLITE_PRIVATE (line 63584) | SQLITE_PRIVATE void sqlite3VdbeMemInit(Mem *pMem, sqlite3 *db, u16 flags){
  function SQLITE_PRIVATE (line 63604) | SQLITE_PRIVATE void sqlite3VdbeMemSetNull(Mem *pMem){
  function SQLITE_PRIVATE (line 63611) | SQLITE_PRIVATE void sqlite3ValueSetNull(sqlite3_value *p){
  function SQLITE_PRIVATE (line 63619) | SQLITE_PRIVATE void sqlite3VdbeMemSetZeroBlob(Mem *pMem, int n){
  function SQLITE_NOINLINE (line 63634) | static SQLITE_NOINLINE void vdbeReleaseAndSetInt64(Mem *pMem, i64 val){
  function SQLITE_PRIVATE (line 63644) | SQLITE_PRIVATE void sqlite3VdbeMemSetInt64(Mem *pMem, i64 val){
  function SQLITE_PRIVATE (line 63658) | SQLITE_PRIVATE void sqlite3VdbeMemSetDouble(Mem *pMem, double val){
  function SQLITE_PRIVATE (line 63671) | SQLITE_PRIVATE void sqlite3VdbeMemSetRowSet(Mem *pMem){
  function SQLITE_PRIVATE (line 63693) | SQLITE_PRIVATE int sqlite3VdbeMemTooBig(Mem *p){
  function SQLITE_PRIVATE (line 63714) | SQLITE_PRIVATE void sqlite3VdbeMemAboutToChange(Vdbe *pVdbe, Mem *pMem){
  function SQLITE_PRIVATE (line 63738) | SQLITE_PRIVATE void sqlite3VdbeMemShallowCopy(Mem *pTo, const Mem *pFrom...
  function SQLITE_PRIVATE (line 63754) | SQLITE_PRIVATE int sqlite3VdbeMemCopy(Mem *pTo, const Mem *pFrom){
  function SQLITE_PRIVATE (line 63778) | SQLITE_PRIVATE void sqlite3VdbeMemMove(Mem *pTo, Mem *pFrom){
  function SQLITE_PRIVATE (line 63804) | SQLITE_PRIVATE int sqlite3VdbeMemSetStr(
  function SQLITE_PRIVATE (line 63904) | SQLITE_PRIVATE int sqlite3VdbeMemFromBtree(
  function SQLITE_NOINLINE (line 63959) | static SQLITE_NOINLINE const void *valueToText(sqlite3_value* pVal, u8 e...
  function SQLITE_PRIVATE (line 64003) | SQLITE_PRIVATE const void *sqlite3ValueText(sqlite3_value* pVal, u8 enc){
  function SQLITE_PRIVATE (line 64020) | SQLITE_PRIVATE sqlite3_value *sqlite3ValueNew(sqlite3 *db){
  type ValueNewStat4Ctx (line 64033) | struct ValueNewStat4Ctx {
  function sqlite3_value (line 64051) | static sqlite3_value *valueNew(sqlite3 *db, struct ValueNewStat4Ctx *p){
  function valueFromFunction (line 64113) | static int valueFromFunction(
  function valueFromExpr (line 64209) | static int valueFromExpr(
  function SQLITE_PRIVATE (line 64344) | SQLITE_PRIVATE int sqlite3ValueFromExpr(
  function recordFunc (line 64363) | static void recordFunc(
  function SQLITE_PRIVATE (line 64398) | SQLITE_PRIVATE void sqlite3AnalyzeFunctions(void){
  function stat4ValueFromExpr (line 64428) | static int stat4ValueFromExpr(
  function SQLITE_PRIVATE (line 64502) | SQLITE_PRIVATE int sqlite3Stat4ProbeSetValue(
  function SQLITE_PRIVATE (line 64536) | SQLITE_PRIVATE int sqlite3Stat4ValueFromExpr(
  function SQLITE_PRIVATE (line 64553) | SQLITE_PRIVATE int sqlite3Stat4Column(
  function SQLITE_PRIVATE (line 64598) | SQLITE_PRIVATE void sqlite3Stat4ProbeFree(UnpackedRecord *pRec){
  function SQLITE_PRIVATE (line 64616) | SQLITE_PRIVATE void sqlite3ValueSetStr(
  function SQLITE_PRIVATE (line 64629) | SQLITE_PRIVATE void sqlite3ValueFree(sqlite3_value *v){
  function SQLITE_PRIVATE (line 64639) | SQLITE_PRIVATE int sqlite3ValueBytes(sqlite3_value *pVal, u8 enc){
  function SQLITE_PRIVATE (line 64671) | SQLITE_PRIVATE Vdbe *sqlite3VdbeCreate(Parse *pParse){
  function SQLITE_PRIVATE (line 64694) | SQLITE_PRIVATE void sqlite3VdbeSetSql(Vdbe *p, const char *z, int n, int...
  function SQLITE_API (line 64708) | SQLITE_API const char *SQLITE_STDCALL sqlite3_sql(sqlite3_stmt *pStmt){
  function SQLITE_PRIVATE (line 64716) | SQLITE_PRIVATE void sqlite3VdbeSwap(Vdbe *pA, Vdbe *pB){
  function growOpArray (line 64744) | static int growOpArray(Vdbe *v, int nOp){
  function test_addop_breakpoint (line 64777) | static void test_addop_breakpoint(void){
  function SQLITE_PRIVATE (line 64799) | SQLITE_PRIVATE int sqlite3VdbeAddOp3(Vdbe *p, int op, int p1, int p2, in...
  function SQLITE_PRIVATE (line 64847) | SQLITE_PRIVATE int sqlite3VdbeAddOp0(Vdbe *p, int op){
  function SQLITE_PRIVATE (line 64850) | SQLITE_PRIVATE int sqlite3VdbeAddOp1(Vdbe *p, int op, int p1){
  function SQLITE_PRIVATE (line 64853) | SQLITE_PRIVATE int sqlite3VdbeAddOp2(Vdbe *p, int op, int p1, int p2){
  function SQLITE_PRIVATE (line 64861) | SQLITE_PRIVATE int sqlite3VdbeAddOp4(
  function SQLITE_PRIVATE (line 64883) | SQLITE_PRIVATE void sqlite3VdbeAddParseSchemaOp(Vdbe *p, int iDb, char *...
  function SQLITE_PRIVATE (line 64893) | SQLITE_PRIVATE int sqlite3VdbeAddOp4Int(
  function SQLITE_PRIVATE (line 64920) | SQLITE_PRIVATE int sqlite3VdbeMakeLabel(Vdbe *v){
  function SQLITE_PRIVATE (line 64939) | SQLITE_PRIVATE void sqlite3VdbeResolveLabel(Vdbe *v, int x){
  function SQLITE_PRIVATE (line 64953) | SQLITE_PRIVATE void sqlite3VdbeRunOnlyOnce(Vdbe *p){
  type VdbeOpIter (line 64975) | typedef struct VdbeOpIter VdbeOpIter;
  type VdbeOpIter (line 64976) | struct VdbeOpIter {
  function Op (line 64983) | static Op *opIterNext(VdbeOpIter *p){
  function SQLITE_PRIVATE (line 65047) | SQLITE_PRIVATE int sqlite3VdbeAssertMayAbort(Vdbe *v, int mayAbort){
  function resolveP2Values (line 65094) | static void resolveP2Values(Vdbe *p, int *pMaxFuncArgs){
  function SQLITE_PRIVATE (line 65176) | SQLITE_PRIVATE int sqlite3VdbeCurrentAddr(Vdbe *p){
  function SQLITE_PRIVATE (line 65192) | SQLITE_PRIVATE VdbeOp *sqlite3VdbeTakeOpArray(Vdbe *p, int *pnOp, int *p...
  function SQLITE_PRIVATE (line 65209) | SQLITE_PRIVATE int sqlite3VdbeAddOpList(Vdbe *p, int nOp, VdbeOpList con...
  function SQLITE_PRIVATE (line 65257) | SQLITE_PRIVATE void sqlite3VdbeScanStatus(
  function SQLITE_PRIVATE (line 65287) | SQLITE_PRIVATE void sqlite3VdbeChangeP1(Vdbe *p, u32 addr, int val){
  function SQLITE_PRIVATE (line 65298) | SQLITE_PRIVATE void sqlite3VdbeChangeP2(Vdbe *p, u32 addr, int val){
  function SQLITE_PRIVATE (line 65308) | SQLITE_PRIVATE void sqlite3VdbeChangeP3(Vdbe *p, u32 addr, int val){
  function SQLITE_PRIVATE (line 65319) | SQLITE_PRIVATE void sqlite3VdbeChangeP5(Vdbe *p, u8 val){
  function SQLITE_PRIVATE (line 65331) | SQLITE_PRIVATE void sqlite3VdbeJumpHere(Vdbe *p, int addr){
  function freeEphemeralFunction (line 65341) | static void freeEphemeralFunction(sqlite3 *db, FuncDef *pDef){
  function freeP4 (line 65352) | static void freeP4(sqlite3 *db, int p4type, void *p4){
  function vdbeFreeOpArray (line 65398) | static void vdbeFreeOpArray(sqlite3 *db, Op *aOp, int nOp){
  function SQLITE_PRIVATE (line 65416) | SQLITE_PRIVATE void sqlite3VdbeLinkSubProgram(Vdbe *pVdbe, SubProgram *p){
  function SQLITE_PRIVATE (line 65424) | SQLITE_PRIVATE void sqlite3VdbeChangeToNoop(Vdbe *p, int addr){
  function SQLITE_PRIVATE (line 65439) | SQLITE_PRIVATE int sqlite3VdbeDeletePriorOpcode(Vdbe *p, u8 op){
  function SQLITE_PRIVATE (line 65465) | SQLITE_PRIVATE void sqlite3VdbeChangeP4(Vdbe *p, int addr, const char *z...
  function SQLITE_PRIVATE (line 65518) | SQLITE_PRIVATE void sqlite3VdbeSetP4KeyInfo(Parse *pParse, Index *pIdx){
  function vdbeVComment (line 65533) | static void vdbeVComment(Vdbe *p, const char *zFormat, va_list ap){
  function SQLITE_PRIVATE (line 65542) | SQLITE_PRIVATE void sqlite3VdbeComment(Vdbe *p, const char *zFormat, ...){
  function SQLITE_PRIVATE (line 65550) | SQLITE_PRIVATE void sqlite3VdbeNoopComment(Vdbe *p, const char *zFormat,...
  function SQLITE_PRIVATE (line 65565) | SQLITE_PRIVATE void sqlite3VdbeSetLineNumber(Vdbe *v, int iLine){
  function SQLITE_PRIVATE (line 65583) | SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe *p, int addr){
  function translateP (line 65604) | static int translateP(char c, const Op *pOp){
  function displayComment (line 65625) | static int displayComment(
  function SQLITE_PRIVATE (line 65808) | SQLITE_PRIVATE void sqlite3VdbeUsesBtree(Vdbe *p, int i){
  function SQLITE_PRIVATE (line 65839) | SQLITE_PRIVATE void sqlite3VdbeEnter(Vdbe *p){
  function SQLITE_PRIVATE (line 65860) | SQLITE_PRIVATE void sqlite3VdbeLeave(Vdbe *p){
  function SQLITE_PRIVATE (line 65881) | SQLITE_PRIVATE void sqlite3VdbePrintOp(FILE *pOut, int pc, Op *pOp){
  function releaseMemArray (line 65907) | static void releaseMemArray(Mem *p, int N){
  function SQLITE_PRIVATE (line 65955) | SQLITE_PRIVATE void sqlite3VdbeFrameDelete(VdbeFrame *p){
  function SQLITE_PRIVATE (line 65982) | SQLITE_PRIVATE int sqlite3VdbeList(
  function SQLITE_PRIVATE (line 66161) | SQLITE_PRIVATE void sqlite3VdbePrintSql(Vdbe *p){
  function SQLITE_PRIVATE (line 66180) | SQLITE_PRIVATE void sqlite3VdbeIOTraceSql(Vdbe *p){
  function SQLITE_PRIVATE (line 66250) | SQLITE_PRIVATE void sqlite3VdbeRewind(Vdbe *p){
  function SQLITE_PRIVATE (line 66304) | SQLITE_PRIVATE void sqlite3VdbeMakeReady(
  function SQLITE_PRIVATE (line 66419) | SQLITE_PRIVATE void sqlite3VdbeFreeCursor(Vdbe *p, VdbeCursor *pCx){
  function SQLITE_PRIVATE (line 66447) | SQLITE_PRIVATE int sqlite3VdbeFrameRestore(VdbeFrame *pFrame){
  function closeAllCursors (line 66474) | static void closeAllCursors(Vdbe *p){
  function Cleanup (line 66511) | static void Cleanup(Vdbe *p){
  function SQLITE_PRIVATE (line 66535) | SQLITE_PRIVATE void sqlite3VdbeSetNumCols(Vdbe *p, int nResColumn){
  function SQLITE_PRIVATE (line 66563) | SQLITE_PRIVATE int sqlite3VdbeSetColName(
  function vdbeCommit (line 66591) | static int vdbeCommit(sqlite3 *db, Vdbe *p){
  function checkActiveVdbeCnt (line 66838) | static void checkActiveVdbeCnt(sqlite3 *db){
  function SQLITE_PRIVATE (line 66870) | SQLITE_PRIVATE int sqlite3VdbeCloseStatement(Vdbe *p, int eOp){
  function SQLITE_PRIVATE (line 66936) | SQLITE_PRIVATE int sqlite3VdbeCheckFk(Vdbe *p, int deferred){
  function SQLITE_PRIVATE (line 66963) | SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe *p){
  function SQLITE_PRIVATE (line 67165) | SQLITE_PRIVATE void sqlite3VdbeResetStepResult(Vdbe *p){
  function SQLITE_PRIVATE (line 67177) | SQLITE_PRIVATE int sqlite3VdbeTransferError(Vdbe *p){
  function vdbeInvokeSqllog (line 67199) | static void vdbeInvokeSqllog(Vdbe *v){
  function SQLITE_PRIVATE (line 67226) | SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe *p){
  function SQLITE_PRIVATE (line 67306) | SQLITE_PRIVATE int sqlite3VdbeFinalize(Vdbe *p){
  function SQLITE_PRIVATE (line 67332) | SQLITE_PRIVATE void sqlite3VdbeDeleteAuxData(Vdbe *pVdbe, int iOp, int m...
  function SQLITE_PRIVATE (line 67359) | SQLITE_PRIVATE void sqlite3VdbeClearObject(sqlite3 *db, Vdbe *p){
  function SQLITE_PRIVATE (line 67386) | SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe *p){
  function handleDeferredMoveto (line 67412) | static int SQLITE_NOINLINE handleDeferredMoveto(VdbeCursor *p){
  function handleMovedCursor (line 67437) | static int SQLITE_NOINLINE handleMovedCursor(VdbeCursor *p){
  function SQLITE_PRIVATE (line 67451) | SQLITE_PRIVATE int sqlite3VdbeCursorRestore(VdbeCursor *p){
  function SQLITE_PRIVATE (line 67471) | SQLITE_PRIVATE int sqlite3VdbeCursorMoveto(VdbeCursor *p){
  function SQLITE_PRIVATE (line 67526) | SQLITE_PRIVATE u32 sqlite3VdbeSerialType(Mem *pMem, int file_format){
  function SQLITE_PRIVATE (line 67567) | SQLITE_PRIVATE u32 sqlite3VdbeSerialTypeLen(u32 serial_type){
  function u64 (line 67611) | static u64 floatSwap(u64 in){
  function SQLITE_PRIVATE (line 67642) | SQLITE_PRIVATE u32 sqlite3VdbeSerialPut(u8 *buf, Mem *pMem, u32 serial_t...
  function u32 (line 67696) | static u32 SQLITE_NOINLINE serialGet(
  function SQLITE_PRIVATE (line 67732) | SQLITE_PRIVATE u32 sqlite3VdbeSerialGet(
  function SQLITE_PRIVATE (line 67827) | SQLITE_PRIVATE UnpackedRecord *sqlite3VdbeAllocUnpackedRecord(
  function SQLITE_PRIVATE (line 67864) | SQLITE_PRIVATE void sqlite3VdbeRecordUnpack(
  function vdbeRecordCompareDebug (line 67910) | static int vdbeRecordCompareDebug(
  function vdbeAssertFieldCountWithinLimits (line 68014) | static void vdbeAssertFieldCountWithinLimits(
  function vdbeCompareMemString (line 68044) | static int vdbeCompareMemString(
  function SQLITE_NOINLINE (line 68081) | static SQLITE_NOINLINE int sqlite3BlobCompare(const Mem *pB1, const Mem ...
  function SQLITE_PRIVATE (line 68097) | SQLITE_PRIVATE int sqlite3MemCompare(const Mem *pMem1, const Mem *pMem2,...
  function i64 (line 68183) | static i64 vdbeRecordDecodeInt(u32 serial_type, const u8 *aKey){
  function vdbeRecordCompareWithSkip (line 68238) | static int vdbeRecordCompareWithSkip(
  function SQLITE_PRIVATE (line 68420) | SQLITE_PRIVATE int sqlite3VdbeRecordCompare(
  function vdbeRecordCompareInt (line 68437) | static int vdbeRecordCompareInt(
  function vdbeRecordCompareString (line 68529) | static int vdbeRecordCompareString(
  function SQLITE_PRIVATE (line 68588) | SQLITE_PRIVATE RecordCompare sqlite3VdbeFindCompare(UnpackedRecord *p){
  function SQLITE_PRIVATE (line 68634) | SQLITE_PRIVATE int sqlite3VdbeIdxRowid(sqlite3 *db, BtCursor *pCur, i64 ...
  function SQLITE_PRIVATE (line 68712) | SQLITE_PRIVATE int sqlite3VdbeIdxKeyCompare(
  function SQLITE_PRIVATE (line 68746) | SQLITE_PRIVATE void sqlite3VdbeSetChanges(sqlite3 *db, int nChange){
  function SQLITE_PRIVATE (line 68756) | SQLITE_PRIVATE void sqlite3VdbeCountChanges(Vdbe *v){
  function SQLITE_PRIVATE (line 68770) | SQLITE_PRIVATE void sqlite3ExpirePreparedStatements(sqlite3 *db){
  function SQLITE_PRIVATE (line 68780) | SQLITE_PRIVATE sqlite3 *sqlite3VdbeDb(Vdbe *v){
  function SQLITE_PRIVATE (line 68792) | SQLITE_PRIVATE sqlite3_value *sqlite3VdbeGetBoundValue(Vdbe *v, int iVar...
  function SQLITE_PRIVATE (line 68813) | SQLITE_PRIVATE void sqlite3VdbeSetVarmask(Vdbe *v, int iVar){
  function SQLITE_PRIVATE (line 68828) | SQLITE_PRIVATE void sqlite3VtabImportErrmsg(Vdbe *p, sqlite3_vtab *pVtab){
  function SQLITE_STDCALL (line 68864) | SQLITE_STDCALL sqlite3_expired(sqlite3_stmt *pStmt){
  function vdbeSafety (line 68875) | static int vdbeSafety(Vdbe *p){
  function vdbeSafetyNotNull (line 68883) | static int vdbeSafetyNotNull(Vdbe *p){
  function SQLITE_STDCALL (line 68901) | SQLITE_STDCALL sqlite3_finalize(sqlite3_stmt *pStmt){
  function SQLITE_STDCALL (line 68927) | SQLITE_STDCALL sqlite3_reset(sqlite3_stmt *pStmt){
  function SQLITE_STDCALL (line 68946) | SQLITE_STDCALL sqlite3_clear_bindings(sqlite3_stmt *pStmt){
  function SQLITE_API (line 68970) | SQLITE_API const void *SQLITE_STDCALL sqlite3_value_blob(sqlite3_value *...
  function SQLITE_STDCALL (line 68980) | SQLITE_STDCALL sqlite3_value_bytes(sqlite3_value *pVal){
  function SQLITE_STDCALL (line 68983) | SQLITE_STDCALL sqlite3_value_bytes16(sqlite3_value *pVal){
  function SQLITE_STDCALL (line 68986) | SQLITE_STDCALL sqlite3_value_double(sqlite3_value *pVal){
  function SQLITE_STDCALL (line 68989) | SQLITE_STDCALL sqlite3_value_int(sqlite3_value *pVal){
  function SQLITE_STDCALL (line 68992) | SQLITE_STDCALL sqlite3_value_int64(sqlite3_value *pVal){
  function SQLITE_API (line 68999) | SQLITE_API const void *SQLITE_STDCALL sqlite3_value_text16(sqlite3_value...
  function SQLITE_API (line 69002) | SQLITE_API const void *SQLITE_STDCALL sqlite3_value_text16be(sqlite3_val...
  function SQLITE_API (line 69005) | SQLITE_API const void *SQLITE_STDCALL sqlite3_value_text16le(sqlite3_val...
  function SQLITE_STDCALL (line 69013) | SQLITE_STDCALL sqlite3_value_type(sqlite3_value* pVal){
  function setResultStrOrError (line 69062) | static void setResultStrOrError(
  function invokeValueDestructor (line 69073) | static int invokeValueDestructor(
  function SQLITE_STDCALL (line 69089) | SQLITE_STDCALL sqlite3_result_blob(
  function SQLITE_STDCALL (line 69099) | SQLITE_STDCALL sqlite3_result_blob64(
  function SQLITE_STDCALL (line 69113) | SQLITE_STDCALL sqlite3_result_double(sqlite3_context *pCtx, double rVal){
  function SQLITE_STDCALL (line 69117) | SQLITE_STDCALL sqlite3_result_error(sqlite3_context *pCtx, const char *z...
  function SQLITE_STDCALL (line 69124) | SQLITE_STDCALL sqlite3_result_error16(sqlite3_context *pCtx, const void ...
  function SQLITE_STDCALL (line 69131) | SQLITE_STDCALL sqlite3_result_int(sqlite3_context *pCtx, int iVal){
  function SQLITE_STDCALL (line 69135) | SQLITE_STDCALL sqlite3_result_int64(sqlite3_context *pCtx, i64 iVal){
  function SQLITE_STDCALL (line 69139) | SQLITE_STDCALL sqlite3_result_null(sqlite3_context *pCtx){
  function SQLITE_STDCALL (line 69143) | SQLITE_STDCALL sqlite3_result_text(
  function SQLITE_STDCALL (line 69152) | SQLITE_STDCALL sqlite3_result_text64(
  function SQLITE_STDCALL (line 69169) | SQLITE_STDCALL sqlite3_result_text16(
  function SQLITE_STDCALL (line 69178) | SQLITE_STDCALL sqlite3_result_text16be(
  function SQLITE_STDCALL (line 69187) | SQLITE_STDCALL sqlite3_result_text16le(
  function SQLITE_STDCALL (line 69197) | SQLITE_STDCALL sqlite3_result_value(sqlite3_context *pCtx, sqlite3_value...
  function SQLITE_STDCALL (line 69201) | SQLITE_STDCALL sqlite3_result_zeroblob(sqlite3_context *pCtx, int n){
  function SQLITE_STDCALL (line 69205) | SQLITE_STDCALL sqlite3_result_error_code(sqlite3_context *pCtx, int errC...
  function SQLITE_STDCALL (line 69218) | SQLITE_STDCALL sqlite3_result_error_toobig(sqlite3_context *pCtx){
  function SQLITE_STDCALL (line 69227) | SQLITE_STDCALL sqlite3_result_error_nomem(sqlite3_context *pCtx){
  function doWalCallbacks (line 69239) | static int doWalCallbacks(sqlite3 *db){
  function sqlite3Step (line 69268) | static int sqlite3Step(Vdbe *p){
  function SQLITE_STDCALL (line 69400) | SQLITE_STDCALL sqlite3_step(sqlite3_stmt *pStmt){
  function SQLITE_API (line 69451) | SQLITE_API void *SQLITE_STDCALL sqlite3_user_data(sqlite3_context *p){
  function SQLITE_API (line 69466) | SQLITE_API sqlite3 *SQLITE_STDCALL sqlite3_context_db_handle(sqlite3_con...
  function SQLITE_PRIVATE (line 69478) | SQLITE_PRIVATE sqlite3_int64 sqlite3StmtCurrentTime(sqlite3_context *p){
  function SQLITE_PRIVATE (line 69502) | SQLITE_PRIVATE void sqlite3InvalidFunction(
  function SQLITE_NOINLINE (line 69520) | static SQLITE_NOINLINE void *createAggContext(sqlite3_context *p, int nB...
  function SQLITE_API (line 69542) | SQLITE_API void *SQLITE_STDCALL sqlite3_aggregate_context(sqlite3_contex...
  function SQLITE_API (line 69557) | SQLITE_API void *SQLITE_STDCALL sqlite3_get_auxdata(sqlite3_context *pCt...
  function SQLITE_STDCALL (line 69578) | SQLITE_STDCALL sqlite3_set_auxdata(
  function SQLITE_STDCALL (line 69633) | SQLITE_STDCALL sqlite3_aggregate_count(sqlite3_context *p){
  function SQLITE_STDCALL (line 69642) | SQLITE_STDCALL sqlite3_column_count(sqlite3_stmt *pStmt){
  function SQLITE_STDCALL (line 69651) | SQLITE_STDCALL sqlite3_data_count(sqlite3_stmt *pStmt){
  function Mem (line 69699) | static Mem *columnMem(sqlite3_stmt *pStmt, int i){
  function columnMallocFailure (line 69735) | static void columnMallocFailure(sqlite3_stmt *pStmt)
  function SQLITE_API (line 69753) | SQLITE_API const void *SQLITE_STDCALL sqlite3_column_blob(sqlite3_stmt *...
  function SQLITE_STDCALL (line 69763) | SQLITE_STDCALL sqlite3_column_bytes(sqlite3_stmt *pStmt, int i){
  function SQLITE_STDCALL (line 69768) | SQLITE_STDCALL sqlite3_column_bytes16(sqlite3_stmt *pStmt, int i){
  function SQLITE_STDCALL (line 69773) | SQLITE_STDCALL sqlite3_column_double(sqlite3_stmt *pStmt, int i){
  function SQLITE_STDCALL (line 69778) | SQLITE_STDCALL sqlite3_column_int(sqlite3_stmt *pStmt, int i){
  function SQLITE_STDCALL (line 69783) | SQLITE_STDCALL sqlite3_column_int64(sqlite3_stmt *pStmt, int i){
  function SQLITE_API (line 69803) | SQLITE_API const void *SQLITE_STDCALL sqlite3_column_text16(sqlite3_stmt...
  function SQLITE_STDCALL (line 69809) | SQLITE_STDCALL sqlite3_column_type(sqlite3_stmt *pStmt, int i){
  function SQLITE_API (line 69873) | SQLITE_API const char *SQLITE_STDCALL sqlite3_column_name(sqlite3_stmt *...
  function SQLITE_API (line 69878) | SQLITE_API const void *SQLITE_STDCALL sqlite3_column_name16(sqlite3_stmt...
  function SQLITE_API (line 69898) | SQLITE_API const char *SQLITE_STDCALL sqlite3_column_decltype(sqlite3_st...
  function SQLITE_API (line 69903) | SQLITE_API const void *SQLITE_STDCALL sqlite3_column_decltype16(sqlite3_...
  function SQLITE_API (line 69916) | SQLITE_API const char *SQLITE_STDCALL sqlite3_column_database_name(sqlit...
  function SQLITE_API (line 69921) | SQLITE_API const void *SQLITE_STDCALL sqlite3_column_database_name16(sql...
  function SQLITE_API (line 69932) | SQLITE_API const char *SQLITE_STDCALL sqlite3_column_table_name(sqlite3_...
  function SQLITE_API (line 69937) | SQLITE_API const void *SQLITE_STDCALL sqlite3_column_table_name16(sqlite...
  function SQLITE_API (line 69948) | SQLITE_API const char *SQLITE_STDCALL sqlite3_column_origin_name(sqlite3...
  function SQLITE_API (line 69953) | SQLITE_API const void *SQLITE_STDCALL sqlite3_column_origin_name16(sqlit...
  function vdbeUnbind (line 69976) | static int vdbeUnbind(Vdbe *p, int i){
  function bindText (line 70020) | static int bindText(
  function SQLITE_STDCALL (line 70054) | SQLITE_STDCALL sqlite3_bind_blob(
  function SQLITE_STDCALL (line 70063) | SQLITE_STDCALL sqlite3_bind_blob64(
  function SQLITE_STDCALL (line 70077) | SQLITE_STDCALL sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rV...
  function SQLITE_STDCALL (line 70087) | SQLITE_STDCALL sqlite3_bind_int(sqlite3_stmt *p, int i, int iValue){
  function SQLITE_STDCALL (line 70090) | SQLITE_STDCALL sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int...
  function SQLITE_STDCALL (line 70100) | SQLITE_STDCALL sqlite3_bind_null(sqlite3_stmt *pStmt, int i){
  function SQLITE_STDCALL (line 70109) | SQLITE_STDCALL sqlite3_bind_text(
  function SQLITE_STDCALL (line 70118) | SQLITE_STDCALL sqlite3_bind_text64(
  function SQLITE_STDCALL (line 70135) | SQLITE_STDCALL sqlite3_bind_text16(
  function SQLITE_STDCALL (line 70145) | SQLITE_STDCALL sqlite3_bind_value(sqlite3_stmt *pStmt, int i, const sqli...
  function SQLITE_STDCALL (line 70176) | SQLITE_STDCALL sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){
  function SQLITE_STDCALL (line 70191) | SQLITE_STDCALL sqlite3_bind_parameter_count(sqlite3_stmt *pStmt){
  function SQLITE_API (line 70202) | SQLITE_API const char *SQLITE_STDCALL sqlite3_bind_parameter_name(sqlite...
  function SQLITE_PRIVATE (line 70215) | SQLITE_PRIVATE int sqlite3VdbeParameterIndex(Vdbe *p, const char *zName,...
  function SQLITE_STDCALL (line 70230) | SQLITE_STDCALL sqlite3_bind_parameter_index(sqlite3_stmt *pStmt, const c...
  function SQLITE_PRIVATE (line 70237) | SQLITE_PRIVATE int sqlite3TransferBindings(sqlite3_stmt *pFromStmt, sqli...
  function SQLITE_STDCALL (line 70264) | SQLITE_STDCALL sqlite3_transfer_bindings(sqlite3_stmt *pFromStmt, sqlite...
  function SQLITE_API (line 70286) | SQLITE_API sqlite3 *SQLITE_STDCALL sqlite3_db_handle(sqlite3_stmt *pStmt){
  function SQLITE_STDCALL (line 70294) | SQLITE_STDCALL sqlite3_stmt_readonly(sqlite3_stmt *pStmt){
  function SQLITE_STDCALL (line 70301) | SQLITE_STDCALL sqlite3_stmt_busy(sqlite3_stmt *pStmt){
  function SQLITE_STDCALL (line 70333) | SQLITE_STDCALL sqlite3_stmt_status(sqlite3_stmt *pStmt, int op, int rese...
  function SQLITE_STDCALL (line 70351) | SQLITE_STDCALL sqlite3_stmt_scanstatus(
  function SQLITE_STDCALL (line 70410) | SQLITE_STDCALL sqlite3_stmt_scanstatus_reset(sqlite3_stmt *pStmt){
  function findNextHostParameter (line 70444) | static int findNextHostParameter(const char *zSql, int *pnToken){
  function SQLITE_PRIVATE (line 70487) | SQLITE_PRIVATE char *sqlite3VdbeExpandSql(
  function updateMaxBlobsize (line 70683) | static void updateMaxBlobsize(Mem *p){
  function vdbeTakeBranch (line 70731) | static void vdbeTakeBranch(int iSrcLine, u8 I, u8 M){
  function VdbeCursor (line 70775) | static VdbeCursor *allocateCursor(
  function applyNumericAffinity (line 70843) | static void applyNumericAffinity(Mem *pRec, int bTryForInt){
  function applyAffinity (line 70877) | static void applyAffinity(
  function SQLITE_STDCALL (line 70909) | SQLITE_STDCALL sqlite3_value_numeric_type(sqlite3_value *pVal){
  function SQLITE_PRIVATE (line 70923) | SQLITE_PRIVATE void sqlite3ValueApplyAffinity(
  function u16 (line 70937) | static u16 SQLITE_NOINLINE computeNumericType(Mem *pMem){
  function u16 (line 70956) | static u16 numericType(Mem *pMem){
  function SQLITE_PRIVATE (line 70971) | SQLITE_PRIVATE void sqlite3VdbeMemPrettyPrint(Mem *pMem, char *zBuf){
  function memTracePrint (line 71053) | static void memTracePrint(Mem *p){
  function registerTrace (line 71074) | static void registerTrace(int iReg, Mem *p){
  function sqlite_uint64 (line 71125) | __inline__ sqlite_uint64 sqlite3Hwtime(void){
  function sqlite_uint64 (line 71133) | __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){
  function sqlite_uint64 (line 71144) | __inline__ sqlite_uint64 sqlite3Hwtime(void){
  function sqlite_uint64 (line 71152) | __inline__ sqlite_uint64 sqlite3Hwtime(void){
  function sqlite3Hwtime (line 71176) | sqlite3Hwtime(void){ return ((sqlite_uint64)0); }
  function checkSavepointCount (line 71198) | static int checkSavepointCount(sqlite3 *db){
  function SQLITE_PRIVATE (line 71212) | SQLITE_PRIVATE int sqlite3VdbeExec(
  type Incrblob (line 77294) | typedef struct Incrblob Incrblob;
  type Incrblob (line 77295) | struct Incrblob {
  function blobSeekToRow (line 77323) | static int blobSeekToRow(Incrblob *p, sqlite3_int64 iRow, char **pzErr){
  function SQLITE_STDCALL (line 77377) | SQLITE_STDCALL sqlite3_blob_open(
  function SQLITE_STDCALL (line 77614) | SQLITE_STDCALL sqlite3_blob_close(sqlite3_blob *pBlob){
  function blobReadWrite (line 77634) | static int blobReadWrite(
  function SQLITE_STDCALL (line 77683) | SQLITE_STDCALL sqlite3_blob_read(sqlite3_blob *pBlob, void *z, int n, in...
  function SQLITE_STDCALL (line 77690) | SQLITE_STDCALL sqlite3_blob_write(sqlite3_blob *pBlob, const void *z, in...
  function SQLITE_STDCALL (line 77700) | SQLITE_STDCALL sqlite3_blob_bytes(sqlite3_blob *pBlob){
  function SQLITE_STDCALL (line 77715) | SQLITE_STDCALL sqlite3_blob_reopen(sqlite3_blob *pBlob, sqlite3_int64 iR...
  type MergeEngine (line 77906) | typedef struct MergeEngine MergeEngine;
  type PmaReader (line 77907) | typedef struct PmaReader PmaReader;
  type PmaWriter (line 77908) | typedef struct PmaWriter PmaWriter;
  type SorterRecord (line 77909) | typedef struct SorterRecord SorterRecord;
  type SortSubtask (line 77910) | typedef struct SortSubtask SortSubtask;
  type SorterFile (line 77911) | typedef struct SorterFile SorterFile;
  type SorterList (line 77912) | typedef struct SorterList SorterList;
  type IncrMerger (line 77913) | typedef struct IncrMerger IncrMerger;
  type SorterFile (line 77919) | struct SorterFile {
  type SorterList (line 77932) | struct SorterList {
  type MergeEngine (line 78002) | struct MergeEngine {
  type SortSubtask (line 78040) | struct SortSubtask {
  type VdbeSorter (line 78060) | struct VdbeSorter {
  type PmaReader (line 78089) | struct PmaReader {
  type IncrMerger (line 78135) | struct IncrMerger {
  type PmaWriter (line 78153) | struct PmaWriter {
  type SorterRecord (line 78181) | struct SorterRecord {
  function vdbePmaReaderClear (line 78208) | static void vdbePmaReaderClear(PmaReader *pReadr){
  function vdbePmaReadBlob (line 78225) | static int vdbePmaReadBlob(
  function vdbePmaReadVarint (line 78319) | static int vdbePmaReadVarint(PmaReader *p, u64 *pnOut){
  function vdbeSorterMapFile (line 78352) | static int vdbeSorterMapFile(SortSubtask *pTask, SorterFile *pFile, u8 *...
  function vdbePmaReaderSeek (line 78369) | static int vdbePmaReaderSeek(
  function vdbePmaReaderNext (line 78416) | static int vdbePmaReaderNext(PmaReader *pReadr){
  function vdbePmaReaderInit (line 78463) | static int vdbePmaReaderInit(
  function vdbeSorterCompare (line 78505) | static int vdbeSorterCompare(
  function SQLITE_PRIVATE (line 78536) | SQLITE_PRIVATE int sqlite3VdbeSorterInit(
  function vdbeSorterRecordFree (line 78621) | static void vdbeSorterRecordFree(sqlite3 *db, SorterRecord *pRecord){
  function vdbeSortSubtaskCleanup (line 78634) | static void vdbeSortSubtaskCleanup(sqlite3 *db, SortSubtask *pTask){
  function vdbeSorterWorkDebug (line 78663) | static void vdbeSorterWorkDebug(SortSubtask *pTask, const char *zEvent){
  function vdbeSorterRewindDebug (line 78669) | static void vdbeSorterRewindDebug(const char *zEvent){
  function vdbeSorterPopulateDebug (line 78674) | static void vdbeSorterPopulateDebug(
  function vdbeSorterBlockDebug (line 78683) | static void vdbeSorterBlockDebug(
  function vdbeSorterJoinThread (line 78705) | static int vdbeSorterJoinThread(SortSubtask *pTask){
  function vdbeSorterCreateThread (line 78726) | static int vdbeSorterCreateThread(
  function vdbeSorterJoinAll (line 78739) | static int vdbeSorterJoinAll(VdbeSorter *pSorter, int rcin){
  function MergeEngine (line 78769) | static MergeEngine *vdbeMergeEngineNew(int nReader){
  function vdbeMergeEngineFree (line 78792) | static void vdbeMergeEngineFree(MergeEngine *pMerger){
  function vdbeIncrFree (line 78806) | static void vdbeIncrFree(IncrMerger *pIncr){
  function SQLITE_PRIVATE (line 78823) | SQLITE_PRIVATE void sqlite3VdbeSorterReset(sqlite3 *db, VdbeSorter *pSor...
  function SQLITE_PRIVATE (line 78855) | SQLITE_PRIVATE void sqlite3VdbeSorterClose(sqlite3 *db, VdbeCursor *pCsr){
  function vdbeSorterExtendFile (line 78875) | static void vdbeSorterExtendFile(sqlite3 *db, sqlite3_file *pFd, i64 nBy...
  function vdbeSorterOpenTempFile (line 78894) | static int vdbeSorterOpenTempFile(
  function vdbeSortAllocUnpacked (line 78921) | static int vdbeSortAllocUnpacked(SortSubtask *pTask){
  function vdbeSorterMerge (line 78940) | static void vdbeSorterMerge(
  function vdbeSorterSort (line 78975) | static int vdbeSorterSort(SortSubtask *pTask, SorterList *pList){
  function vdbePmaWriterInit (line 79028) | static void vdbePmaWriterInit(
  function vdbePmaWriteBlob (line 79050) | static void vdbePmaWriteBlob(PmaWriter *p, u8 *pData, int nData){
  function vdbePmaWriterFinish (line 79083) | static int vdbePmaWriterFinish(PmaWriter *p, i64 *piEof){
  function vdbePmaWriteVarint (line 79102) | static void vdbePmaWriteVarint(PmaWriter *p, u64 iVal){
  function vdbeSorterListToPMA (line 79123) | static int vdbeSorterListToPMA(SortSubtask *pTask, SorterList *pList){
  function vdbeMergeEngineStep (line 79187) | static int vdbeMergeEngineStep(
  function vdbeSorterFlushPMA (line 79273) | static int vdbeSorterFlushPMA(VdbeSorter *pSorter){
  function SQLITE_PRIVATE (line 79340) | SQLITE_PRIVATE int sqlite3VdbeSorterWrite(
  function vdbeIncrPopulate (line 79436) | static int vdbeIncrPopulate(IncrMerger *pIncr){
  function vdbeIncrBgPopulate (line 79488) | static int vdbeIncrBgPopulate(IncrMerger *pIncr){
  function vdbeIncrSwap (line 79512) | static int vdbeIncrSwap(IncrMerger *pIncr){
  function vdbeIncrMergerNew (line 79551) | static int vdbeIncrMergerNew(
  function vdbeIncrMergerSetThreads (line 79575) | static void vdbeIncrMergerSetThreads(IncrMerger *pIncr){
  function vdbeMergeEngineCompare (line 79588) | static void vdbeMergeEngineCompare(
  function vdbeMergeEngineInit (line 79667) | static int vdbeMergeEngineInit(
  function vdbePmaReaderIncrMergeInit (line 79740) | static int vdbePmaReaderIncrMergeInit(PmaReader *pReadr, int eMode){
  function vdbePmaReaderBgIncrInit (line 79821) | static int vdbePmaReaderBgIncrInit(PmaReader *pReadr){
  function vdbeMergeEngineLevel0 (line 79839) | static int vdbeMergeEngineLevel0(
  function vdbeSorterTreeDepth (line 79878) | static int vdbeSorterTreeDepth(int nPMA){
  function vdbeSorterAddToTree (line 79896) | static int vdbeSorterAddToTree(
  function vdbeSorterMergeTreeBuild (line 79952) | static int vdbeSorterMergeTreeBuild(
  function vdbeSorterSetupMerge (line 80031) | static int vdbeSorterSetupMerge(VdbeSorter *pSorter){
  function SQLITE_PRIVATE (line 80102) | SQLITE_PRIVATE int sqlite3VdbeSorterRewind(const VdbeCursor *pCsr, int *...
  function SQLITE_PRIVATE (line 80148) | SQLITE_PRIVATE int sqlite3VdbeSorterNext(sqlite3 *db, const VdbeCursor *...
  function SQLITE_PRIVATE (line 80210) | SQLITE_PRIVATE int sqlite3VdbeSorterRowkey(const VdbeCursor *pCsr, Mem *...
  function SQLITE_PRIVATE (line 80241) | SQLITE_PRIVATE int sqlite3VdbeSorterCompare(
  type JournalFile (line 80310) | struct JournalFile {
  type JournalFile (line 80320) | typedef struct JournalFile JournalFile;
  function createFile (line 80326) | static int createFile(JournalFile *p){
  function jrnlClose (line 80353) | static int jrnlClose(sqlite3_file *pJfd){
  function jrnlRead (line 80365) | static int jrnlRead(
  function jrnlWrite (line 80386) | static int jrnlWrite(
  function jrnlTruncate (line 80413) | static int jrnlTruncate(sqlite3_file *pJfd, sqlite_int64 size){
  function jrnlSync (line 80427) | static int jrnlSync(sqlite3_file *pJfd, int flags){
  function jrnlFileSize (line 80441) | static int jrnlFileSize(sqlite3_file *pJfd, sqlite_int64 *pSize){
  type sqlite3_io_methods (line 80455) | struct sqlite3_io_methods
  function SQLITE_PRIVATE (line 80478) | SQLITE_PRIVATE int sqlite3JournalOpen(
  function SQLITE_PRIVATE (line 80507) | SQLITE_PRIVATE int sqlite3JournalCreate(sqlite3_file *p){
  function SQLITE_PRIVATE (line 80520) | SQLITE_PRIVATE int sqlite3JournalExists(sqlite3_file *p){
  function SQLITE_PRIVATE (line 80528) | SQLITE_PRIVATE int sqlite3JournalSize(sqlite3_vfs *pVfs){
  type MemJournal (line 80553) | typedef struct MemJournal MemJournal;
  type FilePoint (line 80554) | typedef struct FilePoint FilePoint;
  type FileChunk (line 80555) | typedef struct FileChunk FileChunk;
  type FileChunk (line 80570) | struct FileChunk {
  type FilePoint (line 80579) | struct FilePoint {
  type MemJournal (line 80588) | struct MemJournal {
  function memjrnlRead (line 80599) | static int memjrnlRead(
  function memjrnlWrite (line 80644) | static int memjrnlWrite(
  function memjrnlTruncate (line 80694) | static int memjrnlTruncate(sqlite3_file *pJfd, sqlite_int64 size){
  function memjrnlClose (line 80712) | static int memjrnlClose(sqlite3_file *pJfd){
  function memjrnlSync (line 80726) | static int memjrnlSync(sqlite3_file *NotUsed, int NotUsed2){
  function memjrnlFileSize (line 80734) | static int memjrnlFileSize(sqlite3_file *pJfd, sqlite_int64 *pSize){
  type sqlite3_io_methods (line 80743) | struct sqlite3_io_methods
  function SQLITE_PRIVATE (line 80768) | SQLITE_PRIVATE void sqlite3MemJournalOpen(sqlite3_file *pJfd){
  function SQLITE_PRIVATE (line 80779) | SQLITE_PRIVATE int sqlite3IsMemJournal(sqlite3_file *pJfd){
  function SQLITE_PRIVATE (line 80786) | SQLITE_PRIVATE int sqlite3MemJournalSize(void){
  function SQLITE_PRIVATE (line 80829) | SQLITE_PRIVATE int sqlite3WalkExpr(Walker *pWalker, Expr *pExpr){
  function SQLITE_PRIVATE (line 80852) | SQLITE_PRIVATE int sqlite3WalkExprList(Walker *pWalker, ExprList *p){
  function SQLITE_PRIVATE (line 80869) | SQLITE_PRIVATE int sqlite3WalkSelectExpr(Walker *pWalker, Select *p){
  function SQLITE_PRIVATE (line 80887) | SQLITE_PRIVATE int sqlite3WalkSelectFrom(Walker *pWalker, Select *p){
  function SQLITE_PRIVATE (line 80919) | SQLITE_PRIVATE int sqlite3WalkSelect(Walker *pWalker, Select *p){
  function incrAggDepth (line 80976) | static int incrAggDepth(Walker *pWalker, Expr *pExpr){
  function incrAggFunctionDepth (line 80980) | static void incrAggFunctionDepth(Expr *pExpr, int N){
  function resolveAlias (line 81033) | static void resolveAlias(
  function nameInUsingClause (line 81091) | static int nameInUsingClause(IdList *pUsing, const char *zCol){
  function SQLITE_PRIVATE (line 81108) | SQLITE_PRIVATE int sqlite3MatchSpanName(
  function lookupName (line 81158) | static int lookupName(
  function SQLITE_PRIVATE (line 81477) | SQLITE_PRIVATE Expr *sqlite3CreateColumnExpr(sqlite3 *db, SrcList *pSrc,...
  function notValidPartIdxWhere (line 81500) | static void notValidPartIdxWhere(
  function notValidCheckConstraint (line 81515) | static void notValidCheckConstraint(
  function exprProbability (line 81533) | static int exprProbability(Expr *p){
  function resolveExprStep (line 81553) | static int resolveExprStep(Walker *pWalker, Expr *pExpr){
  function resolveAsName (line 81767) | static int resolveAsName(
  function resolveOrderByTermToExprList (line 81806) | static int resolveOrderByTermToExprList(
  function resolveOutOfRangeError (line 81853) | static void resolveOutOfRangeError(
  function resolveCompoundOrderBy (line 81879) | static int resolveCompoundOrderBy(
  function SQLITE_PRIVATE (line 81975) | SQLITE_PRIVATE int sqlite3ResolveOrderGroupBy(
  function resolveOrderGroupBy (line 82026) | static int resolveOrderGroupBy(
  function resolveSelectStep (line 82084) | static int resolveSelectStep(Walker *pWalker, Select *p){
  function SQLITE_PRIVATE (line 82336) | SQLITE_PRIVATE int sqlite3ResolveExprNames(
  function SQLITE_PRIVATE (line 82387) | SQLITE_PRIVATE void sqlite3ResolveSelectNames(
  function SQLITE_PRIVATE (line 82414) | SQLITE_PRIVATE void sqlite3ResolveSelfReference(
  function SQLITE_PRIVATE (line 82478) | SQLITE_PRIVATE char sqlite3ExprAffinity(Expr *pExpr){
  function SQLITE_PRIVATE (line 82514) | SQLITE_PRIVATE Expr *sqlite3ExprAddCollateToken(
  function SQLITE_PRIVATE (line 82530) | SQLITE_PRIVATE Expr *sqlite3ExprAddCollateString(Parse *pParse, Expr *pE...
  function SQLITE_PRIVATE (line 82542) | SQLITE_PRIVATE Expr *sqlite3ExprSkipCollate(Expr *pExpr){
  function SQLITE_PRIVATE (line 82566) | SQLITE_PRIVATE CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr){
  function SQLITE_PRIVATE (line 82630) | SQLITE_PRIVATE char sqlite3CompareAffinity(Expr *pExpr, char aff2){
  function comparisonAffinity (line 82657) | static char comparisonAffinity(Expr *pExpr){
  function SQLITE_PRIVATE (line 82680) | SQLITE_PRIVATE int sqlite3IndexAffinityOk(Expr *pExpr, char idx_affinity){
  function u8 (line 82696) | static u8 binaryCompareP5(Expr *pExpr1, Expr *pExpr2, int jumpIfNull){
  function SQLITE_PRIVATE (line 82714) | SQLITE_PRIVATE CollSeq *sqlite3BinaryCompareCollSeq(
  function codeCompare (line 82737) | static int codeCompare(
  function SQLITE_PRIVATE (line 82764) | SQLITE_PRIVATE int sqlite3ExprCheckHeight(Parse *pParse, int nHeight){
  function heightOfExpr (line 82785) | static void heightOfExpr(Expr *p, int *pnHeight){
  function heightOfExprList (line 82792) | static void heightOfExprList(ExprList *p, int *pnHeight){
  function heightOfSelect (line 82800) | static void heightOfSelect(Select *p, int *pnHeight){
  function exprSetHeight (line 82823) | static void exprSetHeight(Expr *p){
  function SQLITE_PRIVATE (line 82844) | SQLITE_PRIVATE void sqlite3ExprSetHeightAndFlags(Parse *pParse, Expr *p){
  function SQLITE_PRIVATE (line 82854) | SQLITE_PRIVATE int sqlite3SelectExprHeight(Select *p){
  function SQLITE_PRIVATE (line 82864) | SQLITE_PRIVATE void sqlite3ExprSetHeightAndFlags(Parse *pParse, Expr *p){
  function SQLITE_PRIVATE (line 82892) | SQLITE_PRIVATE Expr *sqlite3ExprAlloc(
  function SQLITE_PRIVATE (line 82941) | SQLITE_PRIVATE Expr *sqlite3Expr(
  function SQLITE_PRIVATE (line 82958) | SQLITE_PRIVATE void sqlite3ExprAttachSubtrees(
  function SQLITE_PRIVATE (line 82988) | SQLITE_PRIVATE Expr *sqlite3PExpr(
  function exprAlwaysTrue (line 83023) | static int exprAlwaysTrue(Expr *p){
  function exprAlwaysFalse (line 83029) | static int exprAlwaysFalse(Expr *p){
  function SQLITE_PRIVATE (line 83044) | SQLITE_PRIVATE Expr *sqlite3ExprAnd(sqlite3 *db, Expr *pLeft, Expr *pRig...
  function SQLITE_PRIVATE (line 83064) | SQLITE_PRIVATE Expr *sqlite3ExprFunction(Parse *pParse, ExprList *pList,...
  function SQLITE_PRIVATE (line 83095) | SQLITE_PRIVATE void sqlite3ExprAssignVarNumber(Parse *pParse, Expr *pExpr){
  function SQLITE_PRIVATE (line 83166) | SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3 *db, Expr *p){
  function exprStructSize (line 83192) | static int exprStructSize(Expr *p){
  function dupedExprStructSize (line 83232) | static int dupedExprStructSize(Expr *p, int flags){
  function dupedExprNodeSize (line 83259) | static int dupedExprNodeSize(Expr *p, int flags){
  function dupedExprSize (line 83280) | static int dupedExprSize(Expr *p, int flags){
  function Expr (line 83299) | static Expr *exprDup(sqlite3 *db, Expr *p, int flags, u8 **pzBuffer){
  function With (line 83388) | static With *withDup(sqlite3 *db, With *p){
  function SQLITE_PRIVATE (line 83426) | SQLITE_PRIVATE Expr *sqlite3ExprDup(sqlite3 *db, Expr *p, int flags){
  function SQLITE_PRIVATE (line 83429) | SQLITE_PRIVATE ExprList *sqlite3ExprListDup(sqlite3 *db, ExprList *p, in...
  function SQLITE_PRIVATE (line 83465) | SQLITE_PRIVATE SrcList *sqlite3SrcListDup(sqlite3 *db, SrcList *p, int f...
  function SQLITE_PRIVATE (line 83503) | SQLITE_PRIVATE IdList *sqlite3IdListDup(sqlite3 *db, IdList *p){
  function SQLITE_PRIVATE (line 83526) | SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3 *db, Select *p, int flags){
  function SQLITE_PRIVATE (line 83554) | SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3 *db, Select *p, int flags){
  function SQLITE_PRIVATE (line 83569) | SQLITE_PRIVATE ExprList *sqlite3ExprListAppend(
  function SQLITE_PRIVATE (line 83614) | SQLITE_PRIVATE void sqlite3ExprListSetName(
  function SQLITE_PRIVATE (line 83639) | SQLITE_PRIVATE void sqlite3ExprListSetSpan(
  function SQLITE_PRIVATE (line 83660) | SQLITE_PRIVATE void sqlite3ExprListCheckLength(
  function SQLITE_PRIVATE (line 83676) | SQLITE_PRIVATE void sqlite3ExprListDelete(sqlite3 *db, ExprList *pList){
  function SQLITE_PRIVATE (line 83694) | SQLITE_PRIVATE u32 sqlite3ExprListFlags(const ExprList *pList){
  function exprNodeIsConstant (line 83730) | static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){
  function selectNodeIsConstant (line 83784) | static int selectNodeIsConstant(Walker *pWalker, Select *NotUsed){
  function exprIsConst (line 83789) | static int exprIsConst(Expr *p, int initFlag, int iCur){
  function SQLITE_PRIVATE (line 83808) | SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr *p){
  function SQLITE_PRIVATE (line 83818) | SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr *p){
  function SQLITE_PRIVATE (line 83828) | SQLITE_PRIVATE int sqlite3ExprIsTableConstant(Expr *p, int iCur){
  function SQLITE_PRIVATE (line 83841) | SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr *p, u8 isInit){
  function SQLITE_PRIVATE (line 83852) | SQLITE_PRIVATE int sqlite3ExprIsInteger(Expr *p, int *pValue){
  function SQLITE_PRIVATE (line 83897) | SQLITE_PRIVATE int sqlite3ExprCanBeNull(const Expr *p){
  function SQLITE_PRIVATE (line 83927) | SQLITE_PRIVATE int sqlite3ExprNeedsNoAffinityChange(const Expr *p, char ...
  function SQLITE_PRIVATE (line 83960) | SQLITE_PRIVATE int sqlite3IsRowid(const char *z){
  function isCandidateForInOpt (line 83980) | static int isCandidateForInOpt(Select *p){
  function SQLITE_PRIVATE (line 84014) | SQLITE_PRIVATE int sqlite3CodeOnce(Parse *pParse){
  function sqlite3SetHasNullFlag (line 84025) | static void sqlite3SetHasNullFlag(Vdbe *v, int iCur, int regHasNull){
  function sqlite3InRhsIsConstant (line 84041) | static int sqlite3InRhsIsConstant(Expr *pIn){
  function SQLITE_PRIVATE (line 84124) | SQLITE_PRIVATE int sqlite3FindInIndex(Parse *pParse, Expr *pX, u32 inFla...
  function SQLITE_PRIVATE (line 84276) | SQLITE_PRIVATE int sqlite3CodeSubselect(
  function sqlite3ExprCodeIN (line 84504) | static void sqlite3ExprCodeIN(
  function codeReal (line 84674) | static void codeReal(Vdbe *v, const char *z, int negateFlag, int iMem){
  function codeInteger (line 84694) | static void codeInteger(Parse *pParse, Expr *pExpr, int negFlag, int iMem){
  function cacheEntryClear (line 84732) | static void cacheEntryClear(Parse *pParse, struct yColCache *p){
  function SQLITE_PRIVATE (line 84746) | SQLITE_PRIVATE void sqlite3ExprCacheStore(Parse *pParse, int iTab, int i...
  function SQLITE_PRIVATE (line 84811) | SQLITE_PRIVATE void sqlite3ExprCacheRemove(Parse *pParse, int iReg, int ...
  function SQLITE_PRIVATE (line 84829) | SQLITE_PRIVATE void sqlite3ExprCachePush(Parse *pParse){
  function SQLITE_PRIVATE (line 84843) | SQLITE_PRIVATE void sqlite3ExprCachePop(Parse *pParse){
  function sqlite3ExprCachePinRegister (line 84867) | static void sqlite3ExprCachePinRegister(Parse *pParse, int iReg){
  function SQLITE_PRIVATE (line 84880) | SQLITE_PRIVATE void sqlite3ExprCodeGetColumnOfTable(
  function SQLITE_PRIVATE (line 84911) | SQLITE_PRIVATE int sqlite3ExprCodeGetColumn(
  function SQLITE_PRIVATE (line 84943) | SQLITE_PRIVATE void sqlite3ExprCacheClear(Parse *pParse){
  function SQLITE_PRIVATE (line 84964) | SQLITE_PRIVATE void sqlite3ExprCacheAffinityChange(Parse *pParse, int iS...
  function SQLITE_PRIVATE (line 84972) | SQLITE_PRIVATE void sqlite3ExprCodeMove(Parse *pParse, int iFrom, int iT...
  function usedAsColumnCache (line 84986) | static int usedAsColumnCache(Parse *pParse, int iFrom, int iTo){
  function exprToRegister (line 85000) | static void exprToRegister(Expr *p, int iReg){
  function SQLITE_PRIVATE (line 85018) | SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int...
  function SQLITE_PRIVATE (line 85634) | SQLITE_PRIVATE void sqlite3ExprCodeAtInit(
  function SQLITE_PRIVATE (line 85666) | SQLITE_PRIVATE int sqlite3ExprCodeTemp(Parse *pParse, Expr *pExpr, int *...
  function SQLITE_PRIVATE (line 85704) | SQLITE_PRIVATE void sqlite3ExprCode(Parse *pParse, Expr *pExpr, int targ...
  function SQLITE_PRIVATE (line 85725) | SQLITE_PRIVATE void sqlite3ExprCodeFactorable(Parse *pParse, Expr *pExpr...
  function SQLITE_PRIVATE (line 85745) | SQLITE_PRIVATE void sqlite3ExprCodeAndCache(Parse *pParse, Expr *pExpr, ...
  function SQLITE_PRIVATE (line 85761) | SQLITE_PRIVATE void sqlite3TreeViewExpr(TreeView *pView, const Expr *pEx...
  function SQLITE_PRIVATE (line 85990) | SQLITE_PRIVATE void sqlite3TreeViewExprList(
  function SQLITE_PRIVATE (line 86031) | SQLITE_PRIVATE int sqlite3ExprCodeExprList(
  function exprCodeBetween (line 86081) | static void exprCodeBetween(
  function SQLITE_PRIVATE (line 86138) | SQLITE_PRIVATE void sqlite3ExprIfTrue(Parse *pParse, Expr *pExpr, int de...
  function SQLITE_PRIVATE (line 86263) | SQLITE_PRIVATE void sqlite3ExprIfFalse(Parse *pParse, Expr *pExpr, int d...
  function SQLITE_PRIVATE (line 86432) | SQLITE_PRIVATE int sqlite3ExprCompare(Expr *pA, Expr *pB, int iTab){
  function SQLITE_PRIVATE (line 86488) | SQLITE_PRIVATE int sqlite3ExprListCompare(ExprList *pA, ExprList *pB, in...
  function SQLITE_PRIVATE (line 86522) | SQLITE_PRIVATE int sqlite3ExprImpliesExpr(Expr *pE1, Expr *pE2, int iTab){
  type SrcCount (line 86547) | struct SrcCount {
  function exprSrcCount (line 86556) | static int exprSrcCount(Walker *pWalker, Expr *pExpr){
  function SQLITE_PRIVATE (line 86585) | SQLITE_PRIVATE int sqlite3FunctionUsesThisSrc(Expr *pExpr, SrcList *pSrc...
  function addAggInfoColumn (line 86603) | static int addAggInfoColumn(sqlite3 *db, AggInfo *pInfo){
  function addAggInfoFunc (line 86619) | static int addAggInfoFunc(sqlite3 *db, AggInfo *pInfo){
  function analyzeAggregate (line 86636) | static int analyzeAggregate(Walker *pWalker, Expr *pExpr){
  function analyzeAggregatesInSelect (line 86761) | static int analyzeAggregatesInSelect(Walker *pWalker, Select *pSelect){
  function SQLITE_PRIVATE (line 86776) | SQLITE_PRIVATE void sqlite3ExprAnalyzeAggregates(NameContext *pNC, Expr ...
  function SQLITE_PRIVATE (line 86792) | SQLITE_PRIVATE void sqlite3ExprAnalyzeAggList(NameContext *pNC, ExprList...
  function SQLITE_PRIVATE (line 86805) | SQLITE_PRIVATE int sqlite3GetTempReg(Parse *pParse){
  function SQLITE_PRIVATE (line 86820) | SQLITE_PRIVATE void sqlite3ReleaseTempReg(Parse *pParse, int iReg){
  function SQLITE_PRIVATE (line 86837) | SQLITE_PRIVATE int sqlite3GetTempRange(Parse *pParse, int nReg){
  function SQLITE_PRIVATE (line 86851) | SQLITE_PRIVATE void sqlite3ReleaseTempRange(Parse *pParse, int iReg, int...
  function SQLITE_PRIVATE (line 86862) | SQLITE_PRIVATE void sqlite3ClearTempRegCache(Parse *pParse){
  function renameTableFunc (line 86904) | static void renameTableFunc(
  function renameParentFunc (line 86969) | static void renameParentFunc(
  function renameTriggerFunc (line 87025) | static void renameTriggerFunc(
  function SQLITE_PRIVATE (line 87097) | SQLITE_PRIVATE void sqlite3AlterFunctions(void){
  function reloadTableSchema (line 87200) | static void reloadTableSchema(Parse *pParse, Table *pTab, const char *zN...
  function isSystemTable (line 87249) | static int isSystemTable(Parse *pParse, const char *zName){
  function SQLITE_PRIVATE (line 87261) | SQLITE_PRIVATE void sqlite3AlterRenameTable(
  function SQLITE_PRIVATE (line 87462) | SQLITE_PRIVATE void sqlite3MinimumFileFormat(Parse *pParse, int iDb, int...
  function SQLITE_PRIVATE (line 87492) | SQLITE_PRIVATE void sqlite3AlterFinishAddColumn(Parse *pParse, Token *pC...
  function SQLITE_PRIVATE (line 87619) | SQLITE_PRIVATE void sqlite3AlterBeginAddColumn(Parse *pParse, SrcList *p...
  function openStatTable (line 87872) | static void openStatTable(
  type Stat4Accum (line 87965) | typedef struct Stat4Accum Stat4Accum;
  type Stat4Sample (line 87966) | typedef struct Stat4Sample Stat4Sample;
  type Stat4Sample (line 87967) | struct Stat4Sample {
  type Stat4Accum (line 87982) | struct Stat4Accum {
  function sampleClear (line 88001) | static void sampleClear(sqlite3 *db, Stat4Sample *p){
  function sampleSetRowid (line 88013) | static void sampleSetRowid(sqlite3 *db, Stat4Sample *p, int n, const u8 ...
  function sampleSetRowidInt64 (line 88029) | static void sampleSetRowidInt64(sqlite3 *db, Stat4Sample *p, i64 iRowid){
  function sampleCopy (line 88042) | static void sampleCopy(Stat4Accum *p, Stat4Sample *pTo, Stat4Sample *pFr...
  function stat4Destructor (line 88060) | static void stat4Destructor(void *pOld){
  type Stat4Sample (line 88154) | struct Stat4Sample
  function sampleIsBetterPost (line 88201) | static int sampleIsBetterPost(
  function sampleIsBetter (line 88225) | static int sampleIsBetter(
  function sampleInsert (line 88252) | static void sampleInsert(Stat4Accum *p, Stat4Sample *pNew, int nEqZero){
  function samplePushPrevious (line 88342) | static void samplePushPrevious(Stat4Accum *p, int iChng){
  function statPush (line 88408) | static void statPush(
  function statGet (line 88509) | static void statGet(
  function callStatGet (line 88637) | static void callStatGet(Vdbe *v, int regStat4, int iParam, int regOut){
  function analyzeOneTable (line 88655) | static void analyzeOneTable(
  function loadAnalysis (line 88982) | static void loadAnalysis(Parse *pParse, int iDb){
  function analyzeDatabase (line 88992) | static void analyzeDatabase(Parse *pParse, int iDb){
  function analyzeTable (line 89019) | static void analyzeTable(Parse *pParse, Table *pTab, Index *pOnlyIdx){
  function SQLITE_PRIVATE (line 89050) | SQLITE_PRIVATE void sqlite3Analyze(Parse *pParse, Token *pName1, Token *...
  type analysisInfo (line 89114) | typedef struct analysisInfo analysisInfo;
  type analysisInfo (line 89115) | struct analysisInfo {
  function analysisLoader (line 89196) | static int analysisLoader(void *pData, int argc, char **argv, char **Not...
  function SQLITE_PRIVATE (line 89251) | SQLITE_PRIVATE void sqlite3DeleteIndexSamples(sqlite3 *db, Index *pIdx){
  function initAvgEq (line 89276) | static void initAvgEq(Index *pIdx){
  function Index (line 89335) | static Index *findIndexOrPrimaryKey(
  function loadStatTbl (line 89361) | static int loadStatTbl(
  function loadStat4 (line 89485) | static int loadStat4(sqlite3 *db, const char *zDb){
  function SQLITE_PRIVATE (line 89529) | SQLITE_PRIVATE int sqlite3AnalysisLoad(sqlite3 *db, int iDb){
  function resolveAttachExpr (line 89626) | static int resolveAttachExpr(NameContext *pName, Expr *pExpr)
  function attachFunc (line 89650) | static void attachFunc(
  function detachFunc (line 89851) | static void detachFunc(
  function codeAttach (line 89903) | static void codeAttach(
  function SQLITE_PRIVATE (line 89977) | SQLITE_PRIVATE void sqlite3Detach(Parse *pParse, Expr *pDbname){
  function SQLITE_PRIVATE (line 89998) | SQLITE_PRIVATE void sqlite3Attach(Parse *pParse, Expr *p, Expr *pDbname,...
  function SQLITE_PRIVATE (line 90019) | SQLITE_PRIVATE void sqlite3FixInit(
  function SQLITE_PRIVATE (line 90052) | SQLITE_PRIVATE int sqlite3FixSrcList(
  function SQLITE_PRIVATE (line 90082) | SQLITE_PRIVATE int sqlite3FixSelect(
  function SQLITE_PRIVATE (line 90115) | SQLITE_PRIVATE int sqlite3FixExpr(
  function SQLITE_PRIVATE (line 90141) | SQLITE_PRIVATE int sqlite3FixExprList(
  function SQLITE_PRIVATE (line 90158) | SQLITE_PRIVATE int sqlite3FixTriggerStep(
  function SQLITE_STDCALL (line 90248) | SQLITE_STDCALL sqlite3_set_authorizer(
  function sqliteAuthBadReturnCode (line 90268) | static void sqliteAuthBadReturnCode(Parse *pParse){
  function SQLITE_PRIVATE (line 90282) | SQLITE_PRIVATE int sqlite3AuthReadCol(
  function SQLITE_PRIVATE (line 90319) | SQLITE_PRIVATE void sqlite3AuthRead(
  function SQLITE_PRIVATE (line 90376) | SQLITE_PRIVATE int sqlite3AuthCheck(
  function SQLITE_PRIVATE (line 90416) | SQLITE_PRIVATE void sqlite3AuthContextPush(
  function SQLITE_PRIVATE (line 90431) | SQLITE_PRIVATE void sqlite3AuthContextPop(AuthContext *pContext){
  function SQLITE_PRIVATE (line 90471) | SQLITE_PRIVATE void sqlite3BeginParse(Parse *pParse, int explainFlag){
  type TableLock (line 90481) | struct TableLock {
  function SQLITE_PRIVATE (line 90498) | SQLITE_PRIVATE void sqlite3TableLock(
  function codeTableLocks (line 90538) | static void codeTableLocks(Parse *pParse){
  function SQLITE_PRIVATE (line 90562) | SQLITE_PRIVATE int sqlite3DbMaskAllZero(yDbMask m){
  function SQLITE_PRIVATE (line 90579) | SQLITE_PRIVATE void sqlite3FinishCoding(Parse *pParse){
  function SQLITE_PRIVATE (line 90699) | SQLITE_PRIVATE void sqlite3NestedParse(Parse *pParse, const char *zForma...
  function SQLITE_PRIVATE (line 90730) | SQLITE_PRIVATE int sqlite3UserAuthTable(const char *zTable){
  function SQLITE_PRIVATE (line 90747) | SQLITE_PRIVATE Table *sqlite3FindTable(sqlite3 *db, const char *zName, c...
  function SQLITE_PRIVATE (line 90780) | SQLITE_PRIVATE Table *sqlite3LocateTable(
  function SQLITE_PRIVATE (line 90822) | SQLITE_PRIVATE Table *sqlite3LocateTableItem(
  function SQLITE_PRIVATE (line 90850) | SQLITE_PRIVATE Index *sqlite3FindIndex(sqlite3 *db, const char *zName, c...
  function freeIndex (line 90870) | static void freeIndex(sqlite3 *db, Index *p){
  function SQLITE_PRIVATE (line 90889) | SQLITE_PRIVATE void sqlite3UnlinkAndDeleteIndex(sqlite3 *db, int iDb, co...
  function SQLITE_PRIVATE (line 90922) | SQLITE_PRIVATE void sqlite3CollapseDatabaseArray(sqlite3 *db){
  function SQLITE_PRIVATE (line 90949) | SQLITE_PRIVATE void sqlite3ResetOneSchema(sqlite3 *db, int iDb){
  function SQLITE_PRIVATE (line 90975) | SQLITE_PRIVATE void sqlite3ResetAllSchemasOfConnection(sqlite3 *db){
  function SQLITE_PRIVATE (line 90993) | SQLITE_PRIVATE void sqlite3CommitInternalChanges(sqlite3 *db){
  function sqliteDeleteColumnNames (line 91001) | static void sqliteDeleteColumnNames(sqlite3 *db, Table *pTable){
  function SQLITE_PRIVATE (line 91032) | SQLITE_PRIVATE void sqlite3DeleteTable(sqlite3 *db, Table *pTable){
  function SQLITE_PRIVATE (line 91088) | SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTable(sqlite3 *db, int iDb, co...
  function SQLITE_PRIVATE (line 91116) | SQLITE_PRIVATE char *sqlite3NameFromToken(sqlite3 *db, Token *pName){
  function SQLITE_PRIVATE (line 91131) | SQLITE_PRIVATE void sqlite3OpenMasterTable(Parse *p, int iDb){
  function SQLITE_PRIVATE (line 91146) | SQLITE_PRIVATE int sqlite3FindDbName(sqlite3 *db, const char *zName){
  function SQLITE_PRIVATE (line 91167) | SQLITE_PRIVATE int sqlite3FindDb(sqlite3 *db, Token *pName){
  function SQLITE_PRIVATE (line 91192) | SQLITE_PRIVATE int sqlite3TwoPartName(
  function SQLITE_PRIVATE (line 91229) | SQLITE_PRIVATE int sqlite3CheckObjectName(Parse *pParse, const char *zNa...
  function SQLITE_PRIVATE (line 91242) | SQLITE_PRIVATE Index *sqlite3PrimaryKeyIndex(Table *pTab){
  function SQLITE_PRIVATE (line 91252) | SQLITE_PRIVATE i16 sqlite3ColumnOfIndex(Index *pIdx, i16 iCol){
  function SQLITE_PRIVATE (line 91276) | SQLITE_PRIVATE void sqlite3StartTable(
  function SQLITE_PRIVATE (line 91499) | SQLITE_PRIVATE void sqlite3AddColumn(Parse *pParse, Token *pName){
  function SQLITE_PRIVATE (line 91549) | SQLITE_PRIVATE void sqlite3AddNotNull(Parse *pParse, int onError){
  function SQLITE_PRIVATE (line 91581) | SQLITE_PRIVATE char sqlite3AffinityType(const char *zIn, u8 *pszEst){
  function SQLITE_PRIVATE (line 91652) | SQLITE_PRIVATE void sqlite3AddColumnType(Parse *pParse, Token *pType){
  function SQLITE_PRIVATE (line 91674) | SQLITE_PRIVATE void sqlite3AddDefaultValue(Parse *pParse, ExprSpan *pSpan){
  function SQLITE_PRIVATE (line 91717) | SQLITE_PRIVATE void sqlite3AddPrimaryKey(
  function SQLITE_PRIVATE (line 91787) | SQLITE_PRIVATE void sqlite3AddCheckConstraint(
  function SQLITE_PRIVATE (line 91812) | SQLITE_PRIVATE void sqlite3AddCollateType(Parse *pParse, Token *pToken){
  function SQLITE_PRIVATE (line 91864) | SQLITE_PRIVATE CollSeq *sqlite3LocateCollSeq(Parse *pParse, const char *...
  function SQLITE_PRIVATE (line 91895) | SQLITE_PRIVATE void sqlite3ChangeCookie(Parse *pParse, int iDb){
  function identLength (line 91913) | static int identLength(const char *z){
  function identPut (line 91934) | static void identPut(char *z, int *pIdx, char *zSignedIdent){
  function resizeIndexObject (line 92030) | static int resizeIndexObject(sqlite3 *db, Index *pIdx, int N){
  function estimateTableWidth (line 92054) | static void estimateTableWidth(Table *pTab){
  function estimateIndexWidth (line 92068) | static void estimateIndexWidth(Index *pIdx){
  function hasColumn (line 92082) | static int hasColumn(const i16 *aiCol, int nCol, int x){
  function convertToWithoutRowidTable (line 92110) | static void convertToWithoutRowidTable(Parse *pParse, Table *pTab){
  function SQLITE_PRIVATE (line 92247) | SQLITE_PRIVATE void sqlite3EndTable(
  function SQLITE_PRIVATE (line 92464) | SQLITE_PRIVATE void sqlite3CreateView(
  function SQLITE_PRIVATE (line 92541) | SQLITE_PRIVATE int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){
  function sqliteViewResetAll (line 92636) | static void sqliteViewResetAll(sqlite3 *db, int idx){
  function SQLITE_PRIVATE (line 92672) | SQLITE_PRIVATE void sqlite3RootPageMoved(sqlite3 *db, int iDb, int iFrom...
  function destroyRootPage (line 92702) | static void destroyRootPage(Parse *pParse, int iTable, int iDb){
  function destroyTable (line 92730) | static void destroyTable(Parse *pParse, Table *pTab){
  function sqlite3ClearStatTables (line 92788) | static void sqlite3ClearStatTables(
  function SQLITE_PRIVATE (line 92811) | SQLITE_PRIVATE void sqlite3CodeDropTable(Parse *pParse, Table *pTab, int...
  function SQLITE_PRIVATE (line 92882) | SQLITE_PRIVATE void sqlite3DropTable(Parse *pParse, SrcList *pName, int ...
  function SQLITE_PRIVATE (line 92996) | SQLITE_PRIVATE void sqlite3CreateForeignKey(
  function SQLITE_PRIVATE (line 93117) | SQLITE_PRIVATE void sqlite3DeferForeignKey(Parse *pParse, int isDeferred){
  function sqlite3RefillIndex (line 93138) | static void sqlite3RefillIndex(Parse *pParse, Index *pIndex, int memRoot...
  function SQLITE_PRIVATE (line 93224) | SQLITE_PRIVATE Index *sqlite3AllocateIndexObject(
  function SQLITE_PRIVATE (line 93268) | SQLITE_PRIVATE Index *sqlite3CreateIndex(
  function SQLITE_PRIVATE (line 93768) | SQLITE_PRIVATE void sqlite3DefaultRowEst(Index *pIdx){
  function SQLITE_PRIVATE (line 93796) | SQLITE_PRIVATE void sqlite3DropIndex(Parse *pParse, SrcList *pName, int ...
  function SQLITE_PRIVATE (line 93877) | SQLITE_PRIVATE void *sqlite3ArrayAllocate(
  function SQLITE_PRIVATE (line 93908) | SQLITE_PRIVATE IdList *sqlite3IdListAppend(sqlite3 *db, IdList *pList, T...
  function SQLITE_PRIVATE (line 93932) | SQLITE_PRIVATE void sqlite3IdListDelete(sqlite3 *db, IdList *pList){
  function SQLITE_PRIVATE (line 93946) | SQLITE_PRIVATE int sqlite3IdListIndex(IdList *pList, const char *zName){
  function SQLITE_PRIVATE (line 93974) | SQLITE_PRIVATE SrcList *sqlite3SrcListEnlarge(
  function SQLITE_PRIVATE (line 94056) | SQLITE_PRIVATE SrcList *sqlite3SrcListAppend(
  function SQLITE_PRIVATE (line 94091) | SQLITE_PRIVATE void sqlite3SrcListAssignCursors(Parse *pParse, SrcList *...
  function SQLITE_PRIVATE (line 94109) | SQLITE_PRIVATE void sqlite3SrcListDelete(sqlite3 *db, SrcList *pList){
  function SQLITE_PRIVATE (line 94142) | SQLITE_PRIVATE SrcList *sqlite3SrcListAppendFromTerm(
  function SQLITE_PRIVATE (line 94186) | SQLITE_PRIVATE void sqlite3SrcListIndexedBy(Parse *pParse, SrcList *p, T...
  function SQLITE_PRIVATE (line 94216) | SQLITE_PRIVATE void sqlite3SrcListShiftJoinType(SrcList *p){
  function SQLITE_PRIVATE (line 94230) | SQLITE_PRIVATE void sqlite3BeginTransaction(Parse *pParse, int type){
  function SQLITE_PRIVATE (line 94256) | SQLITE_PRIVATE void sqlite3CommitTransaction(Parse *pParse){
  function SQLITE_PRIVATE (line 94273) | SQLITE_PRIVATE void sqlite3RollbackTransaction(Parse *pParse){
  function SQLITE_PRIVATE (line 94291) | SQLITE_PRIVATE void sqlite3Savepoint(Parse *pParse, int op, Token *pName){
  function SQLITE_PRIVATE (line 94311) | SQLITE_PRIVATE int sqlite3OpenTempDatabase(Parse *pParse){
  function SQLITE_PRIVATE (line 94346) | SQLITE_PRIVATE void sqlite3CodeVerifySchema(Parse *pParse, int iDb){
  function SQLITE_PRIVATE (line 94367) | SQLITE_PRIVATE void sqlite3CodeVerifyNamedSchema(Parse *pParse, const ch...
  function SQLITE_PRIVATE (line 94391) | SQLITE_PRIVATE void sqlite3BeginWriteOperation(Parse *pParse, int setSta...
  function SQLITE_PRIVATE (line 94405) | SQLITE_PRIVATE void sqlite3MultiWrite(Parse *pParse){
  function SQLITE_PRIVATE (line 94426) | SQLITE_PRIVATE void sqlite3MayAbort(Parse *pParse){
  function SQLITE_PRIVATE (line 94436) | SQLITE_PRIVATE void sqlite3HaltConstraint(
  function SQLITE_PRIVATE (line 94456) | SQLITE_PRIVATE void sqlite3UniqueConstraint(
  function SQLITE_PRIVATE (line 94486) | SQLITE_PRIVATE void sqlite3RowidConstraint(
  function collationMatch (line 94510) | static int collationMatch(const char *zColl, Index *pIndex){
  function reindexTable (line 94529) | static void reindexTable(Parse *pParse, Table *pTab, char const *zColl){
  function reindexDatabases (line 94548) | static void reindexDatabases(Parse *pParse, char const *zColl){
  function SQLITE_PRIVATE (line 94580) | SQLITE_PRIVATE void sqlite3Reindex(Parse *pParse, Token *pName1, Token *...
  function SQLITE_PRIVATE (line 94644) | SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoOfIndex(Parse *pParse, Index *pIdx){
  function SQLITE_PRIVATE (line 94677) | SQLITE_PRIVATE With *sqlite3WithAdd(
  function SQLITE_PRIVATE (line 94728) | SQLITE_PRIVATE void sqlite3WithDelete(sqlite3 *db, With *pWith){
  function callCollNeeded (line 94765) | static void callCollNeeded(sqlite3 *db, int enc, const char *zName){
  function synthCollSeq (line 94794) | static int synthCollSeq(sqlite3 *db, CollSeq *pColl){
  function SQLITE_PRIVATE (line 94824) | SQLITE_PRIVATE CollSeq *sqlite3GetCollSeq(
  function SQLITE_PRIVATE (line 94865) | SQLITE_PRIVATE int sqlite3CheckCollSeq(Parse *pParse, CollSeq *pColl){
  function CollSeq (line 94893) | static CollSeq *findCollSeqEntry(
  function SQLITE_PRIVATE (line 94946) | SQLITE_PRIVATE CollSeq *sqlite3FindCollSeq(
  function matchQuality (line 94993) | static int matchQuality(
  function FuncDef (line 95028) | static FuncDef *functionSearch(
  function SQLITE_PRIVATE (line 95046) | SQLITE_PRIVATE void sqlite3FuncDefInsert(
  function SQLITE_PRIVATE (line 95087) | SQLITE_PRIVATE FuncDef *sqlite3FindFunction(
  function SQLITE_PRIVATE (line 95170) | SQLITE_PRIVATE void sqlite3SchemaClear(void *p){
  function SQLITE_PRIVATE (line 95202) | SQLITE_PRIVATE Schema *sqlite3SchemaGet(sqlite3 *db, Btree *pBt){
  function SQLITE_PRIVATE (line 95252) | SQLITE_PRIVATE Table *sqlite3SrcListLookup(Parse *pParse, SrcList *pSrc){
  function SQLITE_PRIVATE (line 95273) | SQLITE_PRIVATE int sqlite3IsReadOnly(Parse *pParse, Table *pTab, int vie...
  function SQLITE_PRIVATE (line 95310) | SQLITE_PRIVATE void sqlite3MaterializeView(
  function SQLITE_PRIVATE (line 95346) | SQLITE_PRIVATE Expr *sqlite3LimitWhere(
  function SQLITE_PRIVATE (line 95438) | SQLITE_PRIVATE void sqlite3DeleteFrom(
  function SQLITE_PRIVATE (line 95810) | SQLITE_PRIVATE void sqlite3GenerateRowDelete(
  function SQLITE_PRIVATE (line 95939) | SQLITE_PRIVATE void sqlite3GenerateRowIndexDelete(
  function SQLITE_PRIVATE (line 96001) | SQLITE_PRIVATE int sqlite3GenerateIndexKey(
  function SQLITE_PRIVATE (line 96055) | SQLITE_PRIVATE void sqlite3ResolvePartIdxLabel(Parse *pParse, int iLabel){
  function CollSeq (line 96085) | static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){
  function sqlite3SkipAccumulatorLoad (line 96098) | static void sqlite3SkipAccumulatorLoad(sqlite3_context *context){
  function minmaxFunc (line 96105) | static void minmaxFunc(
  function typeofFunc (line 96135) | static void typeofFunc(
  function lengthFunc (line 96156) | static void lengthFunc(
  function absFunc (line 96196) | static void absFunc(sqlite3_context *context, int argc, sqlite3_value **...
  function instrFunc (line 96245) | static void instrFunc(
  function printfFunc (line 96287) | static void printfFunc(
  function substrFunc (line 96322) | static void substrFunc(
  function roundFunc (line 96417) | static void roundFunc(sqlite3_context *context, int argc, sqlite3_value ...
  function upperFunc (line 96479) | static void upperFunc(sqlite3_context *context, int argc, sqlite3_value ...
  function lowerFunc (line 96498) | static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value ...
  function randomFunc (line 96531) | static void randomFunc(
  function randomBlob (line 96557) | static void randomBlob(
  function last_insert_rowid (line 96581) | static void last_insert_rowid(
  function changes (line 96601) | static void changes(
  function total_changes (line 96615) | static void total_changes(
  type compareInfo (line 96630) | struct compareInfo {
  type compareInfo (line 96652) | struct compareInfo
  type compareInfo (line 96655) | struct compareInfo
  type compareInfo (line 96658) | struct compareInfo
  function patternCompare (line 96695) | static int patternCompare(
  function SQLITE_STDCALL (line 96826) | SQLITE_STDCALL sqlite3_strglob(const char *zGlobPattern, const char *zSt...
  function likeFunc (line 96852) | static void likeFunc(
  function nullifFunc (line 96905) | static void nullifFunc(
  function versionFunc (line 96921) | static void versionFunc(
  function sourceidFunc (line 96937) | static void sourceidFunc(
  function errlogFunc (line 96953) | static void errlogFunc(
  function compileoptionusedFunc (line 96969) | static void compileoptionusedFunc(
  function compileoptiongetFunc (line 96993) | static void compileoptiongetFunc(
  function quoteFunc (line 97023) | static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value ...
  function unicodeFunc (line 97099) | static void unicodeFunc(
  function charFunc (line 97114) | static void charFunc(
  function hexFunc (line 97155) | static void hexFunc(
  function zeroblobFunc (line 97183) | static void zeroblobFunc(
  function replaceFunc (line 97208) | static void replaceFunc(
  function trimFunc (line 97292) | static void trimFunc(
  function soundexFunc (line 97384) | static void soundexFunc(
  function loadExt (line 97437) | static void loadExt(sqlite3_context *context, int argc, sqlite3_value **...
  type SumCtx (line 97460) | typedef struct SumCtx SumCtx;
  type SumCtx (line 97461) | struct SumCtx {
  function sumStep (line 97479) | static void sumStep(sqlite3_context *context, int argc, sqlite3_value **...
  function sumFinalize (line 97500) | static void sumFinalize(sqlite3_context *context){
  function avgFinalize (line 97513) | static void avgFinalize(sqlite3_context *context){
  function totalFinalize (line 97520) | static void totalFinalize(sqlite3_context *context){
  type CountCtx (line 97531) | typedef struct CountCtx CountCtx;
  type CountCtx (line 97532) | struct CountCtx {
  function countStep (line 97539) | static void countStep(sqlite3_context *context, int argc, sqlite3_value ...
  function countFinalize (line 97555) | static void countFinalize(sqlite3_context *context){
  function minmaxStep (line 97564) | static void minmaxStep(
  function minMaxFinalize (line 97602) | static void minMaxFinalize(sqlite3_context *context){
  function groupConcatStep (line 97616) | static void groupConcatStep(
  function groupConcatFinalize (line 97649) | static void groupConcatFinalize(sqlite3_context *context){
  function SQLITE_PRIVATE (line 97669) | SQLITE_PRIVATE void sqlite3RegisterBuiltinFunctions(sqlite3 *db){
  function setLikeOptFlag (line 97680) | static void setLikeOptFlag(sqlite3 *db, const char *zName, u8 flagVal){
  function SQLITE_PRIVATE (line 97694) | SQLITE_PRIVATE void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSe...
  function SQLITE_PRIVATE (line 97722) | SQLITE_PRIVATE int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *...
  function SQLITE_PRIVATE (line 97757) | SQLITE_PRIVATE void sqlite3RegisterGlobalFunctions(void){
  function SQLITE_PRIVATE (line 98048) | SQLITE_PRIVATE int sqlite3FkLocateIndex(
  function fkLookupParent (line 98183) | static void fkLookupParent(
  function Expr (line 98323) | static Expr *exprTableRegister(
  function Expr (line 98355) | static Expr *exprTableColumn(
  function fkScanChildren (line 98402) | static void fkScanChildren(
  function SQLITE_PRIVATE (line 98526) | SQLITE_PRIVATE FKey *sqlite3FkReferences(Table *pTab){
  function fkTriggerDelete (line 98538) | static void fkTriggerDelete(sqlite3 *dbMem, Trigger *p){
  function SQLITE_PRIVATE (line 98566) | SQLITE_PRIVATE void sqlite3FkDropTable(Parse *pParse, SrcList *pName, Ta...
  function fkChildIsModified (line 98627) | static int fkChildIsModified(
  function fkParentIsModified (line 98654) | static int fkParentIsModified(
  function isSetNullAction (line 98683) | static int isSetNullAction(Parse *pParse, FKey *pFKey){
  function SQLITE_PRIVATE (line 98716) | SQLITE_PRIVATE void sqlite3FkCheck(
  function SQLITE_PRIVATE (line 98915) | SQLITE_PRIVATE u32 sqlite3FkOldmask(
  function SQLITE_PRIVATE (line 98952) | SQLITE_PRIVATE int sqlite3FkRequired(
  function Trigger (line 99012) | static Trigger *fkActionTrigger(
  function SQLITE_PRIVATE (line 99198) | SQLITE_PRIVATE void sqlite3FkActions(
  function SQLITE_PRIVATE (line 99230) | SQLITE_PRIVATE void sqlite3FkDelete(sqlite3 *db, Table *pTab){
  function SQLITE_PRIVATE (line 99294) | SQLITE_PRIVATE void sqlite3OpenTable(
  function SQLITE_PRIVATE (line 99340) | SQLITE_PRIVATE const char *sqlite3IndexAffinityStr(Vdbe *v, Index *pIdx){
  function SQLITE_PRIVATE (line 99388) | SQLITE_PRIVATE void sqlite3TableAffinity(Vdbe *v, Table *pTab, int iReg){
  function readsTable (line 99423) | static int readsTable(Parse *p, int iDb, Table *pTab){
  function autoIncBegin (line 99478) | static int autoIncBegin(
  function SQLITE_PRIVATE (line 99510) | SQLITE_PRIVATE void sqlite3AutoincrementBegin(Parse *pParse){
  function autoIncStep (line 99553) | static void autoIncStep(Parse *pParse, int memId, int regRowid){
  function SQLITE_PRIVATE (line 99566) | SQLITE_PRIVATE void sqlite3AutoincrementEnd(Parse *pParse){
  function SQLITE_PRIVATE (line 99704) | SQLITE_PRIVATE void sqlite3Insert(
  function SQLITE_PRIVATE (line 100393) | SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(
  function SQLITE_PRIVATE (line 100803) | SQLITE_PRIVATE void sqlite3CompleteInsertion(
  function SQLITE_PRIVATE (line 100887) | SQLITE_PRIVATE int sqlite3OpenTableAndIndices(
  function xferCompatibleCollation (line 100953) | static int xferCompatibleCollation(const char *z1, const char *z2){
  function xferCompatibleIndex (line 100975) | static int xferCompatibleIndex(Index *pDest, Index *pSrc){
  function xferOptimization (line 101029) | static int xferOptimization(
  function SQLITE_STDCALL (line 101321) | SQLITE_STDCALL sqlite3_exec(
  type sqlite3_api_routines (line 101479) | typedef struct sqlite3_api_routines sqlite3_api_routines;
  type sqlite3_api_routines (line 101491) | struct sqlite3_api_routines {
  function sqlite3LoadExtension (line 102377) | static int sqlite3LoadExtension(
  function SQLITE_STDCALL (line 102516) | SQLITE_STDCALL sqlite3_load_extension(
  function SQLITE_PRIVATE (line 102534) | SQLITE_PRIVATE void sqlite3CloseExtensions(sqlite3 *db){
  function SQLITE_STDCALL (line 102547) | SQLITE_STDCALL sqlite3_enable_load_extension(sqlite3 *db, int onoff){
  type sqlite3AutoExtList (line 102578) | typedef struct sqlite3AutoExtList sqlite3AutoExtList;
  function SQLITE_WSD (line 102579) | static SQLITE_WSD struct sqlite3AutoExtList {
  function SQLITE_STDCALL (line 102604) | SQLITE_STDCALL sqlite3_auto_extension(void (*xInit)(void)){
  function SQLITE_STDCALL (line 102649) | SQLITE_STDCALL sqlite3_cancel_auto_extension(void (*xInit)(void)){
  function SQLITE_STDCALL (line 102672) | SQLITE_STDCALL sqlite3_reset_auto_extension(void){
  function SQLITE_PRIVATE (line 102694) | SQLITE_PRIVATE void sqlite3AutoLoadExtensions(sqlite3 *db){
  type sPragmaNames (line 102811) | struct sPragmaNames {
  function u8 (line 103236) | static u8 getSafetyLevel(const char *z, int omitFull, u8 dflt){
  function SQLITE_PRIVATE (line 103258) | SQLITE_PRIVATE u8 sqlite3GetBoolean(const char *z, u8 dflt){
  function getLockingMode (line 103271) | static int getLockingMode(const char *z){
  function getAutoVacuum (line 103286) | static int getAutoVacuum(const char *z){
  function getTempStore (line 103302) | static int getTempStore(const char *z){
  function invalidateTempStorage (line 103320) | static int invalidateTempStorage(Parse *pParse){
  function changeTempStorage (line 103342) | static int changeTempStorage(Parse *pParse, const char *zStorageType){
  function returnSingleInt (line 103357) | static void returnSingleInt(Parse *pParse, const char *zLabel, i64 value){
  function setAllP
Condensed preview — 214 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (7,022K chars).
[
  {
    "path": ".gitignore",
    "chars": 16,
    "preview": "!Documentation~\n"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 21057,
    "preview": "Changelog\n---------\n<!--(CHANGELOG_TOP)-->\n**7.10.6**\n* Fixed a bug where GetUserID() could be called before SDK was ini"
  },
  {
    "path": "CHANGELOG.md.meta",
    "chars": 158,
    "preview": "fileFormatVersion: 2\nguid: b80fcd3c2bb2841c5bce7e35c4ea0c34\nTextScriptImporter:\n  externalObjects: {}\n  userData: \n  ass"
  },
  {
    "path": "Documentation~/index.md",
    "chars": 80,
    "preview": "Review the Unity SDK documentation at:\nhttps://gameanalytics.com/docs/unity-sdk\n"
  },
  {
    "path": "Editor/Android/Dependencies.xml",
    "chars": 242,
    "preview": "<dependencies>\n    <androidPackages>\n        <androidPackage spec=\"com.google.android.instantapps:instantapps:1.1.0\"/>\n "
  },
  {
    "path": "Editor/Android/Dependencies.xml.meta",
    "chars": 158,
    "preview": "fileFormatVersion: 2\nguid: f4d3591460e6344cca6fe66ecbde645f\nTextScriptImporter:\n  externalObjects: {}\n  userData: \n  ass"
  },
  {
    "path": "Editor/Android.meta",
    "chars": 172,
    "preview": "fileFormatVersion: 2\nguid: 7f4ee4210c9704d2a9a6b650fefc3a07\nfolderAsset: yes\nDefaultImporter:\n  externalObjects: {}\n  us"
  },
  {
    "path": "Editor/GA_AssetPostprocessor.cs",
    "chars": 31938,
    "preview": "using UnityEditor;\n\nnamespace GameAnalyticsSDK.Editor\n{\n    public class GA_AssetPostprocessor : AssetPostprocessor\n    "
  },
  {
    "path": "Editor/GA_AssetPostprocessor.cs.meta",
    "chars": 262,
    "preview": "fileFormatVersion: 2\nguid: a2403619fc556407983e282336344f15\ntimeCreated: 1457357714\nlicenseType: Pro\nMonoImporter:\n  ser"
  },
  {
    "path": "Editor/GA_AutoRun.cs",
    "chars": 461,
    "preview": "using UnityEngine;\nusing UnityEditor;\n\nnamespace GameAnalyticsSDK.Editor\n{\n\tpublic class GA_Autorun : AssetPostprocessor"
  },
  {
    "path": "Editor/GA_AutoRun.cs.meta",
    "chars": 178,
    "preview": "fileFormatVersion: 2\nguid: 0a3d477cdf26e4516ab204fc8fd9a841\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []"
  },
  {
    "path": "Editor/GA_ContinuationManager.cs",
    "chars": 1593,
    "preview": "using UnityEngine;\nusing System.Collections;\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing U"
  },
  {
    "path": "Editor/GA_ContinuationManager.cs.meta",
    "chars": 178,
    "preview": "fileFormatVersion: 2\nguid: 546155fc8c8e946beb7aa56aa713067c\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []"
  },
  {
    "path": "Editor/GA_EditorUtilities.cs",
    "chars": 1847,
    "preview": "using UnityEngine;\nusing System.Collections;\nusing System;\nusing System.Collections.Generic;\n\nnamespace GameAnalyticsSD"
  },
  {
    "path": "Editor/GA_EditorUtilities.cs.meta",
    "chars": 263,
    "preview": "fileFormatVersion: 2\nguid: dfd276755e3d24398b20a727ba63f40a\ntimeCreated: 1433250864\nlicenseType: Free\nMonoImporter:\n  se"
  },
  {
    "path": "Editor/GA_Menu.cs",
    "chars": 4190,
    "preview": "using UnityEngine;\nusing UnityEditor;\nusing System.IO;\nusing System.Text.RegularExpressions;\n\nnamespace GameAnalyticsSDK"
  },
  {
    "path": "Editor/GA_Menu.cs.meta",
    "chars": 178,
    "preview": "fileFormatVersion: 2\nguid: 406a6696e05cc447c8d6a01396d21b90\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []"
  },
  {
    "path": "Editor/GA_PostprocessBuild.cs",
    "chars": 12529,
    "preview": "using UnityEditor.Callbacks;\nusing UnityEditor;\nusing System.IO;\nusing System;\nusing System.Linq;\nusing System.Collectio"
  },
  {
    "path": "Editor/GA_PostprocessBuild.cs.meta",
    "chars": 178,
    "preview": "fileFormatVersion: 2\nguid: 19da6243a1a7449a585f5f945b7a1f94\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []"
  },
  {
    "path": "Editor/GA_SettingsInspector.cs",
    "chars": 116478,
    "preview": "/// <summary>\n/// The inspector for the GA prefab.\n/// </summary>\n\nusing UnityEngine;\nusing UnityEditor;\nusing System.Co"
  },
  {
    "path": "Editor/GA_SettingsInspector.cs.meta",
    "chars": 178,
    "preview": "fileFormatVersion: 2\nguid: 771d45ab6687246f4ac00b5bf537e520\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []"
  },
  {
    "path": "Editor/GA_SignUp.cs",
    "chars": 28343,
    "preview": "using UnityEngine;\nusing System.Collections;\nusing UnityEditor;\nusing System.Collections.Generic;\nusing GameAnalyticsSDK"
  },
  {
    "path": "Editor/GA_SignUp.cs.meta",
    "chars": 178,
    "preview": "fileFormatVersion: 2\nguid: 8badeee0f8f58488c94706222ee1e6fb\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []"
  },
  {
    "path": "Editor/GA_UpdateWindow.cs",
    "chars": 3083,
    "preview": "using UnityEngine;\nusing System.Collections;\nusing UnityEditor;\nusing System.Collections.Generic;\nusing GameAnalyticsSDK"
  },
  {
    "path": "Editor/GA_UpdateWindow.cs.meta",
    "chars": 178,
    "preview": "fileFormatVersion: 2\nguid: b025a92f1fe974e5faf57688a659013a\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []"
  },
  {
    "path": "Editor/GameAnalyticsInspector.cs",
    "chars": 1920,
    "preview": "/// <summary>\n/// The inspector for the GA prefab.\n/// </summary>\n\nusing UnityEngine;\nusing UnityEditor;\nusing System.Co"
  },
  {
    "path": "Editor/GameAnalyticsInspector.cs.meta",
    "chars": 178,
    "preview": "fileFormatVersion: 2\nguid: ef714624881664191ade6c6dda4bef44\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []"
  },
  {
    "path": "Editor/Playmaker/PlayMakerPresenceCheck.cs",
    "chars": 2529,
    "preview": "using UnityEngine;\nusing UnityEditor;\nusing System;\n\npublic class PlayMakerPresenceCheck : AssetPostprocessor{\n\n\tstatic"
  },
  {
    "path": "Editor/Playmaker/PlayMakerPresenceCheck.cs.meta",
    "chars": 178,
    "preview": "fileFormatVersion: 2\nguid: 59b631ff074a747748991261a24f2a0d\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []"
  },
  {
    "path": "Editor/Playmaker/SendProgressionEventActionEditor.cs",
    "chars": 1468,
    "preview": "#if false\n\nusing HutongGames.PlayMaker.Actions;\nusing HutongGames.PlayMakerEditor;\nusing UnityEditor;\nusing UnityEngine;"
  },
  {
    "path": "Editor/Playmaker/SendProgressionEventActionEditor.cs.meta",
    "chars": 178,
    "preview": "fileFormatVersion: 2\nguid: 0d4cc2e81a2a44fcbba82d0af4fe74fc\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []"
  },
  {
    "path": "Editor/Playmaker/SendResourceEventActionEditor.cs",
    "chars": 1282,
    "preview": "#if false\n\nusing HutongGames.PlayMaker.Actions;\nusing HutongGames.PlayMakerEditor;\nusing UnityEditor;\nusing UnityEngine;"
  },
  {
    "path": "Editor/Playmaker/SendResourceEventActionEditor.cs.meta",
    "chars": 178,
    "preview": "fileFormatVersion: 2\nguid: f50974faf2211494d9c937a90c66fc94\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []"
  },
  {
    "path": "Editor/Playmaker.meta",
    "chars": 150,
    "preview": "fileFormatVersion: 2\nguid: 19408680da89f4453b644599992eed64\nfolderAsset: yes\nDefaultImporter:\n  userData: \n  assetBundle"
  },
  {
    "path": "Editor/com.gameanalytics.sdk.Editor.asmdef",
    "chars": 433,
    "preview": "{\n    \"name\": \"GameAnalyticsSDK.Editor\",\n    \"rootNamespace\": \"GameAnalyticsSDK.Editor\",\n    \"references\": [\n        \"Ga"
  },
  {
    "path": "Editor/com.gameanalytics.sdk.Editor.asmdef.meta",
    "chars": 166,
    "preview": "fileFormatVersion: 2\nguid: 764a0e1d3535a456e9a4bf0c23f88bf7\nAssemblyDefinitionImporter:\n  externalObjects: {}\n  userData"
  },
  {
    "path": "Editor.meta",
    "chars": 172,
    "preview": "fileFormatVersion: 2\nguid: f92e61ab4c58641e1a8f5b56c6552567\nfolderAsset: yes\nDefaultImporter:\n  externalObjects: {}\n  us"
  },
  {
    "path": "Gizmos/GameAnalytics/Images/active.png.meta",
    "chars": 976,
    "preview": "fileFormatVersion: 2\nguid: 2a410468f562749b09418cdaaa03e6c3\nTextureImporter:\n  fileIDToRecycleName: {}\n  serializedVersi"
  },
  {
    "path": "Gizmos/GameAnalytics/Images/default.png.meta",
    "chars": 976,
    "preview": "fileFormatVersion: 2\nguid: 0a098930e63804755878cae3eada3bd7\nTextureImporter:\n  fileIDToRecycleName: {}\n  serializedVersi"
  },
  {
    "path": "Gizmos/GameAnalytics/Images/delete.png.meta",
    "chars": 975,
    "preview": "fileFormatVersion: 2\nguid: 85a626f1668244d30a4e9f616991a793\nTextureImporter:\n  fileIDToRecycleName: {}\n  serializedVersi"
  },
  {
    "path": "Gizmos/GameAnalytics/Images/game.png.meta",
    "chars": 975,
    "preview": "fileFormatVersion: 2\nguid: a9ac7103fc40b4e00923bf8c2cb5d30f\nTextureImporter:\n  fileIDToRecycleName: {}\n  serializedVersi"
  },
  {
    "path": "Gizmos/GameAnalytics/Images/home.png.meta",
    "chars": 975,
    "preview": "fileFormatVersion: 2\nguid: fe7e2ecc9b2fe447bafe90f6395d4709\nTextureImporter:\n  fileIDToRecycleName: {}\n  serializedVersi"
  },
  {
    "path": "Gizmos/GameAnalytics/Images/info.png.meta",
    "chars": 975,
    "preview": "fileFormatVersion: 2\nguid: 1b4dd779aadd54ac88856975af0d3c0a\nTextureImporter:\n  fileIDToRecycleName: {}\n  serializedVersi"
  },
  {
    "path": "Gizmos/GameAnalytics/Images/instrument.png.meta",
    "chars": 975,
    "preview": "fileFormatVersion: 2\nguid: 2ba470b4dffd848c6b267c34770cc63e\nTextureImporter:\n  fileIDToRecycleName: {}\n  serializedVersi"
  },
  {
    "path": "Gizmos/GameAnalytics/Images/question.png.meta",
    "chars": 975,
    "preview": "fileFormatVersion: 2\nguid: f8ea67e311b0c4b2ea05718e90fd3b5b\nTextureImporter:\n  fileIDToRecycleName: {}\n  serializedVersi"
  },
  {
    "path": "Gizmos/GameAnalytics/Images/update_orange.png.meta",
    "chars": 975,
    "preview": "fileFormatVersion: 2\nguid: 810bbb19deed24f3cb7b854f9bafde26\nTextureImporter:\n  fileIDToRecycleName: {}\n  serializedVersi"
  },
  {
    "path": "Gizmos/GameAnalytics/Images/user.png.meta",
    "chars": 975,
    "preview": "fileFormatVersion: 2\nguid: f49ef75333ff247cfb5dad4dab0d4dac\nTextureImporter:\n  fileIDToRecycleName: {}\n  serializedVersi"
  },
  {
    "path": "Gizmos/GameAnalytics/Images.meta",
    "chars": 107,
    "preview": "fileFormatVersion: 2\nguid: 33f691f424cec47a3a0f33815f922bd2\nfolderAsset: yes\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Gizmos/GameAnalytics/gaLogo.png.meta",
    "chars": 975,
    "preview": "fileFormatVersion: 2\nguid: 98df8f9c5678a4e5d964caa1244e8958\nTextureImporter:\n  fileIDToRecycleName: {}\n  serializedVersi"
  },
  {
    "path": "Gizmos/GameAnalytics.meta",
    "chars": 107,
    "preview": "fileFormatVersion: 2\nguid: 0815a0dd77f0048c28eb65386cbbaa8f\nfolderAsset: yes\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Gizmos.meta",
    "chars": 90,
    "preview": "fileFormatVersion: 2\nguid: e84d84c62e3464c2dbbaca66d1679469\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "GooglePackages/com.google.external-dependency-manager-1.2.168.tgz.meta",
    "chars": 155,
    "preview": "fileFormatVersion: 2\nguid: fd5816229e4fa47e889bd1491aec2faa\nDefaultImporter:\n  externalObjects: {}\n  userData: \n  assetB"
  },
  {
    "path": "GooglePackages.meta",
    "chars": 172,
    "preview": "fileFormatVersion: 2\nguid: 1e9ec6fcdfc904f27bd57071f0058c88\nfolderAsset: yes\nDefaultImporter:\n  externalObjects: {}\n  us"
  },
  {
    "path": "LICENSE.md",
    "chars": 1071,
    "preview": "MIT License\n\nCopyright (c) 2020 Game Analytics\n\nPermission is hereby granted, free of charge, to any person obtaining a "
  },
  {
    "path": "LICENSE.md.meta",
    "chars": 158,
    "preview": "fileFormatVersion: 2\nguid: b58062544dc6a4684b7986120a826d5f\nTextScriptImporter:\n  externalObjects: {}\n  userData: \n  ass"
  },
  {
    "path": "README.md",
    "chars": 1548,
    "preview": "[![openupm](https://img.shields.io/npm/v/com.gameanalytics.sdk?label=openupm&registry_uri=https://package.openupm.com)]("
  },
  {
    "path": "README.md.meta",
    "chars": 158,
    "preview": "fileFormatVersion: 2\nguid: 9da2a76077c244e25a15f11762e04ed4\nTextScriptImporter:\n  externalObjects: {}\n  userData: \n  ass"
  },
  {
    "path": "Runtime/Android/gameanalytics.aar.meta",
    "chars": 1531,
    "preview": "fileFormatVersion: 2\nguid: 316a5978eed5b400c8dd756e6eb47fdc\nPluginImporter:\n  externalObjects: {}\n  serializedVersion: 2"
  },
  {
    "path": "Runtime/Android/unity_gameanalytics.jar.meta",
    "chars": 1531,
    "preview": "fileFormatVersion: 2\nguid: 63c7fbb74d1694323b632b9b4cd7d1d1\nPluginImporter:\n  externalObjects: {}\n  serializedVersion: 2"
  },
  {
    "path": "Runtime/Android.meta",
    "chars": 191,
    "preview": "fileFormatVersion: 2\nguid: 597ee60d9a475c840bd1048278120a0c\nfolderAsset: yes\ntimeCreated: 1537519465\nlicenseType: Pro\nDe"
  },
  {
    "path": "Runtime/GameAnalytics.dll.meta",
    "chars": 867,
    "preview": "fileFormatVersion: 2\nguid: e185dadd9acc8487d8d4bb2936a243cc\ntimeCreated: 1572358580\nlicenseType: Pro\nPluginImporter:\n  s"
  },
  {
    "path": "Runtime/Linux/sqlite3.so.meta",
    "chars": 544,
    "preview": "fileFormatVersion: 2\nguid: 0683b20eb25df464b8f46d93396af7f6\ntimeCreated: 1565687811\nlicenseType: Pro\nPluginImporter:\n  s"
  },
  {
    "path": "Runtime/Linux.meta",
    "chars": 191,
    "preview": "fileFormatVersion: 2\nguid: f10ba24b63b2c46459091962994de8c1\nfolderAsset: yes\ntimeCreated: 1460635935\nlicenseType: Pro\nDe"
  },
  {
    "path": "Runtime/Playmaker/Examples/GameAnalyticsPlayMakerDemo.unitypackage.meta",
    "chars": 90,
    "preview": "fileFormatVersion: 2\nguid: 407ffca6c655a443ba2a0b82d2a43bdc\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Runtime/Playmaker/Examples.meta",
    "chars": 150,
    "preview": "fileFormatVersion: 2\nguid: 37976cfe0530549b39d0f7e0271a4255\nfolderAsset: yes\nDefaultImporter:\n  userData: \n  assetBundle"
  },
  {
    "path": "Runtime/Playmaker/GAInitialize.cs",
    "chars": 406,
    "preview": "#if false\n\nusing System;\nusing UnityEngine;\nusing GameAnalyticsSDK;\nusing GameAnalyticsSDK.Events;\n\nnamespace HutongGame"
  },
  {
    "path": "Runtime/Playmaker/GAInitialize.cs.meta",
    "chars": 284,
    "preview": "fileFormatVersion: 2\nguid: 9370f17c653e94c29948b6883597f4f3\ntimeCreated: 1537177094\nlicenseType: Pro\nMonoImporter:\n  ext"
  },
  {
    "path": "Runtime/Playmaker/GetABTestingId.cs",
    "chars": 680,
    "preview": "#if false\n\nusing System;\nusing UnityEngine;\nusing GameAnalyticsSDK;\nusing GameAnalyticsSDK.Events;\n\nnamespace HutongGame"
  },
  {
    "path": "Runtime/Playmaker/GetABTestingId.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 454d889a3c60a494aa071812450cf1e2\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "Runtime/Playmaker/GetABTestingVariantId.cs",
    "chars": 702,
    "preview": "#if false\n\nusing System;\nusing UnityEngine;\nusing GameAnalyticsSDK;\nusing GameAnalyticsSDK.Events;\n\nnamespace HutongGame"
  },
  {
    "path": "Runtime/Playmaker/GetABTestingVariantId.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 839df1d9532264d9c9365e5fe1469267\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "Runtime/Playmaker/GetRemoteConfigsValueAsString.cs",
    "chars": 1113,
    "preview": "#if false\n\nusing System;\nusing UnityEngine;\nusing GameAnalyticsSDK;\nusing GameAnalyticsSDK.Events;\n\nnamespace HutongGame"
  },
  {
    "path": "Runtime/Playmaker/GetRemoteConfigsValueAsString.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 385dfd45fbeae4407b26dab4174751a1\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "Runtime/Playmaker/IsRemoteConfigsReady.cs",
    "chars": 603,
    "preview": "#if false\n\nusing System;\nusing UnityEngine;\nusing GameAnalyticsSDK;\nusing GameAnalyticsSDK.Events;\n\nnamespace HutongGame"
  },
  {
    "path": "Runtime/Playmaker/IsRemoteConfigsReady.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: b4b02fb883d7e45cc9d445c8eca67419\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "Runtime/Playmaker/SendAdEvent.cs",
    "chars": 1562,
    "preview": "#if false\n\nusing System;\nusing GameAnalyticsSDK;\nusing GameAnalyticsSDK.Events;\n\nnamespace HutongGames.PlayMaker.Actions"
  },
  {
    "path": "Runtime/Playmaker/SendAdEvent.cs.meta",
    "chars": 178,
    "preview": "fileFormatVersion: 2\nguid: 08aa36c620a9340648d45b3707830e81\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []"
  },
  {
    "path": "Runtime/Playmaker/SendBusinessEvent.cs",
    "chars": 5528,
    "preview": "#if false\n\nusing System;\nusing GameAnalyticsSDK;\n\nnamespace HutongGames.PlayMaker.Actions\n{\n\t[ActionCategory(\"GameAnalyt"
  },
  {
    "path": "Runtime/Playmaker/SendBusinessEvent.cs.meta",
    "chars": 178,
    "preview": "fileFormatVersion: 2\nguid: 1c4b16e44b6ce4aa3829724d9730e8b6\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []"
  },
  {
    "path": "Runtime/Playmaker/SendDesignEvent.cs",
    "chars": 854,
    "preview": "#if false\n\nusing System;\nusing GameAnalyticsSDK;\nusing GameAnalyticsSDK.Events;\n\nnamespace HutongGames.PlayMaker.Actions"
  },
  {
    "path": "Runtime/Playmaker/SendDesignEvent.cs.meta",
    "chars": 178,
    "preview": "fileFormatVersion: 2\nguid: 69088c40a9088448b931f5688693ff5d\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []"
  },
  {
    "path": "Runtime/Playmaker/SendErrorEvent.cs",
    "chars": 806,
    "preview": "#if false\n\nusing System;\nusing GameAnalyticsSDK;\nusing GameAnalyticsSDK.Events;\n\nnamespace HutongGames.PlayMaker.Actions"
  },
  {
    "path": "Runtime/Playmaker/SendErrorEvent.cs.meta",
    "chars": 178,
    "preview": "fileFormatVersion: 2\nguid: 78ad7cbebadcf462498c3fb5f7e7f1d3\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []"
  },
  {
    "path": "Runtime/Playmaker/SendProgressionEvent.cs",
    "chars": 2199,
    "preview": "#if false\n\nusing System;\nusing GameAnalyticsSDK;\nusing GameAnalyticsSDK.Events;\n\nnamespace HutongGames.PlayMaker.Actions"
  },
  {
    "path": "Runtime/Playmaker/SendProgressionEvent.cs.meta",
    "chars": 178,
    "preview": "fileFormatVersion: 2\nguid: b86bf966f50b94d51b995b04fd531177\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []"
  },
  {
    "path": "Runtime/Playmaker/SendResourceEvent.cs",
    "chars": 1647,
    "preview": "#if false\n\nusing System;\nusing GameAnalyticsSDK;\nusing GameAnalyticsSDK.Events;\n\nnamespace HutongGames.PlayMaker.Actions"
  },
  {
    "path": "Runtime/Playmaker/SendResourceEvent.cs.meta",
    "chars": 178,
    "preview": "fileFormatVersion: 2\nguid: b0f8e458451f540a1b0dd6c6381858ec\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []"
  },
  {
    "path": "Runtime/Playmaker/SetCustomDimension.cs",
    "chars": 1317,
    "preview": "#if false\n\nusing System;\nusing UnityEngine;\nusing GameAnalyticsSDK;\nusing GameAnalyticsSDK.Events;\n\nnamespace HutongGame"
  },
  {
    "path": "Runtime/Playmaker/SetCustomDimension.cs.meta",
    "chars": 178,
    "preview": "fileFormatVersion: 2\nguid: f199e60f747934effb1d8e3fce31d6df\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []"
  },
  {
    "path": "Runtime/Playmaker.meta",
    "chars": 150,
    "preview": "fileFormatVersion: 2\nguid: 6fec94307c4a3455aa36a1c8ce4624f2\nfolderAsset: yes\nDefaultImporter:\n  userData: \n  assetBundle"
  },
  {
    "path": "Runtime/Prefabs/GameAnalytics.prefab.meta",
    "chars": 95,
    "preview": "fileFormatVersion: 2\nguid: a9d27d37bab3c447b8eb7a2a6756e952\nNativeFormatImporter:\n  userData: \n"
  },
  {
    "path": "Runtime/Prefabs.meta",
    "chars": 107,
    "preview": "fileFormatVersion: 2\nguid: 336a9dcba70fd4d78891a30d09ef699d\nfolderAsset: yes\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Runtime/SamsungTV/GameAnalytics.SamsungTV.dll.meta",
    "chars": 518,
    "preview": "fileFormatVersion: 2\nguid: 0f62e1daf300cc540841be311ff17de8\ntimeCreated: 1474581327\nlicenseType: Pro\nPluginImporter:\n  s"
  },
  {
    "path": "Runtime/SamsungTV/Mono.Data.Sqlite.dll.meta",
    "chars": 518,
    "preview": "fileFormatVersion: 2\nguid: 20bf6fb24fdb6204680a36dddcfc1217\ntimeCreated: 1473846400\nlicenseType: Pro\nPluginImporter:\n  s"
  },
  {
    "path": "Runtime/SamsungTV/sqlite3.c",
    "chars": 5507060,
    "preview": "/******************************************************************************\n** This file is an amalgamation of many "
  },
  {
    "path": "Runtime/SamsungTV/sqlite3.c.meta",
    "chars": 443,
    "preview": "fileFormatVersion: 2\nguid: d485564365158ac468bb985d519a87b3\ntimeCreated: 1474580030\nlicenseType: Pro\nPluginImporter:\n  s"
  },
  {
    "path": "Runtime/SamsungTV/sqlite3.h",
    "chars": 376915,
    "preview": "/*\n** 2001 September 15\n**\n** The author disclaims copyright to this source code.  In place of\n** a legal notice, here i"
  },
  {
    "path": "Runtime/SamsungTV/sqlite3.h.meta",
    "chars": 443,
    "preview": "fileFormatVersion: 2\nguid: 496a0307096f3cb4e816f8e580b26bf1\ntimeCreated: 1474580030\nlicenseType: Pro\nPluginImporter:\n  s"
  },
  {
    "path": "Runtime/SamsungTV.meta",
    "chars": 191,
    "preview": "fileFormatVersion: 2\nguid: 3bf67f7f4b82ae14e904a5f1f77b3c2f\nfolderAsset: yes\ntimeCreated: 1473846375\nlicenseType: Pro\nDe"
  },
  {
    "path": "Runtime/Scripts/ATT/GameAnalyticsATTClient.cs",
    "chars": 1787,
    "preview": "#if UNITY_IOS || UNITY_TVOS\nusing AOT;\n\nnamespace GameAnalyticsSDK.iOS\n{\n    public class GameAnalyticsATTClient\n    {\n "
  },
  {
    "path": "Runtime/Scripts/ATT/GameAnalyticsATTClient.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: b998bd7e85fce46a4ade4beb78edf1c9\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "Runtime/Scripts/ATT/GameAnalyticsATTObjCBridge.cs",
    "chars": 892,
    "preview": "#if UNITY_IOS || UNITY_TVOS\nusing System.Runtime.InteropServices;\n\nnamespace GameAnalyticsSDK.iOS\n{\n    public static cl"
  },
  {
    "path": "Runtime/Scripts/ATT/GameAnalyticsATTObjCBridge.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: 76cd2783d53fd4bfda5c04439f8dd1bd\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "Runtime/Scripts/ATT.meta",
    "chars": 172,
    "preview": "fileFormatVersion: 2\nguid: 98690bbca5f4c48c1ae7d15d7e184d53\nfolderAsset: yes\nDefaultImporter:\n  externalObjects: {}\n  us"
  },
  {
    "path": "Runtime/Scripts/Enums.cs",
    "chars": 1253,
    "preview": "using UnityEngine;\nusing System.Collections;\n\nnamespace GameAnalyticsSDK\n{\n\tpublic enum GAErrorSeverity\n\t{\n\t\tUndefined "
  },
  {
    "path": "Runtime/Scripts/Enums.cs.meta",
    "chars": 262,
    "preview": "fileFormatVersion: 2\nguid: efee5ff52c83843e08be583cbb6f3c5e\ntimeCreated: 1454583020\nlicenseType: Pro\nMonoImporter:\n  ser"
  },
  {
    "path": "Runtime/Scripts/Events/GAValidator.cs",
    "chars": 17254,
    "preview": "using System;\nusing UnityEngine;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Text.RegularE"
  },
  {
    "path": "Runtime/Scripts/Events/GAValidator.cs.meta",
    "chars": 262,
    "preview": "fileFormatVersion: 2\nguid: 2f5d575b6c7034a7385fb0ee45564a2e\ntimeCreated: 1476364280\nlicenseType: Pro\nMonoImporter:\n  ser"
  },
  {
    "path": "Runtime/Scripts/Events/GA_Ads.cs",
    "chars": 2781,
    "preview": "// This class handles game design events, such as kills, deaths, high scores, etc.\n\nusing UnityEngine;\nusing System.Coll"
  },
  {
    "path": "Runtime/Scripts/Events/GA_Ads.cs.meta",
    "chars": 178,
    "preview": "fileFormatVersion: 2\nguid: 55fff062c66344373bcb93c2873a3b81\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []"
  },
  {
    "path": "Runtime/Scripts/Events/GA_Business.cs",
    "chars": 1821,
    "preview": "/// <summary>\n/// This class handles business events, such as ingame purchases.\n/// </summary>\n\nusing UnityEngine;\nusing"
  },
  {
    "path": "Runtime/Scripts/Events/GA_Business.cs.meta",
    "chars": 178,
    "preview": "fileFormatVersion: 2\nguid: 9c87e364230a6ce459923436a2215b15\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []"
  },
  {
    "path": "Runtime/Scripts/Events/GA_Debug.cs",
    "chars": 3252,
    "preview": "/// <summary>\n/// This class handles error and exception messages, and makes sure they are added to the Quality categor"
  },
  {
    "path": "Runtime/Scripts/Events/GA_Debug.cs.meta",
    "chars": 178,
    "preview": "fileFormatVersion: 2\nguid: 6455957878877439898d50d5143ff4f6\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []"
  },
  {
    "path": "Runtime/Scripts/Events/GA_Design.cs",
    "chars": 2319,
    "preview": "// This class handles game design events, such as kills, deaths, high scores, etc.\n\nusing UnityEngine;\nusing System.Coll"
  },
  {
    "path": "Runtime/Scripts/Events/GA_Design.cs.meta",
    "chars": 178,
    "preview": "fileFormatVersion: 2\nguid: cc498e43de17b2e4e8cc95006c5007c4\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []"
  },
  {
    "path": "Runtime/Scripts/Events/GA_Error.cs",
    "chars": 793,
    "preview": "/// <summary>\n/// This class handles quality (QA) events, such as crashes, fps, etc.\n/// </summary>\n\nusing UnityEngine;\n"
  },
  {
    "path": "Runtime/Scripts/Events/GA_Error.cs.meta",
    "chars": 178,
    "preview": "fileFormatVersion: 2\nguid: e80bd2212bced4389864d19a834a7ae2\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []"
  },
  {
    "path": "Runtime/Scripts/Events/GA_Progression.cs",
    "chars": 2480,
    "preview": "using UnityEngine;\nusing System.Collections;\nusing System.Collections.Generic;\nusing GameAnalyticsSDK.Wrapper;\n\nnamespa"
  },
  {
    "path": "Runtime/Scripts/Events/GA_Progression.cs.meta",
    "chars": 178,
    "preview": "fileFormatVersion: 2\nguid: b06eb2deb6e7b4a288b01906f178cbaa\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []"
  },
  {
    "path": "Runtime/Scripts/Events/GA_Resource.cs",
    "chars": 512,
    "preview": "using UnityEngine;\nusing System.Collections;\nusing System.Collections.Generic;\nusing GameAnalyticsSDK.Wrapper;\n\nnamespa"
  },
  {
    "path": "Runtime/Scripts/Events/GA_Resource.cs.meta",
    "chars": 178,
    "preview": "fileFormatVersion: 2\nguid: f303caa895c244cb1817893da8a79602\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []"
  },
  {
    "path": "Runtime/Scripts/Events/GA_Setup.cs",
    "chars": 3229,
    "preview": "using UnityEngine;\nusing System.Collections;\nusing System.Collections.Generic;\nusing GameAnalyticsSDK.Utilities;\nusing "
  },
  {
    "path": "Runtime/Scripts/Events/GA_Setup.cs.meta",
    "chars": 178,
    "preview": "fileFormatVersion: 2\nguid: ad35c27ecc9784217817c154d2ff09ff\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []"
  },
  {
    "path": "Runtime/Scripts/Events/GA_SpecialEvents.cs",
    "chars": 5482,
    "preview": "/// <summary>\n/// This class handles special events unique to the Unity Wrapper, such as submitting level/scene changes,"
  },
  {
    "path": "Runtime/Scripts/Events/GA_SpecialEvents.cs.meta",
    "chars": 178,
    "preview": "fileFormatVersion: 2\nguid: adefe18d2f40dd84c8666cc766d5de82\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []"
  },
  {
    "path": "Runtime/Scripts/Events.meta",
    "chars": 191,
    "preview": "fileFormatVersion: 2\nguid: ca431681e0420425ab6fe704950724ad\nfolderAsset: yes\ntimeCreated: 1454582284\nlicenseType: Pro\nDe"
  },
  {
    "path": "Runtime/Scripts/GameAnalytics.cs",
    "chars": 60292,
    "preview": "using UnityEngine;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System;\nusing GameAnalyticsSDK.Even"
  },
  {
    "path": "Runtime/Scripts/GameAnalytics.cs.meta",
    "chars": 246,
    "preview": "fileFormatVersion: 2\nguid: 1488bee7925fe433fbddf989c50ad4ff\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "Runtime/Scripts/IGameAnalyticsATTListener.cs",
    "chars": 295,
    "preview": "\n\nnamespace GameAnalyticsSDK\n{\n    public interface IGameAnalyticsATTListener\n    {\n        void GameAnalyticsATTListene"
  },
  {
    "path": "Runtime/Scripts/IGameAnalyticsATTListener.cs.meta",
    "chars": 243,
    "preview": "fileFormatVersion: 2\nguid: f42b062f02b89464abfa8001c5249524\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n "
  },
  {
    "path": "Runtime/Scripts/Setup/Settings.cs",
    "chars": 18447,
    "preview": "using UnityEngine;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Runtime.InteropServices;\n\n#i"
  },
  {
    "path": "Runtime/Scripts/Setup/Settings.cs.meta",
    "chars": 178,
    "preview": "fileFormatVersion: 2\nguid: 6f78192cec1344d83a177ac5e6139ab3\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []"
  },
  {
    "path": "Runtime/Scripts/Setup.meta",
    "chars": 191,
    "preview": "fileFormatVersion: 2\nguid: 9627816acd56b4effa48a3cdf94616f7\nfolderAsset: yes\ntimeCreated: 1454584200\nlicenseType: Pro\nDe"
  },
  {
    "path": "Runtime/Scripts/State/GAState.cs",
    "chars": 1861,
    "preview": "using UnityEngine;\nusing System.Collections;\nusing System.Collections.Generic;\nusing GameAnalyticsSDK.Events;\nusing Gam"
  },
  {
    "path": "Runtime/Scripts/State/GAState.cs.meta",
    "chars": 262,
    "preview": "fileFormatVersion: 2\nguid: 35cbb352079de40f7aa3f481c1fa42c1\ntimeCreated: 1476432034\nlicenseType: Pro\nMonoImporter:\n  ser"
  },
  {
    "path": "Runtime/Scripts/State.meta",
    "chars": 191,
    "preview": "fileFormatVersion: 2\nguid: 3dd2fb1c891c84516814235531c7ad65\nfolderAsset: yes\ntimeCreated: 1476432369\nlicenseType: Pro\nDe"
  },
  {
    "path": "Runtime/Scripts/Utilities/GA_MiniJson.cs",
    "chars": 17720,
    "preview": "// using UnityEngine;\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing S"
  },
  {
    "path": "Runtime/Scripts/Utilities/GA_MiniJson.cs.meta",
    "chars": 178,
    "preview": "fileFormatVersion: 2\nguid: fb8bd556074cc4e21aa07b59846598e4\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []"
  },
  {
    "path": "Runtime/Scripts/Utilities.meta",
    "chars": 191,
    "preview": "fileFormatVersion: 2\nguid: c39146483030f4774b89297ed62d60b0\nfolderAsset: yes\ntimeCreated: 1454583652\nlicenseType: Pro\nDe"
  },
  {
    "path": "Runtime/Scripts/Wrapper/GA_AndroidWrapper.cs",
    "chars": 11576,
    "preview": "using UnityEngine;\nusing System.Collections.Generic;\nusing System.Collections;\nusing System;\nusing System.Runtime.Inter"
  },
  {
    "path": "Runtime/Scripts/Wrapper/GA_AndroidWrapper.cs.meta",
    "chars": 263,
    "preview": "fileFormatVersion: 2\nguid: 95ca1d00b4a004e3f9f69da6258ecdb1\ntimeCreated: 1433512546\nlicenseType: Free\nMonoImporter:\n  se"
  },
  {
    "path": "Runtime/Scripts/Wrapper/GA_MonoWrapper.cs",
    "chars": 9284,
    "preview": "using UnityEngine;\nusing System.Collections;\nusing System.Collections.Generic;\nusing GameAnalyticsSDK.Utilities;\n\nnames"
  },
  {
    "path": "Runtime/Scripts/Wrapper/GA_MonoWrapper.cs.meta",
    "chars": 262,
    "preview": "fileFormatVersion: 2\nguid: 858f7c48da8a74c11b8a3cc0cbf14499\ntimeCreated: 1459942538\nlicenseType: Pro\nMonoImporter:\n  ser"
  },
  {
    "path": "Runtime/Scripts/Wrapper/GA_TizenWrapper.cs",
    "chars": 4354,
    "preview": "using UnityEngine;\nusing System.Collections;\nusing System.Runtime.InteropServices;\n\nnamespace GameAnalyticsSDK.Wrapper\n"
  },
  {
    "path": "Runtime/Scripts/Wrapper/GA_TizenWrapper.cs.meta",
    "chars": 262,
    "preview": "fileFormatVersion: 2\nguid: 765d24f4e7ad33545adebb304b525f01\ntimeCreated: 1484347144\nlicenseType: Pro\nMonoImporter:\n  ser"
  },
  {
    "path": "Runtime/Scripts/Wrapper/GA_UWPWrapper.cs",
    "chars": 11743,
    "preview": "using UnityEngine;\nusing System.Collections;\nusing System.Collections.Generic;\nusing GameAnalyticsSDK.Utilities;\nusing "
  },
  {
    "path": "Runtime/Scripts/Wrapper/GA_UWPWrapper.cs.meta",
    "chars": 262,
    "preview": "fileFormatVersion: 2\nguid: 3f88bfa18b258b24887b9b4352dd096f\ntimeCreated: 1459942538\nlicenseType: Pro\nMonoImporter:\n  ser"
  },
  {
    "path": "Runtime/Scripts/Wrapper/GA_WebGLWrapper.cs",
    "chars": 5324,
    "preview": "using UnityEngine;\nusing System.Collections;\nusing System.Runtime.InteropServices;\nusing GameAnalyticsSDK.Utilities;\n\nn"
  },
  {
    "path": "Runtime/Scripts/Wrapper/GA_WebGLWrapper.cs.meta",
    "chars": 262,
    "preview": "fileFormatVersion: 2\nguid: b2e01a91a8f57cc4ab01eb170c170820\ntimeCreated: 1482351268\nlicenseType: Pro\nMonoImporter:\n  ser"
  },
  {
    "path": "Runtime/Scripts/Wrapper/GA_Wrapper.cs",
    "chars": 28485,
    "preview": "using UnityEngine;\nusing System.Collections;\nusing GameAnalyticsSDK.Validators;\nusing System.Collections.Generic;\nusing "
  },
  {
    "path": "Runtime/Scripts/Wrapper/GA_Wrapper.cs.meta",
    "chars": 263,
    "preview": "fileFormatVersion: 2\nguid: f770e9a858e99433d9719ad773afb625\ntimeCreated: 1433513029\nlicenseType: Free\nMonoImporter:\n  se"
  },
  {
    "path": "Runtime/Scripts/Wrapper/GA_iOSWrapper.cs",
    "chars": 7414,
    "preview": "using UnityEngine;\nusing System.Collections;\nusing System.Runtime.InteropServices;\n\nnamespace GameAnalyticsSDK.Wrapper\n"
  },
  {
    "path": "Runtime/Scripts/Wrapper/GA_iOSWrapper.cs.meta",
    "chars": 178,
    "preview": "fileFormatVersion: 2\nguid: b2de1245ae0c4465eaa008dbcc12d8b5\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []"
  },
  {
    "path": "Runtime/Scripts/Wrapper/GA_tvOSWrapper.cs",
    "chars": 5210,
    "preview": "using UnityEngine;\nusing System.Collections;\nusing System.Runtime.InteropServices;\n\nnamespace GameAnalyticsSDK.Wrapper\n"
  },
  {
    "path": "Runtime/Scripts/Wrapper/GA_tvOSWrapper.cs.meta",
    "chars": 262,
    "preview": "fileFormatVersion: 2\nguid: fa243e0b34b0943898d5bdbc2e0f5e04\ntimeCreated: 1454926877\nlicenseType: Pro\nMonoImporter:\n  ser"
  },
  {
    "path": "Runtime/Scripts/Wrapper.meta",
    "chars": 191,
    "preview": "fileFormatVersion: 2\nguid: 2ab1357cf54ee445096f8fcec7cebb4f\nfolderAsset: yes\ntimeCreated: 1454585571\nlicenseType: Pro\nDe"
  },
  {
    "path": "Runtime/Scripts.meta",
    "chars": 90,
    "preview": "fileFormatVersion: 2\nguid: 98054805af81e4bb89e1b012a33d02e9\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Runtime/Tizen/libGameAnalytics.a.meta",
    "chars": 439,
    "preview": "fileFormatVersion: 2\nguid: 87b563831833df94b948b555664a4412\ntimeCreated: 1484348001\nlicenseType: Pro\nPluginImporter:\n  s"
  },
  {
    "path": "Runtime/Tizen.meta",
    "chars": 191,
    "preview": "fileFormatVersion: 2\nguid: 07497346fc3c74471b121091604a8aac\nfolderAsset: yes\ntimeCreated: 1474664875\nlicenseType: Pro\nDe"
  },
  {
    "path": "Runtime/WSA/ARM/GameAnalytics.UWP.dll.meta",
    "chars": 514,
    "preview": "fileFormatVersion: 2\nguid: 22fd93fe611b3394290b35e003b17628\ntimeCreated: 1572358580\nlicenseType: Pro\nPluginImporter:\n  s"
  },
  {
    "path": "Runtime/WSA/ARM.meta",
    "chars": 191,
    "preview": "fileFormatVersion: 2\nguid: 06e4bc48f759c064a97abe714678c0bb\nfolderAsset: yes\ntimeCreated: 1468423838\nlicenseType: Pro\nDe"
  },
  {
    "path": "Runtime/WSA/x64/GameAnalytics.UWP.dll.meta",
    "chars": 514,
    "preview": "fileFormatVersion: 2\nguid: 6b4b6b600a7a81e499287fefa90fec16\ntimeCreated: 1572358580\nlicenseType: Pro\nPluginImporter:\n  s"
  },
  {
    "path": "Runtime/WSA/x64.meta",
    "chars": 191,
    "preview": "fileFormatVersion: 2\nguid: 0339ef243f7453347a0f733cec8211b8\nfolderAsset: yes\ntimeCreated: 1464875048\nlicenseType: Pro\nDe"
  },
  {
    "path": "Runtime/WSA/x86/GameAnalytics.UWP.dll.meta",
    "chars": 514,
    "preview": "fileFormatVersion: 2\nguid: f44a87d500d6c7143bcd0f8c3376d0b3\ntimeCreated: 1572358580\nlicenseType: Pro\nPluginImporter:\n  s"
  },
  {
    "path": "Runtime/WSA/x86.meta",
    "chars": 191,
    "preview": "fileFormatVersion: 2\nguid: 538142d99c83a6a438d035775c083193\nfolderAsset: yes\ntimeCreated: 1464875054\nlicenseType: Pro\nDe"
  },
  {
    "path": "Runtime/WSA.meta",
    "chars": 191,
    "preview": "fileFormatVersion: 2\nguid: 138eeeb379e3d884da5cba08c2fbcd9e\nfolderAsset: yes\ntimeCreated: 1464872829\nlicenseType: Pro\nDe"
  },
  {
    "path": "Runtime/WebGL/GameAnalytics.jspre",
    "chars": 226642,
    "preview": "/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto"
  },
  {
    "path": "Runtime/WebGL/GameAnalytics.jspre.meta",
    "chars": 458,
    "preview": "fileFormatVersion: 2\nguid: 163ec4bf94c105943aff6929a819f444\ntimeCreated: 1485641020\nlicenseType: Pro\nPluginImporter:\n  s"
  },
  {
    "path": "Runtime/WebGL/GameAnalyticsUnity.jslib",
    "chars": 8146,
    "preview": "var GameAnalyticsUnity = {\n    $listener: {\n        onRemoteConfigsUpdated: function()\n        {\n            SendMessage"
  },
  {
    "path": "Runtime/WebGL/GameAnalyticsUnity.jslib.meta",
    "chars": 439,
    "preview": "fileFormatVersion: 2\nguid: 128ff5fbca9e2134e8d5740af437bd8d\ntimeCreated: 1482489563\nlicenseType: Pro\nPluginImporter:\n  s"
  },
  {
    "path": "Runtime/WebGL/GameAnalyticsUtils.jspre",
    "chars": 182,
    "preview": "function allocateStringBuffer(str) {\n  const bufferSize = lengthBytesUTF8(str) + 1;\n  const buffer = _malloc(bufferSize)"
  },
  {
    "path": "Runtime/WebGL/GameAnalyticsUtils.jspre.meta",
    "chars": 604,
    "preview": "fileFormatVersion: 2\nguid: 11b26e4ae94df4c31b3f9d916328e517\nPluginImporter:\n  externalObjects: {}\n  serializedVersion: 2"
  },
  {
    "path": "Runtime/WebGL.meta",
    "chars": 191,
    "preview": "fileFormatVersion: 2\nguid: e816c44db40004a8684f8ede4c9f1f50\nfolderAsset: yes\ntimeCreated: 1460379222\nlicenseType: Pro\nDe"
  },
  {
    "path": "Runtime/Windows/x64/sqlite3.dll.meta",
    "chars": 439,
    "preview": "fileFormatVersion: 2\nguid: d8953a9bb703e45e7b3e4b181c1fc3f8\ntimeCreated: 1565687811\nlicenseType: Pro\nPluginImporter:\n  s"
  },
  {
    "path": "Runtime/Windows/x64.meta",
    "chars": 191,
    "preview": "fileFormatVersion: 2\nguid: 4933209fa31cf4b89aea2fc3dc71f314\nfolderAsset: yes\ntimeCreated: 1460635325\nlicenseType: Pro\nDe"
  },
  {
    "path": "Runtime/Windows/x86/sqlite3.dll.meta",
    "chars": 1299,
    "preview": "fileFormatVersion: 2\nguid: 68544a0857d96482ca2440c0ffef392a\ntimeCreated: 1464872388\nlicenseType: Pro\nPluginImporter:\n  s"
  },
  {
    "path": "Runtime/Windows/x86.meta",
    "chars": 191,
    "preview": "fileFormatVersion: 2\nguid: 08bda80a1b18445db9c656fd8853dc97\nfolderAsset: yes\ntimeCreated: 1460634738\nlicenseType: Pro\nDe"
  },
  {
    "path": "Runtime/Windows.meta",
    "chars": 191,
    "preview": "fileFormatVersion: 2\nguid: d9f9cf6d1c9d94c68a682838a983a3b9\nfolderAsset: yes\ntimeCreated: 1460634811\nlicenseType: Pro\nDe"
  },
  {
    "path": "Runtime/com.gameanalytics.sdk.Runtime.asmdef",
    "chars": 366,
    "preview": "{\n    \"name\": \"GameAnalyticsSDK\",\n    \"rootNamespace\": \"GameAnalyticsSDK\",\n    \"references\": [],\n    \"includePlatforms\":"
  },
  {
    "path": "Runtime/com.gameanalytics.sdk.Runtime.asmdef.meta",
    "chars": 166,
    "preview": "fileFormatVersion: 2\nguid: f8c64bb88d959406689053ae3f31183d\nAssemblyDefinitionImporter:\n  externalObjects: {}\n  userData"
  },
  {
    "path": "Runtime/iOS/GameAnalytics.h",
    "chars": 54155,
    "preview": "//\n//  GameAnalytics.h\n//  GA-SDK-IOS\n//\n//  Copyright (c) 2015 GameAnalytics. All rights reserved.\n//\n\n#import <Foundat"
  },
  {
    "path": "Runtime/iOS/GameAnalytics.h.meta",
    "chars": 396,
    "preview": "fileFormatVersion: 2\nguid: 47ae3aa637bbf40d58b3c71eda712a7c\nPluginImporter:\n  serializedVersion: 1\n  iconMap: {}\n  execu"
  },
  {
    "path": "Runtime/iOS/GameAnalytics.xcprivacy",
    "chars": 4346,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Runtime/iOS/GameAnalytics.xcprivacy.meta",
    "chars": 679,
    "preview": "fileFormatVersion: 2\nguid: 47b336a1c833c45c99837a76329b6fec\nPluginImporter:\n  externalObjects: {}\n  serializedVersion: 2"
  },
  {
    "path": "Runtime/iOS/GameAnalyticsATTObjCBridge.h",
    "chars": 659,
    "preview": "#import <Foundation/Foundation.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\ntypedef void (GameAnalyticsATTListenerNotDetermined)(void);\n"
  },
  {
    "path": "Runtime/iOS/GameAnalyticsATTObjCBridge.h.meta",
    "chars": 526,
    "preview": "fileFormatVersion: 2\nguid: 07f754a4e3cf34a898750465ec6d4afe\nPluginImporter:\n  externalObjects: {}\n  serializedVersion: 2"
  },
  {
    "path": "Runtime/iOS/GameAnalyticsATTObjCBridge.m",
    "chars": 1416,
    "preview": "#import <AppTrackingTransparency/AppTrackingTransparency.h>\n#import \"GameAnalyticsATTObjCBridge.h\"\n\n\nvoid GameAnalyticsR"
  },
  {
    "path": "Runtime/iOS/GameAnalyticsATTObjCBridge.m.meta",
    "chars": 679,
    "preview": "fileFormatVersion: 2\nguid: 1dbf392b666c845bf82215596840f3cf\nPluginImporter:\n  externalObjects: {}\n  serializedVersion: 2"
  },
  {
    "path": "Runtime/iOS/GameAnalyticsHyperBidHelper.m",
    "chars": 415,
    "preview": "#if gameanalytics_hyperbid_enabled\n#import <HyperBidSDK/HyperBidSDK.h>\n\nchar* getHyperBidSdkVersion() {\n    NSString* ve"
  },
  {
    "path": "Runtime/iOS/GameAnalyticsHyperBidHelper.m.meta",
    "chars": 679,
    "preview": "fileFormatVersion: 2\nguid: a5ff0e500ec2d4f3f938b6e9bff688ee\nPluginImporter:\n  externalObjects: {}\n  serializedVersion: 2"
  },
  {
    "path": "Runtime/iOS/GameAnalyticsTopOnHelper.m",
    "chars": 409,
    "preview": "#if gameanalytics_topon_enabled\n#import <AnyThinkSDK/AnyThinkSDK.h>\n\nchar* getTopOnSdkVersion() {\n    NSString* version "
  },
  {
    "path": "Runtime/iOS/GameAnalyticsTopOnHelper.m.meta",
    "chars": 679,
    "preview": "fileFormatVersion: 2\nguid: cc659be917120422eb70ee4a5e5bdb4b\nPluginImporter:\n  externalObjects: {}\n  serializedVersion: 2"
  },
  {
    "path": "Runtime/iOS/GameAnalyticsUnity.m",
    "chars": 22602,
    "preview": "//\n//  GameAnalyticsUnity.m\n//  GA-SDK-IOS\n//\n//  Copyright (c) GameAnalytics. All rights reserved.\n//\n\n#import \"GameAna"
  },
  {
    "path": "Runtime/iOS/GameAnalyticsUnity.m.meta",
    "chars": 603,
    "preview": "fileFormatVersion: 2\nguid: 1be0c7b0c717943a2bee44e5a7831b08\nPluginImporter:\n  externalObjects: {}\n  serializedVersion: 2"
  },
  {
    "path": "Runtime/iOS/libGameAnalytics.a.meta",
    "chars": 396,
    "preview": "fileFormatVersion: 2\nguid: 2d56f07645a844a4c9cd1186cf2e3d40\nPluginImporter:\n  serializedVersion: 1\n  iconMap: {}\n  execu"
  },
  {
    "path": "Runtime/iOS.meta",
    "chars": 107,
    "preview": "fileFormatVersion: 2\nguid: 1a475bd124e0f43e6b6da717182326d6\nfolderAsset: yes\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Runtime/tvOS/GameAnalyticsTVOS.h",
    "chars": 52825,
    "preview": "//\n//  GameAnalytics.h\n//  GA-SDK-IOS\n//\n//  Copyright (c) 2015 GameAnalytics. All rights reserved.\n//\n\n#import <Foundat"
  },
  {
    "path": "Runtime/tvOS/GameAnalyticsTVOS.h.meta",
    "chars": 438,
    "preview": "fileFormatVersion: 2\nguid: b6bf71225669c488b93e861115752dbc\ntimeCreated: 1565687811\nlicenseType: Pro\nPluginImporter:\n  s"
  },
  {
    "path": "Runtime/tvOS/GameAnalyticsTVOSUnity.m",
    "chars": 21535,
    "preview": "//\n//  GameAnalyticsUnity.m\n//  GA-SDK-IOS\n//\n//  Copyright (c) GameAnalytics. All rights reserved.\n//\n\n#import \"GameAna"
  }
]

// ... and 14 more files (download for full content)

About this extraction

This page contains the full source code of the GameAnalytics/GA-SDK-UNITY GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 214 files (6.5 MB), approximately 1.7M tokens, and a symbol index with 3972 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!