#!/usr/bin/env vpython3

# Copyright (c) 2022 The WebRTC Project Authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS.  All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.

import datetime
from datetime import date
import hashlib
import sys
from typing import FrozenSet, List, Set

import argparse
import dataclasses


@dataclasses.dataclass(frozen=True)
class FieldTrial:
    """Representation of all attributes associated with a field trial.

    Attributes:
      key: Field trial key.
      bug_id: Associated open bug containing more context.
      end_date: Date when the field trial expires and must be deleted.
    """
    key: str
    bug_id: int
    end_date: date

    def bug_url(self) -> str:
        if self.bug_id <= 0:
            return ''
        return f'https://issues.webrtc.org/issues/{self.bug_id}'


# As per the policy in `g3doc/field-trials.md`, all field trials should be
# registered in the container below.
ACTIVE_FIELD_TRIALS: FrozenSet[FieldTrial] = frozenset([
    # keep-sorted start
    FieldTrial('WebRTC-Aec3BufferingMaxAllowedExcessRenderBlocksOverride',
               337900458,
               date(2024, 9, 1)),
    FieldTrial('WebRTC-Audio-GainController2',
               42232605,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Audio-OpusDecodeStereoByDefault',
               379996136,
               date(2025, 11, 15)),
    FieldTrial('WebRTC-Audio-OpusGeneratePlc',
               42223518,
               date(2025, 4, 1)),
    FieldTrial('WebRTC-Audio-PriorityBitrate',
               42226125,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-AV1-OverridePriorityBitrate',
               42226119,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Av1-GetEncoderInfoOverride',
               42225234,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-BitrateAdjusterUseNewfangledHeadroomAdjustment',
               349561566,
               date(2025, 8, 26)),
    FieldTrial('WebRTC-Bwe-LimitPacingFactorByUpperLinkCapacityEstimate',
               42220543,
               date(2025, 1, 1)),
    FieldTrial('WebRTC-Bwe-ResetOnAdapterIdChange',
               42225231,
               date(2025, 5, 30)),
    FieldTrial('WebRTC-DataChannelMessageInterleaving',
               41481008,
               date(2024, 10, 1)),
    FieldTrial('WebRTC-DisableRtxRateLimiter',
               42225500,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-ElasticBitrateAllocation',
               350555527,
               date(2025, 3, 1)),
    FieldTrial('WebRTC-EncoderDataDumpDirectory',
               296242528,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-FrameCadenceAdapter-UseVideoFrameTimestamp',
               42226256,
               date(2024, 10, 1)),
    FieldTrial('WebRTC-IPv6NetworkResolutionFixes',
               42224598,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-IncomingTimestampOnMarkerBitOnly',
               42224805,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-IncreaseIceCandidatePriorityHostSrflx',
               42225331,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-JitterEstimatorConfig',
               42224404,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-LibaomAv1Encoder-AdaptiveMaxConsecDrops',
               351644568,
               date(2025, 7, 1)),
    FieldTrial('WebRTC-LibvpxVp8Encoder-AndroidSpecificThreadingSettings',
               42226191,
               date(2024, 9, 1)),
    FieldTrial('WebRTC-MixedCodecSimulcast',
               362277533,
               date(2025, 9, 1)),
    FieldTrial('WebRTC-Pacer-FastRetransmissions',
               40235589,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Pacer-KeyframeFlushing',
               42221435,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-DisableTlsSessionTicketKillswitch',
               367181089,
               date(2025, 7, 1)),
    FieldTrial('WebRTC-QCM-Dynamic-AV1',
               349860657,
               date(2025, 7, 1)),
    FieldTrial('WebRTC-QCM-Dynamic-VP8',
               349860657,
               date(2025, 7, 1)),
    FieldTrial('WebRTC-QCM-Dynamic-VP9',
               349860657,
               date(2025, 7, 1)),
    FieldTrial('WebRTC-QCM-Static-AV1',
               349860657,
               date(2025, 7, 1)),
    FieldTrial('WebRTC-QCM-Static-VP8',
               349860657,
               date(2025, 7, 1)),
    FieldTrial('WebRTC-QCM-Static-VP9',
               349860657,
               date(2025, 7, 1)),
    FieldTrial('WebRTC-ReceiveBufferSize',
               42225927,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-RFC8888CongestionControlFeedback',
               42225697,
               date(2025, 1, 30)),
    FieldTrial('WebRTC-RtcEventLogEncodeDependencyDescriptor',
               42225280,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-RtcEventLogEncodeNetEqSetMinimumDelayKillSwitch',
               42225058,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-SetReadyToSendFalseIfSendFail',
               361124449,
               date(2024, 12, 1)),
    FieldTrial('WebRTC-SrtpRemoveReceiveStream',
               42225949,
               date(2024, 10, 1)),
    FieldTrial('WebRTC-TaskQueue-ReplaceLibeventWithStdlib',
               42224654,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-PayloadTypesInTransport',
               360058654,
               date(2025, 9, 11)),
    FieldTrial('WebRTC-UseNtpTimeAbsoluteSendTime',
               42226305,
               date(2024, 9, 1)),
    FieldTrial('WebRTC-VP8-MaxFrameInterval',
               42225870,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-VP9-SvcForSimulcast',
               347737882,
               date(2024, 10, 1)),
    FieldTrial('WebRTC-Video-AV1EvenPayloadSizes',
               42226301,
               date(2024, 11, 1)),
    FieldTrial('WebRTC-Video-EnableRetransmitAllLayers',
               42225262,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Video-EncoderFallbackSettings',
               42231704,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Video-SimulcastIndependentFrameIds',
               42226243,
               date(2024, 12, 1)),
    FieldTrial('WebRTC-VideoEncoderSettings',
               40252667,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-ZeroHertzQueueOverload',
               42225879,
               date(2024, 7, 1)),
    FieldTrial('WebRTC-Video-H26xPacketBuffer',
               41480904,
               date(2024, 6, 1)),
    FieldTrial('WebRTC-Video-Vp9FlexibleMode',
               329396373,
               date(2025, 6, 26)),
    # keep-sorted end
])  # yapf: disable

