blob: 0c5a2c4e0a570d18297c787c94ac77243e0fd18f [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SERVICES_NETWORK_PUBLIC_MOJOM_COOKIE_MANAGER_MOJOM_H_
#define SERVICES_NETWORK_PUBLIC_MOJOM_COOKIE_MANAGER_MOJOM_H_
#include <stdint.h>
#include <limits>
#include <type_traits>
#include <utility>
#include "base/callback.h"
#include "base/macros.h"
#include "base/optional.h"
#include "mojo/public/cpp/bindings/mojo_buildflags.h"
#if BUILDFLAG(MOJO_TRACE_ENABLED)
#include "base/trace_event/trace_event.h"
#endif
#include "mojo/public/cpp/bindings/clone_traits.h"
#include "mojo/public/cpp/bindings/equals_traits.h"
#include "mojo/public/cpp/bindings/lib/serialization.h"
#include "mojo/public/cpp/bindings/struct_ptr.h"
#include "mojo/public/cpp/bindings/struct_traits.h"
#include "mojo/public/cpp/bindings/union_traits.h"
#include "services/network/public/mojom/cookie_manager.mojom-shared.h"
#include "services/network/public/mojom/cookie_manager.mojom-forward.h"
#include "components/content_settings/core/common/content_settings.mojom.h"
#include "mojo/public/mojom/base/time.mojom.h"
#include "url/mojom/url.mojom.h"
#include <string>
#include <vector>
#include "mojo/public/cpp/bindings/associated_interface_ptr.h"
#include "mojo/public/cpp/bindings/associated_interface_ptr_info.h"
#include "mojo/public/cpp/bindings/associated_interface_request.h"
#include "mojo/public/cpp/bindings/interface_ptr.h"
#include "mojo/public/cpp/bindings/interface_request.h"
#include "mojo/public/cpp/bindings/lib/control_message_handler.h"
#include "mojo/public/cpp/bindings/raw_ptr_impl_ref_traits.h"
#include "mojo/public/cpp/bindings/thread_safe_interface_ptr.h"
#include "mojo/public/cpp/bindings/lib/native_enum_serialization.h"
#include "mojo/public/cpp/bindings/lib/native_struct_serialization.h"
#include "ipc/ipc_message_utils.h"
#include "net/cookies/canonical_cookie.h"
#include "net/cookies/cookie_constants.h"
#include "net/cookies/cookie_options.h"
#ifdef KYTHE_IS_RUNNING
#pragma kythe_inline_metadata "Metadata comment"
#endif
namespace network {
namespace mojom {
class CookieChangeListenerProxy;
template <typename ImplRefTraits>
class CookieChangeListenerStub;
class CookieChangeListenerRequestValidator;
// @generated_from: network.mojom.CookieChangeListener
class CookieChangeListener
: public CookieChangeListenerInterfaceBase {
public:
static const char Name_[];
static constexpr uint32_t Version_ = 0;
static constexpr bool PassesAssociatedKinds_ = false;
static constexpr bool HasSyncMethods_ = false;
using Base_ = CookieChangeListenerInterfaceBase;
using Proxy_ = CookieChangeListenerProxy;
template <typename ImplRefTraits>
using Stub_ = CookieChangeListenerStub<ImplRefTraits>;
using RequestValidator_ = CookieChangeListenerRequestValidator;
using ResponseValidator_ = mojo::PassThroughFilter;
enum MethodMinVersions : uint32_t {
kOnCookieChangeMinVersion = 0,
};
virtual ~CookieChangeListener() {}
// @generated_from: network.mojom.CookieChangeListener.OnCookieChange
virtual void OnCookieChange(const net::CanonicalCookie& cookie, CookieChangeCause cause) = 0;
};
class CookieManagerProxy;
template <typename ImplRefTraits>
class CookieManagerStub;
class CookieManagerRequestValidator;
class CookieManagerResponseValidator;
// @generated_from: network.mojom.CookieManager
class CookieManager
: public CookieManagerInterfaceBase {
public:
static const char Name_[];
static constexpr uint32_t Version_ = 0;
static constexpr bool PassesAssociatedKinds_ = false;
static constexpr bool HasSyncMethods_ = false;
using Base_ = CookieManagerInterfaceBase;
using Proxy_ = CookieManagerProxy;
template <typename ImplRefTraits>
using Stub_ = CookieManagerStub<ImplRefTraits>;
using RequestValidator_ = CookieManagerRequestValidator;
using ResponseValidator_ = CookieManagerResponseValidator;
enum MethodMinVersions : uint32_t {
kGetAllCookiesMinVersion = 0,
kGetCookieListMinVersion = 0,
kSetCanonicalCookieMinVersion = 0,
kDeleteCanonicalCookieMinVersion = 0,
kDeleteCookiesMinVersion = 0,
kAddCookieChangeListenerMinVersion = 0,
kAddGlobalChangeListenerMinVersion = 0,
kCloneInterfaceMinVersion = 0,
kFlushCookieStoreMinVersion = 0,
kAllowFileSchemeCookiesMinVersion = 0,
kSetContentSettingsMinVersion = 0,
kSetForceKeepSessionStateMinVersion = 0,
kBlockThirdPartyCookiesMinVersion = 0,
};
virtual ~CookieManager() {}
using GetAllCookiesCallback = base::OnceCallback<void(const std::vector<net::CanonicalCookie>&)>;
// @generated_from: network.mojom.CookieManager.GetAllCookies
virtual void GetAllCookies(GetAllCookiesCallback callback) = 0;
using GetCookieListCallback = base::OnceCallback<void(const std::vector<net::CanonicalCookie>&, const std::vector<net::CookieWithStatus>&)>;
// @generated_from: network.mojom.CookieManager.GetCookieList
virtual void GetCookieList(const GURL& url, const net::CookieOptions& cookie_options, GetCookieListCallback callback) = 0;
using SetCanonicalCookieCallback = base::OnceCallback<void(net::CanonicalCookie::CookieInclusionStatus)>;
// @generated_from: network.mojom.CookieManager.SetCanonicalCookie
virtual void SetCanonicalCookie(const net::CanonicalCookie& cookie, const std::string& source_scheme, const net::CookieOptions& cookie_options, SetCanonicalCookieCallback callback) = 0;
using DeleteCanonicalCookieCallback = base::OnceCallback<void(bool)>;
// @generated_from: network.mojom.CookieManager.DeleteCanonicalCookie
virtual void DeleteCanonicalCookie(const net::CanonicalCookie& cookie, DeleteCanonicalCookieCallback callback) = 0;
using DeleteCookiesCallback = base::OnceCallback<void(uint32_t)>;
// @generated_from: network.mojom.CookieManager.DeleteCookies
virtual void DeleteCookies(CookieDeletionFilterPtr filter, DeleteCookiesCallback callback) = 0;
// @generated_from: network.mojom.CookieManager.AddCookieChangeListener
virtual void AddCookieChangeListener(const GURL& url, const std::string& name, CookieChangeListenerPtr listener) = 0;
// @generated_from: network.mojom.CookieManager.AddGlobalChangeListener
virtual void AddGlobalChangeListener(CookieChangeListenerPtr notification_pointer) = 0;
// @generated_from: network.mojom.CookieManager.CloneInterface
virtual void CloneInterface(CookieManagerRequest new_interface) = 0;
using FlushCookieStoreCallback = base::OnceCallback<void()>;
// @generated_from: network.mojom.CookieManager.FlushCookieStore
virtual void FlushCookieStore(FlushCookieStoreCallback callback) = 0;
using AllowFileSchemeCookiesCallback = base::OnceCallback<void(bool)>;
// @generated_from: network.mojom.CookieManager.AllowFileSchemeCookies
virtual void AllowFileSchemeCookies(bool allow, AllowFileSchemeCookiesCallback callback) = 0;
// @generated_from: network.mojom.CookieManager.SetContentSettings
virtual void SetContentSettings(const std::vector<::ContentSettingPatternSource>& settings) = 0;
// @generated_from: network.mojom.CookieManager.SetForceKeepSessionState
virtual void SetForceKeepSessionState() = 0;
// @generated_from: network.mojom.CookieManager.BlockThirdPartyCookies
virtual void BlockThirdPartyCookies(bool block) = 0;
};
class CookieChangeListenerProxy
: public CookieChangeListener {
public:
using InterfaceType = CookieChangeListener;
explicit CookieChangeListenerProxy(mojo::MessageReceiverWithResponder* receiver);
void OnCookieChange(const net::CanonicalCookie& cookie, CookieChangeCause cause) final;
private:
mojo::MessageReceiverWithResponder* receiver_;
};
class CookieManagerProxy
: public CookieManager {
public:
using InterfaceType = CookieManager;
explicit CookieManagerProxy(mojo::MessageReceiverWithResponder* receiver);
void GetAllCookies(GetAllCookiesCallback callback) final;
void GetCookieList(const GURL& url, const net::CookieOptions& cookie_options, GetCookieListCallback callback) final;
void SetCanonicalCookie(const net::CanonicalCookie& cookie, const std::string& source_scheme, const net::CookieOptions& cookie_options, SetCanonicalCookieCallback callback) final;
void DeleteCanonicalCookie(const net::CanonicalCookie& cookie, DeleteCanonicalCookieCallback callback) final;
void DeleteCookies(CookieDeletionFilterPtr filter, DeleteCookiesCallback callback) final;
void AddCookieChangeListener(const GURL& url, const std::string& name, CookieChangeListenerPtr listener) final;
void AddGlobalChangeListener(CookieChangeListenerPtr notification_pointer) final;
void CloneInterface(CookieManagerRequest new_interface) final;
void FlushCookieStore(FlushCookieStoreCallback callback) final;
void AllowFileSchemeCookies(bool allow, AllowFileSchemeCookiesCallback callback) final;
void SetContentSettings(const std::vector<::ContentSettingPatternSource>& settings) final;
void SetForceKeepSessionState() final;
void BlockThirdPartyCookies(bool block) final;
private:
mojo::MessageReceiverWithResponder* receiver_;
};
class CookieChangeListenerStubDispatch {
public:
static bool Accept(CookieChangeListener* impl, mojo::Message* message);
static bool AcceptWithResponder(
CookieChangeListener* impl,
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder);
};
template <typename ImplRefTraits =
mojo::RawPtrImplRefTraits<CookieChangeListener>>
class CookieChangeListenerStub
: public mojo::MessageReceiverWithResponderStatus {
public:
using ImplPointerType = typename ImplRefTraits::PointerType;
CookieChangeListenerStub() {}
~CookieChangeListenerStub() override {}
void set_sink(ImplPointerType sink) { sink_ = std::move(sink); }
ImplPointerType& sink() { return sink_; }
bool Accept(mojo::Message* message) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return CookieChangeListenerStubDispatch::Accept(
ImplRefTraits::GetRawPointer(&sink_), message);
}
bool AcceptWithResponder(
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return CookieChangeListenerStubDispatch::AcceptWithResponder(
ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder));
}
private:
ImplPointerType sink_;
};
class CookieManagerStubDispatch {
public:
static bool Accept(CookieManager* impl, mojo::Message* message);
static bool AcceptWithResponder(
CookieManager* impl,
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder);
};
template <typename ImplRefTraits =
mojo::RawPtrImplRefTraits<CookieManager>>
class CookieManagerStub
: public mojo::MessageReceiverWithResponderStatus {
public:
using ImplPointerType = typename ImplRefTraits::PointerType;
CookieManagerStub() {}
~CookieManagerStub() override {}
void set_sink(ImplPointerType sink) { sink_ = std::move(sink); }
ImplPointerType& sink() { return sink_; }
bool Accept(mojo::Message* message) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return CookieManagerStubDispatch::Accept(
ImplRefTraits::GetRawPointer(&sink_), message);
}
bool AcceptWithResponder(
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return CookieManagerStubDispatch::AcceptWithResponder(
ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder));
}
private:
ImplPointerType sink_;
};
class CookieChangeListenerRequestValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class CookieManagerRequestValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class CookieManagerResponseValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
// @generated_from: network.mojom.CookieManagerParams
class CookieManagerParams {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<CookieManagerParams, T>::value>;
using DataView = CookieManagerParamsDataView;
using Data_ = internal::CookieManagerParams_Data;
template <typename... Args>
static CookieManagerParamsPtr New(Args&&... args) {
return CookieManagerParamsPtr(
base::in_place, std::forward<Args>(args)...);
}
template <typename U>
static CookieManagerParamsPtr From(const U& u) {
return mojo::TypeConverter<CookieManagerParamsPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, CookieManagerParams>::Convert(*this);
}
CookieManagerParams();
CookieManagerParams(
bool block_third_party_cookies,
const std::vector<::ContentSettingPatternSource>& settings,
const std::vector<std::string>& secure_origin_cookies_allowed_schemes,
const std::vector<std::string>& matching_scheme_cookies_allowed_schemes,
const std::vector<std::string>& third_party_cookies_allowed_schemes,
bool allow_file_scheme_cookies);
~CookieManagerParams();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = CookieManagerParamsPtr>
CookieManagerParamsPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, CookieManagerParams::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
CookieManagerParams::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
CookieManagerParams::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::CookieManagerParams_UnserializedMessageContext<
UserType, CookieManagerParams::DataView>>(0, 0, std::move(input)));
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
return mojo::internal::DeserializeImpl<CookieManagerParams::DataView>(
data, data_num_bytes, std::vector<mojo::ScopedHandle>(), output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return CookieManagerParams::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::CookieManagerParams_UnserializedMessageContext<
UserType, CookieManagerParams::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<CookieManagerParams::DataView>(
input.payload(), input.payload_num_bytes(),
std::move(*input.mutable_handles()), output, Validate);
}
// @generated_from: network.mojom.CookieManagerParams.block_third_party_cookies
bool block_third_party_cookies;
// @generated_from: network.mojom.CookieManagerParams.settings
std::vector<::ContentSettingPatternSource> settings;
// @generated_from: network.mojom.CookieManagerParams.secure_origin_cookies_allowed_schemes
std::vector<std::string> secure_origin_cookies_allowed_schemes;
// @generated_from: network.mojom.CookieManagerParams.matching_scheme_cookies_allowed_schemes
std::vector<std::string> matching_scheme_cookies_allowed_schemes;
// @generated_from: network.mojom.CookieManagerParams.third_party_cookies_allowed_schemes
std::vector<std::string> third_party_cookies_allowed_schemes;
// @generated_from: network.mojom.CookieManagerParams.allow_file_scheme_cookies
bool allow_file_scheme_cookies;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, CookieManagerParams::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, CookieManagerParams::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, CookieManagerParams::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, CookieManagerParams::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: network.mojom.CookieOptions
class CookieOptions {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<CookieOptions, T>::value>;
using DataView = CookieOptionsDataView;
using Data_ = internal::CookieOptions_Data;
template <typename... Args>
static CookieOptionsPtr New(Args&&... args) {
return CookieOptionsPtr(
base::in_place, std::forward<Args>(args)...);
}
template <typename U>
static CookieOptionsPtr From(const U& u) {
return mojo::TypeConverter<CookieOptionsPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, CookieOptions>::Convert(*this);
}
CookieOptions();
CookieOptions(
bool exclude_httponly,
net::CookieOptions::SameSiteCookieContext same_site_cookie_context,
bool update_access_time,
base::Optional<base::Time> server_time,
bool return_excluded_cookies);
~CookieOptions();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = CookieOptionsPtr>
CookieOptionsPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, CookieOptions::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
CookieOptions::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
CookieOptions::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::CookieOptions_UnserializedMessageContext<
UserType, CookieOptions::DataView>>(0, 0, std::move(input)));
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
return mojo::internal::DeserializeImpl<CookieOptions::DataView>(
data, data_num_bytes, std::vector<mojo::ScopedHandle>(), output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return CookieOptions::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::CookieOptions_UnserializedMessageContext<
UserType, CookieOptions::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<CookieOptions::DataView>(
input.payload(), input.payload_num_bytes(),
std::move(*input.mutable_handles()), output, Validate);
}
// @generated_from: network.mojom.CookieOptions.exclude_httponly
bool exclude_httponly;
// @generated_from: network.mojom.CookieOptions.same_site_cookie_context
net::CookieOptions::SameSiteCookieContext same_site_cookie_context;
// @generated_from: network.mojom.CookieOptions.update_access_time
bool update_access_time;
// @generated_from: network.mojom.CookieOptions.server_time
base::Optional<base::Time> server_time;
// @generated_from: network.mojom.CookieOptions.return_excluded_cookies
bool return_excluded_cookies;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, CookieOptions::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, CookieOptions::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, CookieOptions::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, CookieOptions::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: network.mojom.CanonicalCookie
class CanonicalCookie {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<CanonicalCookie, T>::value>;
using DataView = CanonicalCookieDataView;
using Data_ = internal::CanonicalCookie_Data;
template <typename... Args>
static CanonicalCookiePtr New(Args&&... args) {
return CanonicalCookiePtr(
base::in_place, std::forward<Args>(args)...);
}
template <typename U>
static CanonicalCookiePtr From(const U& u) {
return mojo::TypeConverter<CanonicalCookiePtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, CanonicalCookie>::Convert(*this);
}
CanonicalCookie();
CanonicalCookie(
const std::string& name,
const std::string& value,
const std::string& domain,
const std::string& path,
base::Time creation,
base::Time expiry,
base::Time last_access,
bool secure,
bool httponly,
net::CookieSameSite site_restrictions,
net::CookiePriority priority);
~CanonicalCookie();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = CanonicalCookiePtr>
CanonicalCookiePtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, CanonicalCookie::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
CanonicalCookie::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
CanonicalCookie::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::CanonicalCookie_UnserializedMessageContext<
UserType, CanonicalCookie::DataView>>(0, 0, std::move(input)));
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
return mojo::internal::DeserializeImpl<CanonicalCookie::DataView>(
data, data_num_bytes, std::vector<mojo::ScopedHandle>(), output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return CanonicalCookie::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::CanonicalCookie_UnserializedMessageContext<
UserType, CanonicalCookie::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<CanonicalCookie::DataView>(
input.payload(), input.payload_num_bytes(),
std::move(*input.mutable_handles()), output, Validate);
}
// @generated_from: network.mojom.CanonicalCookie.name
std::string name;
// @generated_from: network.mojom.CanonicalCookie.value
std::string value;
// @generated_from: network.mojom.CanonicalCookie.domain
std::string domain;
// @generated_from: network.mojom.CanonicalCookie.path
std::string path;
// @generated_from: network.mojom.CanonicalCookie.creation
base::Time creation;
// @generated_from: network.mojom.CanonicalCookie.expiry
base::Time expiry;
// @generated_from: network.mojom.CanonicalCookie.last_access
base::Time last_access;
// @generated_from: network.mojom.CanonicalCookie.secure
bool secure;
// @generated_from: network.mojom.CanonicalCookie.httponly
bool httponly;
// @generated_from: network.mojom.CanonicalCookie.site_restrictions
net::CookieSameSite site_restrictions;
// @generated_from: network.mojom.CanonicalCookie.priority
net::CookiePriority priority;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, CanonicalCookie::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, CanonicalCookie::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, CanonicalCookie::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, CanonicalCookie::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: network.mojom.CookieWithStatus
class CookieWithStatus {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<CookieWithStatus, T>::value>;
using DataView = CookieWithStatusDataView;
using Data_ = internal::CookieWithStatus_Data;
template <typename... Args>
static CookieWithStatusPtr New(Args&&... args) {
return CookieWithStatusPtr(
base::in_place, std::forward<Args>(args)...);
}
template <typename U>
static CookieWithStatusPtr From(const U& u) {
return mojo::TypeConverter<CookieWithStatusPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, CookieWithStatus>::Convert(*this);
}
CookieWithStatus();
CookieWithStatus(
const net::CanonicalCookie& cookie,
net::CanonicalCookie::CookieInclusionStatus status);
~CookieWithStatus();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = CookieWithStatusPtr>
CookieWithStatusPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, CookieWithStatus::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
CookieWithStatus::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
CookieWithStatus::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::CookieWithStatus_UnserializedMessageContext<
UserType, CookieWithStatus::DataView>>(0, 0, std::move(input)));
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
return mojo::internal::DeserializeImpl<CookieWithStatus::DataView>(
data, data_num_bytes, std::vector<mojo::ScopedHandle>(), output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return CookieWithStatus::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::CookieWithStatus_UnserializedMessageContext<
UserType, CookieWithStatus::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<CookieWithStatus::DataView>(
input.payload(), input.payload_num_bytes(),
std::move(*input.mutable_handles()), output, Validate);
}
// @generated_from: network.mojom.CookieWithStatus.cookie
net::CanonicalCookie cookie;
// @generated_from: network.mojom.CookieWithStatus.status
net::CanonicalCookie::CookieInclusionStatus status;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, CookieWithStatus::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, CookieWithStatus::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, CookieWithStatus::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, CookieWithStatus::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: network.mojom.CookieAndLineWithStatus
class CookieAndLineWithStatus {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<CookieAndLineWithStatus, T>::value>;
using DataView = CookieAndLineWithStatusDataView;
using Data_ = internal::CookieAndLineWithStatus_Data;
template <typename... Args>
static CookieAndLineWithStatusPtr New(Args&&... args) {
return CookieAndLineWithStatusPtr(
base::in_place, std::forward<Args>(args)...);
}
template <typename U>
static CookieAndLineWithStatusPtr From(const U& u) {
return mojo::TypeConverter<CookieAndLineWithStatusPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, CookieAndLineWithStatus>::Convert(*this);
}
CookieAndLineWithStatus();
CookieAndLineWithStatus(
const base::Optional<net::CanonicalCookie>& cookie,
const std::string& cookie_string,
net::CanonicalCookie::CookieInclusionStatus status);
~CookieAndLineWithStatus();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = CookieAndLineWithStatusPtr>
CookieAndLineWithStatusPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, CookieAndLineWithStatus::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
CookieAndLineWithStatus::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
CookieAndLineWithStatus::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::CookieAndLineWithStatus_UnserializedMessageContext<
UserType, CookieAndLineWithStatus::DataView>>(0, 0, std::move(input)));
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
return mojo::internal::DeserializeImpl<CookieAndLineWithStatus::DataView>(
data, data_num_bytes, std::vector<mojo::ScopedHandle>(), output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return CookieAndLineWithStatus::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::CookieAndLineWithStatus_UnserializedMessageContext<
UserType, CookieAndLineWithStatus::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<CookieAndLineWithStatus::DataView>(
input.payload(), input.payload_num_bytes(),
std::move(*input.mutable_handles()), output, Validate);
}
// @generated_from: network.mojom.CookieAndLineWithStatus.cookie
base::Optional<net::CanonicalCookie> cookie;
// @generated_from: network.mojom.CookieAndLineWithStatus.cookie_string
std::string cookie_string;
// @generated_from: network.mojom.CookieAndLineWithStatus.status
net::CanonicalCookie::CookieInclusionStatus status;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, CookieAndLineWithStatus::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, CookieAndLineWithStatus::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, CookieAndLineWithStatus::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, CookieAndLineWithStatus::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: network.mojom.CookieDeletionFilter
class CookieDeletionFilter {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<CookieDeletionFilter, T>::value>;
using DataView = CookieDeletionFilterDataView;
using Data_ = internal::CookieDeletionFilter_Data;
template <typename... Args>
static CookieDeletionFilterPtr New(Args&&... args) {
return CookieDeletionFilterPtr(
base::in_place, std::forward<Args>(args)...);
}
template <typename U>
static CookieDeletionFilterPtr From(const U& u) {
return mojo::TypeConverter<CookieDeletionFilterPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, CookieDeletionFilter>::Convert(*this);
}
CookieDeletionFilter();
CookieDeletionFilter(
base::Optional<base::Time> created_after_time,
base::Optional<base::Time> created_before_time,
const base::Optional<std::vector<std::string>>& excluding_domains,
const base::Optional<std::vector<std::string>>& including_domains,
const base::Optional<std::string>& cookie_name,
const base::Optional<std::string>& host_name,
const base::Optional<GURL>& url,
CookieDeletionSessionControl session_control);
~CookieDeletionFilter();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = CookieDeletionFilterPtr>
CookieDeletionFilterPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, CookieDeletionFilter::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
CookieDeletionFilter::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
CookieDeletionFilter::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::CookieDeletionFilter_UnserializedMessageContext<
UserType, CookieDeletionFilter::DataView>>(0, 0, std::move(input)));
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
return mojo::internal::DeserializeImpl<CookieDeletionFilter::DataView>(
data, data_num_bytes, std::vector<mojo::ScopedHandle>(), output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return CookieDeletionFilter::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::CookieDeletionFilter_UnserializedMessageContext<
UserType, CookieDeletionFilter::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<CookieDeletionFilter::DataView>(
input.payload(), input.payload_num_bytes(),
std::move(*input.mutable_handles()), output, Validate);
}
// @generated_from: network.mojom.CookieDeletionFilter.created_after_time
base::Optional<base::Time> created_after_time;
// @generated_from: network.mojom.CookieDeletionFilter.created_before_time
base::Optional<base::Time> created_before_time;
// @generated_from: network.mojom.CookieDeletionFilter.excluding_domains
base::Optional<std::vector<std::string>> excluding_domains;
// @generated_from: network.mojom.CookieDeletionFilter.including_domains
base::Optional<std::vector<std::string>> including_domains;
// @generated_from: network.mojom.CookieDeletionFilter.cookie_name
base::Optional<std::string> cookie_name;
// @generated_from: network.mojom.CookieDeletionFilter.host_name
base::Optional<std::string> host_name;
// @generated_from: network.mojom.CookieDeletionFilter.url
base::Optional<GURL> url;
// @generated_from: network.mojom.CookieDeletionFilter.session_control
CookieDeletionSessionControl session_control;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, CookieDeletionFilter::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, CookieDeletionFilter::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, CookieDeletionFilter::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, CookieDeletionFilter::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
template <typename StructPtrType>
CookieManagerParamsPtr CookieManagerParams::Clone() const {
return New(
mojo::Clone(block_third_party_cookies),
mojo::Clone(settings),
mojo::Clone(secure_origin_cookies_allowed_schemes),
mojo::Clone(matching_scheme_cookies_allowed_schemes),
mojo::Clone(third_party_cookies_allowed_schemes),
mojo::Clone(allow_file_scheme_cookies)
);
}
template <typename T, CookieManagerParams::EnableIfSame<T>*>
bool CookieManagerParams::Equals(const T& other_struct) const {
if (!mojo::Equals(this->block_third_party_cookies, other_struct.block_third_party_cookies))
return false;
if (!mojo::Equals(this->settings, other_struct.settings))
return false;
if (!mojo::Equals(this->secure_origin_cookies_allowed_schemes, other_struct.secure_origin_cookies_allowed_schemes))
return false;
if (!mojo::Equals(this->matching_scheme_cookies_allowed_schemes, other_struct.matching_scheme_cookies_allowed_schemes))
return false;
if (!mojo::Equals(this->third_party_cookies_allowed_schemes, other_struct.third_party_cookies_allowed_schemes))
return false;
if (!mojo::Equals(this->allow_file_scheme_cookies, other_struct.allow_file_scheme_cookies))
return false;
return true;
}
template <typename T, CookieManagerParams::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.block_third_party_cookies < rhs.block_third_party_cookies)
return true;
if (rhs.block_third_party_cookies < lhs.block_third_party_cookies)
return false;
if (lhs.settings < rhs.settings)
return true;
if (rhs.settings < lhs.settings)
return false;
if (lhs.secure_origin_cookies_allowed_schemes < rhs.secure_origin_cookies_allowed_schemes)
return true;
if (rhs.secure_origin_cookies_allowed_schemes < lhs.secure_origin_cookies_allowed_schemes)
return false;
if (lhs.matching_scheme_cookies_allowed_schemes < rhs.matching_scheme_cookies_allowed_schemes)
return true;
if (rhs.matching_scheme_cookies_allowed_schemes < lhs.matching_scheme_cookies_allowed_schemes)
return false;
if (lhs.third_party_cookies_allowed_schemes < rhs.third_party_cookies_allowed_schemes)
return true;
if (rhs.third_party_cookies_allowed_schemes < lhs.third_party_cookies_allowed_schemes)
return false;
if (lhs.allow_file_scheme_cookies < rhs.allow_file_scheme_cookies)
return true;
if (rhs.allow_file_scheme_cookies < lhs.allow_file_scheme_cookies)
return false;
return false;
}
template <typename StructPtrType>
CookieOptionsPtr CookieOptions::Clone() const {
return New(
mojo::Clone(exclude_httponly),
mojo::Clone(same_site_cookie_context),
mojo::Clone(update_access_time),
mojo::Clone(server_time),
mojo::Clone(return_excluded_cookies)
);
}
template <typename T, CookieOptions::EnableIfSame<T>*>
bool CookieOptions::Equals(const T& other_struct) const {
if (!mojo::Equals(this->exclude_httponly, other_struct.exclude_httponly))
return false;
if (!mojo::Equals(this->same_site_cookie_context, other_struct.same_site_cookie_context))
return false;
if (!mojo::Equals(this->update_access_time, other_struct.update_access_time))
return false;
if (!mojo::Equals(this->server_time, other_struct.server_time))
return false;
if (!mojo::Equals(this->return_excluded_cookies, other_struct.return_excluded_cookies))
return false;
return true;
}
template <typename T, CookieOptions::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.exclude_httponly < rhs.exclude_httponly)
return true;
if (rhs.exclude_httponly < lhs.exclude_httponly)
return false;
if (lhs.same_site_cookie_context < rhs.same_site_cookie_context)
return true;
if (rhs.same_site_cookie_context < lhs.same_site_cookie_context)
return false;
if (lhs.update_access_time < rhs.update_access_time)
return true;
if (rhs.update_access_time < lhs.update_access_time)
return false;
if (lhs.server_time < rhs.server_time)
return true;
if (rhs.server_time < lhs.server_time)
return false;
if (lhs.return_excluded_cookies < rhs.return_excluded_cookies)
return true;
if (rhs.return_excluded_cookies < lhs.return_excluded_cookies)
return false;
return false;
}
template <typename StructPtrType>
CanonicalCookiePtr CanonicalCookie::Clone() const {
return New(
mojo::Clone(name),
mojo::Clone(value),
mojo::Clone(domain),
mojo::Clone(path),
mojo::Clone(creation),
mojo::Clone(expiry),
mojo::Clone(last_access),
mojo::Clone(secure),
mojo::Clone(httponly),
mojo::Clone(site_restrictions),
mojo::Clone(priority)
);
}
template <typename T, CanonicalCookie::EnableIfSame<T>*>
bool CanonicalCookie::Equals(const T& other_struct) const {
if (!mojo::Equals(this->name, other_struct.name))
return false;
if (!mojo::Equals(this->value, other_struct.value))
return false;
if (!mojo::Equals(this->domain, other_struct.domain))
return false;
if (!mojo::Equals(this->path, other_struct.path))
return false;
if (!mojo::Equals(this->creation, other_struct.creation))
return false;
if (!mojo::Equals(this->expiry, other_struct.expiry))
return false;
if (!mojo::Equals(this->last_access, other_struct.last_access))
return false;
if (!mojo::Equals(this->secure, other_struct.secure))
return false;
if (!mojo::Equals(this->httponly, other_struct.httponly))
return false;
if (!mojo::Equals(this->site_restrictions, other_struct.site_restrictions))
return false;
if (!mojo::Equals(this->priority, other_struct.priority))
return false;
return true;
}
template <typename T, CanonicalCookie::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.name < rhs.name)
return true;
if (rhs.name < lhs.name)
return false;
if (lhs.value < rhs.value)
return true;
if (rhs.value < lhs.value)
return false;
if (lhs.domain < rhs.domain)
return true;
if (rhs.domain < lhs.domain)
return false;
if (lhs.path < rhs.path)
return true;
if (rhs.path < lhs.path)
return false;
if (lhs.creation < rhs.creation)
return true;
if (rhs.creation < lhs.creation)
return false;
if (lhs.expiry < rhs.expiry)
return true;
if (rhs.expiry < lhs.expiry)
return false;
if (lhs.last_access < rhs.last_access)
return true;
if (rhs.last_access < lhs.last_access)
return false;
if (lhs.secure < rhs.secure)
return true;
if (rhs.secure < lhs.secure)
return false;
if (lhs.httponly < rhs.httponly)
return true;
if (rhs.httponly < lhs.httponly)
return false;
if (lhs.site_restrictions < rhs.site_restrictions)
return true;
if (rhs.site_restrictions < lhs.site_restrictions)
return false;
if (lhs.priority < rhs.priority)
return true;
if (rhs.priority < lhs.priority)
return false;
return false;
}
template <typename StructPtrType>
CookieWithStatusPtr CookieWithStatus::Clone() const {
return New(
mojo::Clone(cookie),
mojo::Clone(status)
);
}
template <typename T, CookieWithStatus::EnableIfSame<T>*>
bool CookieWithStatus::Equals(const T& other_struct) const {
if (!mojo::Equals(this->cookie, other_struct.cookie))
return false;
if (!mojo::Equals(this->status, other_struct.status))
return false;
return true;
}
template <typename T, CookieWithStatus::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.cookie < rhs.cookie)
return true;
if (rhs.cookie < lhs.cookie)
return false;
if (lhs.status < rhs.status)
return true;
if (rhs.status < lhs.status)
return false;
return false;
}
template <typename StructPtrType>
CookieAndLineWithStatusPtr CookieAndLineWithStatus::Clone() const {
return New(
mojo::Clone(cookie),
mojo::Clone(cookie_string),
mojo::Clone(status)
);
}
template <typename T, CookieAndLineWithStatus::EnableIfSame<T>*>
bool CookieAndLineWithStatus::Equals(const T& other_struct) const {
if (!mojo::Equals(this->cookie, other_struct.cookie))
return false;
if (!mojo::Equals(this->cookie_string, other_struct.cookie_string))
return false;
if (!mojo::Equals(this->status, other_struct.status))
return false;
return true;
}
template <typename T, CookieAndLineWithStatus::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.cookie < rhs.cookie)
return true;
if (rhs.cookie < lhs.cookie)
return false;
if (lhs.cookie_string < rhs.cookie_string)
return true;
if (rhs.cookie_string < lhs.cookie_string)
return false;
if (lhs.status < rhs.status)
return true;
if (rhs.status < lhs.status)
return false;
return false;
}
template <typename StructPtrType>
CookieDeletionFilterPtr CookieDeletionFilter::Clone() const {
return New(
mojo::Clone(created_after_time),
mojo::Clone(created_before_time),
mojo::Clone(excluding_domains),
mojo::Clone(including_domains),
mojo::Clone(cookie_name),
mojo::Clone(host_name),
mojo::Clone(url),
mojo::Clone(session_control)
);
}
template <typename T, CookieDeletionFilter::EnableIfSame<T>*>
bool CookieDeletionFilter::Equals(const T& other_struct) const {
if (!mojo::Equals(this->created_after_time, other_struct.created_after_time))
return false;
if (!mojo::Equals(this->created_before_time, other_struct.created_before_time))
return false;
if (!mojo::Equals(this->excluding_domains, other_struct.excluding_domains))
return false;
if (!mojo::Equals(this->including_domains, other_struct.including_domains))
return false;
if (!mojo::Equals(this->cookie_name, other_struct.cookie_name))
return false;
if (!mojo::Equals(this->host_name, other_struct.host_name))
return false;
if (!mojo::Equals(this->url, other_struct.url))
return false;
if (!mojo::Equals(this->session_control, other_struct.session_control))
return false;
return true;
}
template <typename T, CookieDeletionFilter::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.created_after_time < rhs.created_after_time)
return true;
if (rhs.created_after_time < lhs.created_after_time)
return false;
if (lhs.created_before_time < rhs.created_before_time)
return true;
if (rhs.created_before_time < lhs.created_before_time)
return false;
if (lhs.excluding_domains < rhs.excluding_domains)
return true;
if (rhs.excluding_domains < lhs.excluding_domains)
return false;
if (lhs.including_domains < rhs.including_domains)
return true;
if (rhs.including_domains < lhs.including_domains)
return false;
if (lhs.cookie_name < rhs.cookie_name)
return true;
if (rhs.cookie_name < lhs.cookie_name)
return false;
if (lhs.host_name < rhs.host_name)
return true;
if (rhs.host_name < lhs.host_name)
return false;
if (lhs.url < rhs.url)
return true;
if (rhs.url < lhs.url)
return false;
if (lhs.session_control < rhs.session_control)
return true;
if (rhs.session_control < lhs.session_control)
return false;
return false;
}
} // namespace mojom
} // namespace network
namespace mojo {
template <>
struct StructTraits<::network::mojom::CookieManagerParams::DataView,
::network::mojom::CookieManagerParamsPtr> {
static bool IsNull(const ::network::mojom::CookieManagerParamsPtr& input) { return !input; }
static void SetToNull(::network::mojom::CookieManagerParamsPtr* output) { output->reset(); }
static decltype(::network::mojom::CookieManagerParams::block_third_party_cookies) block_third_party_cookies(
const ::network::mojom::CookieManagerParamsPtr& input) {
return input->block_third_party_cookies;
}
static const decltype(::network::mojom::CookieManagerParams::settings)& settings(
const ::network::mojom::CookieManagerParamsPtr& input) {
return input->settings;
}
static const decltype(::network::mojom::CookieManagerParams::secure_origin_cookies_allowed_schemes)& secure_origin_cookies_allowed_schemes(
const ::network::mojom::CookieManagerParamsPtr& input) {
return input->secure_origin_cookies_allowed_schemes;
}
static const decltype(::network::mojom::CookieManagerParams::matching_scheme_cookies_allowed_schemes)& matching_scheme_cookies_allowed_schemes(
const ::network::mojom::CookieManagerParamsPtr& input) {
return input->matching_scheme_cookies_allowed_schemes;
}
static const decltype(::network::mojom::CookieManagerParams::third_party_cookies_allowed_schemes)& third_party_cookies_allowed_schemes(
const ::network::mojom::CookieManagerParamsPtr& input) {
return input->third_party_cookies_allowed_schemes;
}
static decltype(::network::mojom::CookieManagerParams::allow_file_scheme_cookies) allow_file_scheme_cookies(
const ::network::mojom::CookieManagerParamsPtr& input) {
return input->allow_file_scheme_cookies;
}
static bool Read(::network::mojom::CookieManagerParams::DataView input, ::network::mojom::CookieManagerParamsPtr* output);
};
template <>
struct StructTraits<::network::mojom::CookieOptions::DataView,
::network::mojom::CookieOptionsPtr> {
static bool IsNull(const ::network::mojom::CookieOptionsPtr& input) { return !input; }
static void SetToNull(::network::mojom::CookieOptionsPtr* output) { output->reset(); }
static decltype(::network::mojom::CookieOptions::exclude_httponly) exclude_httponly(
const ::network::mojom::CookieOptionsPtr& input) {
return input->exclude_httponly;
}
static decltype(::network::mojom::CookieOptions::same_site_cookie_context) same_site_cookie_context(
const ::network::mojom::CookieOptionsPtr& input) {
return input->same_site_cookie_context;
}
static decltype(::network::mojom::CookieOptions::update_access_time) update_access_time(
const ::network::mojom::CookieOptionsPtr& input) {
return input->update_access_time;
}
static const decltype(::network::mojom::CookieOptions::server_time)& server_time(
const ::network::mojom::CookieOptionsPtr& input) {
return input->server_time;
}
static decltype(::network::mojom::CookieOptions::return_excluded_cookies) return_excluded_cookies(
const ::network::mojom::CookieOptionsPtr& input) {
return input->return_excluded_cookies;
}
static bool Read(::network::mojom::CookieOptions::DataView input, ::network::mojom::CookieOptionsPtr* output);
};
template <>
struct StructTraits<::network::mojom::CanonicalCookie::DataView,
::network::mojom::CanonicalCookiePtr> {
static bool IsNull(const ::network::mojom::CanonicalCookiePtr& input) { return !input; }
static void SetToNull(::network::mojom::CanonicalCookiePtr* output) { output->reset(); }
static const decltype(::network::mojom::CanonicalCookie::name)& name(
const ::network::mojom::CanonicalCookiePtr& input) {
return input->name;
}
static const decltype(::network::mojom::CanonicalCookie::value)& value(
const ::network::mojom::CanonicalCookiePtr& input) {
return input->value;
}
static const decltype(::network::mojom::CanonicalCookie::domain)& domain(
const ::network::mojom::CanonicalCookiePtr& input) {
return input->domain;
}
static const decltype(::network::mojom::CanonicalCookie::path)& path(
const ::network::mojom::CanonicalCookiePtr& input) {
return input->path;
}
static const decltype(::network::mojom::CanonicalCookie::creation)& creation(
const ::network::mojom::CanonicalCookiePtr& input) {
return input->creation;
}
static const decltype(::network::mojom::CanonicalCookie::expiry)& expiry(
const ::network::mojom::CanonicalCookiePtr& input) {
return input->expiry;
}
static const decltype(::network::mojom::CanonicalCookie::last_access)& last_access(
const ::network::mojom::CanonicalCookiePtr& input) {
return input->last_access;
}
static decltype(::network::mojom::CanonicalCookie::secure) secure(
const ::network::mojom::CanonicalCookiePtr& input) {
return input->secure;
}
static decltype(::network::mojom::CanonicalCookie::httponly) httponly(
const ::network::mojom::CanonicalCookiePtr& input) {
return input->httponly;
}
static decltype(::network::mojom::CanonicalCookie::site_restrictions) site_restrictions(
const ::network::mojom::CanonicalCookiePtr& input) {
return input->site_restrictions;
}
static decltype(::network::mojom::CanonicalCookie::priority) priority(
const ::network::mojom::CanonicalCookiePtr& input) {
return input->priority;
}
static bool Read(::network::mojom::CanonicalCookie::DataView input, ::network::mojom::CanonicalCookiePtr* output);
};
template <>
struct StructTraits<::network::mojom::CookieWithStatus::DataView,
::network::mojom::CookieWithStatusPtr> {
static bool IsNull(const ::network::mojom::CookieWithStatusPtr& input) { return !input; }
static void SetToNull(::network::mojom::CookieWithStatusPtr* output) { output->reset(); }
static const decltype(::network::mojom::CookieWithStatus::cookie)& cookie(
const ::network::mojom::CookieWithStatusPtr& input) {
return input->cookie;
}
static decltype(::network::mojom::CookieWithStatus::status) status(
const ::network::mojom::CookieWithStatusPtr& input) {
return input->status;
}
static bool Read(::network::mojom::CookieWithStatus::DataView input, ::network::mojom::CookieWithStatusPtr* output);
};
template <>
struct StructTraits<::network::mojom::CookieAndLineWithStatus::DataView,
::network::mojom::CookieAndLineWithStatusPtr> {
static bool IsNull(const ::network::mojom::CookieAndLineWithStatusPtr& input) { return !input; }
static void SetToNull(::network::mojom::CookieAndLineWithStatusPtr* output) { output->reset(); }
static const decltype(::network::mojom::CookieAndLineWithStatus::cookie)& cookie(
const ::network::mojom::CookieAndLineWithStatusPtr& input) {
return input->cookie;
}
static const decltype(::network::mojom::CookieAndLineWithStatus::cookie_string)& cookie_string(
const ::network::mojom::CookieAndLineWithStatusPtr& input) {
return input->cookie_string;
}
static decltype(::network::mojom::CookieAndLineWithStatus::status) status(
const ::network::mojom::CookieAndLineWithStatusPtr& input) {
return input->status;
}
static bool Read(::network::mojom::CookieAndLineWithStatus::DataView input, ::network::mojom::CookieAndLineWithStatusPtr* output);
};
template <>
struct StructTraits<::network::mojom::CookieDeletionFilter::DataView,
::network::mojom::CookieDeletionFilterPtr> {
static bool IsNull(const ::network::mojom::CookieDeletionFilterPtr& input) { return !input; }
static void SetToNull(::network::mojom::CookieDeletionFilterPtr* output) { output->reset(); }
static const decltype(::network::mojom::CookieDeletionFilter::created_after_time)& created_after_time(
const ::network::mojom::CookieDeletionFilterPtr& input) {
return input->created_after_time;
}
static const decltype(::network::mojom::CookieDeletionFilter::created_before_time)& created_before_time(
const ::network::mojom::CookieDeletionFilterPtr& input) {
return input->created_before_time;
}
static const decltype(::network::mojom::CookieDeletionFilter::excluding_domains)& excluding_domains(
const ::network::mojom::CookieDeletionFilterPtr& input) {
return input->excluding_domains;
}
static const decltype(::network::mojom::CookieDeletionFilter::including_domains)& including_domains(
const ::network::mojom::CookieDeletionFilterPtr& input) {
return input->including_domains;
}
static const decltype(::network::mojom::CookieDeletionFilter::cookie_name)& cookie_name(
const ::network::mojom::CookieDeletionFilterPtr& input) {
return input->cookie_name;
}
static const decltype(::network::mojom::CookieDeletionFilter::host_name)& host_name(
const ::network::mojom::CookieDeletionFilterPtr& input) {
return input->host_name;
}
static const decltype(::network::mojom::CookieDeletionFilter::url)& url(
const ::network::mojom::CookieDeletionFilterPtr& input) {
return input->url;
}
static decltype(::network::mojom::CookieDeletionFilter::session_control) session_control(
const ::network::mojom::CookieDeletionFilterPtr& input) {
return input->session_control;
}
static bool Read(::network::mojom::CookieDeletionFilter::DataView input, ::network::mojom::CookieDeletionFilterPtr* output);
};
} // namespace mojo
#endif // SERVICES_NETWORK_PUBLIC_MOJOM_COOKIE_MANAGER_MOJOM_H_
/* Metadata comment
eyJtZXRhIjogW3siZW5kIjogMjM4NSwgImJlZ2luIjogMjM2NSwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogIm5ldHdvcmsubW9qb20uQ29va2llQ2hhbmdlTGlzdGVu
ZXIifX0sIHsiZW5kIjogMzE0OSwgImJlZ2luIjogMzEzNSwgImVkZ2UiOiAiJS9reXRoZS9lZGdl
L2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMi
OiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAi
bW9qb20iLCAic2lnbmF0dXJlIjogIm5ldHdvcmsubW9qb20uQ29va2llQ2hhbmdlTGlzdGVuZXIu
T25Db29raWVDaGFuZ2UifX0sIHsiZW5kIjogMzQ1MiwgImJlZ2luIjogMzQzOSwgImVkZ2UiOiAi
JS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1l
IjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAi
bGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm5ldHdvcmsubW9qb20uQ29va2llTWFu
YWdlciJ9fSwgeyJlbmQiOiA0NzUxLCAiYmVnaW4iOiA0NzM4LCAiZWRnZSI6ICIlL2t5dGhlL2Vk
Z2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1
cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6
ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibmV0d29yay5tb2pvbS5Db29raWVNYW5hZ2VyLkdldEFs
bENvb2tpZXMifX0sIHsiZW5kIjogNTAyNywgImJlZ2luIjogNTAxNCwgImVkZ2UiOiAiJS9reXRo
ZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJj
b3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3Vh
Z2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm5ldHdvcmsubW9qb20uQ29va2llTWFuYWdlci5H
ZXRDb29raWVMaXN0In19LCB7ImVuZCI6IDUzMzcsICJiZWdpbiI6IDUzMTksICJlZGdlIjogIiUv
a3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6
IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxh
bmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJuZXR3b3JrLm1vam9tLkNvb2tpZU1hbmFn
ZXIuU2V0Q2Fub25pY2FsQ29va2llIn19LCB7ImVuZCI6IDU2NzUsICJiZWdpbiI6IDU2NTQsICJl
ZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIs
ICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0v
c3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJuZXR3b3JrLm1vam9tLkNv
b2tpZU1hbmFnZXIuRGVsZXRlQ2Fub25pY2FsQ29va2llIn19LCB7ImVuZCI6IDU5MjAsICJiZWdp
biI6IDU5MDcsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNo
b3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJuZXR3
b3JrLm1vam9tLkNvb2tpZU1hbmFnZXIuRGVsZXRlQ29va2llcyJ9fSwgeyJlbmQiOiA2MTA0LCAi
YmVnaW4iOiA2MDgxLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAi
YW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3Vy
Y2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAi
bmV0d29yay5tb2pvbS5Db29raWVNYW5hZ2VyLkFkZENvb2tpZUNoYW5nZUxpc3RlbmVyIn19LCB7
ImVuZCI6IDYzMDAsICJiZWdpbiI6IDYyNzcsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0
ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwg
InNpZ25hdHVyZSI6ICJuZXR3b3JrLm1vam9tLkNvb2tpZU1hbmFnZXIuQWRkR2xvYmFsQ2hhbmdl
TGlzdGVuZXIifX0sIHsiZW5kIjogNjQ0OCwgImJlZ2luIjogNjQzNCwgImVkZ2UiOiAiJS9reXRo
ZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJj
b3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3Vh
Z2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm5ldHdvcmsubW9qb20uQ29va2llTWFuYWdlci5D
bG9uZUludGVyZmFjZSJ9fSwgeyJlbmQiOiA2NjU0LCAiYmVnaW4iOiA2NjM4LCAiZWRnZSI6ICIl
L2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUi
OiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJs
YW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibmV0d29yay5tb2pvbS5Db29raWVNYW5h
Z2VyLkZsdXNoQ29va2llU3RvcmUifX0sIHsiZW5kIjogNjg4MSwgImJlZ2luIjogNjg1OSwgImVk
Z2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwg
InZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9z
cmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm5ldHdvcmsubW9qb20uQ29v
a2llTWFuYWdlci5BbGxvd0ZpbGVTY2hlbWVDb29raWVzIn19LCB7ImVuZCI6IDcwNDQsICJiZWdp
biI6IDcwMjYsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNo
b3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJuZXR3
b3JrLm1vam9tLkNvb2tpZU1hbmFnZXIuU2V0Q29udGVudFNldHRpbmdzIn19LCB7ImVuZCI6IDcy
MjYsICJiZWdpbiI6IDcyMDIsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlw
ZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2ds
ZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVy
ZSI6ICJuZXR3b3JrLm1vam9tLkNvb2tpZU1hbmFnZXIuU2V0Rm9yY2VLZWVwU2Vzc2lvblN0YXRl
In19LCB7ImVuZCI6IDczNDYsICJiZWdpbiI6IDczMjQsICJlZGdlIjogIiUva3l0aGUvZWRnZS9n
ZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjog
ImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1v
am9tIiwgInNpZ25hdHVyZSI6ICJuZXR3b3JrLm1vam9tLkNvb2tpZU1hbmFnZXIuQmxvY2tUaGly
ZFBhcnR5Q29va2llcyJ9fSwgeyJlbmQiOiAxMjI1MiwgImJlZ2luIjogMTIyMzMsICJlZGdlIjog
IiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFt
ZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwg
Imxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJuZXR3b3JrLm1vam9tLkNvb2tpZU1h
bmFnZXJQYXJhbXMifX0sIHsiZW5kIjogMTYyNjIsICJiZWdpbiI6IDE2MjM3LCAiZWRnZSI6ICIl
L2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUi
OiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJs
YW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibmV0d29yay5tb2pvbS5Db29raWVNYW5h
Z2VyUGFyYW1zLmJsb2NrX3RoaXJkX3BhcnR5X2Nvb2tpZXMifX0sIHsiZW5kIjogMTYzODMsICJi
ZWdpbiI6IDE2Mzc1LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAi
YW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3Vy
Y2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAi
bmV0d29yay5tb2pvbS5Db29raWVNYW5hZ2VyUGFyYW1zLnNldHRpbmdzIn19LCB7ImVuZCI6IDE2
NTQ0LCAiYmVnaW4iOiAxNjUwNywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0
eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29v
Z2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0
dXJlIjogIm5ldHdvcmsubW9qb20uQ29va2llTWFuYWdlclBhcmFtcy5zZWN1cmVfb3JpZ2luX2Nv
b2tpZXNfYWxsb3dlZF9zY2hlbWVzIn19LCB7ImVuZCI6IDE2NzA5LCAiYmVnaW4iOiAxNjY3MCwg
ImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVz
IiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1
bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm5ldHdvcmsubW9qb20u
Q29va2llTWFuYWdlclBhcmFtcy5tYXRjaGluZ19zY2hlbWVfY29va2llc19hbGxvd2VkX3NjaGVt
ZXMifX0sIHsiZW5kIjogMTY4NjYsICJiZWdpbiI6IDE2ODMxLCAiZWRnZSI6ICIlL2t5dGhlL2Vk
Z2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1
cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6
ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibmV0d29yay5tb2pvbS5Db29raWVNYW5hZ2VyUGFyYW1z
LnRoaXJkX3BhcnR5X2Nvb2tpZXNfYWxsb3dlZF9zY2hlbWVzIn19LCB7ImVuZCI6IDE2OTgzLCAi
YmVnaW4iOiAxNjk1OCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjog
ImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjog
Im5ldHdvcmsubW9qb20uQ29va2llTWFuYWdlclBhcmFtcy5hbGxvd19maWxlX3NjaGVtZV9jb29r
aWVzIn19LCB7ImVuZCI6IDE3OTM3LCAiYmVnaW4iOiAxNzkyNCwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogIm5ldHdvcmsubW9qb20uQ29va2llT3B0aW9ucyJ9fSwg
eyJlbmQiOiAyMTYyOCwgImJlZ2luIjogMjE2MTIsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5l
cmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNo
cm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9t
IiwgInNpZ25hdHVyZSI6ICJuZXR3b3JrLm1vam9tLkNvb2tpZU9wdGlvbnMuZXhjbHVkZV9odHRw
b25seSJ9fSwgeyJlbmQiOiAyMTc3NCwgImJlZ2luIjogMjE3NTAsICJlZGdlIjogIiUva3l0aGUv
ZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdl
IjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJuZXR3b3JrLm1vam9tLkNvb2tpZU9wdGlvbnMuc2Ft
ZV9zaXRlX2Nvb2tpZV9jb250ZXh0In19LCB7ImVuZCI6IDIxODcxLCAiYmVnaW4iOiAyMTg1Mywg
ImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVz
IiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1
bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm5ldHdvcmsubW9qb20u
Q29va2llT3B0aW9ucy51cGRhdGVfYWNjZXNzX3RpbWUifX0sIHsiZW5kIjogMjE5NzYsICJiZWdp
biI6IDIxOTY1LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5j
aG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2Uu
Y29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibmV0
d29yay5tb2pvbS5Db29raWVPcHRpb25zLnNlcnZlcl90aW1lIn19LCB7ImVuZCI6IDIyMDgzLCAi
YmVnaW4iOiAyMjA2MCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjog
ImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjog
Im5ldHdvcmsubW9qb20uQ29va2llT3B0aW9ucy5yZXR1cm5fZXhjbHVkZWRfY29va2llcyJ9fSwg
eyJlbmQiOiAyMzAxNywgImJlZ2luIjogMjMwMDIsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5l
cmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNo
cm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9t
IiwgInNpZ25hdHVyZSI6ICJuZXR3b3JrLm1vam9tLkNhbm9uaWNhbENvb2tpZSJ9fSwgeyJlbmQi
OiAyNjg1MywgImJlZ2luIjogMjY4NDksICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMi
LCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVt
Lmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNp
Z25hdHVyZSI6ICJuZXR3b3JrLm1vam9tLkNhbm9uaWNhbENvb2tpZS5uYW1lIn19LCB7ImVuZCI6
IDI2OTMzLCAiYmVnaW4iOiAyNjkyOCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIs
ICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0u
Z29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2ln
bmF0dXJlIjogIm5ldHdvcmsubW9qb20uQ2Fub25pY2FsQ29va2llLnZhbHVlIn19LCB7ImVuZCI6
IDI3MDE1LCAiYmVnaW4iOiAyNzAwOSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIs
ICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0u
Z29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2ln
bmF0dXJlIjogIm5ldHdvcmsubW9qb20uQ2Fub25pY2FsQ29va2llLmRvbWFpbiJ9fSwgeyJlbmQi
OiAyNzA5MywgImJlZ2luIjogMjcwODksICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMi
LCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVt
Lmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNp
Z25hdHVyZSI6ICJuZXR3b3JrLm1vam9tLkNhbm9uaWNhbENvb2tpZS5wYXRoIn19LCB7ImVuZCI6
IDI3MTc4LCAiYmVnaW4iOiAyNzE3MCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIs
ICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0u
Z29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2ln
bmF0dXJlIjogIm5ldHdvcmsubW9qb20uQ2Fub25pY2FsQ29va2llLmNyZWF0aW9uIn19LCB7ImVu
ZCI6IDI3MjU5LCAiYmVnaW4iOiAyNzI1MywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRl
cyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21p
dW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAi
c2lnbmF0dXJlIjogIm5ldHdvcmsubW9qb20uQ2Fub25pY2FsQ29va2llLmV4cGlyeSJ9fSwgeyJl
bmQiOiAyNzM1MCwgImJlZ2luIjogMjczMzksICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0
ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwg
InNpZ25hdHVyZSI6ICJuZXR3b3JrLm1vam9tLkNhbm9uaWNhbENvb2tpZS5sYXN0X2FjY2VzcyJ9
fSwgeyJlbmQiOiAyNzQyNSwgImJlZ2luIjogMjc0MTksICJlZGdlIjogIiUva3l0aGUvZWRnZS9n
ZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjog
ImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1v
am9tIiwgInNpZ25hdHVyZSI6ICJuZXR3b3JrLm1vam9tLkNhbm9uaWNhbENvb2tpZS5zZWN1cmUi
fX0sIHsiZW5kIjogMjc1MDQsICJiZWdpbiI6IDI3NDk2LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2Uv
Z2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6
ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJt
b2pvbSIsICJzaWduYXR1cmUiOiAibmV0d29yay5tb2pvbS5DYW5vbmljYWxDb29raWUuaHR0cG9u
bHkifX0sIHsiZW5kIjogMjc2MTYsICJiZWdpbiI6IDI3NTk5LCAiZWRnZSI6ICIlL2t5dGhlL2Vk
Z2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1
cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6
ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibmV0d29yay5tb2pvbS5DYW5vbmljYWxDb29raWUuc2l0
ZV9yZXN0cmljdGlvbnMifX0sIHsiZW5kIjogMjc3MTAsICJiZWdpbiI6IDI3NzAyLCAiZWRnZSI6
ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5h
bWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIs
ICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibmV0d29yay5tb2pvbS5DYW5vbmlj
YWxDb29raWUucHJpb3JpdHkifX0sIHsiZW5kIjogMjg2NTQsICJiZWdpbiI6IDI4NjM4LCAiZWRn
ZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAi
dm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3Ny
YyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibmV0d29yay5tb2pvbS5Db29r
aWVXaXRoU3RhdHVzIn19LCB7ImVuZCI6IDMyMjk3LCAiYmVnaW4iOiAzMjI5MSwgImVkZ2UiOiAi
JS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1l
IjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAi
bGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm5ldHdvcmsubW9qb20uQ29va2llV2l0
aFN0YXR1cy5jb29raWUifX0sIHsiZW5kIjogMzI0MTIsICJiZWdpbiI6IDMyNDA2LCAiZWRnZSI6
ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5h
bWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIs
ICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibmV0d29yay5tb2pvbS5Db29raWVX
aXRoU3RhdHVzLnN0YXR1cyJ9fSwgeyJlbmQiOiAzMzM3NCwgImJlZ2luIjogMzMzNTEsICJlZGdl
IjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2
bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3Jj
IiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJuZXR3b3JrLm1vam9tLkNvb2tp
ZUFuZExpbmVXaXRoU3RhdHVzIn19LCB7ImVuZCI6IDM3MjU3LCAiYmVnaW4iOiAzNzI1MSwgImVk
Z2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwg
InZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9z
cmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm5ldHdvcmsubW9qb20uQ29v
a2llQW5kTGluZVdpdGhTdGF0dXMuY29va2llIn19LCB7ImVuZCI6IDM3MzYxLCAiYmVnaW4iOiAz
NzM0OCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
aHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm5ldHdvcmsu
bW9qb20uQ29va2llQW5kTGluZVdpdGhTdGF0dXMuY29va2llX3N0cmluZyJ9fSwgeyJlbmQiOiAz
NzQ4MywgImJlZ2luIjogMzc0NzcsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAi
dHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdv
b2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25h
dHVyZSI6ICJuZXR3b3JrLm1vam9tLkNvb2tpZUFuZExpbmVXaXRoU3RhdHVzLnN0YXR1cyJ9fSwg
eyJlbmQiOiAzODQ2NywgImJlZ2luIjogMzg0NDcsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5l
cmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNo
cm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9t
IiwgInNpZ25hdHVyZSI6ICJuZXR3b3JrLm1vam9tLkNvb2tpZURlbGV0aW9uRmlsdGVyIn19LCB7
ImVuZCI6IDQyNTg2LCAiYmVnaW4iOiA0MjU2OCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVy
YXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hy
b21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20i
LCAic2lnbmF0dXJlIjogIm5ldHdvcmsubW9qb20uQ29va2llRGVsZXRpb25GaWx0ZXIuY3JlYXRl
ZF9hZnRlcl90aW1lIn19LCB7ImVuZCI6IDQyNzE0LCAiYmVnaW4iOiA0MjY5NSwgImVkZ2UiOiAi
JS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1l
IjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAi
bGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm5ldHdvcmsubW9qb20uQ29va2llRGVs
ZXRpb25GaWx0ZXIuY3JlYXRlZF9iZWZvcmVfdGltZSJ9fSwgeyJlbmQiOiA0Mjg1MiwgImJlZ2lu
IjogNDI4MzUsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNo
b3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJuZXR3
b3JrLm1vam9tLkNvb2tpZURlbGV0aW9uRmlsdGVyLmV4Y2x1ZGluZ19kb21haW5zIn19LCB7ImVu
ZCI6IDQyOTkwLCAiYmVnaW4iOiA0Mjk3MywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRl
cyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21p
dW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAi
c2lnbmF0dXJlIjogIm5ldHdvcmsubW9qb20uQ29va2llRGVsZXRpb25GaWx0ZXIuaW5jbHVkaW5n
X2RvbWFpbnMifX0sIHsiZW5kIjogNDMxMDMsICJiZWdpbiI6IDQzMDkyLCAiZWRnZSI6ICIlL2t5
dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5n
dWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibmV0d29yay5tb2pvbS5Db29raWVEZWxldGlv
bkZpbHRlci5jb29raWVfbmFtZSJ9fSwgeyJlbmQiOiA0MzIxMiwgImJlZ2luIjogNDMyMDMsICJl
ZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIs
ICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0v
c3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJuZXR3b3JrLm1vam9tLkNv
b2tpZURlbGV0aW9uRmlsdGVyLmhvc3RfbmFtZSJ9fSwgeyJlbmQiOiA0MzMwMiwgImJlZ2luIjog
NDMyOTksICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJuZXR3b3Jr
Lm1vam9tLkNvb2tpZURlbGV0aW9uRmlsdGVyLnVybCJ9fSwgeyJlbmQiOiA0MzQyNCwgImJlZ2lu
IjogNDM0MDksICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNo
b3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJuZXR3
b3JrLm1vam9tLkNvb2tpZURlbGV0aW9uRmlsdGVyLnNlc3Npb25fY29udHJvbCJ9fV0sICJ0eXBl
IjogImt5dGhlMCJ9
*/