From 73c7bdf0c055380d6b9104de47c614b9ca8277da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Fri, 6 Sep 2024 21:45:58 -0500 Subject: [PATCH] feat: start of monorepo --- bun.lockb | Bin 381844 -> 196124 bytes package.json | 50 +- packages/core/package.json | 17 + .../core/src}/blitz/idToRegion.ts | 8 +- packages/core/src/blitz/index.ts | 1 + .../core/src/blitzkit/assertSecret.ts | 0 .../core/src}/blitzkit/gameDefinitions.ts | 4 +- packages/core/src/blitzkit/index.ts | 4 + .../core/src}/blitzkit/superCompress.ts | 2 +- .../core/src}/blitzkit/superDecompress.ts | 2 +- .../core/src/imgur}/imgur.ts | 0 packages/core/src/imgur/index.ts | 1 + packages/core/src/index.ts | 5 + packages/core/src/patreon/index.ts | 1 + .../core/src/patreon}/patreonLoginUrl.ts | 2 +- .../core/src}/zustand/createNextSafeStore.tsx | 0 packages/core/src/zustand/index.ts | 1 + packages/scripts/package.json | 12 + .../website/next-env.d.ts | 0 .../website/next.config.js | 21 +- packages/website/package.json | 31 + {public => packages/website/public}/ads.txt | 1970 ++++++++--------- .../public}/assets/audio/lotta-damage.mp3 | Bin .../website/public}/assets/versions.json | 0 .../website/public}/favicon.png | Bin .../public}/protos/BattleResultsClient.proto | 0 .../public}/protos/PlayerAvatarImage.proto | 0 .../public}/protos/average_definitions.proto | 0 .../website/public}/protos/reviews.proto | 0 .../website/public}/robots.txt | 0 .../api/[region]/rating/current/info/route.ts | 0 .../rating/current/league/[league]/route.ts | 0 .../rating/current/search/[username]/route.ts | 0 .../src}/app/api/patreon/auth/[code]/route.ts | 0 .../api/patreon/membership/[token]/route.ts | 0 .../app/api/patreon/refresh/[token]/route.ts | 0 .../src}/app/api/tank-averages/route.ts | 0 .../app/api/tank-voting/[id]/average/route.ts | 0 .../app/api/tank-voting/[id]/cast/route.ts | 0 .../website/src}/app/auth/[provider]/page.tsx | 0 .../website/src}/app/components/Checks.tsx | 5 +- .../src}/app/components/Hero/constants.ts | 0 .../src}/app/components/Hero/index.tsx | 2 +- .../src}/app/components/PageLoader.tsx | 0 .../website/src}/app/components/Plugs.tsx | 5 +- .../website/src}/app/components/ToolCard.tsx | 3 +- .../app/docs/[directory]/[document]/page.tsx | 0 .../website/src}/app/docs/patches/page.tsx | 0 {src => packages/website/src}/app/layout.css | 0 {src => packages/website/src}/app/layout.tsx | 15 +- .../website/src}/app/not-found.tsx | 0 {src => packages/website/src}/app/page.tsx | 0 .../website/src}/app/settings/page.tsx | 0 .../app/tools/compare/components/Body.tsx | 0 .../tools/compare/components/CompareRow.tsx | 0 .../components/CompareSectionTitle.tsx | 0 .../tools/compare/components/CompareTable.tsx | 0 .../app/tools/compare/components/Controls.tsx | 0 .../compare/components/DamageWarning.tsx | 0 .../IntersectionMarker/constants.ts | 0 .../components/IntersectionMarker/index.tsx | 0 .../app/tools/compare/components/TankCard.tsx | 0 .../tools/compare/components/TankControl.tsx | 0 .../website/src}/app/tools/compare/layout.tsx | 0 .../website/src}/app/tools/compare/page.tsx | 0 .../embed/[embed]/components/Boolean.tsx | 0 .../Color/components/ColorControllerRaw.tsx | 0 .../embed/[embed]/components/Color/index.tsx | 0 .../tools/embed/[embed]/components/Enum.tsx | 0 .../tools/embed/[embed]/components/Import.tsx | 0 .../components/PreviewWrapper/index.css.ts | 0 .../components/PreviewWrapper/index.tsx | 0 .../tools/embed/[embed]/components/Radius.tsx | 0 .../embed/[embed]/components/RichText.tsx | 0 .../tools/embed/[embed]/components/Size.tsx | 0 .../embed/[embed]/components/SizeWithout0.tsx | 0 .../tools/embed/[embed]/components/Slider.tsx | 0 .../tools/embed/[embed]/components/Text.tsx | 0 .../app/tools/embed/[embed]/host/page.tsx | 0 .../src}/app/tools/embed/[embed]/layout.tsx | 0 .../src}/app/tools/embed/[embed]/page.tsx | 0 .../tools/embed/configurations/breakdown.tsx | 0 .../app/tools/embed/configurations/index.ts | 0 .../website/src}/app/tools/embed/page.tsx | 0 .../website/src}/app/tools/embed/utilities.ts | 0 .../website/src}/app/tools/layout.tsx | 14 +- .../performance/components/BodyLoader.tsx | 0 .../tools/performance/components/Controls.tsx | 0 .../tools/performance/components/Header.tsx | 0 .../app/tools/performance/components/Info.tsx | 0 .../components/PlayerCountControl.tsx | 0 .../performance/components/RowLoader.tsx | 0 .../tools/performance/components/Table.tsx | 0 .../tools/performance/components/TankRow.tsx | 0 .../tools/performance/components/Tanks.tsx | 0 .../performance/components/TierBreakdown.tsx | 0 .../tools/performance/components/Total.tsx | 0 .../src}/app/tools/performance/layout.tsx | 0 .../src}/app/tools/performance/page.tsx | 0 .../rating/components/PageTurner/index.css.ts | 0 .../rating/components/PageTurner/index.tsx | 0 .../website/src}/app/tools/rating/page.tsx | 0 .../website/src}/app/tools/session/layout.tsx | 0 .../website/src}/app/tools/session/page.tsx | 0 .../[id]/components/CalloutsSection.tsx | 0 .../components/ConfigurationChildWrapper.tsx | 0 .../components/Consumables.tsx | 0 .../Characteristics/components/Equipment.tsx | 0 .../Characteristics/components/Info.tsx | 0 .../components/InfoWithDelta.tsx | 0 .../components/Miscellaneous.tsx | 0 .../Characteristics/components/Modules.tsx | 0 .../Characteristics/components/Provisions.tsx | 0 .../components/Skills/constants.tsx | 0 .../components/Skills/index.tsx | 0 .../[id]/components/Characteristics/index.tsx | 0 .../tankopedia/[id]/components/Control.tsx | 0 .../[id]/components/HistorySection.tsx | 0 .../tankopedia/[id]/components/Lighting.tsx | 0 .../[id]/components/Model/AutoClear.tsx | 0 .../Model/CharacteristicsSection.tsx | 0 .../[id]/components/Model/GameModeSection.tsx | 0 .../[id]/components/Model/HeroSection.tsx | 0 .../Model/MetaSection/components/Listing.tsx | 0 .../Stars/components/PartialStar.tsx | 0 .../MetaSection/components/Stars/index.tsx | 0 .../components/Votes/components/StarRow.tsx | 0 .../Votes/components/VoteCaster.tsx | 0 .../MetaSection/components/Votes/index.tsx | 0 .../components/Model/MetaSection/index.tsx | 0 .../[id]/components/Model/TankSandbox.tsx | 0 .../components/Model/TankSandboxLoader.tsx | 0 .../TechTreeSection/components/Arrow.tsx | 0 .../Model/TechTreeSection/components/Node.tsx | 0 .../Model/TechTreeSection/index.tsx | 0 .../Model/components/ModelLoader.tsx | 0 .../components/DynamicArmorSwitcher.tsx | 0 .../Model/components/Options/index.tsx | 0 .../components/Model/components/TankModel.tsx | 0 .../[id]/components/QuickInputs/index.css.ts | 0 .../[id]/components/QuickInputs/index.tsx | 0 .../tankopedia/[id]/components/SceneProps.tsx | 0 .../[id]/components/ShotDisplaySection.tsx | 0 .../[id]/components/TankopediaSeparator.tsx | 0 .../[id]/components/Thicknesses.tsx | 0 .../tankopedia/[id]/components/Title.tsx | 0 .../[id]/components/VideoSection.tsx | 0 .../src}/app/tools/tankopedia/[id]/layout.tsx | 0 .../src}/app/tools/tankopedia/[id]/page.tsx | 0 .../tankopedia/components/FilterControl.tsx | 0 .../tools/tankopedia/components/NoResults.tsx | 0 .../tankopedia/components/PageTurner.tsx | 0 .../tools/tankopedia/components/QuickLink.tsx | 0 .../tools/tankopedia/components/SearchBar.tsx | 0 .../components/SkeletonTankCard.tsx | 0 .../app/tools/tankopedia/components/Sort.tsx | 0 .../tankopedia/components/TankCard.css.ts | 0 .../tools/tankopedia/components/TankCard.tsx | 0 .../tankopedia/components/TankCardWrapper.tsx | 0 .../components/TankSearch/constants.tsx | 0 .../components/TankSearch/index.tsx | 0 .../tankopedia/components/TierFilter.tsx | 0 .../src}/app/tools/tankopedia/layout.tsx | 0 .../src}/app/tools/tankopedia/page.css.ts | 0 .../src}/app/tools/tankopedia/page.tsx | 0 .../website/src}/components/Ad.tsx | 2 +- .../components/AdMidSectionNarrowOnly.tsx | 0 .../components/AdMidSectionResponsive.tsx | 0 .../src}/components/AdMidSectionWideOnly.tsx | 0 .../src/components/BlitzkitButtonGrayIcon.tsx | 2 +- .../Footer/components/WoTBVersion.tsx | 0 .../src}/components/Footer/index.css.ts | 0 .../website/src}/components/Footer/index.tsx | 4 +- .../website/src}/components/Link.tsx | 0 .../components/WargamingAccountName.tsx | 4 +- .../components/WargamingLoginButton.tsx | 18 +- .../src}/components/Navbar/index.css.ts | 0 .../website/src}/components/Navbar/index.tsx | 12 +- .../website/src}/components/PageWrapper.tsx | 2 +- .../website/src}/components/Party3.tsx | 0 .../website/src/components/PatreonIcon.tsx | 0 .../website/src/components/WargamingIcon.tsx | 0 .../website/src}/constants/tools.tsx | 0 .../website/src}/hooks/useAdExempt.ts | 0 .../src}/hooks/useAppliedEquipments.ts | 2 +- .../website/src}/hooks/useArmor.ts | 0 .../src}/hooks/useAveragesExclusionRatio.ts | 0 .../website/src}/hooks/useAwait.ts | 0 .../website/src}/hooks/useDelta.ts | 0 .../website/src}/hooks/useEccentricity.ts | 2 +- .../website/src}/hooks/useEquipment.ts | 2 +- .../website/src}/hooks/useEquipmentPreset.ts | 0 .../website/src}/hooks/useFullScreen.ts | 0 .../src}/hooks/useFullscreenAvailability.ts | 0 .../website/src}/hooks/useIntersection.ts | 0 .../website/src}/hooks/useModel.ts | 0 .../website/src}/hooks/useOnScreen.ts | 0 .../website/src}/hooks/useProvision.ts | 2 +- .../src}/hooks/useTankModelDefinition.ts | 2 +- .../website/src}/hooks/useTankTransform.ts | 2 +- .../website/src}/hooks/useTankVotes.ts | 2 +- .../website/src}/hooks/userError.ts | 0 .../website/src}/stores/app/constants.ts | 0 .../website/src}/stores/app/index.ts | 2 +- .../website/src}/stores/compareEphemeral.ts | 2 +- .../website/src}/stores/comparePersistent.ts | 0 .../website/src}/stores/duel/constants.ts | 0 .../website/src}/stores/duel/index.ts | 8 +- .../src}/stores/embedState/constants.ts | 0 .../website/src}/stores/embedState/index.ts | 0 .../src}/stores/embedState/utilities.ts | 0 .../website/src}/stores/session.ts | 0 .../website/src}/stores/tankFilters.ts | 0 .../tankPerformancePersistent/constants.ts | 0 .../stores/tankPerformancePersistent/index.ts | 0 .../stores/tankPerformanceSort/constants.ts | 0 .../src}/stores/tankPerformanceSort/index.ts | 0 .../src}/stores/tankopediaEphemeral.ts | 0 .../stores/tankopediaPersistent/constants.ts | 0 .../src}/stores/tankopediaPersistent/index.ts | 0 .../website/src}/stores/tankopediaSort.ts | 0 packages/website/tsconfig.json | 34 + vercel.json => packages/website/vercel.json | 0 src/commands/ownedTanks.tsx | 2 +- src/commands/today.ts | 2 +- .../Armor/components/ArmorPlateDisplay.tsx | 6 +- .../Armor/components/PrimaryArmorScene.tsx | 2 +- .../PrimaryArmorSceneComponent/index.tsx | 4 +- .../Armor/components/ShotDisplay.tsx | 2 +- .../Armor/components/ShotDisplayCard.tsx | 2 +- .../Armor/components/SpacedArmorScene.tsx | 2 +- .../SpacedArmorSubExternal/index.tsx | 2 +- .../components/SpacedArmorSubSpaced/index.tsx | 2 +- .../SpacedArmorSceneComponent/index.tsx | 4 +- .../Armor/components/StaticArmor.tsx | 6 +- .../components/StaticArmorSceneComponent.tsx | 2 +- src/components/EquipmentManager.tsx | 2 +- src/components/TanksEmbed.tsx | 2 +- src/constants/wargamingApplicationID.ts | 2 - src/core/blitz/fetchBlitz.ts | 4 +- src/core/blitzkit/asset.ts | 2 +- src/core/blitzkit/commitAssets.ts | 2 +- src/core/blitzkit/fetchCdonLz4.ts | 2 +- src/core/blitzkit/filterTank.ts | 2 +- src/core/blitzkit/getArchivedRatingInfo.ts | 2 +- src/core/blitzkit/hasEquipment.ts | 2 +- src/core/blitzkit/octokit.ts | 2 +- src/core/blitzkit/tankCharacteristics.ts | 2 +- src/core/blitzkit/tankToCompareMember.ts | 2 +- src/core/blitzkit/tankToDuelMember.ts | 4 +- src/core/discord/addPeriodicFilterOptions.ts | 2 +- src/core/discord/manager.ts | 2 +- src/core/github/assetCommit.ts | 2 +- src/events/interactionCreate/index.ts | 2 +- src/icons/AngledPenetration.tsx | 25 - src/icons/Block.tsx | 25 - src/icons/NominalPenetration.tsx | 21 - src/icons/Ricochet.tsx | 20 - src/workers/bot.ts | 2 +- tsconfig.json | 20 +- 260 files changed, 1236 insertions(+), 1235 deletions(-) create mode 100644 packages/core/package.json rename {src/core => packages/core/src}/blitz/idToRegion.ts (75%) create mode 100644 packages/core/src/blitz/index.ts rename src/core/blitzkit/secret.ts => packages/core/src/blitzkit/assertSecret.ts (100%) rename {src/core => packages/core/src}/blitzkit/gameDefinitions.ts (72%) create mode 100644 packages/core/src/blitzkit/index.ts rename {src/core => packages/core/src}/blitzkit/superCompress.ts (77%) rename {src/core => packages/core/src}/blitzkit/superDecompress.ts (79%) rename {src/core/blitzkit => packages/core/src/imgur}/imgur.ts (100%) create mode 100644 packages/core/src/imgur/index.ts create mode 100644 packages/core/src/index.ts create mode 100644 packages/core/src/patreon/index.ts rename {src/core/blitzkit => packages/core/src/patreon}/patreonLoginUrl.ts (85%) rename {src/core => packages/core/src}/zustand/createNextSafeStore.tsx (100%) create mode 100644 packages/core/src/zustand/index.ts create mode 100644 packages/scripts/package.json rename next-env.d.ts => packages/website/next-env.d.ts (100%) rename next.config.js => packages/website/next.config.js (72%) create mode 100644 packages/website/package.json rename {public => packages/website/public}/ads.txt (98%) rename {public => packages/website/public}/assets/audio/lotta-damage.mp3 (100%) rename {public => packages/website/public}/assets/versions.json (100%) rename {public => packages/website/public}/favicon.png (100%) rename {public => packages/website/public}/protos/BattleResultsClient.proto (100%) rename {public => packages/website/public}/protos/PlayerAvatarImage.proto (100%) rename {public => packages/website/public}/protos/average_definitions.proto (100%) rename {public => packages/website/public}/protos/reviews.proto (100%) rename {public => packages/website/public}/robots.txt (100%) rename {src => packages/website/src}/app/api/[region]/rating/current/info/route.ts (100%) rename {src => packages/website/src}/app/api/[region]/rating/current/league/[league]/route.ts (100%) rename {src => packages/website/src}/app/api/[region]/rating/current/search/[username]/route.ts (100%) rename {src => packages/website/src}/app/api/patreon/auth/[code]/route.ts (100%) rename {src => packages/website/src}/app/api/patreon/membership/[token]/route.ts (100%) rename {src => packages/website/src}/app/api/patreon/refresh/[token]/route.ts (100%) rename {src => packages/website/src}/app/api/tank-averages/route.ts (100%) rename {src => packages/website/src}/app/api/tank-voting/[id]/average/route.ts (100%) rename {src => packages/website/src}/app/api/tank-voting/[id]/cast/route.ts (100%) rename {src => packages/website/src}/app/auth/[provider]/page.tsx (100%) rename {src => packages/website/src}/app/components/Checks.tsx (95%) rename {src => packages/website/src}/app/components/Hero/constants.ts (100%) rename {src => packages/website/src}/app/components/Hero/index.tsx (97%) rename {src => packages/website/src}/app/components/PageLoader.tsx (100%) rename {src => packages/website/src}/app/components/Plugs.tsx (93%) rename {src => packages/website/src}/app/components/ToolCard.tsx (96%) rename {src => packages/website/src}/app/docs/[directory]/[document]/page.tsx (100%) rename {src => packages/website/src}/app/docs/patches/page.tsx (100%) rename {src => packages/website/src}/app/layout.css (100%) rename {src => packages/website/src}/app/layout.tsx (84%) rename {src => packages/website/src}/app/not-found.tsx (100%) rename {src => packages/website/src}/app/page.tsx (100%) rename {src => packages/website/src}/app/settings/page.tsx (100%) rename {src => packages/website/src}/app/tools/compare/components/Body.tsx (100%) rename {src => packages/website/src}/app/tools/compare/components/CompareRow.tsx (100%) rename {src => packages/website/src}/app/tools/compare/components/CompareSectionTitle.tsx (100%) rename {src => packages/website/src}/app/tools/compare/components/CompareTable.tsx (100%) rename {src => packages/website/src}/app/tools/compare/components/Controls.tsx (100%) rename {src => packages/website/src}/app/tools/compare/components/DamageWarning.tsx (100%) rename {src => packages/website/src}/app/tools/compare/components/IntersectionMarker/constants.ts (100%) rename {src => packages/website/src}/app/tools/compare/components/IntersectionMarker/index.tsx (100%) rename {src => packages/website/src}/app/tools/compare/components/TankCard.tsx (100%) rename {src => packages/website/src}/app/tools/compare/components/TankControl.tsx (100%) rename {src => packages/website/src}/app/tools/compare/layout.tsx (100%) rename {src => packages/website/src}/app/tools/compare/page.tsx (100%) rename {src => packages/website/src}/app/tools/embed/[embed]/components/Boolean.tsx (100%) rename {src => packages/website/src}/app/tools/embed/[embed]/components/Color/components/ColorControllerRaw.tsx (100%) rename {src => packages/website/src}/app/tools/embed/[embed]/components/Color/index.tsx (100%) rename {src => packages/website/src}/app/tools/embed/[embed]/components/Enum.tsx (100%) rename {src => packages/website/src}/app/tools/embed/[embed]/components/Import.tsx (100%) rename {src => packages/website/src}/app/tools/embed/[embed]/components/PreviewWrapper/index.css.ts (100%) rename {src => packages/website/src}/app/tools/embed/[embed]/components/PreviewWrapper/index.tsx (100%) rename {src => packages/website/src}/app/tools/embed/[embed]/components/Radius.tsx (100%) rename {src => packages/website/src}/app/tools/embed/[embed]/components/RichText.tsx (100%) rename {src => packages/website/src}/app/tools/embed/[embed]/components/Size.tsx (100%) rename {src => packages/website/src}/app/tools/embed/[embed]/components/SizeWithout0.tsx (100%) rename {src => packages/website/src}/app/tools/embed/[embed]/components/Slider.tsx (100%) rename {src => packages/website/src}/app/tools/embed/[embed]/components/Text.tsx (100%) rename {src => packages/website/src}/app/tools/embed/[embed]/host/page.tsx (100%) rename {src => packages/website/src}/app/tools/embed/[embed]/layout.tsx (100%) rename {src => packages/website/src}/app/tools/embed/[embed]/page.tsx (100%) rename {src => packages/website/src}/app/tools/embed/configurations/breakdown.tsx (100%) rename {src => packages/website/src}/app/tools/embed/configurations/index.ts (100%) rename {src => packages/website/src}/app/tools/embed/page.tsx (100%) rename {src => packages/website/src}/app/tools/embed/utilities.ts (100%) rename {src => packages/website/src}/app/tools/layout.tsx (84%) rename {src => packages/website/src}/app/tools/performance/components/BodyLoader.tsx (100%) rename {src => packages/website/src}/app/tools/performance/components/Controls.tsx (100%) rename {src => packages/website/src}/app/tools/performance/components/Header.tsx (100%) rename {src => packages/website/src}/app/tools/performance/components/Info.tsx (100%) rename {src => packages/website/src}/app/tools/performance/components/PlayerCountControl.tsx (100%) rename {src => packages/website/src}/app/tools/performance/components/RowLoader.tsx (100%) rename {src => packages/website/src}/app/tools/performance/components/Table.tsx (100%) rename {src => packages/website/src}/app/tools/performance/components/TankRow.tsx (100%) rename {src => packages/website/src}/app/tools/performance/components/Tanks.tsx (100%) rename {src => packages/website/src}/app/tools/performance/components/TierBreakdown.tsx (100%) rename {src => packages/website/src}/app/tools/performance/components/Total.tsx (100%) rename {src => packages/website/src}/app/tools/performance/layout.tsx (100%) rename {src => packages/website/src}/app/tools/performance/page.tsx (100%) rename {src => packages/website/src}/app/tools/rating/components/PageTurner/index.css.ts (100%) rename {src => packages/website/src}/app/tools/rating/components/PageTurner/index.tsx (100%) rename {src => packages/website/src}/app/tools/rating/page.tsx (100%) rename {src => packages/website/src}/app/tools/session/layout.tsx (100%) rename {src => packages/website/src}/app/tools/session/page.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/CalloutsSection.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Characteristics/components/ConfigurationChildWrapper.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Characteristics/components/Consumables.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Characteristics/components/Equipment.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Characteristics/components/Info.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Characteristics/components/InfoWithDelta.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Characteristics/components/Miscellaneous.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Characteristics/components/Modules.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Characteristics/components/Provisions.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Characteristics/components/Skills/constants.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Characteristics/components/Skills/index.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Characteristics/index.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Control.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/HistorySection.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Lighting.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Model/AutoClear.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Model/CharacteristicsSection.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Model/GameModeSection.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Model/HeroSection.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Listing.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Stars/components/PartialStar.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Stars/index.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Votes/components/StarRow.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Votes/components/VoteCaster.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Votes/index.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Model/MetaSection/index.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Model/TankSandbox.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Model/TankSandboxLoader.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Model/TechTreeSection/components/Arrow.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Model/TechTreeSection/components/Node.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Model/TechTreeSection/index.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Model/components/ModelLoader.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Model/components/Options/components/DynamicArmorSwitcher.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Model/components/Options/index.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Model/components/TankModel.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/QuickInputs/index.css.ts (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/QuickInputs/index.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/SceneProps.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/ShotDisplaySection.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/TankopediaSeparator.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Thicknesses.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/Title.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/components/VideoSection.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/layout.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/[id]/page.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/components/FilterControl.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/components/NoResults.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/components/PageTurner.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/components/QuickLink.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/components/SearchBar.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/components/SkeletonTankCard.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/components/Sort.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/components/TankCard.css.ts (100%) rename {src => packages/website/src}/app/tools/tankopedia/components/TankCard.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/components/TankCardWrapper.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/components/TankSearch/constants.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/components/TankSearch/index.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/components/TierFilter.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/layout.tsx (100%) rename {src => packages/website/src}/app/tools/tankopedia/page.css.ts (100%) rename {src => packages/website/src}/app/tools/tankopedia/page.tsx (100%) rename {src => packages/website/src}/components/Ad.tsx (97%) rename {src => packages/website/src}/components/AdMidSectionNarrowOnly.tsx (100%) rename {src => packages/website/src}/components/AdMidSectionResponsive.tsx (100%) rename {src => packages/website/src}/components/AdMidSectionWideOnly.tsx (100%) rename src/icons/BlitzkitButtonGray.tsx => packages/website/src/components/BlitzkitButtonGrayIcon.tsx (97%) rename {src => packages/website/src}/components/Footer/components/WoTBVersion.tsx (100%) rename {src => packages/website/src}/components/Footer/index.css.ts (100%) rename {src => packages/website/src}/components/Footer/index.tsx (97%) rename {src => packages/website/src}/components/Link.tsx (100%) rename {src => packages/website/src}/components/Navbar/components/WargamingAccountName.tsx (82%) rename {src => packages/website/src}/components/Navbar/components/WargamingLoginButton.tsx (67%) rename {src => packages/website/src}/components/Navbar/index.css.ts (100%) rename {src => packages/website/src}/components/Navbar/index.tsx (96%) rename {src => packages/website/src}/components/PageWrapper.tsx (93%) rename {src => packages/website/src}/components/Party3.tsx (100%) rename src/icons/Patreon.tsx => packages/website/src/components/PatreonIcon.tsx (100%) rename src/icons/Wargaming.tsx => packages/website/src/components/WargamingIcon.tsx (100%) rename {src => packages/website/src}/constants/tools.tsx (100%) rename {src => packages/website/src}/hooks/useAdExempt.ts (100%) rename {src => packages/website/src}/hooks/useAppliedEquipments.ts (80%) rename {src => packages/website/src}/hooks/useArmor.ts (100%) rename {src => packages/website/src}/hooks/useAveragesExclusionRatio.ts (100%) rename {src => packages/website/src}/hooks/useAwait.ts (100%) rename {src => packages/website/src}/hooks/useDelta.ts (100%) rename {src => packages/website/src}/hooks/useEccentricity.ts (93%) rename {src => packages/website/src}/hooks/useEquipment.ts (93%) rename {src => packages/website/src}/hooks/useEquipmentPreset.ts (100%) rename {src => packages/website/src}/hooks/useFullScreen.ts (100%) rename {src => packages/website/src}/hooks/useFullscreenAvailability.ts (100%) rename {src => packages/website/src}/hooks/useIntersection.ts (100%) rename {src => packages/website/src}/hooks/useModel.ts (100%) rename {src => packages/website/src}/hooks/useOnScreen.ts (100%) rename {src => packages/website/src}/hooks/useProvision.ts (70%) rename {src => packages/website/src}/hooks/useTankModelDefinition.ts (55%) rename {src => packages/website/src}/hooks/useTankTransform.ts (97%) rename {src => packages/website/src}/hooks/useTankVotes.ts (95%) rename {src => packages/website/src}/hooks/userError.ts (100%) rename {src => packages/website/src}/stores/app/constants.ts (100%) rename {src => packages/website/src}/stores/app/index.ts (91%) rename {src => packages/website/src}/stores/compareEphemeral.ts (85%) rename {src => packages/website/src}/stores/comparePersistent.ts (100%) rename {src => packages/website/src}/stores/duel/constants.ts (100%) rename {src => packages/website/src}/stores/duel/index.ts (80%) rename {src => packages/website/src}/stores/embedState/constants.ts (100%) rename {src => packages/website/src}/stores/embedState/index.ts (100%) rename {src => packages/website/src}/stores/embedState/utilities.ts (100%) rename {src => packages/website/src}/stores/session.ts (100%) rename {src => packages/website/src}/stores/tankFilters.ts (100%) rename {src => packages/website/src}/stores/tankPerformancePersistent/constants.ts (100%) rename {src => packages/website/src}/stores/tankPerformancePersistent/index.ts (100%) rename {src => packages/website/src}/stores/tankPerformanceSort/constants.ts (100%) rename {src => packages/website/src}/stores/tankPerformanceSort/index.ts (100%) rename {src => packages/website/src}/stores/tankopediaEphemeral.ts (100%) rename {src => packages/website/src}/stores/tankopediaPersistent/constants.ts (100%) rename {src => packages/website/src}/stores/tankopediaPersistent/index.ts (100%) rename {src => packages/website/src}/stores/tankopediaSort.ts (100%) create mode 100644 packages/website/tsconfig.json rename vercel.json => packages/website/vercel.json (100%) delete mode 100644 src/constants/wargamingApplicationID.ts delete mode 100644 src/icons/AngledPenetration.tsx delete mode 100644 src/icons/Block.tsx delete mode 100644 src/icons/NominalPenetration.tsx delete mode 100644 src/icons/Ricochet.tsx diff --git a/bun.lockb b/bun.lockb index 17a9761174b9afe9d883531957369b24a0803e56..5acc93c9cf2d5402b2c510654f2cf1fe619129ea 100644 GIT binary patch delta 53062 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 literal 381844 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 Y_Myt5-Y`7<*1*(cqvmi5vdyM5>hq~ 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 bSibOFfHV8e^DN{8KlFWHD6sth^85b)$xnpz diff --git a/package.json b/package.json index 8b17c7282..312950d6d 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,12 @@ { "name": "blitzkit", + "private": true, "version": "1.22.6", "description": "🎉 Tools for everything World of Tanks Blitz", - "main": "src/server.ts", "type": "module", + "workspaces": [ + "packages/*" + ], "scripts": { "build:assets": "bun scripts/buildAssets/index.ts", "build:averages": "bun scripts/averages", @@ -27,17 +30,11 @@ "discoverids": "scripts/discoverIds.ts" }, "license": "MIT", - "dependencies": { - "@gltf-transform/core": "^3.10.1", - "@nivo/bar": "^0.87.0", - "@octokit/plugin-throttling": "^8.2.0", - "@octokit/rest": "^20.1.1", - "@prisma/client": "^5.19.1", + "devDependencies": { + "typescript": "^5.5.4" + }, + "_dependencies": { "@radix-ui/colors": "^3.0.0", - "@radix-ui/react-icons": "^1.3.0", - "@radix-ui/themes": "^3.1.3", - "@react-three/drei": "^9.111.5", - "@react-three/fiber": "^8.17.6", "@resvg/resvg-js": "^2.6.2", "@types/three": "^0.160.0", "@vanilla-extract/css": "^1.15.5", @@ -53,59 +50,38 @@ "false": "^0.0.4", "fuzzysort": "^2.0.4", "googleapis": "^134.0.0", - "immer": "^10.1.1", "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "lz4js": "^0.2.0", "markdown-escape": "^2.0.0", "markdown-to-jsx": "^7.5.0", - "next": "^14.2.7", "parse-dds": "^1.2.1", "pickleparser": "^0.2.1", "postprocessing": "^6.36.0", "progress": "^2.0.3", "protobufjs": "^7.4.0", - "react": "^18.3.1", - "react-device-detect": "^2.2.3", - "react-dom": "^18.3.1", - "react-fuzzysort": "^1.0.1", - "react-promise-suspense": "^0.3.4", "satori": "^0.10.14", "sharp": "^0.33.5", - "three": "0.159.0", "three-stdlib": "^2.32.2", "urlon": "^3.1.0", - "yaml": "^2.5.0", - "zustand": "^4.5.5" + "yaml": "^2.5.0" }, - "devDependencies": { + "_devDependencies": { "@total-typescript/ts-reset": "^0.5.1", "@types/adm-zip": "^0.5.5", - "@types/bun": "^1.1.8", + "@types/bun": "latest", "@types/decompress": "^4.2.7", "@types/escape-html": "^1.0.4", "@types/express": "^4.17.21", "@types/js-yaml": "^4.0.9", - "@types/lodash": "^4.17.7", - "@types/lz4": "^0.6.4", - "@types/lz4js": "^0.2.1", "@types/markdown-escape": "^1.1.3", "@types/node": "^20.16.3", "@types/parse-dds": "^1.0.3", "@types/pngjs": "^6.0.5", "@types/progress": "^2.0.7", - "@types/react": "^18.3.5", - "@vanilla-extract/next-plugin": "^2.4.5", "compare-versions": "^6.1.1", "crc": "^4.3.2", "fast-xml-parser": "^4.4.1", "knip": "^3.13.2", "prettier": "^3.3.3", - "prisma": "^5.19.1", - "typescript": "^5.5.4" - }, - "packageManager": "yarn@1.22.1", - "trustedDependencies": [ - "protobufjs" - ] + "prisma": "^5.19.1" + } } diff --git a/packages/core/package.json b/packages/core/package.json new file mode 100644 index 000000000..b6a60eca4 --- /dev/null +++ b/packages/core/package.json @@ -0,0 +1,17 @@ +{ + "name": "@blitzkit/core", + "private": true, + "type": "module", + "main": "src/index.ts", + "dependencies": { + "@octokit/rest": "^20.1.1", + "lodash": "^4.17.21", + "@prisma/client": "^5.19.1", + "@octokit/plugin-throttling": "^8.2.0", + "lz4js": "^0.2.0" + }, + "devDependencies": { + "@types/lodash": "^4.17.7", + "@types/lz4js": "^0.2.1" + } +} diff --git a/src/core/blitz/idToRegion.ts b/packages/core/src/blitz/idToRegion.ts similarity index 75% rename from src/core/blitz/idToRegion.ts rename to packages/core/src/blitz/idToRegion.ts index 4eee68b40..ddc7c788f 100644 --- a/src/core/blitz/idToRegion.ts +++ b/packages/core/src/blitz/idToRegion.ts @@ -1,15 +1,15 @@ import { Region } from '../../constants/regions'; -export const MIN_IDS: Record = { +export const MIN_REGION_IDS: Record = { asia: 20e8, com: 10e8, eu: 5e8, }; -export const MAX_IDS: Record = { +export const MAX_REGION_IDS: Record = { asia: 31e8 - 1, - com: MIN_IDS.asia - 1, - eu: MIN_IDS.com - 1, + com: MIN_REGION_IDS.asia - 1, + eu: MIN_REGION_IDS.com - 1, }; export function idToRegion(id: number): Region { diff --git a/packages/core/src/blitz/index.ts b/packages/core/src/blitz/index.ts new file mode 100644 index 000000000..83c62317b --- /dev/null +++ b/packages/core/src/blitz/index.ts @@ -0,0 +1 @@ +export * from './idToRegion'; diff --git a/src/core/blitzkit/secret.ts b/packages/core/src/blitzkit/assertSecret.ts similarity index 100% rename from src/core/blitzkit/secret.ts rename to packages/core/src/blitzkit/assertSecret.ts diff --git a/src/core/blitzkit/gameDefinitions.ts b/packages/core/src/blitzkit/gameDefinitions.ts similarity index 72% rename from src/core/blitzkit/gameDefinitions.ts rename to packages/core/src/blitzkit/gameDefinitions.ts index 4270a07dd..fda4af1b9 100644 --- a/src/core/blitzkit/gameDefinitions.ts +++ b/packages/core/src/blitzkit/gameDefinitions.ts @@ -1,5 +1,5 @@ -import { asset } from './asset'; -import { fetchCdonLz4 } from './fetchCdonLz4'; +import { asset } from '../../../../src/core/blitzkit/asset'; +import { fetchCdonLz4 } from '../../../../src/core/blitzkit/fetchCdonLz4'; interface GameMode { name: string; diff --git a/packages/core/src/blitzkit/index.ts b/packages/core/src/blitzkit/index.ts new file mode 100644 index 000000000..9f7c10453 --- /dev/null +++ b/packages/core/src/blitzkit/index.ts @@ -0,0 +1,4 @@ +export * from './assertSecret'; +export * from './gameDefinitions'; +export * from './superCompress'; +export * from './superDecompress'; diff --git a/src/core/blitzkit/superCompress.ts b/packages/core/src/blitzkit/superCompress.ts similarity index 77% rename from src/core/blitzkit/superCompress.ts rename to packages/core/src/blitzkit/superCompress.ts index 5236447e3..45005a8c0 100644 --- a/src/core/blitzkit/superCompress.ts +++ b/packages/core/src/blitzkit/superCompress.ts @@ -1,5 +1,5 @@ import { compress } from 'lz4js'; -import { CdonWriteStream } from '../streams/cdon'; +import { CdonWriteStream } from '../../../../src/core/streams/cdon'; export function superCompress(object: any) { const write = new CdonWriteStream().cdon(object); diff --git a/src/core/blitzkit/superDecompress.ts b/packages/core/src/blitzkit/superDecompress.ts similarity index 79% rename from src/core/blitzkit/superDecompress.ts rename to packages/core/src/blitzkit/superDecompress.ts index 5cf1881f4..48b5722c9 100644 --- a/src/core/blitzkit/superDecompress.ts +++ b/packages/core/src/blitzkit/superDecompress.ts @@ -1,5 +1,5 @@ import { decompress } from 'lz4js'; -import { CdonReadStream } from '../streams/cdon'; +import { CdonReadStream } from '../../../../src/core/streams/cdon'; export function superDecompress(buffer: ArrayBuffer) { const decompressed = decompress(new Uint8Array(buffer)).buffer as ArrayBuffer; diff --git a/src/core/blitzkit/imgur.ts b/packages/core/src/imgur/imgur.ts similarity index 100% rename from src/core/blitzkit/imgur.ts rename to packages/core/src/imgur/imgur.ts diff --git a/packages/core/src/imgur/index.ts b/packages/core/src/imgur/index.ts new file mode 100644 index 000000000..6daa175fb --- /dev/null +++ b/packages/core/src/imgur/index.ts @@ -0,0 +1 @@ +export * from './imgur'; diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts new file mode 100644 index 000000000..47ff4a02a --- /dev/null +++ b/packages/core/src/index.ts @@ -0,0 +1,5 @@ +export * from './blitz'; +export * from './blitzkit'; +export * from './imgur'; +export * from './patreon'; +export * from './zustand'; diff --git a/packages/core/src/patreon/index.ts b/packages/core/src/patreon/index.ts new file mode 100644 index 000000000..7dd103586 --- /dev/null +++ b/packages/core/src/patreon/index.ts @@ -0,0 +1 @@ +export * from './patreonLoginUrl'; diff --git a/src/core/blitzkit/patreonLoginUrl.ts b/packages/core/src/patreon/patreonLoginUrl.ts similarity index 85% rename from src/core/blitzkit/patreonLoginUrl.ts rename to packages/core/src/patreon/patreonLoginUrl.ts index 8c6bef249..4bdf9b5e6 100644 --- a/src/core/blitzkit/patreonLoginUrl.ts +++ b/packages/core/src/patreon/patreonLoginUrl.ts @@ -1,4 +1,4 @@ -import { assertSecret } from './secret'; +import { assertSecret } from '../blitzkit/assertSecret'; export function patreonLoginUrl() { const params = new URLSearchParams({ diff --git a/src/core/zustand/createNextSafeStore.tsx b/packages/core/src/zustand/createNextSafeStore.tsx similarity index 100% rename from src/core/zustand/createNextSafeStore.tsx rename to packages/core/src/zustand/createNextSafeStore.tsx diff --git a/packages/core/src/zustand/index.ts b/packages/core/src/zustand/index.ts new file mode 100644 index 000000000..4f11a1dd3 --- /dev/null +++ b/packages/core/src/zustand/index.ts @@ -0,0 +1 @@ +export * from './createNextSafeStore'; diff --git a/packages/scripts/package.json b/packages/scripts/package.json new file mode 100644 index 000000000..b7a161ddc --- /dev/null +++ b/packages/scripts/package.json @@ -0,0 +1,12 @@ +{ + "name": "@blitzkit/scripts", + "private": true, + "type": "module", + "dependencies": { + "@gltf-transform/core": "^3.10.1", + "lodash": "^4.17.21" + }, + "devDependencies": { + "@types/lodash": "^4.17.7" + } +} diff --git a/next-env.d.ts b/packages/website/next-env.d.ts similarity index 100% rename from next-env.d.ts rename to packages/website/next-env.d.ts diff --git a/next.config.js b/packages/website/next.config.js similarity index 72% rename from next.config.js rename to packages/website/next.config.js index e8b8c1824..9b88d4096 100644 --- a/next.config.js +++ b/packages/website/next.config.js @@ -1,5 +1,4 @@ import { createVanillaExtractPlugin } from '@vanilla-extract/next-plugin'; -import { readdirSync, writeFileSync } from 'fs'; const withVanillaExtract = createVanillaExtractPlugin({ tests: /\.css$/ }); @@ -18,16 +17,16 @@ const nextConfig = { }, ); - if (isServer) { - writeFileSync( - 'public/assets/versions.json', - JSON.stringify( - readdirSync('docs/changelogs').map((file) => - file.replace('.md', ''), - ), - ), - ); - } + // if (isServer) { + // writeFileSync( + // 'public/assets/versions.json', + // JSON.stringify( + // readdirSync('docs/changelogs').map((file) => + // file.replace('.md', ''), + // ), + // ), + // ); + // } return config; }, diff --git a/packages/website/package.json b/packages/website/package.json new file mode 100644 index 000000000..29ce7024b --- /dev/null +++ b/packages/website/package.json @@ -0,0 +1,31 @@ +{ + "name": "@blitzkit/website", + "private": true, + "type": "module", + "scripts": { + "dev": "next dev" + }, + "dependencies": { + "@radix-ui/themes": "^3.1.3", + "@blitzkit/core": "workspace:*", + "@nivo/bar": "^0.87.0", + "three": "0.159.0", + "lodash": "^4.17.21", + "next": "^14.2.7", + "@radix-ui/react-icons": "^1.3.0", + "@react-three/drei": "^9.111.5", + "@react-three/fiber": "^8.17.6", + "react": "^18.3.1", + "react-device-detect": "^2.2.3", + "react-dom": "^18.3.1", + "react-fuzzysort": "^1.0.1", + "immer": "^10.1.1", + "zustand": "^4.5.5", + "react-promise-suspense": "^0.3.4" + }, + "devDependencies": { + "@types/lodash": "^4.17.7", + "@vanilla-extract/next-plugin": "^2.4.5", + "@types/react": "^18.3.5" + } +} diff --git a/public/ads.txt b/packages/website/public/ads.txt similarity index 98% rename from public/ads.txt rename to packages/website/public/ads.txt index 4695740e4..6512f38d8 100644 --- a/public/ads.txt +++ b/packages/website/public/ads.txt @@ -1,1107 +1,1107 @@ -#ads.txt https://blitzkit.app - +#ads.txt https://blitzkit.app + ownerdomain=blitzkit.app managerdomain=newormedia.com contact=hello@newormedia.com #Sovrn -lijit.com, 217352, DIRECT, fafdf38b16bf6b2b #SOVRN  -lijit.com, 217352-eb, DIRECT, fafdf38b16bf6b2b #SOVRN  -openx.com, 538959099, RESELLER, 6a698e2ec38604c6  -pubmatic.com, 137711, RESELLER, 5d62403b186f2ace  -pubmatic.com, 156212, RESELLER, 5d62403b186f2ace  -rubiconproject.com, 17960, RESELLER, 0bfd66d529a55807  +lijit.com, 217352, DIRECT, fafdf38b16bf6b2b #SOVRN  +lijit.com, 217352-eb, DIRECT, fafdf38b16bf6b2b #SOVRN  +openx.com, 538959099, RESELLER, 6a698e2ec38604c6  +pubmatic.com, 137711, RESELLER, 5d62403b186f2ace  +pubmatic.com, 156212, RESELLER, 5d62403b186f2ace  +rubiconproject.com, 17960, RESELLER, 0bfd66d529a55807  appnexus.com, 1019, RESELLER, f5ab79cb980f11d1  #OpenX openx.com, 539824308, DIRECT, 6a698e2ec38604c6 #Conversant Media -conversantmedia.com, 41812, DIRECT, 03113cd04947736d  -appnexus.com, 4052, RESELLER  -contextweb.com, 561998, RESELLER, 89ff185a4c4e857c  -lijit.com, 411121, RESELLER, fafdf38b16bf6b2b #SOVRN  -openx.com, 540031703, RESELLER, 6a698e2ec38604c6  -pubmatic.com, 158100, RESELLER, 5d62403b186f2ace  -rubiconproject.com, 23644, RESELLER, 0bfd66d529a55807  -yahoo.com, 55771, RESELLER, e1a5b5b6e3255540  -admanmedia.com, 2050, RESELLER -Appnerve.com, 187287, RESELLER -conversantmedia.com, 100658, RESELLER, 03113cd04947736d -conversantmedia.com, 100660, RESELLER, 03113cd04947736d -conversantmedia.com, 100661, RESELLER, 03113cd04947736d -conversantmedia.com, 100662, RESELLER, 03113cd04947736d -conversantmedia.com, 100663, RESELLER, 03113cd04947736d -conversantmedia.com, 100670, RESELLER, 03113cd04947736d -conversantmedia.com, 100671, RESELLER, 03113cd04947736d -conversantmedia.com, 100672, RESELLER, 03113cd04947736d -conversantmedia.com, 100677, RESELLER, 03113cd04947736d -conversantmedia.com, 100688, RESELLER, 03113cd04947736d -conversantmedia.com, 100691, RESELLER, 03113cd04947736d +conversantmedia.com, 41812, DIRECT, 03113cd04947736d  +appnexus.com, 4052, RESELLER  +contextweb.com, 561998, RESELLER, 89ff185a4c4e857c  +lijit.com, 411121, RESELLER, fafdf38b16bf6b2b #SOVRN  +openx.com, 540031703, RESELLER, 6a698e2ec38604c6  +pubmatic.com, 158100, RESELLER, 5d62403b186f2ace  +rubiconproject.com, 23644, RESELLER, 0bfd66d529a55807  +yahoo.com, 55771, RESELLER, e1a5b5b6e3255540  +admanmedia.com, 2050, RESELLER +Appnerve.com, 187287, RESELLER +conversantmedia.com, 100658, RESELLER, 03113cd04947736d +conversantmedia.com, 100660, RESELLER, 03113cd04947736d +conversantmedia.com, 100661, RESELLER, 03113cd04947736d +conversantmedia.com, 100662, RESELLER, 03113cd04947736d +conversantmedia.com, 100663, RESELLER, 03113cd04947736d +conversantmedia.com, 100670, RESELLER, 03113cd04947736d +conversantmedia.com, 100671, RESELLER, 03113cd04947736d +conversantmedia.com, 100672, RESELLER, 03113cd04947736d +conversantmedia.com, 100677, RESELLER, 03113cd04947736d +conversantmedia.com, 100688, RESELLER, 03113cd04947736d +conversantmedia.com, 100691, RESELLER, 03113cd04947736d conversantmedia.com, 100659, RESELLER, 03113cd04947736d #Amazon A9 -aps.amazon.com, 094e2c86-72d9-47d6-a647-d95ce39ad4c7, DIRECT  -sovrn.com, 217352, DIRECT, fafdf38b16bf6b2b  -lijit.com, 217352, DIRECT, fafdf38b16bf6b2b  -rubiconproject.com, 18020, RESELLER, 0bfd66d529a55807  -openx.com, 540191398, RESELLER, 6a698e2ec38604c6  -appnexus.com, 1908, RESELLER, f5ab79cb980f11d1  -smaato.com, 110004504, DIRECT, 07bcf65f187117b4  -ad-generation.jp, 12474, RESELLER, 7f4ea9029ac04e53  -districtm.io, 100962, RESELLER, 3fd707be9c4527c3  -yieldmo.com, 2719019867620450718, RESELLER  -appnexus.com, 3663, RESELLER, f5ab79cb980f11d1  -gumgum.com, 14141, RESELLER, ffdef49475d318a9  -admanmedia.com, 726, RESELLER  -sharethrough.com, 3a0f657b, DIRECT, d53b998a7bd4ecd2  -emxdgt.com, 2009, RESELLER, 1e1d41537f7cad7f  -appnexus.com, 1356, RESELLER, f5ab79cb980f11d1  -contextweb.com, 562541, RESELLER, 89ff185a4c4e857c  -smartadserver.com, 4125, RESELLER, 060d053dcf45cbf3  -themediagrid.com, JTQKMP, RESELLER, 35d5010d7789b49d  -beachfront.com, 14804, RESELLER, e2541279e8e2ca4d  -improvedigital.com, 2050, RESELLER  -mintegral.com, 10043, RESELLER, 0aeed750c80d6423  -sonobi.com, 7f5fa520f8, RESELLER, d1a215d9eb5aee9e  -appnexus.com, 8692, DIRECT, f5ab79cb980f11d1  -onetag.com, 732218ebb38c233, DIRECT  -video.unrulymedia.com, 2310154583, DIRECT, a670c89d4a324e47  -rhythmone.com, 1654642120, RESELLER, a670c89d4a324e47  -indexexchange.com, 198541, DIRECT, 50b1c356f2c5c8fc  -pubmatic.com, 161855, DIRECT, 5d62403b186f2ace  -media.net, 8CUZ1MK22, RESELLER  -risecodes.com, 63832beef8189a00015cb6d3, RESELLER  -mediago.io, 045ac24b888bcf59a09731e7f0f2084f, RESELLER  -adyoulike.com, 7463c359225e043c111036d7a29affa5, RESELLER  -minutemedia.com, 01gya4708ddm, RESELLER  -minutemedia.com, 01g889hj3s8c, DIRECT  -visiblemeasures.com, 1052, RESELLER  -undertone.com, 4205, RESELLER, d954590d0cb265b9  -pubmatic.com, 160096, RESELLER, 5d62403b186f2ace  -yahoo.com, 55029, RESELLER, e1a5b5b6e3255540  -imds.tv, AM1601, RESELLER, ae6c32151e71f19d  -kargo.com, 8824, RESELLER  -triplelift.com, 6c33edb13117fd86, DIRECT  +aps.amazon.com, 094e2c86-72d9-47d6-a647-d95ce39ad4c7, DIRECT  +sovrn.com, 217352, DIRECT, fafdf38b16bf6b2b  +lijit.com, 217352, DIRECT, fafdf38b16bf6b2b  +rubiconproject.com, 18020, RESELLER, 0bfd66d529a55807  +openx.com, 540191398, RESELLER, 6a698e2ec38604c6  +appnexus.com, 1908, RESELLER, f5ab79cb980f11d1  +smaato.com, 110004504, DIRECT, 07bcf65f187117b4  +ad-generation.jp, 12474, RESELLER, 7f4ea9029ac04e53  +districtm.io, 100962, RESELLER, 3fd707be9c4527c3  +yieldmo.com, 2719019867620450718, RESELLER  +appnexus.com, 3663, RESELLER, f5ab79cb980f11d1  +gumgum.com, 14141, RESELLER, ffdef49475d318a9  +admanmedia.com, 726, RESELLER  +sharethrough.com, 3a0f657b, DIRECT, d53b998a7bd4ecd2  +emxdgt.com, 2009, RESELLER, 1e1d41537f7cad7f  +appnexus.com, 1356, RESELLER, f5ab79cb980f11d1  +contextweb.com, 562541, RESELLER, 89ff185a4c4e857c  +smartadserver.com, 4125, RESELLER, 060d053dcf45cbf3  +themediagrid.com, JTQKMP, RESELLER, 35d5010d7789b49d  +beachfront.com, 14804, RESELLER, e2541279e8e2ca4d  +improvedigital.com, 2050, RESELLER  +mintegral.com, 10043, RESELLER, 0aeed750c80d6423  +sonobi.com, 7f5fa520f8, RESELLER, d1a215d9eb5aee9e  +appnexus.com, 8692, DIRECT, f5ab79cb980f11d1  +onetag.com, 732218ebb38c233, DIRECT  +video.unrulymedia.com, 2310154583, DIRECT, a670c89d4a324e47  +rhythmone.com, 1654642120, RESELLER, a670c89d4a324e47  +indexexchange.com, 198541, DIRECT, 50b1c356f2c5c8fc  +pubmatic.com, 161855, DIRECT, 5d62403b186f2ace  +media.net, 8CUZ1MK22, RESELLER  +risecodes.com, 63832beef8189a00015cb6d3, RESELLER  +mediago.io, 045ac24b888bcf59a09731e7f0f2084f, RESELLER  +adyoulike.com, 7463c359225e043c111036d7a29affa5, RESELLER  +minutemedia.com, 01gya4708ddm, RESELLER  +minutemedia.com, 01g889hj3s8c, DIRECT  +visiblemeasures.com, 1052, RESELLER  +undertone.com, 4205, RESELLER, d954590d0cb265b9  +pubmatic.com, 160096, RESELLER, 5d62403b186f2ace  +yahoo.com, 55029, RESELLER, e1a5b5b6e3255540  +imds.tv, AM1601, RESELLER, ae6c32151e71f19d  +kargo.com, 8824, RESELLER  +triplelift.com, 6c33edb13117fd86, DIRECT  triplelift.com, DIRECT, 6c33edb13117fd86  #RhythmOne/Unruly video.unrulymedia.com, 2310154583, DIRECT #Sharethrough -sharethrough.com, nW2sZwdg, DIRECT, d53b998a7bd4ecd2  -sharethrough.com, 3a0f657b, DIRECT, d53b998a7bd4ecd2  -pubmatic.com, 156557, RESELLER  -rubiconproject.com, 18694, RESELLER, 0bfd66d529a55807  -openx.com, 540274407, RESELLER, 6a698e2ec38604c6  -33across.com, 0013300001kQj2HAAS, RESELLER, bbea06d9c4d2853c  -smaato.com, 1100047713, RESELLER, 07bcf65f187117b4  -yahoo.com, 59531, RESELLER, e1a5b5b6e3255540  -smartadserver.com, 4342, RESELLER  -smartadserver.com, 4012, RESELLER  +sharethrough.com, nW2sZwdg, DIRECT, d53b998a7bd4ecd2  +sharethrough.com, 3a0f657b, DIRECT, d53b998a7bd4ecd2  +pubmatic.com, 156557, RESELLER  +rubiconproject.com, 18694, RESELLER, 0bfd66d529a55807  +openx.com, 540274407, RESELLER, 6a698e2ec38604c6  +33across.com, 0013300001kQj2HAAS, RESELLER, bbea06d9c4d2853c  +smaato.com, 1100047713, RESELLER, 07bcf65f187117b4  +yahoo.com, 59531, RESELLER, e1a5b5b6e3255540  +smartadserver.com, 4342, RESELLER  +smartadserver.com, 4012, RESELLER  sharethrough.com, Tsc1fZ67, RESELLER, d53b998a7bd4ecd2  #Rubicon -rubiconproject.com, 17822, DIRECT, 0bfd66d529a55807 +rubiconproject.com, 17822, DIRECT, 0bfd66d529a55807 rubiconproject.com, 17822, RESELLER, 0bfd66d529a55807 #NextMillennium -nextmillennium.io, 15882, DIRECT, 65bd090fa4a1e3d6 -admagnetix.io, 200954, DIRECT -appnexus.com, 9284, DIRECT, f5ab79cb980f11d1 -appnexus.com, 15799, DIRECT, f5ab79cb980f11d1 -rubiconproject.com, 17888, RESELLER, 0bfd66d529a55807 -rubiconproject.com, 26296, RESELLER, 0bfd66d529a55807 -pubmatic.com, 157577, DIRECT, 5d62403b186f2ace -pubmatic.com, 164400, RESELLER, 5d62403b186f2ace -indexexchange.com, 194648, RESELLER, 50b1c356f2c5c8fc -indexexchange.com, 207985, RESELLER, 50b1c356f2c5c8fc -openx.com, 540224251, DIRECT, 6a698e2ec38604c6 -openx.com, 540225743, DIRECT, 6a698e2ec38604c6 -33across.com, 0010b00002e4MRRAA2, DIRECT, bbea06d9c4d2853c -33across.com, 001Pg000007PnplIAC, DIRECT, bbea06d9c4d2853c #33Across #hb #tag -yieldmo.com, 2230523609997805235, DIRECT +nextmillennium.io, 15882, DIRECT, 65bd090fa4a1e3d6 +admagnetix.io, 200954, DIRECT +appnexus.com, 9284, DIRECT, f5ab79cb980f11d1 +appnexus.com, 15799, DIRECT, f5ab79cb980f11d1 +rubiconproject.com, 17888, RESELLER, 0bfd66d529a55807 +rubiconproject.com, 26296, RESELLER, 0bfd66d529a55807 +pubmatic.com, 157577, DIRECT, 5d62403b186f2ace +pubmatic.com, 164400, RESELLER, 5d62403b186f2ace +indexexchange.com, 194648, RESELLER, 50b1c356f2c5c8fc +indexexchange.com, 207985, RESELLER, 50b1c356f2c5c8fc +openx.com, 540224251, DIRECT, 6a698e2ec38604c6 +openx.com, 540225743, DIRECT, 6a698e2ec38604c6 +33across.com, 0010b00002e4MRRAA2, DIRECT, bbea06d9c4d2853c +33across.com, 001Pg000007PnplIAC, DIRECT, bbea06d9c4d2853c #33Across #hb #tag +yieldmo.com, 2230523609997805235, DIRECT yieldmo.com, 3483642730188317326, DIRECT #33Across -33across.com, 0010b00002Mpn7AAAR, DIRECT, bbea06d9c4d2853c -appnexus.com, 10239, RESELLER, f5ab79cb980f11d1 #33Across #hb #tag #viewable  -rubiconproject.com, 16414, RESELLER, 0bfd66d529a55807 #33Across #hb #tag  -pubmatic.com, 156423, RESELLER, 5d62403b186f2ace #33Across #hb #tag  -yahoo.com, 57289, RESELLER, e1a5b5b6e3255540 #33Across #hb #tag  -rubiconproject.com, 21642, RESELLER, 0bfd66d529a55807 #33Across #hb #tag #viewable  -conversantmedia.com, 100141, DIRECT #33Across #hb #tag  -indexexchange.com, 191973, RESELLER, 50b1c356f2c5c8fc #33Across #hb #tag #viewable  -openx.com, 537120563, RESELLER, 6a698e2ec38604c6 #33Across #hb #tag  -contextweb.com, 561516, RESELLER, 89ff185a4c4e857c  -loopme.com, 11575, RESELLER, 6c8d5f95897a5a3b  -triplelift.com, 12503, RESELLER, 6c33edb13117fd86  -video.unrulymedia.com, 2439829435, DIRECT  -loopme.com, 11575, RESELLER, 6c8d5f95897a5a3b +33across.com, 0010b00002Mpn7AAAR, DIRECT, bbea06d9c4d2853c +appnexus.com, 10239, RESELLER, f5ab79cb980f11d1 #33Across #hb #tag #viewable  +rubiconproject.com, 16414, RESELLER, 0bfd66d529a55807 #33Across #hb #tag  +pubmatic.com, 156423, RESELLER, 5d62403b186f2ace #33Across #hb #tag  +yahoo.com, 57289, RESELLER, e1a5b5b6e3255540 #33Across #hb #tag  +rubiconproject.com, 21642, RESELLER, 0bfd66d529a55807 #33Across #hb #tag #viewable  +conversantmedia.com, 100141, DIRECT #33Across #hb #tag  +indexexchange.com, 191973, RESELLER, 50b1c356f2c5c8fc #33Across #hb #tag #viewable  +openx.com, 537120563, RESELLER, 6a698e2ec38604c6 #33Across #hb #tag  +contextweb.com, 561516, RESELLER, 89ff185a4c4e857c  +loopme.com, 11575, RESELLER, 6c8d5f95897a5a3b  +triplelift.com, 12503, RESELLER, 6c33edb13117fd86  +video.unrulymedia.com, 2439829435, DIRECT  +loopme.com, 11575, RESELLER, 6c8d5f95897a5a3b adyoulike.com, 1f301d3bcd723f5c372070bdfd142940, RESELLER #TripleLift triplelift.com, 7205, DIRECT, 6c33edb13117fd86  #Consumable -consumable.com, 2000908, DIRECT, aefcd3d2f45b5070 -appnexus.com, 7556, RESELLER, f5ab79cb980f11d1 -google.com, pub-6694481294649483, RESELLER, f08c47fec0942fa0 -indexexchange.com, 186248, RESELLER, 50b1c356f2c5c8fc -lijit.com, 248396, RESELLER, fafdf38b16bf6b2b -openx.com, 537150004, RESELLER, 6a698e2ec38604c6 -pubmatic.com, 156319, RESELLER, 5d62403b186f2ace -sonobi.com, e55fb5d7c2, RESELLER, d1a215d9eb5aee9e -rubiconproject.com, 24856, RESELLER, 0bfd66d529a55807 -openx.com, 539699341, RESELLER, 6a698e2ec38604c6 -pubmatic.com, 157367, RESELLER, 5d62403b186f2ace -indexexchange.com, 187454, RESELLER, 50b1c356f2c5c8fc -sonobi.com, 6e5cfb5420, DIRECT, d1a215d9eb5aee9e -lijit.com, 248396-eb, DIRECT, fafdf38b16bf6b2b -onetag.com, 6c68086c0c61793, DIRECT -smartadserver.com, 4295, RESELLER -supply.colossusssp.com, 442, DIRECT, 6c5b49d96ec1b458 -amxrtb.com, 105199577, DIRECT -contextweb.com, 562763, RESELLER, 89ff185a4c4e857c +consumable.com, 2000908, DIRECT, aefcd3d2f45b5070 +appnexus.com, 7556, RESELLER, f5ab79cb980f11d1 +google.com, pub-6694481294649483, RESELLER, f08c47fec0942fa0 +indexexchange.com, 186248, RESELLER, 50b1c356f2c5c8fc +lijit.com, 248396, RESELLER, fafdf38b16bf6b2b +openx.com, 537150004, RESELLER, 6a698e2ec38604c6 +pubmatic.com, 156319, RESELLER, 5d62403b186f2ace +sonobi.com, e55fb5d7c2, RESELLER, d1a215d9eb5aee9e +rubiconproject.com, 24856, RESELLER, 0bfd66d529a55807 +openx.com, 539699341, RESELLER, 6a698e2ec38604c6 +pubmatic.com, 157367, RESELLER, 5d62403b186f2ace +indexexchange.com, 187454, RESELLER, 50b1c356f2c5c8fc +sonobi.com, 6e5cfb5420, DIRECT, d1a215d9eb5aee9e +lijit.com, 248396-eb, DIRECT, fafdf38b16bf6b2b +onetag.com, 6c68086c0c61793, DIRECT +smartadserver.com, 4295, RESELLER +supply.colossusssp.com, 442, DIRECT, 6c5b49d96ec1b458 +amxrtb.com, 105199577, DIRECT +contextweb.com, 562763, RESELLER, 89ff185a4c4e857c yieldmo.com, 3129364219166663150, RESELLER #Newor Media Adx google.com, pub-4641608711979091, RESELLER, f08c47fec0942fa0 #Select Media -152media.info, 152M10, RESELLER  -33across.com, 0010b00002T3JniAAF, RESELLER, bbea06d9c4d2853c  -adtelligent.com, 311542, RESELLER  -amxrtb.com, 105199498, RESELLER  -appnexus.com, 11924, RESELLER, f5ab79cb980f11d1  -appnexus.com, 12290, RESELLER, f5ab79cb980f11d1  -appnexus.com, 3153, RESELLER, f5ab79cb980f11d1  -appnexus.com, 9684, RESELLER, f5ab79cb980f11d1  -bidmatic.io, b-4c0f6, RESELLER   -e-planning.net, 835fbafe26d231b1, RESELLER, c1ba615865ed87b2  -indexexchange.com, 191503, RESELLER, 50b1c356f2c5c8fc  -indexexchange.com, 192700, RESELLER, 50b1c356f2c5c8fc  -lijit.com, 310770, RESELLER, fafdf38b16bf6b2b  -lijit.com, 322507, RESELLER, fafdf38b16bf6b2b  -loopme.com, 11378, RESELLER, 6c8d5f95897a5a3b  -media.net, 8CU816538, DIRECT  -onetag.com, 59a18369e249bfb, RESELLER  -openx.com, 540999880, RESELLER, 6a698e2ec38604c6  -openx.com, 541177116, RESELLER, 6a698e2ec38604c6  -pubmatic.com, 157288, RESELLER, 5d62403b186f2ace  -pubmatic.com, 161562, RESELLER, 5d62403b186f2ace  -rhythmone.com, 3139274702404301777, RESELLER, a670c89d4a324e47  -rubiconproject.com, 11006, RESELLER, 0bfd66d529a55807  -sovrn.com, 310770, RESELLER, fafdf38b16bf6b2b  -sovrn.com, 322507, RESELLER, fafdf38b16bf6b2b  -video.unrulymedia.com, 3139274702404301777, RESELLER  +152media.info, 152M10, RESELLER  +33across.com, 0010b00002T3JniAAF, RESELLER, bbea06d9c4d2853c  +adtelligent.com, 311542, RESELLER  +amxrtb.com, 105199498, RESELLER  +appnexus.com, 11924, RESELLER, f5ab79cb980f11d1  +appnexus.com, 12290, RESELLER, f5ab79cb980f11d1  +appnexus.com, 3153, RESELLER, f5ab79cb980f11d1  +appnexus.com, 9684, RESELLER, f5ab79cb980f11d1  +bidmatic.io, b-4c0f6, RESELLER   +e-planning.net, 835fbafe26d231b1, RESELLER, c1ba615865ed87b2  +indexexchange.com, 191503, RESELLER, 50b1c356f2c5c8fc  +indexexchange.com, 192700, RESELLER, 50b1c356f2c5c8fc  +lijit.com, 310770, RESELLER, fafdf38b16bf6b2b  +lijit.com, 322507, RESELLER, fafdf38b16bf6b2b  +loopme.com, 11378, RESELLER, 6c8d5f95897a5a3b  +media.net, 8CU816538, DIRECT  +onetag.com, 59a18369e249bfb, RESELLER  +openx.com, 540999880, RESELLER, 6a698e2ec38604c6  +openx.com, 541177116, RESELLER, 6a698e2ec38604c6  +pubmatic.com, 157288, RESELLER, 5d62403b186f2ace  +pubmatic.com, 161562, RESELLER, 5d62403b186f2ace  +rhythmone.com, 3139274702404301777, RESELLER, a670c89d4a324e47  +rubiconproject.com, 11006, RESELLER, 0bfd66d529a55807  +sovrn.com, 310770, RESELLER, fafdf38b16bf6b2b  +sovrn.com, 322507, RESELLER, fafdf38b16bf6b2b  +video.unrulymedia.com, 3139274702404301777, RESELLER  yahoo.com, 58073, RESELLER, e1a5b5b6e3255540  #AMX/AdaptMX/AppMonet -indexexchange.com, 191503, RESELLER, 50b1c356f2c5c8fc  -lijit.com, 260380, RESELLER, fafdf38b16bf6b2b  -sovrn.com, 260380, RESELLER, fafdf38b16bf6b2b  -pubmatic.com, 161527, RESELLER, 5d62403b186f2ace  -appnexus.com, 9393, RESELLER, f5ab79cb980f11d1  -appnexus.com, 11924, RESELLER, f5ab79cb980f11d1  -rubiconproject.com, 23844, RESELLER, 0bfd66d529a55807  -adform.com, 2865, RESELLER  -rubiconproject.com, 17960, RESELLER, 0bfd66d529a55807  -yahoo.com, 49648, RESELLER  -smartadserver.com, 3056, RESELLER, 060d053dcf45cbf3  -pubmatic.com, 158355, RESELLER, 5d62403b186f2ace  -amxrtb.com, 105199384, DIRECT  -appnexus.com, 12290, RESELLER, f5ab79cb980f11d1  -advertising.com, 28305, RESELLER  +indexexchange.com, 191503, RESELLER, 50b1c356f2c5c8fc  +lijit.com, 260380, RESELLER, fafdf38b16bf6b2b  +sovrn.com, 260380, RESELLER, fafdf38b16bf6b2b  +pubmatic.com, 161527, RESELLER, 5d62403b186f2ace  +appnexus.com, 9393, RESELLER, f5ab79cb980f11d1  +appnexus.com, 11924, RESELLER, f5ab79cb980f11d1  +rubiconproject.com, 23844, RESELLER, 0bfd66d529a55807  +adform.com, 2865, RESELLER  +rubiconproject.com, 17960, RESELLER, 0bfd66d529a55807  +yahoo.com, 49648, RESELLER  +smartadserver.com, 3056, RESELLER, 060d053dcf45cbf3  +pubmatic.com, 158355, RESELLER, 5d62403b186f2ace  +amxrtb.com, 105199384, DIRECT  +appnexus.com, 12290, RESELLER, f5ab79cb980f11d1  +advertising.com, 28305, RESELLER  openx.com, 559680764, RESELLER, 6a698e2ec38604c6 #PubMatic -pubmatic.com, 160082, RESELLER, 5d62403b186f2ace -pubmatic.com, 160131, RESELLER, 5d62403b186f2ace +pubmatic.com, 160082, RESELLER, 5d62403b186f2ace +pubmatic.com, 160131, RESELLER, 5d62403b186f2ace pubmatic.com, 161855, RESELLER, 5d62403b186f2ace #BigHappy Ads appnexus.com, 12263, RESELLER  #Adagio -adagio.io, 1102, RESELLER  -rubiconproject.com, 19116, RESELLER, 0bfd66d529a55807  -pubmatic.com, 159110, RESELLER, 5d62403b186f2ace  -improvedigital.com, 1790, RESELLER  -onetag.com, 6b859b96c564fbe, RESELLER  -yahoo.com, 58905, RESELLER, e1a5b5b6e3255540  -appnexus.com, 13099, RESELLER  -smartadserver.com, 4111, RESELLER  -indexexchange.com, 194558, RESELLER  -33across.com, 0015a00002oUk4aAAC, RESELLER, bbea06d9c4d2853c  -yahoo.com, 57289, RESELLER, e1a5b5b6e3255540  -appnexus.com, 10239, RESELLER, f5ab79cb980f11d1  -rubiconproject.com, 16414, RESELLER, 0bfd66d529a55807  -smartadserver.com, 3554, RESELLER  -pubmatic.com, 156439, RESELLER, 5d62403b186f2ace  -pubmatic.com, 154037, RESELLER, 5d62403b186f2ace  -rubiconproject.com, 16114, RESELLER, 0bfd66d529a55807  -openx.com, 537149888, RESELLER, 6a698e2ec38604c6  -appnexus.com, 3703, RESELLER, f5ab79cb980f11d1  -loopme.com, 5679, RESELLER, 6c8d5f95897a5a3b  -xad.com, 958, RESELLER, 81cbf0a75a5e0e9a  -video.unrulymedia.com, 2564526802, RESELLER  -smaato.com, 1100044045, RESELLER, 07bcf65f187117b4  -pubnative.net, 1006576, RESELLER, d641df8625486a7b  -verve.com, 15503, RESELLER, 0c8f5958fc2d6270  -adyoulike.com, b4bf4fdd9b0b915f746f6747ff432bde, RESELLER  -axonix.com, 57264, RESELLER  -admanmedia.com, 43, RESELLER  -sharethrough.com, OAW69Fon, RESELLER, d53b998a7bd4ecd2  -contextweb.com, 560288, RESELLER, 89ff185a4c4e857c  -lijit.com, 367236, RESELLER, fafdf38b16bf6b2b  -openx.com, 538959099, RESELLER, 6a698e2ec38604c6  -pubmatic.com, 137711, RESELLER, 5d62403b186f2ace  -pubmatic.com, 156212, RESELLER, 5d62403b186f2ace  -rubiconproject.com, 17960, RESELLER, 0bfd66d529a55807  -appnexus.com, 1019, RESELLER, f5ab79cb980f11d1  -yahoo.com, 59973, RESELLER, e1a5b5b6e3255540  -appnexus.com, 11664, RESELLER  -indexexchange.com, 195924, RESELLER  -pubmatic.com, 156325, RESELLER, 5d62403b186f2ace  -pubmatic.com, 155967, RESELLER, 5d62403b186f2ace  -openx.com, 544096208, RESELLER, 6a698e2ec38604c6  -rubiconproject.com, 17250, RESELLER, 0bfd66d529a55807  -telaria.com, 4jdlm-4qsx9, RESELLER, 1a4e959a1b50034a  -tremorhub.com, 4jdlm-4qsx9, RESELLER, 1a4e959a1b50034a  -emxdgt.com, 1291, RESELLER, 1e1d41537f7cad7f  -contextweb.com, 561707, RESELLER, 89ff185a4c4e857c  -triplelift.com, 12396, RESELLER, 6c33edb13117fd86  -sharethrough.com, 8bab9627, RESELLER, d53b998a7bd4ecd2  -gumgum.com, 15563, RESELLER, ffdef49475d318a9  -freewheel.tv, 1568036, RESELLER  -freewheel.tv, 1568041, RESELLER  -openx.com, 558899373, RESELLER, 6a698e2ec38604c6  -video.unrulymedia.com, 5672421953199218469, RESELLER  -e-planning.net, 83c06e81531537f4, RESELLER, c1ba615865ed87b2  -video.unrulymedia.com, 2439829435, RESELLER  -conversantmedia.com, 100141, RESELLER  +adagio.io, 1102, RESELLER  +rubiconproject.com, 19116, RESELLER, 0bfd66d529a55807  +pubmatic.com, 159110, RESELLER, 5d62403b186f2ace  +improvedigital.com, 1790, RESELLER  +onetag.com, 6b859b96c564fbe, RESELLER  +yahoo.com, 58905, RESELLER, e1a5b5b6e3255540  +appnexus.com, 13099, RESELLER  +smartadserver.com, 4111, RESELLER  +indexexchange.com, 194558, RESELLER  +33across.com, 0015a00002oUk4aAAC, RESELLER, bbea06d9c4d2853c  +yahoo.com, 57289, RESELLER, e1a5b5b6e3255540  +appnexus.com, 10239, RESELLER, f5ab79cb980f11d1  +rubiconproject.com, 16414, RESELLER, 0bfd66d529a55807  +smartadserver.com, 3554, RESELLER  +pubmatic.com, 156439, RESELLER, 5d62403b186f2ace  +pubmatic.com, 154037, RESELLER, 5d62403b186f2ace  +rubiconproject.com, 16114, RESELLER, 0bfd66d529a55807  +openx.com, 537149888, RESELLER, 6a698e2ec38604c6  +appnexus.com, 3703, RESELLER, f5ab79cb980f11d1  +loopme.com, 5679, RESELLER, 6c8d5f95897a5a3b  +xad.com, 958, RESELLER, 81cbf0a75a5e0e9a  +video.unrulymedia.com, 2564526802, RESELLER  +smaato.com, 1100044045, RESELLER, 07bcf65f187117b4  +pubnative.net, 1006576, RESELLER, d641df8625486a7b  +verve.com, 15503, RESELLER, 0c8f5958fc2d6270  +adyoulike.com, b4bf4fdd9b0b915f746f6747ff432bde, RESELLER  +axonix.com, 57264, RESELLER  +admanmedia.com, 43, RESELLER  +sharethrough.com, OAW69Fon, RESELLER, d53b998a7bd4ecd2  +contextweb.com, 560288, RESELLER, 89ff185a4c4e857c  +lijit.com, 367236, RESELLER, fafdf38b16bf6b2b  +openx.com, 538959099, RESELLER, 6a698e2ec38604c6  +pubmatic.com, 137711, RESELLER, 5d62403b186f2ace  +pubmatic.com, 156212, RESELLER, 5d62403b186f2ace  +rubiconproject.com, 17960, RESELLER, 0bfd66d529a55807  +appnexus.com, 1019, RESELLER, f5ab79cb980f11d1  +yahoo.com, 59973, RESELLER, e1a5b5b6e3255540  +appnexus.com, 11664, RESELLER  +indexexchange.com, 195924, RESELLER  +pubmatic.com, 156325, RESELLER, 5d62403b186f2ace  +pubmatic.com, 155967, RESELLER, 5d62403b186f2ace  +openx.com, 544096208, RESELLER, 6a698e2ec38604c6  +rubiconproject.com, 17250, RESELLER, 0bfd66d529a55807  +telaria.com, 4jdlm-4qsx9, RESELLER, 1a4e959a1b50034a  +tremorhub.com, 4jdlm-4qsx9, RESELLER, 1a4e959a1b50034a  +emxdgt.com, 1291, RESELLER, 1e1d41537f7cad7f  +contextweb.com, 561707, RESELLER, 89ff185a4c4e857c  +triplelift.com, 12396, RESELLER, 6c33edb13117fd86  +sharethrough.com, 8bab9627, RESELLER, d53b998a7bd4ecd2  +gumgum.com, 15563, RESELLER, ffdef49475d318a9  +freewheel.tv, 1568036, RESELLER  +freewheel.tv, 1568041, RESELLER  +openx.com, 558899373, RESELLER, 6a698e2ec38604c6  +video.unrulymedia.com, 5672421953199218469, RESELLER  +e-planning.net, 83c06e81531537f4, RESELLER, c1ba615865ed87b2  +video.unrulymedia.com, 2439829435, RESELLER  +conversantmedia.com, 100141, RESELLER  triplelift.com, 13482, RESELLER, 6c33edb13117fd86 #Apacdex -quantumdex.io, 1988, RESELLER  -interdogmedia.com, 1988, RESELLER  -apacdex.com, 1988, RESELLER  -pubpower.io, 1988, RESELLER  -appnexus.com, 10273, RESELLER, f5ab79cb980f11d1  -appnexus.com, 11395, RESELLER, f5ab79cb980f11d1  -indexexchange.com, 192922, RESELLER, 50b1c356f2c5c8fc  -advertising.com, 28643, RESELLER #VerizonVideo  -yahoo.com, 58754, RESELLER, e1a5b5b6e3255540  -aol.com, 58754, RESELLER, e1a5b5b6e3255540  -pubmatic.com, 157940, RESELLER, 5d62403b186f2ace  -video.unrulymedia.com, 2276989117, DIRECT  -rhythmone.com, 2276989117, DIRECT, a670c89d4a324e47  -disqus.com, 4715692, DIRECT  -appnexus.com, 9393, DIRECT, f5ab79cb980f11d1  -sovrn.com, 278426, DIRECT, fafdf38b16bf6b2b  -lijit.com, 278426, DIRECT, fafdf38b16bf6b2b  -onetag.com, 2bb78272a859ca6, DIRECT  -sharethrough.com, cc26d15a, DIRECT, d53b998a7bd4ecd2  -smaato.com, 1100045673, DIRECT, 07bcf65f187117b4  -smaato.com, 1100004890, DIRECT, 07bcf65f187117b4  -appnexus.com, 11711, RESELLER, f5ab79cb980f11d1  -onetag.com, 2bb78272a859ca6, RESELLER  -betweendigital.com, 43894, RESELLER  -video.unrulymedia.com, 2276989117, RESELLER  -rhythmone.com, 2276989117, RESELLER, a670c89d4a324e47  -disqus.com, 4715692, RESELLER  -sharethrough.com, cc26d15a, RESELLER, d53b998a7bd4ecd2  -smaato.com, 1100045673, RESELLER, 07bcf65f187117b4  +quantumdex.io, 1988, RESELLER  +interdogmedia.com, 1988, RESELLER  +apacdex.com, 1988, RESELLER  +pubpower.io, 1988, RESELLER  +appnexus.com, 10273, RESELLER, f5ab79cb980f11d1  +appnexus.com, 11395, RESELLER, f5ab79cb980f11d1  +indexexchange.com, 192922, RESELLER, 50b1c356f2c5c8fc  +advertising.com, 28643, RESELLER #VerizonVideo  +yahoo.com, 58754, RESELLER, e1a5b5b6e3255540  +aol.com, 58754, RESELLER, e1a5b5b6e3255540  +pubmatic.com, 157940, RESELLER, 5d62403b186f2ace  +video.unrulymedia.com, 2276989117, DIRECT  +rhythmone.com, 2276989117, DIRECT, a670c89d4a324e47  +disqus.com, 4715692, DIRECT  +appnexus.com, 9393, DIRECT, f5ab79cb980f11d1  +sovrn.com, 278426, DIRECT, fafdf38b16bf6b2b  +lijit.com, 278426, DIRECT, fafdf38b16bf6b2b  +onetag.com, 2bb78272a859ca6, DIRECT  +sharethrough.com, cc26d15a, DIRECT, d53b998a7bd4ecd2  +smaato.com, 1100045673, DIRECT, 07bcf65f187117b4  +smaato.com, 1100004890, DIRECT, 07bcf65f187117b4  +appnexus.com, 11711, RESELLER, f5ab79cb980f11d1  +onetag.com, 2bb78272a859ca6, RESELLER  +betweendigital.com, 43894, RESELLER  +video.unrulymedia.com, 2276989117, RESELLER  +rhythmone.com, 2276989117, RESELLER, a670c89d4a324e47  +disqus.com, 4715692, RESELLER  +sharethrough.com, cc26d15a, RESELLER, d53b998a7bd4ecd2  +smaato.com, 1100045673, RESELLER, 07bcf65f187117b4  smaato.com, 1100004890, RESELLER, 07bcf65f187117b4  #Smaato -smaato.com, 1100048590, RESELLER, 07bcf65f187117b4 -smaato.com, 1100004890, DIRECT, 07bcf65f187117b4 -rubiconproject.com, 24600, RESELLER, 0bfd66d529a55807 -advangelists.com, 9766527f2b5d3e95d4a733fcfb77bd7e, RESELLER, 60d26397ec060f98 -appnexus.com, 1752, RESELLER, f5ab79cb980f11d1 -contextweb.com, 558622, RESELLER, 89ff185a4c4e857c -inmobi.com, 55049d2e109d4ac1820ca1432dda4e13, RESELLER, 83e75a7ae333ca9d -inmobi.com, 95ef2003a2c742db81a45303d6e4cf8b, RESELLER, 83e75a7ae333ca9d -openx.com, 540421297, RESELLER, 6a698e2ec38604c6 -pubmatic.com, 156177, RESELLER, 5d62403b186f2ace -pubmatic.com, 156425, RESELLER, 5d62403b186f2ace -pubmatic.com, 156557, RESELLER -pubmatic.com, 161771, RESELLER, 5d62403b186f2ace -rhebus.works, 8978398251, RESELLER -rubiconproject.com, 18694, RESELLER, 0bfd66d529a55807 -rubiconproject.com, 13132, RESELLER, 0bfd66d529a55807 -sharethrough.com, iBAzay96, RESELLER, d53b998a7bd4ecd2 -smartadserver.com, 4762, RESELLER, 060d053dcf45cbf3 -thunder-monetize.com, 1252316774, RESELLER -video.unrulymedia.com, 251620492, RESELLER +smaato.com, 1100048590, RESELLER, 07bcf65f187117b4 +smaato.com, 1100004890, DIRECT, 07bcf65f187117b4 +rubiconproject.com, 24600, RESELLER, 0bfd66d529a55807 +advangelists.com, 9766527f2b5d3e95d4a733fcfb77bd7e, RESELLER, 60d26397ec060f98 +appnexus.com, 1752, RESELLER, f5ab79cb980f11d1 +contextweb.com, 558622, RESELLER, 89ff185a4c4e857c +inmobi.com, 55049d2e109d4ac1820ca1432dda4e13, RESELLER, 83e75a7ae333ca9d +inmobi.com, 95ef2003a2c742db81a45303d6e4cf8b, RESELLER, 83e75a7ae333ca9d +openx.com, 540421297, RESELLER, 6a698e2ec38604c6 +pubmatic.com, 156177, RESELLER, 5d62403b186f2ace +pubmatic.com, 156425, RESELLER, 5d62403b186f2ace +pubmatic.com, 156557, RESELLER +pubmatic.com, 161771, RESELLER, 5d62403b186f2ace +rhebus.works, 8978398251, RESELLER +rubiconproject.com, 18694, RESELLER, 0bfd66d529a55807 +rubiconproject.com, 13132, RESELLER, 0bfd66d529a55807 +sharethrough.com, iBAzay96, RESELLER, d53b998a7bd4ecd2 +smartadserver.com, 4762, RESELLER, 060d053dcf45cbf3 +thunder-monetize.com, 1252316774, RESELLER +video.unrulymedia.com, 251620492, RESELLER xad.com, 241, RESELLER, 81cbf0a75a5e0e9a #NoBid -nobid.io, 22418789427, DIRECT   -33across.com, 0010b00002Mq2FYAAZ, DIRECT, bbea06d9c4d2853c  -yahoo.com, 57289, RESELLER, e1a5b5b6e3255540  -rhythmone.com, 2439829435, RESELLER, a670c89d4a324e47  -google.com, pub-1789253751882305, DIRECT, f08c47fec0942fa0  -google.com, pub-1835489473992347, RESELLER, f08c47fec0942fa0  -gumgum.com, 13926, DIRECT, ffdef49475d318a9  -onetag.com, 694e68b73971b58, DIRECT  -rubiconproject.com, 11006, RESELLER, 0bfd66d529a55807  -advertising.com, 28246, RESELLER  -advertising.com, 28246, RESELLER  -yahoo.com, 57872, DIRECT  -smartadserver.com,3447, DIRECT  -lijit.com, 273657, DIRECT, fafdf38b16bf6b2b  -sovrn.com, 273657, DIRECT, fafdf38b16bf6b2b  -xandr.com, 11429, DIRECT, f5ab79cb980f11d1  -xandr.com, 12701, DIRECT, f5ab79cb980f11d1  -rubiconproject.com, 13702, DIRECT, 0bfd66d529a55807  -video.unrulymedia.com, 3736557092, RESELLER  -rhythmone.com, 3736557092, RESELLER, a670c89d4a324e47  -nativo.com, 5677, Direct  -admanmedia.com, 812, DIRECT  -sonobi.com, 7ad1b9f952, RESELLER, d1a215d9eb5aee9e  -rhythmone.com, 1059622079, RESELLER, a670c89d4a324e47  -contextweb.com, 560606, RESELLER, 89ff185a4c4e857c  -yahoo.com, 58905, RESELLER, e1a5b5b6e3255540  -aol.com, 58905, RESELLER, e1a5b5b6e3255540  -appnexus.com, 13099, RESELLER  -amxrtb.com, 105199579, DIRECT  +nobid.io, 22418789427, DIRECT   +33across.com, 0010b00002Mq2FYAAZ, DIRECT, bbea06d9c4d2853c  +yahoo.com, 57289, RESELLER, e1a5b5b6e3255540  +rhythmone.com, 2439829435, RESELLER, a670c89d4a324e47  +google.com, pub-1789253751882305, DIRECT, f08c47fec0942fa0  +google.com, pub-1835489473992347, RESELLER, f08c47fec0942fa0  +gumgum.com, 13926, DIRECT, ffdef49475d318a9  +onetag.com, 694e68b73971b58, DIRECT  +rubiconproject.com, 11006, RESELLER, 0bfd66d529a55807  +advertising.com, 28246, RESELLER  +advertising.com, 28246, RESELLER  +yahoo.com, 57872, DIRECT  +smartadserver.com,3447, DIRECT  +lijit.com, 273657, DIRECT, fafdf38b16bf6b2b  +sovrn.com, 273657, DIRECT, fafdf38b16bf6b2b  +xandr.com, 11429, DIRECT, f5ab79cb980f11d1  +xandr.com, 12701, DIRECT, f5ab79cb980f11d1  +rubiconproject.com, 13702, DIRECT, 0bfd66d529a55807  +video.unrulymedia.com, 3736557092, RESELLER  +rhythmone.com, 3736557092, RESELLER, a670c89d4a324e47  +nativo.com, 5677, Direct  +admanmedia.com, 812, DIRECT  +sonobi.com, 7ad1b9f952, RESELLER, d1a215d9eb5aee9e  +rhythmone.com, 1059622079, RESELLER, a670c89d4a324e47  +contextweb.com, 560606, RESELLER, 89ff185a4c4e857c  +yahoo.com, 58905, RESELLER, e1a5b5b6e3255540  +aol.com, 58905, RESELLER, e1a5b5b6e3255540  +appnexus.com, 13099, RESELLER  +amxrtb.com, 105199579, DIRECT  indexexchange.com, 195491, RESELLER, 50b1c356f2c5c8fc  #Media.net -media.net, 8CUT8W5DX, RESELLER  -pubmatic.com, 159463, RESELLER, 5d62403b186f2ace  -openx.com, 537100188, RESELLER, 6a698e2ec38604c6  -rubiconproject.com, 19396, Reseller, 0bfd66d529a55807  +media.net, 8CUT8W5DX, RESELLER  +pubmatic.com, 159463, RESELLER, 5d62403b186f2ace  +openx.com, 537100188, RESELLER, 6a698e2ec38604c6  +rubiconproject.com, 19396, Reseller, 0bfd66d529a55807  media.net, 8CUZ8181A, DIRECT   #OneTag -onetag.com, 732218ebb38c233, DIRECT  -onetag.com, 732218ebb38c233-OB, DIRECT  -appnexus.com, 13099, RESELLER  -yahoo.com, 58905, RESELLER, e1a5b5b6e3255540  -pubmatic.com, 161593, RESELLER, 5d62403b186f2ace  +onetag.com, 732218ebb38c233, DIRECT  +onetag.com, 732218ebb38c233-OB, DIRECT  +appnexus.com, 13099, RESELLER  +yahoo.com, 58905, RESELLER, e1a5b5b6e3255540  +pubmatic.com, 161593, RESELLER, 5d62403b186f2ace  rubiconproject.com, 11006, RESELLER, 0bfd66d529a55807  #Brightcom -brightcom.com, 20292, DIRECT  -amxrtb.com, 105199514, RESELLER  -appnexus.com, 11801, RESELLER  -indexexchange.com, 189744, RESELLER  -audienciad.com, 202922, DIRECT  -rubiconproject.com, 20416, RESELLER, 0bfd66d529a55807   -onomagic.com, 202921, DIRECT  -smartadserver.com, 3439, RESELLER   -limpid.tv, 920292, DIRECT  -google.com, pub-5231479214411897, RESELLER, f08c47fec0942fa0  -pubmatic.com, 159477, RESELLER, 5d62403b186f2ace  -sparcmedia.com, 320292, DIRECT  -smartadserver.com, 4253, RESELLER   -getmediamx.com, 1220292, DIRECT  -appnexus.com, 13162, RESELLER, f5ab79cb980f11d1  -adyoulike.com, e102ab4faade732565927e57d62d6b8b, RESELLER  -onetag.com, 75753f1ebcc343c, RESELLER  -pubmatic.com, 161332, RESELLER, 5d62403b186f2ace  -appnexus.com, 14423, RESELLER, f5ab79cb980f11d1  -yieldmo.com, 2757543169808605705, RESELLER  -sonobi.com, 37dd19ad4a, RESELLER, d1a215d9eb5aee9e  -rhythmone.com, 1059622079, RESELLER, a670c89d4a324e47  -contextweb.com, 560606, RESELLER, 89ff185a4c4e857c  -sonobi.com, 42a06dc622, RESELLER, d1a215d9eb5aee9e  -contextweb.com, 560606, RESELLER, 89ff185a4c4e857c  -rubiconproject.com, 21310, RESELLER, 0bfd66d529a55807  -appnexus.com, 12695, RESELLER, f5ab79cb980f11d1  -appnexus.com, 12366, RESELLER, f5ab79cb980f11d1  -sovrn.com, 374814, RESELLER, fafdf38b16bf6b2b  -lijit.com, 374814, RESELLER, fafdf38b16bf6b2b  -lijit.com, 374814-eb, RESELLER, fafdf38b16bf6b2b  -openx.com, 537153209, RESELLER, 6a698e2ec38604c6  -rubiconproject.com, 24364, RESELLER, 0bfd66d529a55807  -criteo.com, B-067384, RESELLER, 9fac4a4a87c2a44f  -themediagrid.com, IRK975, RESELLER, 35d5010d7789b49d  -conversantmedia.com, 41996, DIRECT, 03113cd04947736d  -adform.com, 2708, RESELLER, 9f5210a2f0999e32  -contextweb.com, 562981, RESELLER, 89ff185a4c4e857c  -onetag.com, 7b561459c997848, RESELLER -pubmatic.com, 163517, RESELLER, 5d62403b186f2ace -rubiconproject.com, 25722, RESELLER, 0bfd66d529a55807 -smartadserver.com, 4253, RESELLER -smartadserver.com, 4483, RESELLER -loopme.com, 11228, RESELLER, 6c8d5f95897a5a3b  -advibe.media, 820292, DIRECT  -appnexus.com, 15127, RESELLER  -aps.amazon.com, 48266a61-b3d9-4cb7-b172-553abc6a42a4, DIRECT  -whildey.com, 202925, DIRECT  -sharethrough.com, lTiXlNiO, DIRECT  -media.net, 8CUB46Z7R, RESELLER   -adform.com, 2708, DIRECT, 9f5210a2f0999e32  -conversantmedia.com, 41996, RESELLER, 03113cd04947736d  -adsparc.com, 720292, DIRECT  -onlinemediasolutions.com, 20292, DIRECT -sharethrough.com, r4ScMSsf, RESELLER -indexexchange.com, 197494, RESELLER, 50b1c356f2c5c8fc -sonobi.com, 3aed893727, RESELLER, d1a215d9eb5aee9e -appnexus.com, 15710, RESELLER -loopme.com, 12733, RESELLER, 6c8d5f95897a5a3b -appnexus.com, 15629, RESELLER, f5ab79cb980f11d1 -sharethrough.com, Ey4o0VpT, RESELLER, d53b998a7bd4ecd2 -video.unrulymedia.com, 6694405583287859332, RESELLER -adyoulike.com, e9a771d72c076dbe3cafc2c6477f9238, RESELLER +brightcom.com, 20292, DIRECT  +amxrtb.com, 105199514, RESELLER  +appnexus.com, 11801, RESELLER  +indexexchange.com, 189744, RESELLER  +audienciad.com, 202922, DIRECT  +rubiconproject.com, 20416, RESELLER, 0bfd66d529a55807   +onomagic.com, 202921, DIRECT  +smartadserver.com, 3439, RESELLER   +limpid.tv, 920292, DIRECT  +google.com, pub-5231479214411897, RESELLER, f08c47fec0942fa0  +pubmatic.com, 159477, RESELLER, 5d62403b186f2ace  +sparcmedia.com, 320292, DIRECT  +smartadserver.com, 4253, RESELLER   +getmediamx.com, 1220292, DIRECT  +appnexus.com, 13162, RESELLER, f5ab79cb980f11d1  +adyoulike.com, e102ab4faade732565927e57d62d6b8b, RESELLER  +onetag.com, 75753f1ebcc343c, RESELLER  +pubmatic.com, 161332, RESELLER, 5d62403b186f2ace  +appnexus.com, 14423, RESELLER, f5ab79cb980f11d1  +yieldmo.com, 2757543169808605705, RESELLER  +sonobi.com, 37dd19ad4a, RESELLER, d1a215d9eb5aee9e  +rhythmone.com, 1059622079, RESELLER, a670c89d4a324e47  +contextweb.com, 560606, RESELLER, 89ff185a4c4e857c  +sonobi.com, 42a06dc622, RESELLER, d1a215d9eb5aee9e  +contextweb.com, 560606, RESELLER, 89ff185a4c4e857c  +rubiconproject.com, 21310, RESELLER, 0bfd66d529a55807  +appnexus.com, 12695, RESELLER, f5ab79cb980f11d1  +appnexus.com, 12366, RESELLER, f5ab79cb980f11d1  +sovrn.com, 374814, RESELLER, fafdf38b16bf6b2b  +lijit.com, 374814, RESELLER, fafdf38b16bf6b2b  +lijit.com, 374814-eb, RESELLER, fafdf38b16bf6b2b  +openx.com, 537153209, RESELLER, 6a698e2ec38604c6  +rubiconproject.com, 24364, RESELLER, 0bfd66d529a55807  +criteo.com, B-067384, RESELLER, 9fac4a4a87c2a44f  +themediagrid.com, IRK975, RESELLER, 35d5010d7789b49d  +conversantmedia.com, 41996, DIRECT, 03113cd04947736d  +adform.com, 2708, RESELLER, 9f5210a2f0999e32  +contextweb.com, 562981, RESELLER, 89ff185a4c4e857c  +onetag.com, 7b561459c997848, RESELLER +pubmatic.com, 163517, RESELLER, 5d62403b186f2ace +rubiconproject.com, 25722, RESELLER, 0bfd66d529a55807 +smartadserver.com, 4253, RESELLER +smartadserver.com, 4483, RESELLER +loopme.com, 11228, RESELLER, 6c8d5f95897a5a3b  +advibe.media, 820292, DIRECT  +appnexus.com, 15127, RESELLER  +aps.amazon.com, 48266a61-b3d9-4cb7-b172-553abc6a42a4, DIRECT  +whildey.com, 202925, DIRECT  +sharethrough.com, lTiXlNiO, DIRECT  +media.net, 8CUB46Z7R, RESELLER   +adform.com, 2708, DIRECT, 9f5210a2f0999e32  +conversantmedia.com, 41996, RESELLER, 03113cd04947736d  +adsparc.com, 720292, DIRECT  +onlinemediasolutions.com, 20292, DIRECT +sharethrough.com, r4ScMSsf, RESELLER +indexexchange.com, 197494, RESELLER, 50b1c356f2c5c8fc +sonobi.com, 3aed893727, RESELLER, d1a215d9eb5aee9e +appnexus.com, 15710, RESELLER +loopme.com, 12733, RESELLER, 6c8d5f95897a5a3b +appnexus.com, 15629, RESELLER, f5ab79cb980f11d1 +sharethrough.com, Ey4o0VpT, RESELLER, d53b998a7bd4ecd2 +video.unrulymedia.com, 6694405583287859332, RESELLER +adyoulike.com, e9a771d72c076dbe3cafc2c6477f9238, RESELLER #Media Grid themediagrid.com, 47RT8V, DIRECT, 35d5010d7789b49d  #Adtelligent -adtelligent.com, 501918, DIRECT  -bidmatic.io, b-82687, DIRECT  -openx.com, 541177116, RESELLER, 6a698e2ec38604c6  -pubmatic.com, 161562, RESELLER, 5d62403b186f2ace  -152media.info, 152M10, RESELLER  -xandr.com, 3153, RESELLER, f5ab79cb980f11d1  -xandr.com, 11924, RESELLER, f5ab79cb980f11d1  -video.unrulymedia.com, 3139274702404301777, RESELLER, 6f752381ad5ec0e5  -onetag.com, 59a18369e249bfb, RESELLER  -33across.com, 0010b00002T3JniAAF, RESELLER, bbea06d9c4d2853c  -lijit.com, 310770, RESELLER, fafdf38b16bf6b2b  -Media.net, 8CU816538, DIRECT  -rubiconproject.com, 20086, RESELLER, 0bfd66d529a55807  -orangeclickmedia.com, ach5lxtq1pmgjoz4, RESELLER, cd730d2f56b472c4  -adform.com, 2656, RESELLER, 9f5210a2f0999e32  -aceex.io, 1641, DIRECT, b1cf3c874d5c6682  -hcodemedia.com, 585, DIRECT  -adform.com, 3062, RESELLER, 9f5210a2f0999e32  -mgid.com, 827967, RESELLER, d4c29acad76ce94f  -rubiconproject.com, 9655, RESELLER, 0bfd66d529a55807  -afront.io, 3975, RESELLER  -markappmedia.site, 533994, RESELLER  -appnexus.com, 14416, RESELLER, f5ab79cb980f11d1  -vidoomy.com, 2252369, RESELLER  -minutemedia.com, 01h915hbq5pj, RESELLER  -amxrtb.com, 105199328, RESELLER  -jfacassoc.com, 1621, RESELLER  -rubiconproject.com, 25230, RESELLER, 0bfd66d529a55807  +adtelligent.com, 501918, DIRECT  +bidmatic.io, b-82687, DIRECT  +openx.com, 541177116, RESELLER, 6a698e2ec38604c6  +pubmatic.com, 161562, RESELLER, 5d62403b186f2ace  +152media.info, 152M10, RESELLER  +xandr.com, 3153, RESELLER, f5ab79cb980f11d1  +xandr.com, 11924, RESELLER, f5ab79cb980f11d1  +video.unrulymedia.com, 3139274702404301777, RESELLER, 6f752381ad5ec0e5  +onetag.com, 59a18369e249bfb, RESELLER  +33across.com, 0010b00002T3JniAAF, RESELLER, bbea06d9c4d2853c  +lijit.com, 310770, RESELLER, fafdf38b16bf6b2b  +Media.net, 8CU816538, DIRECT  +rubiconproject.com, 20086, RESELLER, 0bfd66d529a55807  +orangeclickmedia.com, ach5lxtq1pmgjoz4, RESELLER, cd730d2f56b472c4  +adform.com, 2656, RESELLER, 9f5210a2f0999e32  +aceex.io, 1641, DIRECT, b1cf3c874d5c6682  +hcodemedia.com, 585, DIRECT  +adform.com, 3062, RESELLER, 9f5210a2f0999e32  +mgid.com, 827967, RESELLER, d4c29acad76ce94f  +rubiconproject.com, 9655, RESELLER, 0bfd66d529a55807  +afront.io, 3975, RESELLER  +markappmedia.site, 533994, RESELLER  +appnexus.com, 14416, RESELLER, f5ab79cb980f11d1  +vidoomy.com, 2252369, RESELLER  +minutemedia.com, 01h915hbq5pj, RESELLER  +amxrtb.com, 105199328, RESELLER  +jfacassoc.com, 1621, RESELLER  +rubiconproject.com, 25230, RESELLER, 0bfd66d529a55807  xandr.com, 14674, RESELLER, f5ab79cb980f11d1  #Smile Wanted -smilewanted.com, 3855, RESELLER -pubmatic.com, 158810, RESELLER, 5d62403b186f2ace -appnexus.com, 10040, RESELLER -smartadserver.com, 2491, RESELLER, -pubmatic.com, 156439, RESELLER, -pubmatic.com, 154037, RESELLER, -appnexus.com, 3703, RESELLER, f5ab79cb980f11d1 -rubiconproject.com, 16114, RESELLER, -openx.com, 537149888, RESELLER, 6a698e2ec38604c6 -loopme.com, 5679, RESELLER, 6c8d5f95897a5a3b -smaato.com, 1100044045, RESELLER, 07bcf65f187117b4 -rhythmone.com, 2564526802, RESELLER, a670c89d4a324e47 -xad.com, 958, RESELLER, 81cbf0a75a5e0e9a -verve.com, 15503, RESELLER, 0c8f5958fc2d6270 -sharethrough.com, OAW69Fon, RESELLER, d53b998a7bd4ecd2 -rubiconproject.com, 19814, RESELLER, 0bfd66d529a55807 -openx.com, 557083110, RESELLER, 6a698e2ec38604c6 -lijit.com, 346012, DIRECT, fafdf38b16bf6b2b -lijit.com, 346012-eb, DIRECT, fafdf38b16bf6b2b -appnexus.com, 1019, RESELLER, f5ab79cb980f11d1 -openx.com, 538959099, RESELLER, 6a698e2ec38604c6 -pubmatic.com, 137711, RESELLER, 5d62403b186f2ace -pubmatic.com, 156212, RESELLER, 5d62403b186f2ace -rubiconproject.com, 17960, RESELLER, 0bfd66d529a55807 -improvedigital.com, 1010, RESELLER -indexexchange.com, 193216, RESELLER -adform.com, 3027, RESELLER -sharethrough.com, TZ1ahFV8, RESELLER, d53b998a7bd4ecd2 -video.unrulymedia.com, 266978658, RESELLER -pubmatic.com, 156557, RESELLER -rubiconproject.com, 18694, RESELLER, 0bfd66d529a55807 -openx.com, 540274407, RESELLER, 6a698e2ec38604c6 -33across.com, 0013300001kQj2HAAS, RESELLER, bbea06d9c4d2853c -smaato.com, 1100047713, RESELLER, 07bcf65f187117b4 -yahoo.com, 59531, RESELLER, e1a5b5b6e3255540 -smartadserver.com, 4342, RESELLER -smartadserver.com, 4012, RESELLER -smaato.com,1100055901, RESELLER, 07bcf65f187117b4 -smaato.com, 1100004890, RESELLER, 07bcf65f187117b4 -33across.com, 001Pg000009Gtq2IAC, DIRECT, bbea06d9c4d2853c -appnexus.com, 10239, RESELLER, f5ab79cb980f11d1 -rubiconproject.com, 16414, RESELLER, 0bfd66d529a55807 -pubmatic.com, 156423, RESELLER, 5d62403b186f2ace -yahoo.com, 57289, RESELLER, e1a5b5b6e3255540 -conversantmedia.com, 100141, RESELLER, 03113cd04947736d -indexexchange.com, 191973, RESELLER, 50b1c356f2c5c8fc -openx.com, 537120563, RESELLER, 6a698e2ec38604c6 -contextweb.com, 561516, RESELLER, 89ff185a4c4e857c -triplelift.com, 12503, RESELLER, 6c33edb13117fd86 -video.unrulymedia.com, 2439829435, RESELLER -loopme.com,11575,RESELLER,6c8d5f95897a5a3b -loopme.com, 11468, RESELLER, 6c8d5f95897a5a3b -rubiconproject.com, 20744, RESELLER, 0bfd66d529a55807 -pubmatic.com, 158154, RESELLER, 5d62403b186f2ace -xandr.com, 13799, RESELLER -Vidoomy.com, 7763608 , RESELLER -Adform.com , 2742 , RESELLER -onetag.com, 7f5d22b0006ab5a, RESELLER -appnexus.com, 13099, RESELLER -pubmatic.com, 161593, RESELLER, 5d62403b186f2ace -rubiconproject.com, 11006, RESELLER, 0bfd66d529a55807 -google.com, pub-3769010358500643, RESELLER, f08c47fec0942fa0 -freewheel.tv, 20393, RESELLER -freewheel.tv, 24377, RESELLER -richaudience.com, lDF5XleM05, DIRECT -openx.com, 539625136, RESELLER -yahoo.com, 57857, RESELLER, e1a5b5b6e3255540 -appnexus.com, 8233, RESELLER -appnexus.com, 2928, RESELLER -indexexchange.com, 201092, RESELLER, 50b1c356f2c5c8fc -sharethrough.com, 1udopJ1S, RESELLER, d53b998a7bd4ecd2 -e-planning.net, c0749812fd2a9ac4, RESELLER, c1ba615865ed87b2 -Zeta.com, 891, RESELLER -bizzclick.com, 292, RESELLER, 7e936b1feafdaa61 -152media.info, 152M728, RESELLER -appnexus.com, 11924, RESELLER, f5ab79cb980f11d1 -betweendigital.com, 45128, DIRECT -smartadserver.com, 4467, RESELLER -33across.com, 0015a00003DKg9ZAAT, RESELLER, bbea06d9c4d2853c -outbrain.com, 0089b17935555149a32ed30dc72fc83f2d, RESELLER -vi.ai, 987349031605160, DIRECT -appnexus.com, 7597, RESELLER, f5ab79cb980f11d1 -xandr.com, 10736, RESELLER -freewheel.tv, 1220655, RESELLER -indexexchange.com, 193091, RESELLER, 50b1c356f2c5c8fc -rubiconproject.com, 17130, RESELLER, 0bfd66d529a55807 -improvedigital.com, 1863, RESELLER -admanmedia.com, 722, DIRECT -criteo.com, B-063105, RESELLER, 9fac4a4a87c2a44f -triplelift.com, 12456, RESELLER, 6c33edb13117fd86 -smartadserver.com, 3713, RESELLER -openx.com, 540866936, DIRECT, 6a698e2ec38604c6 -rhythmone.com, 3948367200, RESELLER, a670c89d4a324e47 -adform.com, 2671, RESELLER -axonix.com, 57869, RESELLER -pubmatic.com, 158481, RESELLER, 5d62403b186f2ace -sonobi.com, 7b37f8ccbc, RESELLER, d1a215d9eb5aee9e -rubiconproject.com, 25386, DIRECT, 0bfd66d529a55807 -video.unrulymedia.com, 1767448067723954599, RESELLER -google.com, pub-6346866704322274, RESELLER, f08c47fec0942fa0 -google.com, pub-3565385483761681, RESELLER, f08c47fec0942fa0 -google.com, pub-5717092533913515, RESELLER, f08c47fec0942fa0 -pubmatic.com, 159277, RESELLER, -pubmatic.com, 161335, RESELLER, 5d62403b186f2ace -pubmatic.com, 160993, RESELLER, 5d62403b186f2ace -pubmatic.com, 161058, RESELLER, 5d62403b186f2ace -appnexus.com, 12637, RESELLER, f5ab79cb980f11d1 -appnexus.com, 9382, RESELLER, f5ab79cb980f11d1 -appnexus.com, 6849, RESELLER -yahoo.com, 59244, RESELLER -advertising.com, 23089, RESELLER -advertising.com, 28605, RESELLER -rubiconproject.com, 13918, RESELLER, 0bfd66d529a55807 -rubiconproject.com, 15268, RESELLER -indexexchange.com, 182257, RESELLER -synacor.com, 82171, RESELLER, e108f11b2cdf7d5b -loopme.com, 9718, RESELLER, 6c8d5f95897a5a3b -aniview.com, 603f65a2e291680ef30af9c7, RESELLER, 78b21b97965ec3f8 -adwmg.com, 100746, RESELLER -appnexus.com, 12290, RESELLER -amxrtb.com, 105199440, RESELLER -onetag.com, 5d0d72448d8bfb0, RESELLER -pubmatic.com, 161527, RESELLER, 5d62403b186f2ace -openx.com, 557745905, RESELLER, 6a698e2ec38604c6 -adform.com, 2865, RESELLER -pubmatic.com, 156631, RESELLER, 5d62403b186f2ace -videoheroes.tv, 212648, RESELLER , 064bc410192443d8 -appnexus.com, 12976, RESELLER, f5ab79cb980f11d1 -sharethrough.com, K5WDGAsP, RESELLER, d53b998a7bd4ecd2 -rubiconproject.com, 25060 , RESELLER, 0bfd66d529a55807 -adform.com, 3016, RESELLER -bliink.io, c0ca664a-6776-11ee-b177-023bc0057c90, RESELLER -mediafuse.com, 729, RESELLER -google.com, pub-2235342635275361, DIRECT, f08c47fec0942fa0 -google.com, pub-9949628778928908, DIRECT, f08c47fec0942fa0 -freewheel.tv, 770449, DIRECT -freewheel.tv, 774673, RESELLER -freewheel.tv, 893873, RESELLER -video.unrulymedia.com, 1767448067723954599, RESELLER -videoheroes.tv, 212648, RESELLER , 064bc410192443d8 -adwmg.com, 100746, RESELLER -33across.com, 0015a00003DKg9ZAAT, RESELLER, bbea06d9c4d2853c +smilewanted.com, 3855, RESELLER +pubmatic.com, 158810, RESELLER, 5d62403b186f2ace +appnexus.com, 10040, RESELLER +smartadserver.com, 2491, RESELLER, +pubmatic.com, 156439, RESELLER, +pubmatic.com, 154037, RESELLER, +appnexus.com, 3703, RESELLER, f5ab79cb980f11d1 +rubiconproject.com, 16114, RESELLER, +openx.com, 537149888, RESELLER, 6a698e2ec38604c6 +loopme.com, 5679, RESELLER, 6c8d5f95897a5a3b +smaato.com, 1100044045, RESELLER, 07bcf65f187117b4 +rhythmone.com, 2564526802, RESELLER, a670c89d4a324e47 +xad.com, 958, RESELLER, 81cbf0a75a5e0e9a +verve.com, 15503, RESELLER, 0c8f5958fc2d6270 +sharethrough.com, OAW69Fon, RESELLER, d53b998a7bd4ecd2 +rubiconproject.com, 19814, RESELLER, 0bfd66d529a55807 +openx.com, 557083110, RESELLER, 6a698e2ec38604c6 +lijit.com, 346012, DIRECT, fafdf38b16bf6b2b +lijit.com, 346012-eb, DIRECT, fafdf38b16bf6b2b +appnexus.com, 1019, RESELLER, f5ab79cb980f11d1 +openx.com, 538959099, RESELLER, 6a698e2ec38604c6 +pubmatic.com, 137711, RESELLER, 5d62403b186f2ace +pubmatic.com, 156212, RESELLER, 5d62403b186f2ace +rubiconproject.com, 17960, RESELLER, 0bfd66d529a55807 +improvedigital.com, 1010, RESELLER +indexexchange.com, 193216, RESELLER +adform.com, 3027, RESELLER +sharethrough.com, TZ1ahFV8, RESELLER, d53b998a7bd4ecd2 +video.unrulymedia.com, 266978658, RESELLER +pubmatic.com, 156557, RESELLER +rubiconproject.com, 18694, RESELLER, 0bfd66d529a55807 +openx.com, 540274407, RESELLER, 6a698e2ec38604c6 +33across.com, 0013300001kQj2HAAS, RESELLER, bbea06d9c4d2853c +smaato.com, 1100047713, RESELLER, 07bcf65f187117b4 +yahoo.com, 59531, RESELLER, e1a5b5b6e3255540 +smartadserver.com, 4342, RESELLER +smartadserver.com, 4012, RESELLER +smaato.com,1100055901, RESELLER, 07bcf65f187117b4 +smaato.com, 1100004890, RESELLER, 07bcf65f187117b4 +33across.com, 001Pg000009Gtq2IAC, DIRECT, bbea06d9c4d2853c +appnexus.com, 10239, RESELLER, f5ab79cb980f11d1 +rubiconproject.com, 16414, RESELLER, 0bfd66d529a55807 +pubmatic.com, 156423, RESELLER, 5d62403b186f2ace +yahoo.com, 57289, RESELLER, e1a5b5b6e3255540 +conversantmedia.com, 100141, RESELLER, 03113cd04947736d +indexexchange.com, 191973, RESELLER, 50b1c356f2c5c8fc +openx.com, 537120563, RESELLER, 6a698e2ec38604c6 +contextweb.com, 561516, RESELLER, 89ff185a4c4e857c +triplelift.com, 12503, RESELLER, 6c33edb13117fd86 +video.unrulymedia.com, 2439829435, RESELLER +loopme.com,11575,RESELLER,6c8d5f95897a5a3b +loopme.com, 11468, RESELLER, 6c8d5f95897a5a3b +rubiconproject.com, 20744, RESELLER, 0bfd66d529a55807 +pubmatic.com, 158154, RESELLER, 5d62403b186f2ace +xandr.com, 13799, RESELLER +Vidoomy.com, 7763608 , RESELLER +Adform.com , 2742 , RESELLER +onetag.com, 7f5d22b0006ab5a, RESELLER +appnexus.com, 13099, RESELLER +pubmatic.com, 161593, RESELLER, 5d62403b186f2ace +rubiconproject.com, 11006, RESELLER, 0bfd66d529a55807 +google.com, pub-3769010358500643, RESELLER, f08c47fec0942fa0 +freewheel.tv, 20393, RESELLER +freewheel.tv, 24377, RESELLER +richaudience.com, lDF5XleM05, DIRECT +openx.com, 539625136, RESELLER +yahoo.com, 57857, RESELLER, e1a5b5b6e3255540 +appnexus.com, 8233, RESELLER +appnexus.com, 2928, RESELLER +indexexchange.com, 201092, RESELLER, 50b1c356f2c5c8fc +sharethrough.com, 1udopJ1S, RESELLER, d53b998a7bd4ecd2 +e-planning.net, c0749812fd2a9ac4, RESELLER, c1ba615865ed87b2 +Zeta.com, 891, RESELLER +bizzclick.com, 292, RESELLER, 7e936b1feafdaa61 +152media.info, 152M728, RESELLER +appnexus.com, 11924, RESELLER, f5ab79cb980f11d1 +betweendigital.com, 45128, DIRECT +smartadserver.com, 4467, RESELLER +33across.com, 0015a00003DKg9ZAAT, RESELLER, bbea06d9c4d2853c +outbrain.com, 0089b17935555149a32ed30dc72fc83f2d, RESELLER +vi.ai, 987349031605160, DIRECT +appnexus.com, 7597, RESELLER, f5ab79cb980f11d1 +xandr.com, 10736, RESELLER +freewheel.tv, 1220655, RESELLER +indexexchange.com, 193091, RESELLER, 50b1c356f2c5c8fc +rubiconproject.com, 17130, RESELLER, 0bfd66d529a55807 +improvedigital.com, 1863, RESELLER +admanmedia.com, 722, DIRECT +criteo.com, B-063105, RESELLER, 9fac4a4a87c2a44f +triplelift.com, 12456, RESELLER, 6c33edb13117fd86 +smartadserver.com, 3713, RESELLER +openx.com, 540866936, DIRECT, 6a698e2ec38604c6 +rhythmone.com, 3948367200, RESELLER, a670c89d4a324e47 +adform.com, 2671, RESELLER +axonix.com, 57869, RESELLER +pubmatic.com, 158481, RESELLER, 5d62403b186f2ace +sonobi.com, 7b37f8ccbc, RESELLER, d1a215d9eb5aee9e +rubiconproject.com, 25386, DIRECT, 0bfd66d529a55807 +video.unrulymedia.com, 1767448067723954599, RESELLER +google.com, pub-6346866704322274, RESELLER, f08c47fec0942fa0 +google.com, pub-3565385483761681, RESELLER, f08c47fec0942fa0 +google.com, pub-5717092533913515, RESELLER, f08c47fec0942fa0 +pubmatic.com, 159277, RESELLER, +pubmatic.com, 161335, RESELLER, 5d62403b186f2ace +pubmatic.com, 160993, RESELLER, 5d62403b186f2ace +pubmatic.com, 161058, RESELLER, 5d62403b186f2ace +appnexus.com, 12637, RESELLER, f5ab79cb980f11d1 +appnexus.com, 9382, RESELLER, f5ab79cb980f11d1 +appnexus.com, 6849, RESELLER +yahoo.com, 59244, RESELLER +advertising.com, 23089, RESELLER +advertising.com, 28605, RESELLER +rubiconproject.com, 13918, RESELLER, 0bfd66d529a55807 +rubiconproject.com, 15268, RESELLER +indexexchange.com, 182257, RESELLER +synacor.com, 82171, RESELLER, e108f11b2cdf7d5b +loopme.com, 9718, RESELLER, 6c8d5f95897a5a3b +aniview.com, 603f65a2e291680ef30af9c7, RESELLER, 78b21b97965ec3f8 +adwmg.com, 100746, RESELLER +appnexus.com, 12290, RESELLER +amxrtb.com, 105199440, RESELLER +onetag.com, 5d0d72448d8bfb0, RESELLER +pubmatic.com, 161527, RESELLER, 5d62403b186f2ace +openx.com, 557745905, RESELLER, 6a698e2ec38604c6 +adform.com, 2865, RESELLER +pubmatic.com, 156631, RESELLER, 5d62403b186f2ace +videoheroes.tv, 212648, RESELLER , 064bc410192443d8 +appnexus.com, 12976, RESELLER, f5ab79cb980f11d1 +sharethrough.com, K5WDGAsP, RESELLER, d53b998a7bd4ecd2 +rubiconproject.com, 25060 , RESELLER, 0bfd66d529a55807 +adform.com, 3016, RESELLER +bliink.io, c0ca664a-6776-11ee-b177-023bc0057c90, RESELLER +mediafuse.com, 729, RESELLER +google.com, pub-2235342635275361, DIRECT, f08c47fec0942fa0 +google.com, pub-9949628778928908, DIRECT, f08c47fec0942fa0 +freewheel.tv, 770449, DIRECT +freewheel.tv, 774673, RESELLER +freewheel.tv, 893873, RESELLER +video.unrulymedia.com, 1767448067723954599, RESELLER +videoheroes.tv, 212648, RESELLER , 064bc410192443d8 +adwmg.com, 100746, RESELLER +33across.com, 0015a00003DKg9ZAAT, RESELLER, bbea06d9c4d2853c onetag.com, 7f5d22b0006ab5a, RESELLER #152 Media -152media.info, 152M250, RESELLER -appnexus.com, 3153, RESELLER, f5ab79cb980f11d1 +152media.info, 152M250, RESELLER +appnexus.com, 3153, RESELLER, f5ab79cb980f11d1 appnexus.com, 11924, RESELLER, f5ab79cb980f11d1 #BetweenX -betweendigital.com, 44543, DIRECT  -appnexus.com, 13817, DIRECT, f5ab79cb980f11d1  -vidoomy.com, 9148331, RESELLER   -contextweb.com, 562827, RESELLER, 89ff185a4c4e857c  -smartadserver.com, 4467, RESELLER  -33across.com, 0015a00003DKg9ZAAT, RESELLER, bbea06d9c4d2853c  -pubmatic.com, 159668, RESELLER, 5d62403b186f2ace  -lijit.com, 273644, RESELLER, fafdf38b16bf6b2b  -onetag.com, 5d1628750185ace, RESELLER  -brightcom.com, 29559, RESELLER  -rubiconproject.com, 19724, RESELLER, 0bfd66d529a55807  -google.com, pub-4125454196932019, RESELLER, f08c47fec0942fa0  -yeahmobi.com, 113772, RESELLER  -e-planning.net, 949b688810cb7439, RESELLER, c1ba615865ed87b2  -xapads.com, 144307, RESELLER +betweendigital.com, 44543, DIRECT  +appnexus.com, 13817, DIRECT, f5ab79cb980f11d1  +vidoomy.com, 9148331, RESELLER   +contextweb.com, 562827, RESELLER, 89ff185a4c4e857c  +smartadserver.com, 4467, RESELLER  +33across.com, 0015a00003DKg9ZAAT, RESELLER, bbea06d9c4d2853c  +pubmatic.com, 159668, RESELLER, 5d62403b186f2ace  +lijit.com, 273644, RESELLER, fafdf38b16bf6b2b  +onetag.com, 5d1628750185ace, RESELLER  +brightcom.com, 29559, RESELLER  +rubiconproject.com, 19724, RESELLER, 0bfd66d529a55807  +google.com, pub-4125454196932019, RESELLER, f08c47fec0942fa0  +yeahmobi.com, 113772, RESELLER  +e-planning.net, 949b688810cb7439, RESELLER, c1ba615865ed87b2  +xapads.com, 144307, RESELLER lunamedia.io, bfacf5e017bb11edb41173b0ca2c748c, RESELLER, 524ecb396915caaf #MinuteMedia -minutemedia.com, 01g889hj3s8c, RESELLER  -pubmatic.com, 161683, RESELLER, 5d62403b186f2ace  -appnexus.com, 8381, RESELLER  -triplelift.com, 6030, RESELLER, 6c33edb13117fd86  -sonobi.com, 37fbaf262c, RESELLER, d1a215d9eb5aee9e  -openx.com, 540780517, RESELLER, 6a698e2ec38604c6  -rubiconproject.com, 17598, RESELLER, 0bfd66d529a55807  -indexexchange.com, 196326, RESELLER  -yahoo.com, 59407, RESELLER, e1a5b5b6e3255540  -sharethrough.com, xz7QjFBY, RESELLER, d53b998a7bd4ecd2  -33across.com, 0013300001jlr99AAA, RESELLER, bbea06d9c4d2853c  -amxrtb.com, 105199663, RESELLER  -sovrn.com, 264726, RESELLER, fafdf38b16bf6b2b  -video.unrulymedia.com, 699546687, RESELLER  -onetag.com, 765b4e6bb9c8438, RESELLER  -yieldmo.com, 2240559316355155321, RESELLER  -zeta.com, 591, RESELLER  -disqus.com, 591, RESELLER"  -admanmedia.com, 953, RESELLER  -iqzone.com, IQ161, RESELLER  -smartadserver.com, 4106, RESELLER, 060d053dcf45cbf3  -improvedigital.com, 2073, RESELLER  -krushmedia.com, AJxF6R470a9M6CaTvK, RESELLER  -betweendigital.com, 44808, RESELLER  -betweendigital.com, 44938, RESELLER"  -loopme.com, 11556, RESELLER, 6c8d5f95897a5a3b  -Contextweb.com ,562963, RESELLER,89ff185a4c4e857c  -lijit.com, 264726, RESELLER, fafdf38b16bf6b2b  -yieldmo.com, 2954622693783052507, RESELLER  -Contextweb.com, 562963, RESELLER, 89ff185a4c4e857c   -imds.tv, 82302, RESELLER, ae6c32151e71f19d  +minutemedia.com, 01g889hj3s8c, RESELLER  +pubmatic.com, 161683, RESELLER, 5d62403b186f2ace  +appnexus.com, 8381, RESELLER  +triplelift.com, 6030, RESELLER, 6c33edb13117fd86  +sonobi.com, 37fbaf262c, RESELLER, d1a215d9eb5aee9e  +openx.com, 540780517, RESELLER, 6a698e2ec38604c6  +rubiconproject.com, 17598, RESELLER, 0bfd66d529a55807  +indexexchange.com, 196326, RESELLER  +yahoo.com, 59407, RESELLER, e1a5b5b6e3255540  +sharethrough.com, xz7QjFBY, RESELLER, d53b998a7bd4ecd2  +33across.com, 0013300001jlr99AAA, RESELLER, bbea06d9c4d2853c  +amxrtb.com, 105199663, RESELLER  +sovrn.com, 264726, RESELLER, fafdf38b16bf6b2b  +video.unrulymedia.com, 699546687, RESELLER  +onetag.com, 765b4e6bb9c8438, RESELLER  +yieldmo.com, 2240559316355155321, RESELLER  +zeta.com, 591, RESELLER  +disqus.com, 591, RESELLER"  +admanmedia.com, 953, RESELLER  +iqzone.com, IQ161, RESELLER  +smartadserver.com, 4106, RESELLER, 060d053dcf45cbf3  +improvedigital.com, 2073, RESELLER  +krushmedia.com, AJxF6R470a9M6CaTvK, RESELLER  +betweendigital.com, 44808, RESELLER  +betweendigital.com, 44938, RESELLER"  +loopme.com, 11556, RESELLER, 6c8d5f95897a5a3b  +Contextweb.com ,562963, RESELLER,89ff185a4c4e857c  +lijit.com, 264726, RESELLER, fafdf38b16bf6b2b  +yieldmo.com, 2954622693783052507, RESELLER  +Contextweb.com, 562963, RESELLER, 89ff185a4c4e857c   +imds.tv, 82302, RESELLER, ae6c32151e71f19d  adyoulike.com, 53264963677efeda057eef7db2cb305f, RESELLER  #PulsePoint -contextweb.com, 562735, RESELLER, 89ff185a4c4e857c -rubiconproject.com, 26184, RESELLER, 0bfd66d529a55807 -mediafuse.com, 720, RESELLER -appnexus.com, 9538, RESELLER, f5ab79cb980f11d1 -rubiconproject.com, 24434, RESELLER, 0bfd66d529a55807  -sovrn.com, 253233, RESELLER, fafdf38b16bf6b2b -lijit.com, 253233, RESELLER, fafdf38b16bf6b2b -thebrave.io, 1234696, RESELLER, c25b2154543746ac -sharethrough.com, Bc6D1WHS, RESELLER, d53b998a7bd4ecd2 -freewheel.tv, 1601349, RESELLER -freewheel.tv, 1601388, RESELLER -onetag.com, 82bad7d17eccf7c, RESELLER -axonix.com, 59107, RESELLER, bc385f2b4a87b721 -smartadserver.com, 4343, RESELLER +contextweb.com, 562735, RESELLER, 89ff185a4c4e857c +rubiconproject.com, 26184, RESELLER, 0bfd66d529a55807 +mediafuse.com, 720, RESELLER +appnexus.com, 9538, RESELLER, f5ab79cb980f11d1 +rubiconproject.com, 24434, RESELLER, 0bfd66d529a55807  +sovrn.com, 253233, RESELLER, fafdf38b16bf6b2b +lijit.com, 253233, RESELLER, fafdf38b16bf6b2b +thebrave.io, 1234696, RESELLER, c25b2154543746ac +sharethrough.com, Bc6D1WHS, RESELLER, d53b998a7bd4ecd2 +freewheel.tv, 1601349, RESELLER +freewheel.tv, 1601388, RESELLER +onetag.com, 82bad7d17eccf7c, RESELLER +axonix.com, 59107, RESELLER, bc385f2b4a87b721 +smartadserver.com, 4343, RESELLER smartadserver.com, 4865, RESELLER #Google AdSense google.com, pub-6022628118304495, DIRECT, f08c47fec0942fa0 #E-Planning -e-planning.net, 161ebfe76aea73c3, DIRECT, c1ba615865ed87b2  -openx.com, 541031350, RESELLER, 6a698e2ec38604c6  -conversantmedia.com, 100066, DIRECT, 03113cd04947736d  -admanmedia.com, 7adaec45, DIRECT  -rubiconproject.com, 12186, RESELLER, 0bfd66d529a55807  -pubmatic.com, 156631, RESELLER, 5d62403b186f2ace  -richaudience.com, 25BiP9IMgN, DIRECT  -advertising.com, 7574, DIRECT  -appnexus.com, 8233, DIRECT  -rubiconproject.com, 13510, DIRECT  -aol.com, 57992, RESELLER, e1a5b5b6e3255540  -Yahoo.com, 57992, RESELLER, e1a5b5b6e3255540  -rhythmone.com, 1059622079, RESELLER, a670c89d4a324e47  -contextweb.com, 560606, RESELLER, 89ff185a4c4e857c  -appnexus.com, 10273, RESELLER, f5ab79cb980f11d1  -indexexchange.com, 192922, RESELLER, 50b1c356f2c5c8fc  -sonobi.com, 4d443a3ea2, RESELLER, d1a215d9eb5aee9e  -admanmedia.com, 771, DIRECT  -pubmatic.com, 158481, RESELLER, 5d62403b186f2ace  -appnexus.com, 8804, RESELLER, f5ab79cb980f11d1  -beachfront.com, 14513, RESELLER, e2541279e8e2ca4d  -aol.com, 57992, RESELLER, e1a5b5b6e3255540  -Yahoo.com, 57992, RESELLER, e1a5b5b6e3255540  -openx.com, 541031350, RESELLER, 6a698e2ec38604c6  -aol.com, 57992, RESELLER, e1a5b5b6e3255540  -Yahoo.com, 57992, RESELLER, e1a5b5b6e3255540  -axonix.com, 56222, RESELLER  -sonobi.com, 8efb591506, DIRECT, d1a215d9eb5aee9e  -inmobi.com, 09f53411034d4d608cd6230490d46fff, DIRECT, 83e75a7ae333ca9d  -yandex.com, 97790217, RESELLER  -disqus.com, 891, DIRECT  -video.unrulymedia.com, 1767353092, RESELLER, a670c89d4a324e47  -triplelift.com, 8446, DIRECT, 6c33edb13117fd86  -triplelift.com, 8446, DIRECT, 6c33edb13117fd86  -indexexchange.com, 190243, DIRECT  -axonix.com, 56222, RESELLER  -sonobi.com, 8efb591506, DIRECT, d1a215d9eb5aee9e  -sharethrough.com, 23830661, DIRECT, d53b998a7bd4ecd2  -onetag.com, 5927d926323dc2c, DIRECT  -triplelift.com, 8446, DIRECT, 6c33edb13117fd86  -contextweb.com, 562965, RESELLER, 89ff185a4c4e857c  -zeta.com, 891, DIRECT  -rubiconproject.com, 12186, RESELLER, 0bfd66d529a55807  - supply.colossusssp.com, 601, DIRECT, 6c5b49d96ec1b458  -appnexus.com, 15941, RESELLER  -zetaglobal.net, 891, DIRECT  +e-planning.net, 161ebfe76aea73c3, DIRECT, c1ba615865ed87b2  +openx.com, 541031350, RESELLER, 6a698e2ec38604c6  +conversantmedia.com, 100066, DIRECT, 03113cd04947736d  +admanmedia.com, 7adaec45, DIRECT  +rubiconproject.com, 12186, RESELLER, 0bfd66d529a55807  +pubmatic.com, 156631, RESELLER, 5d62403b186f2ace  +richaudience.com, 25BiP9IMgN, DIRECT  +advertising.com, 7574, DIRECT  +appnexus.com, 8233, DIRECT  +rubiconproject.com, 13510, DIRECT  +aol.com, 57992, RESELLER, e1a5b5b6e3255540  +Yahoo.com, 57992, RESELLER, e1a5b5b6e3255540  +rhythmone.com, 1059622079, RESELLER, a670c89d4a324e47  +contextweb.com, 560606, RESELLER, 89ff185a4c4e857c  +appnexus.com, 10273, RESELLER, f5ab79cb980f11d1  +indexexchange.com, 192922, RESELLER, 50b1c356f2c5c8fc  +sonobi.com, 4d443a3ea2, RESELLER, d1a215d9eb5aee9e  +admanmedia.com, 771, DIRECT  +pubmatic.com, 158481, RESELLER, 5d62403b186f2ace  +appnexus.com, 8804, RESELLER, f5ab79cb980f11d1  +beachfront.com, 14513, RESELLER, e2541279e8e2ca4d  +aol.com, 57992, RESELLER, e1a5b5b6e3255540  +Yahoo.com, 57992, RESELLER, e1a5b5b6e3255540  +openx.com, 541031350, RESELLER, 6a698e2ec38604c6  +aol.com, 57992, RESELLER, e1a5b5b6e3255540  +Yahoo.com, 57992, RESELLER, e1a5b5b6e3255540  +axonix.com, 56222, RESELLER  +sonobi.com, 8efb591506, DIRECT, d1a215d9eb5aee9e  +inmobi.com, 09f53411034d4d608cd6230490d46fff, DIRECT, 83e75a7ae333ca9d  +yandex.com, 97790217, RESELLER  +disqus.com, 891, DIRECT  +video.unrulymedia.com, 1767353092, RESELLER, a670c89d4a324e47  +triplelift.com, 8446, DIRECT, 6c33edb13117fd86  +triplelift.com, 8446, DIRECT, 6c33edb13117fd86  +indexexchange.com, 190243, DIRECT  +axonix.com, 56222, RESELLER  +sonobi.com, 8efb591506, DIRECT, d1a215d9eb5aee9e  +sharethrough.com, 23830661, DIRECT, d53b998a7bd4ecd2  +onetag.com, 5927d926323dc2c, DIRECT  +triplelift.com, 8446, DIRECT, 6c33edb13117fd86  +contextweb.com, 562965, RESELLER, 89ff185a4c4e857c  +zeta.com, 891, DIRECT  +rubiconproject.com, 12186, RESELLER, 0bfd66d529a55807  + supply.colossusssp.com, 601, DIRECT, 6c5b49d96ec1b458  +appnexus.com, 15941, RESELLER  +zetaglobal.net, 891, DIRECT  video.unrulymedia.com, 851532539, RESELLER  #Rich Audience -richaudience.com, PRVNEccxEi, DIRECT -richaudience.com, quxufDBTNs, DIRECT -richaudience.com, 06EhCbcfZK, DIRECT -adpone.com, 1813bfe577448f6ef478, DIRECT -sunmedia.tv, 12918514-294e-4e6e-8eae-c89a8fec20f5, DIRECT -adpone.com, 1813bfe577448f6ef478, RESELLER -appnexus.com, 8233, RESELLER -pubmatic.com, 81564, RESELLER, 5d62403b186f2ace -pubmatic.com, 156538, RESELLER, 5d62403b186f2ace -rubiconproject.com, 13510, DIRECT -spotx.tv, 202100, RESELLER, 7842df1d2fe2db34 -spotxchange.com, 202100, RESELLER, 7842df1d2fe2db34 -smartadserver.com, 1999-OB, RESELLER, 060d053dcf45cbf3 -smartadserver.com, 1999, RESELLER, 060d053dcf45cbf3 -adform.com, 1942, DIRECT -adform.com, 1941, DIRECT -lijit.com, 249425, RESELLER -openx.com, 539625136, RESELLER -smartadserver.com, 2640, RESELLER -smartadserver.com, 2441, RESELLER -sovrn.com, 249425, RESELLER -indexexchange.com, 201092, RESELLER, 50b1c356f2c5c8fc -smilewanted.com, 3834, RESELLER -sharethrough.com, 1udopJ1S, RESELLER, d53b998a7bd4ecd2 -onetag.com, 7a4244b2979db22-OB, RESELLER -onetag.com, 7a4244b2979db22, RESELLER -triplelift.com, 8683, RESELLER, 6c33edb13117fd86 -google.com, pub-8221793852898543, RESELLER, f08c47fec0942fa0 -pubmatic.com, 156136, RESELLER, 5d62403b186f2ace -appnexus.com, 1199, RESELLER, f5ab79cb980f11d1 -rubiconproject.com, 17960, RESELLER, 0bfd66d529a55807 -rubiconproject.com, 22328, RESELLER, 0bfd66d529a55807 -adform.com, 2631, RESELLER, 9f5210a2f0999e32 -indexexchange.com, 192051, RESELLER -sovrn.com, 277115, DIRECT, fafdf38b16bf6b2b -google.com, pub-4673227357197067, RESELLER, f08c47fec0942fa0  -smartadserver.com, 3374, RESELLER -smartadserver.com, 2951, RESELLER -aps.amazon.com, bbbb77a7-1459-4c85-af82-cd7e0a773a21, DIRECT -improvedigital.com, 1062, RESELLER -improvedigital.com, 543, RESELLER -adform.com, 582, RESELLER, 9f5210a2f0999e32 -adform.com, 2474, DIRECT, 9f5210a2f0999e32 -appnexus.com,10264, RESELLER, f5ab79cb980f11d1 -appnexus.com, 2928, DIRECT -aps.amazon.com, 93aec77c-f6d2-45bd-affc-a85ab5a72683, DIRECT -criteo.com,B-060278,DIRECT, 9fac4a4a87c2a44f -google.com,pub-2128757167812663, reseller, f08c47fec0942fa0 -improvedigital.com, 2048, RESELLER -indexexchange.com, 192450, RESELLER +richaudience.com, PRVNEccxEi, DIRECT +richaudience.com, quxufDBTNs, DIRECT +richaudience.com, 06EhCbcfZK, DIRECT +adpone.com, 1813bfe577448f6ef478, DIRECT +sunmedia.tv, 12918514-294e-4e6e-8eae-c89a8fec20f5, DIRECT +adpone.com, 1813bfe577448f6ef478, RESELLER +appnexus.com, 8233, RESELLER +pubmatic.com, 81564, RESELLER, 5d62403b186f2ace +pubmatic.com, 156538, RESELLER, 5d62403b186f2ace +rubiconproject.com, 13510, DIRECT +spotx.tv, 202100, RESELLER, 7842df1d2fe2db34 +spotxchange.com, 202100, RESELLER, 7842df1d2fe2db34 +smartadserver.com, 1999-OB, RESELLER, 060d053dcf45cbf3 +smartadserver.com, 1999, RESELLER, 060d053dcf45cbf3 +adform.com, 1942, DIRECT +adform.com, 1941, DIRECT +lijit.com, 249425, RESELLER +openx.com, 539625136, RESELLER +smartadserver.com, 2640, RESELLER +smartadserver.com, 2441, RESELLER +sovrn.com, 249425, RESELLER +indexexchange.com, 201092, RESELLER, 50b1c356f2c5c8fc +smilewanted.com, 3834, RESELLER +sharethrough.com, 1udopJ1S, RESELLER, d53b998a7bd4ecd2 +onetag.com, 7a4244b2979db22-OB, RESELLER +onetag.com, 7a4244b2979db22, RESELLER +triplelift.com, 8683, RESELLER, 6c33edb13117fd86 +google.com, pub-8221793852898543, RESELLER, f08c47fec0942fa0 +pubmatic.com, 156136, RESELLER, 5d62403b186f2ace +appnexus.com, 1199, RESELLER, f5ab79cb980f11d1 +rubiconproject.com, 17960, RESELLER, 0bfd66d529a55807 +rubiconproject.com, 22328, RESELLER, 0bfd66d529a55807 +adform.com, 2631, RESELLER, 9f5210a2f0999e32 +indexexchange.com, 192051, RESELLER +sovrn.com, 277115, DIRECT, fafdf38b16bf6b2b +google.com, pub-4673227357197067, RESELLER, f08c47fec0942fa0  +smartadserver.com, 3374, RESELLER +smartadserver.com, 2951, RESELLER +aps.amazon.com, bbbb77a7-1459-4c85-af82-cd7e0a773a21, DIRECT +improvedigital.com, 1062, RESELLER +improvedigital.com, 543, RESELLER +adform.com, 582, RESELLER, 9f5210a2f0999e32 +adform.com, 2474, DIRECT, 9f5210a2f0999e32 +appnexus.com,10264, RESELLER, f5ab79cb980f11d1 +appnexus.com, 2928, DIRECT +aps.amazon.com, 93aec77c-f6d2-45bd-affc-a85ab5a72683, DIRECT +criteo.com,B-060278,DIRECT, 9fac4a4a87c2a44f +google.com,pub-2128757167812663, reseller, f08c47fec0942fa0 +improvedigital.com, 2048, RESELLER +indexexchange.com, 192450, RESELLER richaudience.com, sZn9xIbZzF, DIRECT #Criteo -criteo.com, B-072429, DIRECT, 9fac4a4a87c2a44f +criteo.com, B-072429, DIRECT, 9fac4a4a87c2a44f themediagrid.com, SE27CZ, DIRECT, 35d5010d7789b49d #Aniview -aniview.com, 644fea68a67ac0f49c0f54d4, RESELLER, 78b21b97965ec3f8 -google.com, pub-6346866704322274, RESELLER, f08c47fec0942fa0 -google.com, pub-4586415728471297, RESELLER, f08c47fec0942fa0 -playstream.media, 911, RESELLER -sharethrough.com, UXUWG46h, RESELLER, d53b998a7bd4ecd2 -sharethrough.com, zLsEa05k, RESELLER, d53b998a7bd4ecd2 -pubmatic.com, 156557, RESELLER, 5d62403b186f2ace -rubiconproject.com, 18694, RESELLER, 0bfd66d529a55807 -openx.com, 540274407, RESELLER, 6a698e2ec38604c6 -33across.com, 0013300001kQj2HAAS, RESELLER, bbea06d9c4d2853c -smaato.com, 1100047713, RESELLER, 07bcf65f187117b4 -yahoo.com, 59531, RESELLER, e1a5b5b6e3255540 -smartadserver.com, 4342, RESELLER -smartadserver.com, 4012, RESELLER -google.com, pub-3565385483761681, RESELLER, f08c47fec0942fa0 -didna.io, 22652678936, RESELLER -google.com, pub-6479999173277695, RESELLER, f08c47fec0942fa0 -google.com, pub-5717092533913515, RESELLER, f08c47fec0942fa0 -gannett.com, 22652678936, RESELLER -appnexus.com, 12637, RESELLER, f5ab79cb980f11d1 -rubiconproject.com, 13918, RESELLER, 0bfd66d529a55807 -pubmatic.com, 160993, RESELLER, 5d62403b186f2ace -pubmatic.com, 161335, RESELLER, 5d62403b186f2ace -aps.amazon.com, 1ad7261b-91ea-4b6f-b9e9-b83522205b75, RESELLER  -yahoo.com, 59988,  RESELLER, e1a5b5b6e3255540 -video.unrulymedia.com, 3350674472, RESELLER -google.com, pub-4903453974745530, RESELLER, f08c47fec0942fa0 -google.com, pub-2930805104418204, RESELLER, f08c47fec0942fa0 -adipolo.com, 22652678936, RESELLER -adipolosolutions.com, 22652678936, RESELLER -richaudience.com, 1ru8dKmJJV, RESELLER -appnexus.com, 8233, RESELLER, f5ab79cb980f11d1 -openx.com, 539625136, RESELLER, 6a698e2ec38604c6 -pubmatic.com, 81564, RESELLER, 5d62403b186f2ace -pubmatic.com, 156538, RESELLER, 5d62403b186f2ace -rubiconproject.com, 13510, RESELLER, 0bfd66d529a55807 -smartadserver.com, 2640, RESELLER -smartadserver.com, 2441, RESELLER -yahoo.com, 57857, RESELLER, e1a5b5b6e3255540 -hindsightsolutions.net, 22652678936, RESELLER -openx.com, 540862677, RESELLER, 6a698e2ec38604c6 -openx.com, 557739593, RESELLER, 6a698e2ec38604c6 -criteo.com, B-068458, RESELLER, 9fac4a4a87c2a44f -themediagrid.com, 4AJU2M, RESELLER, 35d5010d7789b49d -krushmedia.com, AJxF6R55a9M6CaTvK, RESELLER -google.com, pub-7734005103835923, RESELLER, f08c47fec0942fa0 -sonobi.com, 30fcea73d4, RESELLER, d1a215d9eb5aee9e -yieldmo.com, 3482868977292485608, RESELLER, 6a92c77cfc3d2258 -rubiconproject.com, 17070, RESELLER, 0bfd66d529a55807 #yieldmo -pubmatic.com, 160648, RESELLER, 5d62403b186f2ace #yieldmo -contextweb.com, 561118, RESELLER, 89ff185a4c4e857c #yieldmo -conversantmedia.com, 100270, RESELLER, 03113cd04947736d #yieldmo  -video.unrulymedia.com, 3463482822, RESELLER #yieldmo +aniview.com, 644fea68a67ac0f49c0f54d4, RESELLER, 78b21b97965ec3f8 +google.com, pub-6346866704322274, RESELLER, f08c47fec0942fa0 +google.com, pub-4586415728471297, RESELLER, f08c47fec0942fa0 +playstream.media, 911, RESELLER +sharethrough.com, UXUWG46h, RESELLER, d53b998a7bd4ecd2 +sharethrough.com, zLsEa05k, RESELLER, d53b998a7bd4ecd2 +pubmatic.com, 156557, RESELLER, 5d62403b186f2ace +rubiconproject.com, 18694, RESELLER, 0bfd66d529a55807 +openx.com, 540274407, RESELLER, 6a698e2ec38604c6 +33across.com, 0013300001kQj2HAAS, RESELLER, bbea06d9c4d2853c +smaato.com, 1100047713, RESELLER, 07bcf65f187117b4 +yahoo.com, 59531, RESELLER, e1a5b5b6e3255540 +smartadserver.com, 4342, RESELLER +smartadserver.com, 4012, RESELLER +google.com, pub-3565385483761681, RESELLER, f08c47fec0942fa0 +didna.io, 22652678936, RESELLER +google.com, pub-6479999173277695, RESELLER, f08c47fec0942fa0 +google.com, pub-5717092533913515, RESELLER, f08c47fec0942fa0 +gannett.com, 22652678936, RESELLER +appnexus.com, 12637, RESELLER, f5ab79cb980f11d1 +rubiconproject.com, 13918, RESELLER, 0bfd66d529a55807 +pubmatic.com, 160993, RESELLER, 5d62403b186f2ace +pubmatic.com, 161335, RESELLER, 5d62403b186f2ace +aps.amazon.com, 1ad7261b-91ea-4b6f-b9e9-b83522205b75, RESELLER  +yahoo.com, 59988,  RESELLER, e1a5b5b6e3255540 +video.unrulymedia.com, 3350674472, RESELLER +google.com, pub-4903453974745530, RESELLER, f08c47fec0942fa0 +google.com, pub-2930805104418204, RESELLER, f08c47fec0942fa0 +adipolo.com, 22652678936, RESELLER +adipolosolutions.com, 22652678936, RESELLER +richaudience.com, 1ru8dKmJJV, RESELLER +appnexus.com, 8233, RESELLER, f5ab79cb980f11d1 +openx.com, 539625136, RESELLER, 6a698e2ec38604c6 +pubmatic.com, 81564, RESELLER, 5d62403b186f2ace +pubmatic.com, 156538, RESELLER, 5d62403b186f2ace +rubiconproject.com, 13510, RESELLER, 0bfd66d529a55807 +smartadserver.com, 2640, RESELLER +smartadserver.com, 2441, RESELLER +yahoo.com, 57857, RESELLER, e1a5b5b6e3255540 +hindsightsolutions.net, 22652678936, RESELLER +openx.com, 540862677, RESELLER, 6a698e2ec38604c6 +openx.com, 557739593, RESELLER, 6a698e2ec38604c6 +criteo.com, B-068458, RESELLER, 9fac4a4a87c2a44f +themediagrid.com, 4AJU2M, RESELLER, 35d5010d7789b49d +krushmedia.com, AJxF6R55a9M6CaTvK, RESELLER +google.com, pub-7734005103835923, RESELLER, f08c47fec0942fa0 +sonobi.com, 30fcea73d4, RESELLER, d1a215d9eb5aee9e +yieldmo.com, 3482868977292485608, RESELLER, 6a92c77cfc3d2258 +rubiconproject.com, 17070, RESELLER, 0bfd66d529a55807 #yieldmo +pubmatic.com, 160648, RESELLER, 5d62403b186f2ace #yieldmo +contextweb.com, 561118, RESELLER, 89ff185a4c4e857c #yieldmo +conversantmedia.com, 100270, RESELLER, 03113cd04947736d #yieldmo  +video.unrulymedia.com, 3463482822, RESELLER #yieldmo aps.amazon.com, f3e7ba0e-0a47-4c65-bede-04deda118e32, RESELLER #Vidazoo -vidazoo.com, 65df4e02b96f7dd7640979b0, DIRECT, b6ada874b4d7d0b2 -pubmatic.com, 159988, RESELLER, 5d62403b186f2ace -rubiconproject.com, 17130, RESELLER, 0bfd66d529a55807 -pubmatic.com, 159470, RESELLER, 5d62403b186f2ace -appnexus.com, 2794, RESELLER, f5ab79cb980f11d1 -undertone.com, 4151, RESELLER -lijit.com, 222372, RESELLER, fafdf38b16bf6b2b -yahoo.com, 59040, RESELLER, e1a5b5b6e3255540 -openx.com, 541017750, RESELLER, 6a698e2ec38604c6 -supply.colossusssp.com, 181, RESELLER, 6c5b49d96ec1b458 -themediagrid.com, 3AW9JB, RESELLER, 35d5010d7789b49d -undertone.com, 3934, RESELLER -video.unrulymedia.com, 2743945877, RESELLER -sonobi.com, e32c07f4ba, RESELLER, d1a215d9eb5aee9e -media.net, 8CUN4Y5Y3, RESELLER -sharethrough.com, S2rESyUH, RESELLER, d53b998a7bd4ecd2 -freewheel.tv, 625393, RESELLER -adform.com, 2643, RESELLER, 9f5210a2f0999e32 -sharethrough.com, 0c3ba0a3, RESELLER, d53b998a7bd4ecd2 -emxdgt.com, 1799, RESELLER, 1e1d41537f7cad7f +vidazoo.com, 65df4e02b96f7dd7640979b0, DIRECT, b6ada874b4d7d0b2 +pubmatic.com, 159988, RESELLER, 5d62403b186f2ace +rubiconproject.com, 17130, RESELLER, 0bfd66d529a55807 +pubmatic.com, 159470, RESELLER, 5d62403b186f2ace +appnexus.com, 2794, RESELLER, f5ab79cb980f11d1 +undertone.com, 4151, RESELLER +lijit.com, 222372, RESELLER, fafdf38b16bf6b2b +yahoo.com, 59040, RESELLER, e1a5b5b6e3255540 +openx.com, 541017750, RESELLER, 6a698e2ec38604c6 +supply.colossusssp.com, 181, RESELLER, 6c5b49d96ec1b458 +themediagrid.com, 3AW9JB, RESELLER, 35d5010d7789b49d +undertone.com, 3934, RESELLER +video.unrulymedia.com, 2743945877, RESELLER +sonobi.com, e32c07f4ba, RESELLER, d1a215d9eb5aee9e +media.net, 8CUN4Y5Y3, RESELLER +sharethrough.com, S2rESyUH, RESELLER, d53b998a7bd4ecd2 +freewheel.tv, 625393, RESELLER +adform.com, 2643, RESELLER, 9f5210a2f0999e32 +sharethrough.com, 0c3ba0a3, RESELLER, d53b998a7bd4ecd2 +emxdgt.com, 1799, RESELLER, 1e1d41537f7cad7f #Outbrain -outbrain.com, 005e2917706422c5880fb62e50a475412f, DIRECT -appnexus.com, 7597, RESELLER, f5ab79cb980f11d1 -Freewheel.tv, 741650, RESELLER # Premium video demand -openx.com, 540393169, RESELLER, 6a698e2ec38604c6 # Premium video demand -rubiconproject.com, 19668, RESELLER, 0bfd66d529a55807 -indexexchange.com, 190856, RESELLER, 50b1c356f2c5c8fc # Premium Video Demand -pubmatic.com, 158615, RESELLER, 5d62403b186f2ace # Premium video & display demand -vidazoo.com, 1773068026, RESELLER, b6ada874b4d7d0b2 # Premium Video Demand -smartadserver.com, 3820, RESELLER # Premium Video Demand -video.unrulymedia.com, 367782854, RESELLER # Premium video demand from Outbrain -indexexchange.com, 193091, RESELLER, 50b1c356f2c5c8fc # Premium video demand from Outbrain -pubmatic.com, 160065, RESELLER, 5d62403b186f2ace # Premium video demand from Outbrain -improvedigital.com, 1863, RESELLER # Premium video demand from Outbrain -freewheel.tv, 1220655, RESELLER # Premium video demand from Outbrain -vi.ai, g-00005a4dec27011ec3811c4728cde7dbe5, DIRECT #instream video by outbrain -google.com, pub-5617098146054077, RESELLER, f08c47fec0942fa0 #instream video by outbrain -pubmatic.com, 158055, RESELLER, 5d62403b186f2ace #instream video by outbrain -xandr.com, 10736, RESELLER #instream video by outbrain -rubiconproject.com, 21506, RESELLER, 0bfd66d529a55807 #instream video by outbrain -Indexexchange.com, 190500, RESELLER #instream video by outbrain -smartadserver.com,2776,RESELLER #instream video by outbrain -openx.com, 540362347, RESELLER, 6a698e2ec38604c6 #instream video by outbrain -triplelift.com, 11547, RESELLER, 6c33edb13117fd86 #instream video by outbrain -improvedigital.com, 1552, Reseller #instream video by outbrain -contextweb.com, 562709, RESELLER, 89ff185a4c4e857c -aps.amazon.com, 3965, RESELLER #instream video by outbrain -freewheel.tv, 1220559, RESELLER # Premium video demand from Outbrain -freewheel.tv, 1133073, RESELLER #instream video by outbrain -sovrn.com, 267974, RESELLER, fafdf38b16bf6b2b #instream video by outbrain -adform.com, 2611, RESELLER #instream video by outbrain -Media.net, 8CU33YS38, RESELLER # all formats +outbrain.com, 005e2917706422c5880fb62e50a475412f, DIRECT +appnexus.com, 7597, RESELLER, f5ab79cb980f11d1 +Freewheel.tv, 741650, RESELLER # Premium video demand +openx.com, 540393169, RESELLER, 6a698e2ec38604c6 # Premium video demand +rubiconproject.com, 19668, RESELLER, 0bfd66d529a55807 +indexexchange.com, 190856, RESELLER, 50b1c356f2c5c8fc # Premium Video Demand +pubmatic.com, 158615, RESELLER, 5d62403b186f2ace # Premium video & display demand +vidazoo.com, 1773068026, RESELLER, b6ada874b4d7d0b2 # Premium Video Demand +smartadserver.com, 3820, RESELLER # Premium Video Demand +video.unrulymedia.com, 367782854, RESELLER # Premium video demand from Outbrain +indexexchange.com, 193091, RESELLER, 50b1c356f2c5c8fc # Premium video demand from Outbrain +pubmatic.com, 160065, RESELLER, 5d62403b186f2ace # Premium video demand from Outbrain +improvedigital.com, 1863, RESELLER # Premium video demand from Outbrain +freewheel.tv, 1220655, RESELLER # Premium video demand from Outbrain +vi.ai, g-00005a4dec27011ec3811c4728cde7dbe5, DIRECT #instream video by outbrain +google.com, pub-5617098146054077, RESELLER, f08c47fec0942fa0 #instream video by outbrain +pubmatic.com, 158055, RESELLER, 5d62403b186f2ace #instream video by outbrain +xandr.com, 10736, RESELLER #instream video by outbrain +rubiconproject.com, 21506, RESELLER, 0bfd66d529a55807 #instream video by outbrain +Indexexchange.com, 190500, RESELLER #instream video by outbrain +smartadserver.com,2776,RESELLER #instream video by outbrain +openx.com, 540362347, RESELLER, 6a698e2ec38604c6 #instream video by outbrain +triplelift.com, 11547, RESELLER, 6c33edb13117fd86 #instream video by outbrain +improvedigital.com, 1552, Reseller #instream video by outbrain +contextweb.com, 562709, RESELLER, 89ff185a4c4e857c +aps.amazon.com, 3965, RESELLER #instream video by outbrain +freewheel.tv, 1220559, RESELLER # Premium video demand from Outbrain +freewheel.tv, 1133073, RESELLER #instream video by outbrain +sovrn.com, 267974, RESELLER, fafdf38b16bf6b2b #instream video by outbrain +adform.com, 2611, RESELLER #instream video by outbrain +Media.net, 8CU33YS38, RESELLER # all formats Media.net, 8CULQ3LW5, RESELLER #outbrain_video #STN Video -# STN Ads.txt for Newor Media -stnvideo.com, STN_0005660, DIRECT -google.com, pub-9505823743978337, RESELLER, f08c47fec0942fa0 -aps.amazon.com, 6c3f03cd-6fa8-4477-ac05-2c0f4f8da092, RESELLER -indexexchange.com, 187621, RESELLER, 50b1c356f2c5c8fc -pubmatic.com, 159710, RESELLER, 5d62403b186f2ace -rubiconproject.com, 18782, RESELLER, 0bfd66d529a55807 -sharethrough.com, 956615a1, RESELLER, d53b998a7bd4ecd2 -triplelift.com, 11014, RESELLER, 6c33edb13117fd86 -video.unrulymedia.com, 3728224204249146186, RESELLER, 6f752381ad5ec0e5 -appnexus.com, 8354, RESELLER, f5ab79cb980f11d1 -smartadserver.com, 4949, RESELLER, 060d053dcf45cbf3 -freewheel.tv, 1607068, RESELLER, 74e8e47458f74754 -freewheel.tv, 1607069, RESELLER, 74e8e47458f74754 -openx.com, 539363661, RESELLER, 6a698e2ec38604c6 -undertone.com, 3590, RESELLER, d954590d0cb265b9 -yieldmo.com, 3584282742088475163, RESELLER -nativo.com, 5923, RESELLER, 59521ca7cc5e9fee -pubmatic.com, 161523, RESELLER, 5d62403b186f2ace -indexexchange.com, 187780, RESELLER, 50b1c356f2c5c8fc -openx.com, 540021061, RESELLER, 6a698e2ec38604c6 -rubiconproject.com, 18784, RESELLER, 0bfd66d529a55807 -google.com, pub-3844877863303739, RESELLER, f08c47fec0942fa0 -condenast.com, 22597733940, RESELLER, d6e8ec0b2b8564e0 -google.com, pub-4159017740785598, RESELLER, f08c47fec0942fa0 -google.com, pub-0978064532142215, RESELLER, f08c47fec0942fa0 -google.com, pub-6245227841947028, RESELLER, f08c47fec0942fa0 -google.com, pub-1872236547113677, RESELLER, f08c47fec0942fa0 -onefootball.com, stn, RESELLER -google.com, pub-8820362605711196, RESELLER, f08c47fec0942fa0 -rogerssportsandmedia.com, 22597733940, RESELLER -google.com, pub-0942427266003794, RESELLER, f08c47fec0942fa0 -google.com, pub-5717092533913515, RESELLER, f08c47fec0942fa0 -google.com, pub-5405132603504384, RESELLER, f08c47fec0942fa0 -indexexchange.com, 184912, RESELLER, 50b1c356f2c5c8fc -openx.com, 538995730, RESELLER, 6a698e2ec38604c6 -rubiconproject.com, 17814, RESELLER, 0bfd66d529a55807 -telaria.com, gjth7-b76sj, RESELLER, 1a4e959a1b50034a -telaria.com, i0unc-nzux7, RESELLER, 1a4e959a1b50034a -rubiconproject.com, 12738, RESELLER, 0bfd66d529a55807 -openx.com, 540922801, RESELLER, 6a698e2ec38604c6 -pubmatic.com, 158926, RESELLER, 5d62403b186f2ace -rubiconproject.com, 21840, RESELLER, 0bfd66d529a55807 -video.unrulymedia.com, 1204009095, RESELLER, 6f752381ad5ec0e5 -yahoo.com, 57560, RESELLER, e1a5b5b6e3255540 -google.com, pub-3689904677185774, RESELLER, f08c47fec0942fa0 -aps.amazon.com, 3719, RESELLER -districtm.io, 100127, RESELLER -indexexchange.com, 184315, RESELLER, 50b1c356f2c5c8fc -indexexchange.com, 184601, RESELLER, 50b1c356f2c5c8fc -openx.com, 540302365, RESELLER, 6a698e2ec38604c6 -openx.com, 539708628, RESELLER, 6a698e2ec38604c6 -openx.com, 539462051, RESELLER, 6a698e2ec38604c6 -telaria.com, tkz15-14wqj, RESELLER, 1a4e959a1b50034a -appnexus.com, 1321, RESELLER, f5ab79cb980f11d1 -indexexchange.com, 185192, RESELLER, 50b1c356f2c5c8fc -media.net, 8cuz310g2, RESELLER -openx.com, 538929384, RESELLER, 6a698e2ec38604c6 -pubmatic.com, 157904, RESELLER, 5d62403b186f2ace -rhythmone.com, 1149317856, RESELLER, a670c89d4a324e47 -rubiconproject.com, 17346, RESELLER, 0bfd66d529a55807 -sharethrough.com, be0f9eb9, RESELLER, d53b998a7bd4ecd2 -smaato.com, 1100033996, RESELLER -triplelift.com, 913-EB, RESELLER, 6c33edb13117fd86 -video.unrulymedia.com, 1149317856, RESELLER -yieldmo.com, 2150737881135219824, RESELLER -indexexchange.com, 192410, RESELLER, 50b1c356f2c5c8fc -sharethrough.com, 7144eb80, RESELLER, d53b998a7bd4ecd2 -nextmillennium.io, 14904, RESELLER, 65bd090fa4a1e3d6 -hcodemedia.com, 74, RESELLER, 4ad830b803b0c6b2 -google.com, pub-7995104076770938, RESELLER, f08c47fec0942fa0 -indexexchange.com, 197137, RESELLER, 50b1c356f2c5c8fc -openx.com, 537153564, RESELLER, 6a698e2ec38604c6 -pubmatic.com, 160318, RESELLER, 5d62403b186f2ace -rubiconproject.com, 22412, RESELLER, 0bfd66d529a55807 -yahoo.com, 59262, RESELLER -33across.com, 0013300001kQj2HAAS, RESELLER, bbea06d9c4d2853c -rubiconproject.com, 18694, RESELLER, 0bfd66d529a55807 -openx.com, 540274407, RESELLER, 6a698e2ec38604c6 -pubmatic.com, 156557, RESELLER, 5d62403b186f2ace -smaato.com, 1100047713, RESELLER, 07bcf65f187117b4 -smartadserver.com, 4342, RESELLER -video.unrulymedia.com, 266978658, RESELLER, 98c21ef9a666c68b -adyoulike.com, 7e16410ba3667b9583c748e3d4b91e35, RESELLER -contextweb.com, 560921, RESELLER, 89ff185a4c4e857c -loopme.com, 11656, RESELLER, 6c8d5f95897a5a3b -rubiconproject.com, 16156, RESELLER, 0bfd66d529a55807 -openx.com, 540709535, RESELLER, 6a698e2ec38604c6 -pubmatic.com, 156500, RESELLER, 5d62403b186f2ace -smartadserver.com, 4878, RESELLER, 060d053dcf45cbf3 -appnexus.com, 8035, RESELLER, f5ab79cb980f11d1 -zetaglobal.net, 989, RESELLER -33across.com, 0010b00002e4MRRAA2, RESELLER, bbea06d9c4d2853c -indexexchange.com, 194648, RESELLER, 50b1c356f2c5c8fc -rubiconproject.com, 17888, RESELLER, 0bfd66d529a55807 -openx.com, 540225743, RESELLER, 6a698e2ec38604c6 -pubmatic.com, 157577, RESELLER, 5d62403b186f2ace -appnexus.com, 9284, RESELLER, f5ab79cb980f11d1 -ad-generation.jp, 12474, RESELLER, 7f4ea9029ac04e53 -admanmedia.com, 726, RESELLER -beachfront.com, 14804, RESELLER, e2541279e8e2ca4d -contextweb.com, 562541, RESELLER, 89ff185a4c4e857c -districtm.io, 100962, RESELLER, 3fd707be9c4527c3 -gumgum.com, 14141, RESELLER, ffdef49475d318a9 -improvedigital.com, 2050, RESELLER -lijit.com, 375328, RESELLER, fafdf38b16bf6b2b -themediagrid.com, JTQKMP, RESELLER, 35d5010d7789b49d -mintegral.com, 10043, RESELLER, 0aeed750c80d6423 -onetag.com, 770a440e65869c2, RESELLER -openx.com, 540191398, RESELLER, 6a698e2ec38604c6 -pubmatic.com, 160006, RESELLER, 5d62403b186f2ace -pubmatic.com, 160096, RESELLER, 5d62403b186f2ace -rhythmone.com, 1654642120, RESELLER, a670c89d4a324e47 -smaato.com, 1100044650, RESELLER, 07bcf65f187117b4 -smartadserver.com, 4125, RESELLER, 060d053dcf45cbf3 -sonobi.com, 7f5fa520f8, RESELLER, d1a215d9eb5aee9e -sovrn.com, 375328, RESELLER, fafdf38b16bf6b2b -appnexus.com, 1908, RESELLER, f5ab79cb980f11d1 -appnexus.com, 3663, RESELLER, f5ab79cb980f11d1 -yahoo.com, 55029, RESELLER, e1a5b5b6e3255540 -yieldmo.com, 2719019867620450718, RESELLER -freewheel.tv, 1569001, RESELLER -freewheel.tv, 1569004, RESELLER -indexexchange.com, 189458, RESELLER, 50b1c356f2c5c8fc -indexexchange.com, 187924, RESELLER, 50b1c356f2c5c8fc -inmobi.com, 3068e448cc0543aaa44220e2fa2b0bad, RESELLER, 83e75a7ae333ca9d -lkqd.net, 282, RESELLER, 59c49fa9598a0117 -lkqd.com, 282, RESELLER, 59c49fa9598a0117 -media.net, 8CU5MY34U, RESELLER -onetag.com, 7659d380e89645e-OB, RESELLER -openx.com, 542291481, RESELLER, 6a698e2ec38604c6 -openx.com, 540322758, RESELLER, 6a698e2ec38604c6 -pubmatic.com, 157752, RESELLER, 5d62403b186f2ace -pubmatic.com, 157102, RESELLER, 5d62403b186f2ace -rubiconproject.com, 13894, RESELLER, 0bfd66d529a55807 -rubiconproject.com, 18008, RESELLER, 0bfd66d529a55807 -sharethrough.com, dd2c91e6, RESELLER, d53b998a7bd4ecd2 -smartadserver.com, 4245, RESELLER -triplelift.com, 4777-EB, RESELLER, 6c33edb13117fd86 -video.unrulymedia.com, 217819044, RESELLER -appnexus.com, 8790, RESELLER, f5ab79cb980f11d1 -contextweb.com, 561998, RESELLER, 89ff185a4c4e857c -lijit.com, 411121, RESELLER, fafdf38b16bf6b2b -openx.com, 540031703, RESELLER, 6a698e2ec38604c6 -pubmatic.com, 158100, RESELLER, 5d62403b186f2ace -rubiconproject.com, 23644, RESELLER, 0bfd66d529a55807 -appnexus.com, 4052, RESELLER, f5ab79cb980f11d1 -yahoo.com, 55771, RESELLER, e1a5b5b6e3255540 -conversantmedia.com, 100461, RESELLER, 03113cd04947736d -adform.com, 1942, RESELLER, 9f5210a2f0999e32 -rubiconproject.com, 13510, RESELLER, 0bfd66d529a55807 -pubmatic.com, 81564, RESELLER, 5d62403b186f2ace -pubmatic.com, 156538, RESELLER, 5d62403b186f2ace -smartadserver.com, 1999, RESELLER, 060d053dcf45cbf3 -smartadserver.com, 2441, RESELLER, 060d053dcf45cbf3 -triplelift.com, 8683, RESELLER, 6c33edb13117fd86 -appnexus.com, 8233, RESELLER, f5ab79cb980f11d1 -appnexus.com, 6849, RESELLER, f5ab79cb980f11d1 -appnexus.com, 12637, RESELLER, f5ab79cb980f11d1 -appnexus.com, 9382, RESELLER, f5ab79cb980f11d1 -appnexus.com, 14135, RESELLER, f5ab79cb980f11d1 -google.com, pub-6346866704322274, RESELLER, f08c47fec0942fa0 -google.com, pub-3565385483761681, RESELLER, f08c47fec0942fa0 -pubmatic.com, 159277, RESELLER, 5d62403b186f2ace -pubmatic.com, 161335, RESELLER, 5d62403b186f2ace -pubmatic.com, 160993, RESELLER, 5d62403b186f2ace -rubiconproject.com, 15268, RESELLER, 0bfd66d529a55807 -rubiconproject.com, 13918, RESELLER, 0bfd66d529a55807 -synacor.com, 82171, RESELLER, e108f11b2cdf7d5b -yahoo.com, 59244, RESELLER +# STN Ads.txt for Newor Media +stnvideo.com, STN_0005660, DIRECT +google.com, pub-9505823743978337, RESELLER, f08c47fec0942fa0 +aps.amazon.com, 6c3f03cd-6fa8-4477-ac05-2c0f4f8da092, RESELLER +indexexchange.com, 187621, RESELLER, 50b1c356f2c5c8fc +pubmatic.com, 159710, RESELLER, 5d62403b186f2ace +rubiconproject.com, 18782, RESELLER, 0bfd66d529a55807 +sharethrough.com, 956615a1, RESELLER, d53b998a7bd4ecd2 +triplelift.com, 11014, RESELLER, 6c33edb13117fd86 +video.unrulymedia.com, 3728224204249146186, RESELLER, 6f752381ad5ec0e5 +appnexus.com, 8354, RESELLER, f5ab79cb980f11d1 +smartadserver.com, 4949, RESELLER, 060d053dcf45cbf3 +freewheel.tv, 1607068, RESELLER, 74e8e47458f74754 +freewheel.tv, 1607069, RESELLER, 74e8e47458f74754 +openx.com, 539363661, RESELLER, 6a698e2ec38604c6 +undertone.com, 3590, RESELLER, d954590d0cb265b9 +yieldmo.com, 3584282742088475163, RESELLER +nativo.com, 5923, RESELLER, 59521ca7cc5e9fee +pubmatic.com, 161523, RESELLER, 5d62403b186f2ace +indexexchange.com, 187780, RESELLER, 50b1c356f2c5c8fc +openx.com, 540021061, RESELLER, 6a698e2ec38604c6 +rubiconproject.com, 18784, RESELLER, 0bfd66d529a55807 +google.com, pub-3844877863303739, RESELLER, f08c47fec0942fa0 +condenast.com, 22597733940, RESELLER, d6e8ec0b2b8564e0 +google.com, pub-4159017740785598, RESELLER, f08c47fec0942fa0 +google.com, pub-0978064532142215, RESELLER, f08c47fec0942fa0 +google.com, pub-6245227841947028, RESELLER, f08c47fec0942fa0 +google.com, pub-1872236547113677, RESELLER, f08c47fec0942fa0 +onefootball.com, stn, RESELLER +google.com, pub-8820362605711196, RESELLER, f08c47fec0942fa0 +rogerssportsandmedia.com, 22597733940, RESELLER +google.com, pub-0942427266003794, RESELLER, f08c47fec0942fa0 +google.com, pub-5717092533913515, RESELLER, f08c47fec0942fa0 +google.com, pub-5405132603504384, RESELLER, f08c47fec0942fa0 +indexexchange.com, 184912, RESELLER, 50b1c356f2c5c8fc +openx.com, 538995730, RESELLER, 6a698e2ec38604c6 +rubiconproject.com, 17814, RESELLER, 0bfd66d529a55807 +telaria.com, gjth7-b76sj, RESELLER, 1a4e959a1b50034a +telaria.com, i0unc-nzux7, RESELLER, 1a4e959a1b50034a +rubiconproject.com, 12738, RESELLER, 0bfd66d529a55807 +openx.com, 540922801, RESELLER, 6a698e2ec38604c6 +pubmatic.com, 158926, RESELLER, 5d62403b186f2ace +rubiconproject.com, 21840, RESELLER, 0bfd66d529a55807 +video.unrulymedia.com, 1204009095, RESELLER, 6f752381ad5ec0e5 +yahoo.com, 57560, RESELLER, e1a5b5b6e3255540 +google.com, pub-3689904677185774, RESELLER, f08c47fec0942fa0 +aps.amazon.com, 3719, RESELLER +districtm.io, 100127, RESELLER +indexexchange.com, 184315, RESELLER, 50b1c356f2c5c8fc +indexexchange.com, 184601, RESELLER, 50b1c356f2c5c8fc +openx.com, 540302365, RESELLER, 6a698e2ec38604c6 +openx.com, 539708628, RESELLER, 6a698e2ec38604c6 +openx.com, 539462051, RESELLER, 6a698e2ec38604c6 +telaria.com, tkz15-14wqj, RESELLER, 1a4e959a1b50034a +appnexus.com, 1321, RESELLER, f5ab79cb980f11d1 +indexexchange.com, 185192, RESELLER, 50b1c356f2c5c8fc +media.net, 8cuz310g2, RESELLER +openx.com, 538929384, RESELLER, 6a698e2ec38604c6 +pubmatic.com, 157904, RESELLER, 5d62403b186f2ace +rhythmone.com, 1149317856, RESELLER, a670c89d4a324e47 +rubiconproject.com, 17346, RESELLER, 0bfd66d529a55807 +sharethrough.com, be0f9eb9, RESELLER, d53b998a7bd4ecd2 +smaato.com, 1100033996, RESELLER +triplelift.com, 913-EB, RESELLER, 6c33edb13117fd86 +video.unrulymedia.com, 1149317856, RESELLER +yieldmo.com, 2150737881135219824, RESELLER +indexexchange.com, 192410, RESELLER, 50b1c356f2c5c8fc +sharethrough.com, 7144eb80, RESELLER, d53b998a7bd4ecd2 +nextmillennium.io, 14904, RESELLER, 65bd090fa4a1e3d6 +hcodemedia.com, 74, RESELLER, 4ad830b803b0c6b2 +google.com, pub-7995104076770938, RESELLER, f08c47fec0942fa0 +indexexchange.com, 197137, RESELLER, 50b1c356f2c5c8fc +openx.com, 537153564, RESELLER, 6a698e2ec38604c6 +pubmatic.com, 160318, RESELLER, 5d62403b186f2ace +rubiconproject.com, 22412, RESELLER, 0bfd66d529a55807 +yahoo.com, 59262, RESELLER +33across.com, 0013300001kQj2HAAS, RESELLER, bbea06d9c4d2853c +rubiconproject.com, 18694, RESELLER, 0bfd66d529a55807 +openx.com, 540274407, RESELLER, 6a698e2ec38604c6 +pubmatic.com, 156557, RESELLER, 5d62403b186f2ace +smaato.com, 1100047713, RESELLER, 07bcf65f187117b4 +smartadserver.com, 4342, RESELLER +video.unrulymedia.com, 266978658, RESELLER, 98c21ef9a666c68b +adyoulike.com, 7e16410ba3667b9583c748e3d4b91e35, RESELLER +contextweb.com, 560921, RESELLER, 89ff185a4c4e857c +loopme.com, 11656, RESELLER, 6c8d5f95897a5a3b +rubiconproject.com, 16156, RESELLER, 0bfd66d529a55807 +openx.com, 540709535, RESELLER, 6a698e2ec38604c6 +pubmatic.com, 156500, RESELLER, 5d62403b186f2ace +smartadserver.com, 4878, RESELLER, 060d053dcf45cbf3 +appnexus.com, 8035, RESELLER, f5ab79cb980f11d1 +zetaglobal.net, 989, RESELLER +33across.com, 0010b00002e4MRRAA2, RESELLER, bbea06d9c4d2853c +indexexchange.com, 194648, RESELLER, 50b1c356f2c5c8fc +rubiconproject.com, 17888, RESELLER, 0bfd66d529a55807 +openx.com, 540225743, RESELLER, 6a698e2ec38604c6 +pubmatic.com, 157577, RESELLER, 5d62403b186f2ace +appnexus.com, 9284, RESELLER, f5ab79cb980f11d1 +ad-generation.jp, 12474, RESELLER, 7f4ea9029ac04e53 +admanmedia.com, 726, RESELLER +beachfront.com, 14804, RESELLER, e2541279e8e2ca4d +contextweb.com, 562541, RESELLER, 89ff185a4c4e857c +districtm.io, 100962, RESELLER, 3fd707be9c4527c3 +gumgum.com, 14141, RESELLER, ffdef49475d318a9 +improvedigital.com, 2050, RESELLER +lijit.com, 375328, RESELLER, fafdf38b16bf6b2b +themediagrid.com, JTQKMP, RESELLER, 35d5010d7789b49d +mintegral.com, 10043, RESELLER, 0aeed750c80d6423 +onetag.com, 770a440e65869c2, RESELLER +openx.com, 540191398, RESELLER, 6a698e2ec38604c6 +pubmatic.com, 160006, RESELLER, 5d62403b186f2ace +pubmatic.com, 160096, RESELLER, 5d62403b186f2ace +rhythmone.com, 1654642120, RESELLER, a670c89d4a324e47 +smaato.com, 1100044650, RESELLER, 07bcf65f187117b4 +smartadserver.com, 4125, RESELLER, 060d053dcf45cbf3 +sonobi.com, 7f5fa520f8, RESELLER, d1a215d9eb5aee9e +sovrn.com, 375328, RESELLER, fafdf38b16bf6b2b +appnexus.com, 1908, RESELLER, f5ab79cb980f11d1 +appnexus.com, 3663, RESELLER, f5ab79cb980f11d1 +yahoo.com, 55029, RESELLER, e1a5b5b6e3255540 +yieldmo.com, 2719019867620450718, RESELLER +freewheel.tv, 1569001, RESELLER +freewheel.tv, 1569004, RESELLER +indexexchange.com, 189458, RESELLER, 50b1c356f2c5c8fc +indexexchange.com, 187924, RESELLER, 50b1c356f2c5c8fc +inmobi.com, 3068e448cc0543aaa44220e2fa2b0bad, RESELLER, 83e75a7ae333ca9d +lkqd.net, 282, RESELLER, 59c49fa9598a0117 +lkqd.com, 282, RESELLER, 59c49fa9598a0117 +media.net, 8CU5MY34U, RESELLER +onetag.com, 7659d380e89645e-OB, RESELLER +openx.com, 542291481, RESELLER, 6a698e2ec38604c6 +openx.com, 540322758, RESELLER, 6a698e2ec38604c6 +pubmatic.com, 157752, RESELLER, 5d62403b186f2ace +pubmatic.com, 157102, RESELLER, 5d62403b186f2ace +rubiconproject.com, 13894, RESELLER, 0bfd66d529a55807 +rubiconproject.com, 18008, RESELLER, 0bfd66d529a55807 +sharethrough.com, dd2c91e6, RESELLER, d53b998a7bd4ecd2 +smartadserver.com, 4245, RESELLER +triplelift.com, 4777-EB, RESELLER, 6c33edb13117fd86 +video.unrulymedia.com, 217819044, RESELLER +appnexus.com, 8790, RESELLER, f5ab79cb980f11d1 +contextweb.com, 561998, RESELLER, 89ff185a4c4e857c +lijit.com, 411121, RESELLER, fafdf38b16bf6b2b +openx.com, 540031703, RESELLER, 6a698e2ec38604c6 +pubmatic.com, 158100, RESELLER, 5d62403b186f2ace +rubiconproject.com, 23644, RESELLER, 0bfd66d529a55807 +appnexus.com, 4052, RESELLER, f5ab79cb980f11d1 +yahoo.com, 55771, RESELLER, e1a5b5b6e3255540 +conversantmedia.com, 100461, RESELLER, 03113cd04947736d +adform.com, 1942, RESELLER, 9f5210a2f0999e32 +rubiconproject.com, 13510, RESELLER, 0bfd66d529a55807 +pubmatic.com, 81564, RESELLER, 5d62403b186f2ace +pubmatic.com, 156538, RESELLER, 5d62403b186f2ace +smartadserver.com, 1999, RESELLER, 060d053dcf45cbf3 +smartadserver.com, 2441, RESELLER, 060d053dcf45cbf3 +triplelift.com, 8683, RESELLER, 6c33edb13117fd86 +appnexus.com, 8233, RESELLER, f5ab79cb980f11d1 +appnexus.com, 6849, RESELLER, f5ab79cb980f11d1 +appnexus.com, 12637, RESELLER, f5ab79cb980f11d1 +appnexus.com, 9382, RESELLER, f5ab79cb980f11d1 +appnexus.com, 14135, RESELLER, f5ab79cb980f11d1 +google.com, pub-6346866704322274, RESELLER, f08c47fec0942fa0 +google.com, pub-3565385483761681, RESELLER, f08c47fec0942fa0 +pubmatic.com, 159277, RESELLER, 5d62403b186f2ace +pubmatic.com, 161335, RESELLER, 5d62403b186f2ace +pubmatic.com, 160993, RESELLER, 5d62403b186f2ace +rubiconproject.com, 15268, RESELLER, 0bfd66d529a55807 +rubiconproject.com, 13918, RESELLER, 0bfd66d529a55807 +synacor.com, 82171, RESELLER, e108f11b2cdf7d5b +yahoo.com, 59244, RESELLER #Misc -appnexus.com, 14163, RESELLER -pubcenter.microsoft.com, 253617120, DIRECT +appnexus.com, 14163, RESELLER +pubcenter.microsoft.com, 253617120, DIRECT #Newor Media diff --git a/public/assets/audio/lotta-damage.mp3 b/packages/website/public/assets/audio/lotta-damage.mp3 similarity index 100% rename from public/assets/audio/lotta-damage.mp3 rename to packages/website/public/assets/audio/lotta-damage.mp3 diff --git a/public/assets/versions.json b/packages/website/public/assets/versions.json similarity index 100% rename from public/assets/versions.json rename to packages/website/public/assets/versions.json diff --git a/public/favicon.png b/packages/website/public/favicon.png similarity index 100% rename from public/favicon.png rename to packages/website/public/favicon.png diff --git a/public/protos/BattleResultsClient.proto b/packages/website/public/protos/BattleResultsClient.proto similarity index 100% rename from public/protos/BattleResultsClient.proto rename to packages/website/public/protos/BattleResultsClient.proto diff --git a/public/protos/PlayerAvatarImage.proto b/packages/website/public/protos/PlayerAvatarImage.proto similarity index 100% rename from public/protos/PlayerAvatarImage.proto rename to packages/website/public/protos/PlayerAvatarImage.proto diff --git a/public/protos/average_definitions.proto b/packages/website/public/protos/average_definitions.proto similarity index 100% rename from public/protos/average_definitions.proto rename to packages/website/public/protos/average_definitions.proto diff --git a/public/protos/reviews.proto b/packages/website/public/protos/reviews.proto similarity index 100% rename from public/protos/reviews.proto rename to packages/website/public/protos/reviews.proto diff --git a/public/robots.txt b/packages/website/public/robots.txt similarity index 100% rename from public/robots.txt rename to packages/website/public/robots.txt diff --git a/src/app/api/[region]/rating/current/info/route.ts b/packages/website/src/app/api/[region]/rating/current/info/route.ts similarity index 100% rename from src/app/api/[region]/rating/current/info/route.ts rename to packages/website/src/app/api/[region]/rating/current/info/route.ts diff --git a/src/app/api/[region]/rating/current/league/[league]/route.ts b/packages/website/src/app/api/[region]/rating/current/league/[league]/route.ts similarity index 100% rename from src/app/api/[region]/rating/current/league/[league]/route.ts rename to packages/website/src/app/api/[region]/rating/current/league/[league]/route.ts diff --git a/src/app/api/[region]/rating/current/search/[username]/route.ts b/packages/website/src/app/api/[region]/rating/current/search/[username]/route.ts similarity index 100% rename from src/app/api/[region]/rating/current/search/[username]/route.ts rename to packages/website/src/app/api/[region]/rating/current/search/[username]/route.ts diff --git a/src/app/api/patreon/auth/[code]/route.ts b/packages/website/src/app/api/patreon/auth/[code]/route.ts similarity index 100% rename from src/app/api/patreon/auth/[code]/route.ts rename to packages/website/src/app/api/patreon/auth/[code]/route.ts diff --git a/src/app/api/patreon/membership/[token]/route.ts b/packages/website/src/app/api/patreon/membership/[token]/route.ts similarity index 100% rename from src/app/api/patreon/membership/[token]/route.ts rename to packages/website/src/app/api/patreon/membership/[token]/route.ts diff --git a/src/app/api/patreon/refresh/[token]/route.ts b/packages/website/src/app/api/patreon/refresh/[token]/route.ts similarity index 100% rename from src/app/api/patreon/refresh/[token]/route.ts rename to packages/website/src/app/api/patreon/refresh/[token]/route.ts diff --git a/src/app/api/tank-averages/route.ts b/packages/website/src/app/api/tank-averages/route.ts similarity index 100% rename from src/app/api/tank-averages/route.ts rename to packages/website/src/app/api/tank-averages/route.ts diff --git a/src/app/api/tank-voting/[id]/average/route.ts b/packages/website/src/app/api/tank-voting/[id]/average/route.ts similarity index 100% rename from src/app/api/tank-voting/[id]/average/route.ts rename to packages/website/src/app/api/tank-voting/[id]/average/route.ts diff --git a/src/app/api/tank-voting/[id]/cast/route.ts b/packages/website/src/app/api/tank-voting/[id]/cast/route.ts similarity index 100% rename from src/app/api/tank-voting/[id]/cast/route.ts rename to packages/website/src/app/api/tank-voting/[id]/cast/route.ts diff --git a/src/app/auth/[provider]/page.tsx b/packages/website/src/app/auth/[provider]/page.tsx similarity index 100% rename from src/app/auth/[provider]/page.tsx rename to packages/website/src/app/auth/[provider]/page.tsx diff --git a/src/app/components/Checks.tsx b/packages/website/src/app/components/Checks.tsx similarity index 95% rename from src/app/components/Checks.tsx rename to packages/website/src/app/components/Checks.tsx index 98fe9334c..fdd07ecd3 100644 --- a/src/app/components/Checks.tsx +++ b/packages/website/src/app/components/Checks.tsx @@ -3,8 +3,7 @@ import { Button, Flex, Heading, Link, Text } from '@radix-ui/themes'; import { usePathname } from 'next/navigation'; import { useEffect, useState } from 'react'; -import { WARGAMING_APPLICATION_ID } from '../../constants/wargamingApplicationID'; -import { idToRegion } from '../../core/blitz/idToRegion'; +import { idToRegion } from '@blitzkit/core'; import * as App from '../../stores/app'; import { CURRENT_POLICIES_AGREEMENT_INDEX } from '../../stores/app/constants'; import { PatreonAuthResponse } from '../auth/[provider]/page'; @@ -78,7 +77,7 @@ export function Checks() { fetch( `https://api.worldoftanks.${idToRegion( wargaming.id, - )}/wot/auth/prolongate/?application_id=${WARGAMING_APPLICATION_ID}&access_token=${ + )}/wot/auth/prolongate/?application_id=${assertSecret(process.env.WARGAMING_APPLICATION_ID)}&access_token=${ wargaming.token }`, ) diff --git a/src/app/components/Hero/constants.ts b/packages/website/src/app/components/Hero/constants.ts similarity index 100% rename from src/app/components/Hero/constants.ts rename to packages/website/src/app/components/Hero/constants.ts diff --git a/src/app/components/Hero/index.tsx b/packages/website/src/app/components/Hero/index.tsx similarity index 97% rename from src/app/components/Hero/index.tsx rename to packages/website/src/app/components/Hero/index.tsx index a76b84f56..a936de279 100644 --- a/src/app/components/Hero/index.tsx +++ b/packages/website/src/app/components/Hero/index.tsx @@ -1,5 +1,5 @@ +import { imgur } from '@blitzkit/core'; import { Code, Flex, Heading, Text } from '@radix-ui/themes'; -import { imgur } from '../../../core/blitzkit/imgur'; import { BRANCH_NAMES } from './constants'; export function Hero() { diff --git a/src/app/components/PageLoader.tsx b/packages/website/src/app/components/PageLoader.tsx similarity index 100% rename from src/app/components/PageLoader.tsx rename to packages/website/src/app/components/PageLoader.tsx diff --git a/src/app/components/Plugs.tsx b/packages/website/src/app/components/Plugs.tsx similarity index 93% rename from src/app/components/Plugs.tsx rename to packages/website/src/app/components/Plugs.tsx index 9bd0aa20d..844d51982 100644 --- a/src/app/components/Plugs.tsx +++ b/packages/website/src/app/components/Plugs.tsx @@ -1,5 +1,6 @@ 'use client'; +import { assertSecret, patreonLoginUrl } from '@blitzkit/core'; import { ArrowRightIcon } from '@radix-ui/react-icons'; import { Badge, @@ -11,10 +12,8 @@ import { Text, } from '@radix-ui/themes'; import { useLayoutEffect, useState } from 'react'; -import { patreonLoginUrl } from '../../core/blitzkit/patreonLoginUrl'; -import { assertSecret } from '../../core/blitzkit/secret'; +import { PatreonIcon } from '../../components/PatreonIcon'; import { useAdExempt } from '../../hooks/useAdExempt'; -import { PatreonIcon } from '../../icons/Patreon'; import * as App from '../../stores/app'; export function Plugs() { diff --git a/src/app/components/ToolCard.tsx b/packages/website/src/app/components/ToolCard.tsx similarity index 96% rename from src/app/components/ToolCard.tsx rename to packages/website/src/app/components/ToolCard.tsx index 0071dd17d..644c48cc3 100644 --- a/src/app/components/ToolCard.tsx +++ b/packages/website/src/app/components/ToolCard.tsx @@ -1,3 +1,4 @@ +import { assertSecret, imgur, ImgurSize } from '@blitzkit/core'; import { CaretRightIcon } from '@radix-ui/react-icons'; import { Box, @@ -10,8 +11,6 @@ import { } from '@radix-ui/themes'; import { Link } from '../../components/Link'; import { Tool } from '../../constants/tools'; -import { ImgurSize, imgur } from '../../core/blitzkit/imgur'; -import { assertSecret } from '../../core/blitzkit/secret'; type ToolCardProps = FlexProps & { tool: Tool; diff --git a/src/app/docs/[directory]/[document]/page.tsx b/packages/website/src/app/docs/[directory]/[document]/page.tsx similarity index 100% rename from src/app/docs/[directory]/[document]/page.tsx rename to packages/website/src/app/docs/[directory]/[document]/page.tsx diff --git a/src/app/docs/patches/page.tsx b/packages/website/src/app/docs/patches/page.tsx similarity index 100% rename from src/app/docs/patches/page.tsx rename to packages/website/src/app/docs/patches/page.tsx diff --git a/src/app/layout.css b/packages/website/src/app/layout.css similarity index 100% rename from src/app/layout.css rename to packages/website/src/app/layout.css diff --git a/src/app/layout.tsx b/packages/website/src/app/layout.tsx similarity index 84% rename from src/app/layout.tsx rename to packages/website/src/app/layout.tsx index 718b1cd6b..50f64de05 100644 --- a/src/app/layout.tsx +++ b/packages/website/src/app/layout.tsx @@ -2,38 +2,27 @@ import { Flex, Theme } from '@radix-ui/themes'; import '@radix-ui/themes/styles.css'; -import { config } from 'dotenv'; import { Roboto_Flex } from 'next/font/google'; import { usePathname } from 'next/navigation'; import { ReactNode, Suspense } from 'react'; import { Footer } from '../components/Footer'; -import Navbar from '../components/Navbar'; +import { Navbar } from '../components/Navbar'; import { Party3 } from '../components/Party3'; import * as App from '../stores/app'; import { Checks } from './components/Checks'; -import { BRANCH_NAMES } from './components/Hero/constants'; import { PageLoader } from './components/PageLoader'; import './layout.css'; -config(); - -interface RootLayoutProps { - children: ReactNode; -} - const robotoFlex = Roboto_Flex({ subsets: ['latin'], display: 'swap', variable: '--font-roboto-flex', }); -export default function RootLayout({ children }: RootLayoutProps) { +export default function Layout({ children }: { children: ReactNode }) { const pathname = usePathname(); const hideNav = false; const isRoot = pathname === '/'; - const isBranchNamed = - process.env.NEXT_PUBLIC_ASSET_BRANCH && - BRANCH_NAMES[process.env.NEXT_PUBLIC_ASSET_BRANCH]; return ( diff --git a/src/app/not-found.tsx b/packages/website/src/app/not-found.tsx similarity index 100% rename from src/app/not-found.tsx rename to packages/website/src/app/not-found.tsx diff --git a/src/app/page.tsx b/packages/website/src/app/page.tsx similarity index 100% rename from src/app/page.tsx rename to packages/website/src/app/page.tsx diff --git a/src/app/settings/page.tsx b/packages/website/src/app/settings/page.tsx similarity index 100% rename from src/app/settings/page.tsx rename to packages/website/src/app/settings/page.tsx diff --git a/src/app/tools/compare/components/Body.tsx b/packages/website/src/app/tools/compare/components/Body.tsx similarity index 100% rename from src/app/tools/compare/components/Body.tsx rename to packages/website/src/app/tools/compare/components/Body.tsx diff --git a/src/app/tools/compare/components/CompareRow.tsx b/packages/website/src/app/tools/compare/components/CompareRow.tsx similarity index 100% rename from src/app/tools/compare/components/CompareRow.tsx rename to packages/website/src/app/tools/compare/components/CompareRow.tsx diff --git a/src/app/tools/compare/components/CompareSectionTitle.tsx b/packages/website/src/app/tools/compare/components/CompareSectionTitle.tsx similarity index 100% rename from src/app/tools/compare/components/CompareSectionTitle.tsx rename to packages/website/src/app/tools/compare/components/CompareSectionTitle.tsx diff --git a/src/app/tools/compare/components/CompareTable.tsx b/packages/website/src/app/tools/compare/components/CompareTable.tsx similarity index 100% rename from src/app/tools/compare/components/CompareTable.tsx rename to packages/website/src/app/tools/compare/components/CompareTable.tsx diff --git a/src/app/tools/compare/components/Controls.tsx b/packages/website/src/app/tools/compare/components/Controls.tsx similarity index 100% rename from src/app/tools/compare/components/Controls.tsx rename to packages/website/src/app/tools/compare/components/Controls.tsx diff --git a/src/app/tools/compare/components/DamageWarning.tsx b/packages/website/src/app/tools/compare/components/DamageWarning.tsx similarity index 100% rename from src/app/tools/compare/components/DamageWarning.tsx rename to packages/website/src/app/tools/compare/components/DamageWarning.tsx diff --git a/src/app/tools/compare/components/IntersectionMarker/constants.ts b/packages/website/src/app/tools/compare/components/IntersectionMarker/constants.ts similarity index 100% rename from src/app/tools/compare/components/IntersectionMarker/constants.ts rename to packages/website/src/app/tools/compare/components/IntersectionMarker/constants.ts diff --git a/src/app/tools/compare/components/IntersectionMarker/index.tsx b/packages/website/src/app/tools/compare/components/IntersectionMarker/index.tsx similarity index 100% rename from src/app/tools/compare/components/IntersectionMarker/index.tsx rename to packages/website/src/app/tools/compare/components/IntersectionMarker/index.tsx diff --git a/src/app/tools/compare/components/TankCard.tsx b/packages/website/src/app/tools/compare/components/TankCard.tsx similarity index 100% rename from src/app/tools/compare/components/TankCard.tsx rename to packages/website/src/app/tools/compare/components/TankCard.tsx diff --git a/src/app/tools/compare/components/TankControl.tsx b/packages/website/src/app/tools/compare/components/TankControl.tsx similarity index 100% rename from src/app/tools/compare/components/TankControl.tsx rename to packages/website/src/app/tools/compare/components/TankControl.tsx diff --git a/src/app/tools/compare/layout.tsx b/packages/website/src/app/tools/compare/layout.tsx similarity index 100% rename from src/app/tools/compare/layout.tsx rename to packages/website/src/app/tools/compare/layout.tsx diff --git a/src/app/tools/compare/page.tsx b/packages/website/src/app/tools/compare/page.tsx similarity index 100% rename from src/app/tools/compare/page.tsx rename to packages/website/src/app/tools/compare/page.tsx diff --git a/src/app/tools/embed/[embed]/components/Boolean.tsx b/packages/website/src/app/tools/embed/[embed]/components/Boolean.tsx similarity index 100% rename from src/app/tools/embed/[embed]/components/Boolean.tsx rename to packages/website/src/app/tools/embed/[embed]/components/Boolean.tsx diff --git a/src/app/tools/embed/[embed]/components/Color/components/ColorControllerRaw.tsx b/packages/website/src/app/tools/embed/[embed]/components/Color/components/ColorControllerRaw.tsx similarity index 100% rename from src/app/tools/embed/[embed]/components/Color/components/ColorControllerRaw.tsx rename to packages/website/src/app/tools/embed/[embed]/components/Color/components/ColorControllerRaw.tsx diff --git a/src/app/tools/embed/[embed]/components/Color/index.tsx b/packages/website/src/app/tools/embed/[embed]/components/Color/index.tsx similarity index 100% rename from src/app/tools/embed/[embed]/components/Color/index.tsx rename to packages/website/src/app/tools/embed/[embed]/components/Color/index.tsx diff --git a/src/app/tools/embed/[embed]/components/Enum.tsx b/packages/website/src/app/tools/embed/[embed]/components/Enum.tsx similarity index 100% rename from src/app/tools/embed/[embed]/components/Enum.tsx rename to packages/website/src/app/tools/embed/[embed]/components/Enum.tsx diff --git a/src/app/tools/embed/[embed]/components/Import.tsx b/packages/website/src/app/tools/embed/[embed]/components/Import.tsx similarity index 100% rename from src/app/tools/embed/[embed]/components/Import.tsx rename to packages/website/src/app/tools/embed/[embed]/components/Import.tsx diff --git a/src/app/tools/embed/[embed]/components/PreviewWrapper/index.css.ts b/packages/website/src/app/tools/embed/[embed]/components/PreviewWrapper/index.css.ts similarity index 100% rename from src/app/tools/embed/[embed]/components/PreviewWrapper/index.css.ts rename to packages/website/src/app/tools/embed/[embed]/components/PreviewWrapper/index.css.ts diff --git a/src/app/tools/embed/[embed]/components/PreviewWrapper/index.tsx b/packages/website/src/app/tools/embed/[embed]/components/PreviewWrapper/index.tsx similarity index 100% rename from src/app/tools/embed/[embed]/components/PreviewWrapper/index.tsx rename to packages/website/src/app/tools/embed/[embed]/components/PreviewWrapper/index.tsx diff --git a/src/app/tools/embed/[embed]/components/Radius.tsx b/packages/website/src/app/tools/embed/[embed]/components/Radius.tsx similarity index 100% rename from src/app/tools/embed/[embed]/components/Radius.tsx rename to packages/website/src/app/tools/embed/[embed]/components/Radius.tsx diff --git a/src/app/tools/embed/[embed]/components/RichText.tsx b/packages/website/src/app/tools/embed/[embed]/components/RichText.tsx similarity index 100% rename from src/app/tools/embed/[embed]/components/RichText.tsx rename to packages/website/src/app/tools/embed/[embed]/components/RichText.tsx diff --git a/src/app/tools/embed/[embed]/components/Size.tsx b/packages/website/src/app/tools/embed/[embed]/components/Size.tsx similarity index 100% rename from src/app/tools/embed/[embed]/components/Size.tsx rename to packages/website/src/app/tools/embed/[embed]/components/Size.tsx diff --git a/src/app/tools/embed/[embed]/components/SizeWithout0.tsx b/packages/website/src/app/tools/embed/[embed]/components/SizeWithout0.tsx similarity index 100% rename from src/app/tools/embed/[embed]/components/SizeWithout0.tsx rename to packages/website/src/app/tools/embed/[embed]/components/SizeWithout0.tsx diff --git a/src/app/tools/embed/[embed]/components/Slider.tsx b/packages/website/src/app/tools/embed/[embed]/components/Slider.tsx similarity index 100% rename from src/app/tools/embed/[embed]/components/Slider.tsx rename to packages/website/src/app/tools/embed/[embed]/components/Slider.tsx diff --git a/src/app/tools/embed/[embed]/components/Text.tsx b/packages/website/src/app/tools/embed/[embed]/components/Text.tsx similarity index 100% rename from src/app/tools/embed/[embed]/components/Text.tsx rename to packages/website/src/app/tools/embed/[embed]/components/Text.tsx diff --git a/src/app/tools/embed/[embed]/host/page.tsx b/packages/website/src/app/tools/embed/[embed]/host/page.tsx similarity index 100% rename from src/app/tools/embed/[embed]/host/page.tsx rename to packages/website/src/app/tools/embed/[embed]/host/page.tsx diff --git a/src/app/tools/embed/[embed]/layout.tsx b/packages/website/src/app/tools/embed/[embed]/layout.tsx similarity index 100% rename from src/app/tools/embed/[embed]/layout.tsx rename to packages/website/src/app/tools/embed/[embed]/layout.tsx diff --git a/src/app/tools/embed/[embed]/page.tsx b/packages/website/src/app/tools/embed/[embed]/page.tsx similarity index 100% rename from src/app/tools/embed/[embed]/page.tsx rename to packages/website/src/app/tools/embed/[embed]/page.tsx diff --git a/src/app/tools/embed/configurations/breakdown.tsx b/packages/website/src/app/tools/embed/configurations/breakdown.tsx similarity index 100% rename from src/app/tools/embed/configurations/breakdown.tsx rename to packages/website/src/app/tools/embed/configurations/breakdown.tsx diff --git a/src/app/tools/embed/configurations/index.ts b/packages/website/src/app/tools/embed/configurations/index.ts similarity index 100% rename from src/app/tools/embed/configurations/index.ts rename to packages/website/src/app/tools/embed/configurations/index.ts diff --git a/src/app/tools/embed/page.tsx b/packages/website/src/app/tools/embed/page.tsx similarity index 100% rename from src/app/tools/embed/page.tsx rename to packages/website/src/app/tools/embed/page.tsx diff --git a/src/app/tools/embed/utilities.ts b/packages/website/src/app/tools/embed/utilities.ts similarity index 100% rename from src/app/tools/embed/utilities.ts rename to packages/website/src/app/tools/embed/utilities.ts diff --git a/src/app/tools/layout.tsx b/packages/website/src/app/tools/layout.tsx similarity index 84% rename from src/app/tools/layout.tsx rename to packages/website/src/app/tools/layout.tsx index 030265978..0cd473980 100644 --- a/src/app/tools/layout.tsx +++ b/packages/website/src/app/tools/layout.tsx @@ -1,11 +1,10 @@ 'use client'; +import { imgur, ImgurSize } from '@blitzkit/core'; import Link from 'next/link'; import { usePathname } from 'next/navigation'; import { ReactNode } from 'react'; import { TOOLS } from '../../constants/tools'; -import { ImgurSize, imgur } from '../../core/blitzkit/imgur'; -import { theme } from '../../stitches.config'; interface ToolsLayoutProps { children: ReactNode; @@ -45,7 +44,7 @@ export default function ToolsLayout({ children }: ToolsLayoutProps) {

diff --git a/src/app/tools/performance/components/BodyLoader.tsx b/packages/website/src/app/tools/performance/components/BodyLoader.tsx similarity index 100% rename from src/app/tools/performance/components/BodyLoader.tsx rename to packages/website/src/app/tools/performance/components/BodyLoader.tsx diff --git a/src/app/tools/performance/components/Controls.tsx b/packages/website/src/app/tools/performance/components/Controls.tsx similarity index 100% rename from src/app/tools/performance/components/Controls.tsx rename to packages/website/src/app/tools/performance/components/Controls.tsx diff --git a/src/app/tools/performance/components/Header.tsx b/packages/website/src/app/tools/performance/components/Header.tsx similarity index 100% rename from src/app/tools/performance/components/Header.tsx rename to packages/website/src/app/tools/performance/components/Header.tsx diff --git a/src/app/tools/performance/components/Info.tsx b/packages/website/src/app/tools/performance/components/Info.tsx similarity index 100% rename from src/app/tools/performance/components/Info.tsx rename to packages/website/src/app/tools/performance/components/Info.tsx diff --git a/src/app/tools/performance/components/PlayerCountControl.tsx b/packages/website/src/app/tools/performance/components/PlayerCountControl.tsx similarity index 100% rename from src/app/tools/performance/components/PlayerCountControl.tsx rename to packages/website/src/app/tools/performance/components/PlayerCountControl.tsx diff --git a/src/app/tools/performance/components/RowLoader.tsx b/packages/website/src/app/tools/performance/components/RowLoader.tsx similarity index 100% rename from src/app/tools/performance/components/RowLoader.tsx rename to packages/website/src/app/tools/performance/components/RowLoader.tsx diff --git a/src/app/tools/performance/components/Table.tsx b/packages/website/src/app/tools/performance/components/Table.tsx similarity index 100% rename from src/app/tools/performance/components/Table.tsx rename to packages/website/src/app/tools/performance/components/Table.tsx diff --git a/src/app/tools/performance/components/TankRow.tsx b/packages/website/src/app/tools/performance/components/TankRow.tsx similarity index 100% rename from src/app/tools/performance/components/TankRow.tsx rename to packages/website/src/app/tools/performance/components/TankRow.tsx diff --git a/src/app/tools/performance/components/Tanks.tsx b/packages/website/src/app/tools/performance/components/Tanks.tsx similarity index 100% rename from src/app/tools/performance/components/Tanks.tsx rename to packages/website/src/app/tools/performance/components/Tanks.tsx diff --git a/src/app/tools/performance/components/TierBreakdown.tsx b/packages/website/src/app/tools/performance/components/TierBreakdown.tsx similarity index 100% rename from src/app/tools/performance/components/TierBreakdown.tsx rename to packages/website/src/app/tools/performance/components/TierBreakdown.tsx diff --git a/src/app/tools/performance/components/Total.tsx b/packages/website/src/app/tools/performance/components/Total.tsx similarity index 100% rename from src/app/tools/performance/components/Total.tsx rename to packages/website/src/app/tools/performance/components/Total.tsx diff --git a/src/app/tools/performance/layout.tsx b/packages/website/src/app/tools/performance/layout.tsx similarity index 100% rename from src/app/tools/performance/layout.tsx rename to packages/website/src/app/tools/performance/layout.tsx diff --git a/src/app/tools/performance/page.tsx b/packages/website/src/app/tools/performance/page.tsx similarity index 100% rename from src/app/tools/performance/page.tsx rename to packages/website/src/app/tools/performance/page.tsx diff --git a/src/app/tools/rating/components/PageTurner/index.css.ts b/packages/website/src/app/tools/rating/components/PageTurner/index.css.ts similarity index 100% rename from src/app/tools/rating/components/PageTurner/index.css.ts rename to packages/website/src/app/tools/rating/components/PageTurner/index.css.ts diff --git a/src/app/tools/rating/components/PageTurner/index.tsx b/packages/website/src/app/tools/rating/components/PageTurner/index.tsx similarity index 100% rename from src/app/tools/rating/components/PageTurner/index.tsx rename to packages/website/src/app/tools/rating/components/PageTurner/index.tsx diff --git a/src/app/tools/rating/page.tsx b/packages/website/src/app/tools/rating/page.tsx similarity index 100% rename from src/app/tools/rating/page.tsx rename to packages/website/src/app/tools/rating/page.tsx diff --git a/src/app/tools/session/layout.tsx b/packages/website/src/app/tools/session/layout.tsx similarity index 100% rename from src/app/tools/session/layout.tsx rename to packages/website/src/app/tools/session/layout.tsx diff --git a/src/app/tools/session/page.tsx b/packages/website/src/app/tools/session/page.tsx similarity index 100% rename from src/app/tools/session/page.tsx rename to packages/website/src/app/tools/session/page.tsx diff --git a/src/app/tools/tankopedia/[id]/components/CalloutsSection.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/CalloutsSection.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/CalloutsSection.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/CalloutsSection.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Characteristics/components/ConfigurationChildWrapper.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Characteristics/components/ConfigurationChildWrapper.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Characteristics/components/ConfigurationChildWrapper.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Characteristics/components/ConfigurationChildWrapper.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Characteristics/components/Consumables.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Characteristics/components/Consumables.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Characteristics/components/Consumables.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Characteristics/components/Consumables.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Characteristics/components/Equipment.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Characteristics/components/Equipment.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Characteristics/components/Equipment.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Characteristics/components/Equipment.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Characteristics/components/Info.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Characteristics/components/Info.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Characteristics/components/Info.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Characteristics/components/Info.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Characteristics/components/InfoWithDelta.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Characteristics/components/InfoWithDelta.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Characteristics/components/InfoWithDelta.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Characteristics/components/InfoWithDelta.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Characteristics/components/Miscellaneous.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Characteristics/components/Miscellaneous.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Characteristics/components/Miscellaneous.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Characteristics/components/Miscellaneous.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Characteristics/components/Modules.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Characteristics/components/Modules.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Characteristics/components/Modules.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Characteristics/components/Modules.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Characteristics/components/Provisions.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Characteristics/components/Provisions.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Characteristics/components/Provisions.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Characteristics/components/Provisions.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Characteristics/components/Skills/constants.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Characteristics/components/Skills/constants.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Characteristics/components/Skills/constants.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Characteristics/components/Skills/constants.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Characteristics/components/Skills/index.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Characteristics/components/Skills/index.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Characteristics/components/Skills/index.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Characteristics/components/Skills/index.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Characteristics/index.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Characteristics/index.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Characteristics/index.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Characteristics/index.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Control.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Control.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Control.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Control.tsx diff --git a/src/app/tools/tankopedia/[id]/components/HistorySection.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/HistorySection.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/HistorySection.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/HistorySection.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Lighting.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Lighting.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Lighting.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Lighting.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Model/AutoClear.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Model/AutoClear.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Model/AutoClear.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Model/AutoClear.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Model/CharacteristicsSection.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Model/CharacteristicsSection.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Model/CharacteristicsSection.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Model/CharacteristicsSection.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Model/GameModeSection.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Model/GameModeSection.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Model/GameModeSection.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Model/GameModeSection.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Model/HeroSection.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Model/HeroSection.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Model/HeroSection.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Model/HeroSection.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Listing.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Listing.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Listing.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Listing.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Stars/components/PartialStar.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Stars/components/PartialStar.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Stars/components/PartialStar.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Stars/components/PartialStar.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Stars/index.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Stars/index.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Stars/index.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Stars/index.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Votes/components/StarRow.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Votes/components/StarRow.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Votes/components/StarRow.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Votes/components/StarRow.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Votes/components/VoteCaster.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Votes/components/VoteCaster.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Votes/components/VoteCaster.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Votes/components/VoteCaster.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Votes/index.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Votes/index.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Votes/index.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Votes/index.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Model/MetaSection/index.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Model/MetaSection/index.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Model/MetaSection/index.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Model/MetaSection/index.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Model/TankSandbox.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Model/TankSandbox.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Model/TankSandbox.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Model/TankSandbox.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Model/TankSandboxLoader.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Model/TankSandboxLoader.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Model/TankSandboxLoader.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Model/TankSandboxLoader.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Model/TechTreeSection/components/Arrow.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Model/TechTreeSection/components/Arrow.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Model/TechTreeSection/components/Arrow.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Model/TechTreeSection/components/Arrow.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Model/TechTreeSection/components/Node.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Model/TechTreeSection/components/Node.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Model/TechTreeSection/components/Node.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Model/TechTreeSection/components/Node.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Model/TechTreeSection/index.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Model/TechTreeSection/index.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Model/TechTreeSection/index.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Model/TechTreeSection/index.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Model/components/ModelLoader.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Model/components/ModelLoader.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Model/components/ModelLoader.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Model/components/ModelLoader.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Model/components/Options/components/DynamicArmorSwitcher.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Model/components/Options/components/DynamicArmorSwitcher.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Model/components/Options/components/DynamicArmorSwitcher.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Model/components/Options/components/DynamicArmorSwitcher.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Model/components/Options/index.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Model/components/Options/index.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Model/components/Options/index.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Model/components/Options/index.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Model/components/TankModel.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Model/components/TankModel.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Model/components/TankModel.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Model/components/TankModel.tsx diff --git a/src/app/tools/tankopedia/[id]/components/QuickInputs/index.css.ts b/packages/website/src/app/tools/tankopedia/[id]/components/QuickInputs/index.css.ts similarity index 100% rename from src/app/tools/tankopedia/[id]/components/QuickInputs/index.css.ts rename to packages/website/src/app/tools/tankopedia/[id]/components/QuickInputs/index.css.ts diff --git a/src/app/tools/tankopedia/[id]/components/QuickInputs/index.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/QuickInputs/index.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/QuickInputs/index.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/QuickInputs/index.tsx diff --git a/src/app/tools/tankopedia/[id]/components/SceneProps.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/SceneProps.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/SceneProps.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/SceneProps.tsx diff --git a/src/app/tools/tankopedia/[id]/components/ShotDisplaySection.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/ShotDisplaySection.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/ShotDisplaySection.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/ShotDisplaySection.tsx diff --git a/src/app/tools/tankopedia/[id]/components/TankopediaSeparator.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/TankopediaSeparator.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/TankopediaSeparator.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/TankopediaSeparator.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Thicknesses.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Thicknesses.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Thicknesses.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Thicknesses.tsx diff --git a/src/app/tools/tankopedia/[id]/components/Title.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/Title.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/Title.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/Title.tsx diff --git a/src/app/tools/tankopedia/[id]/components/VideoSection.tsx b/packages/website/src/app/tools/tankopedia/[id]/components/VideoSection.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/components/VideoSection.tsx rename to packages/website/src/app/tools/tankopedia/[id]/components/VideoSection.tsx diff --git a/src/app/tools/tankopedia/[id]/layout.tsx b/packages/website/src/app/tools/tankopedia/[id]/layout.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/layout.tsx rename to packages/website/src/app/tools/tankopedia/[id]/layout.tsx diff --git a/src/app/tools/tankopedia/[id]/page.tsx b/packages/website/src/app/tools/tankopedia/[id]/page.tsx similarity index 100% rename from src/app/tools/tankopedia/[id]/page.tsx rename to packages/website/src/app/tools/tankopedia/[id]/page.tsx diff --git a/src/app/tools/tankopedia/components/FilterControl.tsx b/packages/website/src/app/tools/tankopedia/components/FilterControl.tsx similarity index 100% rename from src/app/tools/tankopedia/components/FilterControl.tsx rename to packages/website/src/app/tools/tankopedia/components/FilterControl.tsx diff --git a/src/app/tools/tankopedia/components/NoResults.tsx b/packages/website/src/app/tools/tankopedia/components/NoResults.tsx similarity index 100% rename from src/app/tools/tankopedia/components/NoResults.tsx rename to packages/website/src/app/tools/tankopedia/components/NoResults.tsx diff --git a/src/app/tools/tankopedia/components/PageTurner.tsx b/packages/website/src/app/tools/tankopedia/components/PageTurner.tsx similarity index 100% rename from src/app/tools/tankopedia/components/PageTurner.tsx rename to packages/website/src/app/tools/tankopedia/components/PageTurner.tsx diff --git a/src/app/tools/tankopedia/components/QuickLink.tsx b/packages/website/src/app/tools/tankopedia/components/QuickLink.tsx similarity index 100% rename from src/app/tools/tankopedia/components/QuickLink.tsx rename to packages/website/src/app/tools/tankopedia/components/QuickLink.tsx diff --git a/src/app/tools/tankopedia/components/SearchBar.tsx b/packages/website/src/app/tools/tankopedia/components/SearchBar.tsx similarity index 100% rename from src/app/tools/tankopedia/components/SearchBar.tsx rename to packages/website/src/app/tools/tankopedia/components/SearchBar.tsx diff --git a/src/app/tools/tankopedia/components/SkeletonTankCard.tsx b/packages/website/src/app/tools/tankopedia/components/SkeletonTankCard.tsx similarity index 100% rename from src/app/tools/tankopedia/components/SkeletonTankCard.tsx rename to packages/website/src/app/tools/tankopedia/components/SkeletonTankCard.tsx diff --git a/src/app/tools/tankopedia/components/Sort.tsx b/packages/website/src/app/tools/tankopedia/components/Sort.tsx similarity index 100% rename from src/app/tools/tankopedia/components/Sort.tsx rename to packages/website/src/app/tools/tankopedia/components/Sort.tsx diff --git a/src/app/tools/tankopedia/components/TankCard.css.ts b/packages/website/src/app/tools/tankopedia/components/TankCard.css.ts similarity index 100% rename from src/app/tools/tankopedia/components/TankCard.css.ts rename to packages/website/src/app/tools/tankopedia/components/TankCard.css.ts diff --git a/src/app/tools/tankopedia/components/TankCard.tsx b/packages/website/src/app/tools/tankopedia/components/TankCard.tsx similarity index 100% rename from src/app/tools/tankopedia/components/TankCard.tsx rename to packages/website/src/app/tools/tankopedia/components/TankCard.tsx diff --git a/src/app/tools/tankopedia/components/TankCardWrapper.tsx b/packages/website/src/app/tools/tankopedia/components/TankCardWrapper.tsx similarity index 100% rename from src/app/tools/tankopedia/components/TankCardWrapper.tsx rename to packages/website/src/app/tools/tankopedia/components/TankCardWrapper.tsx diff --git a/src/app/tools/tankopedia/components/TankSearch/constants.tsx b/packages/website/src/app/tools/tankopedia/components/TankSearch/constants.tsx similarity index 100% rename from src/app/tools/tankopedia/components/TankSearch/constants.tsx rename to packages/website/src/app/tools/tankopedia/components/TankSearch/constants.tsx diff --git a/src/app/tools/tankopedia/components/TankSearch/index.tsx b/packages/website/src/app/tools/tankopedia/components/TankSearch/index.tsx similarity index 100% rename from src/app/tools/tankopedia/components/TankSearch/index.tsx rename to packages/website/src/app/tools/tankopedia/components/TankSearch/index.tsx diff --git a/src/app/tools/tankopedia/components/TierFilter.tsx b/packages/website/src/app/tools/tankopedia/components/TierFilter.tsx similarity index 100% rename from src/app/tools/tankopedia/components/TierFilter.tsx rename to packages/website/src/app/tools/tankopedia/components/TierFilter.tsx diff --git a/src/app/tools/tankopedia/layout.tsx b/packages/website/src/app/tools/tankopedia/layout.tsx similarity index 100% rename from src/app/tools/tankopedia/layout.tsx rename to packages/website/src/app/tools/tankopedia/layout.tsx diff --git a/src/app/tools/tankopedia/page.css.ts b/packages/website/src/app/tools/tankopedia/page.css.ts similarity index 100% rename from src/app/tools/tankopedia/page.css.ts rename to packages/website/src/app/tools/tankopedia/page.css.ts diff --git a/src/app/tools/tankopedia/page.tsx b/packages/website/src/app/tools/tankopedia/page.tsx similarity index 100% rename from src/app/tools/tankopedia/page.tsx rename to packages/website/src/app/tools/tankopedia/page.tsx diff --git a/src/components/Ad.tsx b/packages/website/src/components/Ad.tsx similarity index 97% rename from src/components/Ad.tsx rename to packages/website/src/components/Ad.tsx index 529fdbf64..2168892c0 100644 --- a/src/components/Ad.tsx +++ b/packages/website/src/components/Ad.tsx @@ -1,10 +1,10 @@ 'use client'; +import { imgur } from '@blitzkit/core'; import { Box, BoxProps, Text } from '@radix-ui/themes'; import { uniqueId } from 'lodash'; import { useEffect, useRef } from 'react'; import { Vector2Tuple } from 'three'; -import { imgur } from '../core/blitzkit/imgur'; export enum AdType { MediumRectangleHorizontalPurple = 738182777, diff --git a/src/components/AdMidSectionNarrowOnly.tsx b/packages/website/src/components/AdMidSectionNarrowOnly.tsx similarity index 100% rename from src/components/AdMidSectionNarrowOnly.tsx rename to packages/website/src/components/AdMidSectionNarrowOnly.tsx diff --git a/src/components/AdMidSectionResponsive.tsx b/packages/website/src/components/AdMidSectionResponsive.tsx similarity index 100% rename from src/components/AdMidSectionResponsive.tsx rename to packages/website/src/components/AdMidSectionResponsive.tsx diff --git a/src/components/AdMidSectionWideOnly.tsx b/packages/website/src/components/AdMidSectionWideOnly.tsx similarity index 100% rename from src/components/AdMidSectionWideOnly.tsx rename to packages/website/src/components/AdMidSectionWideOnly.tsx diff --git a/src/icons/BlitzkitButtonGray.tsx b/packages/website/src/components/BlitzkitButtonGrayIcon.tsx similarity index 97% rename from src/icons/BlitzkitButtonGray.tsx rename to packages/website/src/components/BlitzkitButtonGrayIcon.tsx index 2a6e5aa09..3778d78f0 100644 --- a/src/icons/BlitzkitButtonGray.tsx +++ b/packages/website/src/components/BlitzkitButtonGrayIcon.tsx @@ -1,6 +1,6 @@ import { ComponentProps } from 'react'; -export function BlitzkitButtonGray(props: ComponentProps<'svg'>) { +export function BlitzkitButtonGrayIcon(props: ComponentProps<'svg'>) { return ( state.logins); diff --git a/src/components/PageWrapper.tsx b/packages/website/src/components/PageWrapper.tsx similarity index 93% rename from src/components/PageWrapper.tsx rename to packages/website/src/components/PageWrapper.tsx index 1900d58a0..b00429589 100644 --- a/src/components/PageWrapper.tsx +++ b/packages/website/src/components/PageWrapper.tsx @@ -1,6 +1,6 @@ import { Flex, FlexProps, Theme } from '@radix-ui/themes'; import { ComponentProps } from 'react'; -import { RadixSize } from '../stores/embedState'; +import { RadixSize } from '../../packages/website/src/stores/embedState'; type PageWrapperProps = FlexProps & { color?: ComponentProps['accentColor']; diff --git a/src/components/Party3.tsx b/packages/website/src/components/Party3.tsx similarity index 100% rename from src/components/Party3.tsx rename to packages/website/src/components/Party3.tsx diff --git a/src/icons/Patreon.tsx b/packages/website/src/components/PatreonIcon.tsx similarity index 100% rename from src/icons/Patreon.tsx rename to packages/website/src/components/PatreonIcon.tsx diff --git a/src/icons/Wargaming.tsx b/packages/website/src/components/WargamingIcon.tsx similarity index 100% rename from src/icons/Wargaming.tsx rename to packages/website/src/components/WargamingIcon.tsx diff --git a/src/constants/tools.tsx b/packages/website/src/constants/tools.tsx similarity index 100% rename from src/constants/tools.tsx rename to packages/website/src/constants/tools.tsx diff --git a/src/hooks/useAdExempt.ts b/packages/website/src/hooks/useAdExempt.ts similarity index 100% rename from src/hooks/useAdExempt.ts rename to packages/website/src/hooks/useAdExempt.ts diff --git a/src/hooks/useAppliedEquipments.ts b/packages/website/src/hooks/useAppliedEquipments.ts similarity index 80% rename from src/hooks/useAppliedEquipments.ts rename to packages/website/src/hooks/useAppliedEquipments.ts index 6141a5ba0..d88aa3097 100644 --- a/src/hooks/useAppliedEquipments.ts +++ b/packages/website/src/hooks/useAppliedEquipments.ts @@ -1,5 +1,5 @@ +import { EquipmentMatrix } from '../../packages/website/src/stores/duel'; import { EquipmentPreset } from '../core/blitzkit/equipmentDefinitions'; -import { EquipmentMatrix } from '../stores/duel'; export function useAppliedEquipments( matrix: EquipmentMatrix, diff --git a/src/hooks/useArmor.ts b/packages/website/src/hooks/useArmor.ts similarity index 100% rename from src/hooks/useArmor.ts rename to packages/website/src/hooks/useArmor.ts diff --git a/src/hooks/useAveragesExclusionRatio.ts b/packages/website/src/hooks/useAveragesExclusionRatio.ts similarity index 100% rename from src/hooks/useAveragesExclusionRatio.ts rename to packages/website/src/hooks/useAveragesExclusionRatio.ts diff --git a/src/hooks/useAwait.ts b/packages/website/src/hooks/useAwait.ts similarity index 100% rename from src/hooks/useAwait.ts rename to packages/website/src/hooks/useAwait.ts diff --git a/src/hooks/useDelta.ts b/packages/website/src/hooks/useDelta.ts similarity index 100% rename from src/hooks/useDelta.ts rename to packages/website/src/hooks/useDelta.ts diff --git a/src/hooks/useEccentricity.ts b/packages/website/src/hooks/useEccentricity.ts similarity index 93% rename from src/hooks/useEccentricity.ts rename to packages/website/src/hooks/useEccentricity.ts index bb0256564..92c723089 100644 --- a/src/hooks/useEccentricity.ts +++ b/packages/website/src/hooks/useEccentricity.ts @@ -1,10 +1,10 @@ import { sumBy } from 'lodash'; import { use, useMemo } from 'react'; +import * as Duel from '../../packages/website/src/stores/duel'; import { TankDefinition, tankDefinitions, } from '../core/blitzkit/tankDefinitions'; -import * as Duel from '../stores/duel'; export enum UseEccentricityMode { Tier, diff --git a/src/hooks/useEquipment.ts b/packages/website/src/hooks/useEquipment.ts similarity index 93% rename from src/hooks/useEquipment.ts rename to packages/website/src/hooks/useEquipment.ts index c184ab275..871dab509 100644 --- a/src/hooks/useEquipment.ts +++ b/packages/website/src/hooks/useEquipment.ts @@ -1,6 +1,6 @@ import { use, useMemo } from 'react'; +import * as Duel from '../../packages/website/src/stores/duel'; import { equipmentDefinitions } from '../core/blitzkit/equipmentDefinitions'; -import * as Duel from '../stores/duel'; export function useEquipment(id: number, antagonist = false) { const awaitedEquipmentDefinitions = use(equipmentDefinitions); diff --git a/src/hooks/useEquipmentPreset.ts b/packages/website/src/hooks/useEquipmentPreset.ts similarity index 100% rename from src/hooks/useEquipmentPreset.ts rename to packages/website/src/hooks/useEquipmentPreset.ts diff --git a/src/hooks/useFullScreen.ts b/packages/website/src/hooks/useFullScreen.ts similarity index 100% rename from src/hooks/useFullScreen.ts rename to packages/website/src/hooks/useFullScreen.ts diff --git a/src/hooks/useFullscreenAvailability.ts b/packages/website/src/hooks/useFullscreenAvailability.ts similarity index 100% rename from src/hooks/useFullscreenAvailability.ts rename to packages/website/src/hooks/useFullscreenAvailability.ts diff --git a/src/hooks/useIntersection.ts b/packages/website/src/hooks/useIntersection.ts similarity index 100% rename from src/hooks/useIntersection.ts rename to packages/website/src/hooks/useIntersection.ts diff --git a/src/hooks/useModel.ts b/packages/website/src/hooks/useModel.ts similarity index 100% rename from src/hooks/useModel.ts rename to packages/website/src/hooks/useModel.ts diff --git a/src/hooks/useOnScreen.ts b/packages/website/src/hooks/useOnScreen.ts similarity index 100% rename from src/hooks/useOnScreen.ts rename to packages/website/src/hooks/useOnScreen.ts diff --git a/src/hooks/useProvision.ts b/packages/website/src/hooks/useProvision.ts similarity index 70% rename from src/hooks/useProvision.ts rename to packages/website/src/hooks/useProvision.ts index 606c38f93..ce0c1984c 100644 --- a/src/hooks/useProvision.ts +++ b/packages/website/src/hooks/useProvision.ts @@ -1,4 +1,4 @@ -import * as Duel from '../stores/duel'; +import * as Duel from '../../packages/website/src/stores/duel'; export function useProvision(id: number) { const provisions = Duel.use((state) => state.protagonist.provisions); diff --git a/src/hooks/useTankModelDefinition.ts b/packages/website/src/hooks/useTankModelDefinition.ts similarity index 55% rename from src/hooks/useTankModelDefinition.ts rename to packages/website/src/hooks/useTankModelDefinition.ts index 0da6613b7..0c6102cf3 100644 --- a/src/hooks/useTankModelDefinition.ts +++ b/packages/website/src/hooks/useTankModelDefinition.ts @@ -1,6 +1,6 @@ 'use client'; -import * as TankopediaEphemeral from '../stores/tankopediaEphemeral'; +import * as TankopediaEphemeral from '../../packages/website/src/stores/tankopediaEphemeral'; export function useTankModelDefinition() { return TankopediaEphemeral.use((state) => state.model); diff --git a/src/hooks/useTankTransform.ts b/packages/website/src/hooks/useTankTransform.ts similarity index 97% rename from src/hooks/useTankTransform.ts rename to packages/website/src/hooks/useTankTransform.ts index 9f2c49d8d..b86ec21c6 100644 --- a/src/hooks/useTankTransform.ts +++ b/packages/website/src/hooks/useTankTransform.ts @@ -1,13 +1,13 @@ import { RefObject, useEffect } from 'react'; import { Euler, Group, Vector3 } from 'three'; import { degToRad } from 'three/src/math/MathUtils'; +import { DuelMember } from '../../packages/website/src/stores/duel'; import { I_HAT, J_HAT, K_HAT } from '../constants/axis'; import { correctZYTuple } from '../core/blitz/correctZYTuple'; import { ModelTransformEventData, modelTransformEvent, } from '../core/blitzkit/modelTransform'; -import { DuelMember } from '../stores/duel'; import { useTankModelDefinition } from './useTankModelDefinition'; export function useTankTransform( diff --git a/src/hooks/useTankVotes.ts b/packages/website/src/hooks/useTankVotes.ts similarity index 95% rename from src/hooks/useTankVotes.ts rename to packages/website/src/hooks/useTankVotes.ts index dec1694e1..105f3157e 100644 --- a/src/hooks/useTankVotes.ts +++ b/packages/website/src/hooks/useTankVotes.ts @@ -1,7 +1,7 @@ import { useEffect, useState } from 'react'; +import * as App from '../../packages/website/src/stores/app'; import { TankVotes } from '../app/api/tank-voting/[id]/average/route'; import { unwrapBlitzkitResponse } from '../core/blitzkit/unwrapBlitzkitResponse'; -import * as App from '../stores/app'; export interface BlitzkitResponseError { status: 'error'; diff --git a/src/hooks/userError.ts b/packages/website/src/hooks/userError.ts similarity index 100% rename from src/hooks/userError.ts rename to packages/website/src/hooks/userError.ts diff --git a/src/stores/app/constants.ts b/packages/website/src/stores/app/constants.ts similarity index 100% rename from src/stores/app/constants.ts rename to packages/website/src/stores/app/constants.ts diff --git a/src/stores/app/index.ts b/packages/website/src/stores/app/index.ts similarity index 91% rename from src/stores/app/index.ts rename to packages/website/src/stores/app/index.ts index e2b36e328..59a997985 100644 --- a/src/stores/app/index.ts +++ b/packages/website/src/stores/app/index.ts @@ -1,9 +1,9 @@ 'use client'; +import { createNextSafeStore } from '@blitzkit/core'; import { merge } from 'lodash'; import { create } from 'zustand'; import { persist } from 'zustand/middleware'; -import { createNextSafeStore } from '../../core/zustand/createNextSafeStore'; interface WargamingLogin { id: number; diff --git a/src/stores/compareEphemeral.ts b/packages/website/src/stores/compareEphemeral.ts similarity index 85% rename from src/stores/compareEphemeral.ts rename to packages/website/src/stores/compareEphemeral.ts index d4c1c96b5..31138ad3e 100644 --- a/src/stores/compareEphemeral.ts +++ b/packages/website/src/stores/compareEphemeral.ts @@ -1,7 +1,7 @@ 'use client'; +import { createNextSafeStore } from '@blitzkit/core/src/zustand/createNextSafeStore'; import { create } from 'zustand'; -import { createNextSafeStore } from '../core/zustand/createNextSafeStore'; import { DuelMember } from './duel'; export interface CompareMember extends DuelMember { diff --git a/src/stores/comparePersistent.ts b/packages/website/src/stores/comparePersistent.ts similarity index 100% rename from src/stores/comparePersistent.ts rename to packages/website/src/stores/comparePersistent.ts diff --git a/src/stores/duel/constants.ts b/packages/website/src/stores/duel/constants.ts similarity index 100% rename from src/stores/duel/constants.ts rename to packages/website/src/stores/duel/constants.ts diff --git a/src/stores/duel/index.ts b/packages/website/src/stores/duel/index.ts similarity index 80% rename from src/stores/duel/index.ts rename to packages/website/src/stores/duel/index.ts index ba215defc..0e404081b 100644 --- a/src/stores/duel/index.ts +++ b/packages/website/src/stores/duel/index.ts @@ -1,8 +1,9 @@ 'use client'; +import { createNextSafeStore } from '@blitzkit/core/src/zustand/createNextSafeStore'; import { create } from 'zustand'; import { subscribeWithSelector } from 'zustand/middleware'; -import { ProvisionDefinitions } from '../../core/blitzkit/provisionDefinitions'; +import { ProvisionDefinitions } from '../../../../../src/core/blitzkit/provisionDefinitions'; import { EngineDefinition, GunDefinition, @@ -10,9 +11,8 @@ import { TankDefinition, TrackDefinition, TurretDefinition, -} from '../../core/blitzkit/tankDefinitions'; -import { tankToDuelMember } from '../../core/blitzkit/tankToDuelMember'; -import { createNextSafeStore } from '../../core/zustand/createNextSafeStore'; +} from '../../../../../src/core/blitzkit/tankDefinitions'; +import { tankToDuelMember } from '../../../../../src/core/blitzkit/tankToDuelMember'; type EquipmentMatrixItem = -1 | 0 | 1; type EquipmentMatrixRow = [ diff --git a/src/stores/embedState/constants.ts b/packages/website/src/stores/embedState/constants.ts similarity index 100% rename from src/stores/embedState/constants.ts rename to packages/website/src/stores/embedState/constants.ts diff --git a/src/stores/embedState/index.ts b/packages/website/src/stores/embedState/index.ts similarity index 100% rename from src/stores/embedState/index.ts rename to packages/website/src/stores/embedState/index.ts diff --git a/src/stores/embedState/utilities.ts b/packages/website/src/stores/embedState/utilities.ts similarity index 100% rename from src/stores/embedState/utilities.ts rename to packages/website/src/stores/embedState/utilities.ts diff --git a/src/stores/session.ts b/packages/website/src/stores/session.ts similarity index 100% rename from src/stores/session.ts rename to packages/website/src/stores/session.ts diff --git a/src/stores/tankFilters.ts b/packages/website/src/stores/tankFilters.ts similarity index 100% rename from src/stores/tankFilters.ts rename to packages/website/src/stores/tankFilters.ts diff --git a/src/stores/tankPerformancePersistent/constants.ts b/packages/website/src/stores/tankPerformancePersistent/constants.ts similarity index 100% rename from src/stores/tankPerformancePersistent/constants.ts rename to packages/website/src/stores/tankPerformancePersistent/constants.ts diff --git a/src/stores/tankPerformancePersistent/index.ts b/packages/website/src/stores/tankPerformancePersistent/index.ts similarity index 100% rename from src/stores/tankPerformancePersistent/index.ts rename to packages/website/src/stores/tankPerformancePersistent/index.ts diff --git a/src/stores/tankPerformanceSort/constants.ts b/packages/website/src/stores/tankPerformanceSort/constants.ts similarity index 100% rename from src/stores/tankPerformanceSort/constants.ts rename to packages/website/src/stores/tankPerformanceSort/constants.ts diff --git a/src/stores/tankPerformanceSort/index.ts b/packages/website/src/stores/tankPerformanceSort/index.ts similarity index 100% rename from src/stores/tankPerformanceSort/index.ts rename to packages/website/src/stores/tankPerformanceSort/index.ts diff --git a/src/stores/tankopediaEphemeral.ts b/packages/website/src/stores/tankopediaEphemeral.ts similarity index 100% rename from src/stores/tankopediaEphemeral.ts rename to packages/website/src/stores/tankopediaEphemeral.ts diff --git a/src/stores/tankopediaPersistent/constants.ts b/packages/website/src/stores/tankopediaPersistent/constants.ts similarity index 100% rename from src/stores/tankopediaPersistent/constants.ts rename to packages/website/src/stores/tankopediaPersistent/constants.ts diff --git a/src/stores/tankopediaPersistent/index.ts b/packages/website/src/stores/tankopediaPersistent/index.ts similarity index 100% rename from src/stores/tankopediaPersistent/index.ts rename to packages/website/src/stores/tankopediaPersistent/index.ts diff --git a/src/stores/tankopediaSort.ts b/packages/website/src/stores/tankopediaSort.ts similarity index 100% rename from src/stores/tankopediaSort.ts rename to packages/website/src/stores/tankopediaSort.ts diff --git a/packages/website/tsconfig.json b/packages/website/tsconfig.json new file mode 100644 index 000000000..4f414a554 --- /dev/null +++ b/packages/website/tsconfig.json @@ -0,0 +1,34 @@ +{ + "compilerOptions": { + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "strict": false, + "noEmit": true, + "incremental": true, + "module": "esnext", + "esModuleInterop": true, + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "plugins": [ + { + "name": "next" + } + ] + }, + "include": [ + "next-env.d.ts", + "dist/website/types/**/*.ts", + "**/*.ts", + "**/*.tsx" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/vercel.json b/packages/website/vercel.json similarity index 100% rename from vercel.json rename to packages/website/vercel.json diff --git a/src/commands/ownedTanks.tsx b/src/commands/ownedTanks.tsx index d7f6c9cb1..c476a343d 100644 --- a/src/commands/ownedTanks.tsx +++ b/src/commands/ownedTanks.tsx @@ -1,9 +1,9 @@ +import { gameDefinitions } from '@blitzkit/core/src/blitzkit/gameDefinitions'; import { chunk } from 'lodash'; import markdownEscape from 'markdown-escape'; import { TANK_CLASSES } from '../components/Tanks/components/Item/constants'; import { getAccountInfo } from '../core/blitz/getAccountInfo'; import getTankStats from '../core/blitz/getTankStats'; -import { gameDefinitions } from '../core/blitzkit/gameDefinitions'; import { TankDefinition, Tier, diff --git a/src/commands/today.ts b/src/commands/today.ts index c4d97482e..de2792cf7 100644 --- a/src/commands/today.ts +++ b/src/commands/today.ts @@ -1,4 +1,4 @@ -import { gameDefinitions } from '../core/blitzkit/gameDefinitions'; +import { gameDefinitions } from '@blitzkit/core/src/blitzkit/gameDefinitions'; import { getBlitzStarsLinkButton } from '../core/blitzstars/getBlitzStarsLinkButton'; import { addFilterOptions } from '../core/discord/addFilterOptions'; import addUsernameChoices from '../core/discord/addUsernameChoices'; diff --git a/src/components/Armor/components/ArmorPlateDisplay.tsx b/src/components/Armor/components/ArmorPlateDisplay.tsx index 6de3400cb..050e9d195 100644 --- a/src/components/Armor/components/ArmorPlateDisplay.tsx +++ b/src/components/Armor/components/ArmorPlateDisplay.tsx @@ -10,10 +10,10 @@ import { import { Html } from '@react-three/drei'; import { useRef } from 'react'; import { radToDeg } from 'three/src/math/MathUtils'; +import * as App from '../../../../packages/website/src/stores/app'; +import * as Duel from '../../../../packages/website/src/stores/duel'; +import * as TankopediaEphemeral from '../../../../packages/website/src/stores/tankopediaEphemeral'; import { resolveArmorIndex } from '../../../core/blitzkit/resolveArmorIndex'; -import * as App from '../../../stores/app'; -import * as Duel from '../../../stores/duel'; -import * as TankopediaEphemeral from '../../../stores/tankopediaEphemeral'; import { layerTypeNames } from './ShotDisplayCard'; import { ArmorType } from './SpacedArmorScene'; diff --git a/src/components/Armor/components/PrimaryArmorScene.tsx b/src/components/Armor/components/PrimaryArmorScene.tsx index 378e54227..90afd0ff4 100644 --- a/src/components/Armor/components/PrimaryArmorScene.tsx +++ b/src/components/Armor/components/PrimaryArmorScene.tsx @@ -1,12 +1,12 @@ import { memo, useRef } from 'react'; import { Group } from 'three'; +import * as Duel from '../../../../packages/website/src/stores/duel'; import { correctZYTuple } from '../../../core/blitz/correctZYTuple'; import { nameToArmorId } from '../../../core/blitzkit/nameToArmorId'; import { resolveArmor } from '../../../core/blitzkit/resolveThickness'; import { useArmor } from '../../../hooks/useArmor'; import { useTankModelDefinition } from '../../../hooks/useTankModelDefinition'; import { useTankTransform } from '../../../hooks/useTankTransform'; -import * as Duel from '../../../stores/duel'; import { ModelTankWrapper } from './ModelTankWrapper'; import { PrimaryArmorSceneComponent } from './PrimaryArmorSceneComponent'; diff --git a/src/components/Armor/components/PrimaryArmorSceneComponent/index.tsx b/src/components/Armor/components/PrimaryArmorSceneComponent/index.tsx index 8f7e41741..c3a98b193 100644 --- a/src/components/Armor/components/PrimaryArmorSceneComponent/index.tsx +++ b/src/components/Armor/components/PrimaryArmorSceneComponent/index.tsx @@ -2,6 +2,8 @@ import { useFrame } from '@react-three/fiber'; import { useEffect } from 'react'; import { MeshBasicMaterial, Object3D, ShaderMaterial, Vector2 } from 'three'; import { degToRad } from 'three/src/math/MathUtils'; +import * as Duel from '../../../../../packages/website/src/stores/duel'; +import * as TankopediaPersistent from '../../../../../packages/website/src/stores/tankopediaPersistent'; import { canSplash } from '../../../../core/blitz/canSplash'; import { isExplosive } from '../../../../core/blitz/isExplosive'; import { resolveNearPenetration } from '../../../../core/blitz/resolveNearPenetration'; @@ -9,8 +11,6 @@ import { resolvePenetrationCoefficient } from '../../../../core/blitz/resolvePen import { hasEquipment } from '../../../../core/blitzkit/hasEquipment'; import { jsxTree } from '../../../../core/blitzkit/jsxTree'; import { ShellDefinition } from '../../../../core/blitzkit/tankDefinitions'; -import * as Duel from '../../../../stores/duel'; -import * as TankopediaPersistent from '../../../../stores/tankopediaPersistent'; import fragmentShader from './shaders/fragment.glsl'; import vertexShader from './shaders/vertex.glsl'; import { spacedArmorRenderTarget } from './target'; diff --git a/src/components/Armor/components/ShotDisplay.tsx b/src/components/Armor/components/ShotDisplay.tsx index 0a33c838f..44ff453f1 100644 --- a/src/components/Armor/components/ShotDisplay.tsx +++ b/src/components/Armor/components/ShotDisplay.tsx @@ -15,9 +15,9 @@ import { Path, Quaternion, } from 'three'; +import * as TankopediaEphemeral from '../../../../packages/website/src/stores/tankopediaEphemeral'; import { J_HAT, K_HAT } from '../../../constants/axis'; import { useFullScreen } from '../../../hooks/useFullScreen'; -import * as TankopediaEphemeral from '../../../stores/tankopediaEphemeral'; import { ShotDisplayCard } from './ShotDisplayCard'; export const shotStatusColors: Record< diff --git a/src/components/Armor/components/ShotDisplayCard.tsx b/src/components/Armor/components/ShotDisplayCard.tsx index f36dec60b..85deec12b 100644 --- a/src/components/Armor/components/ShotDisplayCard.tsx +++ b/src/components/Armor/components/ShotDisplayCard.tsx @@ -8,7 +8,7 @@ import { } from '@radix-ui/themes'; import { ComponentProps } from 'react'; import { radToDeg } from 'three/src/math/MathUtils'; -import * as TankopediaEphemeral from '../../../stores/tankopediaEphemeral'; +import * as TankopediaEphemeral from '../../../../packages/website/src/stores/tankopediaEphemeral'; import { shotStatusColors } from './ShotDisplay'; import { ArmorType } from './SpacedArmorScene'; import { ExternalModuleVariant } from './SpacedArmorSceneComponent'; diff --git a/src/components/Armor/components/SpacedArmorScene.tsx b/src/components/Armor/components/SpacedArmorScene.tsx index a0080f10e..ae31207ee 100644 --- a/src/components/Armor/components/SpacedArmorScene.tsx +++ b/src/components/Armor/components/SpacedArmorScene.tsx @@ -1,5 +1,6 @@ import { memo, useRef } from 'react'; import { Group, Plane, Scene, Vector3 } from 'three'; +import * as Duel from '../../../../packages/website/src/stores/duel'; import { correctZYTuple } from '../../../core/blitz/correctZYTuple'; import { nameToArmorId } from '../../../core/blitzkit/nameToArmorId'; import { resolveArmor } from '../../../core/blitzkit/resolveThickness'; @@ -7,7 +8,6 @@ import { useArmor } from '../../../hooks/useArmor'; import { useModel } from '../../../hooks/useModel'; import { useTankModelDefinition } from '../../../hooks/useTankModelDefinition'; import { useTankTransform } from '../../../hooks/useTankTransform'; -import * as Duel from '../../../stores/duel'; import { ModelTankWrapper } from './ModelTankWrapper'; import { SpacedArmorSceneComponent } from './SpacedArmorSceneComponent'; diff --git a/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/index.tsx b/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/index.tsx index 56e780db3..b3b5a7ca1 100644 --- a/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/index.tsx +++ b/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/index.tsx @@ -7,12 +7,12 @@ import { ShaderMaterial, } from 'three'; import { ArmorUserData, ExternalModuleVariant } from '../..'; +import * as Duel from '../../../../../../../packages/website/src/stores/duel'; import { resolveNearPenetration } from '../../../../../../core/blitz/resolveNearPenetration'; import { resolvePenetrationCoefficient } from '../../../../../../core/blitz/resolvePenetrationCoefficient'; import { hasEquipment } from '../../../../../../core/blitzkit/hasEquipment'; import { jsxTree } from '../../../../../../core/blitzkit/jsxTree'; import { ShellDefinition } from '../../../../../../core/blitzkit/tankDefinitions'; -import * as Duel from '../../../../../../stores/duel'; import { ArmorType } from '../../../SpacedArmorScene'; import fragmentShader from './shaders/fragment.glsl'; import vertexShader from './shaders/vertex.glsl'; diff --git a/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/index.tsx b/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/index.tsx index ed37c98b7..be11d7142 100644 --- a/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/index.tsx +++ b/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/index.tsx @@ -7,13 +7,13 @@ import { } from 'three'; import { degToRad } from 'three/src/math/MathUtils'; import { ArmorUserData } from '../..'; +import * as Duel from '../../../../../../../packages/website/src/stores/duel'; import { isExplosive } from '../../../../../../core/blitz/isExplosive'; import { resolveNearPenetration } from '../../../../../../core/blitz/resolveNearPenetration'; import { resolvePenetrationCoefficient } from '../../../../../../core/blitz/resolvePenetrationCoefficient'; import { hasEquipment } from '../../../../../../core/blitzkit/hasEquipment'; import { jsxTree } from '../../../../../../core/blitzkit/jsxTree'; import { ShellDefinition } from '../../../../../../core/blitzkit/tankDefinitions'; -import * as Duel from '../../../../../../stores/duel'; import { ArmorType } from '../../../SpacedArmorScene'; import fragmentShader from './shaders/fragment.glsl'; import vertexShader from './shaders/vertex.glsl'; diff --git a/src/components/Armor/components/SpacedArmorSceneComponent/index.tsx b/src/components/Armor/components/SpacedArmorSceneComponent/index.tsx index 29ad3d48d..a70de5c05 100644 --- a/src/components/Armor/components/SpacedArmorSceneComponent/index.tsx +++ b/src/components/Armor/components/SpacedArmorSceneComponent/index.tsx @@ -11,6 +11,8 @@ import { Vector3, } from 'three'; import { degToRad } from 'three/src/math/MathUtils'; +import * as Duel from '../../../../../packages/website/src/stores/duel'; +import * as TankopediaEphemeral from '../../../../../packages/website/src/stores/tankopediaEphemeral'; import { isExplosive } from '../../../../core/blitz/isExplosive'; import { resolveNearPenetration } from '../../../../core/blitz/resolveNearPenetration'; import { resolvePenetrationCoefficient } from '../../../../core/blitz/resolvePenetrationCoefficient'; @@ -18,8 +20,6 @@ import { hasEquipment } from '../../../../core/blitzkit/hasEquipment'; import { jsxTree } from '../../../../core/blitzkit/jsxTree'; import { ShellType } from '../../../../core/blitzkit/tankDefinitions'; import { discardClippingPlane } from '../../../../core/three/discardClippingPlane'; -import * as Duel from '../../../../stores/duel'; -import * as TankopediaEphemeral from '../../../../stores/tankopediaEphemeral'; import { ArmorType } from '../SpacedArmorScene'; import { SpacedArmorSubExternal } from './components/SpacedArmorSubExternal'; import { SpacedArmorSubSpaced } from './components/SpacedArmorSubSpaced'; diff --git a/src/components/Armor/components/StaticArmor.tsx b/src/components/Armor/components/StaticArmor.tsx index 505010e1d..23db1272a 100644 --- a/src/components/Armor/components/StaticArmor.tsx +++ b/src/components/Armor/components/StaticArmor.tsx @@ -1,6 +1,9 @@ import { ThreeEvent, useThree } from '@react-three/fiber'; import { memo, useRef } from 'react'; import { Group, Plane, Vector2, Vector3 } from 'three'; +import * as Duel from '../../../../packages/website/src/stores/duel'; +import * as TankopediaEphemeral from '../../../../packages/website/src/stores/tankopediaEphemeral'; +import * as TankopediaPersistent from '../../../../packages/website/src/stores/tankopediaPersistent'; import { applyPitchYawLimits } from '../../../core/blitz/applyPitchYawLimits'; import { correctZYTuple } from '../../../core/blitz/correctZYTuple'; import { hasEquipment } from '../../../core/blitzkit/hasEquipment'; @@ -12,9 +15,6 @@ import { useArmor } from '../../../hooks/useArmor'; import { useModel } from '../../../hooks/useModel'; import { useTankModelDefinition } from '../../../hooks/useTankModelDefinition'; import { useTankTransform } from '../../../hooks/useTankTransform'; -import * as Duel from '../../../stores/duel'; -import * as TankopediaEphemeral from '../../../stores/tankopediaEphemeral'; -import * as TankopediaPersistent from '../../../stores/tankopediaPersistent'; import { ModelTankWrapper } from './ModelTankWrapper'; import { ArmorType } from './SpacedArmorScene'; import { StaticArmorSceneComponent } from './StaticArmorSceneComponent'; diff --git a/src/components/Armor/components/StaticArmorSceneComponent.tsx b/src/components/Armor/components/StaticArmorSceneComponent.tsx index 6761a3c53..511145690 100644 --- a/src/components/Armor/components/StaticArmorSceneComponent.tsx +++ b/src/components/Armor/components/StaticArmorSceneComponent.tsx @@ -14,6 +14,7 @@ import { Quaternion, Vector3, } from 'three'; +import * as TankopediaEphemeral from '../../../../packages/website/src/stores/tankopediaEphemeral'; import { I_HAT, J_HAT } from '../../../constants/axis'; import { unrotateDavaVector } from '../../../core/blitz/unrotateDavaVector'; import { jsxTree } from '../../../core/blitzkit/jsxTree'; @@ -22,7 +23,6 @@ import { ModelTransformEventData, } from '../../../core/blitzkit/modelTransform'; import { discardClippingPlane } from '../../../core/three/discardClippingPlane'; -import * as TankopediaEphemeral from '../../../stores/tankopediaEphemeral'; import { ArmorType } from './SpacedArmorScene'; import { ArmorUserData, diff --git a/src/components/EquipmentManager.tsx b/src/components/EquipmentManager.tsx index e0fa540f8..187e16316 100644 --- a/src/components/EquipmentManager.tsx +++ b/src/components/EquipmentManager.tsx @@ -1,7 +1,7 @@ import { Flex } from '@radix-ui/themes'; import { cloneDeep } from 'lodash'; +import { EquipmentMatrix } from '../../packages/website/src/stores/duel'; import { EquipmentPreset } from '../core/blitzkit/equipmentDefinitions'; -import { EquipmentMatrix } from '../stores/duel'; import { EquipmentButton } from './ModuleButtons/EquipmentButton'; interface EquipmentManagerProps { diff --git a/src/components/TanksEmbed.tsx b/src/components/TanksEmbed.tsx index 1ed589493..caeda4cdf 100644 --- a/src/components/TanksEmbed.tsx +++ b/src/components/TanksEmbed.tsx @@ -2,13 +2,13 @@ import { amberDark, blueDark } from '@radix-ui/colors'; import { Flex, Text } from '@radix-ui/themes'; import { times } from 'lodash'; import { ReactNode } from 'react'; +import { useEmbedStateCurry } from '../../packages/website/src/stores/embedState/utilities'; import { breakdownConfig } from '../app/tools/embed/configurations/breakdown'; import { toRadiusVar } from '../app/tools/embed/utilities'; import { TankDefinition } from '../core/blitzkit/tankDefinitions'; import { previewCompositeStat } from '../core/statistics/compositeStats'; import { CompositeStatsKey } from '../core/statistics/compositeStats/constants'; import strings from '../lang/en-US.json'; -import { useEmbedStateCurry } from '../stores/embedState/utilities'; import { ClassHeavy } from './ClassIcon/components/ClassHeavy'; import { ClassLight } from './ClassIcon/components/ClassLight'; import { ClassMedium } from './ClassIcon/components/ClassMedium'; diff --git a/src/constants/wargamingApplicationID.ts b/src/constants/wargamingApplicationID.ts deleted file mode 100644 index fb071737b..000000000 --- a/src/constants/wargamingApplicationID.ts +++ /dev/null @@ -1,2 +0,0 @@ -// if you forked this repository, please replace this with your own id -export const WARGAMING_APPLICATION_ID = 'd03364bdc9114fc61f1d5e4e168d5f3c'; diff --git a/src/core/blitz/fetchBlitz.ts b/src/core/blitz/fetchBlitz.ts index 5194d1cbe..c9acb951d 100644 --- a/src/core/blitz/fetchBlitz.ts +++ b/src/core/blitz/fetchBlitz.ts @@ -1,5 +1,5 @@ +import { assertSecret } from '@blitzkit/core'; import { Region } from '../../constants/regions'; -import { WARGAMING_APPLICATION_ID } from '../../constants/wargamingApplicationID'; import { EventManager } from '../blitzkit/eventManager'; import { patientFetch } from '../blitzkit/patientFetch'; @@ -73,7 +73,7 @@ export default function fetchBlitz( return new Promise((resolve) => { queue.push({ url: `https://api.wotblitz.${region}/wotb/${path}/?${Object.entries({ - application_id: WARGAMING_APPLICATION_ID, + application_id: assertSecret(process.env.WARGAMING_APPLICATION_ID), ...params, }) .filter(([_, value]) => value !== undefined) diff --git a/src/core/blitzkit/asset.ts b/src/core/blitzkit/asset.ts index 531e4f919..6a395b5e0 100644 --- a/src/core/blitzkit/asset.ts +++ b/src/core/blitzkit/asset.ts @@ -1,5 +1,5 @@ +import { assertSecret } from '@blitzkit/core/src/blitzkit/assertSecret'; import { ASSETS_REPO } from '../../constants/assets'; -import { assertSecret } from './secret'; export function asset(path: string) { return `https://raw.githubusercontent.com/tresabhi/${ASSETS_REPO}/${assertSecret( diff --git a/src/core/blitzkit/commitAssets.ts b/src/core/blitzkit/commitAssets.ts index e7d1f0798..b9f2837a8 100644 --- a/src/core/blitzkit/commitAssets.ts +++ b/src/core/blitzkit/commitAssets.ts @@ -1,6 +1,6 @@ +import { assertSecret } from '../../../packages/core/src/blitzkit/assertSecret'; import { ASSETS_REPO } from '../../constants/assets'; import commitMultipleFiles, { FileChange } from './commitMultipleFiles'; -import { assertSecret } from './secret'; export async function commitAssets(message: string, changes: FileChange[]) { console.log(`Committing ${message}...`); diff --git a/src/core/blitzkit/fetchCdonLz4.ts b/src/core/blitzkit/fetchCdonLz4.ts index 762631533..d0cdb44d4 100644 --- a/src/core/blitzkit/fetchCdonLz4.ts +++ b/src/core/blitzkit/fetchCdonLz4.ts @@ -1,4 +1,4 @@ -import { superDecompress } from './superDecompress'; +import { superDecompress } from '@blitzkit/core/src/blitzkit/superDecompress'; export async function fetchCdonLz4(url: string) { return await fetch(url, { cache: 'no-store' }) diff --git a/src/core/blitzkit/filterTank.ts b/src/core/blitzkit/filterTank.ts index e25e36fd1..180b1fc7d 100644 --- a/src/core/blitzkit/filterTank.ts +++ b/src/core/blitzkit/filterTank.ts @@ -1,4 +1,4 @@ -import { TankFilters } from '../../stores/tankFilters'; +import { TankFilters } from '../../../packages/website/src/stores/tankFilters'; import { TankDefinition } from './tankDefinitions'; export function filterTank(filters: TankFilters, tank: TankDefinition) { diff --git a/src/core/blitzkit/getArchivedRatingInfo.ts b/src/core/blitzkit/getArchivedRatingInfo.ts index c4d92ec36..fb08928c4 100644 --- a/src/core/blitzkit/getArchivedRatingInfo.ts +++ b/src/core/blitzkit/getArchivedRatingInfo.ts @@ -1,7 +1,7 @@ +import { superDecompress } from '@blitzkit/core/src/blitzkit/superDecompress'; import { RatingInfo } from '../../commands/ratingLeaderboard'; import { Region } from '../../constants/regions'; import { asset } from './asset'; -import { superDecompress } from './superDecompress'; const cache: Record< Region, diff --git a/src/core/blitzkit/hasEquipment.ts b/src/core/blitzkit/hasEquipment.ts index c3a73f9ff..75ca3f0ff 100644 --- a/src/core/blitzkit/hasEquipment.ts +++ b/src/core/blitzkit/hasEquipment.ts @@ -1,4 +1,4 @@ -import { EquipmentMatrix } from '../../stores/duel'; +import { EquipmentMatrix } from '../../../packages/website/src/stores/duel'; import { equipmentDefinitions } from './equipmentDefinitions'; export async function hasEquipment( diff --git a/src/core/blitzkit/octokit.ts b/src/core/blitzkit/octokit.ts index 9aa350593..d11356b62 100644 --- a/src/core/blitzkit/octokit.ts +++ b/src/core/blitzkit/octokit.ts @@ -1,6 +1,6 @@ import { throttling } from '@octokit/plugin-throttling'; import { Octokit } from '@octokit/rest'; -import { assertSecret } from './secret'; +import { assertSecret } from '../../../packages/core/src/blitzkit/assertSecret'; Octokit.plugin(throttling); diff --git a/src/core/blitzkit/tankCharacteristics.ts b/src/core/blitzkit/tankCharacteristics.ts index 6f72ce8b6..f1914f86f 100644 --- a/src/core/blitzkit/tankCharacteristics.ts +++ b/src/core/blitzkit/tankCharacteristics.ts @@ -1,4 +1,4 @@ -import { EquipmentMatrix } from '../../stores/duel'; +import { EquipmentMatrix } from '../../../packages/website/src/stores/duel'; import { isExplosive } from '../blitz/isExplosive'; import { resolveNearPenetration } from '../blitz/resolveNearPenetration'; import { resolvePenetrationCoefficient } from '../blitz/resolvePenetrationCoefficient'; diff --git a/src/core/blitzkit/tankToCompareMember.ts b/src/core/blitzkit/tankToCompareMember.ts index ce17516a3..d350c6d4e 100644 --- a/src/core/blitzkit/tankToCompareMember.ts +++ b/src/core/blitzkit/tankToCompareMember.ts @@ -1,5 +1,5 @@ import { uniqueId } from 'lodash'; -import { CompareMember } from '../../stores/compareEphemeral'; +import { CompareMember } from '../../../packages/website/src/stores/compareEphemeral'; import { ProvisionDefinitions } from './provisionDefinitions'; import { TankDefinition } from './tankDefinitions'; import { tankToDuelMember } from './tankToDuelMember'; diff --git a/src/core/blitzkit/tankToDuelMember.ts b/src/core/blitzkit/tankToDuelMember.ts index 8deb18456..ac20e306f 100644 --- a/src/core/blitzkit/tankToDuelMember.ts +++ b/src/core/blitzkit/tankToDuelMember.ts @@ -1,5 +1,5 @@ -import { DuelMember } from '../../stores/duel'; -import { genericDefaultEquipmentMatrix } from '../../stores/duel/constants'; +import { DuelMember } from '../../../packages/website/src/stores/duel'; +import { genericDefaultEquipmentMatrix } from '../../../packages/website/src/stores/duel/constants'; import { availableProvisions } from './availableProvisions'; import { ProvisionDefinitions } from './provisionDefinitions'; import { TankDefinition } from './tankDefinitions'; diff --git a/src/core/discord/addPeriodicFilterOptions.ts b/src/core/discord/addPeriodicFilterOptions.ts index b3b0eb3ab..d74186da2 100644 --- a/src/core/discord/addPeriodicFilterOptions.ts +++ b/src/core/discord/addPeriodicFilterOptions.ts @@ -1,9 +1,9 @@ +import { gameDefinitions } from '@blitzkit/core/src/blitzkit/gameDefinitions'; import { SlashCommandBuilder, SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder, } from 'discord.js'; -import { gameDefinitions } from '../blitzkit/gameDefinitions'; import { addFilterOptions } from './addFilterOptions'; import { addPeriodSubCommands } from './addPeriodSubCommands'; diff --git a/src/core/discord/manager.ts b/src/core/discord/manager.ts index 830c32a80..56e536c5a 100644 --- a/src/core/discord/manager.ts +++ b/src/core/discord/manager.ts @@ -1,5 +1,5 @@ import { ShardingManager } from 'discord.js'; -import { assertSecret } from '../blitzkit/secret'; +import { assertSecret } from '../../../packages/core/src/blitzkit/assertSecret'; export const manager = new ShardingManager('dist/bot/workers/bot.js', { token: assertSecret(process.env.DISCORD_TOKEN), diff --git a/src/core/github/assetCommit.ts b/src/core/github/assetCommit.ts index a55930eeb..e415fbee2 100644 --- a/src/core/github/assetCommit.ts +++ b/src/core/github/assetCommit.ts @@ -1,7 +1,7 @@ +import { assertSecret } from '../../../packages/core/src/blitzkit/assertSecret'; import { ASSETS_REPO } from '../../constants/assets'; import { GithubChangeBlob, createBlob } from '../blitzkit/createBlob'; import { octokit } from '../blitzkit/octokit'; -import { assertSecret } from '../blitzkit/secret'; export class AssetCommit { constructor(public message: string) {} diff --git a/src/events/interactionCreate/index.ts b/src/events/interactionCreate/index.ts index 53ae9dbb9..3e408070b 100644 --- a/src/events/interactionCreate/index.ts +++ b/src/events/interactionCreate/index.ts @@ -13,6 +13,7 @@ import { SlashCommandOptionsOnlyBuilder, SlashCommandSubcommandsOnlyBuilder, } from 'discord.js'; +import { assertSecret } from '../../../packages/core/src/blitzkit/assertSecret'; import { aboutCommand } from '../../commands/about'; import { breakdownCommand } from '../../commands/breakdown'; import { debugCommand } from '../../commands/debug'; @@ -33,7 +34,6 @@ import { searchPlayersCommand } from '../../commands/searchPlayers'; import { statsCommand } from '../../commands/stats'; import { todayCommand } from '../../commands/today'; import { RenderConfiguration } from '../../core/blitzkit/renderConfiguration'; -import { assertSecret } from '../../core/blitzkit/secret'; import handleAutocomplete from './handlers/autocomplete'; import handleButton from './handlers/button'; import handleChatInputCommand from './handlers/chatInputCommand'; diff --git a/src/icons/AngledPenetration.tsx b/src/icons/AngledPenetration.tsx deleted file mode 100644 index 58df8fee6..000000000 --- a/src/icons/AngledPenetration.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { ComponentProps } from 'react'; - -export function AngledPenetration(props: ComponentProps<'svg'>) { - return ( - - - - - ); -} diff --git a/src/icons/Block.tsx b/src/icons/Block.tsx deleted file mode 100644 index a9494489d..000000000 --- a/src/icons/Block.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { ComponentProps } from 'react'; - -export function Block(props: ComponentProps<'svg'>) { - return ( - - - - - - - ); -} diff --git a/src/icons/NominalPenetration.tsx b/src/icons/NominalPenetration.tsx deleted file mode 100644 index 7b6ed0758..000000000 --- a/src/icons/NominalPenetration.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { ComponentProps } from 'react'; - -export function NominalPenetration(props: ComponentProps<'svg'>) { - return ( - - - - - - ); -} diff --git a/src/icons/Ricochet.tsx b/src/icons/Ricochet.tsx deleted file mode 100644 index f79672ec6..000000000 --- a/src/icons/Ricochet.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { ComponentProps } from 'react'; - -export function Ricochet(props: ComponentProps<'svg'>) { - return ( - - - - - ); -} diff --git a/src/workers/bot.ts b/src/workers/bot.ts index 948916ed5..8225a4274 100644 --- a/src/workers/bot.ts +++ b/src/workers/bot.ts @@ -1,5 +1,5 @@ +import { assertSecret } from '../../packages/core/src/blitzkit/assertSecret'; import { registerProcesses } from '../core/blitzkit/processes'; -import { assertSecret } from '../core/blitzkit/secret'; import { client } from '../core/discord/client'; console.log(`🟡 Launching bot ${client.shard?.ids[0]}`); diff --git a/tsconfig.json b/tsconfig.json index 4b5167694..38f3b4076 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -20,6 +20,24 @@ } ] }, - "include": ["src/**/*", "scripts/**/*", "dist/website/types/**/*.ts"], + "include": [ + "src/**/*", + "scripts/**/*", + "dist/website/types/**/*.ts", + "packages/website/src/stores", + "packages/core/src/imgur/imgur.ts", + "packages/core/src/blitzkit/assertSecret.ts", + "packages/website/src/components/icons", + "packages/website/src/components/BlitzkitButtonGray.tsx", + "packages/website/src/components/Patreon.tsx", + "packages/website/src/components/Wargaming.tsx", + "packages/core/src/patreon/patreonLoginUrl.ts", + "packages/website/src/app/components/Footer", + "packages/website/src/components/Navbar", + "packages/website/src/components/Party3.tsx", + "packages/website/src/components/PageWrapper.tsx", + "packages/core/src/blitzkit/gameDefinitions.ts", + "packages/core/src/zustand/createNextSafeStore.tsx" +, "packages/core/src/blitzkit/superDecompress.ts", "packages/core/src/blitzkit/superCompress.ts" ], "exclude": ["node_modules/**/*", "dist", "scripts"] }