NO_BUG = -1
INDEFINITE = date(datetime.MAXYEAR, 1, 1)

# These field trials precedes the policy in `g3doc/field-trials.md` and are
# therefore not required to follow it. Do not add any new field trials here.
# If you remove an entry you should also update
# POLICY_EXEMPT_FIELD_TRIALS_DIGEST.
POLICY_EXEMPT_FIELD_TRIALS: FrozenSet[FieldTrial] = frozenset([
    # keep-sorted start
    FieldTrial('WebRTC-AddNetworkCostToVpn',
               42223280,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-AddPacingToCongestionWindowPushback',
               42220204,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-AdjustOpusBandwidth',
               42233664,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3AecStateFullResetKillSwitch',
               42221578,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3AecStateSubtractorAnalyzerResetKillSwitch',
               42221578,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3AntiHowlingMinimizationKillSwitch',
               150764764,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3ClampInstQualityToOneKillSwitch',
               42220991,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3ClampInstQualityToZeroKillSwitch',
               42220991,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3CoarseFilterResetHangoverKillSwitch',
               42222401,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3ConservativeTailFreqResponse',
               42223361,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3DeactivateInitialStateResetKillSwitch',
               42221578,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3DelayEstimateSmoothingDelayFoundOverride',
               42222934,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3DelayEstimateSmoothingOverride',
               42222934,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3EchoSaturationDetectionKillSwitch',
               42221578,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3EnforceCaptureDelayEstimationDownmixing',
               42221238,
               INDEFINITE),
    FieldTrial(
        'WebRTC-Aec3EnforceCaptureDelayEstimationLeftRightPrioritization',
        42221238,
        INDEFINITE),
    FieldTrial('WebRTC-Aec3EnforceConservativeHfSuppression',
               42222109,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3EnforceLowActiveRenderLimit',
               42221578,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3EnforceMoreTransparentNearendSuppressorHfTuning',
               42221589,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3EnforceMoreTransparentNearendSuppressorTuning',
               42221578,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3EnforceMoreTransparentNormalSuppressorHfTuning',
               42221589,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3EnforceMoreTransparentNormalSuppressorTuning',
               42221578,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3EnforceRapidlyAdjustingNearendSuppressorTunings',
               42221578,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3EnforceRapidlyAdjustingNormalSuppressorTunings',
               42221578,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3EnforceRenderDelayEstimationDownmixing',
               42221238,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3EnforceSlowlyAdjustingNearendSuppressorTunings',
               42221578,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3EnforceSlowlyAdjustingNormalSuppressorTunings',
               42221578,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3EnforceStationarityProperties',
               42221578,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3EnforceStationarityPropertiesAtInit',
               42221578,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3EnforceVeryLowActiveRenderLimit',
               42221578,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3HighPassFilterEchoReference',
               42222401,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3MinErleDuringOnsetsKillSwitch',
               42220385,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3NonlinearModeReverbKillSwitch',
               42222109,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3OnsetDetectionKillSwitch',
               42221578,
               INDEFINITE),
    FieldTrial(
        'WebRTC-Aec3RenderDelayEstimationLeftRightPrioritizationKillSwitch',
        42221238,
        date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3SensitiveDominantNearendActivation',
               42221578,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3SetupSpecificDefaultConfigDefaultsKillSwitch',
               42221236,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3ShortHeadroomKillSwitch',
               42220385,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3StereoContentDetectionKillSwitch',
               42225201,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3SuppressorAntiHowlingGainOverride',
               42221589,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3SuppressorDominantNearendEnrExitThresholdOverride',
               42221589,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3SuppressorDominantNearendEnrThresholdOverride',
               42221589,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3SuppressorDominantNearendHoldDurationOverride',
               42221589,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3SuppressorDominantNearendSnrThresholdOverride',
               42221589,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3SuppressorDominantNearendTriggerThresholdOverride',
               42221589,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3SuppressorNearendHfMaskSuppressOverride',
               42221589,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3SuppressorNearendHfMaskTransparentOverride',
               42221589,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3SuppressorNearendLfMaskSuppressOverride',
               42221589,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3SuppressorNearendLfMaskTransparentOverride',
               42221589,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3SuppressorNearendMaxDecFactorLfOverride',
               42221589,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3SuppressorNearendMaxIncFactorOverride',
               42221589,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3SuppressorNormalHfMaskSuppressOverride',
               42221589,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3SuppressorNormalHfMaskTransparentOverride',
               42221589,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3SuppressorNormalLfMaskSuppressOverride',
               42221589,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3SuppressorNormalLfMaskTransparentOverride',
               42221589,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3SuppressorNormalMaxDecFactorLfOverride',
               42221589,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3SuppressorNormalMaxIncFactorOverride',
               42221589,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3SuppressorTuningOverride',
               42221589,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3TransparentAntiHowlingGain',
               42221578,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3TransparentModeHmm',
               42222401,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3TransparentModeKillSwitch',
               42234438,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3Use1Dot2SecondsInitialStateDuration',
               42221578,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3Use1Dot6SecondsInitialStateDuration',
               42221578,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3Use2Dot0SecondsInitialStateDuration',
               42221578,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3UseDot1SecondsInitialStateDuration',
               42221578,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3UseDot2SecondsInitialStateDuration',
               42221578,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3UseDot3SecondsInitialStateDuration',
               42221578,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3UseDot6SecondsInitialStateDuration',
               42221578,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3UseDot9SecondsInitialStateDuration',
               42221578,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3UseErleOnsetCompensationInDominantNearend',
               42222842,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3UseLowEarlyReflectionsDefaultGain',
               42221578,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3UseLowLateReflectionsDefaultGain',
               42221578,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3UseNearendReverbLen',
               42223329,
               INDEFINITE),
    FieldTrial('WebRTC-Aec3UseShortConfigChangeDuration',
               42221578,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3UseZeroInitialStateDuration',
               42221578,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Aec3VerySensitiveDominantNearendActivation',
               42221578,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Agc2SimdAvx2KillSwitch',
               42232605,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Agc2SimdNeonKillSwitch',
               42232605,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Agc2SimdSse2KillSwitch',
               42232605,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-AllowMACBasedIPv6',
               41480878,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-AlrDetectorParameters',
               42220590,
               INDEFINITE),
    FieldTrial('WebRTC-AndroidNetworkMonitor-IsAdapterAvailable',
               42223964,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-ApmExperimentalMultiChannelCaptureKillSwitch',
               42225202,
               INDEFINITE),
    FieldTrial('WebRTC-ApmExperimentalMultiChannelRenderKillSwitch',
               42225203,
               INDEFINITE),
    FieldTrial('WebRTC-Audio-2ndAgcMinMicLevelExperiment',
               40207112,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Audio-ABWENoTWCC',
               42233370,
               INDEFINITE),
    FieldTrial('WebRTC-Audio-AdaptivePtime',
               40694579,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Audio-Allocation',
               42220324,
               INDEFINITE),
    FieldTrial('WebRTC-Audio-AlrProbing',
               42220234,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Audio-FecAdaptation',
               42233254,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Audio-LegacyOverhead',
               42221084,
               INDEFINITE),
    FieldTrial('WebRTC-Audio-MinimizeResamplingOnMobile',
               42231221,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Audio-NetEqDecisionLogicConfig',
               42223518,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Audio-NetEqDelayManagerConfig',
               42220376,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Audio-NetEqNackTrackerConfig',
               42220211,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Audio-NetEqSmartFlushing',
               42222334,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Audio-OpusBitrateMultipliers',
               42221139,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Audio-Red-For-Opus',
               42221750,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Audio-StableTargetAdaptation',
               42221061,
               INDEFINITE),
    FieldTrial('WebRTC-Audio-iOS-Holding',
               42233253,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-AudioDevicePlayoutBufferSizeFactor',
               42221006,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-BindUsingInterfaceName',
               42220770,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Bwe-AllocationProbing',
               42220440,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Bwe-AlrProbing',
               42220440,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Bwe-EstimateBoundedIncrease',
               42220543,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Bwe-ExponentialProbing',
               42220440,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Bwe-IgnoreProbesLowerThanNetworkStateEstimate',
               42220543,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Bwe-InitialProbing',
               42220440,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Bwe-InjectedCongestionController',
               'webrtc:8415',
               INDEFINITE),
    FieldTrial('WebRTC-Bwe-LimitProbesLowerThanThroughputEstimate',
               42221601,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Bwe-LossBasedBweV2',
               42222865,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Bwe-LossBasedControl',
               NO_BUG,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Bwe-MaxRttLimit',
               42234928,
               INDEFINITE),
    FieldTrial('WebRTC-Bwe-MinAllocAsLowerBound',
               NO_BUG,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Bwe-NetworkRouteConstraints',
               42221535,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Bwe-NoFeedbackReset',
               42234928,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Bwe-PaceAtMaxOfBweAndLowerLinkCapacity',
               NO_BUG,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Bwe-ProbingBehavior',
               42220440,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Bwe-ProbingConfiguration',
               42220440,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Bwe-ReceiveTimeFix',
               42234228,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Bwe-ReceiverLimitCapsOnly',
               42222445,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Bwe-RobustThroughputEstimatorSettings',
               42220312,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Bwe-SafeResetOnRouteChange',
               42234928,
               INDEFINITE),
    FieldTrial('WebRTC-Bwe-SeparateAudioPackets',
               42221011,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Bwe-TrendlineEstimatorSettings',
               42221011,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-BweBackOffFactor',
               42233342,
               INDEFINITE),
    FieldTrial('WebRTC-BweLossExperiment',
               42230863,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-BweRapidRecoveryExperiment',
               42233136,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-BweThroughputWindowConfig',
               42220312,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-BweWindowSizeInPackets',
               42233342,
               INDEFINITE),
    FieldTrial('WebRTC-CongestionWindow',
               42225197,
               INDEFINITE),
    FieldTrial('WebRTC-CpuLoadEstimator',
               42233645,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Debugging-RtpDump',
               42220735,
               INDEFINITE),
    FieldTrial('WebRTC-DecoderDataDumpDirectory',
               42224491,
               INDEFINITE),
    FieldTrial('WebRTC-DefaultBitrateLimitsKillSwitch',
               NO_BUG,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-DependencyDescriptorAdvertised',
               42220386,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-DisableUlpFecExperiment',
               NO_BUG,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-DontIncreaseDelayBasedBweInAlr',
               42220590,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-DscpFieldTrial',
               42223835,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-ExtraICEPing',
               42220311,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-FakeNetworkReceiveConfig',
               42224493,
               INDEFINITE),
    FieldTrial('WebRTC-FakeNetworkSendConfig',
               42224493,
               INDEFINITE),
    FieldTrial('WebRTC-FilterAbsSendTimeExtension',
               42220271,
               INDEFINITE),
    FieldTrial('WebRTC-FindNetworkHandleWithoutIpv6TemporaryPart',
               42221149,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-FlexFEC-03',
               42230680,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-FlexFEC-03-Advertised',
               42230680,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-ForcePlayoutDelay',
               42222016,
               INDEFINITE),
    FieldTrial('WebRTC-ForceSendPlayoutDelay',
               42222016,
               INDEFINITE),
    FieldTrial('WebRTC-ForceSimulatedOveruseIntervalMs',
               42224494,
               INDEFINITE),
    FieldTrial('WebRTC-FrameDropper',
               42234921,
               INDEFINITE),
    FieldTrial('WebRTC-FullBandHpfKillSwitch',
               42221279,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-GenericCodecDependencyDescriptor',
               42225273,
               INDEFINITE),
    FieldTrial('WebRTC-GenericDescriptorAdvertised',
               42234553,
               INDEFINITE),
    FieldTrial('WebRTC-GenericDescriptorAuth',
               42220132,
               INDEFINITE),
    FieldTrial('WebRTC-GenericPictureId',
               42234553,
               INDEFINITE),
    FieldTrial('WebRTC-GetEncoderInfoOverride',
               NO_BUG,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-H264HighProfile',
               41481030,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-IPv6Default',
               NO_BUG,  # chromium:413437
               date(2024, 4, 1)),
    FieldTrial('WebRTC-IceControllerFieldTrials',
               40658968,
               INDEFINITE),
    FieldTrial('WebRTC-IceFieldTrials',
               42221103,
               INDEFINITE),
    FieldTrial('WebRTC-KeyframeInterval',
               42220470,
               INDEFINITE),
    FieldTrial('WebRTC-LegacyFrameIdJumpBehavior',
               42223541,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-LegacySimulcastLayerLimit',
               42233936,
               INDEFINITE),
    FieldTrial('WebRTC-LowresSimulcastBitrateInterpolation',
               42222558,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-MutedStateKillSwitch',
               177830919,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Network-UseNWPathMonitor',
               42221045,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-NetworkMonitorAutoDetect',
               42223964,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-NormalizeSimulcastResolution',
               NO_BUG,
               INDEFINITE),
    FieldTrial('WebRTC-Pacer-BlockAudio',
               42233548,
               INDEFINITE),
    FieldTrial('WebRTC-Pacer-DrainQueue',
               42233548,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Pacer-IgnoreTransportOverhead',
               42235102,
               INDEFINITE),
    FieldTrial('WebRTC-Pacer-PadInSilence',
               42233548,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-PacketBufferMaxSize',
               42235070,
               INDEFINITE),
    FieldTrial('WebRTC-PcFactoryDefaultBitrates',
               42220941,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-PiggybackIceCheckAcknowledgement',
               NO_BUG,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-PixelLimitResource',
               42222397,
               INDEFINITE),
    FieldTrial('WebRTC-ProbingScreenshareBwe',
               42232804,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-ProtectionOverheadRateThreshold',
               42225198,
               INDEFINITE),
    FieldTrial('WebRTC-QpParsingKillSwitch',
               42222690,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-RtcEventLogKillSwitch',
               42222210,
               INDEFINITE),
    FieldTrial('WebRTC-RtcEventLogNewFormat',
               42233237,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-RtcpLossNotification',
               42220379,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-SendBufferSizeBytes',
               42222026,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-SendNackDelayMs',
               42235176,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-SetSocketReceiveBuffer',
               42223976,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-SimulcastEncoderAdapter-GetEncoderInfoOverride',
               NO_BUG,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-SimulcastLayerLimitRoundUp',
               NO_BUG,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-SpsPpsIdrIsH264Keyframe',
               42233557,
               INDEFINITE),
    FieldTrial('WebRTC-StableTargetRate',
               42220156,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-StrictPacingAndProbing',
               42233198,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-StunInterPacketDelay',
               NO_BUG,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-SurfaceCellularTypes',
               42221576,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-SwitchEncoderOnInitializationFailures',
               42223783,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Target-Bitrate-Rtcp',
               42235192,
               INDEFINITE),
    FieldTrial('WebRTC-TransientSuppressorForcedOff',
               40172597,
               INDEFINITE),
    FieldTrial('WebRTC-UseBaseHeavyVP8TL3RateAllocation',
               42234670,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-UseDifferentiatedCellularCosts',
               42221576,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-UseStandardBytesStats',
               42220573,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-UseTurnServerAsStunServer',
               42221142,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-VP8-ForcePartitionResilience',
               42221952,
               INDEFINITE),
    FieldTrial('WebRTC-VP8-Forced-Fallback-Encoder-v2',
               42231704,
               INDEFINITE),
    FieldTrial('WebRTC-VP8-GetEncoderInfoOverride',
               42221952,
               INDEFINITE),
    FieldTrial('WebRTC-VP8-Postproc-Config',
               42221657,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-VP8-Postproc-Config-Arm',
               42231704,
               INDEFINITE),
    FieldTrial('WebRTC-VP8IosMaxNumberOfThread',
               42220027,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-VP9-GetEncoderInfoOverride',
               NO_BUG,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-VP9-LowTierOptimizations',
               42224122,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-VP9-PerformanceFlags',
               42221657,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-VP9QualityScaler',
               42221411,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Video-BalancedDegradation',
               42232717,
               INDEFINITE),
    FieldTrial('WebRTC-Video-BalancedDegradationSettings',
               NO_BUG,
               INDEFINITE),
    FieldTrial('WebRTC-Video-DisableAutomaticResize',
               42221931,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Video-DiscardPacketsWithUnknownSsrc',
               42235091,
               INDEFINITE),
    FieldTrial('WebRTC-Video-ForcedSwDecoderFallback',
               NO_BUG,
               INDEFINITE),
    FieldTrial('WebRTC-Video-InitialDecoderResolution',
               42222018,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Video-MinVideoBitrate',
               42220993,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Video-Pacing',
               42220062,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Video-PreferTemporalSupportOnBaseLayer',
               42221417,
               INDEFINITE),
    FieldTrial('WebRTC-Video-QualityScalerSettings',
               NO_BUG,
               INDEFINITE),
    FieldTrial('WebRTC-Video-QualityScaling',
               42234348,
               INDEFINITE),
    FieldTrial('WebRTC-Video-UseFrameRateForOverhead',
               166341943,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-VideoFrameTrackingIdAdvertised',
               42222747,
               INDEFINITE),
    FieldTrial('WebRTC-VideoLayersAllocationAdvertised',
               42222126,
               INDEFINITE),
    FieldTrial('WebRTC-VideoRateControl',
               42220259,
               INDEFINITE),
    FieldTrial('WebRTC-Vp9ExternalRefCtrl',
               42234783,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-Vp9InterLayerPred',
               NO_BUG,  # chromium:949536
               INDEFINITE),
    FieldTrial('WebRTC-Vp9IssueKeyFrameOnLayerDeactivation',
               40595338,
               date(2024, 4, 1)),
    FieldTrial('WebRTC-ZeroPlayoutDelay',
               40228487,
               date(2024, 4, 1)),
    # keep-sorted end
])  # yapf: disable

