blob: e75e2436d08bed0b8cd5d805de2ea83f92728a5d [file] [log] [blame]
// services/device/public/mojom/nfc.mojom-blink.h is auto generated by mojom_bindings_generator.py, do not edit
// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SERVICES_DEVICE_PUBLIC_MOJOM_NFC_MOJOM_BLINK_H_
#define SERVICES_DEVICE_PUBLIC_MOJOM_NFC_MOJOM_BLINK_H_
#include <stdint.h>
#include <limits>
#include <optional>
#include <type_traits>
#include <utility>
#include "base/types/cxx23_to_underlying.h"
#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 "third_party/perfetto/include/perfetto/tracing/traced_value_forward.h"
#include "services/device/public/mojom/nfc.mojom-features.h"
#include "services/device/public/mojom/nfc.mojom-shared.h"
#include "services/device/public/mojom/nfc.mojom-blink-forward.h"
#include "mojo/public/cpp/bindings/lib/wtf_clone_equals_util.h"
#include "mojo/public/cpp/bindings/lib/wtf_hash_util.h"
#include "third_party/blink/renderer/platform/wtf/hash_functions.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
#include "mojo/public/cpp/bindings/lib/control_message_handler.h"
#include "mojo/public/cpp/bindings/lib/message_size_estimator.h"
#include "mojo/public/cpp/bindings/raw_ptr_impl_ref_traits.h"
#include "third_party/blink/public/platform/web_common.h"
#ifdef KYTHE_IS_RUNNING
#pragma kythe_inline_metadata "Metadata comment"
#endif
namespace device::mojom::blink {
class NFCProxy;
template <typename ImplRefTraits>
class NFCStub;
class NFCRequestValidator;
class NFCResponseValidator;
// @generated_from: device.mojom.NFC
class BLINK_PLATFORM_EXPORT NFC
: public NFCInterfaceBase {
public:
using IPCStableHashFunction = uint32_t(*)();
static const char Name_[];
static IPCStableHashFunction MessageToMethodInfo_(mojo::Message& message);
static const char* MessageToMethodName_(mojo::Message& message);
static constexpr uint32_t Version_ = 0;
static constexpr bool PassesAssociatedKinds_ = false;
static constexpr bool HasUninterruptableMethods_ = false;
using Base_ = NFCInterfaceBase;
using Proxy_ = NFCProxy;
template <typename ImplRefTraits>
using Stub_ = NFCStub<ImplRefTraits>;
using RequestValidator_ = NFCRequestValidator;
using ResponseValidator_ = NFCResponseValidator;
enum MethodMinVersions : uint32_t {
kSetClientMinVersion = 0,
kPushMinVersion = 0,
kCancelPushMinVersion = 0,
kMakeReadOnlyMinVersion = 0,
kCancelMakeReadOnlyMinVersion = 0,
kWatchMinVersion = 0,
kCancelWatchMinVersion = 0,
};
// crbug.com/1340245 - this causes binary size bloat on Fuchsia, and we're OK
// with not having this data in traces there.
#if !BUILDFLAG(IS_FUCHSIA)
struct SetClient_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct Push_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct CancelPush_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct MakeReadOnly_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct CancelMakeReadOnly_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct Watch_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct CancelWatch_Sym {
NOINLINE static uint32_t IPCStableHash();
};
#endif // !BUILDFLAG(IS_FUCHSIA)
virtual ~NFC() = default;
// @generated_from: device.mojom.NFC.SetClient
virtual void SetClient(::mojo::PendingRemote<NFCClient> client) = 0;
using PushCallback = base::OnceCallback<void(NDEFErrorPtr)>;
// @generated_from: device.mojom.NFC.Push
virtual void Push(NDEFMessagePtr message, NDEFWriteOptionsPtr options, PushCallback callback) = 0;
// @generated_from: device.mojom.NFC.CancelPush
virtual void CancelPush() = 0;
using MakeReadOnlyCallback = base::OnceCallback<void(NDEFErrorPtr)>;
// @generated_from: device.mojom.NFC.MakeReadOnly
virtual void MakeReadOnly(MakeReadOnlyCallback callback) = 0;
// @generated_from: device.mojom.NFC.CancelMakeReadOnly
virtual void CancelMakeReadOnly() = 0;
using WatchCallback = base::OnceCallback<void(NDEFErrorPtr)>;
// @generated_from: device.mojom.NFC.Watch
virtual void Watch(uint32_t id, WatchCallback callback) = 0;
// @generated_from: device.mojom.NFC.CancelWatch
virtual void CancelWatch(uint32_t id) = 0;
};
class NFCClientProxy;
template <typename ImplRefTraits>
class NFCClientStub;
class NFCClientRequestValidator;
// @generated_from: device.mojom.NFCClient
class BLINK_PLATFORM_EXPORT NFCClient
: public NFCClientInterfaceBase {
public:
using IPCStableHashFunction = uint32_t(*)();
static const char Name_[];
static IPCStableHashFunction MessageToMethodInfo_(mojo::Message& message);
static const char* MessageToMethodName_(mojo::Message& message);
static constexpr uint32_t Version_ = 0;
static constexpr bool PassesAssociatedKinds_ = false;
static constexpr bool HasUninterruptableMethods_ = false;
using Base_ = NFCClientInterfaceBase;
using Proxy_ = NFCClientProxy;
template <typename ImplRefTraits>
using Stub_ = NFCClientStub<ImplRefTraits>;
using RequestValidator_ = NFCClientRequestValidator;
using ResponseValidator_ = mojo::PassThroughFilter;
enum MethodMinVersions : uint32_t {
kOnWatchMinVersion = 0,
kOnErrorMinVersion = 0,
};
// crbug.com/1340245 - this causes binary size bloat on Fuchsia, and we're OK
// with not having this data in traces there.
#if !BUILDFLAG(IS_FUCHSIA)
struct OnWatch_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct OnError_Sym {
NOINLINE static uint32_t IPCStableHash();
};
#endif // !BUILDFLAG(IS_FUCHSIA)
virtual ~NFCClient() = default;
// @generated_from: device.mojom.NFCClient.OnWatch
virtual void OnWatch(const WTF::Vector<uint32_t>& watch_ids, const WTF::String& serial_number, NDEFMessagePtr message) = 0;
// @generated_from: device.mojom.NFCClient.OnError
virtual void OnError(NDEFErrorPtr error) = 0;
};
// @generated_from: device.mojom.NFC
class BLINK_PLATFORM_EXPORT NFCProxy
: public NFC {
public:
using InterfaceType = NFC;
explicit NFCProxy(mojo::MessageReceiverWithResponder* receiver);
// @generated_from: device.mojom.NFC.SetClient
void SetClient(::mojo::PendingRemote<NFCClient> client) final;
// @generated_from: device.mojom.NFC.Push
void Push(NDEFMessagePtr message, NDEFWriteOptionsPtr options, PushCallback callback) final;
// @generated_from: device.mojom.NFC.CancelPush
void CancelPush() final;
// @generated_from: device.mojom.NFC.MakeReadOnly
void MakeReadOnly(MakeReadOnlyCallback callback) final;
// @generated_from: device.mojom.NFC.CancelMakeReadOnly
void CancelMakeReadOnly() final;
// @generated_from: device.mojom.NFC.Watch
void Watch(uint32_t id, WatchCallback callback) final;
// @generated_from: device.mojom.NFC.CancelWatch
void CancelWatch(uint32_t id) final;
private:
mojo::MessageReceiverWithResponder* receiver_;
};
// @generated_from: device.mojom.NFCClient
class BLINK_PLATFORM_EXPORT NFCClientProxy
: public NFCClient {
public:
using InterfaceType = NFCClient;
explicit NFCClientProxy(mojo::MessageReceiverWithResponder* receiver);
// @generated_from: device.mojom.NFCClient.OnWatch
void OnWatch(const WTF::Vector<uint32_t>& watch_ids, const WTF::String& serial_number, NDEFMessagePtr message) final;
// @generated_from: device.mojom.NFCClient.OnError
void OnError(NDEFErrorPtr error) final;
private:
mojo::MessageReceiverWithResponder* receiver_;
};
class BLINK_PLATFORM_EXPORT NFCStubDispatch {
public:
static bool Accept(NFC* impl, mojo::Message* message);
static bool AcceptWithResponder(
NFC* impl,
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder);
};
template <typename ImplRefTraits =
mojo::RawPtrImplRefTraits<NFC>>
class NFCStub
: public mojo::MessageReceiverWithResponderStatus {
public:
using ImplPointerType = typename ImplRefTraits::PointerType;
NFCStub() = default;
~NFCStub() override = default;
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 NFCStubDispatch::Accept(
ImplRefTraits::GetRawPointer(&sink_), message);
}
bool AcceptWithResponder(
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return NFCStubDispatch::AcceptWithResponder(
ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder));
}
private:
ImplPointerType sink_;
};
class BLINK_PLATFORM_EXPORT NFCClientStubDispatch {
public:
static bool Accept(NFCClient* impl, mojo::Message* message);
static bool AcceptWithResponder(
NFCClient* impl,
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder);
};
template <typename ImplRefTraits =
mojo::RawPtrImplRefTraits<NFCClient>>
class NFCClientStub
: public mojo::MessageReceiverWithResponderStatus {
public:
using ImplPointerType = typename ImplRefTraits::PointerType;
NFCClientStub() = default;
~NFCClientStub() override = default;
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 NFCClientStubDispatch::Accept(
ImplRefTraits::GetRawPointer(&sink_), message);
}
bool AcceptWithResponder(
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return NFCClientStubDispatch::AcceptWithResponder(
ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder));
}
private:
ImplPointerType sink_;
};
class BLINK_PLATFORM_EXPORT NFCRequestValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class BLINK_PLATFORM_EXPORT NFCClientRequestValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class BLINK_PLATFORM_EXPORT NFCResponseValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
// @generated_from: device.mojom.NDEFError
class BLINK_PLATFORM_EXPORT NDEFError {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<NDEFError, T>::value>;
using DataView = NDEFErrorDataView;
using Data_ = internal::NDEFError_Data;
template <typename... Args>
static NDEFErrorPtr New(Args&&... args) {
return NDEFErrorPtr(
std::in_place, std::forward<Args>(args)...);
}
template <typename U>
static NDEFErrorPtr From(const U& u) {
return mojo::TypeConverter<NDEFErrorPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, NDEFError>::Convert(*this);
}
NDEFError();
NDEFError(
NDEFErrorType error_type,
const WTF::String& error_message);
~NDEFError();
// 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 = NDEFErrorPtr>
NDEFErrorPtr 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, NDEFError::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, NDEFError::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename T, NDEFError::EnableIfSame<T>* = nullptr>
bool operator!=(const T& rhs) const { return !operator==(rhs); }
size_t Hash(size_t seed) const;
template <typename UserType>
static WTF::Vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
NDEFError::DataView, WTF::Vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
NDEFError::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::NDEFError_UnserializedMessageContext<
UserType, NDEFError::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<NDEFError::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const WTF::Vector<uint8_t>& input,
UserType* output) {
return NDEFError::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::NDEFError_UnserializedMessageContext<
UserType, NDEFError::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<NDEFError::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: device.mojom.NDEFError.error_type
NDEFErrorType error_type;
// @generated_from: device.mojom.NDEFError.error_message
WTF::String error_message;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
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, NDEFError::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, NDEFError::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, NDEFError::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, NDEFError::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: device.mojom.NDEFWriteOptions
class BLINK_PLATFORM_EXPORT NDEFWriteOptions {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<NDEFWriteOptions, T>::value>;
using DataView = NDEFWriteOptionsDataView;
using Data_ = internal::NDEFWriteOptions_Data;
template <typename... Args>
static NDEFWriteOptionsPtr New(Args&&... args) {
return NDEFWriteOptionsPtr(
std::in_place, std::forward<Args>(args)...);
}
template <typename U>
static NDEFWriteOptionsPtr From(const U& u) {
return mojo::TypeConverter<NDEFWriteOptionsPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, NDEFWriteOptions>::Convert(*this);
}
NDEFWriteOptions();
explicit NDEFWriteOptions(
bool overwrite);
~NDEFWriteOptions();
// 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 = NDEFWriteOptionsPtr>
NDEFWriteOptionsPtr 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, NDEFWriteOptions::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, NDEFWriteOptions::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename T, NDEFWriteOptions::EnableIfSame<T>* = nullptr>
bool operator!=(const T& rhs) const { return !operator==(rhs); }
size_t Hash(size_t seed) const;
template <typename UserType>
static WTF::Vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
NDEFWriteOptions::DataView, WTF::Vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
NDEFWriteOptions::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::NDEFWriteOptions_UnserializedMessageContext<
UserType, NDEFWriteOptions::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<NDEFWriteOptions::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const WTF::Vector<uint8_t>& input,
UserType* output) {
return NDEFWriteOptions::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::NDEFWriteOptions_UnserializedMessageContext<
UserType, NDEFWriteOptions::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<NDEFWriteOptions::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: device.mojom.NDEFWriteOptions.overwrite
bool overwrite;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
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, NDEFWriteOptions::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, NDEFWriteOptions::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, NDEFWriteOptions::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, NDEFWriteOptions::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: device.mojom.NDEFRecord
class BLINK_PLATFORM_EXPORT NDEFRecord {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<NDEFRecord, T>::value>;
using DataView = NDEFRecordDataView;
using Data_ = internal::NDEFRecord_Data;
template <typename... Args>
static NDEFRecordPtr New(Args&&... args) {
return NDEFRecordPtr(
std::in_place, std::forward<Args>(args)...);
}
template <typename U>
static NDEFRecordPtr From(const U& u) {
return mojo::TypeConverter<NDEFRecordPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, NDEFRecord>::Convert(*this);
}
NDEFRecord();
NDEFRecord(
NDEFRecordTypeCategory category,
const WTF::String& record_type,
const WTF::String& media_type,
const WTF::String& id,
const WTF::String& encoding,
const WTF::String& lang,
WTF::Vector<uint8_t> data,
NDEFMessagePtr payload_message);
NDEFRecord(const NDEFRecord&) = delete;
NDEFRecord& operator=(const NDEFRecord&) = delete;
~NDEFRecord();
// 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 = NDEFRecordPtr>
NDEFRecordPtr 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, NDEFRecord::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, NDEFRecord::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename T, NDEFRecord::EnableIfSame<T>* = nullptr>
bool operator!=(const T& rhs) const { return !operator==(rhs); }
template <typename UserType>
static WTF::Vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
NDEFRecord::DataView, WTF::Vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
NDEFRecord::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::NDEFRecord_UnserializedMessageContext<
UserType, NDEFRecord::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<NDEFRecord::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const WTF::Vector<uint8_t>& input,
UserType* output) {
return NDEFRecord::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::NDEFRecord_UnserializedMessageContext<
UserType, NDEFRecord::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<NDEFRecord::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: device.mojom.NDEFRecord.category
NDEFRecordTypeCategory category;
// @generated_from: device.mojom.NDEFRecord.record_type
WTF::String record_type;
// @generated_from: device.mojom.NDEFRecord.media_type
WTF::String media_type;
// @generated_from: device.mojom.NDEFRecord.id
WTF::String id;
// @generated_from: device.mojom.NDEFRecord.encoding
WTF::String encoding;
// @generated_from: device.mojom.NDEFRecord.lang
WTF::String lang;
// @generated_from: device.mojom.NDEFRecord.data
WTF::Vector<uint8_t> data;
// @generated_from: device.mojom.NDEFRecord.payload_message
NDEFMessagePtr payload_message;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
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, NDEFRecord::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, NDEFRecord::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, NDEFRecord::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, NDEFRecord::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: device.mojom.NDEFMessage
class BLINK_PLATFORM_EXPORT NDEFMessage {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<NDEFMessage, T>::value>;
using DataView = NDEFMessageDataView;
using Data_ = internal::NDEFMessage_Data;
template <typename... Args>
static NDEFMessagePtr New(Args&&... args) {
return NDEFMessagePtr(
std::in_place, std::forward<Args>(args)...);
}
template <typename U>
static NDEFMessagePtr From(const U& u) {
return mojo::TypeConverter<NDEFMessagePtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, NDEFMessage>::Convert(*this);
}
NDEFMessage();
explicit NDEFMessage(
WTF::Vector<NDEFRecordPtr> data);
NDEFMessage(const NDEFMessage&) = delete;
NDEFMessage& operator=(const NDEFMessage&) = delete;
~NDEFMessage();
// 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 = NDEFMessagePtr>
NDEFMessagePtr 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, NDEFMessage::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, NDEFMessage::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename T, NDEFMessage::EnableIfSame<T>* = nullptr>
bool operator!=(const T& rhs) const { return !operator==(rhs); }
template <typename UserType>
static WTF::Vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
NDEFMessage::DataView, WTF::Vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
NDEFMessage::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::NDEFMessage_UnserializedMessageContext<
UserType, NDEFMessage::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<NDEFMessage::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const WTF::Vector<uint8_t>& input,
UserType* output) {
return NDEFMessage::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::NDEFMessage_UnserializedMessageContext<
UserType, NDEFMessage::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<NDEFMessage::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: device.mojom.NDEFMessage.data
WTF::Vector<NDEFRecordPtr> data;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
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, NDEFMessage::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, NDEFMessage::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, NDEFMessage::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, NDEFMessage::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
template <typename StructPtrType>
NDEFErrorPtr NDEFError::Clone() const {
return New(
mojo::Clone(error_type),
mojo::Clone(error_message)
);
}
template <typename T, NDEFError::EnableIfSame<T>*>
bool NDEFError::Equals(const T& other_struct) const {
if (!mojo::Equals(this->error_type, other_struct.error_type))
return false;
if (!mojo::Equals(this->error_message, other_struct.error_message))
return false;
return true;
}
template <typename T, NDEFError::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.error_type < rhs.error_type)
return true;
if (rhs.error_type < lhs.error_type)
return false;
if (lhs.error_message < rhs.error_message)
return true;
if (rhs.error_message < lhs.error_message)
return false;
return false;
}
template <typename StructPtrType>
NDEFRecordPtr NDEFRecord::Clone() const {
return New(
mojo::Clone(category),
mojo::Clone(record_type),
mojo::Clone(media_type),
mojo::Clone(id),
mojo::Clone(encoding),
mojo::Clone(lang),
mojo::Clone(data),
mojo::Clone(payload_message)
);
}
template <typename T, NDEFRecord::EnableIfSame<T>*>
bool NDEFRecord::Equals(const T& other_struct) const {
if (!mojo::Equals(this->category, other_struct.category))
return false;
if (!mojo::Equals(this->record_type, other_struct.record_type))
return false;
if (!mojo::Equals(this->media_type, other_struct.media_type))
return false;
if (!mojo::Equals(this->id, other_struct.id))
return false;
if (!mojo::Equals(this->encoding, other_struct.encoding))
return false;
if (!mojo::Equals(this->lang, other_struct.lang))
return false;
if (!mojo::Equals(this->data, other_struct.data))
return false;
if (!mojo::Equals(this->payload_message, other_struct.payload_message))
return false;
return true;
}
template <typename T, NDEFRecord::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.category < rhs.category)
return true;
if (rhs.category < lhs.category)
return false;
if (lhs.record_type < rhs.record_type)
return true;
if (rhs.record_type < lhs.record_type)
return false;
if (lhs.media_type < rhs.media_type)
return true;
if (rhs.media_type < lhs.media_type)
return false;
if (lhs.id < rhs.id)
return true;
if (rhs.id < lhs.id)
return false;
if (lhs.encoding < rhs.encoding)
return true;
if (rhs.encoding < lhs.encoding)
return false;
if (lhs.lang < rhs.lang)
return true;
if (rhs.lang < lhs.lang)
return false;
if (lhs.data < rhs.data)
return true;
if (rhs.data < lhs.data)
return false;
if (lhs.payload_message < rhs.payload_message)
return true;
if (rhs.payload_message < lhs.payload_message)
return false;
return false;
}
template <typename StructPtrType>
NDEFMessagePtr NDEFMessage::Clone() const {
return New(
mojo::Clone(data)
);
}
template <typename T, NDEFMessage::EnableIfSame<T>*>
bool NDEFMessage::Equals(const T& other_struct) const {
if (!mojo::Equals(this->data, other_struct.data))
return false;
return true;
}
template <typename T, NDEFMessage::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.data < rhs.data)
return true;
if (rhs.data < lhs.data)
return false;
return false;
}
template <typename StructPtrType>
NDEFWriteOptionsPtr NDEFWriteOptions::Clone() const {
return New(
mojo::Clone(overwrite)
);
}
template <typename T, NDEFWriteOptions::EnableIfSame<T>*>
bool NDEFWriteOptions::Equals(const T& other_struct) const {
if (!mojo::Equals(this->overwrite, other_struct.overwrite))
return false;
return true;
}
template <typename T, NDEFWriteOptions::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.overwrite < rhs.overwrite)
return true;
if (rhs.overwrite < lhs.overwrite)
return false;
return false;
}
} // device::mojom::blink
namespace mojo {
template <>
struct BLINK_PLATFORM_EXPORT StructTraits<::device::mojom::blink::NDEFError::DataView,
::device::mojom::blink::NDEFErrorPtr> {
static bool IsNull(const ::device::mojom::blink::NDEFErrorPtr& input) { return !input; }
static void SetToNull(::device::mojom::blink::NDEFErrorPtr* output) { output->reset(); }
static decltype(::device::mojom::blink::NDEFError::error_type) error_type(
const ::device::mojom::blink::NDEFErrorPtr& input) {
return input->error_type;
}
static const decltype(::device::mojom::blink::NDEFError::error_message)& error_message(
const ::device::mojom::blink::NDEFErrorPtr& input) {
return input->error_message;
}
static bool Read(::device::mojom::blink::NDEFError::DataView input, ::device::mojom::blink::NDEFErrorPtr* output);
};
template <>
struct BLINK_PLATFORM_EXPORT StructTraits<::device::mojom::blink::NDEFRecord::DataView,
::device::mojom::blink::NDEFRecordPtr> {
static bool IsNull(const ::device::mojom::blink::NDEFRecordPtr& input) { return !input; }
static void SetToNull(::device::mojom::blink::NDEFRecordPtr* output) { output->reset(); }
static decltype(::device::mojom::blink::NDEFRecord::category) category(
const ::device::mojom::blink::NDEFRecordPtr& input) {
return input->category;
}
static const decltype(::device::mojom::blink::NDEFRecord::record_type)& record_type(
const ::device::mojom::blink::NDEFRecordPtr& input) {
return input->record_type;
}
static const decltype(::device::mojom::blink::NDEFRecord::media_type)& media_type(
const ::device::mojom::blink::NDEFRecordPtr& input) {
return input->media_type;
}
static const decltype(::device::mojom::blink::NDEFRecord::id)& id(
const ::device::mojom::blink::NDEFRecordPtr& input) {
return input->id;
}
static const decltype(::device::mojom::blink::NDEFRecord::encoding)& encoding(
const ::device::mojom::blink::NDEFRecordPtr& input) {
return input->encoding;
}
static const decltype(::device::mojom::blink::NDEFRecord::lang)& lang(
const ::device::mojom::blink::NDEFRecordPtr& input) {
return input->lang;
}
static const decltype(::device::mojom::blink::NDEFRecord::data)& data(
const ::device::mojom::blink::NDEFRecordPtr& input) {
return input->data;
}
static const decltype(::device::mojom::blink::NDEFRecord::payload_message)& payload_message(
const ::device::mojom::blink::NDEFRecordPtr& input) {
return input->payload_message;
}
static bool Read(::device::mojom::blink::NDEFRecord::DataView input, ::device::mojom::blink::NDEFRecordPtr* output);
};
template <>
struct BLINK_PLATFORM_EXPORT StructTraits<::device::mojom::blink::NDEFMessage::DataView,
::device::mojom::blink::NDEFMessagePtr> {
static bool IsNull(const ::device::mojom::blink::NDEFMessagePtr& input) { return !input; }
static void SetToNull(::device::mojom::blink::NDEFMessagePtr* output) { output->reset(); }
static const decltype(::device::mojom::blink::NDEFMessage::data)& data(
const ::device::mojom::blink::NDEFMessagePtr& input) {
return input->data;
}
static bool Read(::device::mojom::blink::NDEFMessage::DataView input, ::device::mojom::blink::NDEFMessagePtr* output);
};
template <>
struct BLINK_PLATFORM_EXPORT StructTraits<::device::mojom::blink::NDEFWriteOptions::DataView,
::device::mojom::blink::NDEFWriteOptionsPtr> {
static bool IsNull(const ::device::mojom::blink::NDEFWriteOptionsPtr& input) { return !input; }
static void SetToNull(::device::mojom::blink::NDEFWriteOptionsPtr* output) { output->reset(); }
static decltype(::device::mojom::blink::NDEFWriteOptions::overwrite) overwrite(
const ::device::mojom::blink::NDEFWriteOptionsPtr& input) {
return input->overwrite;
}
static bool Read(::device::mojom::blink::NDEFWriteOptions::DataView input, ::device::mojom::blink::NDEFWriteOptionsPtr* output);
};
} // namespace mojo
#endif // SERVICES_DEVICE_PUBLIC_MOJOM_NFC_MOJOM_BLINK_H_
/* Metadata comment
eyJ0eXBlIjogImt5dGhlMCIsICJtZXRhIjogW3sidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJi
ZWdpbiI6IDE5MTMsICJlbmQiOiAxOTE2LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwg
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0v
c3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJkZXZpY2UubW9qb20uTkZDIn0sICJlZGdlIjogIiUv
a3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2lu
IjogMzY1MywgImVuZCI6IDM2NjIsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMv
L21haW4iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5ORkMuU2V0Q2xpZW50In0sICJlZGdl
IjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwg
ImJlZ2luIjogMzgzNCwgImVuZCI6IDM4MzgsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20i
LCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1
bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5ORkMuUHVzaCJ9LCAiZWRn
ZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIs
ICJiZWdpbiI6IDM5ODcsICJlbmQiOiAzOTk3LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9t
IiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21p
dW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJkZXZpY2UubW9qb20uTkZDLkNhbmNlbFB1c2gi
fSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAiYmVnaW4iOiA0MTQ2LCAiZW5kIjogNDE1OCwgInZuYW1lIjogeyJsYW5ndWFnZSI6
ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNo
L2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLk5GQy5NYWtl
UmVhZE9ubHkifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAi
YW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiA0MjcwLCAiZW5kIjogNDI4OCwgInZuYW1lIjogeyJs
YW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
b2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9t
Lk5GQy5DYW5jZWxNYWtlUmVhZE9ubHkifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRl
cyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiA0NDIzLCAiZW5kIjogNDQy
OCwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29v
Z2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUi
OiAiZGV2aWNlLm1vam9tLk5GQy5XYXRjaCJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJh
dGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDQ1MzksICJlbmQiOiA0
NTUwLCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5n
b29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVy
ZSI6ICJkZXZpY2UubW9qb20uTkZDLkNhbmNlbFdhdGNoIn0sICJlZGdlIjogIiUva3l0aGUvZWRn
ZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogNDc1OCwg
ImVuZCI6IDQ3NjcsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNo
cm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAi
c2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5ORkNDbGllbnQifSwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiA1OTk3
LCAiZW5kIjogNjAwNCwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAi
Y2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIs
ICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLk5GQ0NsaWVudC5PbldhdGNoIn0sICJlZGdlIjog
IiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJl
Z2luIjogNjE3OCwgImVuZCI6IDYxODUsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAi
Y29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9z
cmMvL21haW4iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5ORkNDbGllbnQuT25FcnJvciJ9
LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVm
aW5lcyIsICJiZWdpbiI6IDY0NzMsICJlbmQiOiA2NDgyLCAidm5hbWUiOiB7Imxhbmd1YWdlIjog
Im1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gv
Y2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJkZXZpY2UubW9qb20uTkZDLlNldENs
aWVudCJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNo
b3JfZGVmaW5lcyIsICJiZWdpbiI6IDY1ODMsICJlbmQiOiA2NTg3LCAidm5hbWUiOiB7Imxhbmd1
YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVz
ZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJkZXZpY2UubW9qb20uTkZD
LlB1c2gifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5j
aG9yX2RlZmluZXMiLCAiYmVnaW4iOiA2NzI5LCAiZW5kIjogNjczOSwgInZuYW1lIjogeyJsYW5n
dWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rl
c2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLk5G
Qy5DYW5jZWxQdXNoIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBl
IjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogNjgwOSwgImVuZCI6IDY4MjEsICJ2bmFtZSI6
IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogImRldmljZS5t
b2pvbS5ORkMuTWFrZVJlYWRPbmx5In0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMi
fSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogNjkyNiwgImVuZCI6IDY5NDQs
ICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2ds
ZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjog
ImRldmljZS5tb2pvbS5ORkMuQ2FuY2VsTWFrZVJlYWRPbmx5In0sICJlZGdlIjogIiUva3l0aGUv
ZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogNzAw
NywgImVuZCI6IDcwMTIsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjog
ImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4i
LCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5ORkMuV2F0Y2gifSwgImVkZ2UiOiAiJS9reXRo
ZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiA3
MTE2LCAiZW5kIjogNzEyNywgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMi
OiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFp
biIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLk5GQy5DYW5jZWxXYXRjaCJ9LCAiZWRnZSI6
ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJi
ZWdpbiI6IDc1MDQsICJlbmQiOiA3NTExLCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwg
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0v
c3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJkZXZpY2UubW9qb20uTkZDQ2xpZW50Lk9uV2F0Y2gi
fSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAiYmVnaW4iOiA3Njc4LCAiZW5kIjogNzY4NSwgInZuYW1lIjogeyJsYW5ndWFnZSI6
ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNo
L2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLk5GQ0NsaWVu
dC5PbkVycm9yIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjog
ImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogMTA3ODYsICJlbmQiOiAxMDc5NSwgInZuYW1lIjog
eyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1v
am9tLk5ERUZFcnJvciJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlw
ZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDE0NTI0LCAiZW5kIjogMTQ1MzQsICJ2bmFt
ZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJj
ZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogImRldmlj
ZS5tb2pvbS5OREVGRXJyb3IuZXJyb3JfdHlwZSJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2Vu
ZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDE0NjEwLCAiZW5k
IjogMTQ2MjMsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2ln
bmF0dXJlIjogImRldmljZS5tb2pvbS5OREVGRXJyb3IuZXJyb3JfbWVzc2FnZSJ9LCAiZWRnZSI6
ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJi
ZWdpbiI6IDE1NjU4LCAiZW5kIjogMTU2NzQsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20i
LCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1
bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5OREVGV3JpdGVPcHRpb25z
In0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgImJlZ2luIjogMTk1MzQsICJlbmQiOiAxOTU0MywgInZuYW1lIjogeyJsYW5ndWFn
ZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2Vh
cmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLk5ERUZX
cml0ZU9wdGlvbnMub3ZlcndyaXRlIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMi
fSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogMjA2MDEsICJlbmQiOiAyMDYx
MSwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29v
Z2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUi
OiAiZGV2aWNlLm1vam9tLk5ERUZSZWNvcmQifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVy
YXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAyNDYzOCwgImVuZCI6
IDI0NjQ2LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1
bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25h
dHVyZSI6ICJkZXZpY2UubW9qb20uTkRFRlJlY29yZC5jYXRlZ29yeSJ9LCAiZWRnZSI6ICIlL2t5
dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6
IDI0NzIxLCAiZW5kIjogMjQ3MzIsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMv
L21haW4iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5OREVGUmVjb3JkLnJlY29yZF90eXBl
In0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgImJlZ2luIjogMjQ4MDYsICJlbmQiOiAyNDgxNiwgInZuYW1lIjogeyJsYW5ndWFn
ZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2Vh
cmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLk5ERUZS
ZWNvcmQubWVkaWFfdHlwZSJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsi
dHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDI0ODgyLCAiZW5kIjogMjQ4ODQsICJ2
bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogImRl
dmljZS5tb2pvbS5OREVGUmVjb3JkLmlkIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0
ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogMjQ5NTYsICJlbmQiOiAy
NDk2NCwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0u
Z29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1
cmUiOiAiZGV2aWNlLm1vam9tLk5ERUZSZWNvcmQuZW5jb2RpbmcifSwgImVkZ2UiOiAiJS9reXRo
ZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAy
NTAzMiwgImVuZCI6IDI1MDM2LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1
cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9t
YWluIiwgInNpZ25hdHVyZSI6ICJkZXZpY2UubW9qb20uTkRFRlJlY29yZC5sYW5nIn0sICJlZGdl
IjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwg
ImJlZ2luIjogMjUxMTMsICJlbmQiOiAyNTExNywgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pv
bSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9t
aXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLk5ERUZSZWNvcmQuZGF0
YSJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJiZWdpbiI6IDI1MTk5LCAiZW5kIjogMjUyMTQsICJ2bmFtZSI6IHsibGFuZ3Vh
Z2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNl
YXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5OREVG
UmVjb3JkLnBheWxvYWRfbWVzc2FnZSJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVz
In0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDI2MjQ2LCAiZW5kIjogMjYy
NTcsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdv
b2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJl
IjogImRldmljZS5tb2pvbS5OREVGTWVzc2FnZSJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2Vu
ZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDMwMDgyLCAiZW5k
IjogMzAwODYsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2ln
bmF0dXJlIjogImRldmljZS5tb2pvbS5OREVGTWVzc2FnZS5kYXRhIn0sICJlZGdlIjogIiUva3l0
aGUvZWRnZS9nZW5lcmF0ZXMifV19
*/