POLICY_EXEMPT_FIELD_TRIALS_DIGEST: str = \
    '32ec47da125c13ceb01a908627c7c10aada3d4dd'

REGISTERED_FIELD_TRIALS: FrozenSet[FieldTrial] = ACTIVE_FIELD_TRIALS.union(
    POLICY_EXEMPT_FIELD_TRIALS)


def todays_date() -> date:
    now = datetime.datetime.now(datetime.timezone.utc)
    return date(now.year, now.month, now.day)


def registry_header(
        field_trials: FrozenSet[FieldTrial] = REGISTERED_FIELD_TRIALS) -> str:
    """Generates a C++ header with all field trial keys.

    Args:
      field_trials: Field trials to include in the header.

    Returns:
      String representation of a C++ header file containing all field trial
      keys.

    >>> trials = {
    ...     FieldTrial('B', '', date(1, 1, 1)),
    ...     FieldTrial('A', '', date(1, 1, 1)),
    ...     FieldTrial('B', '', date(2, 2, 2)),
    ... }
    >>> print(registry_header(trials))
    // This file was automatically generated. Do not edit.
    <BLANKLINE>
    #ifndef GEN_REGISTERED_FIELD_TRIALS_H_
    #define GEN_REGISTERED_FIELD_TRIALS_H_
    <BLANKLINE>
    #include "absl/strings/string_view.h"
    <BLANKLINE>
    namespace webrtc {
    <BLANKLINE>
    inline constexpr absl::string_view kRegisteredFieldTrials[] = {
        "A",
        "B",
    };
    <BLANKLINE>
    }  // namespace webrtc
    <BLANKLINE>
    #endif  // GEN_REGISTERED_FIELD_TRIALS_H_
    <BLANKLINE>
    """
    registered_keys = {f.key for f in field_trials}
    keys = '\n'.join(f'    "{k}",' for k in sorted(registered_keys))
    return ('// This file was automatically generated. Do not edit.\n'
            '\n'
            '#ifndef GEN_REGISTERED_FIELD_TRIALS_H_\n'
            '#define GEN_REGISTERED_FIELD_TRIALS_H_\n'
            '\n'
            '#include "absl/strings/string_view.h"\n'
            '\n'
            'namespace webrtc {\n'
            '\n'
            'inline constexpr absl::string_view kRegisteredFieldTrials[] = {\n'
            f'{keys}\n'
            '};\n'
            '\n'
            '}  // namespace webrtc\n'
            '\n'
            '#endif  // GEN_REGISTERED_FIELD_TRIALS_H_\n')


def expired_field_trials(
    threshold: date,
    field_trials: FrozenSet[FieldTrial] = REGISTERED_FIELD_TRIALS
) -> Set[FieldTrial]:
    """Obtains expired field trials.

    Args:
      threshold: Date from which to check end date.
      field_trials: Field trials to validate.

    Returns:
      All expired field trials.

    >>> trials = {
    ...     FieldTrial('Expired', '', date(1, 1, 1)),
    ...     FieldTrial('Not-Expired', '', date(1, 1, 2)),
    ... }
    >>> expired_field_trials(date(1, 1, 1), trials)
    {FieldTrial(key='Expired', bug='', end_date=datetime.date(1, 1, 1))}
    """
    return {f for f in field_trials if f.end_date <= threshold}


def validate_field_trials(
        field_trials: FrozenSet[FieldTrial] = ACTIVE_FIELD_TRIALS
) -> List[str]:
    """Validate that field trials conforms to the policy.

    Args:
      field_trials: Field trials to validate.

    Returns:
      A list of explanations for invalid field trials.
    """
    invalid = []

    sha1 = hashlib.sha1()
    for trial in sorted(POLICY_EXEMPT_FIELD_TRIALS, key=lambda f: f.key):
        sha1.update(trial.key.encode('ascii'))
    if sha1.hexdigest() != POLICY_EXEMPT_FIELD_TRIALS_DIGEST:
        invalid.append(
            'POLICY_EXEMPT_FIELD_TRIALS has been modified. Please note that '
            'you must not add any new entries there. If you removed an entry '
            'you should also update POLICY_EXEMPT_FIELD_TRIALS_DIGEST. The '
            f'new digest is "{sha1.hexdigest()}".')

    for trial in field_trials:
        if not trial.key.startswith('WebRTC-'):
            invalid.append(f'{trial.key} does not start with "WebRTC-".')
        if trial.bug_id <= 0:
            invalid.append(f'{trial.key} must have an associated bug.')
        if trial.end_date >= INDEFINITE:
            invalid.append(f'{trial.key} must have an end date.')

    return invalid


def cmd_header(args: argparse.Namespace) -> None:
    if not args.no_validation:
        if errors := validate_field_trials():
            print('\n'.join(sorted(errors)))
            sys.exit(1)

    args.output.write(registry_header())


def cmd_expired(args: argparse.Namespace) -> None:
    today = todays_date()
    diff = datetime.timedelta(days=args.in_days)
    expired = expired_field_trials(
        today + diff,
        ACTIVE_FIELD_TRIALS if args.no_exempt else REGISTERED_FIELD_TRIALS)

    if len(expired) <= 0:
        return

    expired_by_date = sorted(expired, key=lambda f: (f.end_date, f.key))
    print('\n'.join(
        f'{f.key} '
        f'{f"<{f.bug_url()}> " if f.bug_url() else ""}'
        f'{"expired" if f.end_date <= today else "expires"} on {f.end_date}'
        for f in expired_by_date))
    if any(f.end_date <= today for f in expired_by_date):
        sys.exit(1)


def cmd_validate(args: argparse.Namespace) -> None:
    del args
    invalid = validate_field_trials()

    if len(invalid) <= 0:
        return

    print('\n'.join(sorted(invalid)))
    sys.exit(1)


def main() -> None:
    parser = argparse.ArgumentParser()
    subcommand = parser.add_subparsers(dest='cmd')

    parser_header = subcommand.add_parser(
        'header',
        help='generate C++ header file containing registered field trial keys')
    parser_header.add_argument('--output',
                               default=sys.stdout,
                               type=argparse.FileType('w'),
                               required=False,
                               help='output file')
    parser_header.add_argument(
        '--no-validation',
        default=False,
        action='store_true',
        required=False,
        help='whether to validate the field trials before writing')
    parser_header.set_defaults(cmd=cmd_header)

    parser_expired = subcommand.add_parser(
        'expired',
        help='lists all expired field trials',
        description='''
        Lists all expired field trials. Exits with a non-zero exit status if
        any field trials has expired, ignoring the --in-days argument.
        ''')
    parser_expired.add_argument(
        '--no-exempt',
        default=False,
        action='store_true',
        required=False,
        help='whether to include policy exempt field trials')
    parser_expired.add_argument(
        '--in-days',
        default=0,
        type=int,
        required=False,
        help='number of days relative to today to check')
    parser_expired.set_defaults(cmd=cmd_expired)

    parser_validate = subcommand.add_parser(
        'validate',
        help='validates that all field trials conforms to the policy.',
        description='''
        Validates that all field trials conforms to the policy. Exits with a
        non-zero exit status if any field trials does not.
        ''')
    parser_validate.set_defaults(cmd=cmd_validate)

    args = parser.parse_args()

    if not args.cmd:
        parser.print_help(sys.stderr)
        sys.exit(1)

    args.cmd(args)


if __name__ == '__main__':
    main()
