@discordeno/rest 19.0.0-next.9d5b8df → 19.0.0-next.a9703f7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/manager.js +2 -2
  2. package/package.json +3 -3
package/dist/manager.js CHANGED
@@ -1,2 +1,2 @@
1
- import{InteractionResponseTypes as e}from"@discordeno/types";import{camelize as t,camelToSnakeCase as a,delay as s,findFiles as i,getBotIdFromToken as n,logger as o,urlToBase64 as r}from"@discordeno/utils";import{createInvalidRequestBucket as l}from"./invalidBucket.js";import{Queue as d}from"./queue.js";export function createRestManager(c){if(!c.token)throw Error("You must provide a valid token.");let u={token:c.token,applicationId:c.applicationId?BigInt(c.applicationId):n(c.token),version:c.version??10,baseUrl:c.baseUrl??"https://discord.com/api",maxRetryCount:1/0,globallyRateLimited:!1,processingRateLimitedPaths:!1,deleteQueueDelay:6e4,queues:new Map,rateLimitedPaths:new Map,invalidBucket:l({}),routes:{webhooks:{id:e=>`/webhooks/${e}`,message:(e,t,a,s)=>{let i=`/webhooks/${e}/${t}/messages/${a}?`;return s&&s.threadId&&(i+=`thread_id=${s.threadId}`),i},original:(e,t,a)=>{let s=`/webhooks/${e}/${t}/messages/@original?`;return a&&a.threadId&&(s+=`thread_id=${a.threadId}`),s},webhook:(e,t,a)=>{let s=`/webhooks/${e}/${t}?`;return a&&(a?.wait!==void 0&&(s+=`wait=${a.wait.toString()}`),a.threadId&&(s+=`thread_id=${a.threadId}`)),s}},sessionInfo:()=>u.routes.gatewayBot(),channels:{dm:()=>"/users/@me/channels",webhooks:e=>`/channels/${e}/webhooks`,channel:e=>`/channels/${e}`,follow:e=>`/channels/${e}/followers`,forum:e=>`/channels/${e}/threads?has_message=true`,invites:e=>`/channels/${e}/invites`,message:(e,t)=>`/channels/${e}/messages/${t}`,messages:(e,t)=>{let a=`/channels/${e}/messages?`;return a},overwrite:(e,t)=>`/channels/${e}/permissions/${t}`,crosspost:(e,t)=>`/channels/${e}/messages/${t}/crosspost`,stages:()=>"/stage-instances",stage:e=>`/stage-instances/${e}`,threads:{message:(e,t)=>`/channels/${e}/messages/${t}/threads`,all:e=>`/channels/${e}/threads`,active:e=>`/guilds/${e}/threads/active`,members:e=>`/channels/${e}/thread-members`,me:e=>`/channels/${e}/thread-members/@me`,user:(e,t)=>`/channels/${e}/thread-members/${t}`,archived:e=>`/channels/${e}/threads/archived`,public:(e,t)=>{let a=`/channels/${e}/threads/archived/public?`;return t&&(t.before&&(a+=`before=${new Date(t.before).toISOString()}`),t.limit&&(a+=`&limit=${t.limit}`)),a},private:(e,t)=>{let a=`/channels/${e}/threads/archived/private?`;return t&&(t.before&&(a+=`before=${new Date(t.before).toISOString()}`),t.limit&&(a+=`&limit=${t.limit}`)),a},joined:(e,t)=>{let a=`/channels/${e}/users/@me/threads/archived/private?`;return t&&(t.before&&(a+=`before=${new Date(t.before).toISOString()}`),t.limit&&(a+=`&limit=${t.limit}`)),a}},typing:e=>`/channels/${e}/typing`},guilds:{all:()=>"/guilds",automod:{rule:(e,t)=>`/guilds/${e}/auto-moderation/rules/${t}`,rules:e=>`/guilds/${e}/auto-moderation/rules`},channels:e=>`/guilds/${e}/channels`,emoji:(e,t)=>`/guilds/${e}/emojis/${t}`,emojis:e=>`/guilds/${e}/emojis`,events:{events:(e,t)=>{let a=`/guilds/${e}/scheduled-events?`;return void 0!==t&&(a+=`with_user_count=${t.toString()}`),a},event:(e,t,a)=>{let s=`/guilds/${e}/scheduled-events/${t}`;return void 0!==a&&(s+=`with_user_count=${a.toString()}`),s},users:(e,t,a)=>{let s=`/guilds/${e}/scheduled-events/${t}/users?`;return a&&(void 0!==a.limit&&(s+=`limit=${a.limit}`),void 0!==a.withMember&&(s+=`&with_member=${a.withMember.toString()}`),void 0!==a.after&&(s+=`&after=${a.after}`),void 0!==a.before&&(s+=`&before=${a.before}`)),s}},guild(e,t){let a=`/guilds/${e}?`;return void 0!==t&&(a+=`with_counts=${t.toString()}`),a},integration:(e,t)=>`/guilds/${e}/integrations/${t}`,integrations:e=>`/guilds/${e}/integrations?include_applications=true`,invite(e,t){let a=`/invites/${e}?`;return t&&(void 0!==t.withCounts&&(a+=`with_counts=${t.withCounts.toString()}`),void 0!==t.withExpiration&&(a+=`&with_expiration=${t.withExpiration.toString()}`),t.scheduledEventId&&(a+=`&guild_scheduled_event_id=${t.scheduledEventId}`)),a},invites:e=>`/guilds/${e}/invites`,members:{ban:(e,t)=>`/guilds/${e}/bans/${t}`,bot:e=>`/guilds/${e}/members/@me`,member:(e,t)=>`/guilds/${e}/members/${t}`,members:(e,t)=>{let a=`/guilds/${e}/members?`;return void 0!==t&&(t.limit&&(a+=`limit=${t.limit}`),t.after&&(a+=`&after=${t.after}`)),a},search:(e,t,a)=>{let s=`/guilds/${e}/members/search?query=${encodeURIComponent(t)}`;return a&&void 0!==a.limit&&(s+=`&limit=${a.limit}`),s},prune:(e,t)=>{let a=`/guilds/${e}/prune?`;return t&&(t.days&&(a+=`days=${t.days}`),Array.isArray(t.includeRoles)?a+=`&include_roles=${t.includeRoles.join(",")}`:t.includeRoles&&(a+=`&include_roles=${t.includeRoles}`)),a}},roles:{one:(e,t)=>`/guilds/${e}/roles/${t}`,all:e=>`/guilds/${e}/roles`,member:(e,t,a)=>`/guilds/${e}/members/${t}/roles/${a}`},templates:{code:e=>`/guilds/templates/${e}`,guild:(e,t)=>`/guilds/${e}/templates/${t}`,all:e=>`/guilds/${e}/templates`},webhooks:e=>`/guilds/${e}/webhooks`},interactions:{commands:{commands:e=>`/applications/${e}/commands`,guilds:{all:(e,t)=>`/applications/${e}/guilds/${t}/commands`,one(e,t,a,s){let i=`/applications/${e}/guilds/${t}/commands/${a}?`;return void 0!==s&&(i+=`with_localizations=${s.toString()}`),i}},permissions:(e,t)=>`/applications/${e}/guilds/${t}/commands/permissions`,permission:(e,t,a)=>`/applications/${e}/guilds/${t}/commands/${a}/permissions`,command:(e,t,a)=>{let s=`/applications/${e}/commands/${t}?`;return void 0!==a&&(s+=`withLocalizations=${a.toString()}`),s}},responses:{callback:(e,t)=>`/interactions/${e}/${t}/callback`,original:(e,t)=>`/webhooks/${e}/${t}/messages/@original`,message:(e,t,a)=>`/webhooks/${e}/${t}/messages/${a}`}},user:e=>`/users/${e}`,userBot:()=>"/users/@me",oauth2Application:()=>"oauth2/applications/@me",gatewayBot:()=>"/gateway/bot",nitroStickerPacks:()=>"/sticker-packs"},checkRateLimits(e){let t=u.rateLimitedPaths.get(e),a=u.rateLimitedPaths.get("global"),s=Date.now();return t&&s<t.resetTimestamp?t.resetTimestamp-s:!!a&&s<a.resetTimestamp&&a.resetTimestamp-s},changeToDiscordFormat(e){if(null===e)return null;if("object"==typeof e){if(Array.isArray(e))return e.map(e=>u.changeToDiscordFormat(e));let t={};for(let s of Object.keys(e)){if("permissions"===s){t.permissions="1234567890";continue}t[a(s)]=u.changeToDiscordFormat(e[s])}return t}return"bigint"==typeof e?e.toString():e},createRequest(e){let t={"user-agent":"DiscordBot (https://github.com/discordeno/discordeno, v19.0.0-alpha.1)"};if(e.unauthorized||(t.authorization=`Bot ${u.token}`),e.headers)for(let a in e.headers)t[a.toLowerCase()]=e.headers[a];if("GET"===e.method&&(e.body=void 0),e.body?.reason&&(t["X-Audit-Log-Reason"]=encodeURIComponent(e.body.reason),e.body.reason=void 0),e.body){let{file:s}=e.body;if(s){let n=i(s),o=new FormData;if(e.url?.endsWith("/stickers")&&"POST"===e.method)o.append("file",n[0].blob,n[0].name),o.append("name",e.body.name),o.append("description",e.body.description),o.append("tags",e.body.tags);else{for(let r=0;r<n.length;r++)o.append(`file${r}`,n[r].blob,n[r].name);s&&(e.body.file=void 0),o.append("payload_json",JSON.stringify(u.changeToDiscordFormat(e.body)))}e.body.file=o}else e.body&&!["GET","DELETE"].includes(e.method)&&(t["Content-Type"]="application/json")}return{headers:t,body:e.body?.file??JSON.stringify(u.changeToDiscordFormat(e.body)),method:e.method}},processRateLimitedPaths(){let e=Date.now();for(let[t,a]of u.rateLimitedPaths.entries())a.resetTimestamp>e||(u.rateLimitedPaths.delete(t),"global"!==t||(u.globallyRateLimited=!1));0===u.rateLimitedPaths.size?u.processingRateLimitedPaths=!1:(u.processingRateLimitedPaths=!0,setTimeout(()=>{u.processRateLimitedPaths()},1e3))},processHeaders(e,t){let a=!1,s=t.get("x-ratelimit-remaining"),i=t.get("x-ratelimit-reset-after"),n=Date.now()+1e3*Number(i),o=t.get("x-ratelimit-global"),r=t.get("x-ratelimit-bucket")??void 0,l=t.get("x-ratelimit-limit");if(u.queues.get(e)?.handleCompletedRequest({remaining:s?Number(s):void 0,interval:i?1e3*Number(i):void 0,max:l?Number(l):void 0}),"0"===s&&(a=!0,u.rateLimitedPaths.set(e,{url:e,resetTimestamp:n,bucketId:r}),r&&u.rateLimitedPaths.set(r,{url:e,resetTimestamp:n,bucketId:r})),o){let d=t.get("retry-after"),c=Date.now()+1e3*Number(d);u.globallyRateLimited=!0,a=!0,setTimeout(()=>{u.globallyRateLimited=!1},c),u.rateLimitedPaths.set("global",{url:"global",resetTimestamp:c,bucketId:r}),r&&u.rateLimitedPaths.set(r,{url:"global",resetTimestamp:c,bucketId:r})}return a&&!u.processingRateLimitedPaths&&u.processRateLimitedPaths(),a?r:void 0},async sendRequest(e){let t=e.url.startsWith("https://")?e.url:`${u.baseUrl}/v${u.version}${e.url}`,a=u.createRequest({method:e.method,url:e.url,body:e.body,...e.options});o.debug(`sending request to ${t}`,"with payload:",{...a,headers:{...a.headers,authorization:"Bot tokenhere"}});let i=await fetch(t,a);o.debug(`request fetched from ${t} with status ${i.status} & ${i.statusText}`);let n=u.processHeaders(u.simplifyUrl(e.url,e.method),i.headers);if(n&&(e.bucketId=n),i.status<200||i.status>=400){if(o.debug(`Request to ${t} failed.`),429===i.status){if(o.debug(`Request to ${t} was ratelimited.`),e.retryCount++>=u.maxRetryCount)return o.debug(`Request to ${t} exceeded the maximum allowed retries.`,"with payload:",a),e.reject?.({ok:!1,status:i.status,error:"The options was rate limited and it maxed out the retries limit."});u.invalidBucket.handleCompletedRequest(i.status,"shared"===i.headers.get("X-RateLimit-Scope"));let r=i.headers.get("x-ratelimit-reset-after");return r&&await s(1e3*Number(r)),await e.retryRequest?.(e)}return e.reject(await i.json())}if(204===i.status)return e.resolve(void 0);e.resolve(await i.json())},simplifyUrl(e,t){let a=e.replace(/\/([a-z-]+)\/(?:[0-9]{17,19})/g,function(e,t){return["channels","guilds"].includes(t)?e:`/${t}/x`}).replace(/\/reactions\/[^/]+/g,"/reactions/x");return a.includes("/reactions")&&(a=a.substring(0,a.indexOf("/reactions")+10)),"DELETE"===t&&a.endsWith("/messages/x")&&(a=t+a),a},processRequest(e){let t=e.url.substring(e.url.indexOf("api/")),a=t.split("/");a.shift(),a[0]?.startsWith("v")&&a.shift(),e.url=`${u.baseUrl}/v${u.version}/${a.join("/")}`;let s=u.simplifyUrl(e.url,e.method),i=u.queues.get(s);if(void 0!==i)i.makeRequest(e);else{let n=new d(u,{url:s,deleteQueueDelay:u.deleteQueueDelay});n.makeRequest(e),u.queues.set(s,n)}},makeRequest:async(e,t,a,s)=>await new Promise((i,n)=>{u.processRequest({url:t,method:e,body:a,retryCount:0,retryRequest:async function(e){await u.sendRequest(e)},resolve:i,reject:n,options:s})}),get:async e=>t(await u.makeRequest("GET",e)),post:async(e,a)=>t(await u.makeRequest("POST",e,a)),delete:async(e,a)=>t(await u.makeRequest("DELETE",e,a)),patch:async(e,a)=>t(await u.makeRequest("PATCH",e,a)),put:async(e,a,s)=>t(await u.makeRequest("PUT",e,a,s)),channels:{messages:{delete:async(e,t,a)=>await u.deleteMessage(e,t,a),edit:async(e,t,a)=>await u.editMessage(e,t,a),send:async(e,t)=>await u.sendMessage(e,t),publish:async(e,t)=>await u.publishMessage(e,t)},get:async e=>await u.getChannel(e),create:async(e,t)=>await u.createChannel(e,t),delete:async(e,t)=>await u.deleteChannel(e,t),edit:async(e,t)=>await u.editChannel(e,t),follow:async(e,t)=>await u.followAnnouncement(e,t),forums:{post:async(e,t)=>await u.createForumThread(e,t)},permissions:{edit:async(e,t)=>await u.editChannelPermissionOverrides(e,t),delete:async(e,t)=>await u.deleteChannelPermissionOverride(e,t)},positions:async(e,t)=>await u.editChannelPositions(e,t),invites:async e=>await u.getChannelInvites(e),stages:{create:async e=>await u.createStageInstance(e),delete:async(e,t)=>await u.deleteStageInstance(e,t),edit:async(e,t)=>await u.editStageInstance(e,t),get:async e=>await u.getStageInstance(e)},threads:{create:{with:{message:async(e,t,a)=>await u.startThreadWithMessage(e,t,a)},without:{message:async(e,t)=>await u.startThreadWithoutMessage(e,t)}},get:{active:async e=>await u.getActiveThreads(e),archived:{private:async(e,t)=>await u.getPrivateArchivedThreads(e,t),joined:async(e,t)=>await u.getPrivateJoinedArchivedThreads(e,t),public:async(e,t)=>await u.getPublicArchivedThreads(e,t)},member:async(e,t)=>await u.getThreadMember(e,t),members:async e=>await u.getThreadMembers(e)},join:async e=>await u.joinThread(e),leave:async e=>await u.leaveThread(e),kick:async(e,t)=>await u.removeThreadMember(e,t)},typing:async e=>await u.triggerTypingIndicator(e)},emojis:{create:async(e,t)=>await u.createEmoji(e,t),delete:async(e,t,a)=>await u.deleteEmoji(e,t,a),edit:async(e,t,a)=>await u.editEmoji(e,t,a),get:async(e,t)=>await u.getEmoji(e,t)},guilds:{automod:{create:async(e,t)=>await u.createAutomodRule(e,t),delete:async(e,t)=>await u.deleteAutomodRule(e,t),edit:async(e,t,a)=>await u.editAutomodRule(e,t,a),get:{rule:async(e,t)=>await u.getAutomodRule(e,t),rules:async e=>await u.getAutomodRules(e)}},create:async e=>await u.createGuild(e),channels:async e=>await u.getChannels(e),delete:async e=>await u.deleteGuild(e),emojis:async e=>await u.getEmojis(e),events:{create:async(e,t)=>await u.createScheduledEvent(e,t),delete:async(e,t)=>await u.deleteScheduledEvent(e,t),edit:async(e,t,a)=>await u.editScheduledEvent(e,t,a),get:{event:async(e,t,a)=>await u.getScheduledEvent(e,t,a),events:async(e,t)=>await u.getScheduledEvents(e,t),users:async(e,t,a)=>await u.getScheduledEventUsers(e,t,a)}},integrations:{get:async e=>await u.getIntegrations(e),delete:async(e,t)=>await u.deleteIntegration(e,t)},invites:{create:async(e,t)=>await u.createInvite(e,t),delete:async(e,t)=>await u.deleteInvite(e,t),get:async(e,t)=>await u.getInvite(e,t),list:async e=>await u.getInvites(e)},templates:{create:async(e,t)=>await u.createGuildTemplate(e,t),delete:async(e,t)=>await u.deleteGuildTemplate(e,t),edit:async(e,t,a)=>await u.editGuildTemplate(e,t,a),get:async e=>await u.getGuildTemplate(e),list:async e=>await u.getGuildTemplates(e),sync:async e=>await u.syncGuildTemplate(e)},members:{ban:async(e,t,a)=>await u.banMember(e,t,a),edit:async(e,t,a)=>await u.editMember(e,t,a),editSelf:async(e,t)=>await u.editBotMember(e,t),get:async(e,t)=>await u.getMember(e,t),dm:async e=>await u.getDmChannel(e),kick:async(e,t,a)=>await u.kickMember(e,t,a),list:async(e,t)=>await u.getMembers(e,t),prune:async(e,t)=>await u.pruneMembers(e,t),search:async(e,t,a)=>await u.searchMembers(e,t,a),unban:async(e,t)=>await u.unbanMember(e,t)},interactions:{commands:{create:{global:async e=>await u.createGlobalApplicationCommand(e),guild:async(e,t)=>await u.createGuildApplicationCommand(e,t)},delete:{global:async e=>await u.deleteGlobalApplicationCommand(e),guild:async(e,t)=>await u.deleteGuildApplicationCommand(e,t)},edit:{global:async(e,t)=>await u.editGlobalApplicationCommand(e,t),guild:async(e,t,a)=>await u.editGuildApplicationCommand(e,t,a),permissions:async(e,t,a,s)=>await u.editApplicationCommandPermissions(e,t,a,s)},get:{global:{all:async()=>await u.getGlobalApplicationCommands(),one:async e=>await u.getGlobalApplicationCommand(e)},guilds:{all:async e=>await u.getGuildApplicationCommands(e),one:async(e,t)=>await u.getGuildApplicationCommand(e,t)},permission:async(e,t)=>await u.getApplicationCommandPermission(e,t),permissions:async e=>await u.getApplicationCommandPermissions(e)},replace:{global:async e=>await u.upsertGlobalApplicationCommands(e),guild:async(e,t)=>await u.upsertGuildApplicationCommands(e,t)}},responses:{create:{followup:async(e,t)=>await u.sendFollowupMessage(e,t),original:async(e,t,a)=>await u.sendInteractionResponse(e,t,a)},delete:{followup:async(e,t)=>await u.deleteFollowupMessage(e,t),original:async e=>await u.deleteOriginalInteractionResponse(e)},edit:{followup:async(e,t,a)=>await u.editFollowupMessage(e,t,a),original:async(e,t)=>await u.editOriginalInteractionResponse(e,t)},get:{followup:async(e,t)=>await u.getFollowupMessage(e,t),original:async e=>await u.getOriginalInteractionResponse(e)}}},roles:{add:async(e,t,a,s)=>await u.addRole(e,t,a,s),create:async(e,t,a)=>await u.createRole(e,t,a),delete:async(e,t)=>await u.deleteRole(e,t),edit:async(e,t,a)=>await u.editRole(e,t,a),list:async e=>await u.getRoles(e),positions:async(e,t)=>await u.editRolePositions(e,t),remove:async(e,t,a,s)=>await u.removeRole(e,t,a,s)}},users:{channel:async e=>await u.getDmChannel(e)},webhooks:{create:async(e,t)=>await u.createWebhook(e,t),delete:{with:{id:async(e,t)=>await u.deleteWebhook(e,t),token:async(e,t)=>await u.deleteWebhookWithToken(e,t)}},edit:{with:{id:async(e,t)=>await u.editWebhook(e,t),token:async(e,t,a)=>await u.editWebhookWithToken(e,t,a)}},execute:async(e,t,a)=>await u.executeWebhook(e,t,a),get:{channel:async e=>await u.getChannelWebhooks(e),guild:async e=>await u.getGuildWebhooks(e),message:async(e,t,a,s)=>await u.getWebhookMessage(e,t,a,s),with:{id:async e=>await u.getWebhook(e),token:async(e,t)=>await u.getWebhookWithToken(e,t)}},messages:{delete:async(e,t,a,s)=>await u.deleteWebhookMessage(e,t,a,s),edit:Object.assign(async(e,t,a,s)=>await u.editWebhookMessage(e,t,a,s),{original:async(e,t,a)=>await u.editOriginalWebhookMessage(e,t,a)})}},addRole:async(e,t,a,s)=>await u.put(u.routes.guilds.roles.member(e,t,a),{reason:s}),addThreadMember:async(e,t)=>await u.put(u.routes.channels.threads.user(e,t)),createAutomodRule:async(e,t)=>await u.post(u.routes.guilds.automod.rules(e),t),createChannel:async(e,t)=>await u.post(u.routes.guilds.channels(e),t),createEmoji:async(e,t)=>await u.post(u.routes.guilds.emojis(e),t),createGlobalApplicationCommand:async e=>await u.post(u.routes.interactions.commands.commands(u.applicationId),e),createGuild:async e=>await u.post(u.routes.guilds.all(),e),createGuildApplicationCommand:async(e,t)=>await u.post(u.routes.interactions.commands.guilds.all(u.applicationId,t),e),createGuildTemplate:async(e,t)=>await u.post(u.routes.guilds.templates.all(e),t),createForumThread:async(e,t)=>await u.post(u.routes.channels.forum(e),t),createInvite:async(e,t={})=>await u.post(u.routes.channels.invites(e),t),createRole:async(e,t,a)=>await u.post(u.routes.guilds.roles.all(e),{...t,reason:a}),createScheduledEvent:async(e,t)=>await u.post(u.routes.guilds.events.events(e),t),createStageInstance:async e=>await u.post(u.routes.channels.stages(),e),createWebhook:async(e,t)=>await u.post(u.routes.channels.webhooks(e),{name:t.name,avatar:t.avatar?await r(t.avatar):void 0,reason:t.reason}),deleteAutomodRule:async(e,t,a)=>await u.delete(u.routes.guilds.automod.rule(e,t),{reason:a}),deleteChannel:async(e,t)=>await u.delete(u.routes.channels.channel(e),{reason:t}),deleteChannelPermissionOverride:async(e,t,a)=>await u.delete(u.routes.channels.overwrite(e,t),a?{reason:a}:void 0),deleteEmoji:async(e,t,a)=>await u.delete(u.routes.guilds.emoji(e,t),{reason:a}),deleteFollowupMessage:async(e,t)=>await u.delete(u.routes.interactions.responses.message(u.applicationId,e,t)),deleteGlobalApplicationCommand:async e=>await u.delete(u.routes.interactions.commands.command(u.applicationId,e)),deleteGuild:async e=>await u.delete(u.routes.guilds.guild(e)),deleteGuildApplicationCommand:async(e,t)=>await u.delete(u.routes.interactions.commands.guilds.one(u.applicationId,t,e)),deleteGuildTemplate:async(e,t)=>await u.delete(u.routes.guilds.templates.guild(e,t)),deleteIntegration:async(e,t)=>await u.delete(u.routes.guilds.integration(e,t)),deleteInvite:async(e,t)=>await u.delete(u.routes.guilds.invite(e),t?{reason:t}:void 0),deleteMessage:async(e,t,a)=>await u.delete(u.routes.channels.message(e,t),{reason:a}),deleteOriginalInteractionResponse:async e=>await u.delete(u.routes.interactions.responses.original(u.applicationId,e)),deleteRole:async(e,t)=>await u.delete(u.routes.guilds.roles.one(e,t)),deleteScheduledEvent:async(e,t)=>await u.delete(u.routes.guilds.events.event(e,t)),deleteStageInstance:async(e,t)=>await u.delete(u.routes.channels.stage(e),t?{reason:t}:void 0),deleteWebhook:async(e,t)=>await u.delete(u.routes.webhooks.id(e),{reason:t}),deleteWebhookMessage:async(e,t,a,s)=>await u.delete(u.routes.webhooks.message(e,t,a,s)),deleteWebhookWithToken:async(e,t)=>await u.delete(u.routes.webhooks.webhook(e,t)),editApplicationCommandPermissions:async(e,t,a,s)=>await u.put(u.routes.interactions.commands.permission(u.applicationId,e,t),{permissions:s},{headers:{authorization:`Bearer ${a}`}}),editAutomodRule:async(e,t,a)=>await u.patch(u.routes.guilds.automod.rule(e,t),a),async editBotProfile(e){let t=e?.botAvatarURL?await r(e?.botAvatarURL):e?.botAvatarURL;return await u.patch(u.routes.userBot(),{username:e.username?.trim(),avatar:t})},editChannel:async(e,t)=>await u.patch(u.routes.channels.channel(e),t),editChannelPermissionOverrides:async(e,t)=>await u.put(u.routes.channels.overwrite(e,t.id),t),editChannelPositions:async(e,t)=>await u.patch(u.routes.guilds.channels(e),t),editEmoji:async(e,t,a)=>await u.patch(u.routes.guilds.emoji(e,t),a),editFollowupMessage:async(e,t,a)=>await u.patch(u.routes.interactions.responses.message(u.applicationId,e,t),a),editGlobalApplicationCommand:async(e,t)=>await u.patch(u.routes.interactions.commands.command(u.applicationId,e),t),editGuildApplicationCommand:async(e,t,a)=>await u.patch(u.routes.interactions.commands.guilds.one(u.applicationId,t,e),a),editGuildTemplate:async(e,t,a)=>await u.patch(u.routes.guilds.templates.guild(e,t),a),editMessage:async(e,t,a)=>await u.patch(u.routes.channels.message(e,t),a),editOriginalInteractionResponse:async(e,t)=>await u.patch(u.routes.interactions.responses.original(u.applicationId,e),t),editOriginalWebhookMessage:async(t,a,s)=>await u.patch(u.routes.webhooks.original(t,a,s),{type:e.UpdateMessage,data:s}),editScheduledEvent:async(e,t,a)=>await u.patch(u.routes.guilds.events.event(e,t),a),editRole:async(e,t,a)=>await u.patch(u.routes.guilds.roles.one(e,t),a),editRolePositions:async(e,t)=>await u.patch(u.routes.guilds.roles.all(e),t),editStageInstance:async(e,t)=>await u.patch(u.routes.channels.stage(e),{topic:t.topic}),editWebhook:async(e,t)=>await u.patch(u.routes.webhooks.id(e),t),editWebhookMessage:async(t,a,s,i)=>await u.patch(u.routes.webhooks.message(t,a,s,i),{type:e.UpdateMessage,data:i}),editWebhookWithToken:async(e,t,a)=>await u.patch(u.routes.webhooks.webhook(e,t),a),executeWebhook:async(e,t,a)=>await u.post(u.routes.webhooks.webhook(e,t,a),a),followAnnouncement:async(e,t)=>await u.post(u.routes.channels.follow(e),{webhook_channel_id:t}),getActiveThreads:async e=>await u.get(u.routes.channels.threads.active(e)),getApplicationCommandPermission:async(e,t)=>await u.get(u.routes.interactions.commands.permission(u.applicationId,e,t)),getApplicationCommandPermissions:async e=>await u.get(u.routes.interactions.commands.permissions(u.applicationId,e)),getApplicationInfo:async()=>await u.get(u.routes.oauth2Application()),getAutomodRule:async(e,t)=>await u.get(u.routes.guilds.automod.rule(e,t)),getAutomodRules:async e=>await u.get(u.routes.guilds.automod.rules(e)),getChannel:async e=>await u.get(u.routes.channels.channel(e)),getChannelInvites:async e=>await u.get(u.routes.channels.invites(e)),getChannels:async e=>await u.get(u.routes.guilds.channels(e)),getChannelWebhooks:async e=>await u.get(u.routes.channels.webhooks(e)),getDmChannel:async e=>await u.post(u.routes.channels.dm(),{recipient_id:e.toString()}),getEmoji:async(e,t)=>await u.get(u.routes.guilds.emoji(e,t)),getEmojis:async e=>await u.get(u.routes.guilds.emojis(e)),getFollowupMessage:async(e,t)=>await u.get(u.routes.interactions.responses.message(u.applicationId,e,t)),getGatewayBot:async()=>await u.get(u.routes.gatewayBot()),getGlobalApplicationCommand:async e=>await u.get(u.routes.interactions.commands.command(u.applicationId,e)),getGlobalApplicationCommands:async()=>await u.get(u.routes.interactions.commands.commands(u.applicationId)),getGuildApplicationCommand:async(e,t)=>await u.get(u.routes.interactions.commands.guilds.one(u.applicationId,t,e)),getGuildApplicationCommands:async e=>await u.get(u.routes.interactions.commands.guilds.all(u.applicationId,e)),getGuildTemplate:async e=>await u.get(u.routes.guilds.templates.code(e)),getGuildTemplates:async e=>await u.get(u.routes.guilds.templates.all(e)),getGuildWebhooks:async e=>await u.get(u.routes.guilds.webhooks(e)),getIntegrations:async e=>await u.get(u.routes.guilds.integrations(e)),getInvite:async(e,t)=>await u.get(u.routes.guilds.invite(e,t)),getInvites:async e=>await u.get(u.routes.guilds.invites(e)),getNitroStickerPacks:async()=>await u.get(u.routes.nitroStickerPacks()),getOriginalInteractionResponse:async e=>await u.get(u.routes.interactions.responses.original(u.applicationId,e)),getPrivateArchivedThreads:async(e,t)=>await u.get(u.routes.channels.threads.private(e,t)),getPrivateJoinedArchivedThreads:async(e,t)=>await u.get(u.routes.channels.threads.joined(e,t)),getPublicArchivedThreads:async(e,t)=>await u.get(u.routes.channels.threads.public(e,t)),getRoles:async e=>await u.get(u.routes.guilds.roles.all(e)),getScheduledEvent:async(e,t,a)=>await u.get(u.routes.guilds.events.event(e,t,a?.withUserCount)),getScheduledEvents:async(e,t)=>await u.get(u.routes.guilds.events.events(e,t?.withUserCount)),getScheduledEventUsers:async(e,t,a)=>await u.get(u.routes.guilds.events.users(e,t,a)),getSessionInfo:async()=>await u.getGatewayBot(),getStageInstance:async e=>await u.get(u.routes.channels.stage(e)),getThreadMember:async(e,t)=>await u.get(u.routes.channels.threads.user(e,t)),getThreadMembers:async e=>await u.get(u.routes.channels.threads.members(e)),getUser:async e=>await u.get(u.routes.user(e)),getWebhook:async e=>await u.get(u.routes.webhooks.id(e)),getWebhookMessage:async(e,t,a,s)=>await u.get(u.routes.webhooks.message(e,t,a,s)),getWebhookWithToken:async(e,t)=>await u.get(u.routes.webhooks.webhook(e,t)),joinThread:async e=>await u.put(u.routes.channels.threads.me(e)),leaveThread:async e=>await u.delete(u.routes.channels.threads.me(e)),publishMessage:async(e,t)=>await u.post(u.routes.channels.crosspost(e,t)),removeRole:async(e,t,a,s)=>await u.delete(u.routes.guilds.roles.member(e,t,a),{reason:s}),removeThreadMember:async(e,t)=>await u.delete(u.routes.channels.threads.user(e,t)),sendFollowupMessage:async(e,t)=>await new Promise((a,s)=>{u.sendRequest({url:u.routes.webhooks.webhook(u.applicationId,e),method:"POST",body:t,retryCount:0,retryRequest:async function(e){await u.sendRequest(e)},resolve:a,reject:s})}),sendInteractionResponse:async(e,t,a)=>await new Promise((s,i)=>{u.sendRequest({url:u.routes.interactions.responses.callback(e,t),method:"POST",body:a,retryCount:0,retryRequest:async function(e){await u.sendRequest(e)},resolve:s,reject:i})}),sendMessage:async(e,t)=>await u.post(u.routes.channels.messages(e),t),startThreadWithMessage:async(e,t,a)=>await u.post(u.routes.channels.threads.message(e,t),a),startThreadWithoutMessage:async(e,t)=>await u.post(u.routes.channels.threads.all(e),t),syncGuildTemplate:async e=>await u.put(u.routes.guilds.templates.all(e)),banMember:async(e,t,a)=>await u.put(u.routes.guilds.members.ban(e,t),a),editBotMember:async(e,t)=>await u.patch(u.routes.guilds.members.bot(e),t),editMember:async(e,t,a)=>await u.patch(u.routes.guilds.members.member(e,t),a),getMember:async(e,t)=>await u.get(u.routes.guilds.members.member(e,t)),getMembers:async(e,t)=>await u.get(u.routes.guilds.members.members(e,t)),kickMember:async(e,t,a)=>await u.delete(u.routes.guilds.members.member(e,t),{reason:a}),pruneMembers:async(e,t)=>await u.post(u.routes.guilds.members.prune(e),t),searchMembers:async(e,t,a)=>await u.get(u.routes.guilds.members.search(e,t,a)),unbanMember:async(e,t)=>await u.delete(u.routes.guilds.members.ban(e,t)),triggerTypingIndicator:async e=>await u.post(u.routes.channels.typing(e)),upsertGlobalApplicationCommands:async e=>await u.put(u.routes.interactions.commands.commands(u.applicationId),e),upsertGuildApplicationCommands:async(e,t)=>await u.put(u.routes.interactions.commands.guilds.all(u.applicationId,e),t)};return u}
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEludGVyYWN0aW9uUmVzcG9uc2VUeXBlcyB9IGZyb20gJ0BkaXNjb3JkZW5vL3R5cGVzJ1xuaW1wb3J0IHsgY2FtZWxpemUsIGNhbWVsVG9TbmFrZUNhc2UsIGRlbGF5LCBmaW5kRmlsZXMsIGdldEJvdElkRnJvbVRva2VuLCBsb2dnZXIsIHVybFRvQmFzZTY0IH0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnXG5cbmltcG9ydCB7IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0IH0gZnJvbSAnLi9pbnZhbGlkQnVja2V0LmpzJ1xuaW1wb3J0IHsgUXVldWUgfSBmcm9tICcuL3F1ZXVlLmpzJ1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zLFxuICBCaWdTdHJpbmcsXG4gIENhbWVsaXplLFxuICBDcmVhdGVBcHBsaWNhdGlvbkNvbW1hbmQsXG4gIENyZWF0ZUF1dG9Nb2RlcmF0aW9uUnVsZU9wdGlvbnMsXG4gIENyZWF0ZUNoYW5uZWxJbnZpdGUsXG4gIENyZWF0ZUZvcnVtUG9zdFdpdGhNZXNzYWdlLFxuICBDcmVhdGVHdWlsZCxcbiAgQ3JlYXRlR3VpbGRDaGFubmVsLFxuICBDcmVhdGVHdWlsZEVtb2ppLFxuICBDcmVhdGVHdWlsZFJvbGUsXG4gIENyZWF0ZU1lc3NhZ2VPcHRpb25zLFxuICBDcmVhdGVTY2hlZHVsZWRFdmVudCxcbiAgQ3JlYXRlU3RhZ2VJbnN0YW5jZSxcbiAgRGVsZXRlV2ViaG9va01lc3NhZ2VPcHRpb25zLFxuICBEaXNjb3JkQWN0aXZlVGhyZWFkcyxcbiAgRGlzY29yZEFwcGxpY2F0aW9uLFxuICBEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kLFxuICBEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMsXG4gIERpc2NvcmRBcmNoaXZlZFRocmVhZHMsXG4gIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIERpc2NvcmRDaGFubmVsLFxuICBEaXNjb3JkQ3JlYXRlV2ViaG9vayxcbiAgRGlzY29yZEVtb2ppLFxuICBEaXNjb3JkRm9sbG93QW5ub3VuY2VtZW50Q2hhbm5lbCxcbiAgRGlzY29yZEZvbGxvd2VkQ2hhbm5lbCxcbiAgRGlzY29yZEdldEdhdGV3YXlCb3QsXG4gIERpc2NvcmRHdWlsZCxcbiAgRGlzY29yZEludGVncmF0aW9uLFxuICBEaXNjb3JkSW52aXRlLFxuICBEaXNjb3JkSW52aXRlTWV0YWRhdGEsXG4gIERpc2NvcmRMaXN0QWN0aXZlVGhyZWFkcyxcbiAgRGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHMsXG4gIERpc2NvcmRNZW1iZXIsXG4gIERpc2NvcmRNZW1iZXJXaXRoVXNlcixcbiAgRGlzY29yZE1lc3NhZ2UsXG4gIERpc2NvcmRSb2xlLFxuICBEaXNjb3JkU2NoZWR1bGVkRXZlbnQsXG4gIERpc2NvcmRTdGFnZUluc3RhbmNlLFxuICBEaXNjb3JkU3RpY2tlclBhY2ssXG4gIERpc2NvcmRUZW1wbGF0ZSxcbiAgRGlzY29yZFRocmVhZE1lbWJlcixcbiAgRGlzY29yZFVzZXIsXG4gIERpc2NvcmRXZWJob29rLFxuICBFZGl0QXV0b01vZGVyYXRpb25SdWxlT3B0aW9ucyxcbiAgRWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzT3B0aW9ucyxcbiAgRWRpdEd1aWxkUm9sZSxcbiAgRWRpdE1lc3NhZ2UsXG4gIEVkaXRTY2hlZHVsZWRFdmVudCxcbiAgRWRpdFN0YWdlSW5zdGFuY2VPcHRpb25zLFxuICBFeGVjdXRlV2ViaG9vayxcbiAgR2V0R3VpbGRQcnVuZUNvdW50UXVlcnksXG4gIEdldEludml0ZSxcbiAgR2V0TWVzc2FnZXNPcHRpb25zLFxuICBHZXRTY2hlZHVsZWRFdmVudHMsXG4gIEdldFNjaGVkdWxlZEV2ZW50VXNlcnMsXG4gIEdldFdlYmhvb2tNZXNzYWdlT3B0aW9ucyxcbiAgSW50ZXJhY3Rpb25DYWxsYmFja0RhdGEsXG4gIEludGVyYWN0aW9uUmVzcG9uc2UsXG4gIExpc3RBcmNoaXZlZFRocmVhZHMsXG4gIExpc3RHdWlsZE1lbWJlcnMsXG4gIE1vZGlmeUNoYW5uZWwsXG4gIE1vZGlmeUd1aWxkQ2hhbm5lbFBvc2l0aW9ucyxcbiAgTW9kaWZ5R3VpbGRFbW9qaSxcbiAgTW9kaWZ5Um9sZVBvc2l0aW9ucyxcbiAgTW9kaWZ5V2ViaG9vayxcbiAgU2VhcmNoTWVtYmVycyxcbiAgU3RhcnRUaHJlYWRXaXRoTWVzc2FnZSxcbiAgU3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZSxcbiAgV2l0aFJlYXNvbixcbn0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQgdHlwZSB7IEludmFsaWRSZXF1ZXN0QnVja2V0IH0gZnJvbSAnLi9pbnZhbGlkQnVja2V0LmpzJ1xuXG4vLyBUT0RPOiBtYWtlIGR5bmFtaWMgYmFzZWQgb24gcGFja2FnZS5qc29uIGZpbGVcbmNvbnN0IHZlcnNpb24gPSAnMTkuMC4wLWFscGhhLjEnXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZXN0TWFuYWdlcihvcHRpb25zOiBDcmVhdGVSZXN0TWFuYWdlck9wdGlvbnMpOiBSZXN0TWFuYWdlciB7XG4gIC8vIEZhbHN5IHRva2VuIHN0cmluZyBjaGVja1xuICBpZiAoIW9wdGlvbnMudG9rZW4pIHRocm93IG5ldyBFcnJvcignWW91IG11c3QgcHJvdmlkZSBhIHZhbGlkIHRva2VuLicpXG5cbiAgY29uc3QgcmVzdDogUmVzdE1hbmFnZXIgPSB7XG4gICAgdG9rZW46IG9wdGlvbnMudG9rZW4sXG4gICAgYXBwbGljYXRpb25JZDogb3B0aW9ucy5hcHBsaWNhdGlvbklkID8gQmlnSW50KG9wdGlvbnMuYXBwbGljYXRpb25JZCkgOiBnZXRCb3RJZEZyb21Ub2tlbihvcHRpb25zLnRva2VuKSxcbiAgICB2ZXJzaW9uOiBvcHRpb25zLnZlcnNpb24gPz8gMTAsXG4gICAgYmFzZVVybDogb3B0aW9ucy5iYXNlVXJsID8/ICdodHRwczovL2Rpc2NvcmQuY29tL2FwaScsXG4gICAgbWF4UmV0cnlDb3VudDogSW5maW5pdHksXG4gICAgZ2xvYmFsbHlSYXRlTGltaXRlZDogZmFsc2UsXG4gICAgcHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHM6IGZhbHNlLFxuICAgIGRlbGV0ZVF1ZXVlRGVsYXk6IDYwMDAwLFxuICAgIHF1ZXVlczogbmV3IE1hcCgpLFxuICAgIHJhdGVMaW1pdGVkUGF0aHM6IG5ldyBNYXAoKSxcbiAgICBpbnZhbGlkQnVja2V0OiBjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCh7fSksXG5cbiAgICByb3V0ZXM6IHtcbiAgICAgIHdlYmhvb2tzOiB7XG4gICAgICAgIGlkOiAod2ViaG9va0lkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvd2ViaG9va3MvJHt3ZWJob29rSWR9YFxuICAgICAgICB9LFxuICAgICAgICBtZXNzYWdlOiAod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvd2ViaG9va3MvJHt3ZWJob29rSWR9LyR7dG9rZW59L21lc3NhZ2VzLyR7bWVzc2FnZUlkfT9gXG5cbiAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMudGhyZWFkSWQpIHVybCArPSBgdGhyZWFkX2lkPSR7b3B0aW9ucy50aHJlYWRJZH1gXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICB9LFxuICAgICAgICBvcmlnaW5hbDogKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICBsZXQgdXJsID0gYC93ZWJob29rcy8ke3dlYmhvb2tJZH0vJHt0b2tlbn0vbWVzc2FnZXMvQG9yaWdpbmFsP2BcblxuICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy50aHJlYWRJZCkgdXJsICs9IGB0aHJlYWRfaWQ9JHtvcHRpb25zLnRocmVhZElkfWBcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgIH0sXG4gICAgICAgIHdlYmhvb2s6ICh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvd2ViaG9va3MvJHt3ZWJob29rSWR9LyR7dG9rZW59P2BcblxuICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucz8ud2FpdCAhPT0gdW5kZWZpbmVkKSB1cmwgKz0gYHdhaXQ9JHtvcHRpb25zLndhaXQudG9TdHJpbmcoKX1gXG4gICAgICAgICAgICBpZiAob3B0aW9ucy50aHJlYWRJZCkgdXJsICs9IGB0aHJlYWRfaWQ9JHtvcHRpb25zLnRocmVhZElkfWBcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgIH0sXG4gICAgICB9LFxuXG4gICAgICAvLyBNaXNjZWxsYW5lb3VzIEVuZHBvaW50c1xuICAgICAgc2Vzc2lvbkluZm86ICgpID0+IHJlc3Qucm91dGVzLmdhdGV3YXlCb3QoKSxcblxuICAgICAgLy8gQ2hhbm5lbCBFbmRwb2ludHNcbiAgICAgIGNoYW5uZWxzOiB7XG4gICAgICAgIGRtOiAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuICcvdXNlcnMvQG1lL2NoYW5uZWxzJ1xuICAgICAgICB9LFxuICAgICAgICB3ZWJob29rczogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS93ZWJob29rc2BcbiAgICAgICAgfSxcblxuICAgICAgICBjaGFubmVsOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9YFxuICAgICAgICB9LFxuXG4gICAgICAgIGZvbGxvdzogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9mb2xsb3dlcnNgXG4gICAgICAgIH0sXG5cbiAgICAgICAgZm9ydW06IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vdGhyZWFkcz9oYXNfbWVzc2FnZT10cnVlYFxuICAgICAgICB9LFxuXG4gICAgICAgIGludml0ZXM6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vaW52aXRlc2BcbiAgICAgICAgfSxcblxuICAgICAgICBtZXNzYWdlOiAoY2hhbm5lbElkLCBtZXNzYWdlSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vbWVzc2FnZXMvJHttZXNzYWdlSWR9YFxuICAgICAgICB9LFxuXG4gICAgICAgIG1lc3NhZ2VzOiAoY2hhbm5lbElkLCBvcHRpb25zPzogR2V0TWVzc2FnZXNPcHRpb25zKSA9PiB7XG4gICAgICAgICAgY29uc3QgdXJsID0gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vbWVzc2FnZXM/YFxuXG4gICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIC8vIGlmIChpc0dldE1lc3NhZ2VzQWZ0ZXIob3B0aW9ucykgJiYgb3B0aW9ucy5hZnRlcikge1xuICAgICAgICAgICAgLy8gICB1cmwgKz0gYGFmdGVyPSR7b3B0aW9ucy5hZnRlcn1gXG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBpZiAoaXNHZXRNZXNzYWdlc0JlZm9yZShvcHRpb25zKSAmJiBvcHRpb25zLmJlZm9yZSkge1xuICAgICAgICAgICAgLy8gICB1cmwgKz0gYCZiZWZvcmU9JHtvcHRpb25zLmJlZm9yZX1gXG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBpZiAoaXNHZXRNZXNzYWdlc0Fyb3VuZChvcHRpb25zKSAmJiBvcHRpb25zLmFyb3VuZCkge1xuICAgICAgICAgICAgLy8gICB1cmwgKz0gYCZhcm91bmQ9JHtvcHRpb25zLmFyb3VuZH1gXG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBpZiAoaXNHZXRNZXNzYWdlc0xpbWl0KG9wdGlvbnMpICYmIG9wdGlvbnMubGltaXQpIHtcbiAgICAgICAgICAgIC8vICAgdXJsICs9IGAmbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgIH0sXG5cbiAgICAgICAgb3ZlcndyaXRlOiAoY2hhbm5lbElkLCBvdmVyd3JpdGVJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9wZXJtaXNzaW9ucy8ke292ZXJ3cml0ZUlkfWBcbiAgICAgICAgfSxcblxuICAgICAgICBjcm9zc3Bvc3Q6IChjaGFubmVsSWQsIG1lc3NhZ2VJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9tZXNzYWdlcy8ke21lc3NhZ2VJZH0vY3Jvc3Nwb3N0YFxuICAgICAgICB9LFxuXG4gICAgICAgIHN0YWdlczogKCkgPT4ge1xuICAgICAgICAgIHJldHVybiAnL3N0YWdlLWluc3RhbmNlcydcbiAgICAgICAgfSxcblxuICAgICAgICBzdGFnZTogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL3N0YWdlLWluc3RhbmNlcy8ke2NoYW5uZWxJZH1gXG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gVGhyZWFkIEVuZHBvaW50c1xuICAgICAgICB0aHJlYWRzOiB7XG4gICAgICAgICAgbWVzc2FnZTogKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vbWVzc2FnZXMvJHttZXNzYWdlSWR9L3RocmVhZHNgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbGw6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS90aHJlYWRzYFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWN0aXZlOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vdGhyZWFkcy9hY3RpdmVgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZW1iZXJzOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vdGhyZWFkLW1lbWJlcnNgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZTogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3RocmVhZC1tZW1iZXJzL0BtZWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVzZXI6IChjaGFubmVsSWQsIHVzZXJJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3RocmVhZC1tZW1iZXJzLyR7dXNlcklkfWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFyY2hpdmVkOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vdGhyZWFkcy9hcmNoaXZlZGBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHB1YmxpYzogKGNoYW5uZWxJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3RocmVhZHMvYXJjaGl2ZWQvcHVibGljP2BcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgdXJsICs9IGBiZWZvcmU9JHtuZXcgRGF0ZShvcHRpb25zLmJlZm9yZSkudG9JU09TdHJpbmcoKX1gXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCkgdXJsICs9IGAmbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJpdmF0ZTogKGNoYW5uZWxJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3RocmVhZHMvYXJjaGl2ZWQvcHJpdmF0ZT9gXG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmJlZm9yZSkge1xuICAgICAgICAgICAgICAgIHVybCArPSBgYmVmb3JlPSR7bmV3IERhdGUob3B0aW9ucy5iZWZvcmUpLnRvSVNPU3RyaW5nKCl9YFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubGltaXQpIHVybCArPSBgJmxpbWl0PSR7b3B0aW9ucy5saW1pdH1gXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGpvaW5lZDogKGNoYW5uZWxJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3VzZXJzL0BtZS90aHJlYWRzL2FyY2hpdmVkL3ByaXZhdGU/YFxuXG4gICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5iZWZvcmUpIHtcbiAgICAgICAgICAgICAgICB1cmwgKz0gYGJlZm9yZT0ke25ldyBEYXRlKG9wdGlvbnMuYmVmb3JlKS50b0lTT1N0cmluZygpfWBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0KSB1cmwgKz0gYCZsaW1pdD0ke29wdGlvbnMubGltaXR9YFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICB0eXBpbmc6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vdHlwaW5nYFxuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgICAgLy8gR3VpbGQgRW5kcG9pbnRzXG4gICAgICBndWlsZHM6IHtcbiAgICAgICAgYWxsOiAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuICcvZ3VpbGRzJ1xuICAgICAgICB9LFxuICAgICAgICBhdXRvbW9kOiB7XG4gICAgICAgICAgcnVsZTogKGd1aWxkSWQsIHJ1bGVJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vYXV0by1tb2RlcmF0aW9uL3J1bGVzLyR7cnVsZUlkfWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJ1bGVzOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vYXV0by1tb2RlcmF0aW9uL3J1bGVzYFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNoYW5uZWxzOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L2NoYW5uZWxzYFxuICAgICAgICB9LFxuICAgICAgICBlbW9qaTogKGd1aWxkSWQsIGVtb2ppSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9lbW9qaXMvJHtlbW9qaUlkfWBcbiAgICAgICAgfSxcbiAgICAgICAgZW1vamlzOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L2Vtb2ppc2BcbiAgICAgICAgfSxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgZXZlbnRzOiAoZ3VpbGRJZCwgd2l0aFVzZXJDb3VudD86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgIGxldCB1cmwgPSBgL2d1aWxkcy8ke2d1aWxkSWR9L3NjaGVkdWxlZC1ldmVudHM/YFxuXG4gICAgICAgICAgICBpZiAod2l0aFVzZXJDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHVybCArPSBgd2l0aF91c2VyX2NvdW50PSR7d2l0aFVzZXJDb3VudC50b1N0cmluZygpfWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGV2ZW50OiAoZ3VpbGRJZCwgZXZlbnRJZCwgd2l0aFVzZXJDb3VudD86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgIGxldCB1cmwgPSBgL2d1aWxkcy8ke2d1aWxkSWR9L3NjaGVkdWxlZC1ldmVudHMvJHtldmVudElkfWBcblxuICAgICAgICAgICAgaWYgKHdpdGhVc2VyQ291bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB1cmwgKz0gYHdpdGhfdXNlcl9jb3VudD0ke3dpdGhVc2VyQ291bnQudG9TdHJpbmcoKX1gXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVzZXJzOiAoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucz86IEdldFNjaGVkdWxlZEV2ZW50VXNlcnMpID0+IHtcbiAgICAgICAgICAgIGxldCB1cmwgPSBgL2d1aWxkcy8ke2d1aWxkSWR9L3NjaGVkdWxlZC1ldmVudHMvJHtldmVudElkfS91c2Vycz9gXG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubGltaXQgIT09IHVuZGVmaW5lZCkgdXJsICs9IGBsaW1pdD0ke29wdGlvbnMubGltaXR9YFxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy53aXRoTWVtYmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgICAgdXJsICs9IGAmd2l0aF9tZW1iZXI9JHtvcHRpb25zLndpdGhNZW1iZXIudG9TdHJpbmcoKX1gXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hZnRlciAhPT0gdW5kZWZpbmVkKSB1cmwgKz0gYCZhZnRlcj0ke29wdGlvbnMuYWZ0ZXJ9YFxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmJlZm9yZSAhPT0gdW5kZWZpbmVkKSB1cmwgKz0gYCZiZWZvcmU9JHtvcHRpb25zLmJlZm9yZX1gXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBndWlsZChndWlsZElkLCB3aXRoQ291bnRzKSB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvZ3VpbGRzLyR7Z3VpbGRJZH0/YFxuXG4gICAgICAgICAgaWYgKHdpdGhDb3VudHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdXJsICs9IGB3aXRoX2NvdW50cz0ke3dpdGhDb3VudHMudG9TdHJpbmcoKX1gXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICB9LFxuICAgICAgICBpbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkKSB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vaW50ZWdyYXRpb25zLyR7aW50ZWdyYXRpb25JZH1gXG4gICAgICAgIH0sXG4gICAgICAgIGludGVncmF0aW9uczogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9pbnRlZ3JhdGlvbnM/aW5jbHVkZV9hcHBsaWNhdGlvbnM9dHJ1ZWBcbiAgICAgICAgfSxcbiAgICAgICAgaW52aXRlKGludml0ZUNvZGUsIG9wdGlvbnMpIHtcbiAgICAgICAgICBsZXQgdXJsID0gYC9pbnZpdGVzLyR7aW52aXRlQ29kZX0/YFxuXG4gICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLndpdGhDb3VudHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIHVybCArPSBgd2l0aF9jb3VudHM9JHtvcHRpb25zLndpdGhDb3VudHMudG9TdHJpbmcoKX1gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy53aXRoRXhwaXJhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgdXJsICs9IGAmd2l0aF9leHBpcmF0aW9uPSR7b3B0aW9ucy53aXRoRXhwaXJhdGlvbi50b1N0cmluZygpfWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnNjaGVkdWxlZEV2ZW50SWQpIHtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICB1cmwgKz0gYCZndWlsZF9zY2hlZHVsZWRfZXZlbnRfaWQ9JHtvcHRpb25zLnNjaGVkdWxlZEV2ZW50SWR9YFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgfSxcbiAgICAgICAgaW52aXRlczogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9pbnZpdGVzYFxuICAgICAgICB9LFxuICAgICAgICBtZW1iZXJzOiB7XG4gICAgICAgICAgYmFuOiAoZ3VpbGRJZCwgdXNlcklkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9iYW5zLyR7dXNlcklkfWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJvdDogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L21lbWJlcnMvQG1lYFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVtYmVyOiAoZ3VpbGRJZCwgdXNlcklkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9tZW1iZXJzLyR7dXNlcklkfWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lbWJlcnM6IChndWlsZElkLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtndWlsZElkfS9tZW1iZXJzP2BcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0KSB1cmwgKz0gYGxpbWl0PSR7b3B0aW9ucy5saW1pdH1gXG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXIpIHVybCArPSBgJmFmdGVyPSR7b3B0aW9ucy5hZnRlcn1gXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlYXJjaDogKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtndWlsZElkfS9tZW1iZXJzL3NlYXJjaD9xdWVyeT0ke2VuY29kZVVSSUNvbXBvbmVudChxdWVyeSl9YFxuXG4gICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCAhPT0gdW5kZWZpbmVkKSB1cmwgKz0gYCZsaW1pdD0ke29wdGlvbnMubGltaXR9YFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcnVuZTogKGd1aWxkSWQsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGxldCB1cmwgPSBgL2d1aWxkcy8ke2d1aWxkSWR9L3BydW5lP2BcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5kYXlzKSB1cmwgKz0gYGRheXM9JHtvcHRpb25zLmRheXN9YFxuICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLmluY2x1ZGVSb2xlcykpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgICAgdXJsICs9IGAmaW5jbHVkZV9yb2xlcz0ke29wdGlvbnMuaW5jbHVkZVJvbGVzLmpvaW4oJywnKX1gXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5pbmNsdWRlUm9sZXMpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgICAgdXJsICs9IGAmaW5jbHVkZV9yb2xlcz0ke29wdGlvbnMuaW5jbHVkZVJvbGVzfWBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcm9sZXM6IHtcbiAgICAgICAgICBvbmU6IChndWlsZElkOiBCaWdTdHJpbmcsIHJvbGVJZDogQmlnU3RyaW5nKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9yb2xlcy8ke3JvbGVJZH1gXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbGw6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L3JvbGVzYFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVtYmVyOiAoZ3VpbGRJZCwgbWVtYmVySWQsIHJvbGVJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vbWVtYmVycy8ke21lbWJlcklkfS9yb2xlcy8ke3JvbGVJZH1gXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgY29kZTogKGNvZGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2d1aWxkcy90ZW1wbGF0ZXMvJHtjb2RlfWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIGd1aWxkOiAoZ3VpbGRJZCwgY29kZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vdGVtcGxhdGVzLyR7Y29kZX1gXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbGw6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS90ZW1wbGF0ZXNgXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgd2ViaG9va3M6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vd2ViaG9va3NgXG4gICAgICAgIH0sXG4gICAgICB9LFxuXG4gICAgICAvLyBJbnRlcmFjdGlvbiBFbmRwb2ludHNcbiAgICAgIGludGVyYWN0aW9uczoge1xuICAgICAgICBjb21tYW5kczoge1xuICAgICAgICAgIC8vIEFwcGxpY2F0aW9uIEVuZHBvaW50c1xuICAgICAgICAgIGNvbW1hbmRzOiAoYXBwbGljYXRpb25JZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvYXBwbGljYXRpb25zLyR7YXBwbGljYXRpb25JZH0vY29tbWFuZHNgXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGd1aWxkczoge1xuICAgICAgICAgICAgYWxsKGFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGAvYXBwbGljYXRpb25zLyR7YXBwbGljYXRpb25JZH0vZ3VpbGRzLyR7Z3VpbGRJZH0vY29tbWFuZHNgXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBvbmUoYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkLCB3aXRoTG9jYWxpemF0aW9ucykge1xuICAgICAgICAgICAgICBsZXQgdXJsID0gYC9hcHBsaWNhdGlvbnMvJHthcHBsaWNhdGlvbklkfS9ndWlsZHMvJHtndWlsZElkfS9jb21tYW5kcy8ke2NvbW1hbmRJZH0/YFxuXG4gICAgICAgICAgICAgIGlmICh3aXRoTG9jYWxpemF0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdXJsICs9IGB3aXRoX2xvY2FsaXphdGlvbnM9JHt3aXRoTG9jYWxpemF0aW9ucy50b1N0cmluZygpfWBcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwZXJtaXNzaW9uczogKGFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2FwcGxpY2F0aW9ucy8ke2FwcGxpY2F0aW9uSWR9L2d1aWxkcy8ke2d1aWxkSWR9L2NvbW1hbmRzL3Blcm1pc3Npb25zYFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGVybWlzc2lvbjogKGFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvYXBwbGljYXRpb25zLyR7YXBwbGljYXRpb25JZH0vZ3VpbGRzLyR7Z3VpbGRJZH0vY29tbWFuZHMvJHtjb21tYW5kSWR9L3Blcm1pc3Npb25zYFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tbWFuZDogKGFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCwgd2l0aExvY2FsaXphdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGxldCB1cmwgPSBgL2FwcGxpY2F0aW9ucy8ke2FwcGxpY2F0aW9uSWR9L2NvbW1hbmRzLyR7Y29tbWFuZElkfT9gXG5cbiAgICAgICAgICAgIGlmICh3aXRoTG9jYWxpemF0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHVybCArPSBgd2l0aExvY2FsaXphdGlvbnM9JHt3aXRoTG9jYWxpemF0aW9ucy50b1N0cmluZygpfWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVzcG9uc2VzOiB7XG4gICAgICAgICAgLy8gSW50ZXJhY3Rpb24gRW5kcG9pbnRzXG4gICAgICAgICAgY2FsbGJhY2s6IChpbnRlcmFjdGlvbklkLCB0b2tlbikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvaW50ZXJhY3Rpb25zLyR7aW50ZXJhY3Rpb25JZH0vJHt0b2tlbn0vY2FsbGJhY2tgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvcmlnaW5hbDogKGludGVyYWN0aW9uSWQsIHRva2VuKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC93ZWJob29rcy8ke2ludGVyYWN0aW9uSWR9LyR7dG9rZW59L21lc3NhZ2VzL0BvcmlnaW5hbGBcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lc3NhZ2U6IChhcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC93ZWJob29rcy8ke2FwcGxpY2F0aW9uSWR9LyR7dG9rZW59L21lc3NhZ2VzLyR7bWVzc2FnZUlkfWBcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgICAgLy8gVXNlciBlbmRwb2ludHNcbiAgICAgIHVzZXIodXNlcklkKSB7XG4gICAgICAgIHJldHVybiBgL3VzZXJzLyR7dXNlcklkfWBcbiAgICAgIH0sXG5cbiAgICAgIHVzZXJCb3QoKSB7XG4gICAgICAgIHJldHVybiAnL3VzZXJzL0BtZSdcbiAgICAgIH0sXG5cbiAgICAgIG9hdXRoMkFwcGxpY2F0aW9uKCkge1xuICAgICAgICByZXR1cm4gJ29hdXRoMi9hcHBsaWNhdGlvbnMvQG1lJ1xuICAgICAgfSxcblxuICAgICAgZ2F0ZXdheUJvdCgpIHtcbiAgICAgICAgcmV0dXJuICcvZ2F0ZXdheS9ib3QnXG4gICAgICB9LFxuXG4gICAgICBuaXRyb1N0aWNrZXJQYWNrcygpIHtcbiAgICAgICAgcmV0dXJuICcvc3RpY2tlci1wYWNrcydcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIGNoZWNrUmF0ZUxpbWl0cyh1cmwpIHtcbiAgICAgIGNvbnN0IHJhdGVsaW1pdGVkID0gcmVzdC5yYXRlTGltaXRlZFBhdGhzLmdldCh1cmwpXG4gICAgICBjb25zdCBnbG9iYWwgPSByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZ2V0KCdnbG9iYWwnKVxuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKVxuXG4gICAgICBpZiAocmF0ZWxpbWl0ZWQgJiYgbm93IDwgcmF0ZWxpbWl0ZWQucmVzZXRUaW1lc3RhbXApIHtcbiAgICAgICAgcmV0dXJuIHJhdGVsaW1pdGVkLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iYWwgJiYgbm93IDwgZ2xvYmFsLnJlc2V0VGltZXN0YW1wKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWwucmVzZXRUaW1lc3RhbXAgLSBub3dcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGNoYW5nZVRvRGlzY29yZEZvcm1hdChvYmo6IGFueSk6IGFueSB7XG4gICAgICBpZiAob2JqID09PSBudWxsKSByZXR1cm4gbnVsbFxuXG4gICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICAgIHJldHVybiBvYmoubWFwKChpdGVtKSA9PiByZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChpdGVtKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld09iajogYW55ID0ge31cblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3Blcm1pc3Npb25zJykge1xuICAgICAgICAgICAgbmV3T2JqLnBlcm1pc3Npb25zID0gJzEyMzQ1Njc4OTAnXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5ld09ialtjYW1lbFRvU25ha2VDYXNlKGtleSldID0gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob2JqW2tleV0pXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3T2JqXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50JykgcmV0dXJuIG9iai50b1N0cmluZygpXG5cbiAgICAgIHJldHVybiBvYmpcbiAgICB9LFxuXG4gICAgY3JlYXRlUmVxdWVzdChvcHRpb25zKSB7XG4gICAgICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgICAndXNlci1hZ2VudCc6IGBEaXNjb3JkQm90IChodHRwczovL2dpdGh1Yi5jb20vZGlzY29yZGVuby9kaXNjb3JkZW5vLCB2JHt2ZXJzaW9ufSlgLFxuICAgICAgfVxuXG4gICAgICBpZiAoIW9wdGlvbnMudW5hdXRob3JpemVkKSBoZWFkZXJzLmF1dGhvcml6YXRpb24gPSBgQm90ICR7cmVzdC50b2tlbn1gXG5cbiAgICAgIC8vIFNPTUVUSU1FUyBTUEVDSUFMIEhFQURFUlMgKEUuRy4gQ1VTVE9NIEFVVEhPUklaQVRJT04pIE5FRUQgVE8gQkUgVVNFRFxuICAgICAgaWYgKG9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICBoZWFkZXJzW2tleS50b0xvd2VyQ2FzZSgpXSA9IG9wdGlvbnMuaGVhZGVyc1trZXldXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gR0VUIE1FVEhPRFMgU0hPVUxEIE5PVCBIQVZFIEEgQk9EWVxuICAgICAgaWYgKG9wdGlvbnMubWV0aG9kID09PSAnR0VUJykge1xuICAgICAgICBvcHRpb25zLmJvZHkgPSB1bmRlZmluZWRcbiAgICAgIH1cblxuICAgICAgLy8gSUYgQSBSRUFTT04gSVMgUFJPVklERUQgRU5DT0RFIElUIElOIEhFQURFUlNcbiAgICAgIGlmIChvcHRpb25zLmJvZHk/LnJlYXNvbikge1xuICAgICAgICBoZWFkZXJzWydYLUF1ZGl0LUxvZy1SZWFzb24nXSA9IGVuY29kZVVSSUNvbXBvbmVudChvcHRpb25zLmJvZHkucmVhc29uIGFzIHN0cmluZylcbiAgICAgICAgb3B0aW9ucy5ib2R5LnJlYXNvbiA9IHVuZGVmaW5lZFxuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5ib2R5KSB7XG4gICAgICAgIGNvbnN0IHsgZmlsZSB9ID0gb3B0aW9ucy5ib2R5XG4gICAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgICAgY29uc3QgZmlsZXMgPSBmaW5kRmlsZXMoZmlsZSlcbiAgICAgICAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKClcblxuICAgICAgICAgIC8vIFdIRU4gQ1JFQVRJTkcgQSBTVElDS0VSLCBESVNDT1JEIFdBTlRTIEZPUk0gREFUQSBPTkxZXG4gICAgICAgICAgaWYgKG9wdGlvbnMudXJsPy5lbmRzV2l0aCgnL3N0aWNrZXJzJykgJiYgb3B0aW9ucy5tZXRob2QgPT09ICdQT1NUJykge1xuICAgICAgICAgICAgZm9ybS5hcHBlbmQoJ2ZpbGUnLCBmaWxlc1swXS5ibG9iLCBmaWxlc1swXS5uYW1lKVxuICAgICAgICAgICAgZm9ybS5hcHBlbmQoJ25hbWUnLCBvcHRpb25zLmJvZHkubmFtZSBhcyBzdHJpbmcpXG4gICAgICAgICAgICBmb3JtLmFwcGVuZCgnZGVzY3JpcHRpb24nLCBvcHRpb25zLmJvZHkuZGVzY3JpcHRpb24gYXMgc3RyaW5nKVxuICAgICAgICAgICAgZm9ybS5hcHBlbmQoJ3RhZ3MnLCBvcHRpb25zLmJvZHkudGFncyBhcyBzdHJpbmcpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgZm9ybS5hcHBlbmQoYGZpbGUke2l9YCwgZmlsZXNbaV0uYmxvYiwgZmlsZXNbaV0ubmFtZSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZpbGUpIG9wdGlvbnMuYm9keS5maWxlID0gdW5kZWZpbmVkXG4gICAgICAgICAgICBmb3JtLmFwcGVuZCgncGF5bG9hZF9qc29uJywgSlNPTi5zdHJpbmdpZnkocmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob3B0aW9ucy5ib2R5KSkpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgb3B0aW9ucy5ib2R5LmZpbGUgPSBmb3JtXG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5ib2R5ICYmICFbJ0dFVCcsICdERUxFVEUnXS5pbmNsdWRlcyhvcHRpb25zLm1ldGhvZCkpIHtcbiAgICAgICAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIGJvZHk6IChvcHRpb25zLmJvZHk/LmZpbGUgPz8gSlNPTi5zdHJpbmdpZnkocmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob3B0aW9ucy5ib2R5KSkpIGFzIEZvcm1EYXRhIHwgc3RyaW5nLFxuICAgICAgICBtZXRob2Q6IG9wdGlvbnMubWV0aG9kLFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpIHtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmVudHJpZXMoKSkge1xuICAgICAgICAvLyAgIHJlc3QuZGVidWcoXG4gICAgICAgIC8vIGBbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIGZvciBvZiBsb29wLiAke1xuICAgICAgICAvLyAgIHZhbHVlLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICAgIC8vIH1gXG4gICAgICAgIC8vICAgKVxuICAgICAgICAvLyBJZiB0aGUgdGltZSBoYXMgbm90IHJlYWNoZWQgY2FuY2VsXG4gICAgICAgIGlmICh2YWx1ZS5yZXNldFRpbWVzdGFtcCA+IG5vdykgY29udGludWVcblxuICAgICAgICAvLyBSYXRlIGxpbWl0IGlzIG92ZXIsIGRlbGV0ZSB0aGUgcmF0ZSBsaW1pdGVyXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5kZWxldGUoa2V5KVxuICAgICAgICAvLyBJZiBpdCB3YXMgZ2xvYmFsLCBhbHNvIG1hcmsgdGhlIGdsb2JhbCB2YWx1ZSBhcyBmYWxzZVxuICAgICAgICBpZiAoa2V5ID09PSAnZ2xvYmFsJykgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgLy8gQUxMIFBBVEhTIEFSRSBDTEVBUkVEIENBTiBDQU5DRUwgT1VUIVxuICAgICAgaWYgKHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zaXplID09PSAwKSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyA9IHRydWVcbiAgICAgICAgLy8gUkVDSEVDSyBJTiAxIFNFQ09ORFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvLyByZXN0LmRlYnVnKCdbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIHNldFRpbWVvdXQuJylcbiAgICAgICAgICByZXN0LnByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKClcbiAgICAgICAgfSwgMTAwMClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqIFByb2Nlc3NlcyB0aGUgcmF0ZSBsaW1pdCBoZWFkZXJzIGFuZCBkZXRlcm1pbmVzIGlmIGl0IG5lZWRzIHRvIGJlIHJhdGUgbGltaXRlZCBhbmQgcmV0dXJucyB0aGUgYnVja2V0IGlkIGlmIGF2YWlsYWJsZSAqL1xuICAgIHByb2Nlc3NIZWFkZXJzKHVybCwgaGVhZGVycykge1xuICAgICAgbGV0IHJhdGVMaW1pdGVkID0gZmFsc2VcblxuICAgICAgLy8gR0VUIEFMTCBORUNFU1NBUlkgSEVBREVSU1xuICAgICAgY29uc3QgcmVtYWluaW5nID0gaGVhZGVycy5nZXQoJ3gtcmF0ZWxpbWl0LXJlbWFpbmluZycpXG4gICAgICBjb25zdCByZXRyeUFmdGVyID0gaGVhZGVycy5nZXQoJ3gtcmF0ZWxpbWl0LXJlc2V0LWFmdGVyJylcbiAgICAgIGNvbnN0IHJlc2V0ID0gRGF0ZS5ub3coKSArIE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDBcbiAgICAgIGNvbnN0IGdsb2JhbCA9IGhlYWRlcnMuZ2V0KCd4LXJhdGVsaW1pdC1nbG9iYWwnKVxuICAgICAgLy8gdW5kZWZpbmVkIG92ZXJyaWRlIG51bGwgbmVlZGVkIGZvciB0eXBpbmdzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IGhlYWRlcnMuZ2V0KCd4LXJhdGVsaW1pdC1idWNrZXQnKSA/PyB1bmRlZmluZWRcbiAgICAgIGNvbnN0IGxpbWl0ID0gaGVhZGVycy5nZXQoJ3gtcmF0ZWxpbWl0LWxpbWl0JylcblxuICAgICAgcmVzdC5xdWV1ZXMuZ2V0KHVybCk/LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3Qoe1xuICAgICAgICByZW1haW5pbmc6IHJlbWFpbmluZyA/IE51bWJlcihyZW1haW5pbmcpIDogdW5kZWZpbmVkLFxuICAgICAgICBpbnRlcnZhbDogcmV0cnlBZnRlciA/IE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDAgOiB1bmRlZmluZWQsXG4gICAgICAgIG1heDogbGltaXQgPyBOdW1iZXIobGltaXQpIDogdW5kZWZpbmVkLFxuICAgICAgfSlcblxuICAgICAgLy8gSUYgVEhFUkUgSVMgTk8gUkVNQUlOSU5HIFJBVEUgTElNSVQsIE1BUksgSVQgQVMgUkFURSBMSU1JVEVEXG4gICAgICBpZiAocmVtYWluaW5nID09PSAnMCcpIHtcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgLy8gU0FWRSBUSEUgVVJMIEFTIExJTUlURUQsIElNUE9SVEFOVCBGT1IgTkVXIFJFUVVFU1RTIEJZIFVTRVIgV0lUSE9VVCBCVUNLRVRcbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldCh1cmwsIHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IHJlc2V0LFxuICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIFNBVkUgVEhFIEJVQ0tFVCBBUyBMSU1JVEVEIFNJTkNFIERJRkZFUkVOVCBVUkxTIE1BWSBTSEFSRSBBIEJVQ0tFVFxuICAgICAgICBpZiAoYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGJ1Y2tldElkLCB7XG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICByZXNldFRpbWVzdGFtcDogcmVzZXQsXG4gICAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBHTE9CQUwgTElNSVQsIE1BUksgSVQgUkFURSBMSU1JVEVEIEdMT0JBTExZXG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBoZWFkZXJzLmdldCgncmV0cnktYWZ0ZXInKVxuICAgICAgICBjb25zdCBnbG9iYWxSZXNldCA9IERhdGUubm93KCkgKyBOdW1iZXIocmV0cnlBZnRlcikgKiAxMDAwXG4gICAgICAgIC8vICAgcmVzdC5kZWJ1ZyhcbiAgICAgICAgLy8gYFtSRVNUID0gR2xvYmFsbHkgUmF0ZSBMaW1pdGVkXSBVUkw6ICR7dXJsfSB8IEdsb2JhbCBSZXN0OiAke2dsb2JhbFJlc2V0fWBcbiAgICAgICAgLy8gICApXG4gICAgICAgIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IHRydWVcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgICAgfSwgZ2xvYmFsUmVzZXQpXG5cbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldCgnZ2xvYmFsJywge1xuICAgICAgICAgIHVybDogJ2dsb2JhbCcsXG4gICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IGdsb2JhbFJlc2V0LFxuICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChidWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYnVja2V0SWQsIHtcbiAgICAgICAgICAgIHVybDogJ2dsb2JhbCcsXG4gICAgICAgICAgICByZXNldFRpbWVzdGFtcDogZ2xvYmFsUmVzZXQsXG4gICAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyYXRlTGltaXRlZCAmJiAhcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocykge1xuICAgICAgICByZXN0LnByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiByYXRlTGltaXRlZCA/IGJ1Y2tldElkIDogdW5kZWZpbmVkXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHVybCA9IG9wdGlvbnMudXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykgPyBvcHRpb25zLnVybCA6IGAke3Jlc3QuYmFzZVVybH0vdiR7cmVzdC52ZXJzaW9ufSR7b3B0aW9ucy51cmx9YFxuICAgICAgY29uc3QgcGF5bG9hZCA9IHJlc3QuY3JlYXRlUmVxdWVzdCh7IG1ldGhvZDogb3B0aW9ucy5tZXRob2QsIHVybDogb3B0aW9ucy51cmwsIGJvZHk6IG9wdGlvbnMuYm9keSwgLi4ub3B0aW9ucy5vcHRpb25zIH0pXG5cbiAgICAgIGxvZ2dlci5kZWJ1Zyhgc2VuZGluZyByZXF1ZXN0IHRvICR7dXJsfWAsICd3aXRoIHBheWxvYWQ6JywgeyAuLi5wYXlsb2FkLCBoZWFkZXJzOiB7IC4uLnBheWxvYWQuaGVhZGVycywgYXV0aG9yaXphdGlvbjogJ0JvdCB0b2tlbmhlcmUnIH0gfSlcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCBwYXlsb2FkKVxuICAgICAgbG9nZ2VyLmRlYnVnKGByZXF1ZXN0IGZldGNoZWQgZnJvbSAke3VybH0gd2l0aCBzdGF0dXMgJHtyZXNwb25zZS5zdGF0dXN9ICYgJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApXG5cbiAgICAgIC8vIFNldCB0aGUgYnVja2V0IGlkIGlmIGl0IHdhcyBhdmFpbGFibGUgb24gdGhlIGhlYWRlcnNcbiAgICAgIGNvbnN0IGJ1Y2tldElkID0gcmVzdC5wcm9jZXNzSGVhZGVycyhyZXN0LnNpbXBsaWZ5VXJsKG9wdGlvbnMudXJsLCBvcHRpb25zLm1ldGhvZCksIHJlc3BvbnNlLmhlYWRlcnMpXG4gICAgICBpZiAoYnVja2V0SWQpIG9wdGlvbnMuYnVja2V0SWQgPSBidWNrZXRJZFxuXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzIDwgMjAwIHx8IHJlc3BvbnNlLnN0YXR1cyA+PSA0MDApIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSBmYWlsZWQuYClcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MjkpIHtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IHdhcyByYXRlbGltaXRlZC5gKVxuICAgICAgICAgIC8vIFRvbyBtYW55IGF0dGVtcHRzLCBnZXQgcmlkIG9mIHJlcXVlc3QgZnJvbSBxdWV1ZS5cbiAgICAgICAgICBpZiAob3B0aW9ucy5yZXRyeUNvdW50KysgPj0gcmVzdC5tYXhSZXRyeUNvdW50KSB7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGV4Y2VlZGVkIHRoZSBtYXhpbXVtIGFsbG93ZWQgcmV0cmllcy5gLCAnd2l0aCBwYXlsb2FkOicsIHBheWxvYWQpXG4gICAgICAgICAgICAvLyByZXN0LmRlYnVnKGBbUkVTVCAtIFJldHJpZXNNYXhlZF0gJHtKU09OLnN0cmluZ2lmeShvcHRpb25zKX1gKVxuICAgICAgICAgICAgLy8gUmVtb3ZlIGl0ZW0gZnJvbSBxdWV1ZSB0byBwcmV2ZW50IHJldHJ5XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5yZWplY3Q/Lih7XG4gICAgICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICAgIGVycm9yOiAnVGhlIG9wdGlvbnMgd2FzIHJhdGUgbGltaXRlZCBhbmQgaXQgbWF4ZWQgb3V0IHRoZSByZXRyaWVzIGxpbWl0LicsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFJhdGUgbGltaXRlZCwgYWRkIGJhY2sgdG8gcXVldWVcbiAgICAgICAgICByZXN0LmludmFsaWRCdWNrZXQuaGFuZGxlQ29tcGxldGVkUmVxdWVzdChyZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdYLVJhdGVMaW1pdC1TY29wZScpID09PSAnc2hhcmVkJylcblxuICAgICAgICAgIGNvbnN0IHJlc2V0QWZ0ZXIgPSByZXNwb25zZS5oZWFkZXJzLmdldCgneC1yYXRlbGltaXQtcmVzZXQtYWZ0ZXInKVxuICAgICAgICAgIGlmIChyZXNldEFmdGVyKSBhd2FpdCBkZWxheShOdW1iZXIocmVzZXRBZnRlcikgKiAxMDAwKVxuXG4gICAgICAgICAgcmV0dXJuIGF3YWl0IG9wdGlvbnMucmV0cnlSZXF1ZXN0Py4ob3B0aW9ucylcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcHRpb25zLnJlamVjdChhd2FpdCByZXNwb25zZS5qc29uKCkpXG4gICAgICB9XG5cbiAgICAgIC8vIERpc2NvcmQgc29tZXRpbWVzIHNlbmRzIG5vIHJlc3BvbnNlXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDQpIHJldHVybiBvcHRpb25zLnJlc29sdmUodW5kZWZpbmVkKVxuXG4gICAgICBvcHRpb25zLnJlc29sdmUoYXdhaXQgcmVzcG9uc2UuanNvbigpKVxuICAgIH0sXG5cbiAgICAvLyBDcmVkaXRzOiBnaXRodWIuY29tL2FiYWxhYmFoYWhhL2VyaXMgbGliL3Jlc3QvUmVxdWVzdEhhbmRsZXIuanMjTDM5N1xuICAgIC8vIE1vZGlmaWVkIGZvciBvdXIgdXNlLWNhc2VcbiAgICBzaW1wbGlmeVVybCh1cmwsIG1ldGhvZCkge1xuICAgICAgbGV0IHJvdXRlID0gdXJsXG4gICAgICAgIC5yZXBsYWNlKC9cXC8oW2Etei1dKylcXC8oPzpbMC05XXsxNywxOX0pL2csIGZ1bmN0aW9uIChtYXRjaCwgcDogc3RyaW5nKSB7XG4gICAgICAgICAgcmV0dXJuIFsnY2hhbm5lbHMnLCAnZ3VpbGRzJ10uaW5jbHVkZXMocCkgPyBtYXRjaCA6IGAvJHtwfS94YFxuICAgICAgICB9KVxuICAgICAgICAucmVwbGFjZSgvXFwvcmVhY3Rpb25zXFwvW14vXSsvZywgJy9yZWFjdGlvbnMveCcpXG5cbiAgICAgIC8vIEdFTkVSQUwgL3JlYWN0aW9ucyBhbmQgL3JlYWN0aW9ucy9lbW9qaS9AbWUgc2hhcmUgdGhlIGJ1Y2tldHNcbiAgICAgIGlmIChyb3V0ZS5pbmNsdWRlcygnL3JlYWN0aW9ucycpKSB7XG4gICAgICAgIHJvdXRlID0gcm91dGUuc3Vic3RyaW5nKDAsIHJvdXRlLmluZGV4T2YoJy9yZWFjdGlvbnMnKSArICcvcmVhY3Rpb25zJy5sZW5ndGgpXG4gICAgICB9XG5cbiAgICAgIC8vIERlbGV0ZSBNZXNzYWdlIGVuZHBvaW50IGhhcyBpdHMgb3duIHJhdGUgbGltaXRcbiAgICAgIGlmIChtZXRob2QgPT09ICdERUxFVEUnICYmIHJvdXRlLmVuZHNXaXRoKCcvbWVzc2FnZXMveCcpKSB7XG4gICAgICAgIHJvdXRlID0gbWV0aG9kICsgcm91dGVcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJvdXRlXG4gICAgfSxcblxuICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3Q6IFNlbmRSZXF1ZXN0T3B0aW9ucykge1xuICAgICAgY29uc3Qgcm91dGUgPSByZXF1ZXN0LnVybC5zdWJzdHJpbmcocmVxdWVzdC51cmwuaW5kZXhPZignYXBpLycpKVxuICAgICAgY29uc3QgcGFydHMgPSByb3V0ZS5zcGxpdCgnLycpXG4gICAgICAvLyBSZW1vdmUgdGhlIGFwaS9cbiAgICAgIHBhcnRzLnNoaWZ0KClcbiAgICAgIC8vIFJlbW92ZXMgdGhlIC92Iy9cbiAgICAgIGlmIChwYXJ0c1swXT8uc3RhcnRzV2l0aCgndicpKSBwYXJ0cy5zaGlmdCgpXG4gICAgICAvLyBTZXQgdGhlIGZ1bGwgdXJsIHRvIGRpc2NvcmQgYXBpIGluIGNhc2UgaXQgd2FzIHJlY2lldmVkIGluIGEgcHJveHkgcmVzdFxuICAgICAgcmVxdWVzdC51cmwgPSBgJHtyZXN0LmJhc2VVcmx9L3Yke3Jlc3QudmVyc2lvbn0vJHtwYXJ0cy5qb2luKCcvJyl9YFxuXG4gICAgICBjb25zdCB1cmwgPSByZXN0LnNpbXBsaWZ5VXJsKHJlcXVlc3QudXJsLCByZXF1ZXN0Lm1ldGhvZClcbiAgICAgIGNvbnN0IHF1ZXVlID0gcmVzdC5xdWV1ZXMuZ2V0KHVybClcblxuICAgICAgaWYgKHF1ZXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcXVldWUubWFrZVJlcXVlc3QocmVxdWVzdClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENSRUFURVMgQSBORVcgUVVFVUVcbiAgICAgICAgY29uc3QgYnVja2V0UXVldWUgPSBuZXcgUXVldWUocmVzdCwgeyB1cmwsIGRlbGV0ZVF1ZXVlRGVsYXk6IHJlc3QuZGVsZXRlUXVldWVEZWxheSB9KVxuXG4gICAgICAgIC8vIEFkZCByZXF1ZXN0IHRvIHF1ZXVlXG4gICAgICAgIGJ1Y2tldFF1ZXVlLm1ha2VSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICAgIC8vIFNhdmUgcXVldWVcbiAgICAgICAgcmVzdC5xdWV1ZXMuc2V0KHVybCwgYnVja2V0UXVldWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG1ha2VSZXF1ZXN0KG1ldGhvZCwgdXJsLCBib2R5LCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICByZXN0LnByb2Nlc3NSZXF1ZXN0KHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgIGJvZHksXG4gICAgICAgICAgcmV0cnlDb3VudDogMCxcbiAgICAgICAgICByZXRyeVJlcXVlc3Q6IGFzeW5jIGZ1bmN0aW9uIChvcHRpb25zOiBTZW5kUmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IHNob3VsZCBjaGFuZ2UgdG8gcmVwcm9jZXNzIHF1ZXVlIGl0ZW1cbiAgICAgICAgICAgIGF3YWl0IHJlc3Quc2VuZFJlcXVlc3Qob3B0aW9ucylcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc29sdmUsXG4gICAgICAgICAgcmVqZWN0LFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXQ8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZykge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCkpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHBvc3Q8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgYm9keT86IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBib2R5KSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlKHVybDogc3RyaW5nLCBib2R5PzogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0RFTEVURScsIHVybCwgYm9keSkpXG4gICAgfSxcblxuICAgIGFzeW5jIHBhdGNoPFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIGJvZHk/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUEFUQ0gnLCB1cmwsIGJvZHkpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBwdXQ8VCA9IHZvaWQ+KHVybDogc3RyaW5nLCBib2R5PzogUmVjb3JkPHN0cmluZywgYW55Piwgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQVVQnLCB1cmwsIGJvZHksIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBjaGFubmVsczoge1xuICAgICAgbWVzc2FnZXM6IHtcbiAgICAgICAgYXN5bmMgZGVsZXRlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24/KSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKVxuICAgICAgICB9LFxuICAgICAgICBhc3luYyBlZGl0KGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZWRpdE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIG9wdGlvbnMpXG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgc2VuZChjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5zZW5kTWVzc2FnZShjaGFubmVsSWQsIG9wdGlvbnMpXG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgcHVibGlzaChjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1Ymxpc2hNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKVxuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgICAgYXN5bmMgZ2V0KGlkKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldENoYW5uZWwoaWQpXG4gICAgICB9LFxuXG4gICAgICBhc3luYyBjcmVhdGUoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5jcmVhdGVDaGFubmVsKGd1aWxkSWQsIG9wdGlvbnMpXG4gICAgICB9LFxuXG4gICAgICBhc3luYyBkZWxldGUoaWQsIHJlYXNvbikge1xuICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGVDaGFubmVsKGlkLCByZWFzb24pXG4gICAgICB9LFxuXG4gICAgICBhc3luYyBlZGl0KGlkLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCByZXN0LmVkaXRDaGFubmVsKGlkLCBvcHRpb25zKVxuICAgICAgfSxcblxuICAgICAgYXN5bmMgZm9sbG93KHNvdXJjZUNoYW5uZWxJZCwgdGFyZ2V0Q2hhbm5lbElkKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCByZXN0LmZvbGxvd0Fubm91bmNlbWVudChzb3VyY2VDaGFubmVsSWQsIHRhcmdldENoYW5uZWxJZClcbiAgICAgIH0sXG5cbiAgICAgIGZvcnVtczoge1xuICAgICAgICBhc3luYyBwb3N0KGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmNyZWF0ZUZvcnVtVGhyZWFkKGNoYW5uZWxJZCwgb3B0aW9ucylcbiAgICAgICAgfSxcbiAgICAgIH0sXG5cbiAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgIGFzeW5jIGVkaXQoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzKGNoYW5uZWxJZCwgb3B0aW9ucylcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBkZWxldGUoY2hhbm5lbElkLCBpZCkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZUNoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGUoY2hhbm5lbElkLCBpZClcbiAgICAgICAgfSxcbiAgICAgIH0sXG5cbiAgICAgIGFzeW5jIHBvc2l0aW9ucyhndWlsZElkLCBjaGFubmVsUG9zaXRpb25zKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCByZXN0LmVkaXRDaGFubmVsUG9zaXRpb25zKGd1aWxkSWQsIGNoYW5uZWxQb3NpdGlvbnMpXG4gICAgICB9LFxuXG4gICAgICBhc3luYyBpbnZpdGVzKGlkKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldENoYW5uZWxJbnZpdGVzKGlkKVxuICAgICAgfSxcblxuICAgICAgc3RhZ2VzOiB7XG4gICAgICAgIGFzeW5jIGNyZWF0ZShvcHRpb25zKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuY3JlYXRlU3RhZ2VJbnN0YW5jZShvcHRpb25zKVxuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIGRlbGV0ZShjaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZVN0YWdlSW5zdGFuY2UoY2hhbm5lbElkLCByZWFzb24pXG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgZWRpdChjaGFubmVsSWQsIGRhdGEpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5lZGl0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQsIGRhdGEpXG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgZ2V0KGNoYW5uZWxJZCkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldFN0YWdlSW5zdGFuY2UoY2hhbm5lbElkKVxuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgICAgdGhyZWFkczoge1xuICAgICAgICBjcmVhdGU6IHtcbiAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICBhc3luYyBtZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LnN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIG9wdGlvbnMpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgd2l0aG91dDoge1xuICAgICAgICAgICAgYXN5bmMgbWVzc2FnZShjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3Quc3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZShjaGFubmVsSWQsIG9wdGlvbnMpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG5cbiAgICAgICAgZ2V0OiB7XG4gICAgICAgICAgYXN5bmMgYWN0aXZlKGd1aWxkSWQpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldEFjdGl2ZVRocmVhZHMoZ3VpbGRJZClcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgYXJjaGl2ZWQ6IHtcbiAgICAgICAgICAgIGFzeW5jIHByaXZhdGUoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldFByaXZhdGVBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgYXN5bmMgam9pbmVkKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRQcml2YXRlSm9pbmVkQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucylcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGFzeW5jIHB1YmxpYyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0UHVibGljQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGFzeW5jIG1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0VGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBhc3luYyBtZW1iZXJzKGNoYW5uZWxJZCkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0VGhyZWFkTWVtYmVycyhjaGFubmVsSWQpXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBqb2luKGNoYW5uZWxJZCkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmpvaW5UaHJlYWQoY2hhbm5lbElkKVxuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIGxlYXZlKGNoYW5uZWxJZCkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmxlYXZlVGhyZWFkKGNoYW5uZWxJZClcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBraWNrKGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucmVtb3ZlVGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKVxuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgICAgYXN5bmMgdHlwaW5nKGlkKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCByZXN0LnRyaWdnZXJUeXBpbmdJbmRpY2F0b3IoaWQpXG4gICAgICB9LFxuICAgIH0sXG5cbiAgICBlbW9qaXM6IHtcbiAgICAgIGFzeW5jIGNyZWF0ZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCByZXN0LmNyZWF0ZUVtb2ppKGd1aWxkSWQsIG9wdGlvbnMpXG4gICAgICB9LFxuXG4gICAgICBhc3luYyBkZWxldGUoZ3VpbGRJZCwgaWQsIHJlYXNvbikge1xuICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGVFbW9qaShndWlsZElkLCBpZCwgcmVhc29uKVxuICAgICAgfSxcblxuICAgICAgYXN5bmMgZWRpdChndWlsZElkLCBpZCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5lZGl0RW1vamkoZ3VpbGRJZCwgaWQsIG9wdGlvbnMpXG4gICAgICB9LFxuXG4gICAgICBhc3luYyBnZXQoZ3VpbGRJZCwgZW1vamlJZCkge1xuICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRFbW9qaShndWlsZElkLCBlbW9qaUlkKVxuICAgICAgfSxcbiAgICB9LFxuXG4gICAgZ3VpbGRzOiB7XG4gICAgICBhdXRvbW9kOiB7XG4gICAgICAgIGFzeW5jIGNyZWF0ZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuY3JlYXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgb3B0aW9ucylcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBkZWxldGUoZ3VpbGRJZCwgZXZlbnRJZCkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZUF1dG9tb2RSdWxlKGd1aWxkSWQsIGV2ZW50SWQpXG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgZWRpdChndWlsZElkLCBydWxlSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5lZGl0QXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkLCBvcHRpb25zKVxuICAgICAgICB9LFxuXG4gICAgICAgIGdldDoge1xuICAgICAgICAgIGFzeW5jIHJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQpXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGFzeW5jIHJ1bGVzKGd1aWxkSWQpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldEF1dG9tb2RSdWxlcyhndWlsZElkKVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuXG4gICAgICBhc3luYyBjcmVhdGUob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5jcmVhdGVHdWlsZChvcHRpb25zKVxuICAgICAgfSxcblxuICAgICAgYXN5bmMgY2hhbm5lbHMoaWQpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0Q2hhbm5lbHMoaWQpXG4gICAgICB9LFxuXG4gICAgICBhc3luYyBkZWxldGUoaWQpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlR3VpbGQoaWQpXG4gICAgICB9LFxuXG4gICAgICBhc3luYyBlbW9qaXMoaWQpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0RW1vamlzKGlkKVxuICAgICAgfSxcblxuICAgICAgZXZlbnRzOiB7XG4gICAgICAgIGFzeW5jIGNyZWF0ZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuY3JlYXRlU2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgb3B0aW9ucylcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBkZWxldGUoZ3VpbGRJZCwgZXZlbnRJZCkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZVNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpXG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgZWRpdChndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZWRpdFNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpXG4gICAgICAgIH0sXG5cbiAgICAgICAgZ2V0OiB7XG4gICAgICAgICAgYXN5bmMgZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0U2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucylcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgYXN5bmMgZXZlbnRzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldFNjaGVkdWxlZEV2ZW50cyhndWlsZElkLCBvcHRpb25zKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBhc3luYyB1c2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRTY2hlZHVsZWRFdmVudFVzZXJzKGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG5cbiAgICAgIGludGVncmF0aW9uczoge1xuICAgICAgICBhc3luYyBnZXQoZ3VpbGRJZCkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldEludGVncmF0aW9ucyhndWlsZElkKVxuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIGRlbGV0ZShndWlsZElkLCBpbnRlZ3JhdGlvbklkKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlSW50ZWdyYXRpb24oZ3VpbGRJZCwgaW50ZWdyYXRpb25JZClcbiAgICAgICAgfSxcbiAgICAgIH0sXG5cbiAgICAgIGludml0ZXM6IHtcbiAgICAgICAgYXN5bmMgY3JlYXRlKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmNyZWF0ZUludml0ZShjaGFubmVsSWQsIG9wdGlvbnMpXG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgZGVsZXRlKGludml0ZUNvZGUsIHJlYXNvbikge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZUludml0ZShpbnZpdGVDb2RlLCByZWFzb24pXG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgZ2V0KGludml0ZUNvZGUsIG9wdGlvbnMpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRJbnZpdGUoaW52aXRlQ29kZSwgb3B0aW9ucylcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBsaXN0KGd1aWxkSWQpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRJbnZpdGVzKGd1aWxkSWQpXG4gICAgICAgIH0sXG4gICAgICB9LFxuXG4gICAgICB0ZW1wbGF0ZXM6IHtcbiAgICAgICAgYXN5bmMgY3JlYXRlKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5jcmVhdGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIG9wdGlvbnMpXG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jIGRlbGV0ZShndWlsZElkLCB0ZW1wbGF0ZUNvZGUpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSlcbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgZWRpdChndWlsZElkLCB0ZW1wbGF0ZUNvZGUsIG9wdGlvbnMpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5lZGl0R3VpbGRUZW1wbGF0ZShndWlsZElkLCB0ZW1wbGF0ZUNvZGUsIG9wdGlvbnMpXG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jIGdldCh0ZW1wbGF0ZUNvZGUpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRHdWlsZFRlbXBsYXRlKHRlbXBsYXRlQ29kZSlcbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgbGlzdChndWlsZElkKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0R3VpbGRUZW1wbGF0ZXMoZ3VpbGRJZClcbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgc3luYyhndWlsZElkKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3Quc3luY0d1aWxkVGVtcGxhdGUoZ3VpbGRJZClcbiAgICAgICAgfSxcbiAgICAgIH0sXG5cbiAgICAgIG1lbWJlcnM6IHtcbiAgICAgICAgYXN5bmMgYmFuKGd1aWxkSWQsIHVzZXJJZCwgb3B0aW9ucykge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIG9wdGlvbnMpXG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jIGVkaXQoZ3VpbGRJZCwgdXNlcklkLCBvcHRpb25zKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZWRpdE1lbWJlcihndWlsZElkLCB1c2VySWQsIG9wdGlvbnMpXG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgZWRpdFNlbGYoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmVkaXRCb3RNZW1iZXIoZ3VpbGRJZCwgb3B0aW9ucylcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBnZXQoZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZClcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBkbSh1c2VySWQpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXREbUNoYW5uZWwodXNlcklkKVxuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIGtpY2soZ3VpbGRJZCwgdXNlcklkLCByZWFzb24pIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5raWNrTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcmVhc29uKVxuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIGxpc3QoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldE1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucylcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBwcnVuZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHJ1bmVNZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpXG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgc2VhcmNoKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3Quc2VhcmNoTWVtYmVycyhndWlsZElkLCBxdWVyeSwgb3B0aW9ucylcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyB1bmJhbihndWlsZElkLCB1c2VySWQpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC51bmJhbk1lbWJlcihndWlsZElkLCB1c2VySWQpXG4gICAgICAgIH0sXG4gICAgICB9LFxuXG4gICAgICBpbnRlcmFjdGlvbnM6IHtcbiAgICAgICAgY29tbWFuZHM6IHtcbiAgICAgICAgICBjcmVhdGU6IHtcbiAgICAgICAgICAgIGFzeW5jIGdsb2JhbChjb21tYW5kKSB7XG4gICAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmNyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kKVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgYXN5bmMgZ3VpbGQoY29tbWFuZCwgZ3VpbGRJZCkge1xuICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5jcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kLCBndWlsZElkKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgZGVsZXRlOiB7XG4gICAgICAgICAgICBhc3luYyBnbG9iYWwoY29tbWFuZElkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQpXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBhc3luYyBndWlsZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgZWRpdDoge1xuICAgICAgICAgICAgYXN5bmMgZ2xvYmFsKGNvbW1hbmRJZCwgb3B0aW9ucykge1xuICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5lZGl0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgb3B0aW9ucylcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGFzeW5jIGd1aWxkKGNvbW1hbmRJZCwgZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5lZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkLCBvcHRpb25zKVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgYXN5bmMgcGVybWlzc2lvbnMoZ3VpbGRJZCwgY29tbWFuZElkLCBiZWFyZXJUb2tlbiwgb3B0aW9ucykge1xuICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5lZGl0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMoZ3VpbGRJZCwgY29tbWFuZElkLCBiZWFyZXJUb2tlbiwgb3B0aW9ucylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGdldDoge1xuICAgICAgICAgICAgZ2xvYmFsOiB7XG4gICAgICAgICAgICAgIGFzeW5jIGFsbCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzKClcbiAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICBhc3luYyBvbmUoY29tbWFuZElkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZClcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGd1aWxkczoge1xuICAgICAgICAgICAgICBhc3luYyBhbGwoZ3VpbGRJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyhndWlsZElkKVxuICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgIGFzeW5jIG9uZShjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBhc3luYyBwZXJtaXNzaW9uKGd1aWxkSWQsIGNvbW1hbmRJZCkge1xuICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uKGd1aWxkSWQsIGNvbW1hbmRJZClcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGFzeW5jIHBlcm1pc3Npb25zKGd1aWxkSWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMoZ3VpbGRJZClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIHJlcGxhY2U6IHtcbiAgICAgICAgICAgIGFzeW5jIGdsb2JhbChjb21tYW5kcykge1xuICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC51cHNlcnRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzKGNvbW1hbmRzKVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgYXN5bmMgZ3VpbGQoZ3VpbGRJZCwgY29tbWFuZHMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QudXBzZXJ0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzKGd1aWxkSWQsIGNvbW1hbmRzKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuXG4gICAgICAgIHJlc3BvbnNlczoge1xuICAgICAgICAgIGNyZWF0ZToge1xuICAgICAgICAgICAgYXN5bmMgZm9sbG93dXAodG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3Quc2VuZEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgb3B0aW9ucylcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGFzeW5jIG9yaWdpbmFsKGludGVyYWN0aW9uSWQsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LnNlbmRJbnRlcmFjdGlvblJlc3BvbnNlKGludGVyYWN0aW9uSWQsIHRva2VuLCBvcHRpb25zKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgZGVsZXRlOiB7XG4gICAgICAgICAgICBhc3luYyBmb2xsb3d1cCh0b2tlbiwgbWVzc2FnZUlkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZUZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkKVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgYXN5bmMgb3JpZ2luYWwodG9rZW4pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlT3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgZWRpdDoge1xuICAgICAgICAgICAgYXN5bmMgZm9sbG93dXAodG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5lZGl0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBhc3luYyBvcmlnaW5hbCh0b2tlbiwgb3B0aW9ucykge1xuICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5lZGl0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuLCBvcHRpb25zKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgZ2V0OiB7XG4gICAgICAgICAgICBhc3luYyBmb2xsb3d1cCh0b2tlbiwgbWVzc2FnZUlkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkKVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgYXN5bmMgb3JpZ2luYWwodG9rZW4pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgICAgcm9sZXM6IHtcbiAgICAgICAgYXN5bmMgYWRkKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkLCByZWFzb24pIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5hZGRSb2xlKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkLCByZWFzb24pXG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgY3JlYXRlKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmNyZWF0ZVJvbGUoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKVxuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIGRlbGV0ZShndWlsZElkLCByb2xlSWQpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGVSb2xlKGd1aWxkSWQsIHJvbGVJZClcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBlZGl0KGd1aWxkSWQsIHJvbGVJZCwgb3B0aW9ucykge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmVkaXRSb2xlKGd1aWxkSWQsIHJvbGVJZCwgb3B0aW9ucylcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBsaXN0KGd1aWxkSWQpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRSb2xlcyhndWlsZElkKVxuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIHBvc2l0aW9ucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZWRpdFJvbGVQb3NpdGlvbnMoZ3VpbGRJZCwgb3B0aW9ucylcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyByZW1vdmUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LnJlbW92ZVJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbilcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIHVzZXJzOiB7XG4gICAgICBhc3luYyBjaGFubmVsKHVzZXJJZCkge1xuICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXREbUNoYW5uZWwodXNlcklkKVxuICAgICAgfSxcbiAgICB9LFxuXG4gICAgd2ViaG9va3M6IHtcbiAgICAgIGFzeW5jIGNyZWF0ZShjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuY3JlYXRlV2ViaG9vayhjaGFubmVsSWQsIG9wdGlvbnMpXG4gICAgICB9LFxuXG4gICAgICBkZWxldGU6IHtcbiAgICAgICAgd2l0aDoge1xuICAgICAgICAgIGFzeW5jIGlkKGlkLCByZWFzb24pIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZVdlYmhvb2soaWQsIHJlYXNvbilcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgYXN5bmMgdG9rZW4oaWQsIHRva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGVXZWJob29rV2l0aFRva2VuKGlkLCB0b2tlbilcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgICAgZWRpdDoge1xuICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgYXN5bmMgaWQod2ViaG9va0lkLCBvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5lZGl0V2ViaG9vayh3ZWJob29rSWQsIG9wdGlvbnMpXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGFzeW5jIHRva2VuKGlkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZWRpdFdlYmhvb2tXaXRoVG9rZW4oaWQsIHRva2VuLCBvcHRpb25zKVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuXG4gICAgICBhc3luYyBleGVjdXRlKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZXhlY3V0ZVdlYmhvb2sod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucylcbiAgICAgIH0sXG5cbiAgICAgIGdldDoge1xuICAgICAgICBhc3luYyBjaGFubmVsKGNoYW5uZWxJZCkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldENoYW5uZWxXZWJob29rcyhjaGFubmVsSWQpXG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgZ3VpbGQoZ3VpbGRJZCkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldEd1aWxkV2ViaG9va3MoZ3VpbGRJZClcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBtZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldFdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucylcbiAgICAgICAgfSxcblxuICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgYXN5bmMgaWQod2ViaG9va0lkKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRXZWJob29rKHdlYmhvb2tJZClcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgYXN5bmMgdG9rZW4od2ViaG9va0lkLCB0b2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0V2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuKVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuXG4gICAgICBtZXNzYWdlczoge1xuICAgICAgICBhc3luYyBkZWxldGUod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlV2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKVxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIGpzIGhhY2sgbWFraW5nIGl0IHBvc3NpYmxlIHRvIGRvIHdlYmhvb2tzLm1lc3NhZ2VzLmVkaXQoKSBhcyB3ZWxsIGFzIHdlYmhvb2tzLm1lc3NhZ2VzLmVkaXQub3JpZ2luYWwoKVxuICAgICAgICBlZGl0OiBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIC8vIFRoZSBiYXNlIGZ1bmN0aW9uIGZvciB3ZWJob29rcy5tZXNzYWdlcy5lZGl0KClcbiAgICAgICAgICAoYXN5bmMgKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZWRpdFdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucylcbiAgICAgICAgICB9KSBhcyBXZWJob29rTWVzc2FnZUVkaXRvcixcbiAgICAgICAgICAvLyBUaGUgcHJvcGVydGllcyB0aGF0IHdlYmhvb2tzLm1lc3NhZ2VzLmVkaXQueHh4IHdpbGwgaGF2ZSBhcmUgbGlzdGVkIGluIHRoaXMgb2JqZWN0XG4gICAgICAgICAge1xuICAgICAgICAgICAgb3JpZ2luYWw6IGFzeW5jICh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmVkaXRPcmlnaW5hbFdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0gYXMgV2ViaG9va01lc3NhZ2VFZGl0b3IsXG4gICAgICAgICksXG4gICAgICB9LFxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRSb2xlKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkVGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlcyhndWlsZElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQ2hhbm5lbChndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5ndWlsZHMuY2hhbm5lbHMoZ3VpbGRJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUVtb2ppKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamlzKGd1aWxkSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSwgY29tbWFuZClcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGQob3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy5hbGwoKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZCwgZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLCBjb21tYW5kKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlRm9ydW1UaHJlYWQoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5mb3J1bShjaGFubmVsSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVJbnZpdGUoY2hhbm5lbElkLCBvcHRpb25zID0ge30pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEludml0ZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuaW52aXRlcyhjaGFubmVsSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVSb2xlKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSwge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVTY2hlZHVsZWRFdmVudChndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudHMoZ3VpbGRJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVN0YWdlSW5zdGFuY2Uob3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2VzKCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVdlYmhvb2soY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy5jaGFubmVscy53ZWJob29rcyhjaGFubmVsSWQpLCB7XG4gICAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgICAgYXZhdGFyOiBvcHRpb25zLmF2YXRhciA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnMuYXZhdGFyKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVhc29uOiBvcHRpb25zLnJlYXNvbixcbiAgICAgIH0gYXMgRGlzY29yZENyZWF0ZVdlYmhvb2spXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVDaGFubmVsKGNoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChjaGFubmVsSWQpLCB7XG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUNoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGUoY2hhbm5lbElkLCBvdmVyd3JpdGVJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMub3ZlcndyaXRlKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQpLCByZWFzb24gPyB7IHJlYXNvbiB9IDogdW5kZWZpbmVkKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVFbW9qaShndWlsZElkLCBpZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlRm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGQoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuZ3VpbGQoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlSW50ZWdyYXRpb24oZ3VpbGRJZCwgaW50ZWdyYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5pbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlSW52aXRlKGludml0ZUNvZGUsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGUoaW52aXRlQ29kZSksIHJlYXNvbiA/IHsgcmVhc29uIH0gOiB1bmRlZmluZWQpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSb2xlKGd1aWxkSWQsIHJvbGVJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlU2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVN0YWdlSW5zdGFuY2UoY2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpLCByZWFzb24gPyB7IHJlYXNvbiB9IDogdW5kZWZpbmVkKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rKHdlYmhvb2tJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlV2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMoZ3VpbGRJZCwgY29tbWFuZElkLCBiZWFyZXJUb2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucz4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5wZXJtaXNzaW9uKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSxcbiAgICAgICAge1xuICAgICAgICAgIHBlcm1pc3Npb25zOiBvcHRpb25zLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaGVhZGVyczogeyBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YmVhcmVyVG9rZW59YCB9LFxuICAgICAgICB9LFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRCb3RQcm9maWxlKG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGF2YXRhciA9IG9wdGlvbnM/LmJvdEF2YXRhclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEF2YXRhclVSTCkgOiBvcHRpb25zPy5ib3RBdmF0YXJVUkxcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLnVzZXJCb3QoKSwge1xuICAgICAgICB1c2VybmFtZTogb3B0aW9ucy51c2VybmFtZT8udHJpbSgpLFxuICAgICAgICBhdmF0YXIsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbChjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGNoYW5uZWxJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5vdmVyd3JpdGUoY2hhbm5lbElkLCBvcHRpb25zLmlkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWxQb3NpdGlvbnMoZ3VpbGRJZCwgY2hhbm5lbFBvc2l0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpLCBjaGFubmVsUG9zaXRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0RW1vamkoZ3VpbGRJZCwgaWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGlkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZFRlbXBsYXRlKGd1aWxkSWQ6IEJpZ1N0cmluZywgdGVtcGxhdGVDb2RlOiBzdHJpbmcsIG9wdGlvbnM6IE1vZGlmeUd1aWxkVGVtcGxhdGUpOiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRUZW1wbGF0ZT4+IHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5ndWlsZChndWlsZElkLCB0ZW1wbGF0ZUNvZGUpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE9yaWdpbmFsV2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm9yaWdpbmFsKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpLCB7XG4gICAgICAgIHR5cGU6IEludGVyYWN0aW9uUmVzcG9uc2VUeXBlcy5VcGRhdGVNZXNzYWdlLFxuICAgICAgICBkYXRhOiBvcHRpb25zLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFJvbGUoZ3VpbGRJZCwgcm9sZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Um9sZVBvc2l0aW9ucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkUm9sZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQsIGRhdGEpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpLCB7IHRvcGljOiBkYXRhLnRvcGljIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rKHdlYmhvb2tJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucyksIHtcbiAgICAgICAgdHlwZTogSW50ZXJhY3Rpb25SZXNwb25zZVR5cGVzLlVwZGF0ZU1lc3NhZ2UsXG4gICAgICAgIGRhdGE6IG9wdGlvbnMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZXhlY3V0ZVdlYmhvb2sod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZm9sbG93QW5ub3VuY2VtZW50KHNvdXJjZUNoYW5uZWxJZCwgdGFyZ2V0Q2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRGb2xsb3dlZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmZvbGxvdyhzb3VyY2VDaGFubmVsSWQpLCB7XG4gICAgICAgIHdlYmhvb2tfY2hhbm5lbF9pZDogdGFyZ2V0Q2hhbm5lbElkLFxuICAgICAgfSBhcyBEaXNjb3JkRm9sbG93QW5ub3VuY2VtZW50Q2hhbm5lbClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QWN0aXZlVGhyZWFkcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBY3RpdmVUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmFjdGl2ZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbihndWlsZElkLCBjb21tYW5kSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbihyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnNbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb25zKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uSW5mbygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb24+KHJlc3Qucm91dGVzLm9hdXRoMkFwcGxpY2F0aW9uKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXV0b21vZFJ1bGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsKGlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsSW52aXRlcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuaW52aXRlcyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVscyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENoYW5uZWxbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsV2ViaG9va3MoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2tbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMud2ViaG9va3MoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RG1DaGFubmVsKHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG0oKSwge1xuICAgICAgICByZWNpcGllbnRfaWQ6IHVzZXJJZC50b1N0cmluZygpLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RW1vamkoZ3VpbGRJZCwgZW1vamlJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGVtb2ppSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbW9qaXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamlzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2F0ZXdheUJvdCgpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR2V0R2F0ZXdheUJvdD4ocmVzdC5yb3V0ZXMuZ2F0ZXdheUJvdCgpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmQocmVzdC5hcHBsaWNhdGlvbklkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkVGVtcGxhdGUodGVtcGxhdGVDb2RlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmNvZGUodGVtcGxhdGVDb2RlKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRUZW1wbGF0ZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUZW1wbGF0ZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRXZWJob29rcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2tbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlYmhvb2tzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnRlZ3JhdGlvbnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnRlZ3JhdGlvbltdPihyZXN0LnJvdXRlcy5ndWlsZHMuaW50ZWdyYXRpb25zKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnZpdGUoaW52aXRlQ29kZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZShpbnZpdGVDb2RlLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW52aXRlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGVzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXROaXRyb1N0aWNrZXJQYWNrcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlclBhY2tbXT4ocmVzdC5yb3V0ZXMubml0cm9TdGlja2VyUGFja3MoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFByaXZhdGVBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMucHJpdmF0ZShjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcml2YXRlSm9pbmVkQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmpvaW5lZChjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQdWJsaWNBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMucHVibGljKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJvbGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUm9sZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnM/LndpdGhVc2VyQ291bnQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudHMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTY2hlZHVsZWRFdmVudFtdPihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50cyhndWlsZElkLCBvcHRpb25zPy53aXRoVXNlckNvdW50KSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnRVc2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8QXJyYXk8eyB1c2VyOiBEaXNjb3JkVXNlcjsgbWVtYmVyPzogRGlzY29yZE1lbWJlciB9Pj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy51c2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2Vzc2lvbkluZm8oKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRHYXRld2F5Qm90KClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRocmVhZE1lbWJlcj4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VGhyZWFkTWVtYmVycyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGhyZWFkTWVtYmVyW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWVtYmVycyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyKGlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLnVzZXIoaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rKHdlYmhvb2tJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgam9pblRocmVhZChjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlVGhyZWFkKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWUoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcHVibGlzaE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNyb3NzcG9zdChjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kRm9sbG93dXBNZXNzYWdlKHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICByZXN0LnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICB1cmw6IHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2socmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksXG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgICByZXRyeUNvdW50OiAwLFxuICAgICAgICAgIHJldHJ5UmVxdWVzdDogYXN5bmMgZnVuY3Rpb24gKG9wdGlvbnM6IFNlbmRSZXF1ZXN0T3B0aW9ucykge1xuICAgICAgICAgICAgLy8gVE9ETzogc2hvdWxkIGNoYW5nZSB0byByZXByb2Nlc3MgcXVldWUgaXRlbVxuICAgICAgICAgICAgYXdhaXQgcmVzdC5zZW5kUmVxdWVzdChvcHRpb25zKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICByZWplY3QsXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kSW50ZXJhY3Rpb25SZXNwb25zZShpbnRlcmFjdGlvbklkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgcmVzdC5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgdXJsOiByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLmNhbGxiYWNrKGludGVyYWN0aW9uSWQsIHRva2VuKSxcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICAgIHJldHJ5Q291bnQ6IDAsXG4gICAgICAgICAgcmV0cnlSZXF1ZXN0OiBhc3luYyBmdW5jdGlvbiAob3B0aW9uczogU2VuZFJlcXVlc3RPcHRpb25zKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBzaG91bGQgY2hhbmdlIHRvIHJlcHJvY2VzcyBxdWV1ZSBpdGVtXG4gICAgICAgICAgICBhd2FpdCByZXN0LnNlbmRSZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgIHJlamVjdCxcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRNZXNzYWdlKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZXMoY2hhbm5lbElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RhcnRUaHJlYWRXaXRoTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZShjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuYWxsKGNoYW5uZWxJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIHN5bmNHdWlsZFRlbXBsYXRlKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuYWxsKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBiYW5NZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8dm9pZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRCb3RNZW1iZXIoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lbWJlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYm90KGd1aWxkSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBraWNrTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCksIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcHJ1bmVNZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8eyBwcnVuZWQ6IG51bWJlciB8IG51bGwgfT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMucHJ1bmUoZ3VpbGRJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIHNlYXJjaE1lbWJlcnMoZ3VpbGRJZCwgcXVlcnksIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuc2VhcmNoKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdW5iYW5NZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHRyaWdnZXJUeXBpbmdJbmRpY2F0b3IoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnR5cGluZyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyB1cHNlcnRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzKGNvbW1hbmRzKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSwgY29tbWFuZHMpXG4gICAgfSxcblxuICAgIGFzeW5jIHVwc2VydEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyhndWlsZElkLCBjb21tYW5kcykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSwgY29tbWFuZHMpXG4gICAgfSxcbiAgfVxuXG4gIHJldHVybiByZXN0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlUmVzdE1hbmFnZXJPcHRpb25zIHtcbiAgLyoqIFRoZSBib3QgdG9rZW4gd2hpY2ggd2lsbCBiZSB1c2VkIHRvIG1ha2UgcmVxdWVzdHMuICovXG4gIHRva2VuOiBzdHJpbmdcbiAgLyoqXG4gICAqIEZvciBvbGQgYm90cyB0aGF0IGhhdmUgYSBkaWZmZXJlbnQgYm90IGlkIGFuZCBhcHBsaWNhdGlvbiBpZC5cbiAgICogQGRlZmF1bHQgYm90IGlkIGZyb20gdG9rZW5cbiAgICovXG4gIGFwcGxpY2F0aW9uSWQ/OiBCaWdTdHJpbmdcbiAgLyoqXG4gICAqIFRoZSBiYXNlIHVybCB0byBjb25uZWN0IHRvLiBJZiB5b3UgY3JlYXRlIGEgcHJveHkgcmVzdCwgdGhhdCB1cmwgd291bGQgZ28gaGVyZS5cbiAgICogSVQgU0hPVUxEIE5PVCBFTkQgV0lUSCBBIC9cbiAgICogQGRlZmF1bHQgaHR0cHM6Ly9kaXNjb3JkLmNvbS9hcGlcbiAgICovXG4gIGJhc2VVcmw/OiBzdHJpbmdcbiAgLyoqXG4gICAqIFRoZSBhcGkgdmVyc2lvbnMgd2hpY2ggY2FuIGJlIHVzZWQgdG8gbWFrZSByZXF1ZXN0cy5cbiAgICogQGRlZmF1bHQgMTBcbiAgICovXG4gIHZlcnNpb24/OiBBcGlWZXJzaW9uc1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RNYW5hZ2VyIHtcbiAgLyoqIFRoZSBib3QgdG9rZW4gd2hpY2ggd2lsbCBiZSB1c2VkIHRvIG1ha2UgcmVxdWVzdHMuICovXG4gIHRva2VuOiBzdHJpbmdcbiAgLyoqIFRoZSBhcHBsaWNhdGlvbiBpZC4gTm9ybWFsbHkgdGhpcyBpcyBub3QgcmVxdWlyZWQgZm9yIHJlY2VudCBib3RzIGJ1dCBvbGQgYm90J3MgYXBwbGljYXRpb24gaWQgaXMgc29tZXRpbWVzIGRpZmZlcmVudCBmcm9tIHRoZSBib3QgaWQgc28gaXQgaXMgcmVxdWlyZWQgZm9yIHRob3NlIGJvdHMuICovXG4gIGFwcGxpY2F0aW9uSWQ6IGJpZ2ludFxuICAvKiogVGhlIGFwaSB2ZXJzaW9uIHRvIHVzZSB3aGVuIG1ha2luZyByZXF1ZXN0cy4gT25seSB0aGUgbGF0ZXN0IHN1cHBvcnRlZCB2ZXJzaW9uIHdpbGwgYmUgdGVzdGVkLiAqL1xuICB2ZXJzaW9uOiBBcGlWZXJzaW9uc1xuICAvKipcbiAgICogVGhlIGJhc2UgdXJsIHRvIGNvbm5lY3QgdG8uIElmIHlvdSBjcmVhdGUgYSBwcm94eSByZXN0LCB0aGF0IHVybCB3b3VsZCBnbyBoZXJlLlxuICAgKiBJVCBTSE9VTEQgTk9UIEVORCBXSVRIIEEgL1xuICAgKiBAZGVmYXVsdCBodHRwczovL2Rpc2NvcmQuY29tL2FwaVxuICAgKi9cbiAgYmFzZVVybDogc3RyaW5nXG4gIC8qKiBUaGUgbWF4aW11bSBhbW91bnQgb2YgdGltZXMgYSByZXF1ZXN0IHNob3VsZCBiZSByZXRyaWVkLiBEZWZhdWx0cyB0byBJbmZpbml0eSAqL1xuICBtYXhSZXRyeUNvdW50OiBudW1iZXJcbiAgLyoqIFdoZXRoZXIgb3Igbm90IHRoZSBtYW5hZ2VyIGlzIHJhdGUgbGltaXRlZCBnbG9iYWxseSBhY3Jvc3MgYWxsIHJlcXVlc3RzLiBEZWZhdWx0cyB0byBmYWxzZS4gKi9cbiAgZ2xvYmFsbHlSYXRlTGltaXRlZDogYm9vbGVhblxuICAvKiogV2hldGhlciBvciBub3QgdGhlIHJhdGUgbGltaXRlZCBwYXRocyBhcmUgYmVpbmcgcHJvY2Vzc2VkIHRvIGFsbG93IHJlcXVlc3RzIHRvIGJlIG1hZGUgb25jZSB0aW1lIGlzIHVwLiBEZWZhdWx0cyB0byBmYWxzZS4gKi9cbiAgcHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHM6IGJvb2xlYW5cbiAgLyoqIFRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBkZWxldGluZyB0aGlzIHF1ZXVlIGlmIGl0IGlzIGVtcHR5LiBEZWZhdWx0cyB0byA2MDAwMChvbmUgbWludXRlKS4gKi9cbiAgZGVsZXRlUXVldWVEZWxheTogbnVtYmVyXG4gIC8qKiBUaGUgcXVldWVzIHRoYXQgaG9sZCBhbGwgdGhlIHJlcXVlc3RzIHRvIGJlIHByb2Nlc3NlZC4gKi9cbiAgcXVldWVzOiBNYXA8c3RyaW5nLCBRdWV1ZT5cbiAgLyoqIFRoZSBwYXRocyB0aGF0IGFyZSBjdXJyZW50bHkgcmF0ZSBsaW1pdGVkLiAqL1xuICByYXRlTGltaXRlZFBhdGhzOiBNYXA8c3RyaW5nLCBSZXN0UmF0ZUxpbWl0ZWRQYXRoPlxuICAvKiogVGhlIGJ1Y2tldCBmb3IgaGFuZGxpbmcgYW55IGludmFsaWQgcmVxdWVzdHMuICAqL1xuICBpbnZhbGlkQnVja2V0OiBJbnZhbGlkUmVxdWVzdEJ1Y2tldFxuICAvKiogVGhlIHJvdXRlcyB0aGF0IGFyZSBhdmFpbGFibGUgZm9yIHRoaXMgbWFuYWdlci4gKi9cbiAgcm91dGVzOiB7XG4gICAgLyoqIFJvdXRlIHRvIGdldCBhIGJvdHMgc2Vzc2lvbiBpbmZvLiAqL1xuICAgIHNlc3Npb25JbmZvOiAoKSA9PiBzdHJpbmdcbiAgICAvKiogQSBzcGVjaWZpYyB1c2VyIHJvdXRlLiAqL1xuICAgIHVzZXI6IChpZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAvKiogQ3VycmVudCBib3QgdXNlciByb3V0ZS4gKi9cbiAgICB1c2VyQm90OiAoKSA9PiBzdHJpbmdcbiAgICAvLyBPQXV0aDJcbiAgICBvYXV0aDJBcHBsaWNhdGlvbjogKCkgPT4gc3RyaW5nXG4gICAgLy8gR2F0ZXdheSBCb3RcbiAgICBnYXRld2F5Qm90OiAoKSA9PiBzdHJpbmdcbiAgICAvLyBOaXRybyBTdGlja2VyIFBhY2tzXG4gICAgbml0cm9TdGlja2VyUGFja3M6ICgpID0+IHN0cmluZ1xuICAgIC8qKiBSb3V0ZXMgZm9yIHdlYmhvb2sgcmVsYXRlZCByb3V0ZXMuICovXG4gICAgd2ViaG9va3M6IHtcbiAgICAgIC8qKiBSb3V0ZSBmb3IgbWFuYWdpbmcgdGhlIG9yaWdpbmFsIG1lc3NhZ2Ugc2VudCBieSBhIHdlYmhvb2suICovXG4gICAgICBvcmlnaW5hbDogKHdlYmhvb2tJZDogQmlnU3RyaW5nLCB0b2tlbjogc3RyaW5nLCBvcHRpb25zPzogeyB0aHJlYWRJZD86IEJpZ1N0cmluZyB9KSA9PiBzdHJpbmdcbiAgICAgIC8qKiBSb3V0ZSBmb3Igd2ViaG9vayB3aXRoIGEgaWQuICovXG4gICAgICBpZDogKHdlYmhvb2tJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgYSB3ZWJob29rIHdpdGggYSB0b2tlbi4gKi9cbiAgICAgIHdlYmhvb2s6ICh3ZWJob29rSWQ6IEJpZ1N0cmluZywgdG9rZW46IHN0cmluZywgb3B0aW9ucz86IHsgd2FpdD86IGJvb2xlYW47IHRocmVhZElkPzogQmlnU3RyaW5nIH0pID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBhIG1lc3NhZ2UgdGhhdCB3YXMgc2VudCB0aHJvdWdoIGEgd2ViaG9vay4gKi9cbiAgICAgIG1lc3NhZ2U6ICh3ZWJob29rSWQ6IEJpZ1N0cmluZywgdG9rZW46IHN0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiB7IHRocmVhZElkPzogQmlnU3RyaW5nIH0pID0+IHN0cmluZ1xuICAgIH1cbiAgICAvKiogUm91dGVzIGZvciBjaGFubmVsIHJlbGF0ZWQgZW5kcG9pbnRzLiAqL1xuICAgIGNoYW5uZWxzOiB7XG4gICAgICAvKiogUm91dGUgZm9yIG5vbi1zcGVjaWZpYyBkbSBjaGFubmVsLiAqL1xuICAgICAgZG06ICgpID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlIGZvciBub24tc3BlY2lmaWMgd2ViaG9vayBpbiBhIGNoYW5uZWwuICovXG4gICAgICB3ZWJob29rczogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgIC8qKiBSb3V0ZSBmb3IgYSBzcGVjaWZpYyBjaGFubmVsLiAqL1xuICAgICAgY2hhbm5lbDogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgIC8qKiBSb3V0ZSBmb3IgZm9sbG93aW5nIGEgc3BlY2lmaWMgY2hhbm5lbC4gKi9cbiAgICAgIGZvbGxvdzogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgIC8qKiBSb3V0ZSBmb3IgbWFuYWdpbmcgYSBmb3J1bSB3aXRoIGEgbWVzc2FnZS4gKi9cbiAgICAgIGZvcnVtOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlIGZvciBhIHNwZWNpZmljIGNoYW5uZWwncyBpbnZpdGVzLiAqL1xuICAgICAgaW52aXRlczogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgIC8qKiBSb3V0ZSBmb3IgYSBzcGVjaWZpYyBtZXNzYWdlICovXG4gICAgICBtZXNzYWdlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIGlkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBub24tc3BlY2lmaWMgbWVzc2FnZXMuICovXG4gICAgICBtZXNzYWdlczogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogR2V0TWVzc2FnZXNPcHRpb25zKSA9PiBzdHJpbmdcbiAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgYSBzcGVjaWZpYyBvdmVyd3JpdGUuICovXG4gICAgICBvdmVyd3JpdGU6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3ZlcndyaXRlSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGNyb3NzcG9zdGluZyBhIHNwZWNpZmljIG1lc3NhZ2UuICovXG4gICAgICBjcm9zc3Bvc3Q6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBub24tc3BlY2lmaWMgc3RhZ2VzICovXG4gICAgICBzdGFnZXM6ICgpID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBhIHNwZWNpZmljIHN0YWdlICovXG4gICAgICBzdGFnZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgIC8qKiBSb3V0ZXMgZm9yIGhhbmRsaW5nIHRocmVhZCByZWxhdGVkIHRvIGEgY2hhbm5lbC4gKi9cbiAgICAgIHRocmVhZHM6IHtcbiAgICAgICAgLyoqIFJvdXRlIGZvciB0aHJlYWQgYSBzcGVjaWZpYyBtZXNzYWdlLiAqL1xuICAgICAgICBtZXNzYWdlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgICAgLyoqIFJvdXRlIGZvciB0aHJlYWQgd2l0aG91dCBhIG1lc3NhZ2UuICovXG4gICAgICAgIGFsbDogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgICAgLyoqIFJvdXRlIGZvciBhY3RpdmUgdGhyZWFkcy4gKi9cbiAgICAgICAgYWN0aXZlOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgICAgLyoqIFJvdXRlIGZvciBtZW1iZXJzIGluIGEgdGhyZWFkLiAqL1xuICAgICAgICBtZW1iZXJzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgICAvKiogUm91dGUgZm9yIHRoZSBib3QgbWVtYmVyIGluIGEgdGhyZWFkLiAqL1xuICAgICAgICBtZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgICAgLyoqIFJvdXRlIGZvciBhIHNwZWNpZmljIG1lbWJlciBpbiBhIHRocmVhZC4gKi9cbiAgICAgICAgdXNlcjogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgYXJjaGl2ZWQgdGhyZWFkcy4gKi9cbiAgICAgICAgYXJjaGl2ZWQ6IChjaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgcHVibGljYWxseSBhcmNoaXZlZCB0aHJlYWRzLiAqL1xuICAgICAgICBwdWJsaWM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IExpc3RBcmNoaXZlZFRocmVhZHMpID0+IHN0cmluZ1xuICAgICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIHByaXZhdGUgYXJjaGl2ZWQgdGhyZWFkcy4gKi9cbiAgICAgICAgcHJpdmF0ZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogTGlzdEFyY2hpdmVkVGhyZWFkcykgPT4gc3RyaW5nXG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgcHJpdmF0ZSBhcmNoaXZlZCB0aHJlYWRzIHRoYXQgdGhlIGJvdCBoYXMgam9pbmVkLiAqL1xuICAgICAgICBqb2luZWQ6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IExpc3RBcmNoaXZlZFRocmVhZHMpID0+IHN0cmluZ1xuICAgICAgfVxuICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyB0eXBpbmcgaW5kaWNhdG9ycyBpbiBhIGPCq2hhbm5lbC4gKi9cbiAgICAgIHR5cGluZzogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICB9XG4gICAgLyoqIFJvdXRlcyBmb3IgZ3VpbGQgcmVsYXRlZCBlbmRwb2ludHMuICovXG4gICAgZ3VpbGRzOiB7XG4gICAgICAvKiogUm91dGVzIGZvciBoYW5kbGluZyBhIG5vbi1zcGVjaWZpYyBndWlsZC4gKi9cbiAgICAgIGFsbDogKCkgPT4gc3RyaW5nXG4gICAgICAvKiogUm91dGVzIGZvciBhIGd1aWxkcyBhdXRvbW9kZXJhdGlvbi4gKi9cbiAgICAgIGF1dG9tb2Q6IHtcbiAgICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBhIGd1aWxkJ3MgYXV0b21vZGVyYXRpb24uICovXG4gICAgICAgIHJ1bGVzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBhIHNwZWNpZmljIGF1dG9tb2RlcmF0aW9uIHJ1bGUgZ3VpbGQncyAqL1xuICAgICAgICBydWxlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBydWxlSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICB9XG4gICAgICAvKiogUm91dGVzIGZvciBoYW5kbGluZyBhIGd1aWxkJ3Mgc2NoZWR1bGVkIGV2ZW50cy4gKi9cbiAgICAgIGV2ZW50czoge1xuICAgICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIG5vbi1zcGVjaWZpYyBzY2hlZHVsZWQgZXZlbnQuICovXG4gICAgICAgIGV2ZW50czogKGd1aWxkSWQ6IEJpZ1N0cmluZywgd2l0aFVzZXJDb3VudD86IGJvb2xlYW4pID0+IHN0cmluZ1xuICAgICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGEgc3BlY2lmaWMgc2NoZWR1bGVkIGV2ZW50LiAqL1xuICAgICAgICBldmVudDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgZXZlbnRJZDogQmlnU3RyaW5nLCB3aXRoVXNlckNvdW50PzogYm9vbGVhbikgPT4gc3RyaW5nXG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgYSBzY2hlZHVsZWQgZXZlbnQgdXNlcnMuICovXG4gICAgICAgIHVzZXJzOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBldmVudElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBHZXRTY2hlZHVsZWRFdmVudFVzZXJzKSA9PiBzdHJpbmdcbiAgICAgIH1cbiAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgbm9uLXNwZWNpZmljIGNoYW5uZWxzIGluIGEgZ3VpbGQgKi9cbiAgICAgIGNoYW5uZWxzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgYSBzcGVjaWZpYyBlbW9qaS4gKi9cbiAgICAgIGVtb2ppOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBpZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgbm9uLXNwZWNpZmljIGVtb2ppcy4gKi9cbiAgICAgIGVtb2ppczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGEgc3BlY2lmaWMgZ3VpbGQuICovXG4gICAgICBndWlsZDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgd2l0aENvdW50cz86IGJvb2xlYW4pID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBhIHNwZWNpZmljIGludGVncmF0aW9uLiAqL1xuICAgICAgaW50ZWdyYXRpb246IChndWlsZElkOiBCaWdTdHJpbmcsIGludGVncmF0aW9uSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIG5vbi1zcGVjaWZpYyBpbnRlZ3JhdGlvbnMuICovXG4gICAgICBpbnRlZ3JhdGlvbnM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBhIHNwZWNpZmljIGd1aWxkIGludml0ZS4gKi9cbiAgICAgIGludml0ZTogKGludml0ZUNvZGU6IHN0cmluZywgb3B0aW9ucz86IEdldEludml0ZSkgPT4gc3RyaW5nXG4gICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIG5vbi1zcGVjaWZpYyBpbnZpdGVzIGluIGEgZ3VpbGQuICovXG4gICAgICBpbnZpdGVzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgbm9uLXNwZWNpZmljIHdlYmhvb2tzIGluIGEgZ3VpbGQgKi9cbiAgICAgIHdlYmhvb2tzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgIC8qKiBSb3V0ZXMgZm9yIGhhbmRsaW5nIGEgZ3VpbGQncyBtZW1iZXJzLiAqL1xuICAgICAgbWVtYmVyczoge1xuICAgICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGEgc3BlY2lmaWMgZ3VpbGQgbWVtYmVyJ3MgYmFuLiAqL1xuICAgICAgICBiYW46IChndWlsZElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBhIHRoZSBib3QgZ3VpbGQgbWVtYmVyLiAqL1xuICAgICAgICBib3Q6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGEgc3BlY2lmaWMgZ3VpbGQgbWVtYmVyLiAqL1xuICAgICAgICBtZW1iZXI6IChndWlsZElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBub24tc3BlY2lmaWMgZ3VpbGQgbWVtYmVycy4gKi9cbiAgICAgICAgbWVtYmVyczogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IExpc3RHdWlsZE1lbWJlcnMpID0+IHN0cmluZ1xuICAgICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIG1lbWJlciBzZWFyY2hpbmcgaW4gYSBndWlsZC4gKi9cbiAgICAgICAgc2VhcmNoOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBxdWVyeTogc3RyaW5nLCBvcHRpb25zPzogeyBsaW1pdD86IG51bWJlciB9KSA9PiBzdHJpbmdcbiAgICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBwcnVuaW5nIGd1aWxkIG1lbWJlcnMuICovXG4gICAgICAgIHBydW5lOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogR2V0R3VpbGRQcnVuZUNvdW50UXVlcnkpID0+IHN0cmluZ1xuICAgICAgfVxuICAgICAgLyoqIFJvdXRlcyBmb3IgaGFuZGxpbmcgYSBndWlsZCdzIHRlbXBsYXRlcy4gKi9cbiAgICAgIHRlbXBsYXRlczoge1xuICAgICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGEgc3BlY2lmYyBndWlsZCdzIHRlbXBsYXRlcyB3aXRoIGEgY29kZSBvbmx5LiAqL1xuICAgICAgICBjb2RlOiAoY29kZTogc3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBhIHNwZWNpZmljIGd1aWxkJ3MgdGVtcGxhdGUgd2l0aCBhIGd1aWxkIGlkIGFuZCBjb2RlLiAqL1xuICAgICAgICBndWlsZDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgY29kZTogc3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBub24tc3BlY2lmaWMgZ3VpbGQncyB0ZW1wbGF0ZXMuICovXG4gICAgICAgIGFsbDogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICB9XG4gICAgICAvKiogUm91dGVzIGZvciBoYW5kbGluZyBhIGd1aWxkJ3Mgcm9sZXMuICovXG4gICAgICByb2xlczoge1xuICAgICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGEgc3BlY2lmaWMgZ3VpbGQgcm9sZS4gKi9cbiAgICAgICAgb25lOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCByb2xlSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgYSBndWlsZCdzIHJvbGVzLiAqL1xuICAgICAgICBhbGw6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGEgbWVtYmVycyByb2xlcyBpbiBhIGd1aWxkLiAqL1xuICAgICAgICBtZW1iZXI6IChndWlsZElkOiBCaWdTdHJpbmcsIG1lbWJlcklkOiBCaWdTdHJpbmcsIHJvbGVJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgIH1cbiAgICB9XG4gICAgLyoqIFJvdXRlcyBmb3IgaW50ZXJhY3Rpb24gcmVsYXRlZCBlbmRwb2ludHMuICovXG4gICAgaW50ZXJhY3Rpb25zOiB7XG4gICAgICAvKiogUm91dGVzIGZvciBpbnRlcmFjdGlvbiBjb21tYW5kIHJlbGF0ZWQgZW5kcG9pbnRzLiAqL1xuICAgICAgY29tbWFuZHM6IHtcbiAgICAgICAgLyoqIFJvdXRlIGZvciBub24tc3BlY2lmaWMgY29tbWFuZHMuICovXG4gICAgICAgIGNvbW1hbmRzOiAoYXBwbGljYXRpb25JZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgICAgLyoqIFJvdXRlIGZvciBndWlsZCByZWxhdGVkIGNvbW1hbmRzLiAqL1xuICAgICAgICBndWlsZHM6IHtcbiAgICAgICAgICAvKiogUm91dGUgZm9yIG5vbi1zcGVjaWZpYyBndWlsZCBjb21tYW5kcy4gKi9cbiAgICAgICAgICBhbGw6IChhcHBsaWNhdGlvbklkOiBCaWdTdHJpbmcsIGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAgICAgLyoqIFJvdXRlIGZvciBhIHNwZWNpZmljIGd1aWxkIGNvbW1hbmQuICovXG4gICAgICAgICAgb25lOiAoYXBwbGljYXRpb25JZDogQmlnU3RyaW5nLCBndWlsZElkOiBCaWdTdHJpbmcsIGNvbW1hbmRJZDogQmlnU3RyaW5nLCB3aXRoTG9jYWxpemF0aW9ucz86IGJvb2xlYW4pID0+IHN0cmluZ1xuICAgICAgICB9XG4gICAgICAgIC8qKiBSb3V0ZSBmb3Igbm9uLXNwZWNpZmljIGNvbW1hbmQgcGVybWlzc2lvbnMuICovXG4gICAgICAgIHBlcm1pc3Npb25zOiAoYXBwbGljYXRpb25JZDogQmlnU3RyaW5nLCBndWlsZElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgICAvKiogUm91dGUgZm9yIGEgc3BlY2lmaWMgY29tbWFuZCdzIHBlcm1pc3Npb24uICovXG4gICAgICAgIHBlcm1pc3Npb246IChhcHBsaWNhdGlvbklkOiBCaWdTdHJpbmcsIGd1aWxkSWQ6IEJpZ1N0cmluZywgY29tbWFuZElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgICAvKiogUm91dGUgZm9yIGEgc3BlY2lmaWMgY29tbWFuZC4gKi9cbiAgICAgICAgY29tbWFuZDogKGFwcGxpY2F0aW9uSWQ6IEJpZ1N0cmluZywgY29tbWFuZElkOiBCaWdTdHJpbmcsIHdpdGhMb2NhbGl6YXRpb25zPzogYm9vbGVhbikgPT4gc3RyaW5nXG4gICAgICB9XG4gICAgICAvKiogUm91dGVzIGZvciBpbnRlcmFjdGlvbiByZXNwb25zZSByZWxhdGVkIGVuZHBvaW50cy4gKi9cbiAgICAgIHJlc3BvbnNlczoge1xuICAgICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGEgY2FsbGJhY2sgcmVzcG9uc2Ugd2l0aCBpZCBhbmQgdG9rZW4uICovXG4gICAgICAgIGNhbGxiYWNrOiAoaW50ZXJhY3Rpb25JZDogQmlnU3RyaW5nLCB0b2tlbjogc3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyB0aGUgb3JpZ2luYWwgcmVzcG9uc2UgdXNpbmcgaWQgYW5kIHRva2VuLiAqL1xuICAgICAgICBvcmlnaW5hbDogKGludGVyYWN0aW9uSWQ6IEJpZ1N0cmluZywgdG9rZW46IHN0cmluZykgPT4gc3RyaW5nXG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgYSBmb2xsb3d1cCBtZXNzYWdlIGZyb20gYSBpbnRlcmFjdGlvbiByZXNwb25zZS4gKi9cbiAgICAgICAgbWVzc2FnZTogKGFwcGxpY2F0aW9uSWQ6IEJpZ1N0cmluZywgdG9rZW46IHN0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKiogQ2hlY2sgdGhlIHJhdGUgbGltaXRzIGZvciBhIHVybCBvciBhIGJ1Y2tldC4gKi9cbiAgY2hlY2tSYXRlTGltaXRzOiAodXJsOiBzdHJpbmcpID0+IG51bWJlciB8IGZhbHNlXG4gIC8qKiBSZXNoYXBlcyBhbmQgbW9kaWZpZXMgdGhlIG9iaiBhcyBuZWVkZWQgdG8gbWFrZSBpdCByZWFkeSBmb3IgZGlzY29yZHMgYXBpLiAqL1xuICBjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQ6IChvYmo6IGFueSkgPT4gYW55XG4gIC8qKiBDcmVhdGVzIHRoZSByZXF1ZXN0IGJvZHkgYW5kIGhlYWRlcnMgdGhhdCBhcmUgbmVjZXNzYXJ5IHRvIHNlbmQgYSByZXF1ZXN0LiBXaWxsIGhhbmRsZSBkaWZmZXJlbnQgdHlwZXMgb2YgbWV0aG9kcyBhbmQgZXZlcnl0aGluZyBuZWNlc3NhcnkgZm9yIGRpc2NvcmQuICovXG4gIGNyZWF0ZVJlcXVlc3Q6IChvcHRpb25zOiBDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMpID0+IFJlcXVlc3RCb2R5XG4gIC8qKiBUaGlzIHdpbGwgY3JlYXRlIGEgaW5maW5pdGUgbG9vcCBydW5uaW5nIGluIDEgc2Vjb25kcyB1c2luZyB0YWlsIHJlY3Vyc2lvbiB0byBrZWVwIHJhdGUgbGltaXRzIGNsZWFuLiBXaGVuIGEgcmF0ZSBsaW1pdCByZXNldHMsIHRoaXMgd2lsbCByZW1vdmUgaXQgc28gdGhlIHF1ZXVlIGNhbiBwcm9jZWVkLiAqL1xuICBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRoczogKCkgPT4gdm9pZFxuICAvKiogUHJvY2Vzc2VzIHRoZSByYXRlIGxpbWl0IGhlYWRlcnMgYW5kIGRldGVybWluZXMgaWYgaXQgbmVlZHMgdG8gYmUgcmF0ZSBsaW1pdGVkIGFuZCByZXR1cm5zIHRoZSBidWNrZXQgaWQgaWYgYXZhaWxhYmxlICovXG4gIHByb2Nlc3NIZWFkZXJzOiAodXJsOiBzdHJpbmcsIGhlYWRlcnM6IEhlYWRlcnMpID0+IHN0cmluZyB8IHVuZGVmaW5lZFxuICAvKiogU2VuZHMgYSByZXF1ZXN0IHRvIHRoZSBhcGkuICovXG4gIHNlbmRSZXF1ZXN0OiAob3B0aW9uczogU2VuZFJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBTcGxpdCBhIHVybCB0byBzZXBhcmF0ZSByYXRlIGxpbWl0IGJ1Y2tldHMgYmFzZWQgb24gbWFqb3IvbWlub3IgcGFyYW1ldGVycy4gKi9cbiAgc2ltcGxpZnlVcmw6ICh1cmw6IHN0cmluZywgbWV0aG9kOiBSZXF1ZXN0TWV0aG9kcykgPT4gc3RyaW5nXG4gIC8qKiBNYWtlIGEgcmVxdWVzdCB0byBiZSBzZW50IHRvIHRoZSBhcGkuICovXG4gIG1ha2VSZXF1ZXN0OiA8VCA9IHVua25vd24+KG1ldGhvZDogUmVxdWVzdE1ldGhvZHMsIHVybDogc3RyaW5nLCBib2R5PzogUmVjb3JkPHN0cmluZywgYW55Piwgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IFByb21pc2U8VD5cbiAgLyoqIFRha2VzIGEgcmVxdWVzdCBhbmQgcHJvY2Vzc2VzIGl0IGludG8gYSBxdWV1ZS4gKi9cbiAgcHJvY2Vzc1JlcXVlc3Q6IChyZXF1ZXN0OiBTZW5kUmVxdWVzdE9wdGlvbnMpID0+IHZvaWRcbiAgLyoqIE1ha2UgYSBnZXQgcmVxdWVzdCB0byB0aGUgYXBpICovXG4gIGdldDogPFQgPSB2b2lkPih1cmw6IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxUPj5cbiAgLyoqIE1ha2UgYSBwb3N0IHJlcXVlc3QgdG8gdGhlIGFwaS4gKi9cbiAgcG9zdDogPFQgPSB2b2lkPih1cmw6IHN0cmluZywgYm9keT86IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IFByb21pc2U8Q2FtZWxpemU8VD4+XG4gIC8qKiBNYWtlIGEgcHV0IHJlcXVlc3QgdG8gdGhlIGFwaS4gKi9cbiAgcHV0OiA8VCA9IHZvaWQ+KHVybDogc3RyaW5nLCBib2R5PzogUmVjb3JkPHN0cmluZywgYW55Piwgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IFByb21pc2U8Q2FtZWxpemU8VD4+XG4gIC8qKiBNYWtlIGEgZGVsZXRlIHJlcXVlc3QgdG8gdGhlIGFwaS4gKi9cbiAgZGVsZXRlOiAodXJsOiBzdHJpbmcsIGJvZHk/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBNYWtlIGEgcGF0Y2ggcmVxdWVzdCB0byB0aGUgYXBpLiAqL1xuICBwYXRjaDogPFQgPSB2b2lkPih1cmw6IHN0cmluZywgYm9keT86IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IFByb21pc2U8Q2FtZWxpemU8VD4+XG4gIC8qKiBIZWxwZXIgbWV0aG9kcyByZWxhdGVkIHRvIGNoYW5uZWxzICovXG4gIGNoYW5uZWxzOiB7XG4gICAgLyoqIE1ldGhvZHMgcmVsYXRlZCB0byBtZXNzYWdlcyBpbiBhIGNoYW5uZWwgKi9cbiAgICBtZXNzYWdlczoge1xuICAgICAgLyoqXG4gICAgICAgKiBTZW5kcyBhIG1lc3NhZ2UgdG8gYSBjaGFubmVsLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gc2VuZCB0aGUgbWVzc2FnZSBpbi5cbiAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgbWVzc2FnZS5cbiAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkTWVzc2FnZX0uXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoYXQgdGhlIGJvdCB1c2VyIGJlIGFibGUgdG8gc2VlIHRoZSBjb250ZW50cyBvZiB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSBpcyB0byBiZSBzZW50IGluLlxuICAgICAgICpcbiAgICAgICAqIElmIHNlbmRpbmcgYSBtZXNzYWdlIHRvIGEgZ3VpbGQgY2hhbm5lbDpcbiAgICAgICAqIC0gUmVxdWlyZXMgdGhlIGBTRU5EX01FU1NBR0VTYCBwZXJtaXNzaW9uLlxuICAgICAgICpcbiAgICAgICAqIElmIHNlbmRpbmcgYSBUVFMgbWVzc2FnZTpcbiAgICAgICAqIC0gUmVxdWlyZXMgdGhlIGBTRU5EX1RUU19NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICAgICAqXG4gICAgICAgKiBJZiBzZW5kaW5nIGEgbWVzc2FnZSBhcyBhIHJlcGx5IHRvIGFub3RoZXIgbWVzc2FnZTpcbiAgICAgICAqIC0gUmVxdWlyZXMgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbi5cbiAgICAgICAqIC0gVGhlIG1lc3NhZ2UgYmVpbmcgcmVwbGllZCB0byBjYW5ub3QgYmUgYSBzeXN0ZW0gbWVzc2FnZS5cbiAgICAgICAqXG4gICAgICAgKiDimqDvuI8gVGhlIG1heGltdW0gc2l6ZSBvZiBhIHJlcXVlc3QgKGFjY291bnRpbmcgZm9yIGFueSBhdHRhY2htZW50cyBhbmQgbWVzc2FnZSBjb250ZW50KSBmb3IgYm90IHVzZXJzIGlzIF84IE1pQl8uXG4gICAgICAgKlxuICAgICAgICogRmlyZXMgYSBfTWVzc2FnZSBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjY3JlYXRlLW1lc3NhZ2V9XG4gICAgICAgKi9cbiAgICAgIHNlbmQ6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlTWVzc2FnZU9wdGlvbnMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PlxuICAgICAgLyoqXG4gICAgICAgKiBFZGl0cyBhIG1lc3NhZ2UuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBlZGl0IHRoZSBtZXNzYWdlIGluLlxuICAgICAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRHMgb2YgdGhlIG1lc3NhZ2UgdG8gZWRpdC5cbiAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBtZXNzYWdlLlxuICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgTWVzc2FnZX0uXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIElmIGVkaXRpbmcgYW5vdGhlciB1c2VyJ3MgbWVzc2FnZTpcbiAgICAgICAqIC0gUmVxdWlyZXMgdGhlIGBNQU5BR0VfTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAgICAgKiAtIE9ubHkgdGhlIHtAbGluayBFZGl0TWVzc2FnZS5mbGFncyB8IGZsYWdzfSBwcm9wZXJ0eSBvZiB0aGUge0BsaW5rIG9wdGlvbnN9IG9iamVjdCBwYXJhbWV0ZXIgY2FuIGJlIGVkaXRlZC5cbiAgICAgICAqXG4gICAgICAgKiBGaXJlcyBhIF9NZXNzYWdlIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNlZGl0LW1lc3NhZ2V9XG4gICAgICAgKi9cbiAgICAgIGVkaXQ6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEVkaXRNZXNzYWdlKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj5cbiAgICAgIC8qKlxuICAgICAgICogQ3Jvc3MtcG9zdHMgYSBtZXNzYWdlIHBvc3RlZCBpbiBhbiBhbm5vdW5jZW1lbnQgY2hhbm5lbCB0byBzdWJzY3JpYmVkIGNoYW5uZWxzLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGFubm91bmNlbWVudCBjaGFubmVsLlxuICAgICAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBjcm9zcy1wb3N0LlxuICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyb3NzLXBvc3RlZCB7QGxpbmsgTWVzc2FnZX0uXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoZSBgU0VORF9NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICAgICAqXG4gICAgICAgKiBJZiBub3QgY3Jvc3MtcG9zdGluZyBvd24gbWVzc2FnZTpcbiAgICAgICAqIC0gUmVxdWlyZXMgdGhlIGBNQU5BR0VfTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAgICAgKlxuICAgICAgICogRmlyZXMgYSBfTWVzc2FnZSBDcmVhdGVfIGV2ZW50IGluIHRoZSBndWlsZHMgdGhlIHN1YnNjcmliZWQgY2hhbm5lbHMgYXJlIGluLlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2Nyb3NzcG9zdC1tZXNzYWdlfVxuICAgICAgICovXG4gICAgICBwdWJsaXNoOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj5cbiAgICAgIC8qKlxuICAgICAgICogRGVsZXRlcyBhIG1lc3NhZ2UgZnJvbSBhIGNoYW5uZWwuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBkZWxldGUgdGhlIG1lc3NhZ2UgZnJvbS5cbiAgICAgICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gZGVsZXRlIGZyb20gdGhlIGNoYW5uZWwuXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIElmIG5vdCBkZWxldGluZyBvd24gbWVzc2FnZTpcbiAgICAgICAqIC0gUmVxdWlyZXMgdGhlIGBNQU5BR0VfTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAgICAgKlxuICAgICAgICogRmlyZXMgYSBfTWVzc2FnZSBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZGVsZXRlLW1lc3NhZ2V9XG4gICAgICAgKi9cbiAgICAgIGRlbGV0ZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgYSBjaGFubmVsIGJ5IGl0cyBJRC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBnZXQuXG4gICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRDaGFubmVsfS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogSWYgdGhlIGNoYW5uZWwgaXMgYSB0aHJlYWQsIGEge0BsaW5rIFRocmVhZE1lbWJlcn0gb2JqZWN0IGlzIGluY2x1ZGVkIGluIHRoZSByZXN1bHQuXG4gICAgICpcbiAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNnZXQtY2hhbm5lbH1cbiAgICAgKi9cbiAgICBnZXQ6IChpZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRDaGFubmVsPj5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2hhbm5lbCB3aXRoaW4gYSBndWlsZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBjcmVhdGUgdGhlIGNoYW5uZWwgd2l0aGluLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgY2hhbm5lbC5cbiAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZENoYW5uZWx9LlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9DSEFOTkVMU2AgcGVybWlzc2lvbi5cbiAgICAgKlxuICAgICAqIElmIHNldHRpbmcgcGVybWlzc2lvbiBvdmVyd3JpdGVzLCBvbmx5IHRoZSBwZXJtaXNzaW9ucyB0aGUgYm90IHVzZXIgaGFzIGluIHRoZSBndWlsZCBjYW4gYmUgYWxsb3dlZCBvciBkZW5pZWQuXG4gICAgICpcbiAgICAgKiBTZXR0aW5nIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uIGlzIG9ubHkgcG9zc2libGUgZm9yIGd1aWxkIGFkbWluaXN0cmF0b3JzLlxuICAgICAqXG4gICAgICogRmlyZXMgYSBfQ2hhbm5lbCBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjY3JlYXRlLWd1aWxkLWNoYW5uZWx9XG4gICAgICovXG4gICAgY3JlYXRlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVHdWlsZENoYW5uZWwpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZENoYW5uZWw+PlxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgYSBjaGFubmVsIGZyb20gd2l0aGluIGEgZ3VpbGQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGRlbGV0ZS5cbiAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZGVsZXRlZCB7QGxpbmsgQ2hhbm5lbH0uXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIEZvciBjb21tdW5pdHkgZ3VpbGRzLCB0aGUgX1J1bGVzXywgX0d1aWRlbGluZXNfIGFuZCBfQ29tbXVuaXR5IFVwZGF0ZV8gY2hhbm5lbHMgY2Fubm90IGJlIGRlbGV0ZWQuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgY2hhbm5lbCBpcyBhIHRocmVhZDpcbiAgICAgKiAtIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1RIUkVBRFNgIHBlcm1pc3Npb24uXG4gICAgICpcbiAgICAgKiAtIEZpcmVzIGEgX1RocmVhZCBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICpcbiAgICAgKiBPdGhlcndpc2U6XG4gICAgICogLSBSZXF1aXJlcyB0aGUgYE1BTkFHRV9DSEFOTkVMU2AgcGVybWlzc2lvbi5cbiAgICAgKlxuICAgICAqIC0g4pqg77iPIERlbGV0aW5nIGEgY2F0ZWdvcnkgY2hhbm5lbCBkb2VzIG5vdCBkZWxldGUgaXRzIGNoaWxkIGNoYW5uZWxzLlxuICAgICAqICAgSW5zdGVhZCwgdGhleSB3aWxsIGhhdmUgdGhlaXIgYHBhcmVudF9pZGAgcHJvcGVydHkgcmVtb3ZlZCwgYW5kIGEgYENoYW5uZWwgVXBkYXRlYCBnYXRld2F5IGV2ZW50IHdpbGwgZmlyZSBmb3IgZWFjaCBvZiB0aGVtLlxuICAgICAqXG4gICAgICogLSBGaXJlcyBhIF9DaGFubmVsIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgKlxuICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2RlbGV0ZWNsb3NlLWNoYW5uZWx9XG4gICAgICovXG4gICAgZGVsZXRlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAgIC8qKlxuICAgICAqIEVkaXRzIGEgY2hhbm5lbCdzIHNldHRpbmdzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBlZGl0LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBjaGFubmVsLlxuICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRDaGFubmVsfS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogSWYgZWRpdGluZyBhIGNoYW5uZWwgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzLkdyb3VwRG19OlxuICAgICAqIC0gRmlyZXMgYSBfQ2hhbm5lbCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICpcbiAgICAgKiBJZiBlZGl0aW5nIGEgdGhyZWFkIGNoYW5uZWw6XG4gICAgICogLSBSZXF1aXJlcyB0aGUgYE1BTkFHRV9USFJFQURTYCBwZXJtaXNzaW9uIF9fdW5sZXNzX18gaWYgc2V0dGluZyB0aGUgYGFyY2hpdmVkYCBwcm9wZXJ0eSB0byBgZmFsc2VgIHdoZW4gdGhlIGBsb2NrZWRgIHByb3BlcnR5IGlzIGFsc28gYGZhbHNlYCwgaW4gd2hpY2ggY2FzZSBvbmx5IHRoZSBgU0VORF9NRVNTQUdFU2AgcGVybWlzc2lvbiBpcyByZXF1aXJlZC5cbiAgICAgKlxuICAgICAqIC0gRmlyZXMgYSBfVGhyZWFkIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgKlxuICAgICAqIElmIGVkaXRpbmcgYSBndWlsZCBjaGFubmVsOlxuICAgICAqIC0gUmVxdWlyZXMgdGhlIGBNQU5BR0VfQ0hBTk5FTFNgIHBlcm1pc3Npb24uXG4gICAgICpcbiAgICAgKiAtIElmIG1vZGlmeWluZyBwZXJtaXNzaW9uIG92ZXJyaWRlczpcbiAgICAgKiAgIC0gUmVxdWlyZXMgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24uXG4gICAgICpcbiAgICAgKiAgIC0gT25seSBwZXJtaXNzaW9ucyB0aGUgYm90IHVzZXIgaGFzIGluIHRoZSBndWlsZCBvciBwYXJlbnQgY2hhbm5lbCBjYW4gYmUgYWxsb3dlZC9kZW5pZWQgX191bmxlc3NfXyB0aGUgYm90IHVzZXIgaGFzIGEgYE1BTkFHRV9ST0xFU2AgcGVybWlzc2lvbiBvdmVycmlkZSBpbiB0aGUgY2hhbm5lbC5cbiAgICAgKlxuICAgICAqIC0gSWYgbW9kaWZ5aW5nIGEgY2hhbm5lbCBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXMuR3VpbGRDYXRlZ29yeX06XG4gICAgICogICAgIC0gRmlyZXMgYSBfQ2hhbm5lbCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQgZm9yIGVhY2ggY2hpbGQgY2hhbm5lbCBpbXBhY3RlZCBpbiB0aGlzIGNoYW5nZS5cbiAgICAgKiAtIE90aGVyd2lzZTpcbiAgICAgKiAgICAgLSBGaXJlcyBhIF9DaGFubmVsIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgKi9cbiAgICBlZGl0OiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IE1vZGlmeUNoYW5uZWwpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZENoYW5uZWw+PlxuICAgIC8qKlxuICAgICAqIEZvbGxvd3MgYW4gYW5ub3VuY2VtZW50IGNoYW5uZWwsIGFsbG93aW5nIG1lc3NhZ2VzIHBvc3RlZCB3aXRoaW4gaXQgdG8gYmUgY3Jvc3MtcG9zdGVkIGludG8gdGhlIHRhcmdldCBjaGFubmVsLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNvdXJjZUNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgYW5ub3VuY2VtZW50IGNoYW5uZWwgdG8gZm9sbG93LlxuICAgICAqIEBwYXJhbSB0YXJnZXRDaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIHRhcmdldCBjaGFubmVsIC0gdGhlIGNoYW5uZWwgdG8gY3Jvc3MtcG9zdCB0by5cbiAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEZvbGxvd2VkQ2hhbm5lbH0uXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1dFQkhPT0tTYCBwZXJtaXNzaW9uIGluIHRoZSBfX3RhcmdldCBjaGFubmVsX18uXG4gICAgICpcbiAgICAgKiBGaXJlcyBhIF9XZWJob29rcyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNmb2xsb3ctYW5ub3VuY2VtZW50LWNoYW5uZWx9XG4gICAgICovXG4gICAgZm9sbG93OiAoc291cmNlQ2hhbm5lbElkOiBCaWdTdHJpbmcsIHRhcmdldENoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRGb2xsb3dlZENoYW5uZWw+PlxuICAgIC8qKiBGb3J1bSByZWxhdGVkIGhlbHBlcnMgaW4gYSBjaGFubmVsICovXG4gICAgZm9ydW1zOiB7XG4gICAgICAvKipcbiAgICAgICAqIENyZWF0ZXMgYSBuZXcgdGhyZWFkIGluIGEgZm9ydW0gY2hhbm5lbCwgYW5kIHNlbmRzIGEgbWVzc2FnZSB3aXRoaW4gdGhlIGNyZWF0ZWQgdGhyZWFkLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGZvcnVtIGNoYW5uZWwgdG8gY3JlYXRlIHRoZSB0aHJlYWQgd2l0aGluLlxuICAgICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSB0aHJlYWQuXG4gICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZENoYW5uZWx9IHdpdGggYSBuZXN0ZWQge0BsaW5rIE1lc3NhZ2V9IG9iamVjdC5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogUmVxdWlyZXMgdGhlIGBDUkVBVEVfTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAgICAgKlxuICAgICAgICogRmlyZXMgYSBfVGhyZWFkIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgICAqIEZpcmVzIGEgX01lc3NhZ2UgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI3N0YXJ0LXRocmVhZC1pbi1mb3J1bS1jaGFubmVsfVxuICAgICAgICpcbiAgICAgICAqIEBleHBlcmltZW50YWxcbiAgICAgICAqL1xuICAgICAgcG9zdDogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVGb3J1bVBvc3RXaXRoTWVzc2FnZSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQ2hhbm5lbD4+XG4gICAgfVxuICAgIC8qKiBQZXJtaXNzaW9uIHJlbGF0ZWQgaGVscGVycyBpbiBhIGNoYW5uZWwgKi9cbiAgICBwZXJtaXNzaW9uczoge1xuICAgICAgLyoqXG4gICAgICAgKiBFZGl0cyB0aGUgcGVybWlzc2lvbiBvdmVycmlkZXMgZm9yIGEgdXNlciBvciByb2xlIGluIGEgY2hhbm5lbC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGVkaXQgdGhlIHBlcm1pc3Npb24gb3ZlcnJpZGVzIG9mLlxuICAgICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGVybWlzc2lvbiBvdmVycmlkZS5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24uXG4gICAgICAgKlxuICAgICAgICogT25seSBwZXJtaXNzaW9ucyB0aGUgYm90IHVzZXIgaGFzIGluIHRoZSBndWlsZCBvciBwYXJlbnQgY2hhbm5lbCBjYW4gYmUgYWxsb3dlZC9kZW5pZWQgX191bmxlc3NfXyB0aGUgYm90IHVzZXIgaGFzIGEgYE1BTkFHRV9ST0xFU2AgcGVybWlzc2lvbiBvdmVycmlkZSBpbiB0aGUgY2hhbm5lbC5cbiAgICAgICAqXG4gICAgICAgKiBGaXJlcyBhIF9DaGFubmVsIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNlZGl0LWNoYW5uZWwtcGVybWlzc2lvbnN9XG4gICAgICAgKi9cbiAgICAgIGVkaXQ6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogRWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzT3B0aW9ucykgPT4gUHJvbWlzZTx2b2lkPlxuICAgICAgLyoqXG4gICAgICAgKiBEZWxldGVzIGEgcGVybWlzc2lvbiBvdmVycmlkZSBmb3IgYSB1c2VyIG9yIHJvbGUgaW4gYSBjaGFubmVsLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZGVsZXRlIHRoZSBwZXJtaXNzaW9uIG92ZXJyaWRlIG9mLlxuICAgICAgICogQHBhcmFtIG92ZXJ3cml0ZUlkIC0gVGhlIElEIG9mIHRoZSBwZXJtaXNzaW9uIG92ZXJyaWRlIHRvIGRlbGV0ZS5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24uXG4gICAgICAgKlxuICAgICAgICogRmlyZXMgYSBfQ2hhbm5lbCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZGVsZXRlLWNoYW5uZWwtcGVybWlzc2lvbn1cbiAgICAgICAqL1xuICAgICAgZGVsZXRlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG92ZXJ3cml0ZUlkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAgIH1cbiAgICB0aHJlYWRzOiB7XG4gICAgICBnZXQ6IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIGxpc3Qgb2YgYWxsIGFjdGl2ZSB0aHJlYWRzIGZvciBhIGd1aWxkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSB0aHJlYWRzIG9mLlxuICAgICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEFjdGl2ZVRocmVhZHN9LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmVtYXJrc1xuICAgICAgICAgKiBSZXR1cm5zIGJvdGggcHVibGljIGFuZCBwcml2YXRlIHRocmVhZHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRocmVhZHMgYXJlIG9yZGVyZWQgYnkgdGhlIGBpZGAgcHJvcGVydHkgaW4gZGVzY2VuZGluZyBvcmRlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2xpc3QtYWN0aXZlLWd1aWxkLXRocmVhZHN9XG4gICAgICAgICAqL1xuICAgICAgICBhY3RpdmU6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFjdGl2ZVRocmVhZHM+PlxuICAgICAgICAvKiogTWV0aG9kcyByZWxhdGVkIHRvIGdldHRpbmcgYXJjaGl2ZWQgdGhyZWFkcy4gKi9cbiAgICAgICAgYXJjaGl2ZWQ6IHtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIHByaXZhdGUgYXJjaGl2ZWQgdGhyZWFkcyBmb3IgYSBjaGFubmVsLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBnZXQgdGhlIGFyY2hpdmVkIHRocmVhZHMgZm9yLlxuICAgICAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aHJlYWRzLlxuICAgICAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkQXJjaGl2ZWRUaHJlYWRzfS5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEByZW1hcmtzXG4gICAgICAgICAgICogUmVxdWlyZXMgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbi5cbiAgICAgICAgICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9USFJFQURTYCBwZXJtaXNzaW9uLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogUmV0dXJucyB0aHJlYWRzIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlcy5HdWlsZFByaXZhdGVUaHJlYWR9LlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogVGhyZWFkcyBhcmUgb3JkZXJlZCBieSB0aGUgYGFyY2hpdmVfdGltZXN0YW1wYCBwcm9wZXJ0eSBpbmNsdWRlZCBpbiB0aGUgbWV0YWRhdGEgb2YgdGhlIG9iamVjdCBpbiBkZXNjZW5kaW5nIG9yZGVyLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjbGlzdC1wcml2YXRlLWFyY2hpdmVkLXRocmVhZHN9XG4gICAgICAgICAgICovXG4gICAgICAgICAgcHJpdmF0ZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogTGlzdEFyY2hpdmVkVGhyZWFkcykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXJjaGl2ZWRUaHJlYWRzPj5cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIHByaXZhdGUgYXJjaGl2ZWQgdGhyZWFkcyB0aGUgYm90IGlzIGEgbWVtYmVyIG9mIGZvciBhIGNoYW5uZWwuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGdldCB0aGUgYXJjaGl2ZWQgdGhyZWFkcyBmb3IuXG4gICAgICAgICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRocmVhZHMuXG4gICAgICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRBcmNoaXZlZFRocmVhZHN9LlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHJlbWFya3NcbiAgICAgICAgICAgKiBSZXF1aXJlcyB0aGUgYFJFQURfTUVTU0FHRV9ISVNUT1JZYCBwZXJtaXNzaW9uLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogUmV0dXJucyB0aHJlYWRzIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlcy5HdWlsZFByaXZhdGVUaHJlYWR9LlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogVGhyZWFkcyBhcmUgb3JkZXJlZCBieSB0aGUgYGlkYCBwcm9wZXJ0eSBpbiBkZXNjZW5kaW5nIG9yZGVyLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjbGlzdC1qb2luZWQtcHJpdmF0ZS1hcmNoaXZlZC10aHJlYWRzfVxuICAgICAgICAgICAqL1xuICAgICAgICAgIGpvaW5lZDogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogTGlzdEFyY2hpdmVkVGhyZWFkcykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXJjaGl2ZWRUaHJlYWRzPj5cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIHB1YmxpYyBhcmNoaXZlZCB0aHJlYWRzIGZvciBhIGNoYW5uZWwuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGdldCB0aGUgYXJjaGl2ZWQgdGhyZWFkcyBmb3IuXG4gICAgICAgICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRocmVhZHMuXG4gICAgICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIEFyY2hpdmVkVGhyZWFkc30uXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAcmVtYXJrc1xuICAgICAgICAgICAqIFJlcXVpcmVzIHRoZSBgUkVBRF9NRVNTQUdFX0hJU1RPUllgIHBlcm1pc3Npb24uXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBJZiBjYWxsZWQgb24gYSBjaGFubmVsIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlcy5HdWlsZFRleHR9LCByZXR1cm5zIHRocmVhZHMgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzLkd1aWxkUHVibGljVGhyZWFkfS5cbiAgICAgICAgICAgKiBJZiBjYWxsZWQgb24gYSBjaGFubmVsIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlcy5HdWlsZE5ld3N9LCByZXR1cm5zIHRocmVhZHMgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzLkd1aWxkTmV3c1RocmVhZH0uXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBUaHJlYWRzIGFyZSBvcmRlcmVkIGJ5IHRoZSBgYXJjaGl2ZV90aW1lc3RhbXBgIHByb3BlcnR5IGluY2x1ZGVkIGluIHRoZSBtZXRhZGF0YSBvZiB0aGUgb2JqZWN0IGluIGRlc2NlbmRpbmcgb3JkZXIuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNsaXN0LXB1YmxpYy1hcmNoaXZlZC10aHJlYWRzfVxuICAgICAgICAgICAqL1xuICAgICAgICAgIHB1YmxpYzogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogTGlzdEFyY2hpdmVkVGhyZWFkcykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXJjaGl2ZWRUaHJlYWRzPj5cbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyBhIHRocmVhZCBtZW1iZXIgYnkgdGhlaXIgdXNlciBJRC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgdGhyZWFkIHRvIGdldCB0aGUgdGhyZWFkIG1lbWJlciBvZi5cbiAgICAgICAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSB1c2VyIElEIG9mIHRoZSB0aHJlYWQgbWVtYmVyIHRvIGdldC5cbiAgICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRUaHJlYWRNZW1iZXJ9LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNnZXQtdGhyZWFkLW1lbWJlcn1cbiAgICAgICAgICovXG4gICAgICAgIG1lbWJlcjogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGhyZWFkTWVtYmVyPj5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIGxpc3Qgb2YgdGhyZWFkIG1lbWJlcnMgZm9yIGEgdGhyZWFkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSB0aHJlYWQgdG8gZ2V0IHRoZSB0aHJlYWQgbWVtYmVycyBvZi5cbiAgICAgICAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkVGhyZWFkTWVtYmVyfSBhc3NvcnRlZCBieSB1c2VyIElELlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmVtYXJrc1xuICAgICAgICAgKiBSZXF1aXJlcyB0aGUgYXBwbGljYXRpb24gdG8gaGF2ZSB0aGUgYEdVSUxEX01FTUJFUlNgIHByaXZpbGVnZWQgaW50ZW50IGVuYWJsZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2xpc3QtdGhyZWFkLW1lbWJlcnN9XG4gICAgICAgICAqL1xuICAgICAgICBtZW1iZXJzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRocmVhZE1lbWJlcltdPj5cbiAgICAgIH1cbiAgICAgIC8qKlxuICAgICAgICogQWRkcyB0aGUgYm90IHVzZXIgdG8gYSB0aHJlYWQuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgdGhyZWFkIHRvIGFkZCB0aGUgYm90IHVzZXIgdG8uXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoZSB0aHJlYWQgbm90IGJlIGFyY2hpdmVkLlxuICAgICAgICpcbiAgICAgICAqIEZpcmVzIGEgX1RocmVhZCBNZW1iZXJzIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNqb2luLXRocmVhZH1cbiAgICAgICAqL1xuICAgICAgam9pbjogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gICAgICAvKipcbiAgICAgICAqIFJlbW92ZXMgdGhlIGJvdCB1c2VyIGZyb20gYSB0aHJlYWQuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgdGhyZWFkIHRvIHJlbW92ZSB0aGUgYm90IHVzZXIgZnJvbS5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogUmVxdWlyZXMgdGhlIHRocmVhZCBub3QgYmUgYXJjaGl2ZWQuXG4gICAgICAgKlxuICAgICAgICogRmlyZXMgYSBfVGhyZWFkIE1lbWJlcnMgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2xlYXZlLXRocmVhZH1cbiAgICAgICAqL1xuICAgICAgbGVhdmU6IChjaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAgICAgLyoqXG4gICAgICAgKiBSZW1vdmVzIGEgbWVtYmVyIGZyb20gYSB0aHJlYWQuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgdGhyZWFkIHRvIHJlbW92ZSB0aGUgdGhyZWFkIG1lbWJlciBvZi5cbiAgICAgICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgdXNlciBJRCBvZiB0aGUgdGhyZWFkIG1lbWJlciB0byByZW1vdmUuXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIElmIHRoZSB0aHJlYWQgaXMgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzLkd1aWxkUHJpdmF0ZVRocmVhZH0sIHJlcXVpcmVzIHRvIGJlIHRoZSBjcmVhdG9yIG9mIHRoZSB0aHJlYWQuXG4gICAgICAgKiBPdGhlcndpc2UsIHJlcXVpcmVzIHRoZSBgTUFOQUdFX1RIUkVBRFNgIHBlcm1pc3Npb24uXG4gICAgICAgKlxuICAgICAgICogUmVxdWlyZXMgdGhlIHRocmVhZCBub3QgYmUgYXJjaGl2ZWQuXG4gICAgICAgKlxuICAgICAgICogRmlyZXMgYSBfVGhyZWFkIE1lbWJlcnMgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI3JlbW92ZS10aHJlYWQtbWVtYmVyfVxuICAgICAgICovXG4gICAgICBraWNrOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gICAgICAvKiogTWV0aG9kcyByZWxhdGVkIHRvIGNyZWF0aW5nIGEgdGhyZWFkLiAqL1xuICAgICAgY3JlYXRlOiB7XG4gICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBDcmVhdGVzIGEgdGhyZWFkLCB1c2luZyBhbiBleGlzdGluZyBtZXNzYWdlIGFzIGl0cyBwb2ludCBvZiBvcmlnaW4uXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIGluIHdoaWNoIHRvIGNyZWF0ZSB0aGUgdGhyZWFkLlxuICAgICAgICAgICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gdXNlIGFzIHRoZSB0aHJlYWQncyBwb2ludCBvZiBvcmlnaW4uXG4gICAgICAgICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyB0byB1c2UgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgdGhyZWFkLlxuICAgICAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBDaGFubmVsIHwgVGhyZWFkfS5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEByZW1hcmtzXG4gICAgICAgICAgICogSWYgY2FsbGVkIG9uIGEgY2hhbm5lbCBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXMuR3VpbGRUZXh0fSwgY3JlYXRlcyBhIHtAbGluayBDaGFubmVsVHlwZXMuR3VpbGRQdWJsaWNUaHJlYWR9LlxuICAgICAgICAgICAqIElmIGNhbGxlZCBvbiBhIGNoYW5uZWwgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzLkd1aWxkTmV3c30sIGNyZWF0ZXMgYSB7QGxpbmsgQ2hhbm5lbFR5cGVzLkd1aWxkTmV3c1RocmVhZH0uXG4gICAgICAgICAgICogRG9lcyBub3Qgd29yayBvbiBjaGFubmVscyBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXMuR3VpbGRGb3J1bX0uXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBUaGUgSUQgb2YgdGhlIGNyZWF0ZWQgdGhyZWFkIHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlIElEIG9mIHRoZSBzb3VyY2UgbWVzc2FnZS5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEZpcmVzIGEgX1RocmVhZCBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNzdGFydC10aHJlYWQtZnJvbS1tZXNzYWdlfVxuICAgICAgICAgICAqL1xuICAgICAgICAgIG1lc3NhZ2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IFN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZENoYW5uZWw+PlxuICAgICAgICB9XG4gICAgICAgIHdpdGhvdXQ6IHtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBDcmVhdGVzIGEgdGhyZWFkIHdpdGhvdXQgdXNpbmcgYSBtZXNzYWdlIGFzIHRoZSB0aHJlYWQncyBwb2ludCBvZiBvcmlnaW4uXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIGluIHdoaWNoIHRvIGNyZWF0ZSB0aGUgdGhyZWFkLlxuICAgICAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgdG8gdXNlIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIHRocmVhZC5cbiAgICAgICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZENoYW5uZWwgfCBUaHJlYWR9LlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHJlbWFya3NcbiAgICAgICAgICAgKiBDcmVhdGluZyBhIHByaXZhdGUgdGhyZWFkIHJlcXVpcmVzIHRoZSBzZXJ2ZXIgdG8gYmUgYm9vc3RlZC5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEZpcmVzIGEgX1RocmVhZCBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNzdGFydC10aHJlYWQtd2l0aG91dC1tZXNzYWdlfVxuICAgICAgICAgICAqL1xuICAgICAgICAgIG1lc3NhZ2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogU3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQ2hhbm5lbD4+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRWRpdHMgdGhlIHBvc2l0aW9ucyBvZiBhIHNldCBvZiBjaGFubmVscyBpbiBhIGd1aWxkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIGluIHdoaWNoIHRvIGVkaXQgdGhlIHBvc2l0aW9ucyBvZiB0aGUgY2hhbm5lbHMuXG4gICAgICogQHBhcmFtIGNoYW5uZWxQb3NpdGlvbnMgLSBBIHNldCBvZiBvYmplY3RzIGRlZmluaW5nIHRoZSB1cGRhdGVkIHBvc2l0aW9ucyBvZiB0aGUgY2hhbm5lbHMuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0NIQU5ORUxTYCBwZXJtaXNzaW9uLlxuICAgICAqXG4gICAgICogRmlyZXMgYSBfQ2hhbm5lbCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQgZm9yIGV2ZXJ5IGNoYW5uZWwgaW1wYWN0ZWQgaW4gdGhpcyBjaGFuZ2UuXG4gICAgICpcbiAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjbW9kaWZ5LWd1aWxkLWNoYW5uZWwtcG9zaXRpb25zfVxuICAgICAqL1xuICAgIHBvc2l0aW9uczogKGd1aWxkSWQ6IEJpZ1N0cmluZywgY2hhbm5lbFBvc2l0aW9uczogTW9kaWZ5R3VpbGRDaGFubmVsUG9zaXRpb25zW10pID0+IFByb21pc2U8dm9pZD5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIGludml0ZXMgZm9yIGEgY2hhbm5lbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZ2V0IHRoZSBpbnZpdGVzIG9mLlxuICAgICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZEludml0ZU1ldGFkYXRhfSBvYmplY3RzIGFzc29ydGVkIGJ5IGludml0ZSBjb2RlLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9DSEFOTkVMU2AgcGVybWlzc2lvbi5cbiAgICAgKlxuICAgICAqIE9ubHkgdXNhYmxlIGZvciBndWlsZCBjaGFubmVscy5cbiAgICAgKlxuICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2dldC1jaGFubmVsLWludml0ZXN9XG4gICAgICovXG4gICAgaW52aXRlczogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRJbnZpdGVNZXRhZGF0YVtdPj5cbiAgICAvKiogU3RhZ2UgcmVsYXRlZCBoZWxwZXJzIGZvciBhIGNoYW5uZWwuICovXG4gICAgc3RhZ2VzOiB7XG4gICAgICAvKipcbiAgICAgICAqIENyZWF0ZXMgYSBzdGFnZSBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggYSBzdGFnZSBjaGFubmVsLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgc3RhZ2UgaW5zdGFuY2UuXG4gICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZFN0YWdlSW5zdGFuY2V9LlxuICAgICAgICpcbiAgICAgICAqIEByZW1hcmtzXG4gICAgICAgKiBSZXF1aXJlcyB0aGUgdXNlciB0byBiZSBhIG1vZGVyYXRvciBvZiB0aGUgc3RhZ2UgY2hhbm5lbC5cbiAgICAgICAqXG4gICAgICAgKiBGaXJlcyBhIF9TdGFnZSBJbnN0YW5jZSBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3N0YWdlLWluc3RhbmNlI2NyZWF0ZS1zdGFnZS1pbnN0YW5jZX1cbiAgICAgICAqL1xuICAgICAgY3JlYXRlOiAob3B0aW9uczogQ3JlYXRlU3RhZ2VJbnN0YW5jZSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4+XG4gICAgICAvKipcbiAgICAgICAqIERlbGV0ZXMgdGhlIHN0YWdlIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCBhIHN0YWdlIGNoYW5uZWwsIGlmIG9uZSBleGlzdHMuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgc3RhZ2UgY2hhbm5lbCB0aGUgc3RhZ2UgaW5zdGFuY2UgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICAgICAgICpcbiAgICAgICAqIEByZW1hcmtzXG4gICAgICAgKiBSZXF1aXJlcyB0aGUgdXNlciB0byBiZSBhIG1vZGVyYXRvciBvZiB0aGUgc3RhZ2UgY2hhbm5lbC5cbiAgICAgICAqXG4gICAgICAgKiBGaXJlcyBhIF9TdGFnZSBJbnN0YW5jZSBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3N0YWdlLWluc3RhbmNlI2RlbGV0ZS1zdGFnZS1pbnN0YW5jZX1cbiAgICAgICAqL1xuICAgICAgZGVsZXRlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAgICAgLyoqXG4gICAgICAgKiBFZGl0cyBhIHN0YWdlIGluc3RhbmNlLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIHN0YWdlIGNoYW5uZWwgdGhlIHN0YWdlIGluc3RhbmNlIGlzIGFzc29jaWF0ZWQgd2l0aC5cbiAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSB1cGRhdGVkIHtAbGluayBEaXNjb3JkU3RhZ2VJbnN0YW5jZX0uXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoZSB1c2VyIHRvIGJlIGEgbW9kZXJhdG9yIG9mIHRoZSBzdGFnZSBjaGFubmVsLlxuICAgICAgICpcbiAgICAgICAqIEZpcmVzIGEgX1N0YWdlIEluc3RhbmNlIFVwZGF0ZV8gZXZlbnQuXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3N0YWdlLWluc3RhbmNlI21vZGlmeS1zdGFnZS1pbnN0YW5jZX1cbiAgICAgICAqL1xuICAgICAgZWRpdDogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBkYXRhOiBFZGl0U3RhZ2VJbnN0YW5jZU9wdGlvbnMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFN0YWdlSW5zdGFuY2U+PlxuICAgICAgLyoqXG4gICAgICAgKiBHZXRzIHRoZSBzdGFnZSBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggYSBzdGFnZSBjaGFubmVsLCBpZiBvbmUgZXhpc3RzLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIHN0YWdlIGNoYW5uZWwgdGhlIHN0YWdlIGluc3RhbmNlIGlzIGFzc29jaWF0ZWQgd2l0aC5cbiAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkU3RhZ2VJbnN0YW5jZX0uXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3N0YWdlLWluc3RhbmNlI2dldC1zdGFnZS1pbnN0YW5jZX1cbiAgICAgICAqL1xuICAgICAgZ2V0OiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFN0YWdlSW5zdGFuY2U+PlxuICAgIH1cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyBhIHR5cGluZyBpbmRpY2F0b3IgZm9yIHRoZSBib3QgdXNlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgaW4gd2hpY2ggdG8gdHJpZ2dlciB0aGUgdHlwaW5nIGluZGljYXRvci5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogR2VuZXJhbGx5LCBib3RzIHNob3VsZCBfbm90XyB1c2UgdGhpcyByb3V0ZS5cbiAgICAgKlxuICAgICAqIEZpcmVzIGEgX1R5cGluZyBTdGFydF8gZ2F0ZXdheSBldmVudC5cbiAgICAgKlxuICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI3RyaWdnZXItdHlwaW5nLWluZGljYXRvcn1cbiAgICAgKi9cbiAgICB0eXBpbmc6IChjaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICB9XG4gIC8qKiBFbW9qaSByZWxhdGVkIGhlbHBlciBtZXRob2RzLiAqL1xuICBlbW9qaXM6IHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGVtb2ppIGluIGEgZ3VpbGQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgaW4gd2hpY2ggdG8gY3JlYXRlIHRoZSBlbW9qaS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIGVtb2ppLlxuICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkRW1vaml9LlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9FTU9KSVNfQU5EX1NUSUNLRVJTYCBwZXJtaXNzaW9uLlxuICAgICAqXG4gICAgICogRW1vamlzIGhhdmUgYSBtYXhpbXVtIGZpbGUgc2l6ZSBvZiAyNTYga2lsb2JpdHMuIEF0dGVtcHRpbmcgdG8gdXBsb2FkIGEgbGFyZ2VyIGVtb2ppIHdpbGwgY2F1c2UgdGhlIHJvdXRlIHRvIHJldHVybiA0MDAgQmFkIFJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBGaXJlcyBhIF9HdWlsZCBFbW9qaXMgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAqXG4gICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2Vtb2ppI2NyZWF0ZS1ndWlsZC1lbW9qaX1cbiAgICAgKi9cbiAgICBjcmVhdGU6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZUd1aWxkRW1vamkpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEVtb2ppPj5cbiAgICAvKipcbiAgICAgKiBEZWxldGVzIGFuIGVtb2ppIGZyb20gYSBndWlsZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCBmcm9tIHdoaWNoIHRvIGRlbGV0ZSB0aGUgZW1vamkuXG4gICAgICogQHBhcmFtIGlkIC0gVGhlIElEIG9mIHRoZSBlbW9qaSB0byBkZWxldGUuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0VNT0pJU19BTkRfU1RJQ0tFUlNgIHBlcm1pc3Npb24uXG4gICAgICpcbiAgICAgKiBGaXJlcyBhIF9HdWlsZCBFbW9qaXMgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAqXG4gICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2Vtb2ppI2RlbGV0ZS1ndWlsZC1lbW9qaX1cbiAgICAgKi9cbiAgICBkZWxldGU6IChndWlsZElkOiBCaWdTdHJpbmcsIGlkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAgIC8qKlxuICAgICAqIEVkaXRzIGFuIGVtb2ppLlxuICAgICAqXG4gICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIGluIHdoaWNoIHRvIGVkaXQgdGhlIGVtb2ppLlxuICAgICAqIEBwYXJhbSBpZCAtIFRoZSBJRCBvZiB0aGUgZW1vamkgdG8gZWRpdC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgZW1vamkuXG4gICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIHVwZGF0ZWQge0BsaW5rIERpc2NvcmRFbW9qaX0uXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0VNT0pJU19BTkRfU1RJQ0tFUlNgIHBlcm1pc3Npb24uXG4gICAgICpcbiAgICAgKiBGaXJlcyBhIGBHdWlsZCBFbW9qaXMgVXBkYXRlYCBnYXRld2F5IGV2ZW50LlxuICAgICAqXG4gICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2Vtb2ppI21vZGlmeS1ndWlsZC1lbW9qaX1cbiAgICAgKi9cbiAgICBlZGl0OiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBpZDogQmlnU3RyaW5nLCBvcHRpb25zOiBNb2RpZnlHdWlsZEVtb2ppKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRFbW9qaT4+XG4gICAgLyoqXG4gICAgICogR2V0cyBhbiBlbW9qaSBieSBpdHMgSUQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgZnJvbSB3aGljaCB0byBnZXQgdGhlIGVtb2ppLlxuICAgICAqIEBwYXJhbSBlbW9qaUlkIC0gVGhlIElEIG9mIHRoZSBlbW9qaSB0byBnZXQuXG4gICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRFbW9qaX0uXG4gICAgICpcbiAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZW1vamkjZ2V0LWd1aWxkLWVtb2ppfVxuICAgICAqL1xuICAgIGdldDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgZW1vamlJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRFbW9qaT4+XG4gIH1cbiAgLyoqIEd1aWxkIHJlbGF0ZWQgaGVscGVyIG1ldGhvZHMgKi9cbiAgZ3VpbGRzOiB7XG4gICAgYXV0b21vZDoge1xuICAgICAgLyoqXG4gICAgICAgKiBDcmVhdGVzIGFuIGF1dG9tb2QgcnVsZSBpbiBhIGd1aWxkLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBjcmVhdGUgdGhlIHJ1bGUgaW4uXG4gICAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIHJ1bGUuXG4gICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZX0uXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgICAgICpcbiAgICAgICAqIEZpcmVzIGFuIF9BdXRvIE1vZGVyYXRpb24gUnVsZSBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2F1dG8tbW9kZXJhdGlvbiNjcmVhdGUtYXV0by1tb2RlcmF0aW9uLXJ1bGV9XG4gICAgICAgKi9cbiAgICAgIGNyZWF0ZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlQXV0b01vZGVyYXRpb25SdWxlT3B0aW9ucykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPj5cbiAgICAgIC8qKlxuICAgICAgICogRGVsZXRlcyBhIHNjaGVkdWxlZCBldmVudCBmcm9tIGEgZ3VpbGQuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGRlbGV0ZSB0aGUgc2NoZWR1bGVkIGV2ZW50IGZyb20uXG4gICAgICAgKiBAcGFyYW0gZXZlbnRJZCAtIFRoZSBJRCBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50IHRvIGRlbGV0ZS5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfRVZFTlRTYCBwZXJtaXNzaW9uLlxuICAgICAgICpcbiAgICAgICAqIEZpcmVzIGEgX0d1aWxkIFNjaGVkdWxlZCBFdmVudCBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkLXNjaGVkdWxlZC1ldmVudCNkZWxldGUtZ3VpbGQtc2NoZWR1bGVkLWV2ZW50fVxuICAgICAgICovXG4gICAgICBkZWxldGU6IChndWlsZElkOiBCaWdTdHJpbmcsIGV2ZW50SWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAgICAgLyoqXG4gICAgICAgKiBFZGl0cyBhbiBhdXRvbW9kIHJ1bGUuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQgdGhlIHJ1bGUgaW4uXG4gICAgICAgKiBAcGFyYW0gcnVsZUlkIC0gVGhlIElEIG9mIHRoZSBydWxlIHRvIGVkaXQuXG4gICAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgcnVsZS5cbiAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGV9LlxuICAgICAgICpcbiAgICAgICAqIEByZW1hcmtzXG4gICAgICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICAgICAqXG4gICAgICAgKiBGaXJlcyBhbiBfQXV0byBNb2RlcmF0aW9uIFJ1bGUgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9hdXRvLW1vZGVyYXRpb24jbW9kaWZ5LWF1dG8tbW9kZXJhdGlvbi1ydWxlfVxuICAgICAgICovXG4gICAgICBlZGl0OiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBydWxlSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogUGFydGlhbDxFZGl0QXV0b01vZGVyYXRpb25SdWxlT3B0aW9ucz4pID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4+XG4gICAgICAvKiogTWV0aG9kcyByZWxhdGVkIHRvIGdldHRpbmcgYXV0b21vZGVyYXRpb24gZGF0YSBpbiBhIGd1aWxkLiAqL1xuICAgICAgZ2V0OiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIGFuIGF1dG9tb2QgcnVsZSBieSBpdHMgSUQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHJ1bGUgb2YuXG4gICAgICAgICAqIEBwYXJhbSBydWxlSWQgLSBUaGUgSUQgb2YgdGhlIHJ1bGUgdG8gZ2V0LlxuICAgICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZX0uXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZW1hcmtzXG4gICAgICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvYXV0by1tb2RlcmF0aW9uI2dldC1hdXRvLW1vZGVyYXRpb24tcnVsZX1cbiAgICAgICAgICovXG4gICAgICAgIHJ1bGU6IChndWlsZElkOiBCaWdTdHJpbmcsIHJ1bGVJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+PlxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgbGlzdCBvZiBhdXRvbW9kIHJ1bGVzIGZvciBhIGd1aWxkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBydWxlcyBmcm9tLlxuICAgICAgICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGV9IG9iamVjdHMgYXNzb3J0ZWQgYnkgcnVsZSBJRC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJlbWFya3NcbiAgICAgICAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9hdXRvLW1vZGVyYXRpb24jbGlzdC1hdXRvLW1vZGVyYXRpb24tcnVsZXMtZm9yLWd1aWxkfVxuICAgICAgICAgKi9cbiAgICAgICAgcnVsZXM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZVtdPj5cbiAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGd1aWxkLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBndWlsZC5cbiAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZEd1aWxkfS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICog4pqg77iPIFRoaXMgcm91dGUgY2FuIG9ubHkgYmUgdXNlZCBieSBib3RzIGluIF9fZmV3ZXIgdGhhbiAxMCBndWlsZHNfXy5cbiAgICAgKlxuICAgICAqIEZpcmVzIGEgX0d1aWxkIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgKlxuICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNjcmVhdGUtZ3VpbGR9XG4gICAgICovXG4gICAgY3JlYXRlOiAob3B0aW9uczogQ3JlYXRlR3VpbGQpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEd1aWxkPj5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIGNoYW5uZWxzIGZvciBhIGd1aWxkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgY2hhbm5lbHMgb2YuXG4gICAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkQ2hhbm5lbH0gb2JqZWN0cyBhc3NvcnRlZCBieSBjaGFubmVsIElELlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBFeGNsdWRlcyB0aHJlYWRzLlxuICAgICAqXG4gICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC1jaGFubmVsc31cbiAgICAgKi9cbiAgICBjaGFubmVsczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQ2hhbm5lbFtdPj5cbiAgICAvKipcbiAgICAgKiBEZWxldGVzIGEgZ3VpbGQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZGVsZXRlLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBUaGUgYm90IHVzZXIgbXVzdCBiZSB0aGUgb3duZXIgb2YgdGhlIGd1aWxkLlxuICAgICAqXG4gICAgICogRmlyZXMgYSBfR3VpbGQgRGVsZXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAqXG4gICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2RlbGV0ZS1ndWlsZH1cbiAgICAgKi9cbiAgICBkZWxldGU6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIGVtb2ppcyBmb3IgYSBndWlsZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB3aGljaCB0byBnZXQgdGhlIGVtb2ppcyBvZi5cbiAgICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRFbW9qaX0gb2JqZWN0cyBhc3NvcnRlZCBieSBlbW9qaSBJRC5cbiAgICAgKlxuICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9lbW9qaSNsaXN0LWd1aWxkLWVtb2ppc31cbiAgICAgKi9cbiAgICBlbW9qaXM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEVtb2ppW10+PlxuICAgIC8qKiBNZXRob2RzIHJlbGF0ZWQgdG8gYSBndWlsZCdzIHNjaGVkdWxlZCBldmVudHMuICovXG4gICAgZXZlbnRzOiB7XG4gICAgICAvKipcbiAgICAgICAqIENyZWF0ZXMgYSBzY2hlZHVsZWQgZXZlbnQgaW4gYSBndWlsZC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gY3JlYXRlIHRoZSBzY2hlZHVsZWQgZXZlbnQgaW4uXG4gICAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIHNjaGVkdWxlZCBldmVudC5cbiAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBTY2hlZHVsZWRFdmVudH0uXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0VWRU5UU2AgcGVybWlzc2lvbi5cbiAgICAgICAqXG4gICAgICAgKiBBIGd1aWxkIGNhbiBvbmx5IGhhdmUgYSBtYXhpbXVtIG9mIDEwMCBldmVudHMgd2l0aCBhIHN0YXR1cyBvZiB7QGxpbmsgU2NoZWR1bGVkRXZlbnRTdGF0dXMuQWN0aXZlfSBvciB7QGxpbmsgU2NoZWR1bGVkRXZlbnRTdGF0dXMuU2NoZWR1bGVkfSAoaW5jbHVzaXZlKS5cbiAgICAgICAqXG4gICAgICAgKiBGaXJlcyBhIF9HdWlsZCBTY2hlZHVsZWQgRXZlbnQgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC1zY2hlZHVsZWQtZXZlbnQjY3JlYXRlLWd1aWxkLXNjaGVkdWxlZC1ldmVudH1cbiAgICAgICAqL1xuICAgICAgY3JlYXRlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVTY2hlZHVsZWRFdmVudCkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+PlxuICAgICAgLyoqXG4gICAgICAgKiBEZWxldGVzIGEgc2NoZWR1bGVkIGV2ZW50IGZyb20gYSBndWlsZC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZGVsZXRlIHRoZSBzY2hlZHVsZWQgZXZlbnQgZnJvbS5cbiAgICAgICAqIEBwYXJhbSBldmVudElkIC0gVGhlIElEIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQgdG8gZGVsZXRlLlxuICAgICAgICpcbiAgICAgICAqIEByZW1hcmtzXG4gICAgICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9FVkVOVFNgIHBlcm1pc3Npb24uXG4gICAgICAgKlxuICAgICAgICogRmlyZXMgYSBfR3VpbGQgU2NoZWR1bGVkIEV2ZW50IERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQtc2NoZWR1bGVkLWV2ZW50I2RlbGV0ZS1ndWlsZC1zY2hlZHVsZWQtZXZlbnR9XG4gICAgICAgKi9cbiAgICAgIGRlbGV0ZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgZXZlbnRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gICAgICAvKipcbiAgICAgICAqIEVkaXRzIGEgc2NoZWR1bGVkIGV2ZW50LlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBlZGl0IHRoZSBzY2hlZHVsZWQgZXZlbnQgaW4uXG4gICAgICAgKiBAcGFyYW0gZXZlbnRJZCAtIFRoZSBJRCBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50IHRvIGVkaXQuXG4gICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBTY2hlZHVsZWRFdmVudH0uXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0VWRU5UU2AgcGVybWlzc2lvbi5cbiAgICAgICAqXG4gICAgICAgKiBUbyBzdGFydCBvciBlbmQgYW4gZXZlbnQsIG1vZGlmeSB0aGUgZXZlbnQncyBgc3RhdHVzYCBwcm9wZXJ0eS5cbiAgICAgICAqXG4gICAgICAgKiBUaGUgYGVudGl0eV9tZXRhZGF0YWAgcHJvcGVydHkgaXMgZGlzY2FyZGVkIGZvciBldmVudHMgd2hvc2UgYGVudGl0eV90eXBlYCBpcyBub3Qge0BsaW5rIFNjaGVkdWxlZEV2ZW50RW50aXR5VHlwZS5FeHRlcm5hbH0uXG4gICAgICAgKlxuICAgICAgICogRmlyZXMgYSBfR3VpbGQgU2NoZWR1bGVkIEV2ZW50IFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQtc2NoZWR1bGVkLWV2ZW50I21vZGlmeS1ndWlsZC1zY2hlZHVsZWQtZXZlbnR9XG4gICAgICAgKi9cbiAgICAgIGVkaXQ6IChndWlsZElkOiBCaWdTdHJpbmcsIGV2ZW50SWQ6IEJpZ1N0cmluZywgb3B0aW9uczogUGFydGlhbDxFZGl0U2NoZWR1bGVkRXZlbnQ+KSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTY2hlZHVsZWRFdmVudD4+XG5cbiAgICAgIGdldDoge1xuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyBhIHNjaGVkdWxlZCBldmVudCBieSBpdHMgSUQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHNjaGVkdWxlZCBldmVudCBmcm9tLlxuICAgICAgICAgKiBAcGFyYW0gZXZlbnRJZCAtIFRoZSBJRCBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50IHRvIGdldC5cbiAgICAgICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQuXG4gICAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBTY2hlZHVsZWRFdmVudH0uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC1zY2hlZHVsZWQtZXZlbnQjZ2V0LWd1aWxkLXNjaGVkdWxlZC1ldmVudH1cbiAgICAgICAgICovXG4gICAgICAgIGV2ZW50OiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBldmVudElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiB7IHdpdGhVc2VyQ291bnQ/OiBib29sZWFuIH0pID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFNjaGVkdWxlZEV2ZW50Pj5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIGxpc3Qgb2Ygc2NoZWR1bGVkIGV2ZW50cyBmb3IgYSBndWlsZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgc2NoZWR1bGVkIGV2ZW50cyBmcm9tLlxuICAgICAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIHNjaGVkdWxlZCBldmVudHMuXG4gICAgICAgICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgU2NoZWR1bGVkRXZlbnR9IG9iamVjdHMgYXNzb3J0ZWQgYnkgZXZlbnQgSUQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC1zY2hlZHVsZWQtZXZlbnQjbGlzdC1zY2hlZHVsZWQtZXZlbnRzLWZvci1ndWlsZH1cbiAgICAgICAgICovXG4gICAgICAgIGV2ZW50czogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IEdldFNjaGVkdWxlZEV2ZW50cykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU2NoZWR1bGVkRXZlbnRbXT4+XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIHN1YnNjcmliZXJzIHRvIGEgc2NoZWR1bGVkIGV2ZW50IGZyb20gYSBndWlsZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgc3Vic2NyaWJlcnMgdG8gdGhlIHNjaGVkdWxlZCBldmVudCBmcm9tLlxuICAgICAgICAgKiBAcGFyYW0gZXZlbnRJZCAtIFRoZSBJRCBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50IHRvIGdldCB0aGUgc3Vic2NyaWJlcnMgb2YuXG4gICAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgc3Vic2NyaWJlcnMuXG4gICAgICAgICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgVXNlcn0gb2JqZWN0cyBhc3NvcnRlZCBieSB1c2VyIElELlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmVtYXJrc1xuICAgICAgICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9FVkVOVFNgIHBlcm1pc3Npb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIFVzZXJzIGFyZSBvcmRlcmVkIGJ5IHRoZWlyIElEcyBpbiBfYXNjZW5kaW5nXyBvcmRlci5cbiAgICAgICAgICpcbiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkLXNjaGVkdWxlZC1ldmVudCNnZXQtZ3VpbGQtc2NoZWR1bGVkLWV2ZW50LXVzZXJzfVxuICAgICAgICAgKi9cbiAgICAgICAgdXNlcnM6IChcbiAgICAgICAgICBndWlsZElkOiBCaWdTdHJpbmcsXG4gICAgICAgICAgZXZlbnRJZDogQmlnU3RyaW5nLFxuICAgICAgICAgIG9wdGlvbnM/OiBHZXRTY2hlZHVsZWRFdmVudFVzZXJzLFxuICAgICAgICApID0+IFByb21pc2U8XG4gICAgICAgICAgQXJyYXk8e1xuICAgICAgICAgICAgdXNlcjogQ2FtZWxpemU8RGlzY29yZFVzZXI+XG4gICAgICAgICAgICBtZW1iZXI/OiBDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyPlxuICAgICAgICAgIH0+XG4gICAgICAgID5cbiAgICAgIH1cbiAgICB9XG4gICAgLyoqIE1ldGhvZHMgcmVsYXRlZCB0byBhIGd1aWxkJ3MgaW50ZWdyYXRpb25zLiAqL1xuICAgIGludGVncmF0aW9uczoge1xuICAgICAgLyoqXG4gICAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIGludGVncmF0aW9ucyBhdHRhY2hlZCB0byBhIGd1aWxkLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIGxpc3Qgb2YgaW50ZWdyYXRpb25zIGZyb20uXG4gICAgICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIEludGVncmF0aW9ufSBvYmplY3RzIGFzc29ydGVkIGJ5IGludGVncmF0aW9uIElELlxuICAgICAgICpcbiAgICAgICAqIEByZW1hcmtzXG4gICAgICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjZ2V0LWd1aWxkLWludGVncmF0aW9uc31cbiAgICAgICAqL1xuICAgICAgZ2V0OiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRJbnRlZ3JhdGlvbltdPj5cbiAgICAgIC8qKlxuICAgICAgICogRGVsZXRlcyBhbiBpbnRlZ3JhdGlvbiBhdHRhY2hlZCB0byBhIGd1aWxkLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCBmcm9tIHdoaWNoIHRvIGRlbGV0ZSB0aGUgaW50ZWdyYXRpb24uXG4gICAgICAgKiBAcGFyYW0gaW50ZWdyYXRpb25JZCAtIFRoZSBJRCBvZiB0aGUgaW50ZWdyYXRpb24gdG8gZGVsZXRlIGZyb20gdGhlIGd1aWxkLlxuICAgICAgICpcbiAgICAgICAqIEByZW1hcmtzXG4gICAgICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICAgICAqXG4gICAgICAgKiBEZWxldGVzIGFsbCB3ZWJob29rcyBhc3NvY2lhdGVkIHdpdGggdGhlIGludGVncmF0aW9uLCBhbmQga2lja3MgdGhlIGFzc29jaWF0ZWQgYm90IGlmIHRoZXJlIGlzIG9uZS5cbiAgICAgICAqXG4gICAgICAgKiBGaXJlcyBhIF9HdWlsZCBJbnRlZ3JhdGlvbnMgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAgICogRmlyZXMgYSBfSW50ZWdyYXRpb24gRGVsZXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNkZWxldGUtZ3VpbGQtaW50ZWdyYXRpb259XG4gICAgICAgKi9cbiAgICAgIGRlbGV0ZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgaW50ZWdyYXRpb25JZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gICAgfVxuICAgIC8qKiBNZXRob2RzIHJlbGF0ZWQgdG8gYSBndWlsZCdzIGludml0ZXMuICovXG4gICAgaW52aXRlczoge1xuICAgICAgLyoqXG4gICAgICAgKiBDcmVhdGVzIGFuIGludml0ZSB0byBhIGNoYW5uZWwgaW4gYSBndWlsZC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGNyZWF0ZSB0aGUgaW52aXRlIHRvLlxuICAgICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBpbnZpdGUuXG4gICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZEludml0ZX0uXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoZSBgQ1JFQVRFX0lOU1RBTlRfSU5WSVRFYCBwZXJtaXNzaW9uLlxuICAgICAgICpcbiAgICAgICAqIEZpcmVzIGFuIF9JbnZpdGUgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAgICpcbiAgICAgICAqIEBwcml2YXRlUmVtYXJrc1xuICAgICAgICogVGhlIHJlcXVlc3QgYm9keSBpcyBub3Qgb3B0aW9uYWwsIGFuZCBhbiBlbXB0eSBKU09OIG9iamVjdCBtdXN0IGJlIHNlbnQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGFueSBmaWVsZHMgYXJlIGJlaW5nIHRyYW5zbWl0dGVkLlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2NyZWF0ZS1jaGFubmVsLWludml0ZX1cbiAgICAgICAqL1xuICAgICAgY3JlYXRlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBDcmVhdGVDaGFubmVsSW52aXRlKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRJbnZpdGU+PlxuICAgICAgLyoqXG4gICAgICAgKiBEZWxldGVzIGFuIGludml0ZSB0byBhIGNoYW5uZWwuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGludml0ZUNvZGUgLSBUaGUgaW52aXRlIGNvZGUgb2YgdGhlIGludml0ZSB0byBkZWxldGUuXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0NIQU5ORUxTYCBwZXJtaXNzaW9uLlxuICAgICAgICpcbiAgICAgICAqIEZpcmVzIGFuIF9JbnZpdGUgRGVsZXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2RlbGV0ZS1jaGFubmVsLWludml0ZX1cbiAgICAgICAqL1xuICAgICAgZGVsZXRlOiAoaW52aXRlQ29kZTogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgICAgIC8qKlxuICAgICAgICogR2V0cyBhbiBpbnZpdGUgdG8gYSBjaGFubmVsIGJ5IGl0cyBpbnZpdGUgY29kZS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gaW52aXRlQ29kZSAtIFRoZSBpbnZpdGUgY29kZSBvZiB0aGUgaW52aXRlIHRvIGdldC5cbiAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgaW52aXRlLlxuICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRJbnZpdGVNZXRhZGF0YX0uXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2ludml0ZSNnZXQtaW52aXRlfVxuICAgICAgICovXG4gICAgICBnZXQ6IChpbnZpdGVDb2RlOiBzdHJpbmcsIG9wdGlvbnM/OiBHZXRJbnZpdGUpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEludml0ZU1ldGFkYXRhPj5cbiAgICAgIC8qKlxuICAgICAgICogR2V0cyB0aGUgbGlzdCBvZiBpbnZpdGVzIGZvciBhIGd1aWxkLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIGludml0ZXMgZnJvbS5cbiAgICAgICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZEludml0ZU1ldGFkYXRhfSBvYmplY3RzIGFzc29ydGVkIGJ5IGludml0ZSBjb2RlLlxuICAgICAgICpcbiAgICAgICAqIEByZW1hcmtzXG4gICAgICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvaW52aXRlI2dldC1pbnZpdGVzfVxuICAgICAgICovXG4gICAgICBsaXN0OiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRJbnZpdGVNZXRhZGF0YVtdPj5cbiAgICB9XG4gICAgLyoqIE1ldGhvZHMgcmVsYXRlZCB0byBhIGd1aWxkJ3MgdGVtcGxhdGVzLiAqL1xuICAgIHRlbXBsYXRlczoge1xuICAgICAgLyoqXG4gICAgICAgKiBDcmVhdGVzIGEgdGVtcGxhdGUgZnJvbSBhIGd1aWxkLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBjcmVhdGUgdGhlIHRlbXBsYXRlIGZyb20uXG4gICAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIHRlbXBsYXRlLlxuICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIFRlbXBsYXRlfS5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAgICAgKlxuICAgICAgICogRmlyZXMgYSBfR3VpbGQgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC10ZW1wbGF0ZSNjcmVhdGUtZ3VpbGQtdGVtcGxhdGV9XG4gICAgICAgKi9cbiAgICAgIGNyZWF0ZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlVGVtcGxhdGUpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj5cbiAgICAgIC8qKlxuICAgICAgICogRGVsZXRlcyBhIHRlbXBsYXRlIGZyb20gYSBndWlsZC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZGVsZXRlIHRoZSB0ZW1wbGF0ZSBmcm9tLlxuICAgICAgICogQHBhcmFtIHRlbXBsYXRlQ29kZSAtIFRoZSBjb2RlIG9mIHRoZSB0ZW1wbGF0ZSB0byBkZWxldGUuXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgICAgICpcbiAgICAgICAqIEZpcmVzIGEgX0d1aWxkIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQtdGVtcGxhdGUjZGVsZXRlLWd1aWxkLXRlbXBsYXRlfVxuICAgICAgICovXG4gICAgICBkZWxldGU6IChndWlsZElkOiBCaWdTdHJpbmcsIHRlbXBsYXRlQ29kZTogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gICAgICAvKipcbiAgICAgICAqIEVkaXRzIGEgdGVtcGxhdGUncyBzZXR0aW5ncy5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZWRpdCBhIHRlbXBsYXRlIG9mLlxuICAgICAgICogQHBhcmFtIHRlbXBsYXRlQ29kZSAtIFRoZSBjb2RlIG9mIHRoZSB0ZW1wbGF0ZSB0byBlZGl0LlxuICAgICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIHRlbXBsYXRlLlxuICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgVGVtcGxhdGV9LlxuICAgICAgICpcbiAgICAgICAqIEByZW1hcmtzXG4gICAgICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICAgICAqXG4gICAgICAgKiBGaXJlcyBhIF9HdWlsZCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkLXRlbXBsYXRlI21vZGlmeS1ndWlsZC10ZW1wbGF0ZX1cbiAgICAgICAqL1xuICAgICAgZWRpdDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdGVtcGxhdGVDb2RlOiBzdHJpbmcsIG9wdGlvbnM6IE1vZGlmeUd1aWxkVGVtcGxhdGUpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj5cbiAgICAgIC8qKlxuICAgICAgICogR2V0cyBhIHRlbXBsYXRlIGJ5IGl0cyBjb2RlLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB0ZW1wbGF0ZUNvZGUgLSBUaGUgY29kZSBvZiB0aGUgdGVtcGxhdGUgdG8gZ2V0LlxuICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIFRlbXBsYXRlfS5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkLXRlbXBsYXRlI2dldC1ndWlsZC10ZW1wbGF0ZX1cbiAgICAgICAqL1xuICAgICAgZ2V0OiAodGVtcGxhdGVDb2RlOiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj5cbiAgICAgIC8qKlxuICAgICAgICogR2V0cyB0aGUgbGlzdCBvZiB0ZW1wbGF0ZXMgZm9yIGEgZ3VpbGQuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgbGlzdCBvZiB0ZW1wbGF0ZXMgZm9yLlxuICAgICAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBUZW1wbGF0ZX0gb2JqZWN0cyBhc3NvcnRlZCBieSB0ZW1wbGF0ZSBjb2RlLlxuICAgICAgICpcbiAgICAgICAqIEByZW1hcmtzXG4gICAgICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQtdGVtcGxhdGUjZ2V0LWd1aWxkLXRlbXBsYXRlc31cbiAgICAgICAqL1xuICAgICAgbGlzdDogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGVtcGxhdGVbXT4+XG4gICAgICAvKipcbiAgICAgICAqIFN5bmNocm9uaXNlcyBhIHRlbXBsYXRlIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSBndWlsZC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gc3luY2hyb25pc2UgYSB0ZW1wbGF0ZSBvZi5cbiAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIFRlbXBsYXRlfS5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAgICAgKlxuICAgICAgICogRmlyZXMgYSBfR3VpbGQgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC10ZW1wbGF0ZSNnZXQtZ3VpbGQtdGVtcGxhdGVzfVxuICAgICAgICovXG4gICAgICBzeW5jOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRUZW1wbGF0ZT4+XG4gICAgfVxuICAgIC8qIEd1aWxkIE1lbWJlcnMgcmVsYXRlZCBoZWxwZXIgbWV0aG9kcy4gKi9cbiAgICBtZW1iZXJzOiB7XG4gICAgICAvKipcbiAgICAgICAqIEJhbnMgYSB1c2VyIGZyb20gYSBndWlsZC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gYmFuIHRoZSB1c2VyIGZyb20uXG4gICAgICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIElEIG9mIHRoZSB1c2VyIHRvIGJhbiBmcm9tIHRoZSBndWlsZC5cbiAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgYmFuLlxuICAgICAgICpcbiAgICAgICAqIEByZW1hcmtzXG4gICAgICAgKiBSZXF1aXJlcyB0aGUgYEJBTl9NRU1CRVJTYCBwZXJtaXNzaW9uLlxuICAgICAgICpcbiAgICAgICAqIEZpcmVzIGEgX0d1aWxkIEJhbiBBZGRfIGdhdGV3YXkgZXZlbnQuXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2NyZWF0ZS1ndWlsZC1iYW59XG4gICAgICAgKi9cbiAgICAgIGJhbjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBDcmVhdGVHdWlsZEJhbikgPT4gUHJvbWlzZTx2b2lkPlxuICAgICAgLyoqXG4gICAgICAgKiBFZGl0cyB0aGUgbmlja25hbWUgb2YgdGhlIGJvdCB1c2VyLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBlZGl0IHRoZSBuaWNrbmFtZSBvZiB0aGUgYm90IHVzZXIgaW4uXG4gICAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgbmlja25hbWUuXG4gICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkTWVtYmVyfVxuICAgICAgICpcbiAgICAgICAqIEByZW1hcmtzXG4gICAgICAgKiBGaXJlcyBhIF9HdWlsZCBNZW1iZXIgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNtb2RpZnktY3VycmVudC1tZW1iZXJ9XG4gICAgICAgKi9cbiAgICAgIGVkaXRTZWxmOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBFZGl0Qm90TWVtYmVyT3B0aW9ucykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyPj5cbiAgICAgIC8qKlxuICAgICAgICogRWRpdHMgYSBtZW1iZXIncyBwcm9wZXJ0aWVzLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBlZGl0IHRoZSBtZW1iZXIgb2YuXG4gICAgICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIHVzZXIgSUQgb2YgdGhlIG1lbWJlciB0byBlZGl0LlxuICAgICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIHVzZXIuXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFRoaXMgZW5kcG9pbnQgcmVxdWlyZXMgdmFyaW91cyBwZXJtaXNzaW9ucyBkZXBlbmRpbmcgb24gd2hhdCBpcyBlZGl0ZWQgYWJvdXQgdGhlIG1lbWJlci5cbiAgICAgICAqIFRvIGZpbmQgb3V0IHRoZSByZXF1aXJlZCBwZXJtaXNzaW9uIHRvIGVuYWN0IGEgY2hhbmdlLCByZWFkIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoaXMgZW5kcG9pbnQncyB7QGxpbmsgTW9kaWZ5R3VpbGRNZW1iZXIgfCBwYXJhbWV0ZXJzfS5cbiAgICAgICAqXG4gICAgICAgKiBGaXJlcyBhIF9HdWlsZCBNZW1iZXIgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNtb2RpZnktZ3VpbGQtbWVtYmVyfVxuICAgICAgICovXG4gICAgICBlZGl0OiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZywgb3B0aW9uczogTW9kaWZ5R3VpbGRNZW1iZXIpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lbWJlcj4+XG4gICAgICAvKipcbiAgICAgICAqIEdldHMgb3IgY3JlYXRlcyBhIERNIGNoYW5uZWwgd2l0aCBhIHVzZXIuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSBJRCBvZiB0aGUgdXNlciB0byBjcmVhdGUgdGhlIERNIGNoYW5uZWwgd2l0aC5cbiAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBDaGFubmVsfS5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvdXNlciNjcmVhdGUtZG19XG4gICAgICAgKi9cbiAgICAgIGRtOiAodXNlcklkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZENoYW5uZWw+PlxuICAgICAgLyoqXG4gICAgICAgKiBHZXRzIHRoZSBtZW1iZXIgb2JqZWN0IGJ5IHVzZXIgSUQuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgbWVtYmVyIG9iamVjdCBmb3IuXG4gICAgICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIElEIG9mIHRoZSB1c2VyIHRvIGdldCB0aGUgbWVtYmVyIG9iamVjdCBmb3IuXG4gICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZE1lbWJlcldpdGhVc2VyfS5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjZ2V0LWd1aWxkLW1lbWJlcn1cbiAgICAgICAqL1xuICAgICAgZ2V0OiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+PlxuICAgICAgLyoqXG4gICAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIG1lbWJlcnMgZm9yIGEgZ3VpbGQuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgbGlzdCBvZiBtZW1iZXJzIGZvci5cbiAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgbWVtYmVycy5cbiAgICAgICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZE1lbWJlcldpdGhVc2VyfSBvYmplY3RzIGFzc29ydGVkIGJ5IHVzZXIgSUQuXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoZSBgR1VJTERfTUVNQkVSU2AgaW50ZW50LlxuICAgICAgICpcbiAgICAgICAqIOKaoO+4jyBJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gdXNlIHRoaXMgZW5kcG9pbnQgd2l0aCB2ZXJ5IGxhcmdlIGJvdHMuIEluc3RlYWQsIG9wdCB0byB1c2UgYGZldGNoTWVtYmVycygpYDpcbiAgICAgICAqIFJFU1QgY29tbXVuaWNhdGlvbiBvbmx5IHBlcm1pdHMgNTAgcmVxdWVzdHMgdG8gYmUgbWFkZSBwZXIgc2Vjb25kLCB3aGlsZSBnYXRld2F5cyBhbGxvdyBmb3IgdXAgdG8gMTIwIHJlcXVlc3RzXG4gICAgICAgKiBwZXIgbWludXRlIHBlciBzaGFyZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlYWQge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9yYXRlLWxpbWl0cyNyYXRlLWxpbWl0c30uXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2xpc3QtZ3VpbGQtbWVtYmVyc31cbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3JlcXVlc3QtZ3VpbGQtbWVtYmVyc31cbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9yYXRlLWxpbWl0cyNyYXRlLWxpbWl0c31cbiAgICAgICAqL1xuICAgICAgbGlzdDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogTGlzdEd1aWxkTWVtYmVycykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4+XG4gICAgICAvKipcbiAgICAgICAqIEtpY2tzIGEgbWVtYmVyIGZyb20gYSBndWlsZC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8ga2ljayB0aGUgbWVtYmVyIGZyb20uXG4gICAgICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIHVzZXIgSUQgb2YgdGhlIG1lbWJlciB0byBraWNrIGZyb20gdGhlIGd1aWxkLlxuICAgICAgICpcbiAgICAgICAqIEByZW1hcmtzXG4gICAgICAgKiBSZXF1aXJlcyB0aGUgYEtJQ0tfTUVNQkVSU2AgcGVybWlzc2lvbi5cbiAgICAgICAqXG4gICAgICAgKiBGaXJlcyBhIF9HdWlsZCBNZW1iZXIgUmVtb3ZlXyBnYXRld2F5IGV2ZW50LlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNyZW1vdmUtZ3VpbGQtbWVtYmVyfVxuICAgICAgICovXG4gICAgICBraWNrOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gICAgICAvKipcbiAgICAgICAqIEluaXRpYXRlcyB0aGUgcHJvY2VzcyBvZiBwcnVuaW5nIGluYWN0aXZlIG1lbWJlcnMuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIHBydW5lIHRoZSBtZW1iZXJzIG9mLlxuICAgICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHBydW5pbmcgb2YgbWVtYmVycy5cbiAgICAgICAqIEByZXR1cm5zIEEgbnVtYmVyIGluZGljYXRpbmcgaG93IG1hbnkgbWVtYmVycyB3ZXJlIHBydW5lZC5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogUmVxdWlyZXMgdGhlIGBLSUNLX01FTUJFUlNgIHBlcm1pc3Npb24uXG4gICAgICAgKlxuICAgICAgICog4p2XIFJlcXVlc3RzIHRvIHRoaXMgZW5kcG9pbnQgd2lsbCB0aW1lIG91dCBmb3IgbGFyZ2UgZ3VpbGRzLiBUbyBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcsIHNldCB0aGUge0BsaW5rIEJlZ2luR3VpbGRQcnVuZS5jb21wdXRlUHJ1bmVDb3VudH0gcHJvcGVydHkgb2YgdGhlIHtAbGluayBvcHRpb25zfSBvYmplY3QgcGFyYW1ldGVyIHRvIGBmYWxzZWAuIFRoaXMgd2lsbCBiZWdpbiB0aGUgcHJvY2VzcyBvZiBwcnVuaW5nLCBhbmQgaW1tZWRpYXRlbHkgcmV0dXJuIGB1bmRlZmluZWRgLCByYXRoZXIgdGhhbiB3YWl0IGZvciB0aGUgcHJvY2VzcyB0byBjb21wbGV0ZSBiZWZvcmUgcmV0dXJuaW5nIHRoZSBhY3R1YWwgY291bnQgb2YgbWVtYmVycyB0aGF0IGhhdmUgYmVlbiBraWNrZWQuXG4gICAgICAgKlxuICAgICAgICog4pqg77iPIEJ5IGRlZmF1bHQsIHRoaXMgcHJvY2VzcyB3aWxsIG5vdCByZW1vdmUgbWVtYmVycyB3aXRoIGEgcm9sZS4gVG8gaW5jbHVkZSB0aGUgbWVtYmVycyB3aG8gaGF2ZSBhIF9wYXJ0aWN1bGFyIHN1YnNldCBvZiByb2xlc18sIHNwZWNpZnkgdGhlIHJvbGUocykgaW4gdGhlIHtAbGluayBCZWdpbkd1aWxkUHJ1bmUuaW5jbHVkZVJvbGVzIHwgaW5jbHVkZVJvbGVzfSBwcm9wZXJ0eSBvZiB0aGUge0BsaW5rIG9wdGlvbnN9IG9iamVjdCBwYXJhbWV0ZXIuXG4gICAgICAgKlxuICAgICAgICogRmlyZXMgYSBfR3VpbGQgTWVtYmVyIFJlbW92ZV8gZ2F0ZXdheSBldmVudCBmb3IgZXZlcnkgbWVtYmVyIGtpY2tlZC5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjYmVnaW4tZ3VpbGQtcHJ1bmV9XG4gICAgICAgKi9cbiAgICAgIHBydW5lOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBCZWdpbkd1aWxkUHJ1bmUpID0+IFByb21pc2U8eyBwcnVuZWQ6IG51bWJlciB8IG51bGwgfT5cbiAgICAgIC8qKlxuICAgICAgICogR2V0cyB0aGUgbGlzdCBvZiBtZW1iZXJzIHdob3NlIHVzZXJuYW1lcyBvciBuaWNrbmFtZXMgc3RhcnQgd2l0aCBhIHByb3ZpZGVkIHN0cmluZy5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gc2VhcmNoIGluLlxuICAgICAgICogQHBhcmFtIHF1ZXJ5IC0gVGhlIHN0cmluZyB0byBtYXRjaCB1c2VybmFtZXMgb3Igbmlja25hbWVzIGFnYWluc3QuXG4gICAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBzZWFyY2hpbmcgdGhyb3VnaCB0aGUgbWVtYmVycy5cbiAgICAgICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZE1lbWJlcn0gb2JqZWN0cyBhc3NvcnRlZCBieSB1c2VyIElELlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNzZWFyY2gtZ3VpbGQtbWVtYmVyc31cbiAgICAgICAqL1xuICAgICAgc2VhcmNoOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBxdWVyeTogc3RyaW5nLCBvcHRpb25zPzogT21pdDxTZWFyY2hNZW1iZXJzLCAncXVlcnknPikgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4+XG4gICAgICAvKipcbiAgICAgICAqIFVuYmFucyBhIHVzZXIgZnJvbSBhIGd1aWxkLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byB1bmJhbiB0aGUgdXNlciBpbi5cbiAgICAgICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgSUQgb2YgdGhlIHVzZXIgdG8gdW5iYW4uXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoZSBgQkFOX01FTUJFUlNgIHBlcm1pc3Npb24uXG4gICAgICAgKlxuICAgICAgICogRmlyZXMgYSBfR3VpbGQgQmFuIFJlbW92ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjcmVtb3ZlLWd1aWxkLWJhbn1cbiAgICAgICAqL1xuICAgICAgdW5iYW46IChndWlsZElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gICAgfVxuICAgIC8qKiBJbnRlcmFjdGlvbiByZWxhdGVkIGhlbHBlciBtZXRob2RzLiAqL1xuICAgIGludGVyYWN0aW9uczoge1xuICAgICAgLyoqIENvbW1hbmQgcmVsYXRlZCBoZWxwZXIgbWV0aG9kcy4gKi9cbiAgICAgIGNvbW1hbmRzOiB7XG4gICAgICAgIC8qKiBNZXRob2RzIGZvciBjcmVhdGluZyBhIGNvbW1hbmQuICovXG4gICAgICAgIGNyZWF0ZToge1xuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIENyZWF0ZXMgYW4gYXBwbGljYXRpb24gY29tbWFuZCBhY2Nlc3NpYmxlIGdsb2JhbGx5OyBhY3Jvc3MgZGlmZmVyZW50IGd1aWxkcyBhbmQgY2hhbm5lbHMuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBjb21tYW5kIHRvIGNyZWF0ZS5cbiAgICAgICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgQXBwbGljYXRpb25Db21tYW5kfS5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEByZW1hcmtzXG4gICAgICAgICAgICog4pqg77iPIENyZWF0aW5nIGEgY29tbWFuZCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3RpbmcgY29tbWFuZCBmb3IgeW91ciBhcHBsaWNhdGlvbiB3aWxsIG92ZXJ3cml0ZSB0aGUgb2xkIGNvbW1hbmQuXG4gICAgICAgICAgICog4pqg77iPIEdsb2JhbCBjb21tYW5kcyBvbmNlIGNyZWF0ZWQgYXJlIGNhY2hlZCBmb3IgcGVyaW9kcyBvZiBfX2FuIGhvdXJfXywgc28gY2hhbmdlcyBtYWRlIHRvIGV4aXN0aW5nIGNvbW1hbmRzIHdpbGwgdGFrZSBhbiBob3VyIHRvIHN1cmZhY2UuXG4gICAgICAgICAgICog4pqg77iPIFlvdSBjYW4gb25seSBjcmVhdGUgdXAgdG8gMjAwIF9uZXdfIGNvbW1hbmRzIGRhaWx5LlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2NyZWF0ZS1nbG9iYWwtYXBwbGljYXRpb24tY29tbWFuZH1cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBnbG9iYWw6IChjb21tYW5kOiBDcmVhdGVBcHBsaWNhdGlvbkNvbW1hbmQpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4+XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogQ3JlYXRlcyBhbiBhcHBsaWNhdGlvbiBjb21tYW5kIG9ubHkgYWNjZXNzaWJsZSBpbiBhIHNwZWNpZmljIGd1aWxkLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZCB0byBjcmVhdGUuXG4gICAgICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGNyZWF0ZSB0aGUgY29tbWFuZCBmb3IuXG4gICAgICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIEFwcGxpY2F0aW9uQ29tbWFuZH0uXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAcmVtYXJrc1xuICAgICAgICAgICAqIOKaoO+4jyBDcmVhdGluZyBhIGNvbW1hbmQgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGFuIGV4aXN0aW5nIGNvbW1hbmQgZm9yIHlvdXIgYXBwbGljYXRpb24gd2lsbCBvdmVyd3JpdGUgdGhlIG9sZCBjb21tYW5kLlxuICAgICAgICAgICAqIOKaoO+4jyBZb3UgY2FuIG9ubHkgY3JlYXRlIHVwIHRvIDIwMCBfbmV3XyBjb21tYW5kcyBkYWlseS5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNjcmVhdGUtZ3VpbGQtYXBwbGljYXRpb24tY29tbWFuZH1cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBndWlsZDogKGNvbW1hbmQ6IENyZWF0ZUFwcGxpY2F0aW9uQ29tbWFuZCwgZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+PlxuICAgICAgICB9XG4gICAgICAgIC8qKiBNZXRob2RzIGZvciBkZWxldGluZyBhIGNvbW1hbmQuICovXG4gICAgICAgIGRlbGV0ZToge1xuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIERlbGV0ZXMgYW4gYXBwbGljYXRpb24gY29tbWFuZCByZWdpc3RlcmVkIGdsb2JhbGx5LlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHBhcmFtIGNvbW1hbmRJZCAtIFRoZSBJRCBvZiB0aGUgY29tbWFuZCB0byBkZWxldGUuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZGVsZXRlLWdsb2JhbC1hcHBsaWNhdGlvbi1jb21tYW5kfVxuICAgICAgICAgICAqL1xuICAgICAgICAgIGdsb2JhbDogKGNvbW1hbmRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogRGVsZXRlcyBhbiBhcHBsaWNhdGlvbiBjb21tYW5kIHJlZ2lzdGVyZWQgaW4gYSBndWlsZC5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBkZWxldGUgdGhlIGNvbW1hbmQgZnJvbS5cbiAgICAgICAgICAgKiBAcGFyYW0gY29tbWFuZElkIC0gVGhlIElEIG9mIHRoZSBjb21tYW5kIHRvIGRlbGV0ZSBmcm9tIHRoZSBndWlsZC5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNkZWxldGUtZ3VpbGQtYXBwbGljYXRpb24tY29tbWFuZH1cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBndWlsZDogKGNvbW1hbmRJZDogQmlnU3RyaW5nLCBndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgICAgICAgfVxuICAgICAgICAvKiogTWV0aG9kcyBmb3IgZWRpdGluZyBhIGNvbW1hbmQuICovXG4gICAgICAgIGVkaXQ6IHtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBFZGl0cyBhIGdsb2JhbCBhcHBsaWNhdGlvbiBjb21tYW5kLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHBhcmFtIGNvbW1hbmRJZCAtIFRoZSBJRCBvZiB0aGUgY29tbWFuZCB0byBlZGl0LlxuICAgICAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBjb21tYW5kLlxuICAgICAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIEFwcGxpY2F0aW9uQ29tbWFuZH0uXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZWRpdC1nbG9iYWwtYXBwbGljYXRpb24tY29tbWFuZH1cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBnbG9iYWw6IChjb21tYW5kSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlQXBwbGljYXRpb25Db21tYW5kKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+PlxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIEVkaXRzIGFuIGFwcGxpY2F0aW9uIGNvbW1hbmQgcmVnaXN0ZXJlZCBpbiBhIGd1aWxkLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRoZSBjb21tYW5kIGlzIHJlZ2lzdGVyZWQgaW4uXG4gICAgICAgICAgICogQHBhcmFtIGNvbW1hbmRJZCAtIFRoZSBJRCBvZiB0aGUgY29tbWFuZCB0byBlZGl0LlxuICAgICAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBjb21tYW5kLlxuICAgICAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIEFwcGxpY2F0aW9uQ29tbWFuZH0uXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZWRpdC1ndWlsZC1hcHBsaWNhdGlvbi1jb21tYW5kfVxuICAgICAgICAgICAqL1xuICAgICAgICAgIGd1aWxkOiAoY29tbWFuZElkOiBCaWdTdHJpbmcsIGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlQXBwbGljYXRpb25Db21tYW5kKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+PlxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIEVkaXRzIHRoZSBwZXJtaXNzaW9ucyBmb3IgYSBndWlsZCBhcHBsaWNhdGlvbiBjb21tYW5kLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRoZSBjb21tYW5kIGlzIHJlZ2lzdGVyZWQgaW4uXG4gICAgICAgICAgICogQHBhcmFtIGNvbW1hbmRJZCAtIFRoZSBJRCBvZiB0aGUgY29tbWFuZCB0byBlZGl0IHRoZSBwZXJtaXNzaW9ucyBvZi5cbiAgICAgICAgICAgKiBAcGFyYW0gYmVhcmVyVG9rZW4gLSBUaGUgYmVhcmVyIHRva2VuIHRvIHVzZSB0byBtYWtlIHRoZSByZXF1ZXN0LlxuICAgICAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBjb21tYW5kIHBlcm1pc3Npb25zLlxuICAgICAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb259LlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHJlbWFya3NcbiAgICAgICAgICAgKiBUaGUgYmVhcmVyIHRva2VuIHJlcXVpcmVzIHRoZSBgYXBwbGljYXRpb25zLmNvbW1hbmRzLnBlcm1pc3Npb25zLnVwZGF0ZWAgc2NvcGUgdG8gYmUgZW5hYmxlZCwgYW5kIHRvIGhhdmUgYWNjZXNzIHRvIHRoZSBndWlsZCB3aG9zZSBJRCBoYXMgYmVlbiBwcm92aWRlZCBpbiB0aGUgcGFyYW1ldGVycy5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNlZGl0LWFwcGxpY2F0aW9uLWNvbW1hbmQtcGVybWlzc2lvbnN9XG4gICAgICAgICAgICovXG4gICAgICAgICAgcGVybWlzc2lvbnM6IChcbiAgICAgICAgICAgIGd1aWxkSWQ6IEJpZ1N0cmluZyxcbiAgICAgICAgICAgIGNvbW1hbmRJZDogQmlnU3RyaW5nLFxuICAgICAgICAgICAgYmVhcmVyVG9rZW46IHN0cmluZyxcbiAgICAgICAgICAgIG9wdGlvbnM6IEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zW10sXG4gICAgICAgICAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucz4+XG4gICAgICAgIH1cbiAgICAgICAgLyoqIE1ldGhvZHMgZm9yIGdldHRpbmcgYSBjb21tYW5kLiAqL1xuICAgICAgICBnZXQ6IHtcbiAgICAgICAgICBnbG9iYWw6IHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogR2V0cyBhIGdsb2JhbCBhcHBsaWNhdGlvbiBjb21tYW5kIGJ5IGl0cyBJRC5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBAcGFyYW0gY29tbWFuZElkIC0gVGhlIElEIG9mIHRoZSBjb21tYW5kIHRvIGdldC5cbiAgICAgICAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBBcHBsaWNhdGlvbkNvbW1hbmR9LlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNnZXQtZ2xvYmFsLWFwcGxpY2F0aW9uLWNvbW1hbmR9XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIG9uZTogKGNvbW1hbmRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+PlxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIHlvdXIgYm90J3MgZ2xvYmFsIGFwcGxpY2F0aW9uIGNvbW1hbmRzLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgQXBwbGljYXRpb25Db21tYW5kfSBvYmplY3RzIGFzc29ydGVkIGJ5IGNvbW1hbmQgSUQuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2dldC1nbG9iYWwtYXBwbGljYXRpb24tY29tbWFuZHN9XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGFsbDogKCkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+PlxuICAgICAgICAgIH1cbiAgICAgICAgICBndWlsZHM6IHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogR2V0cyBhIGd1aWxkIGFwcGxpY2F0aW9uIGNvbW1hbmQgYnkgaXRzIElELlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0aGUgY29tbWFuZCBpcyByZWdpc3RlcmVkIGluLlxuICAgICAgICAgICAgICogQHBhcmFtIGNvbW1hbmRJZCAtIFRoZSBJRCBvZiB0aGUgY29tbWFuZCB0byBnZXQuXG4gICAgICAgICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgQXBwbGljYXRpb25Db21tYW5kfS5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZ2V0LWd1aWxkLWFwcGxpY2F0aW9uLWNvbW1hbmR9XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIG9uZTogKGNvbW1hbmRJZDogQmlnU3RyaW5nLCBndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4+XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEdldHMgdGhlIGxpc3Qgb2YgYXBwbGljYXRpb24gY29tbWFuZHMgcmVnaXN0ZXJlZCBieSB5b3VyIGJvdCBpbiBhIGd1aWxkLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0aGUgY29tbWFuZHMgYXJlIHJlZ2lzdGVyZWQgaW4uXG4gICAgICAgICAgICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIEFwcGxpY2F0aW9uQ29tbWFuZH0gb2JqZWN0cyBhc3NvcnRlZCBieSBjb21tYW5kIElELlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNnZXQtZ2xvYmFsLWFwcGxpY2F0aW9uLWNvbW1hbmRzc31cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYWxsOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4+XG4gICAgICAgICAgfVxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIEdldHMgdGhlIHBlcm1pc3Npb25zIG9mIGEgZ3VpbGQgYXBwbGljYXRpb24gY29tbWFuZC5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0aGUgY29tbWFuZCBpcyByZWdpc3RlcmVkIGluLlxuICAgICAgICAgICAqIEBwYXJhbSBjb21tYW5kSWQgLSBUaGUgSUQgb2YgdGhlIGNvbW1hbmQgdG8gZ2V0IHRoZSBwZXJtaXNzaW9ucyBvZi5cbiAgICAgICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbn0uXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZ2V0LWFwcGxpY2F0aW9uLWNvbW1hbmQtcGVybWlzc2lvbnN9XG4gICAgICAgICAgICovXG4gICAgICAgICAgcGVybWlzc2lvbjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgY29tbWFuZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPj5cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBHZXRzIHRoZSBwZXJtaXNzaW9ucyBvZiBhbGwgYXBwbGljYXRpb24gY29tbWFuZHMgcmVnaXN0ZXJlZCBpbiBhIGd1aWxkIGJ5IHRoZSBJRCBvZiB0aGUgZ3VpbGQuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBwZXJtaXNzaW9ucyBvYmplY3RzIG9mLlxuICAgICAgICAgICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbn0gb2JqZWN0cyBhc3NvcnRlZCBieSBjb21tYW5kIElELlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2dldC1ndWlsZC1hcHBsaWNhdGlvbi1jb21tYW5kLXBlcm1pc3Npb25zfVxuICAgICAgICAgICAqL1xuICAgICAgICAgIHBlcm1pc3Npb25zOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uc1tdPj5cbiAgICAgICAgfVxuICAgICAgICAvKiogTWV0aG9kcyBmb3IgcmVwbGFjaW5nIGV4aXN0aW5nIGNvbW1hbmRzIGluIGJ1bGsuICovXG4gICAgICAgIHJlcGxhY2U6IHtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBSZS1yZWdpc3RlcnMgdGhlIGxpc3Qgb2YgZ2xvYmFsIGFwcGxpY2F0aW9uIGNvbW1hbmRzLCBvdmVyd3JpdGluZyB0aGUgcHJldmlvdXMgY29tbWFuZHMgY29tcGxldGVseS5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBwYXJhbSBjb21tYW5kcyAtIFRoZSBsaXN0IG9mIGNvbW1hbmRzIHRvIHVzZSB0byBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIGxpc3QuXG4gICAgICAgICAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBBcHBsaWNhdGlvbkNvbW1hbmR9IG9iamVjdHMgYXNzb3J0ZWQgYnkgY29tbWFuZCBJRC5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEByZW1hcmtzXG4gICAgICAgICAgICog4p2XIENvbW1hbmRzIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBgY29tbWFuZHNgIGFycmF5IHdpbGwgYmUgX19kZWxldGVkX18uXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiDimqDvuI8gQ29tbWFuZHMgdGhhdCBkbyBub3QgYWxyZWFkeSBleGlzdCB3aWxsIGNvdW50IHRvd2FyZHMgdGhlIGRhaWx5IGxpbWl0IG9mIF8yMDBfIG5ldyBjb21tYW5kcy5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNidWxrLW92ZXJ3cml0ZS1nbG9iYWwtYXBwbGljYXRpb24tY29tbWFuZHN9XG4gICAgICAgICAgICovXG4gICAgICAgICAgZ2xvYmFsOiAoY29tbWFuZHM6IENyZWF0ZUFwcGxpY2F0aW9uQ29tbWFuZFtdKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4+XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogUmUtcmVnaXN0ZXJzIHRoZSBsaXN0IG9mIGFwcGxpY2F0aW9uIGNvbW1hbmRzIHJlZ2lzdGVyZWQgaW4gYSBndWlsZCwgb3ZlcndyaXRpbmcgdGhlIHByZXZpb3VzIGNvbW1hbmRzIGNvbXBsZXRlbHkuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgd2hvc2UgbGlzdCBvZiBjb21tYW5kcyB0byBvdmVyd3JpdGUuXG4gICAgICAgICAgICogQHBhcmFtIGNvbW1hbmRzIC0gVGhlIGxpc3Qgb2YgY29tbWFuZHMgdG8gdXNlIHRvIG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgbGlzdC5cbiAgICAgICAgICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIEFwcGxpY2F0aW9uQ29tbWFuZH0gb2JqZWN0cyBhc3NvcnRlZCBieSBjb21tYW5kIElELlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHJlbWFya3NcbiAgICAgICAgICAgKiDinZcgQ29tbWFuZHMgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIGBjb21tYW5kc2AgYXJyYXkgd2lsbCBiZSBfX2RlbGV0ZWRfXy5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIOKaoO+4jyBDb21tYW5kcyB0aGF0IGRvIG5vdCBhbHJlYWR5IGV4aXN0IHdpbGwgY291bnQgdG93YXJkcyB0aGUgZGFpbHkgbGltaXQgb2YgXzIwMF8gbmV3IGNvbW1hbmRzLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2J1bGstb3ZlcndyaXRlLWd1aWxkLWFwcGxpY2F0aW9uLWNvbW1hbmRzfVxuICAgICAgICAgICAqL1xuICAgICAgICAgIGd1aWxkOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBjb21tYW5kczogQ3JlYXRlQXBwbGljYXRpb25Db21tYW5kW10pID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLyoqIFJlc3BvbnNlIHJlbGF0ZWQgaGVscGVyIG1ldGhvZHMuICovXG4gICAgICByZXNwb25zZXM6IHtcbiAgICAgICAgLyoqIEhlbHBlciBtZXRob2RzIHJlbGF0ZWQgdG8gY3JlYXRpbmcgYSByZXNwb25zZS4gKi9cbiAgICAgICAgY3JlYXRlOiB7XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogU2VuZHMgYSBmb2xsb3ctdXAgbWVzc2FnZSB0byBhbiBpbnRlcmFjdGlvbi5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBwYXJhbSB0b2tlbiAtIFRoZSBpbnRlcmFjdGlvbiB0b2tlbiB0byB1c2UsIHByb3ZpZGVkIGluIHRoZSBvcmlnaW5hbCBpbnRlcmFjdGlvbi5cbiAgICAgICAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIG1lc3NhZ2UuXG4gICAgICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIE1lc3NhZ2V9LlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHJlbWFya3NcbiAgICAgICAgICAgKiDimqDvuI8gSW50ZXJhY3Rpb24gdG9rZW5zIGFyZSBvbmx5IHZhbGlkIGZvciBfMTUgbWludXRlc18uXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBCeSBkZWZhdWx0LCBtZW50aW9ucyBhcmUgc3VwcHJlc3NlZC4gVG8gZW5hYmxlIG1lbnRpb25zLCBwYXNzIGEgbWVudGlvbiBvYmplY3Qgd2l0aCB0aGUgY2FsbGJhY2sgZGF0YS5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIFVubGlrZSBgc2VuZE1lc3NhZ2UoKWAsIHRoaXMgZW5kcG9pbnQgYWxsb3dzIHRoZSBib3QgdXNlciB0byBhY3Qgd2l0aG91dDpcbiAgICAgICAgICAgKiAtIE5lZWRpbmcgdG8gYmUgYWJsZSB0byBzZWUgdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFubmVsIHRoYXQgdGhlIG1lc3NhZ2UgaXMgaW4uIChgUkVBRF9NRVNTQUdFU2AgcGVybWlzc2lvbi4pXG4gICAgICAgICAgICogLSBSZXF1aXJpbmcgdGhlIGBNRVNTQUdFX0NPTlRFTlRgIGludGVudC5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEZpcmVzIGEgX01lc3NhZ2UgQ3JlYXRlXyBldmVudC5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9yZWNlaXZpbmctYW5kLXJlc3BvbmRpbmcjY3JlYXRlLWZvbGxvd3VwLW1lc3NhZ2V9XG4gICAgICAgICAgICovXG4gICAgICAgICAgZm9sbG93dXA6ICh0b2tlbjogc3RyaW5nLCBvcHRpb25zOiBJbnRlcmFjdGlvbkNhbGxiYWNrRGF0YSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogU2VuZHMgYSByZXNwb25zZSB0byBhbiBpbnRlcmFjdGlvbi5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBwYXJhbSBpbnRlcmFjdGlvbklkIC0gVGhlIElEIG9mIHRoZSBpbnRlcmFjdGlvbiB0byByZXNwb25kIHRvLlxuICAgICAgICAgICAqIEBwYXJhbSB0b2tlbiAtIFRoZSBpbnRlcmFjdGlvbiB0b2tlbiB0byB1c2UsIHByb3ZpZGVkIGluIHRoZSBvcmlnaW5hbCBpbnRlcmFjdGlvbi5cbiAgICAgICAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIG1lc3NhZ2UuXG4gICAgICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIE1lc3NhZ2V9LlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHJlbWFya3NcbiAgICAgICAgICAgKiDimqDvuI8gSW50ZXJhY3Rpb24gdG9rZW5zIGFyZSBvbmx5IHZhbGlkIGZvciBfMTUgbWludXRlc18uXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBCeSBkZWZhdWx0LCBtZW50aW9ucyBhcmUgc3VwcHJlc3NlZC4gVG8gZW5hYmxlIG1lbnRpb25zLCBwYXNzIGEgbWVudGlvbiBvYmplY3Qgd2l0aCB0aGUgY2FsbGJhY2sgZGF0YS5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIFVubGlrZSBgc2VuZE1lc3NhZ2UoKWAsIHRoaXMgZW5kcG9pbnQgYWxsb3dzIHRoZSBib3QgdXNlciB0byBhY3Qgd2l0aG91dDpcbiAgICAgICAgICAgKiAtIE5lZWRpbmcgdG8gYmUgYWJsZSB0byBzZWUgdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFubmVsIHRoYXQgdGhlIG1lc3NhZ2UgaXMgaW4uIChgUkVBRF9NRVNTQUdFU2AgcGVybWlzc2lvbi4pXG4gICAgICAgICAgICogLSBSZXF1aXJpbmcgdGhlIGBNRVNTQUdFX0NPTlRFTlRgIGludGVudC5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEZpcmVzIGEgX01lc3NhZ2UgQ3JlYXRlXyBldmVudC5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9yZWNlaXZpbmctYW5kLXJlc3BvbmRpbmcjY3JlYXRlLWludGVyYWN0aW9uLXJlc3BvbnNlfVxuICAgICAgICAgICAqL1xuICAgICAgICAgIG9yaWdpbmFsOiAoaW50ZXJhY3Rpb25JZDogQmlnU3RyaW5nLCB0b2tlbjogc3RyaW5nLCBvcHRpb25zOiBJbnRlcmFjdGlvblJlc3BvbnNlKSA9PiBQcm9taXNlPHZvaWQ+XG4gICAgICAgIH1cbiAgICAgICAgLyoqIEhlbHBlciBtZXRob2RzIHJlbGF0ZWQgdG8gZGVsZXRpbmcgYSByZXNwb25zZS4gKi9cbiAgICAgICAgZGVsZXRlOiB7XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogRGVsZXRlcyBhIGZvbGxvdy11cCBtZXNzYWdlIHRvIGFuIGludGVyYWN0aW9uLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHBhcmFtIHRva2VuIC0gVGhlIGludGVyYWN0aW9uIHRva2VuIHRvIHVzZSwgcHJvdmlkZWQgaW4gdGhlIG9yaWdpbmFsIGludGVyYWN0aW9uLlxuICAgICAgICAgICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gZGVsZXRlLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHJlbWFya3NcbiAgICAgICAgICAgKiBVbmxpa2UgYGRlbGV0ZU1lc3NhZ2UoKWAsIHRoaXMgZW5kcG9pbnQgYWxsb3dzIHRoZSBib3QgdXNlciB0byBhY3Qgd2l0aG91dCBuZWVkaW5nIHRvIHNlZSB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSBpcyBpbi5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEZpcmVzIGEgX01lc3NhZ2UgRGVsZXRlXyBldmVudC5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9yZWNlaXZpbmctYW5kLXJlc3BvbmRpbmcjZGVsZXRlLWZvbGxvd3VwLW1lc3NhZ2V9XG4gICAgICAgICAgICovXG4gICAgICAgICAgZm9sbG93dXA6ICh0b2tlbjogc3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIERlbGV0ZXMgdGhlIGluaXRpYWwgbWVzc2FnZSByZXNwb25zZSB0byBhbiBpbnRlcmFjdGlvbi5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBwYXJhbSB0b2tlbiAtIFRoZSBpbnRlcmFjdGlvbiB0b2tlbiB0byB1c2UsIHByb3ZpZGVkIGluIHRoZSBvcmlnaW5hbCBpbnRlcmFjdGlvbi5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEByZW1hcmtzXG4gICAgICAgICAgICogVW5saWtlIGBkZWxldGVNZXNzYWdlKClgLCB0aGlzIGVuZHBvaW50IGFsbG93cyB0aGUgYm90IHVzZXIgdG8gYWN0IHdpdGhvdXQgbmVlZGluZyB0byBzZWUgdGhlIGNoYW5uZWwgdGhlIG1lc3NhZ2UgaXMgaW4uXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBGaXJlcyBhIF9NZXNzYWdlIERlbGV0ZV8gZXZlbnQuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvcmVjZWl2aW5nLWFuZC1yZXNwb25kaW5nI2RlbGV0ZS1vcmlnaW5hbC1pbnRlcmFjdGlvbi1yZXNwb25zZX1cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBvcmlnaW5hbDogKHRva2VuOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgICAgICAgfVxuICAgICAgICAvKiogSGVscGVyIG1ldGhvZHMgcmVsYXRlZCB0byBlZGl0aW5nIGEgcmVzcG9uc2UuICovXG4gICAgICAgIGVkaXQ6IHtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBFZGl0cyBhIGZvbGxvdy11cCBtZXNzYWdlIHRvIGFuIGludGVyYWN0aW9uLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHBhcmFtIHRva2VuIC0gVGhlIGludGVyYWN0aW9uIHRva2VuIHRvIHVzZSwgcHJvdmlkZWQgaW4gdGhlIG9yaWdpbmFsIGludGVyYWN0aW9uLlxuICAgICAgICAgICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gZWRpdC5cbiAgICAgICAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgbWVzc2FnZS5cbiAgICAgICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBNZXNzYWdlfS5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEByZW1hcmtzXG4gICAgICAgICAgICogVW5saWtlIGBlZGl0TWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0IG5lZWRpbmcgdG8gc2VlIHRoZSBjaGFubmVsIHRoZSBtZXNzYWdlIGlzIGluLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogRG9lcyBub3Qgc3VwcG9ydCBlcGhlbWVyYWwgZm9sbG93LXVwIG1lc3NhZ2VzIGR1ZSB0byB0aGVzZSBiZWluZyBzdGF0ZWxlc3MuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBGaXJlcyBhIF9NZXNzYWdlIFVwZGF0ZV8gZXZlbnQuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvcmVjZWl2aW5nLWFuZC1yZXNwb25kaW5nI2VkaXQtZm9sbG93dXAtbWVzc2FnZX1cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBmb2xsb3d1cDogKHRva2VuOiBzdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBJbnRlcmFjdGlvbkNhbGxiYWNrRGF0YSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogRWRpdHMgdGhlIGluaXRpYWwgbWVzc2FnZSByZXNwb25zZSB0byBhbiBpbnRlcmFjdGlvbi5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBwYXJhbSB0b2tlbiAtIFRoZSBpbnRlcmFjdGlvbiB0b2tlbiB0byB1c2UsIHByb3ZpZGVkIGluIHRoZSBvcmlnaW5hbCBpbnRlcmFjdGlvbi5cbiAgICAgICAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgcmVzcG9uc2UuXG4gICAgICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgTWVzc2FnZX0uXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAcmVtYXJrc1xuICAgICAgICAgICAqIFVubGlrZSBgZWRpdE1lc3NhZ2UoKWAsIHRoaXMgZW5kcG9pbnQgYWxsb3dzIHRoZSBib3QgdXNlciB0byBhY3Qgd2l0aG91dCBuZWVkaW5nIHRvIHNlZSB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSBpcyBpbi5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIERvZXMgbm90IHN1cHBvcnQgZXBoZW1lcmFsIGZvbGxvdy11cCBtZXNzYWdlcyBkdWUgdG8gdGhlc2UgYmVpbmcgc3RhdGVsZXNzLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogRmlyZXMgYSBfTWVzc2FnZSBVcGRhdGVfIGV2ZW50LlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL3JlY2VpdmluZy1hbmQtcmVzcG9uZGluZyNlZGl0LW9yaWdpbmFsLWludGVyYWN0aW9uLXJlc3BvbnNlfVxuICAgICAgICAgICAqL1xuICAgICAgICAgIG9yaWdpbmFsOiAodG9rZW46IHN0cmluZywgb3B0aW9uczogSW50ZXJhY3Rpb25DYWxsYmFja0RhdGEpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+IHwgdW5kZWZpbmVkPlxuICAgICAgICB9XG4gICAgICAgIC8qKiBIZWxwZXIgbWV0aG9kcyByZWxhdGVkIHRvIGdldHRpbmcgYSByZXNwb25zZS4gKi9cbiAgICAgICAgZ2V0OiB7XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogR2V0cyBhIGZvbGxvdy11cCBtZXNzYWdlIHRvIGFuIGludGVyYWN0aW9uIGJ5IHRoZSBJRCBvZiB0aGUgbWVzc2FnZS5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBwYXJhbSB0b2tlbiAtIFRoZSBpbnRlcmFjdGlvbiB0b2tlbiB0byB1c2UsIHByb3ZpZGVkIGluIHRoZSBvcmlnaW5hbCBpbnRlcmFjdGlvbi5cbiAgICAgICAgICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGdldC5cbiAgICAgICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgTWVzc2FnZX0uXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAcmVtYXJrc1xuICAgICAgICAgICAqIFVubGlrZSBgZ2V0TWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0OlxuICAgICAgICAgICAqIC0gTmVlZGluZyB0byBiZSBhYmxlIHRvIHNlZSB0aGUgY29udGVudHMgb2YgdGhlIGNoYW5uZWwgdGhhdCB0aGUgbWVzc2FnZSBpcyBpbi4gKGBSRUFEX01FU1NBR0VTYCBwZXJtaXNzaW9uLilcbiAgICAgICAgICAgKiAtIFJlcXVpcmluZyB0aGUgYE1FU1NBR0VfQ09OVEVOVGAgaW50ZW50LlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogRG9lcyBub3Qgc3VwcG9ydCBlcGhlbWVyYWwgZm9sbG93LXVwIG1lc3NhZ2VzIGR1ZSB0byB0aGVzZSBiZWluZyBzdGF0ZWxlc3MuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvcmVjZWl2aW5nLWFuZC1yZXNwb25kaW5nI2dldC1mb2xsb3d1cC1tZXNzYWdlfVxuICAgICAgICAgICAqL1xuICAgICAgICAgIGZvbGxvd3VwOiAodG9rZW46IHN0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PlxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIEdldHMgdGhlIGluaXRpYWwgbWVzc2FnZSByZXNwb25zZSB0byBhbiBpbnRlcmFjdGlvbi5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBwYXJhbSB0b2tlbiAtIFRoZSBpbnRlcmFjdGlvbiB0b2tlbiB0byB1c2UsIHByb3ZpZGVkIGluIHRoZSBvcmlnaW5hbCBpbnRlcmFjdGlvbi5cbiAgICAgICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgTWVzc2FnZX0uXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAcmVtYXJrc1xuICAgICAgICAgICAqIFVubGlrZSBgZ2V0TWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0OlxuICAgICAgICAgICAqIC0gTmVlZGluZyB0byBiZSBhYmxlIHRvIHNlZSB0aGUgY29udGVudHMgb2YgdGhlIGNoYW5uZWwgdGhhdCB0aGUgbWVzc2FnZSBpcyBpbi4gKGBSRUFEX01FU1NBR0VTYCBwZXJtaXNzaW9uLilcbiAgICAgICAgICAgKiAtIFJlcXVpcmluZyB0aGUgYE1FU1NBR0VfQ09OVEVOVGAgaW50ZW50LlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogRG9lcyBub3Qgc3VwcG9ydCBlcGhlbWVyYWwgZm9sbG93LXVwIG1lc3NhZ2VzIGR1ZSB0byB0aGVzZSBiZWluZyBzdGF0ZWxlc3MuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvcmVjZWl2aW5nLWFuZC1yZXNwb25kaW5nI2dldC1vcmlnaW5hbC1pbnRlcmFjdGlvbi1yZXNwb25zZX1cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBvcmlnaW5hbDogKHRva2VuOiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8qKiBSb2xlIHJlbGF0ZWQgaGVscGVycyBtZXRob2RzLiAqL1xuICAgIHJvbGVzOiB7XG4gICAgICAvKipcbiAgICAgICAqIEFkZHMgYSByb2xlIHRvIGEgbWVtYmVyLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0aGUgbWVtYmVyIHRvIGFkZCB0aGUgcm9sZSB0byBpcyBpbi5cbiAgICAgICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgdXNlciBJRCBvZiB0aGUgbWVtYmVyIHRvIGFkZCB0aGUgcm9sZSB0by5cbiAgICAgICAqIEBwYXJhbSByb2xlSWQgLSBUaGUgSUQgb2YgdGhlIHJvbGUgdG8gYWRkIHRvIHRoZSBtZW1iZXIuXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uLlxuICAgICAgICpcbiAgICAgICAqIEZpcmVzIGEgX0d1aWxkIE1lbWJlciBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2FkZC1ndWlsZC1tZW1iZXItcm9sZX1cbiAgICAgICAqL1xuICAgICAgYWRkOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZywgcm9sZUlkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAgICAgLyoqXG4gICAgICAgKiBDcmVhdGVzIGEgcm9sZSBpbiBhIGd1aWxkLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBjcmVhdGUgdGhlIHJvbGUgaW4uXG4gICAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIHJvbGUuXG4gICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZFJvbGV9LlxuICAgICAgICpcbiAgICAgICAqIEByZW1hcmtzXG4gICAgICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9ST0xFU2AgcGVybWlzc2lvbi5cbiAgICAgICAqXG4gICAgICAgKiBGaXJlcyBhIF9HdWlsZCBSb2xlIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjY3JlYXRlLWd1aWxkLXJvbGV9XG4gICAgICAgKi9cbiAgICAgIGNyZWF0ZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlR3VpbGRSb2xlLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFJvbGU+PlxuICAgICAgLyoqXG4gICAgICAgKiBEZWxldGVzIGEgcm9sZSBmcm9tIGEgZ3VpbGQuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGRlbGV0ZSB0aGUgcm9sZSBmcm9tLlxuICAgICAgICogQHBhcmFtIHJvbGVJZCAtIFRoZSBJRCBvZiB0aGUgcm9sZSB0byBkZWxldGUuXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uLlxuICAgICAgICpcbiAgICAgICAqIEZpcmVzIGEgX0d1aWxkIFJvbGUgRGVsZXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNkZWxldGUtZ3VpbGQtcm9sZX1cbiAgICAgICAqL1xuICAgICAgZGVsZXRlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCByb2xlSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAgICAgLyoqXG4gICAgICAgKiBFZGl0cyBhIHJvbGUgaW4gYSBndWlsZC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZWRpdCB0aGUgcm9sZSBpbi5cbiAgICAgICAqIEBwYXJhbSByb2xlSWQgLSBUaGUgSUQgb2YgdGhlIHJvbGUgdG8gZWRpdC5cbiAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSByb2xlLlxuICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZFJvbGV9LlxuICAgICAgICpcbiAgICAgICAqIEByZW1hcmtzXG4gICAgICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9ST0xFU2AgcGVybWlzc2lvbi5cbiAgICAgICAqXG4gICAgICAgKiBGaXJlcyBhIF9HdWlsZCBSb2xlIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjbW9kaWZ5LWd1aWxkLXJvbGV9XG4gICAgICAgKi9cbiAgICAgIGVkaXQ6IChndWlsZElkOiBCaWdTdHJpbmcsIHJvbGVJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBFZGl0R3VpbGRSb2xlKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRSb2xlPj5cbiAgICAgIC8qKlxuICAgICAgICogRWRpdHMgdGhlIHBvc2l0aW9ucyBvZiBhIHNldCBvZiByb2xlcy5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZWRpdCB0aGUgcm9sZSBwb3NpdGlvbnMgaW4uXG4gICAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgcm9sZSBwb3NpdGlvbnMuXG4gICAgICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRSb2xlfSBvYmplY3RzIGFzc29ydGVkIGJ5IHJvbGUgSUQuXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uLlxuICAgICAgICpcbiAgICAgICAqIEZpcmVzIGEgX0d1aWxkIFJvbGUgVXBkYXRlXyBnYXRld2F5IGV2ZW50IGZvciBldmVyeSByb2xlIGltcGFjdGVkIGluIHRoaXMgY2hhbmdlLlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNtb2RpZnktZ3VpbGQtcm9sZS1wb3NpdGlvbnN9XG4gICAgICAgKi9cbiAgICAgIHBvc2l0aW9uczogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogTW9kaWZ5Um9sZVBvc2l0aW9uc1tdKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRSb2xlW10+PlxuICAgICAgLyoqXG4gICAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIHJvbGVzIGZvciBhIGd1aWxkLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIGxpc3Qgb2Ygcm9sZXMgZm9yLlxuICAgICAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNvcmNSb2xlfSBvYmplY3RzIGFzc29ydGVkIGJ5IHJvbGUgSUQuXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIOKaoO+4jyBUaGlzIGVuZHBvaW50IHNob3VsZCBiZSB1c2VkIHNwYXJpbmdseSBkdWUgdG8ge0BsaW5rIFVzZXJ9IG9iamVjdHMgYWxyZWFkeSBiZWluZyBpbmNsdWRlZCBpbiBndWlsZCBwYXlsb2Fkcy5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjZ2V0LWd1aWxkLXJvbGVzfVxuICAgICAgICovXG4gICAgICBsaXN0OiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRSb2xlW10+PlxuICAgICAgLyoqXG4gICAgICAgKiBSZW1vdmVzIGEgcm9sZSBmcm9tIGEgbWVtYmVyLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0aGUgbWVtYmVyIHRvIHJlbW92ZSB0aGUgcm9sZSBmcm9tIGlzIGluLlxuICAgICAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSB1c2VyIElEIG9mIHRoZSBtZW1iZXIgdG8gcmVtb3ZlIHRoZSByb2xlIGZyb20uXG4gICAgICAgKiBAcGFyYW0gcm9sZUlkIC0gVGhlIElEIG9mIHRoZSByb2xlIHRvIHJlbW92ZSBmcm9tIHRoZSBtZW1iZXIuXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uLlxuICAgICAgICpcbiAgICAgICAqIEZpcmVzIGEgX0d1aWxkIE1lbWJlciBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI3JlbW92ZS1ndWlsZC1tZW1iZXItcm9sZX1cbiAgICAgICAqL1xuICAgICAgcmVtb3ZlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZywgcm9sZUlkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAgIH1cbiAgfVxuICAvKiogV2ViaG9vayByZWxhdGVkIGhlbHBlciBtZXRob2RzLiAqL1xuICB3ZWJob29rczoge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSB3ZWJob29rLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBjcmVhdGUgdGhlIHdlYmhvb2sgaW4uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSB3ZWJob29rLlxuICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkV2ViaG9va30uXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1dFQkhPT0tTYCBwZXJtaXNzaW9uLlxuICAgICAqXG4gICAgICog4pqg77iPIFRoZSB3ZWJob29rIG5hbWUgbXVzdCBub3QgY29udGFpbiB0aGUgc3RyaW5nICdjbHlkZScgKGNhc2UtaW5zZW5zaXRpdmUpLlxuICAgICAqXG4gICAgICogRmlyZXMgYSBfV2ViaG9va3MgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAqXG4gICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjY3JlYXRlLXdlYmhvb2t9XG4gICAgICovXG4gICAgY3JlYXRlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZVdlYmhvb2spID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFdlYmhvb2s+PlxuICAgIC8qKiBNZXRob2RzIHRvIGRlbGV0ZSBhIHdlYmhvb2suICovXG4gICAgZGVsZXRlOiB7XG4gICAgICB3aXRoOiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWxldGVzIGEgd2ViaG9vay5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGlkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGRlbGV0ZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJlbWFya3NcbiAgICAgICAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfV0VCSE9PS1NgIHBlcm1pc3Npb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEZpcmVzIGEgX1dlYmhvb2tzIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZGVsZXRlLXdlYmhvb2t9XG4gICAgICAgICAqL1xuICAgICAgICBpZDogKGlkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAgICAgICAvKipcbiAgICAgICAgICogRGVsZXRlcyBhIHdlYmhvb2sgbWVzc2FnZSB1c2luZyB0aGUgd2ViaG9vayB0b2tlbiwgdGhlcmVieSBieXBhc3NpbmcgdGhlIG5lZWQgZm9yIGF1dGhlbnRpY2F0aW9uICsgcGVybWlzc2lvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBpZCAtIFRoZSBJRCBvZiB0aGUgd2ViaG9vayB0byBkZWxldGUgdGhlIG1lc3NhZ2UgYmVsb25naW5nIHRvLlxuICAgICAgICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgd2ViaG9vayB0b2tlbiwgdXNlZCB0byBkZWxldGUgdGhlIHdlYmhvb2suXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZW1hcmtzXG4gICAgICAgICAqIEZpcmVzIGEgX01lc3NhZ2UgRGVsZXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNkZWxldGUtd2ViaG9vay13aXRoLXRva2VufVxuICAgICAgICAgKi9cbiAgICAgICAgdG9rZW46IChpZDogQmlnU3RyaW5nLCB0b2tlbjogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gICAgICB9XG4gICAgfVxuICAgIC8qKiBNZXRob2RzIHJlbGF0ZWQgdG8gZWRpdGluZyBhIHdlYmhvb2suICovXG4gICAgZWRpdDoge1xuICAgICAgd2l0aDoge1xuICAgICAgICAvKipcbiAgICAgICAgICogRWRpdHMgYSB3ZWJob29rLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGVkaXQuXG4gICAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRXZWJob29rfS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJlbWFya3NcbiAgICAgICAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfV0VCSE9PS1NgIHBlcm1pc3Npb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEZpcmVzIGEgX1dlYmhvb2tzIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZWRpdC13ZWJob29rfVxuICAgICAgICAgKi9cbiAgICAgICAgaWQ6ICh3ZWJob29rSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogTW9kaWZ5V2ViaG9vaykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkV2ViaG9vaz4+XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFZGl0cyBhIHdlYmhvb2sgdXNpbmcgdGhlIHdlYmhvb2sgdG9rZW4sIHRoZXJlYnkgYnlwYXNzaW5nIHRoZSBuZWVkIGZvciBhdXRoZW50aWNhdGlvbiArIHBlcm1pc3Npb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGVkaXQuXG4gICAgICAgICAqIEBwYXJhbSB0b2tlbiAtIFRoZSB3ZWJob29rIHRva2VuLCB1c2VkIHRvIGVkaXQgdGhlIHdlYmhvb2suXG4gICAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRXZWJob29rfS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJlbWFya3NcbiAgICAgICAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfV0VCSE9PS1NgIHBlcm1pc3Npb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEZpcmVzIGEgX1dlYmhvb2tzIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjbW9kaWZ5LXdlYmhvb2std2l0aC10b2tlbn1cbiAgICAgICAgICovXG4gICAgICAgIHRva2VuOiAod2ViaG9va0lkOiBCaWdTdHJpbmcsIHRva2VuOiBzdHJpbmcsIG9wdGlvbnM6IE9taXQ8TW9kaWZ5V2ViaG9vaywgJ2NoYW5uZWxJZCc+KSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRXZWJob29rPj5cbiAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgYSB3ZWJob29rLCBjYXVzaW5nIGEgbWVzc2FnZSB0byBiZSBwb3N0ZWQgaW4gdGhlIGNoYW5uZWwgY29uZmlndXJlZCBmb3IgdGhlIHdlYmhvb2suXG4gICAgICpcbiAgICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGV4ZWN1dGUuXG4gICAgICogQHBhcmFtIHRva2VuIC0gVGhlIHdlYmhvb2sgdG9rZW4sIHVzZWQgdG8gZXhlY3V0ZSB0aGUgd2ViaG9vay5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSB3ZWJob29rLlxuICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkTWVzc2FnZX0sIG9yIGB1bmRlZmluZWRgIGlmIHRoZSB7QGxpbmsgRXhlY3V0ZVdlYmhvb2sud2FpdCB8IHdhaXR9IHByb3BlcnR5IG9mIHRoZSB7QGxpbmsgb3B0aW9uc30gb2JqZWN0IHBhcmFtZXRlciBpcyBzZXQgdG8gYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogSWYgdGhlIHdlYmhvb2sgY2hhbm5lbCBpcyBhIGZvcnVtIGNoYW5uZWwsIHlvdSBtdXN0IHByb3ZpZGUgYSB2YWx1ZSBmb3IgZWl0aGVyIGB0aHJlYWRJZGAgb3IgYHRocmVhZE5hbWVgLlxuICAgICAqXG4gICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZXhlY3V0ZS13ZWJob29rfVxuICAgICAqL1xuICAgIGV4ZWN1dGU6ICh3ZWJob29rSWQ6IEJpZ1N0cmluZywgdG9rZW46IHN0cmluZywgb3B0aW9uczogRXhlY3V0ZVdlYmhvb2spID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+IHwgdW5kZWZpbmVkPlxuICAgIC8qKiBNZXRob2RzIHJlbGF0ZWQgdG8gZ2V0dGluZyB3ZWJob29rcy4gKi9cbiAgICBnZXQ6IHtcbiAgICAgIC8qKlxuICAgICAgICogR2V0cyBhIGxpc3Qgb2Ygd2ViaG9va3MgZm9yIGEgY2hhbm5lbC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHdoaWNoIHRvIGdldCB0aGUgd2ViaG9va3Mgb2YuXG4gICAgICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRXZWJob29rfSBvYmplY3RzIGFzc29ydGVkIGJ5IHdlYmhvb2sgSUQuXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1dFQkhPT0tTYCBwZXJtaXNzaW9uLlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy93ZWJob29rI2dldC1jaGFubmVsLXdlYmhvb2tzfVxuICAgICAgICovXG4gICAgICBjaGFubmVsOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFdlYmhvb2tbXT4+XG4gICAgICAvKipcbiAgICAgICAqIEdldHMgdGhlIGxpc3Qgb2Ygd2ViaG9va3MgZm9yIGEgZ3VpbGQuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgbGlzdCBvZiB3ZWJob29rcyBmb3IuXG4gICAgICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRXZWJob29rfSBvYmplY3RzIGFzc29ydGVkIGJ5IHdlYmhvb2sgSUQuXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1dFQkhPT0tTYCBwZXJtaXNzaW9uLlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy93ZWJob29rI2dldC1ndWlsZC13ZWJob29rc31cbiAgICAgICAqL1xuICAgICAgZ3VpbGQ6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFdlYmhvb2tbXT4+XG4gICAgICAvKipcbiAgICAgICAqIEdldHMgYSB3ZWJob29rIG1lc3NhZ2UgYnkgaXRzIElELlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZ2V0IGEgbWVzc2FnZSBvZi5cbiAgICAgICAqIEBwYXJhbSB0b2tlbiAtIFRoZSB3ZWJob29rIHRva2VuLCB1c2VkIHRvIGdldCB3ZWJob29rIG1lc3NhZ2VzLlxuICAgICAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIHRoZSBJRCBvZiB0aGUgd2ViaG9vayBtZXNzYWdlIHRvIGdldC5cbiAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgbWVzc2FnZS5cbiAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkTWVzc2FnZX0uXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZ2V0LXdlYmhvb2stbWVzc2FnZX1cbiAgICAgICAqL1xuICAgICAgbWVzc2FnZTogKHdlYmhvb2tJZDogQmlnU3RyaW5nLCB0b2tlbjogc3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IEdldFdlYmhvb2tNZXNzYWdlT3B0aW9ucykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+XG4gICAgICB3aXRoOiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIGEgd2ViaG9vayBieSBpdHMgSUQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZ2V0LlxuICAgICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZFdlYmhvb2t9LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmVtYXJrc1xuICAgICAgICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9XRUJIT09LU2AgcGVybWlzc2lvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZ2V0LXdlYmhvb2t9XG4gICAgICAgICAqL1xuICAgICAgICBpZDogKHdlYmhvb2tJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRXZWJob29rPj5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgYSB3ZWJob29rIHVzaW5nIHRoZSB3ZWJob29rIHRva2VuLCB0aGVyZWJ5IGJ5cGFzc2luZyB0aGUgbmVlZCBmb3IgYXV0aGVudGljYXRpb24gKyBwZXJtaXNzaW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHdlYmhvb2tJZCAtIFRoZSBJRCBvZiB0aGUgd2ViaG9vayB0byBnZXQuXG4gICAgICAgICAqIEBwYXJhbSB0b2tlbiAtIFRoZSB3ZWJob29rIHRva2VuLCB1c2VkIHRvIGdldCB0aGUgd2ViaG9vay5cbiAgICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRXZWJob29rfS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZ2V0LXdlYmhvb2std2l0aC10b2tlbn1cbiAgICAgICAgICovXG4gICAgICAgIHRva2VuOiAod2ViaG9va0lkOiBCaWdTdHJpbmcsIHRva2VuOiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFdlYmhvb2s+PlxuICAgICAgfVxuICAgIH1cbiAgICAvKiogTWV0aG9kcyByZWxhdGVkIHRvIG1lc3NhZ2Ugc2VudCBieSBhIHdlYmhvb2suICovXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIC8qKlxuICAgICAgICogRGVsZXRlcyBhIHdlYmhvb2sgbWVzc2FnZS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGRlbGV0ZSB0aGUgbWVzc2FnZSBiZWxvbmdpbmcgdG8uXG4gICAgICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgd2ViaG9vayB0b2tlbiwgdXNlZCB0byBtYW5hZ2UgdGhlIHdlYmhvb2suXG4gICAgICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGRlbGV0ZS5cbiAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBkZWxldGlvbiBvZiB0aGUgbWVzc2FnZS5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogRmlyZXMgYSBfTWVzc2FnZSBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZGVsZXRlLXdlYmhvb2t9XG4gICAgICAgKi9cbiAgICAgIGRlbGV0ZTogKHdlYmhvb2tJZDogQmlnU3RyaW5nLCB0b2tlbjogc3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IERlbGV0ZVdlYmhvb2tNZXNzYWdlT3B0aW9ucykgPT4gUHJvbWlzZTx2b2lkPlxuICAgICAgLyoqIE1ldGhvZHMgcmVsYXRlZCB0byBlZGl0aW5nIG1lc3NhZ2VzIHNlbnQgYnkgYSB3ZWJob29rLiAqL1xuICAgICAgZWRpdDogV2ViaG9va01lc3NhZ2VFZGl0b3JcbiAgICB9XG4gIH1cbiAgLyoqIFVzZXIgcmVsYXRlZCBoZWxwZXIgbWV0aG9kcy4gKi9cbiAgdXNlcnM6IHtcbiAgICAvKipcbiAgICAgKiBHZXRzIG9yIGNyZWF0ZXMgYSBETSBjaGFubmVsIHdpdGggYSB1c2VyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSBJRCBvZiB0aGUgdXNlciB0byBjcmVhdGUgdGhlIERNIGNoYW5uZWwgd2l0aC5cbiAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZENoYW5uZWx9LlxuICAgICAqXG4gICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3VzZXIjY3JlYXRlLWRtfVxuICAgICAqL1xuICAgIGNoYW5uZWw6ICh1c2VySWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQ2hhbm5lbD4+XG4gIH1cbiAgLyoqXG4gICAqIEFkZHMgYSByb2xlIHRvIGEgbWVtYmVyLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdGhlIG1lbWJlciB0byBhZGQgdGhlIHJvbGUgdG8gaXMgaW4uXG4gICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgdXNlciBJRCBvZiB0aGUgbWVtYmVyIHRvIGFkZCB0aGUgcm9sZSB0by5cbiAgICogQHBhcmFtIHJvbGVJZCAtIFRoZSBJRCBvZiB0aGUgcm9sZSB0byBhZGQgdG8gdGhlIG1lbWJlci5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIE1lbWJlciBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNhZGQtZ3VpbGQtbWVtYmVyLXJvbGV9XG4gICAqL1xuICBhZGRSb2xlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZywgcm9sZUlkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogQWRkcyBhIG1lbWJlciB0byBhIHRocmVhZC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgdGhyZWFkIHRvIGFkZCB0aGUgbWVtYmVyIHRvLlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIHVzZXIgSUQgb2YgdGhlIG1lbWJlciB0byBhZGQgdG8gdGhlIHRocmVhZC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGFiaWxpdHkgdG8gc2VuZCBtZXNzYWdlcyBpbiB0aGUgdGhyZWFkLlxuICAgKiBSZXF1aXJlcyB0aGUgdGhyZWFkIG5vdCBiZSBhcmNoaXZlZC5cbiAgICpcbiAgICogRmlyZXMgYSBfVGhyZWFkIE1lbWJlcnMgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNhZGQtdGhyZWFkLW1lbWJlcn1cbiAgICovXG4gIGFkZFRocmVhZE1lbWJlcjogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBhdXRvbW9kIHJ1bGUgaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGNyZWF0ZSB0aGUgcnVsZSBpbi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBydWxlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhbiBfQXV0byBNb2RlcmF0aW9uIFJ1bGUgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvYXV0by1tb2RlcmF0aW9uI2NyZWF0ZS1hdXRvLW1vZGVyYXRpb24tcnVsZX1cbiAgICovXG4gIGNyZWF0ZUF1dG9tb2RSdWxlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVBdXRvTW9kZXJhdGlvblJ1bGVPcHRpb25zKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+PlxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNoYW5uZWwgd2l0aGluIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBjcmVhdGUgdGhlIGNoYW5uZWwgd2l0aGluLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIGNoYW5uZWwuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkQ2hhbm5lbH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0NIQU5ORUxTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBJZiBzZXR0aW5nIHBlcm1pc3Npb24gb3ZlcndyaXRlcywgb25seSB0aGUgcGVybWlzc2lvbnMgdGhlIGJvdCB1c2VyIGhhcyBpbiB0aGUgZ3VpbGQgY2FuIGJlIGFsbG93ZWQgb3IgZGVuaWVkLlxuICAgKlxuICAgKiBTZXR0aW5nIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uIGlzIG9ubHkgcG9zc2libGUgZm9yIGd1aWxkIGFkbWluaXN0cmF0b3JzLlxuICAgKlxuICAgKiBGaXJlcyBhIF9DaGFubmVsIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2NyZWF0ZS1ndWlsZC1jaGFubmVsfVxuICAgKi9cbiAgY3JlYXRlQ2hhbm5lbDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlR3VpbGRDaGFubmVsKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRDaGFubmVsPj5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gZW1vamkgaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIGluIHdoaWNoIHRvIGNyZWF0ZSB0aGUgZW1vamkuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgZW1vamkuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkRW1vaml9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9FTU9KSVNfQU5EX1NUSUNLRVJTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBFbW9qaXMgaGF2ZSBhIG1heGltdW0gZmlsZSBzaXplIG9mIDI1NiBraWxvYml0cy4gQXR0ZW1wdGluZyB0byB1cGxvYWQgYSBsYXJnZXIgZW1vamkgd2lsbCBjYXVzZSB0aGUgcm91dGUgdG8gcmV0dXJuIDQwMCBCYWQgUmVxdWVzdC5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgRW1vamlzIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2Vtb2ppI2NyZWF0ZS1ndWlsZC1lbW9qaX1cbiAgICovXG4gIGNyZWF0ZUVtb2ppOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVHdWlsZEVtb2ppKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRFbW9qaT4+XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHRocmVhZCBpbiBhIGZvcnVtIGNoYW5uZWwsIGFuZCBzZW5kcyBhIG1lc3NhZ2Ugd2l0aGluIHRoZSBjcmVhdGVkIHRocmVhZC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgZm9ydW0gY2hhbm5lbCB0byBjcmVhdGUgdGhlIHRocmVhZCB3aXRoaW4uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgdGhyZWFkLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZENoYW5uZWx9IHdpdGggYSBuZXN0ZWQge0BsaW5rIE1lc3NhZ2V9IG9iamVjdC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBDUkVBVEVfTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX1RocmVhZCBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNzdGFydC10aHJlYWQtaW4tZm9ydW0tY2hhbm5lbH1cbiAgICpcbiAgICogQGV4cGVyaW1lbnRhbFxuICAgKi9cbiAgY3JlYXRlRm9ydW1UaHJlYWQ6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlRm9ydW1Qb3N0V2l0aE1lc3NhZ2UpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZENoYW5uZWw+PlxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBhcHBsaWNhdGlvbiBjb21tYW5kIGFjY2Vzc2libGUgZ2xvYmFsbHk7IGFjcm9zcyBkaWZmZXJlbnQgZ3VpbGRzIGFuZCBjaGFubmVscy5cbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZCB0byBjcmVhdGUuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBBcHBsaWNhdGlvbkNvbW1hbmR9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiDimqDvuI8gQ3JlYXRpbmcgYSBjb21tYW5kIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhbiBleGlzdGluZyBjb21tYW5kIGZvciB5b3VyIGFwcGxpY2F0aW9uIHdpbGwgb3ZlcndyaXRlIHRoZSBvbGQgY29tbWFuZC5cbiAgICog4pqg77iPIEdsb2JhbCBjb21tYW5kcyBvbmNlIGNyZWF0ZWQgYXJlIGNhY2hlZCBmb3IgcGVyaW9kcyBvZiBfX2FuIGhvdXJfXywgc28gY2hhbmdlcyBtYWRlIHRvIGV4aXN0aW5nIGNvbW1hbmRzIHdpbGwgdGFrZSBhbiBob3VyIHRvIHN1cmZhY2UuXG4gICAqIOKaoO+4jyBZb3UgY2FuIG9ubHkgY3JlYXRlIHVwIHRvIDIwMCBfbmV3XyBjb21tYW5kcyBkYWlseS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2NyZWF0ZS1nbG9iYWwtYXBwbGljYXRpb24tY29tbWFuZH1cbiAgICovXG4gIGNyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZDogKGNvbW1hbmQ6IENyZWF0ZUFwcGxpY2F0aW9uQ29tbWFuZCkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPj5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBndWlsZC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRHdWlsZH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIOKaoO+4jyBUaGlzIHJvdXRlIGNhbiBvbmx5IGJlIHVzZWQgYnkgYm90cyBpbiBfX2Zld2VyIHRoYW4gMTAgZ3VpbGRzX18uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2NyZWF0ZS1ndWlsZH1cbiAgICovXG4gIGNyZWF0ZUd1aWxkOiAob3B0aW9uczogQ3JlYXRlR3VpbGQpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEd1aWxkPj5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYXBwbGljYXRpb24gY29tbWFuZCBvbmx5IGFjY2Vzc2libGUgaW4gYSBzcGVjaWZpYyBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZCB0byBjcmVhdGUuXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBjcmVhdGUgdGhlIGNvbW1hbmQgZm9yLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgQXBwbGljYXRpb25Db21tYW5kfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICog4pqg77iPIENyZWF0aW5nIGEgY29tbWFuZCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3RpbmcgY29tbWFuZCBmb3IgeW91ciBhcHBsaWNhdGlvbiB3aWxsIG92ZXJ3cml0ZSB0aGUgb2xkIGNvbW1hbmQuXG4gICAqIOKaoO+4jyBZb3UgY2FuIG9ubHkgY3JlYXRlIHVwIHRvIDIwMCBfbmV3XyBjb21tYW5kcyBkYWlseS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2NyZWF0ZS1ndWlsZC1hcHBsaWNhdGlvbi1jb21tYW5kfVxuICAgKi9cbiAgY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQ6IChjb21tYW5kOiBDcmVhdGVBcHBsaWNhdGlvbkNvbW1hbmQsIGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPj5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0ZW1wbGF0ZSBmcm9tIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBjcmVhdGUgdGhlIHRlbXBsYXRlIGZyb20uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgdGVtcGxhdGUuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBUZW1wbGF0ZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC10ZW1wbGF0ZSNjcmVhdGUtZ3VpbGQtdGVtcGxhdGV9XG4gICAqL1xuICBjcmVhdGVHdWlsZFRlbXBsYXRlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVUZW1wbGF0ZSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGVtcGxhdGU+PlxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnZpdGUgdG8gYSBjaGFubmVsIGluIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gY3JlYXRlIHRoZSBpbnZpdGUgdG8uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgaW52aXRlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZEludml0ZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgQ1JFQVRFX0lOU1RBTlRfSU5WSVRFYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhbiBfSW52aXRlIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHByaXZhdGVSZW1hcmtzXG4gICAqIFRoZSByZXF1ZXN0IGJvZHkgaXMgbm90IG9wdGlvbmFsLCBhbmQgYW4gZW1wdHkgSlNPTiBvYmplY3QgbXVzdCBiZSBzZW50IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBhbnkgZmllbGRzIGFyZSBiZWluZyB0cmFuc21pdHRlZC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjY3JlYXRlLWNoYW5uZWwtaW52aXRlfVxuICAgKi9cbiAgY3JlYXRlSW52aXRlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBDcmVhdGVDaGFubmVsSW52aXRlKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRJbnZpdGU+PlxuICAvKipcbiAgICogQ3JlYXRlcyBhIHJvbGUgaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGNyZWF0ZSB0aGUgcm9sZSBpbi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSByb2xlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZFJvbGV9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9ST0xFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgUm9sZSBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNjcmVhdGUtZ3VpbGQtcm9sZX1cbiAgICovXG4gIGNyZWF0ZVJvbGU6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZUd1aWxkUm9sZSwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRSb2xlPj5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzY2hlZHVsZWQgZXZlbnQgaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGNyZWF0ZSB0aGUgc2NoZWR1bGVkIGV2ZW50IGluLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIHNjaGVkdWxlZCBldmVudC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIFNjaGVkdWxlZEV2ZW50fS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfRVZFTlRTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBBIGd1aWxkIGNhbiBvbmx5IGhhdmUgYSBtYXhpbXVtIG9mIDEwMCBldmVudHMgd2l0aCBhIHN0YXR1cyBvZiB7QGxpbmsgU2NoZWR1bGVkRXZlbnRTdGF0dXMuQWN0aXZlfSBvciB7QGxpbmsgU2NoZWR1bGVkRXZlbnRTdGF0dXMuU2NoZWR1bGVkfSAoaW5jbHVzaXZlKS5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgU2NoZWR1bGVkIEV2ZW50IENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkLXNjaGVkdWxlZC1ldmVudCNjcmVhdGUtZ3VpbGQtc2NoZWR1bGVkLWV2ZW50fVxuICAgKi9cbiAgY3JlYXRlU2NoZWR1bGVkRXZlbnQ6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZVNjaGVkdWxlZEV2ZW50KSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTY2hlZHVsZWRFdmVudD4+XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgc3RhZ2UgaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIGEgc3RhZ2UgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBzdGFnZSBpbnN0YW5jZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRTdGFnZUluc3RhbmNlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIHVzZXIgdG8gYmUgYSBtb2RlcmF0b3Igb2YgdGhlIHN0YWdlIGNoYW5uZWwuXG4gICAqXG4gICAqIEZpcmVzIGEgX1N0YWdlIEluc3RhbmNlIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3N0YWdlLWluc3RhbmNlI2NyZWF0ZS1zdGFnZS1pbnN0YW5jZX1cbiAgICovXG4gIGNyZWF0ZVN0YWdlSW5zdGFuY2U6IChvcHRpb25zOiBDcmVhdGVTdGFnZUluc3RhbmNlKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTdGFnZUluc3RhbmNlPj5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB3ZWJob29rLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGNyZWF0ZSB0aGUgd2ViaG9vayBpbi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSB3ZWJob29rLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZFdlYmhvb2t9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9XRUJIT09LU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICog4pqg77iPIFRoZSB3ZWJob29rIG5hbWUgbXVzdCBub3QgY29udGFpbiB0aGUgc3RyaW5nICdjbHlkZScgKGNhc2UtaW5zZW5zaXRpdmUpLlxuICAgKlxuICAgKiBGaXJlcyBhIF9XZWJob29rcyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy93ZWJob29rI2NyZWF0ZS13ZWJob29rfVxuICAgKi9cbiAgY3JlYXRlV2ViaG9vazogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVXZWJob29rKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRXZWJob29rPj5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYW4gYXV0b21vZCBydWxlLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZGVsZXRlIHRoZSBydWxlIGZyb20uXG4gICAqIEBwYXJhbSBydWxlSWQgLSBUaGUgSUQgb2YgdGhlIGF1dG9tb2QgcnVsZSB0byBkZWxldGUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhbiBfQXV0byBNb2RlcmF0aW9uIFJ1bGUgRGVsZXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvYXV0by1tb2RlcmF0aW9uI2RlbGV0ZS1hdXRvLW1vZGVyYXRpb24tcnVsZX1cbiAgICovXG4gIGRlbGV0ZUF1dG9tb2RSdWxlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBydWxlSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIGEgY2hhbm5lbCBmcm9tIHdpdGhpbiBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGRlbGV0ZWQge0BsaW5rIENoYW5uZWx9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBGb3IgY29tbXVuaXR5IGd1aWxkcywgdGhlIF9SdWxlc18sIF9HdWlkZWxpbmVzXyBhbmQgX0NvbW11bml0eSBVcGRhdGVfIGNoYW5uZWxzIGNhbm5vdCBiZSBkZWxldGVkLlxuICAgKlxuICAgKiBJZiB0aGUgY2hhbm5lbCBpcyBhIHRocmVhZDpcbiAgICogLSBSZXF1aXJlcyB0aGUgYE1BTkFHRV9USFJFQURTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiAtIEZpcmVzIGEgX1RocmVhZCBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIE90aGVyd2lzZTpcbiAgICogLSBSZXF1aXJlcyB0aGUgYE1BTkFHRV9DSEFOTkVMU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogLSDimqDvuI8gRGVsZXRpbmcgYSBjYXRlZ29yeSBjaGFubmVsIGRvZXMgbm90IGRlbGV0ZSBpdHMgY2hpbGQgY2hhbm5lbHMuXG4gICAqICAgSW5zdGVhZCwgdGhleSB3aWxsIGhhdmUgdGhlaXIgYHBhcmVudF9pZGAgcHJvcGVydHkgcmVtb3ZlZCwgYW5kIGEgYENoYW5uZWwgVXBkYXRlYCBnYXRld2F5IGV2ZW50IHdpbGwgZmlyZSBmb3IgZWFjaCBvZiB0aGVtLlxuICAgKlxuICAgKiAtIEZpcmVzIGEgX0NoYW5uZWwgRGVsZXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNkZWxldGVjbG9zZS1jaGFubmVsfVxuICAgKi9cbiAgZGVsZXRlQ2hhbm5lbDogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSBwZXJtaXNzaW9uIG92ZXJyaWRlIGZvciBhIHVzZXIgb3Igcm9sZSBpbiBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZGVsZXRlIHRoZSBwZXJtaXNzaW9uIG92ZXJyaWRlIG9mLlxuICAgKiBAcGFyYW0gb3ZlcndyaXRlSWQgLSBUaGUgSUQgb2YgdGhlIHBlcm1pc3Npb24gb3ZlcnJpZGUgdG8gZGVsZXRlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9ST0xFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfQ2hhbm5lbCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2RlbGV0ZS1jaGFubmVsLXBlcm1pc3Npb259XG4gICAqL1xuICBkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG92ZXJ3cml0ZUlkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhbiBlbW9qaSBmcm9tIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCBmcm9tIHdoaWNoIHRvIGRlbGV0ZSB0aGUgZW1vamkuXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBJRCBvZiB0aGUgZW1vamkgdG8gZGVsZXRlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9FTU9KSVNfQU5EX1NUSUNLRVJTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBFbW9qaXMgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZW1vamkjZGVsZXRlLWd1aWxkLWVtb2ppfVxuICAgKi9cbiAgZGVsZXRlRW1vamk6IChndWlsZElkOiBCaWdTdHJpbmcsIGlkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhIGZvbGxvdy11cCBtZXNzYWdlIHRvIGFuIGludGVyYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgaW50ZXJhY3Rpb24gdG9rZW4gdG8gdXNlLCBwcm92aWRlZCBpbiB0aGUgb3JpZ2luYWwgaW50ZXJhY3Rpb24uXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gZGVsZXRlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBVbmxpa2UgYGRlbGV0ZU1lc3NhZ2UoKWAsIHRoaXMgZW5kcG9pbnQgYWxsb3dzIHRoZSBib3QgdXNlciB0byBhY3Qgd2l0aG91dCBuZWVkaW5nIHRvIHNlZSB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSBpcyBpbi5cbiAgICpcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBEZWxldGVfIGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvcmVjZWl2aW5nLWFuZC1yZXNwb25kaW5nI2RlbGV0ZS1mb2xsb3d1cC1tZXNzYWdlfVxuICAgKi9cbiAgZGVsZXRlRm9sbG93dXBNZXNzYWdlOiAodG9rZW46IHN0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYW4gYXBwbGljYXRpb24gY29tbWFuZCByZWdpc3RlcmVkIGdsb2JhbGx5LlxuICAgKlxuICAgKiBAcGFyYW0gY29tbWFuZElkIC0gVGhlIElEIG9mIHRoZSBjb21tYW5kIHRvIGRlbGV0ZS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2RlbGV0ZS1nbG9iYWwtYXBwbGljYXRpb24tY29tbWFuZH1cbiAgICovXG4gIGRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZDogKGNvbW1hbmRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBkZWxldGUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBib3QgdXNlciBtdXN0IGJlIHRoZSBvd25lciBvZiB0aGUgZ3VpbGQuXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2RlbGV0ZS1ndWlsZH1cbiAgICovXG4gIGRlbGV0ZUd1aWxkOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIGFuIGFwcGxpY2F0aW9uIGNvbW1hbmQgcmVnaXN0ZXJlZCBpbiBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZGVsZXRlIHRoZSBjb21tYW5kIGZyb20uXG4gICAqIEBwYXJhbSBjb21tYW5kSWQgLSBUaGUgSUQgb2YgdGhlIGNvbW1hbmQgdG8gZGVsZXRlIGZyb20gdGhlIGd1aWxkLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZGVsZXRlLWd1aWxkLWFwcGxpY2F0aW9uLWNvbW1hbmR9XG4gICAqL1xuICBkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZDogKGNvbW1hbmRJZDogQmlnU3RyaW5nLCBndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSB0ZW1wbGF0ZSBmcm9tIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBkZWxldGUgdGhlIHRlbXBsYXRlIGZyb20uXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZUNvZGUgLSBUaGUgY29kZSBvZiB0aGUgdGVtcGxhdGUgdG8gZGVsZXRlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQtdGVtcGxhdGUjZGVsZXRlLWd1aWxkLXRlbXBsYXRlfVxuICAgKi9cbiAgZGVsZXRlR3VpbGRUZW1wbGF0ZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdGVtcGxhdGVDb2RlOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYW4gaW50ZWdyYXRpb24gYXR0YWNoZWQgdG8gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIGZyb20gd2hpY2ggdG8gZGVsZXRlIHRoZSBpbnRlZ3JhdGlvbi5cbiAgICogQHBhcmFtIGludGVncmF0aW9uSWQgLSBUaGUgSUQgb2YgdGhlIGludGVncmF0aW9uIHRvIGRlbGV0ZSBmcm9tIHRoZSBndWlsZC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIERlbGV0ZXMgYWxsIHdlYmhvb2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW50ZWdyYXRpb24sIGFuZCBraWNrcyB0aGUgYXNzb2NpYXRlZCBib3QgaWYgdGhlcmUgaXMgb25lLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBJbnRlZ3JhdGlvbnMgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKiBGaXJlcyBhIF9JbnRlZ3JhdGlvbiBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNkZWxldGUtZ3VpbGQtaW50ZWdyYXRpb259XG4gICAqL1xuICBkZWxldGVJbnRlZ3JhdGlvbjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgaW50ZWdyYXRpb25JZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIGFuIGludml0ZSB0byBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBpbnZpdGVDb2RlIC0gVGhlIGludml0ZSBjb2RlIG9mIHRoZSBpbnZpdGUgdG8gZGVsZXRlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9DSEFOTkVMU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYW4gX0ludml0ZSBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2RlbGV0ZS1jaGFubmVsLWludml0ZX1cbiAgICovXG4gIGRlbGV0ZUludml0ZTogKGludml0ZUNvZGU6IHN0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIGEgbWVzc2FnZSBmcm9tIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBkZWxldGUgdGhlIG1lc3NhZ2UgZnJvbS5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBkZWxldGUgZnJvbSB0aGUgY2hhbm5lbC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSWYgbm90IGRlbGV0aW5nIG93biBtZXNzYWdlOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgTUFOQUdFX01FU1NBR0VTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZGVsZXRlLW1lc3NhZ2V9XG4gICAqL1xuICBkZWxldGVNZXNzYWdlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGluaXRpYWwgbWVzc2FnZSByZXNwb25zZSB0byBhbiBpbnRlcmFjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIGludGVyYWN0aW9uIHRva2VuIHRvIHVzZSwgcHJvdmlkZWQgaW4gdGhlIG9yaWdpbmFsIGludGVyYWN0aW9uLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBVbmxpa2UgYGRlbGV0ZU1lc3NhZ2UoKWAsIHRoaXMgZW5kcG9pbnQgYWxsb3dzIHRoZSBib3QgdXNlciB0byBhY3Qgd2l0aG91dCBuZWVkaW5nIHRvIHNlZSB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSBpcyBpbi5cbiAgICpcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBEZWxldGVfIGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvcmVjZWl2aW5nLWFuZC1yZXNwb25kaW5nI2RlbGV0ZS1vcmlnaW5hbC1pbnRlcmFjdGlvbi1yZXNwb25zZX1cbiAgICovXG4gIGRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZTogKHRva2VuOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSByb2xlIGZyb20gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGRlbGV0ZSB0aGUgcm9sZSBmcm9tLlxuICAgKiBAcGFyYW0gcm9sZUlkIC0gVGhlIElEIG9mIHRoZSByb2xlIHRvIGRlbGV0ZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIFJvbGUgRGVsZXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjZGVsZXRlLWd1aWxkLXJvbGV9XG4gICAqL1xuICBkZWxldGVSb2xlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCByb2xlSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhIHNjaGVkdWxlZCBldmVudCBmcm9tIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBkZWxldGUgdGhlIHNjaGVkdWxlZCBldmVudCBmcm9tLlxuICAgKiBAcGFyYW0gZXZlbnRJZCAtIFRoZSBJRCBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50IHRvIGRlbGV0ZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfRVZFTlRTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBTY2hlZHVsZWQgRXZlbnQgRGVsZXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQtc2NoZWR1bGVkLWV2ZW50I2RlbGV0ZS1ndWlsZC1zY2hlZHVsZWQtZXZlbnR9XG4gICAqL1xuICBkZWxldGVTY2hlZHVsZWRFdmVudDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgZXZlbnRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBzdGFnZSBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggYSBzdGFnZSBjaGFubmVsLCBpZiBvbmUgZXhpc3RzLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBzdGFnZSBjaGFubmVsIHRoZSBzdGFnZSBpbnN0YW5jZSBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSB1c2VyIHRvIGJlIGEgbW9kZXJhdG9yIG9mIHRoZSBzdGFnZSBjaGFubmVsLlxuICAgKlxuICAgKiBGaXJlcyBhIF9TdGFnZSBJbnN0YW5jZSBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9zdGFnZS1pbnN0YW5jZSNkZWxldGUtc3RhZ2UtaW5zdGFuY2V9XG4gICAqL1xuICBkZWxldGVTdGFnZUluc3RhbmNlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhIHdlYmhvb2suXG4gICAqXG4gICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZGVsZXRlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9XRUJIT09LU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfV2ViaG9va3MgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNkZWxldGUtd2ViaG9va31cbiAgICovXG4gIGRlbGV0ZVdlYmhvb2s6ICh3ZWJob29rSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIGEgd2ViaG9vayBtZXNzYWdlLlxuICAgKlxuICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGRlbGV0ZSB0aGUgbWVzc2FnZSBiZWxvbmdpbmcgdG8uXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSB3ZWJob29rIHRva2VuLCB1c2VkIHRvIG1hbmFnZSB0aGUgd2ViaG9vay5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBkZWxldGUuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBkZWxldGlvbiBvZiB0aGUgbWVzc2FnZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy93ZWJob29rI2RlbGV0ZS13ZWJob29rfVxuICAgKi9cbiAgZGVsZXRlV2ViaG9va01lc3NhZ2U6ICh3ZWJob29rSWQ6IEJpZ1N0cmluZywgdG9rZW46IHN0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBEZWxldGVXZWJob29rTWVzc2FnZU9wdGlvbnMpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSB3ZWJob29rIG1lc3NhZ2UgdXNpbmcgdGhlIHdlYmhvb2sgdG9rZW4sIHRoZXJlYnkgYnlwYXNzaW5nIHRoZSBuZWVkIGZvciBhdXRoZW50aWNhdGlvbiArIHBlcm1pc3Npb25zLlxuICAgKlxuICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGRlbGV0ZSB0aGUgbWVzc2FnZSBiZWxvbmdpbmcgdG8uXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSB3ZWJob29rIHRva2VuLCB1c2VkIHRvIGRlbGV0ZSB0aGUgd2ViaG9vay5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy93ZWJob29rI2RlbGV0ZS13ZWJob29rLXdpdGgtdG9rZW59XG4gICAqL1xuICBkZWxldGVXZWJob29rV2l0aFRva2VuOiAod2ViaG9va0lkOiBCaWdTdHJpbmcsIHRva2VuOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIEVkaXRzIHRoZSBwZXJtaXNzaW9ucyBmb3IgYSBndWlsZCBhcHBsaWNhdGlvbiBjb21tYW5kLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdGhlIGNvbW1hbmQgaXMgcmVnaXN0ZXJlZCBpbi5cbiAgICogQHBhcmFtIGNvbW1hbmRJZCAtIFRoZSBJRCBvZiB0aGUgY29tbWFuZCB0byBlZGl0IHRoZSBwZXJtaXNzaW9ucyBvZi5cbiAgICogQHBhcmFtIGJlYXJlclRva2VuIC0gVGhlIGJlYXJlciB0b2tlbiB0byB1c2UgdG8gbWFrZSB0aGUgcmVxdWVzdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIGNvbW1hbmQgcGVybWlzc2lvbnMuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb259LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgYmVhcmVyIHRva2VuIHJlcXVpcmVzIHRoZSBgYXBwbGljYXRpb25zLmNvbW1hbmRzLnBlcm1pc3Npb25zLnVwZGF0ZWAgc2NvcGUgdG8gYmUgZW5hYmxlZCwgYW5kIHRvIGhhdmUgYWNjZXNzIHRvIHRoZSBndWlsZCB3aG9zZSBJRCBoYXMgYmVlbiBwcm92aWRlZCBpbiB0aGUgcGFyYW1ldGVycy5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2VkaXQtYXBwbGljYXRpb24tY29tbWFuZC1wZXJtaXNzaW9uc31cbiAgICovXG4gIGVkaXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uczogKFxuICAgIGd1aWxkSWQ6IEJpZ1N0cmluZyxcbiAgICBjb21tYW5kSWQ6IEJpZ1N0cmluZyxcbiAgICBiZWFyZXJUb2tlbjogc3RyaW5nLFxuICAgIG9wdGlvbnM6IEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zW10sXG4gICkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+PlxuICAvKipcbiAgICogRWRpdHMgYW4gYXV0b21vZCBydWxlLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZWRpdCB0aGUgcnVsZSBpbi5cbiAgICogQHBhcmFtIHJ1bGVJZCAtIFRoZSBJRCBvZiB0aGUgcnVsZSB0byBlZGl0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgcnVsZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhbiBfQXV0byBNb2RlcmF0aW9uIFJ1bGUgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvYXV0by1tb2RlcmF0aW9uI21vZGlmeS1hdXRvLW1vZGVyYXRpb24tcnVsZX1cbiAgICovXG4gIGVkaXRBdXRvbW9kUnVsZTogKFxuICAgIGd1aWxkSWQ6IEJpZ1N0cmluZyxcbiAgICBydWxlSWQ6IEJpZ1N0cmluZyxcbiAgICBvcHRpb25zOiBQYXJ0aWFsPEVkaXRBdXRvTW9kZXJhdGlvblJ1bGVPcHRpb25zPixcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+PlxuICAvKipcbiAgICogTW9kaWZpZXMgdGhlIGJvdCdzIHVzZXJuYW1lIG9yIGF2YXRhci5cbiAgICogTk9URTogdXNlcm5hbWU6IGlmIGNoYW5nZWQgbWF5IGNhdXNlIHRoZSBib3QncyBkaXNjcmltaW5hdG9yIHRvIGJlIHJhbmRvbWl6ZWQuXG4gICAqL1xuICBlZGl0Qm90UHJvZmlsZTogKG9wdGlvbnM6IHsgdXNlcm5hbWU/OiBzdHJpbmc7IGJvdEF2YXRhclVSTD86IHN0cmluZyB8IG51bGwgfSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVXNlcj4+XG4gIC8qKlxuICAgKiBFZGl0cyBhIGNoYW5uZWwncyBzZXR0aW5ncy5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBlZGl0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgY2hhbm5lbC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZENoYW5uZWx9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiBlZGl0aW5nIGEgY2hhbm5lbCBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXMuR3JvdXBEbX06XG4gICAqIC0gRmlyZXMgYSBfQ2hhbm5lbCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIElmIGVkaXRpbmcgYSB0aHJlYWQgY2hhbm5lbDpcbiAgICogLSBSZXF1aXJlcyB0aGUgYE1BTkFHRV9USFJFQURTYCBwZXJtaXNzaW9uIF9fdW5sZXNzX18gaWYgc2V0dGluZyB0aGUgYGFyY2hpdmVkYCBwcm9wZXJ0eSB0byBgZmFsc2VgIHdoZW4gdGhlIGBsb2NrZWRgIHByb3BlcnR5IGlzIGFsc28gYGZhbHNlYCwgaW4gd2hpY2ggY2FzZSBvbmx5IHRoZSBgU0VORF9NRVNTQUdFU2AgcGVybWlzc2lvbiBpcyByZXF1aXJlZC5cbiAgICpcbiAgICogLSBGaXJlcyBhIF9UaHJlYWQgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBJZiBlZGl0aW5nIGEgZ3VpbGQgY2hhbm5lbDpcbiAgICogLSBSZXF1aXJlcyB0aGUgYE1BTkFHRV9DSEFOTkVMU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogLSBJZiBtb2RpZnlpbmcgcGVybWlzc2lvbiBvdmVycmlkZXM6XG4gICAqICAgLSBSZXF1aXJlcyB0aGUgYE1BTkFHRV9ST0xFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogICAtIE9ubHkgcGVybWlzc2lvbnMgdGhlIGJvdCB1c2VyIGhhcyBpbiB0aGUgZ3VpbGQgb3IgcGFyZW50IGNoYW5uZWwgY2FuIGJlIGFsbG93ZWQvZGVuaWVkIF9fdW5sZXNzX18gdGhlIGJvdCB1c2VyIGhhcyBhIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24gb3ZlcnJpZGUgaW4gdGhlIGNoYW5uZWwuXG4gICAqXG4gICAqIC0gSWYgbW9kaWZ5aW5nIGEgY2hhbm5lbCBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXMuR3VpbGRDYXRlZ29yeX06XG4gICAqICAgICAtIEZpcmVzIGEgX0NoYW5uZWwgVXBkYXRlXyBnYXRld2F5IGV2ZW50IGZvciBlYWNoIGNoaWxkIGNoYW5uZWwgaW1wYWN0ZWQgaW4gdGhpcyBjaGFuZ2UuXG4gICAqIC0gT3RoZXJ3aXNlOlxuICAgKiAgICAgLSBGaXJlcyBhIF9DaGFubmVsIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICovXG4gIGVkaXRDaGFubmVsOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IE1vZGlmeUNoYW5uZWwpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZENoYW5uZWw+PlxuICAvKipcbiAgICogRWRpdHMgdGhlIHBlcm1pc3Npb24gb3ZlcnJpZGVzIGZvciBhIHVzZXIgb3Igcm9sZSBpbiBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZWRpdCB0aGUgcGVybWlzc2lvbiBvdmVycmlkZXMgb2YuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBlcm1pc3Npb24gb3ZlcnJpZGUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBPbmx5IHBlcm1pc3Npb25zIHRoZSBib3QgdXNlciBoYXMgaW4gdGhlIGd1aWxkIG9yIHBhcmVudCBjaGFubmVsIGNhbiBiZSBhbGxvd2VkL2RlbmllZCBfX3VubGVzc19fIHRoZSBib3QgdXNlciBoYXMgYSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uIG92ZXJyaWRlIGluIHRoZSBjaGFubmVsLlxuICAgKlxuICAgKiBGaXJlcyBhIF9DaGFubmVsIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZWRpdC1jaGFubmVsLXBlcm1pc3Npb25zfVxuICAgKi9cbiAgZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEVkaXRDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlc09wdGlvbnMpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIEVkaXRzIHRoZSBwb3NpdGlvbnMgb2YgYSBzZXQgb2YgY2hhbm5lbHMgaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIGluIHdoaWNoIHRvIGVkaXQgdGhlIHBvc2l0aW9ucyBvZiB0aGUgY2hhbm5lbHMuXG4gICAqIEBwYXJhbSBjaGFubmVsUG9zaXRpb25zIC0gQSBzZXQgb2Ygb2JqZWN0cyBkZWZpbmluZyB0aGUgdXBkYXRlZCBwb3NpdGlvbnMgb2YgdGhlIGNoYW5uZWxzLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9DSEFOTkVMU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfQ2hhbm5lbCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQgZm9yIGV2ZXJ5IGNoYW5uZWwgaW1wYWN0ZWQgaW4gdGhpcyBjaGFuZ2UuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNtb2RpZnktZ3VpbGQtY2hhbm5lbC1wb3NpdGlvbnN9XG4gICAqL1xuICBlZGl0Q2hhbm5lbFBvc2l0aW9uczogKGd1aWxkSWQ6IEJpZ1N0cmluZywgY2hhbm5lbFBvc2l0aW9uczogTW9kaWZ5R3VpbGRDaGFubmVsUG9zaXRpb25zW10pID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIEVkaXRzIGFuIGVtb2ppLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgaW4gd2hpY2ggdG8gZWRpdCB0aGUgZW1vamkuXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBJRCBvZiB0aGUgZW1vamkgdG8gZWRpdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIGVtb2ppLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgdXBkYXRlZCB7QGxpbmsgRGlzY29yZEVtb2ppfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfRU1PSklTX0FORF9TVElDS0VSU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBgR3VpbGQgRW1vamlzIFVwZGF0ZWAgZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2Vtb2ppI21vZGlmeS1ndWlsZC1lbW9qaX1cbiAgICovXG4gIGVkaXRFbW9qaTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgaWQ6IEJpZ1N0cmluZywgb3B0aW9uczogTW9kaWZ5R3VpbGRFbW9qaSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkRW1vamk+PlxuICAvKipcbiAgICogRWRpdHMgYSBmb2xsb3ctdXAgbWVzc2FnZSB0byBhbiBpbnRlcmFjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIGludGVyYWN0aW9uIHRva2VuIHRvIHVzZSwgcHJvdmlkZWQgaW4gdGhlIG9yaWdpbmFsIGludGVyYWN0aW9uLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBtZXNzYWdlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBNZXNzYWdlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVW5saWtlIGBlZGl0TWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0IG5lZWRpbmcgdG8gc2VlIHRoZSBjaGFubmVsIHRoZSBtZXNzYWdlIGlzIGluLlxuICAgKlxuICAgKiBEb2VzIG5vdCBzdXBwb3J0IGVwaGVtZXJhbCBmb2xsb3ctdXAgbWVzc2FnZXMgZHVlIHRvIHRoZXNlIGJlaW5nIHN0YXRlbGVzcy5cbiAgICpcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBVcGRhdGVfIGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvcmVjZWl2aW5nLWFuZC1yZXNwb25kaW5nI2VkaXQtZm9sbG93dXAtbWVzc2FnZX1cbiAgICovXG4gIGVkaXRGb2xsb3d1cE1lc3NhZ2U6ICh0b2tlbjogc3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogSW50ZXJhY3Rpb25DYWxsYmFja0RhdGEpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PlxuICAvKipcbiAgICogRWRpdHMgYSBnbG9iYWwgYXBwbGljYXRpb24gY29tbWFuZC5cbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmRJZCAtIFRoZSBJRCBvZiB0aGUgY29tbWFuZCB0byBlZGl0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgY29tbWFuZC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgQXBwbGljYXRpb25Db21tYW5kfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2VkaXQtZ2xvYmFsLWFwcGxpY2F0aW9uLWNvbW1hbmR9XG4gICAqL1xuICBlZGl0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kOiAoY29tbWFuZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZUFwcGxpY2F0aW9uQ29tbWFuZCkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPj5cbiAgLyoqXG4gICAqIEVkaXRzIGFuIGFwcGxpY2F0aW9uIGNvbW1hbmQgcmVnaXN0ZXJlZCBpbiBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdGhlIGNvbW1hbmQgaXMgcmVnaXN0ZXJlZCBpbi5cbiAgICogQHBhcmFtIGNvbW1hbmRJZCAtIFRoZSBJRCBvZiB0aGUgY29tbWFuZCB0byBlZGl0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgY29tbWFuZC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgQXBwbGljYXRpb25Db21tYW5kfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2VkaXQtZ3VpbGQtYXBwbGljYXRpb24tY29tbWFuZH1cbiAgICovXG4gIGVkaXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZDogKFxuICAgIGNvbW1hbmRJZDogQmlnU3RyaW5nLFxuICAgIGd1aWxkSWQ6IEJpZ1N0cmluZyxcbiAgICBvcHRpb25zOiBDcmVhdGVBcHBsaWNhdGlvbkNvbW1hbmQsXG4gICkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPj5cbiAgLyoqXG4gICAqIEVkaXRzIGEgdGVtcGxhdGUncyBzZXR0aW5ncy5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQgYSB0ZW1wbGF0ZSBvZi5cbiAgICogQHBhcmFtIHRlbXBsYXRlQ29kZSAtIFRoZSBjb2RlIG9mIHRoZSB0ZW1wbGF0ZSB0byBlZGl0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgdGVtcGxhdGUuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIFRlbXBsYXRlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkLXRlbXBsYXRlI21vZGlmeS1ndWlsZC10ZW1wbGF0ZX1cbiAgICovXG4gIGVkaXRHdWlsZFRlbXBsYXRlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB0ZW1wbGF0ZUNvZGU6IHN0cmluZywgb3B0aW9uczogTW9kaWZ5R3VpbGRUZW1wbGF0ZSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGVtcGxhdGU+PlxuICAvKipcbiAgICogRWRpdHMgYSBtZXNzYWdlLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGVkaXQgdGhlIG1lc3NhZ2UgaW4uXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSURzIG9mIHRoZSBtZXNzYWdlIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBtZXNzYWdlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBNZXNzYWdlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSWYgZWRpdGluZyBhbm90aGVyIHVzZXIncyBtZXNzYWdlOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgTUFOQUdFX01FU1NBR0VTYCBwZXJtaXNzaW9uLlxuICAgKiAtIE9ubHkgdGhlIHtAbGluayBFZGl0TWVzc2FnZS5mbGFncyB8IGZsYWdzfSBwcm9wZXJ0eSBvZiB0aGUge0BsaW5rIG9wdGlvbnN9IG9iamVjdCBwYXJhbWV0ZXIgY2FuIGJlIGVkaXRlZC5cbiAgICpcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2VkaXQtbWVzc2FnZX1cbiAgICovXG4gIGVkaXRNZXNzYWdlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBFZGl0TWVzc2FnZSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+XG4gIC8qKlxuICAgKiBFZGl0cyB0aGUgaW5pdGlhbCBtZXNzYWdlIHJlc3BvbnNlIHRvIGFuIGludGVyYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgaW50ZXJhY3Rpb24gdG9rZW4gdG8gdXNlLCBwcm92aWRlZCBpbiB0aGUgb3JpZ2luYWwgaW50ZXJhY3Rpb24uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSByZXNwb25zZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFVubGlrZSBgZWRpdE1lc3NhZ2UoKWAsIHRoaXMgZW5kcG9pbnQgYWxsb3dzIHRoZSBib3QgdXNlciB0byBhY3Qgd2l0aG91dCBuZWVkaW5nIHRvIHNlZSB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSBpcyBpbi5cbiAgICpcbiAgICogRG9lcyBub3Qgc3VwcG9ydCBlcGhlbWVyYWwgZm9sbG93LXVwIG1lc3NhZ2VzIGR1ZSB0byB0aGVzZSBiZWluZyBzdGF0ZWxlc3MuXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgVXBkYXRlXyBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL3JlY2VpdmluZy1hbmQtcmVzcG9uZGluZyNlZGl0LW9yaWdpbmFsLWludGVyYWN0aW9uLXJlc3BvbnNlfVxuICAgKi9cbiAgZWRpdE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZTogKHRva2VuOiBzdHJpbmcsIG9wdGlvbnM6IEludGVyYWN0aW9uQ2FsbGJhY2tEYXRhKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPiB8IHVuZGVmaW5lZD5cbiAgLyoqXG4gICAqIEVkaXRzIHRoZSBvcmlnaW5hbCB3ZWJob29rIG1lc3NhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZWRpdCB0aGUgb3JpZ2luYWwgbWVzc2FnZSBvZi5cbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIHdlYmhvb2sgdG9rZW4sIHVzZWQgdG8gZWRpdCB0aGUgbWVzc2FnZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIG1lc3NhZ2UuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRNZXNzYWdlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy93ZWJob29rI2VkaXQtd2ViaG9vay1tZXNzYWdlfVxuICAgKi9cbiAgZWRpdE9yaWdpbmFsV2ViaG9va01lc3NhZ2U6IChcbiAgICB3ZWJob29rSWQ6IEJpZ1N0cmluZyxcbiAgICB0b2tlbjogc3RyaW5nLFxuICAgIG9wdGlvbnM6IEludGVyYWN0aW9uQ2FsbGJhY2tEYXRhICYgeyB0aHJlYWRJZD86IEJpZ1N0cmluZyB9LFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PlxuICAvKipcbiAgICogRWRpdHMgYSByb2xlIGluIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBlZGl0IHRoZSByb2xlIGluLlxuICAgKiBAcGFyYW0gcm9sZUlkIC0gVGhlIElEIG9mIHRoZSByb2xlIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSByb2xlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkUm9sZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBSb2xlIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI21vZGlmeS1ndWlsZC1yb2xlfVxuICAgKi9cbiAgZWRpdFJvbGU6IChndWlsZElkOiBCaWdTdHJpbmcsIHJvbGVJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBFZGl0R3VpbGRSb2xlKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRSb2xlPj5cbiAgLyoqXG4gICAqIEVkaXRzIHRoZSBwb3NpdGlvbnMgb2YgYSBzZXQgb2Ygcm9sZXMuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBlZGl0IHRoZSByb2xlIHBvc2l0aW9ucyBpbi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIHJvbGUgcG9zaXRpb25zLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRSb2xlfSBvYmplY3RzIGFzc29ydGVkIGJ5IHJvbGUgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBSb2xlIFVwZGF0ZV8gZ2F0ZXdheSBldmVudCBmb3IgZXZlcnkgcm9sZSBpbXBhY3RlZCBpbiB0aGlzIGNoYW5nZS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI21vZGlmeS1ndWlsZC1yb2xlLXBvc2l0aW9uc31cbiAgICovXG4gIGVkaXRSb2xlUG9zaXRpb25zOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBNb2RpZnlSb2xlUG9zaXRpb25zW10pID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFJvbGVbXT4+XG4gIC8qKlxuICAgKiBFZGl0cyBhIHNjaGVkdWxlZCBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQgdGhlIHNjaGVkdWxlZCBldmVudCBpbi5cbiAgICogQHBhcmFtIGV2ZW50SWQgLSBUaGUgSUQgb2YgdGhlIHNjaGVkdWxlZCBldmVudCB0byBlZGl0LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBTY2hlZHVsZWRFdmVudH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0VWRU5UU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogVG8gc3RhcnQgb3IgZW5kIGFuIGV2ZW50LCBtb2RpZnkgdGhlIGV2ZW50J3MgYHN0YXR1c2AgcHJvcGVydHkuXG4gICAqXG4gICAqIFRoZSBgZW50aXR5X21ldGFkYXRhYCBwcm9wZXJ0eSBpcyBkaXNjYXJkZWQgZm9yIGV2ZW50cyB3aG9zZSBgZW50aXR5X3R5cGVgIGlzIG5vdCB7QGxpbmsgU2NoZWR1bGVkRXZlbnRFbnRpdHlUeXBlLkV4dGVybmFsfS5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgU2NoZWR1bGVkIEV2ZW50IFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkLXNjaGVkdWxlZC1ldmVudCNtb2RpZnktZ3VpbGQtc2NoZWR1bGVkLWV2ZW50fVxuICAgKi9cbiAgZWRpdFNjaGVkdWxlZEV2ZW50OiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBldmVudElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IFBhcnRpYWw8RWRpdFNjaGVkdWxlZEV2ZW50PikgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+PlxuICAvKipcbiAgICogRWRpdHMgYSBzdGFnZSBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgc3RhZ2UgY2hhbm5lbCB0aGUgc3RhZ2UgaW5zdGFuY2UgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgdXBkYXRlZCB7QGxpbmsgRGlzY29yZFN0YWdlSW5zdGFuY2V9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgdXNlciB0byBiZSBhIG1vZGVyYXRvciBvZiB0aGUgc3RhZ2UgY2hhbm5lbC5cbiAgICpcbiAgICogRmlyZXMgYSBfU3RhZ2UgSW5zdGFuY2UgVXBkYXRlXyBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3N0YWdlLWluc3RhbmNlI21vZGlmeS1zdGFnZS1pbnN0YW5jZX1cbiAgICovXG4gIGVkaXRTdGFnZUluc3RhbmNlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIGRhdGE6IEVkaXRTdGFnZUluc3RhbmNlT3B0aW9ucykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4+XG4gIC8qKlxuICAgKiBFZGl0cyBhIHdlYmhvb2suXG4gICAqXG4gICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZWRpdC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZFdlYmhvb2t9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9XRUJIT09LU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfV2ViaG9va3MgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNlZGl0LXdlYmhvb2t9XG4gICAqL1xuICBlZGl0V2ViaG9vazogKHdlYmhvb2tJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBNb2RpZnlXZWJob29rKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRXZWJob29rPj5cbiAgLyoqXG4gICAqIEVkaXRzIGEgd2ViaG9vayBtZXNzYWdlLlxuICAgKlxuICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGVkaXQgdGhlIG1lc3NhZ2Ugb2YuXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSB3ZWJob29rIHRva2VuLCB1c2VkIHRvIGVkaXQgdGhlIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gZWRpdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIG1lc3NhZ2UuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRNZXNzYWdlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy93ZWJob29rI2VkaXQtd2ViaG9vay1tZXNzYWdlfVxuICAgKi9cbiAgZWRpdFdlYmhvb2tNZXNzYWdlOiAoXG4gICAgd2ViaG9va0lkOiBCaWdTdHJpbmcsXG4gICAgdG9rZW46IHN0cmluZyxcbiAgICBtZXNzYWdlSWQ6IEJpZ1N0cmluZyxcbiAgICBvcHRpb25zOiBJbnRlcmFjdGlvbkNhbGxiYWNrRGF0YSAmIHsgdGhyZWFkSWQ/OiBCaWdTdHJpbmcgfSxcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj5cbiAgLyoqXG4gICAqIEVkaXRzIGEgd2ViaG9vayB1c2luZyB0aGUgd2ViaG9vayB0b2tlbiwgdGhlcmVieSBieXBhc3NpbmcgdGhlIG5lZWQgZm9yIGF1dGhlbnRpY2F0aW9uICsgcGVybWlzc2lvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZWRpdC5cbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIHdlYmhvb2sgdG9rZW4sIHVzZWQgdG8gZWRpdCB0aGUgd2ViaG9vay5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZFdlYmhvb2t9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9XRUJIT09LU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfV2ViaG9va3MgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNtb2RpZnktd2ViaG9vay13aXRoLXRva2VufVxuICAgKi9cbiAgZWRpdFdlYmhvb2tXaXRoVG9rZW46ICh3ZWJob29rSWQ6IEJpZ1N0cmluZywgdG9rZW46IHN0cmluZywgb3B0aW9uczogT21pdDxNb2RpZnlXZWJob29rLCAnY2hhbm5lbElkJz4pID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFdlYmhvb2s+PlxuICAvKipcbiAgICogRXhlY3V0ZXMgYSB3ZWJob29rLCBjYXVzaW5nIGEgbWVzc2FnZSB0byBiZSBwb3N0ZWQgaW4gdGhlIGNoYW5uZWwgY29uZmlndXJlZCBmb3IgdGhlIHdlYmhvb2suXG4gICAqXG4gICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZXhlY3V0ZS5cbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIHdlYmhvb2sgdG9rZW4sIHVzZWQgdG8gZXhlY3V0ZSB0aGUgd2ViaG9vay5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgd2ViaG9vay5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRNZXNzYWdlfSwgb3IgYHVuZGVmaW5lZGAgaWYgdGhlIHtAbGluayBFeGVjdXRlV2ViaG9vay53YWl0IHwgd2FpdH0gcHJvcGVydHkgb2YgdGhlIHtAbGluayBvcHRpb25zfSBvYmplY3QgcGFyYW1ldGVyIGlzIHNldCB0byBgZmFsc2VgLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiB0aGUgd2ViaG9vayBjaGFubmVsIGlzIGEgZm9ydW0gY2hhbm5lbCwgeW91IG11c3QgcHJvdmlkZSBhIHZhbHVlIGZvciBlaXRoZXIgYHRocmVhZElkYCBvciBgdGhyZWFkTmFtZWAuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy93ZWJob29rI2V4ZWN1dGUtd2ViaG9va31cbiAgICovXG4gIGV4ZWN1dGVXZWJob29rOiAod2ViaG9va0lkOiBCaWdTdHJpbmcsIHRva2VuOiBzdHJpbmcsIG9wdGlvbnM6IEV4ZWN1dGVXZWJob29rKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPiB8IHVuZGVmaW5lZD5cbiAgLyoqXG4gICAqIEZvbGxvd3MgYW4gYW5ub3VuY2VtZW50IGNoYW5uZWwsIGFsbG93aW5nIG1lc3NhZ2VzIHBvc3RlZCB3aXRoaW4gaXQgdG8gYmUgY3Jvc3MtcG9zdGVkIGludG8gdGhlIHRhcmdldCBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gc291cmNlQ2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBhbm5vdW5jZW1lbnQgY2hhbm5lbCB0byBmb2xsb3cuXG4gICAqIEBwYXJhbSB0YXJnZXRDaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIHRhcmdldCBjaGFubmVsIC0gdGhlIGNoYW5uZWwgdG8gY3Jvc3MtcG9zdCB0by5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRGb2xsb3dlZENoYW5uZWx9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9XRUJIT09LU2AgcGVybWlzc2lvbiBpbiB0aGUgX190YXJnZXQgY2hhbm5lbF9fLlxuICAgKlxuICAgKiBGaXJlcyBhIF9XZWJob29rcyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2ZvbGxvdy1hbm5vdW5jZW1lbnQtY2hhbm5lbH1cbiAgICovXG4gIGZvbGxvd0Fubm91bmNlbWVudDogKHNvdXJjZUNoYW5uZWxJZDogQmlnU3RyaW5nLCB0YXJnZXRDaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkRm9sbG93ZWRDaGFubmVsPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgYWxsIGFjdGl2ZSB0aHJlYWRzIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSB0aHJlYWRzIG9mLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEFjdGl2ZVRocmVhZHN9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXR1cm5zIGJvdGggcHVibGljIGFuZCBwcml2YXRlIHRocmVhZHMuXG4gICAqXG4gICAqIFRocmVhZHMgYXJlIG9yZGVyZWQgYnkgdGhlIGBpZGAgcHJvcGVydHkgaW4gZGVzY2VuZGluZyBvcmRlci5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2xpc3QtYWN0aXZlLWd1aWxkLXRocmVhZHN9XG4gICAqL1xuICBnZXRBY3RpdmVUaHJlYWRzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBY3RpdmVUaHJlYWRzPj5cbiAgLyoqIEdldCB0aGUgYXBwbGljYXRpb25zIGluZm8gKi9cbiAgZ2V0QXBwbGljYXRpb25JbmZvOiAoKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbj4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBwZXJtaXNzaW9ucyBvZiBhIGd1aWxkIGFwcGxpY2F0aW9uIGNvbW1hbmQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0aGUgY29tbWFuZCBpcyByZWdpc3RlcmVkIGluLlxuICAgKiBAcGFyYW0gY29tbWFuZElkIC0gVGhlIElEIG9mIHRoZSBjb21tYW5kIHRvIGdldCB0aGUgcGVybWlzc2lvbnMgb2YuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ufS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2dldC1hcHBsaWNhdGlvbi1jb21tYW5kLXBlcm1pc3Npb25zfVxuICAgKi9cbiAgZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgY29tbWFuZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHBlcm1pc3Npb25zIG9mIGFsbCBhcHBsaWNhdGlvbiBjb21tYW5kcyByZWdpc3RlcmVkIGluIGEgZ3VpbGQgYnkgdGhlIElEIG9mIHRoZSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgcGVybWlzc2lvbnMgb2JqZWN0cyBvZi5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ufSBvYmplY3RzIGFzc29ydGVkIGJ5IGNvbW1hbmQgSUQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNnZXQtZ3VpbGQtYXBwbGljYXRpb24tY29tbWFuZC1wZXJtaXNzaW9uc31cbiAgICovXG4gIGdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uc1tdPj5cbiAgLyoqXG4gICAqIEdldHMgYW4gYXV0b21vZCBydWxlIGJ5IGl0cyBJRC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgcnVsZSBvZi5cbiAgICogQHBhcmFtIHJ1bGVJZCAtIFRoZSBJRCBvZiB0aGUgcnVsZSB0byBnZXQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9hdXRvLW1vZGVyYXRpb24jZ2V0LWF1dG8tbW9kZXJhdGlvbi1ydWxlfVxuICAgKi9cbiAgZ2V0QXV0b21vZFJ1bGU6IChndWlsZElkOiBCaWdTdHJpbmcsIHJ1bGVJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBhdXRvbW9kIHJ1bGVzIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBydWxlcyBmcm9tLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGV9IG9iamVjdHMgYXNzb3J0ZWQgYnkgcnVsZSBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9hdXRvLW1vZGVyYXRpb24jbGlzdC1hdXRvLW1vZGVyYXRpb24tcnVsZXMtZm9yLWd1aWxkfVxuICAgKi9cbiAgZ2V0QXV0b21vZFJ1bGVzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGVbXT4+XG4gIC8qKlxuICAgKiBHZXRzIGEgY2hhbm5lbCBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZENoYW5uZWx9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiB0aGUgY2hhbm5lbCBpcyBhIHRocmVhZCwgYSB7QGxpbmsgVGhyZWFkTWVtYmVyfSBvYmplY3QgaXMgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZ2V0LWNoYW5uZWx9XG4gICAqL1xuICBnZXRDaGFubmVsOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZENoYW5uZWw+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBpbnZpdGVzIGZvciBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZ2V0IHRoZSBpbnZpdGVzIG9mLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRJbnZpdGVNZXRhZGF0YX0gb2JqZWN0cyBhc3NvcnRlZCBieSBpbnZpdGUgY29kZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfQ0hBTk5FTFNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIE9ubHkgdXNhYmxlIGZvciBndWlsZCBjaGFubmVscy5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZ2V0LWNoYW5uZWwtaW52aXRlc31cbiAgICovXG4gIGdldENoYW5uZWxJbnZpdGVzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEludml0ZU1ldGFkYXRhW10+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBjaGFubmVscyBmb3IgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgY2hhbm5lbHMgb2YuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZENoYW5uZWx9IG9iamVjdHMgYXNzb3J0ZWQgYnkgY2hhbm5lbCBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRXhjbHVkZXMgdGhyZWFkcy5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC1jaGFubmVsc31cbiAgICovXG4gIGdldENoYW5uZWxzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRDaGFubmVsW10+PlxuICAvKipcbiAgICogR2V0cyBhIGxpc3Qgb2Ygd2ViaG9va3MgZm9yIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB3aGljaCB0byBnZXQgdGhlIHdlYmhvb2tzIG9mLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRXZWJob29rfSBvYmplY3RzIGFzc29ydGVkIGJ5IHdlYmhvb2sgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1dFQkhPT0tTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNnZXQtY2hhbm5lbC13ZWJob29rc31cbiAgICovXG4gIGdldENoYW5uZWxXZWJob29rczogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRXZWJob29rW10+PlxuICAvKipcbiAgICogR2V0cyBvciBjcmVhdGVzIGEgRE0gY2hhbm5lbCB3aXRoIGEgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSBJRCBvZiB0aGUgdXNlciB0byBjcmVhdGUgdGhlIERNIGNoYW5uZWwgd2l0aC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRDaGFubmVsfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3VzZXIjY3JlYXRlLWRtfVxuICAgKi9cbiAgZ2V0RG1DaGFubmVsOiAodXNlcklkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZENoYW5uZWw+PlxuICAvKipcbiAgICogR2V0cyBhbiBlbW9qaSBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCBmcm9tIHdoaWNoIHRvIGdldCB0aGUgZW1vamkuXG4gICAqIEBwYXJhbSBlbW9qaUlkIC0gVGhlIElEIG9mIHRoZSBlbW9qaSB0byBnZXQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkRW1vaml9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZW1vamkjZ2V0LWd1aWxkLWVtb2ppfVxuICAgKi9cbiAgZ2V0RW1vamk6IChndWlsZElkOiBCaWdTdHJpbmcsIGVtb2ppSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkRW1vamk+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBlbW9qaXMgZm9yIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB3aGljaCB0byBnZXQgdGhlIGVtb2ppcyBvZi5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkRW1vaml9IG9iamVjdHMgYXNzb3J0ZWQgYnkgZW1vamkgSUQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9lbW9qaSNsaXN0LWd1aWxkLWVtb2ppc31cbiAgICovXG4gIGdldEVtb2ppczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkRW1vamlbXT4+XG4gIC8qKlxuICAgKiBHZXRzIGEgZm9sbG93LXVwIG1lc3NhZ2UgdG8gYW4gaW50ZXJhY3Rpb24gYnkgdGhlIElEIG9mIHRoZSBtZXNzYWdlLlxuICAgKlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgaW50ZXJhY3Rpb24gdG9rZW4gdG8gdXNlLCBwcm92aWRlZCBpbiB0aGUgb3JpZ2luYWwgaW50ZXJhY3Rpb24uXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFVubGlrZSBgZ2V0TWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0OlxuICAgKiAtIE5lZWRpbmcgdG8gYmUgYWJsZSB0byBzZWUgdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFubmVsIHRoYXQgdGhlIG1lc3NhZ2UgaXMgaW4uIChgUkVBRF9NRVNTQUdFU2AgcGVybWlzc2lvbi4pXG4gICAqIC0gUmVxdWlyaW5nIHRoZSBgTUVTU0FHRV9DT05URU5UYCBpbnRlbnQuXG4gICAqXG4gICAqIERvZXMgbm90IHN1cHBvcnQgZXBoZW1lcmFsIGZvbGxvdy11cCBtZXNzYWdlcyBkdWUgdG8gdGhlc2UgYmVpbmcgc3RhdGVsZXNzLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvcmVjZWl2aW5nLWFuZC1yZXNwb25kaW5nI2dldC1mb2xsb3d1cC1tZXNzYWdlfVxuICAgKi9cbiAgZ2V0Rm9sbG93dXBNZXNzYWdlOiAodG9rZW46IHN0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PlxuICAvKiogR2V0IHRoZSBib3RzIEdhdGV3YXkgbWV0YWRhdGEgdGhhdCBjYW4gaGVscCBkdXJpbmcgdGhlIG9wZXJhdGlvbiBvZiBsYXJnZSBvciBzaGFyZGVkIGJvdHMuICovXG4gIGdldEdhdGV3YXlCb3Q6ICgpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEdldEdhdGV3YXlCb3Q+PlxuICAvKipcbiAgICogR2V0cyBhIGdsb2JhbCBhcHBsaWNhdGlvbiBjb21tYW5kIGJ5IGl0cyBJRC5cbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmRJZCAtIFRoZSBJRCBvZiB0aGUgY29tbWFuZCB0byBnZXQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBBcHBsaWNhdGlvbkNvbW1hbmR9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZ2V0LWdsb2JhbC1hcHBsaWNhdGlvbi1jb21tYW5kfVxuICAgKi9cbiAgZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kOiAoY29tbWFuZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIHlvdXIgYm90J3MgZ2xvYmFsIGFwcGxpY2F0aW9uIGNvbW1hbmRzLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIEFwcGxpY2F0aW9uQ29tbWFuZH0gb2JqZWN0cyBhc3NvcnRlZCBieSBjb21tYW5kIElELlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZ2V0LWdsb2JhbC1hcHBsaWNhdGlvbi1jb21tYW5kc31cbiAgICovXG4gIGdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHM6ICgpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPj5cbiAgLyoqXG4gICAqIEdldHMgYSBndWlsZCBhcHBsaWNhdGlvbiBjb21tYW5kIGJ5IGl0cyBJRC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRoZSBjb21tYW5kIGlzIHJlZ2lzdGVyZWQgaW4uXG4gICAqIEBwYXJhbSBjb21tYW5kSWQgLSBUaGUgSUQgb2YgdGhlIGNvbW1hbmQgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgQXBwbGljYXRpb25Db21tYW5kfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2dldC1ndWlsZC1hcHBsaWNhdGlvbi1jb21tYW5kfVxuICAgKi9cbiAgZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQ6IChjb21tYW5kSWQ6IEJpZ1N0cmluZywgZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBhcHBsaWNhdGlvbiBjb21tYW5kcyByZWdpc3RlcmVkIGJ5IHlvdXIgYm90IGluIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0aGUgY29tbWFuZHMgYXJlIHJlZ2lzdGVyZWQgaW4uXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgQXBwbGljYXRpb25Db21tYW5kfSBvYmplY3RzIGFzc29ydGVkIGJ5IGNvbW1hbmQgSUQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNnZXQtZ2xvYmFsLWFwcGxpY2F0aW9uLWNvbW1hbmRzc31cbiAgICovXG4gIGdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+PlxuICAvKipcbiAgICogR2V0cyBhIHRlbXBsYXRlIGJ5IGl0cyBjb2RlLlxuICAgKlxuICAgKiBAcGFyYW0gdGVtcGxhdGVDb2RlIC0gVGhlIGNvZGUgb2YgdGhlIHRlbXBsYXRlIHRvIGdldC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIFRlbXBsYXRlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC10ZW1wbGF0ZSNnZXQtZ3VpbGQtdGVtcGxhdGV9XG4gICAqL1xuICBnZXRHdWlsZFRlbXBsYXRlOiAodGVtcGxhdGVDb2RlOiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgdGVtcGxhdGVzIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBsaXN0IG9mIHRlbXBsYXRlcyBmb3IuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgVGVtcGxhdGV9IG9iamVjdHMgYXNzb3J0ZWQgYnkgdGVtcGxhdGUgY29kZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC10ZW1wbGF0ZSNnZXQtZ3VpbGQtdGVtcGxhdGVzfVxuICAgKi9cbiAgZ2V0R3VpbGRUZW1wbGF0ZXM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlW10+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiB3ZWJob29rcyBmb3IgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgbGlzdCBvZiB3ZWJob29rcyBmb3IuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZFdlYmhvb2t9IG9iamVjdHMgYXNzb3J0ZWQgYnkgd2ViaG9vayBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfV0VCSE9PS1NgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy93ZWJob29rI2dldC1ndWlsZC13ZWJob29rc31cbiAgICovXG4gIGdldEd1aWxkV2ViaG9va3M6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFdlYmhvb2tbXT4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIGludGVncmF0aW9ucyBhdHRhY2hlZCB0byBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBsaXN0IG9mIGludGVncmF0aW9ucyBmcm9tLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIEludGVncmF0aW9ufSBvYmplY3RzIGFzc29ydGVkIGJ5IGludGVncmF0aW9uIElELlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC1pbnRlZ3JhdGlvbnN9XG4gICAqL1xuICBnZXRJbnRlZ3JhdGlvbnM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEludGVncmF0aW9uW10+PlxuICAvKipcbiAgICogR2V0cyBhbiBpbnZpdGUgdG8gYSBjaGFubmVsIGJ5IGl0cyBpbnZpdGUgY29kZS5cbiAgICpcbiAgICogQHBhcmFtIGludml0ZUNvZGUgLSBUaGUgaW52aXRlIGNvZGUgb2YgdGhlIGludml0ZSB0byBnZXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgaW52aXRlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEludml0ZU1ldGFkYXRhfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2ludml0ZSNnZXQtaW52aXRlfVxuICAgKi9cbiAgZ2V0SW52aXRlOiAoaW52aXRlQ29kZTogc3RyaW5nLCBvcHRpb25zPzogR2V0SW52aXRlKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRJbnZpdGVNZXRhZGF0YT4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIGludml0ZXMgZm9yIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIGludml0ZXMgZnJvbS5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBJbnZpdGVNZXRhZGF0YSB8IEludml0ZX0gb2JqZWN0cyBhc3NvcnRlZCBieSBpbnZpdGUgY29kZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9pbnZpdGUjZ2V0LWludml0ZXN9XG4gICAqL1xuICBnZXRJbnZpdGVzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRJbnZpdGVNZXRhZGF0YVtdPj5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxpc3Qgb2Ygc3RpY2tlciBwYWNrcyBhdmFpbGFibGUgdG8gTml0cm8gc3Vic2NyaWJlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBib3QgVGhlIGJvdCBpbnN0YW5jZSB0byB1c2UgdG8gbWFrZSB0aGUgcmVxdWVzdC5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBTdGlja2VyUGFja30gb2JqZWN0cyBhc3NvcnRlZCBieSBzdGlja2VyIElELlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvc3RpY2tlciNsaXN0LW5pdHJvLXN0aWNrZXItcGFja3N9XG4gICAqL1xuICBnZXROaXRyb1N0aWNrZXJQYWNrczogKCkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU3RpY2tlclBhY2tbXT4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpbml0aWFsIG1lc3NhZ2UgcmVzcG9uc2UgdG8gYW4gaW50ZXJhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSBpbnRlcmFjdGlvbiB0b2tlbiB0byB1c2UsIHByb3ZpZGVkIGluIHRoZSBvcmlnaW5hbCBpbnRlcmFjdGlvbi5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIE1lc3NhZ2V9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBVbmxpa2UgYGdldE1lc3NhZ2UoKWAsIHRoaXMgZW5kcG9pbnQgYWxsb3dzIHRoZSBib3QgdXNlciB0byBhY3Qgd2l0aG91dDpcbiAgICogLSBOZWVkaW5nIHRvIGJlIGFibGUgdG8gc2VlIHRoZSBjb250ZW50cyBvZiB0aGUgY2hhbm5lbCB0aGF0IHRoZSBtZXNzYWdlIGlzIGluLiAoYFJFQURfTUVTU0FHRVNgIHBlcm1pc3Npb24uKVxuICAgKiAtIFJlcXVpcmluZyB0aGUgYE1FU1NBR0VfQ09OVEVOVGAgaW50ZW50LlxuICAgKlxuICAgKiBEb2VzIG5vdCBzdXBwb3J0IGVwaGVtZXJhbCBmb2xsb3ctdXAgbWVzc2FnZXMgZHVlIHRvIHRoZXNlIGJlaW5nIHN0YXRlbGVzcy5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL3JlY2VpdmluZy1hbmQtcmVzcG9uZGluZyNnZXQtb3JpZ2luYWwtaW50ZXJhY3Rpb24tcmVzcG9uc2V9XG4gICAqL1xuICBnZXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2U6ICh0b2tlbjogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgcHJpdmF0ZSBhcmNoaXZlZCB0aHJlYWRzIGZvciBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZ2V0IHRoZSBhcmNoaXZlZCB0aHJlYWRzIGZvci5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRocmVhZHMuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkQXJjaGl2ZWRUaHJlYWRzfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbi5cbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfVEhSRUFEU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogUmV0dXJucyB0aHJlYWRzIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlcy5HdWlsZFByaXZhdGVUaHJlYWR9LlxuICAgKlxuICAgKiBUaHJlYWRzIGFyZSBvcmRlcmVkIGJ5IHRoZSBgYXJjaGl2ZV90aW1lc3RhbXBgIHByb3BlcnR5IGluY2x1ZGVkIGluIHRoZSBtZXRhZGF0YSBvZiB0aGUgb2JqZWN0IGluIGRlc2NlbmRpbmcgb3JkZXIuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2xpc3QtcHJpdmF0ZS1hcmNoaXZlZC10aHJlYWRzfVxuICAgKi9cbiAgZ2V0UHJpdmF0ZUFyY2hpdmVkVGhyZWFkczogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogTGlzdEFyY2hpdmVkVGhyZWFkcykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXJjaGl2ZWRUaHJlYWRzPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgcHJpdmF0ZSBhcmNoaXZlZCB0aHJlYWRzIHRoZSBib3QgaXMgYSBtZW1iZXIgb2YgZm9yIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBnZXQgdGhlIGFyY2hpdmVkIHRocmVhZHMgZm9yLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhyZWFkcy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRBcmNoaXZlZFRocmVhZHN9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYFJFQURfTUVTU0FHRV9ISVNUT1JZYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBSZXR1cm5zIHRocmVhZHMgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzLkd1aWxkUHJpdmF0ZVRocmVhZH0uXG4gICAqXG4gICAqIFRocmVhZHMgYXJlIG9yZGVyZWQgYnkgdGhlIGBpZGAgcHJvcGVydHkgaW4gZGVzY2VuZGluZyBvcmRlci5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjbGlzdC1qb2luZWQtcHJpdmF0ZS1hcmNoaXZlZC10aHJlYWRzfVxuICAgKi9cbiAgZ2V0UHJpdmF0ZUpvaW5lZEFyY2hpdmVkVGhyZWFkczogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogTGlzdEFyY2hpdmVkVGhyZWFkcykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXJjaGl2ZWRUaHJlYWRzPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgcHVibGljIGFyY2hpdmVkIHRocmVhZHMgZm9yIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBnZXQgdGhlIGFyY2hpdmVkIHRocmVhZHMgZm9yLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhyZWFkcy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIEFyY2hpdmVkVGhyZWFkc30uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgUkVBRF9NRVNTQUdFX0hJU1RPUllgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIElmIGNhbGxlZCBvbiBhIGNoYW5uZWwgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzLkd1aWxkVGV4dH0sIHJldHVybnMgdGhyZWFkcyBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXMuR3VpbGRQdWJsaWNUaHJlYWR9LlxuICAgKiBJZiBjYWxsZWQgb24gYSBjaGFubmVsIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlcy5HdWlsZE5ld3N9LCByZXR1cm5zIHRocmVhZHMgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzLkd1aWxkTmV3c1RocmVhZH0uXG4gICAqXG4gICAqIFRocmVhZHMgYXJlIG9yZGVyZWQgYnkgdGhlIGBhcmNoaXZlX3RpbWVzdGFtcGAgcHJvcGVydHkgaW5jbHVkZWQgaW4gdGhlIG1ldGFkYXRhIG9mIHRoZSBvYmplY3QgaW4gZGVzY2VuZGluZyBvcmRlci5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjbGlzdC1wdWJsaWMtYXJjaGl2ZWQtdGhyZWFkc31cbiAgICovXG4gIGdldFB1YmxpY0FyY2hpdmVkVGhyZWFkczogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogTGlzdEFyY2hpdmVkVGhyZWFkcykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXJjaGl2ZWRUaHJlYWRzPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2Ygcm9sZXMgZm9yIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIGxpc3Qgb2Ygcm9sZXMgZm9yLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc29yY1JvbGV9IG9iamVjdHMgYXNzb3J0ZWQgYnkgcm9sZSBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICog4pqg77iPIFRoaXMgZW5kcG9pbnQgc2hvdWxkIGJlIHVzZWQgc3BhcmluZ2x5IGR1ZSB0byB7QGxpbmsgVXNlcn0gb2JqZWN0cyBhbHJlYWR5IGJlaW5nIGluY2x1ZGVkIGluIGd1aWxkIHBheWxvYWRzLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjZ2V0LWd1aWxkLXJvbGVzfVxuICAgKi9cbiAgZ2V0Um9sZXM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFJvbGVbXT4+XG4gIC8qKlxuICAgKiBHZXRzIGEgc2NoZWR1bGVkIGV2ZW50IGJ5IGl0cyBJRC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgc2NoZWR1bGVkIGV2ZW50IGZyb20uXG4gICAqIEBwYXJhbSBldmVudElkIC0gVGhlIElEIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQgdG8gZ2V0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIHNjaGVkdWxlZCBldmVudC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIFNjaGVkdWxlZEV2ZW50fS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkLXNjaGVkdWxlZC1ldmVudCNnZXQtZ3VpbGQtc2NoZWR1bGVkLWV2ZW50fVxuICAgKi9cbiAgZ2V0U2NoZWR1bGVkRXZlbnQ6IChndWlsZElkOiBCaWdTdHJpbmcsIGV2ZW50SWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IHsgd2l0aFVzZXJDb3VudD86IGJvb2xlYW4gfSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBzY2hlZHVsZWQgZXZlbnRzIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBzY2hlZHVsZWQgZXZlbnRzIGZyb20uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50cy5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBTY2hlZHVsZWRFdmVudH0gb2JqZWN0cyBhc3NvcnRlZCBieSBldmVudCBJRC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkLXNjaGVkdWxlZC1ldmVudCNsaXN0LXNjaGVkdWxlZC1ldmVudHMtZm9yLWd1aWxkfVxuICAgKi9cbiAgZ2V0U2NoZWR1bGVkRXZlbnRzOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogR2V0U2NoZWR1bGVkRXZlbnRzKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTY2hlZHVsZWRFdmVudFtdPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2Ygc3Vic2NyaWJlcnMgdG8gYSBzY2hlZHVsZWQgZXZlbnQgZnJvbSBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBzdWJzY3JpYmVycyB0byB0aGUgc2NoZWR1bGVkIGV2ZW50IGZyb20uXG4gICAqIEBwYXJhbSBldmVudElkIC0gVGhlIElEIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQgdG8gZ2V0IHRoZSBzdWJzY3JpYmVycyBvZi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSBzdWJzY3JpYmVycy5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBVc2VyfSBvYmplY3RzIGFzc29ydGVkIGJ5IHVzZXIgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0VWRU5UU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogVXNlcnMgYXJlIG9yZGVyZWQgYnkgdGhlaXIgSURzIGluIF9hc2NlbmRpbmdfIG9yZGVyLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQtc2NoZWR1bGVkLWV2ZW50I2dldC1ndWlsZC1zY2hlZHVsZWQtZXZlbnQtdXNlcnN9XG4gICAqL1xuICBnZXRTY2hlZHVsZWRFdmVudFVzZXJzOiAoXG4gICAgZ3VpbGRJZDogQmlnU3RyaW5nLFxuICAgIGV2ZW50SWQ6IEJpZ1N0cmluZyxcbiAgICBvcHRpb25zPzogR2V0U2NoZWR1bGVkRXZlbnRVc2VycyxcbiAgKSA9PiBQcm9taXNlPEFycmF5PHsgdXNlcjogQ2FtZWxpemU8RGlzY29yZFVzZXI+OyBtZW1iZXI/OiBDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyPiB9Pj5cbiAgLyoqIEdldCB0aGUgYm90cyBHYXRld2F5IG1ldGFkYXRhIHRoYXQgY2FuIGhlbHAgZHVyaW5nIHRoZSBvcGVyYXRpb24gb2YgbGFyZ2Ugb3Igc2hhcmRlZCBib3RzLiAqL1xuICBnZXRTZXNzaW9uSW5mbzogKCkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkR2V0R2F0ZXdheUJvdD4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzdGFnZSBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggYSBzdGFnZSBjaGFubmVsLCBpZiBvbmUgZXhpc3RzLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBzdGFnZSBjaGFubmVsIHRoZSBzdGFnZSBpbnN0YW5jZSBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkU3RhZ2VJbnN0YW5jZX0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9zdGFnZS1pbnN0YW5jZSNnZXQtc3RhZ2UtaW5zdGFuY2V9XG4gICAqL1xuICBnZXRTdGFnZUluc3RhbmNlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFN0YWdlSW5zdGFuY2U+PlxuICAvKipcbiAgICogR2V0cyBhIHRocmVhZCBtZW1iZXIgYnkgdGhlaXIgdXNlciBJRC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgdGhyZWFkIHRvIGdldCB0aGUgdGhyZWFkIG1lbWJlciBvZi5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSB1c2VyIElEIG9mIHRoZSB0aHJlYWQgbWVtYmVyIHRvIGdldC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRUaHJlYWRNZW1iZXJ9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNnZXQtdGhyZWFkLW1lbWJlcn1cbiAgICovXG4gIGdldFRocmVhZE1lbWJlcjogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGhyZWFkTWVtYmVyPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgdGhyZWFkIG1lbWJlcnMgZm9yIGEgdGhyZWFkLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSB0aHJlYWQgdG8gZ2V0IHRoZSB0aHJlYWQgbWVtYmVycyBvZi5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkVGhyZWFkTWVtYmVyfSBhc3NvcnRlZCBieSB1c2VyIElELlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYXBwbGljYXRpb24gdG8gaGF2ZSB0aGUgYEdVSUxEX01FTUJFUlNgIHByaXZpbGVnZWQgaW50ZW50IGVuYWJsZWQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2xpc3QtdGhyZWFkLW1lbWJlcnN9XG4gICAqL1xuICBnZXRUaHJlYWRNZW1iZXJzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRocmVhZE1lbWJlcltdPj5cbiAgLyoqXG4gICAqIEdldCBhIHVzZXIncyBkYXRhIGZyb20gdGhlIGFwaVxuICAgKlxuICAgKiBAcGFyYW0gaWQgVGhlIHVzZXIncyBpZFxuICAgKiBAcmV0dXJucyB7Q2FtZWxpemU8RGlzY29yZFVzZXI+fVxuICAgKi9cbiAgZ2V0VXNlcjogKGlkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFVzZXI+PlxuICAvKipcbiAgICogR2V0cyBhIHdlYmhvb2sgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGdldC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRXZWJob29rfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfV0VCSE9PS1NgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy93ZWJob29rI2dldC13ZWJob29rfVxuICAgKi9cbiAgZ2V0V2ViaG9vazogKHdlYmhvb2tJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRXZWJob29rPj5cbiAgLyoqXG4gICAqIEdldHMgYSB3ZWJob29rIG1lc3NhZ2UgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGdldCBhIG1lc3NhZ2Ugb2YuXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSB3ZWJob29rIHRva2VuLCB1c2VkIHRvIGdldCB3ZWJob29rIG1lc3NhZ2VzLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gdGhlIElEIG9mIHRoZSB3ZWJob29rIG1lc3NhZ2UgdG8gZ2V0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIG1lc3NhZ2UuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkTWVzc2FnZX0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy93ZWJob29rI2dldC13ZWJob29rLW1lc3NhZ2V9XG4gICAqL1xuICBnZXRXZWJob29rTWVzc2FnZTogKFxuICAgIHdlYmhvb2tJZDogQmlnU3RyaW5nLFxuICAgIHRva2VuOiBzdHJpbmcsXG4gICAgbWVzc2FnZUlkOiBCaWdTdHJpbmcsXG4gICAgb3B0aW9ucz86IEdldFdlYmhvb2tNZXNzYWdlT3B0aW9ucyxcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj5cbiAgLyoqXG4gICAqIEdldHMgYSB3ZWJob29rIHVzaW5nIHRoZSB3ZWJob29rIHRva2VuLCB0aGVyZWJ5IGJ5cGFzc2luZyB0aGUgbmVlZCBmb3IgYXV0aGVudGljYXRpb24gKyBwZXJtaXNzaW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHdlYmhvb2tJZCAtIFRoZSBJRCBvZiB0aGUgd2ViaG9vayB0byBnZXQuXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSB3ZWJob29rIHRva2VuLCB1c2VkIHRvIGdldCB0aGUgd2ViaG9vay5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRXZWJob29rfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZ2V0LXdlYmhvb2std2l0aC10b2tlbn1cbiAgICovXG4gIGdldFdlYmhvb2tXaXRoVG9rZW46ICh3ZWJob29rSWQ6IEJpZ1N0cmluZywgdG9rZW46IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkV2ViaG9vaz4+XG4gIC8qKlxuICAgKiBBZGRzIHRoZSBib3QgdXNlciB0byBhIHRocmVhZC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgdGhyZWFkIHRvIGFkZCB0aGUgYm90IHVzZXIgdG8uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSB0aHJlYWQgbm90IGJlIGFyY2hpdmVkLlxuICAgKlxuICAgKiBGaXJlcyBhIF9UaHJlYWQgTWVtYmVycyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2pvaW4tdGhyZWFkfVxuICAgKi9cbiAgam9pblRocmVhZDogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBib3QgdXNlciBmcm9tIGEgdGhyZWFkLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSB0aHJlYWQgdG8gcmVtb3ZlIHRoZSBib3QgdXNlciBmcm9tLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgdGhyZWFkIG5vdCBiZSBhcmNoaXZlZC5cbiAgICpcbiAgICogRmlyZXMgYSBfVGhyZWFkIE1lbWJlcnMgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNsZWF2ZS10aHJlYWR9XG4gICAqL1xuICBsZWF2ZVRocmVhZDogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBDcm9zcy1wb3N0cyBhIG1lc3NhZ2UgcG9zdGVkIGluIGFuIGFubm91bmNlbWVudCBjaGFubmVsIHRvIHN1YnNjcmliZWQgY2hhbm5lbHMuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGFubm91bmNlbWVudCBjaGFubmVsLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGNyb3NzLXBvc3QuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcm9zcy1wb3N0ZWQge0BsaW5rIE1lc3NhZ2V9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYFNFTkRfTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIElmIG5vdCBjcm9zcy1wb3N0aW5nIG93biBtZXNzYWdlOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgTUFOQUdFX01FU1NBR0VTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIENyZWF0ZV8gZXZlbnQgaW4gdGhlIGd1aWxkcyB0aGUgc3Vic2NyaWJlZCBjaGFubmVscyBhcmUgaW4uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2Nyb3NzcG9zdC1tZXNzYWdlfVxuICAgKi9cbiAgcHVibGlzaE1lc3NhZ2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PlxuICAvKipcbiAgICogUmVtb3ZlcyBhIHJvbGUgZnJvbSBhIG1lbWJlci5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRoZSBtZW1iZXIgdG8gcmVtb3ZlIHRoZSByb2xlIGZyb20gaXMgaW4uXG4gICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgdXNlciBJRCBvZiB0aGUgbWVtYmVyIHRvIHJlbW92ZSB0aGUgcm9sZSBmcm9tLlxuICAgKiBAcGFyYW0gcm9sZUlkIC0gVGhlIElEIG9mIHRoZSByb2xlIHRvIHJlbW92ZSBmcm9tIHRoZSBtZW1iZXIuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBNZW1iZXIgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjcmVtb3ZlLWd1aWxkLW1lbWJlci1yb2xlfVxuICAgKi9cbiAgcmVtb3ZlUm9sZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcsIHJvbGVJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBtZW1iZXIgZnJvbSBhIHRocmVhZC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgdGhyZWFkIHRvIHJlbW92ZSB0aGUgdGhyZWFkIG1lbWJlciBvZi5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSB1c2VyIElEIG9mIHRoZSB0aHJlYWQgbWVtYmVyIHRvIHJlbW92ZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSWYgdGhlIHRocmVhZCBpcyBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXMuR3VpbGRQcml2YXRlVGhyZWFkfSwgcmVxdWlyZXMgdG8gYmUgdGhlIGNyZWF0b3Igb2YgdGhlIHRocmVhZC5cbiAgICogT3RoZXJ3aXNlLCByZXF1aXJlcyB0aGUgYE1BTkFHRV9USFJFQURTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBSZXF1aXJlcyB0aGUgdGhyZWFkIG5vdCBiZSBhcmNoaXZlZC5cbiAgICpcbiAgICogRmlyZXMgYSBfVGhyZWFkIE1lbWJlcnMgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNyZW1vdmUtdGhyZWFkLW1lbWJlcn1cbiAgICovXG4gIHJlbW92ZVRocmVhZE1lbWJlcjogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogU2VuZHMgYSBtZXNzYWdlIHRvIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBzZW5kIHRoZSBtZXNzYWdlIGluLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIG1lc3NhZ2UuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoYXQgdGhlIGJvdCB1c2VyIGJlIGFibGUgdG8gc2VlIHRoZSBjb250ZW50cyBvZiB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSBpcyB0byBiZSBzZW50IGluLlxuICAgKlxuICAgKiBJZiBzZW5kaW5nIGEgbWVzc2FnZSB0byBhIGd1aWxkIGNoYW5uZWw6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBTRU5EX01FU1NBR0VTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBJZiBzZW5kaW5nIGEgVFRTIG1lc3NhZ2U6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBTRU5EX1RUU19NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogSWYgc2VuZGluZyBhIG1lc3NhZ2UgYXMgYSByZXBseSB0byBhbm90aGVyIG1lc3NhZ2U6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbi5cbiAgICogLSBUaGUgbWVzc2FnZSBiZWluZyByZXBsaWVkIHRvIGNhbm5vdCBiZSBhIHN5c3RlbSBtZXNzYWdlLlxuICAgKlxuICAgKiDimqDvuI8gVGhlIG1heGltdW0gc2l6ZSBvZiBhIHJlcXVlc3QgKGFjY291bnRpbmcgZm9yIGFueSBhdHRhY2htZW50cyBhbmQgbWVzc2FnZSBjb250ZW50KSBmb3IgYm90IHVzZXJzIGlzIF84IE1pQl8uXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNjcmVhdGUtbWVzc2FnZX1cbiAgICovXG4gIHNlbmRNZXNzYWdlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZU1lc3NhZ2VPcHRpb25zKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj5cbiAgLyoqXG4gICAqIFNlbmRzIGEgZm9sbG93LXVwIG1lc3NhZ2UgdG8gYW4gaW50ZXJhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSBpbnRlcmFjdGlvbiB0b2tlbiB0byB1c2UsIHByb3ZpZGVkIGluIHRoZSBvcmlnaW5hbCBpbnRlcmFjdGlvbi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBtZXNzYWdlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIOKaoO+4jyBJbnRlcmFjdGlvbiB0b2tlbnMgYXJlIG9ubHkgdmFsaWQgZm9yIF8xNSBtaW51dGVzXy5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgbWVudGlvbnMgYXJlIHN1cHByZXNzZWQuIFRvIGVuYWJsZSBtZW50aW9ucywgcGFzcyBhIG1lbnRpb24gb2JqZWN0IHdpdGggdGhlIGNhbGxiYWNrIGRhdGEuXG4gICAqXG4gICAqIFVubGlrZSBgc2VuZE1lc3NhZ2UoKWAsIHRoaXMgZW5kcG9pbnQgYWxsb3dzIHRoZSBib3QgdXNlciB0byBhY3Qgd2l0aG91dDpcbiAgICogLSBOZWVkaW5nIHRvIGJlIGFibGUgdG8gc2VlIHRoZSBjb250ZW50cyBvZiB0aGUgY2hhbm5lbCB0aGF0IHRoZSBtZXNzYWdlIGlzIGluLiAoYFJFQURfTUVTU0FHRVNgIHBlcm1pc3Npb24uKVxuICAgKiAtIFJlcXVpcmluZyB0aGUgYE1FU1NBR0VfQ09OVEVOVGAgaW50ZW50LlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIENyZWF0ZV8gZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9yZWNlaXZpbmctYW5kLXJlc3BvbmRpbmcjY3JlYXRlLWZvbGxvd3VwLW1lc3NhZ2V9XG4gICAqL1xuICBzZW5kRm9sbG93dXBNZXNzYWdlOiAodG9rZW46IHN0cmluZywgb3B0aW9uczogSW50ZXJhY3Rpb25DYWxsYmFja0RhdGEpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PlxuICAvKipcbiAgICogU2VuZHMgYSByZXNwb25zZSB0byBhbiBpbnRlcmFjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGludGVyYWN0aW9uSWQgLSBUaGUgSUQgb2YgdGhlIGludGVyYWN0aW9uIHRvIHJlc3BvbmQgdG8uXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSBpbnRlcmFjdGlvbiB0b2tlbiB0byB1c2UsIHByb3ZpZGVkIGluIHRoZSBvcmlnaW5hbCBpbnRlcmFjdGlvbi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBtZXNzYWdlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIOKaoO+4jyBJbnRlcmFjdGlvbiB0b2tlbnMgYXJlIG9ubHkgdmFsaWQgZm9yIF8xNSBtaW51dGVzXy5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgbWVudGlvbnMgYXJlIHN1cHByZXNzZWQuIFRvIGVuYWJsZSBtZW50aW9ucywgcGFzcyBhIG1lbnRpb24gb2JqZWN0IHdpdGggdGhlIGNhbGxiYWNrIGRhdGEuXG4gICAqXG4gICAqIFVubGlrZSBgc2VuZE1lc3NhZ2UoKWAsIHRoaXMgZW5kcG9pbnQgYWxsb3dzIHRoZSBib3QgdXNlciB0byBhY3Qgd2l0aG91dDpcbiAgICogLSBOZWVkaW5nIHRvIGJlIGFibGUgdG8gc2VlIHRoZSBjb250ZW50cyBvZiB0aGUgY2hhbm5lbCB0aGF0IHRoZSBtZXNzYWdlIGlzIGluLiAoYFJFQURfTUVTU0FHRVNgIHBlcm1pc3Npb24uKVxuICAgKiAtIFJlcXVpcmluZyB0aGUgYE1FU1NBR0VfQ09OVEVOVGAgaW50ZW50LlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIENyZWF0ZV8gZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9yZWNlaXZpbmctYW5kLXJlc3BvbmRpbmcjY3JlYXRlLWludGVyYWN0aW9uLXJlc3BvbnNlfVxuICAgKi9cbiAgc2VuZEludGVyYWN0aW9uUmVzcG9uc2U6IChpbnRlcmFjdGlvbklkOiBCaWdTdHJpbmcsIHRva2VuOiBzdHJpbmcsIG9wdGlvbnM6IEludGVyYWN0aW9uUmVzcG9uc2UpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0aHJlYWQsIHVzaW5nIGFuIGV4aXN0aW5nIG1lc3NhZ2UgYXMgaXRzIHBvaW50IG9mIG9yaWdpbi5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCBpbiB3aGljaCB0byBjcmVhdGUgdGhlIHRocmVhZC5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byB1c2UgYXMgdGhlIHRocmVhZCdzIHBvaW50IG9mIG9yaWdpbi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyB0byB1c2UgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgdGhyZWFkLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgQ2hhbm5lbCB8IFRocmVhZH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIElmIGNhbGxlZCBvbiBhIGNoYW5uZWwgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzLkd1aWxkVGV4dH0sIGNyZWF0ZXMgYSB7QGxpbmsgQ2hhbm5lbFR5cGVzLkd1aWxkUHVibGljVGhyZWFkfS5cbiAgICogSWYgY2FsbGVkIG9uIGEgY2hhbm5lbCBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXMuR3VpbGROZXdzfSwgY3JlYXRlcyBhIHtAbGluayBDaGFubmVsVHlwZXMuR3VpbGROZXdzVGhyZWFkfS5cbiAgICogRG9lcyBub3Qgd29yayBvbiBjaGFubmVscyBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXMuR3VpbGRGb3J1bX0uXG4gICAqXG4gICAqIFRoZSBJRCBvZiB0aGUgY3JlYXRlZCB0aHJlYWQgd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUgSUQgb2YgdGhlIHNvdXJjZSBtZXNzYWdlLlxuICAgKlxuICAgKiBGaXJlcyBhIF9UaHJlYWQgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNzdGFydC10aHJlYWQtZnJvbS1tZXNzYWdlfVxuICAgKi9cbiAgc3RhcnRUaHJlYWRXaXRoTWVzc2FnZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogU3RhcnRUaHJlYWRXaXRoTWVzc2FnZSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQ2hhbm5lbD4+XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdGhyZWFkIHdpdGhvdXQgdXNpbmcgYSBtZXNzYWdlIGFzIHRoZSB0aHJlYWQncyBwb2ludCBvZiBvcmlnaW4uXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgaW4gd2hpY2ggdG8gY3JlYXRlIHRoZSB0aHJlYWQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgdG8gdXNlIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIHRocmVhZC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRDaGFubmVsIHwgVGhyZWFkfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogQ3JlYXRpbmcgYSBwcml2YXRlIHRocmVhZCByZXF1aXJlcyB0aGUgc2VydmVyIHRvIGJlIGJvb3N0ZWQuXG4gICAqXG4gICAqIEZpcmVzIGEgX1RocmVhZCBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI3N0YXJ0LXRocmVhZC13aXRob3V0LW1lc3NhZ2V9XG4gICAqL1xuICBzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IFN0YXJ0VGhyZWFkV2l0aG91dE1lc3NhZ2UpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZENoYW5uZWw+PlxuICAvKipcbiAgICogU3luY2hyb25pc2VzIGEgdGVtcGxhdGUgd2l0aCB0aGUgY3VycmVudCBzdGF0ZSBvZiBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gc3luY2hyb25pc2UgYSB0ZW1wbGF0ZSBvZi5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgVGVtcGxhdGV9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQtdGVtcGxhdGUjZ2V0LWd1aWxkLXRlbXBsYXRlc31cbiAgICovXG4gIHN5bmNHdWlsZFRlbXBsYXRlOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRUZW1wbGF0ZT4+XG4gIC8qKlxuICAgKiBUcmlnZ2VycyBhIHR5cGluZyBpbmRpY2F0b3IgZm9yIHRoZSBib3QgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCBpbiB3aGljaCB0byB0cmlnZ2VyIHRoZSB0eXBpbmcgaW5kaWNhdG9yLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBHZW5lcmFsbHksIGJvdHMgc2hvdWxkIF9ub3RfIHVzZSB0aGlzIHJvdXRlLlxuICAgKlxuICAgKiBGaXJlcyBhIF9UeXBpbmcgU3RhcnRfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI3RyaWdnZXItdHlwaW5nLWluZGljYXRvcn1cbiAgICovXG4gIHRyaWdnZXJUeXBpbmdJbmRpY2F0b3I6IChjaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogUmUtcmVnaXN0ZXJzIHRoZSBsaXN0IG9mIGdsb2JhbCBhcHBsaWNhdGlvbiBjb21tYW5kcywgb3ZlcndyaXRpbmcgdGhlIHByZXZpb3VzIGNvbW1hbmRzIGNvbXBsZXRlbHkuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kcyAtIFRoZSBsaXN0IG9mIGNvbW1hbmRzIHRvIHVzZSB0byBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIGxpc3QuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgQXBwbGljYXRpb25Db21tYW5kfSBvYmplY3RzIGFzc29ydGVkIGJ5IGNvbW1hbmQgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIOKdlyBDb21tYW5kcyB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgYGNvbW1hbmRzYCBhcnJheSB3aWxsIGJlIF9fZGVsZXRlZF9fLlxuICAgKlxuICAgKiDimqDvuI8gQ29tbWFuZHMgdGhhdCBkbyBub3QgYWxyZWFkeSBleGlzdCB3aWxsIGNvdW50IHRvd2FyZHMgdGhlIGRhaWx5IGxpbWl0IG9mIF8yMDBfIG5ldyBjb21tYW5kcy5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2J1bGstb3ZlcndyaXRlLWdsb2JhbC1hcHBsaWNhdGlvbi1jb21tYW5kc31cbiAgICovXG4gIHVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHM6IChjb21tYW5kczogQ3JlYXRlQXBwbGljYXRpb25Db21tYW5kW10pID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPj5cbiAgLyoqXG4gICAqIFJlLXJlZ2lzdGVycyB0aGUgbGlzdCBvZiBhcHBsaWNhdGlvbiBjb21tYW5kcyByZWdpc3RlcmVkIGluIGEgZ3VpbGQsIG92ZXJ3cml0aW5nIHRoZSBwcmV2aW91cyBjb21tYW5kcyBjb21wbGV0ZWx5LlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgd2hvc2UgbGlzdCBvZiBjb21tYW5kcyB0byBvdmVyd3JpdGUuXG4gICAqIEBwYXJhbSBjb21tYW5kcyAtIFRoZSBsaXN0IG9mIGNvbW1hbmRzIHRvIHVzZSB0byBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIGxpc3QuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgQXBwbGljYXRpb25Db21tYW5kfSBvYmplY3RzIGFzc29ydGVkIGJ5IGNvbW1hbmQgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIOKdlyBDb21tYW5kcyB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgYGNvbW1hbmRzYCBhcnJheSB3aWxsIGJlIF9fZGVsZXRlZF9fLlxuICAgKlxuICAgKiDimqDvuI8gQ29tbWFuZHMgdGhhdCBkbyBub3QgYWxyZWFkeSBleGlzdCB3aWxsIGNvdW50IHRvd2FyZHMgdGhlIGRhaWx5IGxpbWl0IG9mIF8yMDBfIG5ldyBjb21tYW5kcy5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2J1bGstb3ZlcndyaXRlLWd1aWxkLWFwcGxpY2F0aW9uLWNvbW1hbmRzfVxuICAgKi9cbiAgdXBzZXJ0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBjb21tYW5kczogQ3JlYXRlQXBwbGljYXRpb25Db21tYW5kW10pID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPj5cbiAgLyoqXG4gKiBCYW5zIGEgdXNlciBmcm9tIGEgZ3VpbGQuXG4gKlxuXG4gKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gYmFuIHRoZSB1c2VyIGZyb20uXG4gKiBAcGFyYW0gdXNlcklkIC0gVGhlIElEIG9mIHRoZSB1c2VyIHRvIGJhbiBmcm9tIHRoZSBndWlsZC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgYmFuLlxuICpcbiAqIEByZW1hcmtzXG4gKiBSZXF1aXJlcyB0aGUgYEJBTl9NRU1CRVJTYCBwZXJtaXNzaW9uLlxuICpcbiAqIEZpcmVzIGEgX0d1aWxkIEJhbiBBZGRfIGdhdGV3YXkgZXZlbnQuXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2NyZWF0ZS1ndWlsZC1iYW59XG4gKi9cbiAgYmFuTWVtYmVyOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IENyZWF0ZUd1aWxkQmFuKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBFZGl0cyB0aGUgbmlja25hbWUgb2YgdGhlIGJvdCB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZWRpdCB0aGUgbmlja25hbWUgb2YgdGhlIGJvdCB1c2VyIGluLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgbmlja25hbWUuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRNZW1iZXJ9XG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZpcmVzIGEgX0d1aWxkIE1lbWJlciBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNtb2RpZnktY3VycmVudC1tZW1iZXJ9XG4gICAqL1xuICBlZGl0Qm90TWVtYmVyOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBFZGl0Qm90TWVtYmVyT3B0aW9ucykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyPj5cbiAgLyoqXG4gICAqIEVkaXRzIGEgbWVtYmVyJ3MgcHJvcGVydGllcy5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQgdGhlIG1lbWJlciBvZi5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSB1c2VyIElEIG9mIHRoZSBtZW1iZXIgdG8gZWRpdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIHVzZXIuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoaXMgZW5kcG9pbnQgcmVxdWlyZXMgdmFyaW91cyBwZXJtaXNzaW9ucyBkZXBlbmRpbmcgb24gd2hhdCBpcyBlZGl0ZWQgYWJvdXQgdGhlIG1lbWJlci5cbiAgICogVG8gZmluZCBvdXQgdGhlIHJlcXVpcmVkIHBlcm1pc3Npb24gdG8gZW5hY3QgYSBjaGFuZ2UsIHJlYWQgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhpcyBlbmRwb2ludCdzIHtAbGluayBNb2RpZnlHdWlsZE1lbWJlciB8IHBhcmFtZXRlcnN9LlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBNZW1iZXIgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjbW9kaWZ5LWd1aWxkLW1lbWJlcn1cbiAgICovXG4gIGVkaXRNZW1iZXI6IChndWlsZElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBNb2RpZnlHdWlsZE1lbWJlcikgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyPj5cbiAgLyoqXG4gKiBHZXRzIHRoZSBtZW1iZXIgb2JqZWN0IGJ5IHVzZXIgSUQuXG4gKlxuXG4gKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBtZW1iZXIgb2JqZWN0IGZvci5cbiAqIEBwYXJhbSB1c2VySWQgLSBUaGUgSUQgb2YgdGhlIHVzZXIgdG8gZ2V0IHRoZSBtZW1iZXIgb2JqZWN0IGZvci5cbiAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkTWVtYmVyV2l0aFVzZXJ9LlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNnZXQtZ3VpbGQtbWVtYmVyfVxuICovXG4gIGdldE1lbWJlcjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lbWJlcldpdGhVc2VyPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgbWVtYmVycyBmb3IgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgbGlzdCBvZiBtZW1iZXJzIGZvci5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSBtZW1iZXJzLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRNZW1iZXJXaXRoVXNlcn0gb2JqZWN0cyBhc3NvcnRlZCBieSB1c2VyIElELlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYEdVSUxEX01FTUJFUlNgIGludGVudC5cbiAgICpcbiAgICog4pqg77iPIEl0IGlzIG5vdCByZWNvbW1lbmRlZCB0byB1c2UgdGhpcyBlbmRwb2ludCB3aXRoIHZlcnkgbGFyZ2UgYm90cy4gSW5zdGVhZCwgb3B0IHRvIHVzZSBgZmV0Y2hNZW1iZXJzKClgOlxuICAgKiBSRVNUIGNvbW11bmljYXRpb24gb25seSBwZXJtaXRzIDUwIHJlcXVlc3RzIHRvIGJlIG1hZGUgcGVyIHNlY29uZCwgd2hpbGUgZ2F0ZXdheXMgYWxsb3cgZm9yIHVwIHRvIDEyMCByZXF1ZXN0c1xuICAgKiBwZXIgbWludXRlIHBlciBzaGFyZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlYWQge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9yYXRlLWxpbWl0cyNyYXRlLWxpbWl0c30uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNsaXN0LWd1aWxkLW1lbWJlcnN9XG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3JlcXVlc3QtZ3VpbGQtbWVtYmVyc31cbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL3JhdGUtbGltaXRzI3JhdGUtbGltaXRzfVxuICAgKi9cbiAgZ2V0TWVtYmVyczogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogTGlzdEd1aWxkTWVtYmVycykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4+XG5cbiAgLyoqXG4gKiBLaWNrcyBhIG1lbWJlciBmcm9tIGEgZ3VpbGQuXG4gKlxuXG4gKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8ga2ljayB0aGUgbWVtYmVyIGZyb20uXG4gKiBAcGFyYW0gdXNlcklkIC0gVGhlIHVzZXIgSUQgb2YgdGhlIG1lbWJlciB0byBraWNrIGZyb20gdGhlIGd1aWxkLlxuICpcbiAqIEByZW1hcmtzXG4gKiBSZXF1aXJlcyB0aGUgYEtJQ0tfTUVNQkVSU2AgcGVybWlzc2lvbi5cbiAqXG4gKiBGaXJlcyBhIF9HdWlsZCBNZW1iZXIgUmVtb3ZlXyBnYXRld2F5IGV2ZW50LlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNyZW1vdmUtZ3VpbGQtbWVtYmVyfVxuICovXG4gIGtpY2tNZW1iZXI6IChndWlsZElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gKiBJbml0aWF0ZXMgdGhlIHByb2Nlc3Mgb2YgcHJ1bmluZyBpbmFjdGl2ZSBtZW1iZXJzLlxuICpcblxuICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIHBydW5lIHRoZSBtZW1iZXJzIG9mLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHBydW5pbmcgb2YgbWVtYmVycy5cbiAqIEByZXR1cm5zIEEgbnVtYmVyIGluZGljYXRpbmcgaG93IG1hbnkgbWVtYmVycyB3ZXJlIHBydW5lZC5cbiAqXG4gKiBAcmVtYXJrc1xuICogUmVxdWlyZXMgdGhlIGBLSUNLX01FTUJFUlNgIHBlcm1pc3Npb24uXG4gKlxuICog4p2XIFJlcXVlc3RzIHRvIHRoaXMgZW5kcG9pbnQgd2lsbCB0aW1lIG91dCBmb3IgbGFyZ2UgZ3VpbGRzLiBUbyBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcsIHNldCB0aGUge0BsaW5rIEJlZ2luR3VpbGRQcnVuZS5jb21wdXRlUHJ1bmVDb3VudH0gcHJvcGVydHkgb2YgdGhlIHtAbGluayBvcHRpb25zfSBvYmplY3QgcGFyYW1ldGVyIHRvIGBmYWxzZWAuIFRoaXMgd2lsbCBiZWdpbiB0aGUgcHJvY2VzcyBvZiBwcnVuaW5nLCBhbmQgaW1tZWRpYXRlbHkgcmV0dXJuIGB1bmRlZmluZWRgLCByYXRoZXIgdGhhbiB3YWl0IGZvciB0aGUgcHJvY2VzcyB0byBjb21wbGV0ZSBiZWZvcmUgcmV0dXJuaW5nIHRoZSBhY3R1YWwgY291bnQgb2YgbWVtYmVycyB0aGF0IGhhdmUgYmVlbiBraWNrZWQuXG4gKlxuICog4pqg77iPIEJ5IGRlZmF1bHQsIHRoaXMgcHJvY2VzcyB3aWxsIG5vdCByZW1vdmUgbWVtYmVycyB3aXRoIGEgcm9sZS4gVG8gaW5jbHVkZSB0aGUgbWVtYmVycyB3aG8gaGF2ZSBhIF9wYXJ0aWN1bGFyIHN1YnNldCBvZiByb2xlc18sIHNwZWNpZnkgdGhlIHJvbGUocykgaW4gdGhlIHtAbGluayBCZWdpbkd1aWxkUHJ1bmUuaW5jbHVkZVJvbGVzIHwgaW5jbHVkZVJvbGVzfSBwcm9wZXJ0eSBvZiB0aGUge0BsaW5rIG9wdGlvbnN9IG9iamVjdCBwYXJhbWV0ZXIuXG4gKlxuICogRmlyZXMgYSBfR3VpbGQgTWVtYmVyIFJlbW92ZV8gZ2F0ZXdheSBldmVudCBmb3IgZXZlcnkgbWVtYmVyIGtpY2tlZC5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjYmVnaW4tZ3VpbGQtcHJ1bmV9XG4gKi9cbiAgcHJ1bmVNZW1iZXJzOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBCZWdpbkd1aWxkUHJ1bmUpID0+IFByb21pc2U8eyBwcnVuZWQ6IG51bWJlciB8IG51bGwgfT5cbiAgLyoqXG4gKiBHZXRzIHRoZSBsaXN0IG9mIG1lbWJlcnMgd2hvc2UgdXNlcm5hbWVzIG9yIG5pY2tuYW1lcyBzdGFydCB3aXRoIGEgcHJvdmlkZWQgc3RyaW5nLlxuICpcblxuICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIHNlYXJjaCBpbi5cbiAqIEBwYXJhbSBxdWVyeSAtIFRoZSBzdHJpbmcgdG8gbWF0Y2ggdXNlcm5hbWVzIG9yIG5pY2tuYW1lcyBhZ2FpbnN0LlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3Igc2VhcmNoaW5nIHRocm91Z2ggdGhlIG1lbWJlcnMuXG4gKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRNZW1iZXJ9IG9iamVjdHMgYXNzb3J0ZWQgYnkgdXNlciBJRC5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjc2VhcmNoLWd1aWxkLW1lbWJlcnN9XG4gKi9cbiAgc2VhcmNoTWVtYmVyczogKGd1aWxkSWQ6IEJpZ1N0cmluZywgcXVlcnk6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8U2VhcmNoTWVtYmVycywgJ3F1ZXJ5Jz4pID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lbWJlcldpdGhVc2VyW10+PlxuICAvKipcbiAqIFVuYmFucyBhIHVzZXIgZnJvbSBhIGd1aWxkLlxuICpcblxuICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIHVuYmFuIHRoZSB1c2VyIGluLlxuICogQHBhcmFtIHVzZXJJZCAtIFRoZSBJRCBvZiB0aGUgdXNlciB0byB1bmJhbi5cbiAqXG4gKiBAcmVtYXJrc1xuICogUmVxdWlyZXMgdGhlIGBCQU5fTUVNQkVSU2AgcGVybWlzc2lvbi5cbiAqXG4gKiBGaXJlcyBhIF9HdWlsZCBCYW4gUmVtb3ZlXyBnYXRld2F5IGV2ZW50LlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNyZW1vdmUtZ3VpbGQtYmFufVxuICovXG4gIHVuYmFuTWVtYmVyOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxufVxuXG5leHBvcnQgdHlwZSBSZXF1ZXN0TWV0aG9kcyA9ICdHRVQnIHwgJ1BPU1QnIHwgJ0RFTEVURScgfCAnUEFUQ0gnIHwgJ1BVVCdcbmV4cG9ydCB0eXBlIEFwaVZlcnNpb25zID0gOSB8IDEwXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlV2ViaG9vayBleHRlbmRzIFdpdGhSZWFzb24ge1xuICAvKiogTmFtZSBvZiB0aGUgd2ViaG9vayAoMS04MCBjaGFyYWN0ZXJzKSAqL1xuICBuYW1lOiBzdHJpbmdcbiAgLyoqIEltYWdlIHVybCBmb3IgdGhlIGRlZmF1bHQgd2ViaG9vayBhdmF0YXIgKi9cbiAgYXZhdGFyPzogc3RyaW5nIHwgbnVsbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucyB7XG4gIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gIG1ldGhvZDogUmVxdWVzdE1ldGhvZHNcbiAgYm9keT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIHVuYXV0aG9yaXplZD86IGJvb2xlYW5cbiAgdXJsPzogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWVzdEJvZHkge1xuICBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gIGJvZHk6IHN0cmluZyB8IEZvcm1EYXRhXG4gIG1ldGhvZDogUmVxdWVzdE1ldGhvZHNcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZW5kUmVxdWVzdE9wdGlvbnMge1xuICAvKiogVGhlIHVybCB0byBzZW5kIHRoZSByZXF1ZXN0IHRvLiAqL1xuICB1cmw6IHN0cmluZ1xuICAvKiogVGhlIG1ldGhvZCB0byB1c2Ugd2hlbiBzZW5kaW5nIHRoZSByZXF1ZXN0LiAqL1xuICBtZXRob2Q6IFJlcXVlc3RNZXRob2RzXG4gIC8qKiBUaGUgYm9keSB0byBiZSBzZW50IGluIHRoZSByZXF1ZXN0LiAqL1xuICBib2R5PzogUmVjb3JkPHN0cmluZywgYW55PlxuICAvKiogVGhlIGFtb3VudCBvZiB0aW1lcyB0aGlzIHJlcXVlc3QgaGFzIGJlZW4gcmV0cmllZC4gKi9cbiAgcmV0cnlDb3VudDogbnVtYmVyXG4gIC8qKiBIYW5kbGVyIHRvIHJldHJ5IGEgcmVxdWVzdCBzaG91bGQgaXQgYmUgcmF0ZSBsaW1pdGVkLiAqL1xuICByZXRyeVJlcXVlc3Q/OiAob3B0aW9uczogU2VuZFJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBSZXNvbHZlIGhhbmRsZXIgd2hlbiBhIHJlcXVlc3Qgc3VjY2VlZHMuICovXG4gIHJlc29sdmU6ICh2YWx1ZTogYW55IHwgUHJvbWlzZUxpa2U8YW55PikgPT4gdm9pZFxuICAvKiogUmVqZWN0IGhhbmRsZXIgd2hlbiBhIHJlcXVlc3QgZmFpbHMuICovXG4gIHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZFxuICAvKiogSWYgdGhpcyByZXF1ZXN0IGhhcyBhIGJ1Y2tldCBpZCB3aGljaCBpdCBmYWxscyB1bmRlciBmb3IgcmF0ZSBsaW1pdCAqL1xuICBidWNrZXRJZD86IHN0cmluZ1xuICAvKiogQWRkaXRpb25hbCByZXF1ZXN0IG9wdGlvbnMsIHVzZWQgZm9yIHRoaW5ncyBsaWtlIG92ZXJyaWRpbmcgYXV0aG9yaXphdGlvbiBoZWFkZXIuICovXG4gIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdFJhdGVMaW1pdGVkUGF0aCB7XG4gIHVybDogc3RyaW5nXG4gIHJlc2V0VGltZXN0YW1wOiBudW1iZXJcbiAgYnVja2V0SWQ/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXZWJob29rTWVzc2FnZUVkaXRvciB7XG4gIC8qKlxuICAgKiBFZGl0cyBhIHdlYmhvb2sgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIHdlYmhvb2tJZCAtIFRoZSBJRCBvZiB0aGUgd2ViaG9vayB0byBlZGl0IHRoZSBtZXNzYWdlIG9mLlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgd2ViaG9vayB0b2tlbiwgdXNlZCB0byBlZGl0IHRoZSBtZXNzYWdlLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBtZXNzYWdlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNlZGl0LXdlYmhvb2stbWVzc2FnZX1cbiAgICovXG4gICh3ZWJob29rSWQ6IEJpZ1N0cmluZywgdG9rZW46IHN0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEludGVyYWN0aW9uQ2FsbGJhY2tEYXRhICYgeyB0aHJlYWRJZD86IEJpZ1N0cmluZyB9KTogUHJvbWlzZTxcbiAgICBDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT5cbiAgPlxuICAvKipcbiAgICogRWRpdHMgdGhlIG9yaWdpbmFsIHdlYmhvb2sgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIHdlYmhvb2tJZCAtIFRoZSBJRCBvZiB0aGUgd2ViaG9vayB0byBlZGl0IHRoZSBvcmlnaW5hbCBtZXNzYWdlIG9mLlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgd2ViaG9vayB0b2tlbiwgdXNlZCB0byBlZGl0IHRoZSBtZXNzYWdlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgbWVzc2FnZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZE1lc3NhZ2V9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBGaXJlcyBhIF9NZXNzYWdlIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZWRpdC13ZWJob29rLW1lc3NhZ2V9XG4gICAqL1xuICBvcmlnaW5hbDogKHdlYmhvb2tJZDogQmlnU3RyaW5nLCB0b2tlbjogc3RyaW5nLCBvcHRpb25zOiBJbnRlcmFjdGlvbkNhbGxiYWNrRGF0YSAmIHsgdGhyZWFkSWQ/OiBCaWdTdHJpbmcgfSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+XG59XG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVRlbXBsYXRlIHtcbiAgLyoqIE5hbWUgd2hpY2ggdGhlIHRlbXBsYXRlIHNob3VsZCBoYXZlICovXG4gIG5hbWU6IHN0cmluZ1xuICAvKiogRGVzY3JpcHRpb24gb2YgdGhlIHRlbXBsYXRlICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nXG59XG4vKiogaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3RlbXBsYXRlI21vZGlmeS1ndWlsZC10ZW1wbGF0ZSAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2RpZnlHdWlsZFRlbXBsYXRlIHtcbiAgLyoqIE5hbWUgb2YgdGhlIHRlbXBsYXRlICgxLTEwMCBjaGFyYWN0ZXJzKSAqL1xuICBuYW1lPzogc3RyaW5nXG4gIC8qKiBEZXNjcmlwdGlvbiBvZiB0aGUgdGVtcGxhdGUgKDAtMTIwIGNoYXJhY3RlcnMpICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgbnVsbFxufVxuLyoqIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNjcmVhdGUtZ3VpbGQtYmFuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUd1aWxkQmFuIGV4dGVuZHMgV2l0aFJlYXNvbiB7XG4gIC8qKiBOdW1iZXIgb2Ygc2Vjb25kcyB0byBkZWxldGUgbWVzc2FnZXMgZm9yLCBiZXR3ZWVuIDAgYW5kIDYwNDgwMCAoNyBkYXlzKSAqL1xuICBkZWxldGVNZXNzYWdlU2Vjb25kcz86IG51bWJlclxufVxuZXhwb3J0IGludGVyZmFjZSBFZGl0Qm90TWVtYmVyT3B0aW9ucyBleHRlbmRzIFdpdGhSZWFzb24ge1xuICBuaWNrPzogc3RyaW5nIHwgbnVsbFxufVxuLyoqIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNtb2RpZnktZ3VpbGQtbWVtYmVyICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGlmeUd1aWxkTWVtYmVyIHtcbiAgLyoqIFZhbHVlIHRvIHNldCB1c2VycyBuaWNrbmFtZSB0by4gUmVxdWlyZXMgdGhlIGBNQU5BR0VfTklDS05BTUVTYCBwZXJtaXNzaW9uICovXG4gIG5pY2s/OiBzdHJpbmcgfCBudWxsXG4gIC8qKiBBcnJheSBvZiByb2xlIGlkcyB0aGUgbWVtYmVyIGlzIGFzc2lnbmVkLiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9ST0xFU2AgcGVybWlzc2lvbiAqL1xuICByb2xlcz86IEJpZ1N0cmluZ1tdIHwgbnVsbFxuICAvKiogV2hldGhlciB0aGUgdXNlciBpcyBtdXRlZCBpbiB2b2ljZSBjaGFubmVscy4gV2lsbCB0aHJvdyBhIDQwMCBpZiB0aGUgdXNlciBpcyBub3QgaW4gYSB2b2ljZSBjaGFubmVsLiBSZXF1aXJlcyB0aGUgYE1VVEVfTUVNQkVSU2AgcGVybWlzc2lvbiAqL1xuICBtdXRlPzogYm9vbGVhbiB8IG51bGxcbiAgLyoqIFdoZXRoZXIgdGhlIHVzZXIgaXMgZGVhZmVuZWQgaW4gdm9pY2UgY2hhbm5lbHMuIFdpbGwgdGhyb3cgYSA0MDAgaWYgdGhlIHVzZXIgaXMgbm90IGluIGEgdm9pY2UgY2hhbm5lbC4gUmVxdWlyZXMgdGhlIGBNT1ZFX01FTUJFUlNgIHBlcm1pc3Npb24gKi9cbiAgZGVhZj86IGJvb2xlYW4gfCBudWxsXG4gIC8qKiBJZCBvZiBjaGFubmVsIHRvIG1vdmUgdXNlciB0byAoaWYgdGhleSBhcmUgY29ubmVjdGVkIHRvIHZvaWNlKS4gUmVxdWlyZXMgdGhlIGBNT1ZFX01FTUJFUlNgIHBlcm1pc3Npb24gKi9cbiAgY2hhbm5lbElkPzogQmlnU3RyaW5nIHwgbnVsbFxuICAvKiogd2hlbiB0aGUgdXNlcidzIHRpbWVvdXQgd2lsbCBleHBpcmUgYW5kIHRoZSB1c2VyIHdpbGwgYmUgYWJsZSB0byBjb21tdW5pY2F0ZSBpbiB0aGUgZ3VpbGQgYWdhaW4gKHVwIHRvIDI4IGRheXMgaW4gdGhlIGZ1dHVyZSksIHNldCB0byBudWxsIHRvIHJlbW92ZSB0aW1lb3V0LiBSZXF1aXJlcyB0aGUgYE1PREVSQVRFX01FTUJFUlNgIHBlcm1pc3Npb24gKi9cbiAgY29tbXVuaWNhdGlvbkRpc2FibGVkVW50aWw/OiBudW1iZXIgfCBudWxsXG59XG4vKiogaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2JlZ2luLWd1aWxkLXBydW5lICovXG5leHBvcnQgaW50ZXJmYWNlIEJlZ2luR3VpbGRQcnVuZSB7XG4gIC8qKiBOdW1iZXIgb2YgZGF5cyB0byBwcnVuZSAoMSBvciBtb3JlKSwgZGVmYXVsdDogNyAqL1xuICBkYXlzPzogbnVtYmVyXG4gIC8qKiBXaGV0aGVyICdwcnVuZWQnIGlzIHJldHVybmVkLCBkaXNjb3VyYWdlZCBmb3IgbGFyZ2UgZ3VpbGRzLCBkZWZhdWx0OiB0cnVlICovXG4gIGNvbXB1dGVQcnVuZUNvdW50PzogYm9vbGVhblxuICAvKiogUm9sZShzKSBybyBpbmNsdWRlLCBkZWZhdWx0OiBub25lICovXG4gIGluY2x1ZGVSb2xlcz86IHN0cmluZ1tdXG59XG4iXSwibmFtZXMiOlsiSW50ZXJhY3Rpb25SZXNwb25zZVR5cGVzIiwiY2FtZWxpemUiLCJjYW1lbFRvU25ha2VDYXNlIiwiZGVsYXkiLCJmaW5kRmlsZXMiLCJnZXRCb3RJZEZyb21Ub2tlbiIsImxvZ2dlciIsInVybFRvQmFzZTY0IiwiY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQiLCJRdWV1ZSIsImNyZWF0ZVJlc3RNYW5hZ2VyIiwib3B0aW9ucyIsInRva2VuIiwiRXJyb3IiLCJyZXN0IiwiYXBwbGljYXRpb25JZCIsIkJpZ0ludCIsInZlcnNpb24iLCJiYXNlVXJsIiwibWF4UmV0cnlDb3VudCIsIkluZmluaXR5IiwiZ2xvYmFsbHlSYXRlTGltaXRlZCIsInByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzIiwiZGVsZXRlUXVldWVEZWxheSIsInF1ZXVlcyIsIk1hcCIsInJhdGVMaW1pdGVkUGF0aHMiLCJpbnZhbGlkQnVja2V0Iiwicm91dGVzIiwid2ViaG9va3MiLCJpZCIsIndlYmhvb2tJZCIsIm1lc3NhZ2UiLCJtZXNzYWdlSWQiLCJ1cmwiLCJ0aHJlYWRJZCIsIm9yaWdpbmFsIiwid2ViaG9vayIsIndhaXQiLCJ1bmRlZmluZWQiLCJ0b1N0cmluZyIsInNlc3Npb25JbmZvIiwiZ2F0ZXdheUJvdCIsImNoYW5uZWxzIiwiZG0iLCJjaGFubmVsSWQiLCJjaGFubmVsIiwiZm9sbG93IiwiZm9ydW0iLCJpbnZpdGVzIiwibWVzc2FnZXMiLCJvdmVyd3JpdGUiLCJvdmVyd3JpdGVJZCIsImNyb3NzcG9zdCIsInN0YWdlcyIsInN0YWdlIiwidGhyZWFkcyIsImFsbCIsImFjdGl2ZSIsImd1aWxkSWQiLCJtZW1iZXJzIiwibWUiLCJ1c2VyIiwidXNlcklkIiwiYXJjaGl2ZWQiLCJwdWJsaWMiLCJiZWZvcmUiLCJEYXRlIiwidG9JU09TdHJpbmciLCJsaW1pdCIsInByaXZhdGUiLCJqb2luZWQiLCJ0eXBpbmciLCJndWlsZHMiLCJhdXRvbW9kIiwicnVsZSIsInJ1bGVJZCIsInJ1bGVzIiwiZW1vamkiLCJlbW9qaUlkIiwiZW1vamlzIiwiZXZlbnRzIiwid2l0aFVzZXJDb3VudCIsImV2ZW50IiwiZXZlbnRJZCIsInVzZXJzIiwid2l0aE1lbWJlciIsImFmdGVyIiwiZ3VpbGQiLCJ3aXRoQ291bnRzIiwiaW50ZWdyYXRpb24iLCJpbnRlZ3JhdGlvbklkIiwiaW50ZWdyYXRpb25zIiwiaW52aXRlIiwiaW52aXRlQ29kZSIsIndpdGhFeHBpcmF0aW9uIiwic2NoZWR1bGVkRXZlbnRJZCIsImJhbiIsImJvdCIsIm1lbWJlciIsInNlYXJjaCIsInF1ZXJ5IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwicHJ1bmUiLCJkYXlzIiwiQXJyYXkiLCJpc0FycmF5IiwiaW5jbHVkZVJvbGVzIiwiam9pbiIsInJvbGVzIiwib25lIiwicm9sZUlkIiwibWVtYmVySWQiLCJ0ZW1wbGF0ZXMiLCJjb2RlIiwiaW50ZXJhY3Rpb25zIiwiY29tbWFuZHMiLCJjb21tYW5kSWQiLCJ3aXRoTG9jYWxpemF0aW9ucyIsInBlcm1pc3Npb25zIiwicGVybWlzc2lvbiIsImNvbW1hbmQiLCJyZXNwb25zZXMiLCJjYWxsYmFjayIsImludGVyYWN0aW9uSWQiLCJ1c2VyQm90Iiwib2F1dGgyQXBwbGljYXRpb24iLCJuaXRyb1N0aWNrZXJQYWNrcyIsImNoZWNrUmF0ZUxpbWl0cyIsInJhdGVsaW1pdGVkIiwiZ2V0IiwiZ2xvYmFsIiwibm93IiwicmVzZXRUaW1lc3RhbXAiLCJjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQiLCJvYmoiLCJtYXAiLCJpdGVtIiwibmV3T2JqIiwia2V5IiwiT2JqZWN0Iiwia2V5cyIsImNyZWF0ZVJlcXVlc3QiLCJoZWFkZXJzIiwidW5hdXRob3JpemVkIiwiYXV0aG9yaXphdGlvbiIsInRvTG93ZXJDYXNlIiwibWV0aG9kIiwiYm9keSIsInJlYXNvbiIsImZpbGUiLCJmaWxlcyIsImZvcm0iLCJGb3JtRGF0YSIsImVuZHNXaXRoIiwiYXBwZW5kIiwiYmxvYiIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsInRhZ3MiLCJpIiwibGVuZ3RoIiwiSlNPTiIsInN0cmluZ2lmeSIsImluY2x1ZGVzIiwicHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMiLCJ2YWx1ZSIsImVudHJpZXMiLCJkZWxldGUiLCJzaXplIiwic2V0VGltZW91dCIsInByb2Nlc3NIZWFkZXJzIiwicmF0ZUxpbWl0ZWQiLCJyZW1haW5pbmciLCJyZXRyeUFmdGVyIiwicmVzZXQiLCJOdW1iZXIiLCJidWNrZXRJZCIsImhhbmRsZUNvbXBsZXRlZFJlcXVlc3QiLCJpbnRlcnZhbCIsIm1heCIsInNldCIsImdsb2JhbFJlc2V0Iiwic2VuZFJlcXVlc3QiLCJzdGFydHNXaXRoIiwicGF5bG9hZCIsImRlYnVnIiwicmVzcG9uc2UiLCJmZXRjaCIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJzaW1wbGlmeVVybCIsInJldHJ5Q291bnQiLCJyZWplY3QiLCJvayIsImVycm9yIiwicmVzZXRBZnRlciIsInJldHJ5UmVxdWVzdCIsImpzb24iLCJyZXNvbHZlIiwicm91dGUiLCJyZXBsYWNlIiwibWF0Y2giLCJwIiwic3Vic3RyaW5nIiwiaW5kZXhPZiIsInByb2Nlc3NSZXF1ZXN0IiwicmVxdWVzdCIsInBhcnRzIiwic3BsaXQiLCJzaGlmdCIsInF1ZXVlIiwibWFrZVJlcXVlc3QiLCJidWNrZXRRdWV1ZSIsIlByb21pc2UiLCJwb3N0IiwicGF0Y2giLCJwdXQiLCJkZWxldGVNZXNzYWdlIiwiZWRpdCIsImVkaXRNZXNzYWdlIiwic2VuZCIsInNlbmRNZXNzYWdlIiwicHVibGlzaCIsInB1Ymxpc2hNZXNzYWdlIiwiZ2V0Q2hhbm5lbCIsImNyZWF0ZSIsImNyZWF0ZUNoYW5uZWwiLCJkZWxldGVDaGFubmVsIiwiZWRpdENoYW5uZWwiLCJzb3VyY2VDaGFubmVsSWQiLCJ0YXJnZXRDaGFubmVsSWQiLCJmb2xsb3dBbm5vdW5jZW1lbnQiLCJmb3J1bXMiLCJjcmVhdGVGb3J1bVRocmVhZCIsImVkaXRDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlcyIsImRlbGV0ZUNoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGUiLCJwb3NpdGlvbnMiLCJjaGFubmVsUG9zaXRpb25zIiwiZWRpdENoYW5uZWxQb3NpdGlvbnMiLCJnZXRDaGFubmVsSW52aXRlcyIsImNyZWF0ZVN0YWdlSW5zdGFuY2UiLCJkZWxldGVTdGFnZUluc3RhbmNlIiwiZGF0YSIsImVkaXRTdGFnZUluc3RhbmNlIiwiZ2V0U3RhZ2VJbnN0YW5jZSIsIndpdGgiLCJzdGFydFRocmVhZFdpdGhNZXNzYWdlIiwid2l0aG91dCIsInN0YXJ0VGhyZWFkV2l0aG91dE1lc3NhZ2UiLCJnZXRBY3RpdmVUaHJlYWRzIiwiZ2V0UHJpdmF0ZUFyY2hpdmVkVGhyZWFkcyIsImdldFByaXZhdGVKb2luZWRBcmNoaXZlZFRocmVhZHMiLCJnZXRQdWJsaWNBcmNoaXZlZFRocmVhZHMiLCJnZXRUaHJlYWRNZW1iZXIiLCJnZXRUaHJlYWRNZW1iZXJzIiwiam9pblRocmVhZCIsImxlYXZlIiwibGVhdmVUaHJlYWQiLCJraWNrIiwicmVtb3ZlVGhyZWFkTWVtYmVyIiwidHJpZ2dlclR5cGluZ0luZGljYXRvciIsImNyZWF0ZUVtb2ppIiwiZGVsZXRlRW1vamkiLCJlZGl0RW1vamkiLCJnZXRFbW9qaSIsImNyZWF0ZUF1dG9tb2RSdWxlIiwiZGVsZXRlQXV0b21vZFJ1bGUiLCJlZGl0QXV0b21vZFJ1bGUiLCJnZXRBdXRvbW9kUnVsZSIsImdldEF1dG9tb2RSdWxlcyIsImNyZWF0ZUd1aWxkIiwiZ2V0Q2hhbm5lbHMiLCJkZWxldGVHdWlsZCIsImdldEVtb2ppcyIsImNyZWF0ZVNjaGVkdWxlZEV2ZW50IiwiZGVsZXRlU2NoZWR1bGVkRXZlbnQiLCJlZGl0U2NoZWR1bGVkRXZlbnQiLCJnZXRTY2hlZHVsZWRFdmVudCIsImdldFNjaGVkdWxlZEV2ZW50cyIsImdldFNjaGVkdWxlZEV2ZW50VXNlcnMiLCJnZXRJbnRlZ3JhdGlvbnMiLCJkZWxldGVJbnRlZ3JhdGlvbiIsImNyZWF0ZUludml0ZSIsImRlbGV0ZUludml0ZSIsImdldEludml0ZSIsImxpc3QiLCJnZXRJbnZpdGVzIiwiY3JlYXRlR3VpbGRUZW1wbGF0ZSIsInRlbXBsYXRlQ29kZSIsImRlbGV0ZUd1aWxkVGVtcGxhdGUiLCJlZGl0R3VpbGRUZW1wbGF0ZSIsImdldEd1aWxkVGVtcGxhdGUiLCJnZXRHdWlsZFRlbXBsYXRlcyIsInN5bmMiLCJzeW5jR3VpbGRUZW1wbGF0ZSIsImJhbk1lbWJlciIsImVkaXRNZW1iZXIiLCJlZGl0U2VsZiIsImVkaXRCb3RNZW1iZXIiLCJnZXRNZW1iZXIiLCJnZXREbUNoYW5uZWwiLCJraWNrTWVtYmVyIiwiZ2V0TWVtYmVycyIsInBydW5lTWVtYmVycyIsInNlYXJjaE1lbWJlcnMiLCJ1bmJhbiIsInVuYmFuTWVtYmVyIiwiY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJkZWxldGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImVkaXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJlZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJiZWFyZXJUb2tlbiIsImVkaXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyIsImdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb24iLCJnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyIsInVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJ1cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJmb2xsb3d1cCIsInNlbmRGb2xsb3d1cE1lc3NhZ2UiLCJzZW5kSW50ZXJhY3Rpb25SZXNwb25zZSIsImRlbGV0ZUZvbGxvd3VwTWVzc2FnZSIsImRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImVkaXRGb2xsb3d1cE1lc3NhZ2UiLCJlZGl0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiZ2V0Rm9sbG93dXBNZXNzYWdlIiwiZ2V0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiYWRkIiwiYWRkUm9sZSIsImNyZWF0ZVJvbGUiLCJkZWxldGVSb2xlIiwiZWRpdFJvbGUiLCJnZXRSb2xlcyIsImVkaXRSb2xlUG9zaXRpb25zIiwicmVtb3ZlIiwicmVtb3ZlUm9sZSIsImNyZWF0ZVdlYmhvb2siLCJkZWxldGVXZWJob29rIiwiZGVsZXRlV2ViaG9va1dpdGhUb2tlbiIsImVkaXRXZWJob29rIiwiZWRpdFdlYmhvb2tXaXRoVG9rZW4iLCJleGVjdXRlIiwiZXhlY3V0ZVdlYmhvb2siLCJnZXRDaGFubmVsV2ViaG9va3MiLCJnZXRHdWlsZFdlYmhvb2tzIiwiZ2V0V2ViaG9va01lc3NhZ2UiLCJnZXRXZWJob29rIiwiZ2V0V2ViaG9va1dpdGhUb2tlbiIsImRlbGV0ZVdlYmhvb2tNZXNzYWdlIiwiYXNzaWduIiwiZWRpdFdlYmhvb2tNZXNzYWdlIiwiZWRpdE9yaWdpbmFsV2ViaG9va01lc3NhZ2UiLCJhZGRUaHJlYWRNZW1iZXIiLCJhdmF0YXIiLCJlZGl0Qm90UHJvZmlsZSIsImJvdEF2YXRhclVSTCIsInVzZXJuYW1lIiwidHJpbSIsInR5cGUiLCJVcGRhdGVNZXNzYWdlIiwidG9waWMiLCJ3ZWJob29rX2NoYW5uZWxfaWQiLCJnZXRBcHBsaWNhdGlvbkluZm8iLCJyZWNpcGllbnRfaWQiLCJnZXRHYXRld2F5Qm90IiwiZ2V0Tml0cm9TdGlja2VyUGFja3MiLCJnZXRTZXNzaW9uSW5mbyIsImdldFVzZXIiXSwibWFwcGluZ3MiOiJBQUFBLE9BQVNBLDRCQUFBQSxDQUF3QixLQUFRLG1CQUFtQixBQUM1RCxRQUFTQyxZQUFBQSxDQUFRLENBQUVDLG9CQUFBQSxDQUFnQixDQUFFQyxTQUFBQSxDQUFLLENBQUVDLGFBQUFBLENBQVMsQ0FBRUMscUJBQUFBLENBQWlCLENBQUVDLFVBQUFBLENBQU0sQ0FBRUMsZUFBQUEsQ0FBVyxLQUFRLG1CQUFtQixBQUV4SCxRQUFTQyw4QkFBQUEsQ0FBMEIsS0FBUSxvQkFBb0IsQUFDL0QsUUFBU0MsU0FBQUEsQ0FBSyxLQUFRLFlBQVksQUErRWxDLFFBQU8sU0FBU0Msa0JBQWtCQyxDQUFpQyxDQUFlLENBRWhGLEdBQUksQ0FBQ0EsRUFBUUMsS0FBSyxDQUFFLE1BQU0sQUFBSUMsTUFBTSxrQ0FBa0MsQ0FFdEUsSUFBTUMsRUFBb0IsQ0FDeEJGLE1BQU9ELEVBQVFDLEtBQUssQ0FDcEJHLGNBQWVKLEVBQVFJLGFBQWEsQ0FBR0MsT0FBT0wsRUFBUUksYUFBYSxFQUFJVixFQUFrQk0sRUFBUUMsS0FBSyxDQUFDLENBQ3ZHSyxRQUFTTixFQUFRTSxPQUFPLEVBQUksR0FDNUJDLFFBQVNQLEVBQVFPLE9BQU8sRUFBSSwwQkFDNUJDLGNBQWVDLElBQ2ZDLG9CQUFxQixDQUFBLEVBQ3JCQywyQkFBNEIsQ0FBQSxFQUM1QkMsaUJBQWtCLElBQ2xCQyxPQUFRLElBQUlDLElBQ1pDLGlCQUFrQixJQUFJRCxJQUN0QkUsY0FBZW5CLEVBQTJCLENBQUMsR0FFM0NvQixPQUFRLENBQ05DLFNBQVUsQ0FDUkMsR0FBSSxBQUFDQyxHQUNJLENBQUMsVUFBVSxFQUFFQSxFQUFVLENBQUMsQ0FFakNDLFFBQVMsQ0FBQ0QsRUFBV25CLEVBQU9xQixFQUFXdEIsSUFBWSxDQUNqRCxJQUFJdUIsRUFBTSxDQUFDLFVBQVUsRUFBRUgsRUFBVSxDQUFDLEVBQUVuQixFQUFNLFVBQVUsRUFBRXFCLEVBQVUsQ0FBQyxDQUFDLENBTWxFLE9BSkl0QixHQUNFQSxFQUFRd0IsUUFBUSxFQUFFRCxDQUFBQSxHQUFPLENBQUMsVUFBVSxFQUFFdkIsRUFBUXdCLFFBQVEsQ0FBQyxDQUFDLEFBQUQsRUFHdERELENBQ1QsRUFDQUUsU0FBVSxDQUFDTCxFQUFXbkIsRUFBT0QsSUFBWSxDQUN2QyxJQUFJdUIsRUFBTSxDQUFDLFVBQVUsRUFBRUgsRUFBVSxDQUFDLEVBQUVuQixFQUFNLG9CQUFvQixDQUFDLENBTS9ELE9BSklELEdBQ0VBLEVBQVF3QixRQUFRLEVBQUVELENBQUFBLEdBQU8sQ0FBQyxVQUFVLEVBQUV2QixFQUFRd0IsUUFBUSxDQUFDLENBQUMsQUFBRCxFQUd0REQsQ0FDVCxFQUNBRyxRQUFTLENBQUNOLEVBQVduQixFQUFPRCxJQUFZLENBQ3RDLElBQUl1QixFQUFNLENBQUMsVUFBVSxFQUFFSCxFQUFVLENBQUMsRUFBRW5CLEVBQU0sQ0FBQyxDQUFDLENBTzVDLE9BTElELElBQ0VBLEdBQVMyQixPQUFTQyxLQUFBQSxHQUFXTCxDQUFBQSxHQUFPLENBQUMsS0FBSyxFQUFFdkIsRUFBUTJCLElBQUksQ0FBQ0UsUUFBUSxHQUFHLENBQUMsQUFBRCxFQUNwRTdCLEVBQVF3QixRQUFRLEVBQUVELENBQUFBLEdBQU8sQ0FBQyxVQUFVLEVBQUV2QixFQUFRd0IsUUFBUSxDQUFDLENBQUMsQUFBRCxHQUd0REQsQ0FDVCxDQUNGLEVBR0FPLFlBQWEsSUFBTTNCLEVBQUtjLE1BQU0sQ0FBQ2MsVUFBVSxHQUd6Q0MsU0FBVSxDQUNSQyxHQUFJLElBQ0ssc0JBRVRmLFNBQVUsQUFBQ2dCLEdBQ0YsQ0FBQyxVQUFVLEVBQUVBLEVBQVUsU0FBUyxDQUFDLENBRzFDQyxRQUFTLEFBQUNELEdBQ0QsQ0FBQyxVQUFVLEVBQUVBLEVBQVUsQ0FBQyxDQUdqQ0UsT0FBUSxBQUFDRixHQUNBLENBQUMsVUFBVSxFQUFFQSxFQUFVLFVBQVUsQ0FBQyxDQUczQ0csTUFBTyxBQUFDSCxHQUNDLENBQUMsVUFBVSxFQUFFQSxFQUFVLHlCQUF5QixDQUFDLENBRzFESSxRQUFTLEFBQUNKLEdBQ0QsQ0FBQyxVQUFVLEVBQUVBLEVBQVUsUUFBUSxDQUFDLENBR3pDYixRQUFTLENBQUNhLEVBQVdaLElBQ1osQ0FBQyxVQUFVLEVBQUVZLEVBQVUsVUFBVSxFQUFFWixFQUFVLENBQUMsQ0FHdkRpQixTQUFVLENBQUNMLEVBQVdsQyxJQUFpQyxDQUNyRCxJQUFNdUIsRUFBTSxDQUFDLFVBQVUsRUFBRVcsRUFBVSxVQUFVLENBQUMsQ0FpQjlDLE9BQU9YLENBQ1QsRUFFQWlCLFVBQVcsQ0FBQ04sRUFBV08sSUFDZCxDQUFDLFVBQVUsRUFBRVAsRUFBVSxhQUFhLEVBQUVPLEVBQVksQ0FBQyxDQUc1REMsVUFBVyxDQUFDUixFQUFXWixJQUNkLENBQUMsVUFBVSxFQUFFWSxFQUFVLFVBQVUsRUFBRVosRUFBVSxVQUFVLENBQUMsQ0FHakVxQixPQUFRLElBQ0MsbUJBR1RDLE1BQU8sQUFBQ1YsR0FDQyxDQUFDLGlCQUFpQixFQUFFQSxFQUFVLENBQUMsQ0FJeENXLFFBQVMsQ0FDUHhCLFFBQVMsQ0FBQ2EsRUFBV1osSUFDWixDQUFDLFVBQVUsRUFBRVksRUFBVSxVQUFVLEVBQUVaLEVBQVUsUUFBUSxDQUFDLENBRS9Ed0IsSUFBSyxBQUFDWixHQUNHLENBQUMsVUFBVSxFQUFFQSxFQUFVLFFBQVEsQ0FBQyxDQUV6Q2EsT0FBUSxBQUFDQyxHQUNBLENBQUMsUUFBUSxFQUFFQSxFQUFRLGVBQWUsQ0FBQyxDQUU1Q0MsUUFBUyxBQUFDZixHQUNELENBQUMsVUFBVSxFQUFFQSxFQUFVLGVBQWUsQ0FBQyxDQUVoRGdCLEdBQUksQUFBQ2hCLEdBQ0ksQ0FBQyxVQUFVLEVBQUVBLEVBQVUsbUJBQW1CLENBQUMsQ0FFcERpQixLQUFNLENBQUNqQixFQUFXa0IsSUFDVCxDQUFDLFVBQVUsRUFBRWxCLEVBQVUsZ0JBQWdCLEVBQUVrQixFQUFPLENBQUMsQ0FFMURDLFNBQVUsQUFBQ25CLEdBQ0YsQ0FBQyxVQUFVLEVBQUVBLEVBQVUsaUJBQWlCLENBQUMsQ0FFbERvQixPQUFRLENBQUNwQixFQUFXbEMsSUFBWSxDQUM5QixJQUFJdUIsRUFBTSxDQUFDLFVBQVUsRUFBRVcsRUFBVSx5QkFBeUIsQ0FBQyxDQVUzRCxPQVJJbEMsSUFDRUEsRUFBUXVELE1BQU0sRUFDaEJoQyxDQUFBQSxHQUFPLENBQUMsT0FBTyxFQUFFLElBQUlpQyxLQUFLeEQsRUFBUXVELE1BQU0sRUFBRUUsV0FBVyxHQUFHLENBQUMsQUFBRCxFQUd0RHpELEVBQVEwRCxLQUFLLEVBQUVuQyxDQUFBQSxHQUFPLENBQUMsT0FBTyxFQUFFdkIsRUFBUTBELEtBQUssQ0FBQyxDQUFDLEFBQUQsR0FHN0NuQyxDQUNULEVBQ0FvQyxRQUFTLENBQUN6QixFQUFXbEMsSUFBWSxDQUMvQixJQUFJdUIsRUFBTSxDQUFDLFVBQVUsRUFBRVcsRUFBVSwwQkFBMEIsQ0FBQyxDQVU1RCxPQVJJbEMsSUFDRUEsRUFBUXVELE1BQU0sRUFDaEJoQyxDQUFBQSxHQUFPLENBQUMsT0FBTyxFQUFFLElBQUlpQyxLQUFLeEQsRUFBUXVELE1BQU0sRUFBRUUsV0FBVyxHQUFHLENBQUMsQUFBRCxFQUd0RHpELEVBQVEwRCxLQUFLLEVBQUVuQyxDQUFBQSxHQUFPLENBQUMsT0FBTyxFQUFFdkIsRUFBUTBELEtBQUssQ0FBQyxDQUFDLEFBQUQsR0FHN0NuQyxDQUNULEVBQ0FxQyxPQUFRLENBQUMxQixFQUFXbEMsSUFBWSxDQUM5QixJQUFJdUIsRUFBTSxDQUFDLFVBQVUsRUFBRVcsRUFBVSxvQ0FBb0MsQ0FBQyxDQVV0RSxPQVJJbEMsSUFDRUEsRUFBUXVELE1BQU0sRUFDaEJoQyxDQUFBQSxHQUFPLENBQUMsT0FBTyxFQUFFLElBQUlpQyxLQUFLeEQsRUFBUXVELE1BQU0sRUFBRUUsV0FBVyxHQUFHLENBQUMsQUFBRCxFQUd0RHpELEVBQVEwRCxLQUFLLEVBQUVuQyxDQUFBQSxHQUFPLENBQUMsT0FBTyxFQUFFdkIsRUFBUTBELEtBQUssQ0FBQyxDQUFDLEFBQUQsR0FHN0NuQyxDQUNULENBQ0YsRUFFQXNDLE9BQVEsQUFBQzNCLEdBQ0EsQ0FBQyxVQUFVLEVBQUVBLEVBQVUsT0FBTyxDQUFDLEFBRTFDLEVBR0E0QixPQUFRLENBQ05oQixJQUFLLElBQ0ksVUFFVGlCLFFBQVMsQ0FDUEMsS0FBTSxDQUFDaEIsRUFBU2lCLElBQ1AsQ0FBQyxRQUFRLEVBQUVqQixFQUFRLHVCQUF1QixFQUFFaUIsRUFBTyxDQUFDLENBRTdEQyxNQUFPLEFBQUNsQixHQUNDLENBQUMsUUFBUSxFQUFFQSxFQUFRLHNCQUFzQixDQUFDLEFBRXJELEVBQ0FoQixTQUFVLEFBQUNnQixHQUNGLENBQUMsUUFBUSxFQUFFQSxFQUFRLFNBQVMsQ0FBQyxDQUV0Q21CLE1BQU8sQ0FBQ25CLEVBQVNvQixJQUNSLENBQUMsUUFBUSxFQUFFcEIsRUFBUSxRQUFRLEVBQUVvQixFQUFRLENBQUMsQ0FFL0NDLE9BQVEsQUFBQ3JCLEdBQ0EsQ0FBQyxRQUFRLEVBQUVBLEVBQVEsT0FBTyxDQUFDLENBRXBDc0IsT0FBUSxDQUNOQSxPQUFRLENBQUN0QixFQUFTdUIsSUFBNEIsQ0FDNUMsSUFBSWhELEVBQU0sQ0FBQyxRQUFRLEVBQUV5QixFQUFRLGtCQUFrQixDQUFDLENBS2hELE9BSHNCcEIsS0FBQUEsSUFBbEIyQyxHQUNGaEQsQ0FBQUEsR0FBTyxDQUFDLGdCQUFnQixFQUFFZ0QsRUFBYzFDLFFBQVEsR0FBRyxDQUFDLEFBQUQsRUFFOUNOLENBQ1QsRUFDQWlELE1BQU8sQ0FBQ3hCLEVBQVN5QixFQUFTRixJQUE0QixDQUNwRCxJQUFJaEQsRUFBTSxDQUFDLFFBQVEsRUFBRXlCLEVBQVEsa0JBQWtCLEVBQUV5QixFQUFRLENBQUMsQ0FNMUQsT0FKc0I3QyxLQUFBQSxJQUFsQjJDLEdBQ0ZoRCxDQUFBQSxHQUFPLENBQUMsZ0JBQWdCLEVBQUVnRCxFQUFjMUMsUUFBUSxHQUFHLENBQUMsQUFBRCxFQUc5Q04sQ0FDVCxFQUNBbUQsTUFBTyxDQUFDMUIsRUFBU3lCLEVBQVN6RSxJQUFxQyxDQUM3RCxJQUFJdUIsRUFBTSxDQUFDLFFBQVEsRUFBRXlCLEVBQVEsa0JBQWtCLEVBQUV5QixFQUFRLE9BQU8sQ0FBQyxDQWVqRSxPQWJJekUsSUFFb0I0QixLQUFBQSxJQUFsQjVCLEVBQVEwRCxLQUFLLEVBQWdCbkMsQ0FBQUEsR0FBTyxDQUFDLE1BQU0sRUFBRXZCLEVBQVEwRCxLQUFLLENBQUMsQ0FBQyxBQUFELEVBQ3BDOUIsS0FBQUEsSUFBdkI1QixFQUFRMkUsVUFBVSxFQUVwQnBELENBQUFBLEdBQU8sQ0FBQyxhQUFhLEVBQUV2QixFQUFRMkUsVUFBVSxDQUFDOUMsUUFBUSxHQUFHLENBQUMsQUFBRCxFQUdqQ0QsS0FBQUEsSUFBbEI1QixFQUFRNEUsS0FBSyxFQUFnQnJELENBQUFBLEdBQU8sQ0FBQyxPQUFPLEVBQUV2QixFQUFRNEUsS0FBSyxDQUFDLENBQUMsQUFBRCxFQUV6Q2hELEtBQUFBLElBQW5CNUIsRUFBUXVELE1BQU0sRUFBZ0JoQyxDQUFBQSxHQUFPLENBQUMsUUFBUSxFQUFFdkIsRUFBUXVELE1BQU0sQ0FBQyxDQUFDLEFBQUQsR0FHOURoQyxDQUNULENBQ0YsRUFDQXNELE1BQU03QixDQUFPLENBQUU4QixDQUFVLENBQUUsQ0FDekIsSUFBSXZELEVBQU0sQ0FBQyxRQUFRLEVBQUV5QixFQUFRLENBQUMsQ0FBQyxDQU0vQixPQUptQnBCLEtBQUFBLElBQWZrRCxHQUNGdkQsQ0FBQUEsR0FBTyxDQUFDLFlBQVksRUFBRXVELEVBQVdqRCxRQUFRLEdBQUcsQ0FBQyxBQUFELEVBR3ZDTixDQUNULEVBQ0F3RCxZQUFBQSxDQUFZL0IsRUFBU2dDLElBQ1osQ0FBQyxRQUFRLEVBQUVoQyxFQUFRLGNBQWMsRUFBRWdDLEVBQWMsQ0FBQyxDQUUzREMsYUFBYyxBQUFDakMsR0FDTixDQUFDLFFBQVEsRUFBRUEsRUFBUSx1Q0FBdUMsQ0FBQyxDQUVwRWtDLE9BQU9DLENBQVUsQ0FBRW5GLENBQU8sQ0FBRSxDQUMxQixJQUFJdUIsRUFBTSxDQUFDLFNBQVMsRUFBRTRELEVBQVcsQ0FBQyxDQUFDLENBaUJuQyxPQWZJbkYsSUFDeUI0QixLQUFBQSxJQUF2QjVCLEVBQVE4RSxVQUFVLEVBRXBCdkQsQ0FBQUEsR0FBTyxDQUFDLFlBQVksRUFBRXZCLEVBQVE4RSxVQUFVLENBQUNqRCxRQUFRLEdBQUcsQ0FBQyxBQUFELEVBRXZCRCxLQUFBQSxJQUEzQjVCLEVBQVFvRixjQUFjLEVBRXhCN0QsQ0FBQUEsR0FBTyxDQUFDLGlCQUFpQixFQUFFdkIsRUFBUW9GLGNBQWMsQ0FBQ3ZELFFBQVEsR0FBRyxDQUFDLEFBQUQsRUFFM0Q3QixFQUFRcUYsZ0JBQWdCLEVBRTFCOUQsQ0FBQUEsR0FBTyxDQUFDLDBCQUEwQixFQUFFdkIsRUFBUXFGLGdCQUFnQixDQUFDLENBQUMsQUFBRCxHQUkxRDlELENBQ1QsRUFDQWUsUUFBUyxBQUFDVSxHQUNELENBQUMsUUFBUSxFQUFFQSxFQUFRLFFBQVEsQ0FBQyxDQUVyQ0MsUUFBUyxDQUNQcUMsSUFBSyxDQUFDdEMsRUFBU0ksSUFDTixDQUFDLFFBQVEsRUFBRUosRUFBUSxNQUFNLEVBQUVJLEVBQU8sQ0FBQyxDQUU1Q21DLElBQUssQUFBQ3ZDLEdBQ0csQ0FBQyxRQUFRLEVBQUVBLEVBQVEsWUFBWSxDQUFDLENBRXpDd0MsT0FBUSxDQUFDeEMsRUFBU0ksSUFDVCxDQUFDLFFBQVEsRUFBRUosRUFBUSxTQUFTLEVBQUVJLEVBQU8sQ0FBQyxDQUUvQ0gsUUFBUyxDQUFDRCxFQUFTaEQsSUFBWSxDQUM3QixJQUFJdUIsRUFBTSxDQUFDLFFBQVEsRUFBRXlCLEVBQVEsU0FBUyxDQUFDLENBU3ZDLE9BUGdCcEIsS0FBQUEsSUFBWjVCLElBRUVBLEVBQVEwRCxLQUFLLEVBQUVuQyxDQUFBQSxHQUFPLENBQUMsTUFBTSxFQUFFdkIsRUFBUTBELEtBQUssQ0FBQyxDQUFDLEFBQUQsRUFFN0MxRCxFQUFRNEUsS0FBSyxFQUFFckQsQ0FBQUEsR0FBTyxDQUFDLE9BQU8sRUFBRXZCLEVBQVE0RSxLQUFLLENBQUMsQ0FBQyxBQUFELEdBRzdDckQsQ0FDVCxFQUNBa0UsT0FBUSxDQUFDekMsRUFBUzBDLEVBQU8xRixJQUFZLENBQ25DLElBQUl1QixFQUFNLENBQUMsUUFBUSxFQUFFeUIsRUFBUSxzQkFBc0IsRUFBRTJDLG1CQUFtQkQsR0FBTyxDQUFDLENBTWhGLE9BSkkxRixHQUNFQSxBQUFrQjRCLEtBQUFBLElBQWxCNUIsRUFBUTBELEtBQUssRUFBZ0JuQyxDQUFBQSxHQUFPLENBQUMsT0FBTyxFQUFFdkIsRUFBUTBELEtBQUssQ0FBQyxDQUFDLEFBQUQsRUFHM0RuQyxDQUNULEVBQ0FxRSxNQUFPLENBQUM1QyxFQUFTaEQsSUFBWSxDQUMzQixJQUFJdUIsRUFBTSxDQUFDLFFBQVEsRUFBRXlCLEVBQVEsT0FBTyxDQUFDLENBY3JDLE9BWkloRCxJQUVFQSxFQUFRNkYsSUFBSSxFQUFFdEUsQ0FBQUEsR0FBTyxDQUFDLEtBQUssRUFBRXZCLEVBQVE2RixJQUFJLENBQUMsQ0FBQyxBQUFELEVBQzFDQyxNQUFNQyxPQUFPLENBQUMvRixFQUFRZ0csWUFBWSxFQUVwQ3pFLEdBQU8sQ0FBQyxlQUFlLEVBQUV2QixFQUFRZ0csWUFBWSxDQUFDQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQ2hEakcsRUFBUWdHLFlBQVksRUFFN0J6RSxDQUFBQSxHQUFPLENBQUMsZUFBZSxFQUFFdkIsRUFBUWdHLFlBQVksQ0FBQyxDQUFDLEFBQUQsR0FJM0N6RSxDQUNULENBQ0YsRUFDQTJFLE1BQU8sQ0FDTEMsSUFBSyxDQUFDbkQsRUFBb0JvRCxJQUNqQixDQUFDLFFBQVEsRUFBRXBELEVBQVEsT0FBTyxFQUFFb0QsRUFBTyxDQUFDLENBRTdDdEQsSUFBSyxBQUFDRSxHQUNHLENBQUMsUUFBUSxFQUFFQSxFQUFRLE1BQU0sQ0FBQyxDQUVuQ3dDLE9BQVEsQ0FBQ3hDLEVBQVNxRCxFQUFVRCxJQUNuQixDQUFDLFFBQVEsRUFBRXBELEVBQVEsU0FBUyxFQUFFcUQsRUFBUyxPQUFPLEVBQUVELEVBQU8sQ0FBQyxBQUVuRSxFQUNBRSxVQUFXLENBQ1RDLEtBQU0sQUFBQ0EsR0FDRSxDQUFDLGtCQUFrQixFQUFFQSxFQUFLLENBQUMsQ0FFcEMxQixNQUFPLENBQUM3QixFQUFTdUQsSUFDUixDQUFDLFFBQVEsRUFBRXZELEVBQVEsV0FBVyxFQUFFdUQsRUFBSyxDQUFDLENBRS9DekQsSUFBSyxBQUFDRSxHQUNHLENBQUMsUUFBUSxFQUFFQSxFQUFRLFVBQVUsQ0FBQyxBQUV6QyxFQUNBOUIsU0FBVSxBQUFDOEIsR0FDRixDQUFDLFFBQVEsRUFBRUEsRUFBUSxTQUFTLENBQUMsQUFFeEMsRUFHQXdELGFBQWMsQ0FDWkMsU0FBVSxDQUVSQSxTQUFVLEFBQUNyRyxHQUNGLENBQUMsY0FBYyxFQUFFQSxFQUFjLFNBQVMsQ0FBQyxDQUdsRDBELE9BQVEsQ0FDTmhCLElBQUFBLENBQUkxQyxFQUFlNEMsSUFDVixDQUFDLGNBQWMsRUFBRTVDLEVBQWMsUUFBUSxFQUFFNEMsRUFBUSxTQUFTLENBQUMsQ0FHcEVtRCxJQUFJL0YsQ0FBYSxDQUFFNEMsQ0FBTyxDQUFFMEQsQ0FBUyxDQUFFQyxDQUFpQixDQUFFLENBQ3hELElBQUlwRixFQUFNLENBQUMsY0FBYyxFQUFFbkIsRUFBYyxRQUFRLEVBQUU0QyxFQUFRLFVBQVUsRUFBRTBELEVBQVUsQ0FBQyxDQUFDLENBTW5GLE9BSjBCOUUsS0FBQUEsSUFBdEIrRSxHQUNGcEYsQ0FBQUEsR0FBTyxDQUFDLG1CQUFtQixFQUFFb0YsRUFBa0I5RSxRQUFRLEdBQUcsQ0FBQyxBQUFELEVBR3JETixDQUNULENBQ0YsRUFDQXFGLFlBQWEsQ0FBQ3hHLEVBQWU0QyxJQUNwQixDQUFDLGNBQWMsRUFBRTVDLEVBQWMsUUFBUSxFQUFFNEMsRUFBUSxxQkFBcUIsQ0FBQyxDQUVoRjZELFdBQVksQ0FBQ3pHLEVBQWU0QyxFQUFTMEQsSUFDNUIsQ0FBQyxjQUFjLEVBQUV0RyxFQUFjLFFBQVEsRUFBRTRDLEVBQVEsVUFBVSxFQUFFMEQsRUFBVSxZQUFZLENBQUMsQ0FFN0ZJLFFBQVMsQ0FBQzFHLEVBQWVzRyxFQUFXQyxJQUFzQixDQUN4RCxJQUFJcEYsRUFBTSxDQUFDLGNBQWMsRUFBRW5CLEVBQWMsVUFBVSxFQUFFc0csRUFBVSxDQUFDLENBQUMsQ0FNakUsT0FKMEI5RSxLQUFBQSxJQUF0QitFLEdBQ0ZwRixDQUFBQSxHQUFPLENBQUMsa0JBQWtCLEVBQUVvRixFQUFrQjlFLFFBQVEsR0FBRyxDQUFDLEFBQUQsRUFHcEROLENBQ1QsQ0FDRixFQUVBd0YsVUFBVyxDQUVUQyxTQUFVLENBQUNDLEVBQWVoSCxJQUNqQixDQUFDLGNBQWMsRUFBRWdILEVBQWMsQ0FBQyxFQUFFaEgsRUFBTSxTQUFTLENBQUMsQ0FFM0R3QixTQUFVLENBQUN3RixFQUFlaEgsSUFDakIsQ0FBQyxVQUFVLEVBQUVnSCxFQUFjLENBQUMsRUFBRWhILEVBQU0sbUJBQW1CLENBQUMsQ0FFakVvQixRQUFTLENBQUNqQixFQUFlSCxFQUFPcUIsSUFDdkIsQ0FBQyxVQUFVLEVBQUVsQixFQUFjLENBQUMsRUFBRUgsRUFBTSxVQUFVLEVBQUVxQixFQUFVLENBQUMsQUFFdEUsQ0FDRixFQUdBNkIsS0FBQUEsQUFBS0MsR0FDSSxDQUFDLE9BQU8sRUFBRUEsRUFBTyxDQUFDLENBRzNCOEQsUUFBQUEsSUFDUyxhQUdUQyxrQkFBQUEsSUFDUywwQkFHVHBGLFdBQUFBLElBQ1MsZUFHVHFGLGtCQUFBQSxJQUNTLGdCQUVYLEVBRUFDLGdCQUFnQjlGLENBQUcsQ0FBRSxDQUNuQixJQUFNK0YsRUFBY25ILEVBQUtZLGdCQUFnQixDQUFDd0csR0FBRyxDQUFDaEcsR0FDeENpRyxFQUFTckgsRUFBS1ksZ0JBQWdCLENBQUN3RyxHQUFHLENBQUMsVUFDbkNFLEVBQU1qRSxLQUFLaUUsR0FBRyxVQUVwQixBQUFJSCxHQUFlRyxFQUFNSCxFQUFZSSxjQUFjLENBQzFDSixFQUFZSSxjQUFjLENBQUdELElBR2xDRCxHQUFVQyxFQUFNRCxFQUFPRSxjQUFjLEVBQ2hDRixFQUFPRSxjQUFjLENBQUdELENBSGhDLEFBT0gsRUFFQUUsc0JBQXNCQyxDQUFRLENBQU8sQ0FDbkMsR0FBSUEsQUFBUSxJQUFJLEdBQVpBLEVBQWMsT0FBTyxJQUFJLENBRTdCLEdBQUksQUFBZSxVQUFmLE9BQU9BLEVBQWtCLENBQzNCLEdBQUk5QixNQUFNQyxPQUFPLENBQUM2QixHQUNoQixPQUFPQSxFQUFJQyxHQUFHLENBQUMsQUFBQ0MsR0FBUzNILEVBQUt3SCxxQkFBcUIsQ0FBQ0csR0FDckQsQ0FFRCxJQUFNQyxFQUFjLENBQUMsRUFFckIsSUFBSyxJQUFNQyxLQUFPQyxPQUFPQyxJQUFJLENBQUNOLEdBQU0sQ0FDbEMsR0FBSUksQUFBUSxnQkFBUkEsRUFBdUIsQ0FDekJELEVBQU9uQixXQUFXLENBQUcsYUFDckIsUUFBUSxBQUNWLENBQUMsQUFFRG1CLENBQU0sQ0FBQ3hJLEVBQWlCeUksR0FBSyxDQUFHN0gsRUFBS3dILHFCQUFxQixDQUFDQyxDQUFHLENBQUNJLEVBQUksQ0FDckUsQ0FFQSxPQUFPRCxDQUNULENBQUMsTUFFRCxBQUFJLEFBQWUsVUFBZixPQUFPSCxFQUF5QkEsRUFBSS9GLFFBQVEsR0FFekMrRixDQUYyQyxBQUdwRCxFQUVBTyxjQUFjbkksQ0FBTyxDQUFFLENBQ3JCLElBQU1vSSxFQUFrQyxDQUN0QyxhQUFjLHdFQUNoQixFQUtBLEdBSEtwSSxFQUFRcUksWUFBWSxFQUFFRCxDQUFBQSxFQUFRRSxhQUFhLENBQUcsQ0FBQyxJQUFJLEVBQUVuSSxFQUFLRixLQUFLLENBQUMsQ0FBQyxBQUFELEVBR2pFRCxFQUFRb0ksT0FBTyxDQUNqQixJQUFLLElBQU1KLEtBQU9oSSxFQUFRb0ksT0FBTyxDQUMvQkEsQ0FBTyxDQUFDSixFQUFJTyxXQUFXLEdBQUcsQ0FBR3ZJLEVBQVFvSSxPQUFPLENBQUNKLEVBQUksQUFFcEQsQ0FhRCxHQVZ1QixRQUFuQmhJLEVBQVF3SSxNQUFNLEVBQ2hCeEksQ0FBQUEsRUFBUXlJLElBQUksQ0FBRzdHLEtBQUFBLENBQVEsRUFJckI1QixFQUFReUksSUFBSSxFQUFFQyxTQUNoQk4sQ0FBTyxDQUFDLHFCQUFxQixDQUFHekMsbUJBQW1CM0YsRUFBUXlJLElBQUksQ0FBQ0MsTUFBTSxFQUN0RTFJLEVBQVF5SSxJQUFJLENBQUNDLE1BQU0sQ0FBRzlHLEtBQUFBLEdBR3BCNUIsRUFBUXlJLElBQUksQ0FBRSxDQUNoQixHQUFNLENBQUVFLEtBQUFBLENBQUksQ0FBRSxDQUFHM0ksRUFBUXlJLElBQUksQ0FDN0IsR0FBSUUsRUFBTSxDQUNSLElBQU1DLEVBQVFuSixFQUFVa0osR0FDbEJFLEVBQU8sSUFBSUMsU0FHakIsR0FBSTlJLEVBQVF1QixHQUFHLEVBQUV3SCxTQUFTLGNBQWdCL0ksQUFBbUIsU0FBbkJBLEVBQVF3SSxNQUFNLENBQ3RESyxFQUFLRyxNQUFNLENBQUMsT0FBUUosQ0FBSyxDQUFDLEVBQUUsQ0FBQ0ssSUFBSSxDQUFFTCxDQUFLLENBQUMsRUFBRSxDQUFDTSxJQUFJLEVBQ2hETCxFQUFLRyxNQUFNLENBQUMsT0FBUWhKLEVBQVF5SSxJQUFJLENBQUNTLElBQUksRUFDckNMLEVBQUtHLE1BQU0sQ0FBQyxjQUFlaEosRUFBUXlJLElBQUksQ0FBQ1UsV0FBVyxFQUNuRE4sRUFBS0csTUFBTSxDQUFDLE9BQVFoSixFQUFReUksSUFBSSxDQUFDVyxJQUFJLE1BQ2hDLENBQ0wsSUFBSyxJQUFJQyxFQUFJLEVBQUdBLEVBQUlULEVBQU1VLE1BQU0sQ0FBRUQsSUFDaENSLEVBQUtHLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRUssRUFBRSxDQUFDLENBQUVULENBQUssQ0FBQ1MsRUFBRSxDQUFDSixJQUFJLENBQUVMLENBQUssQ0FBQ1MsRUFBRSxDQUFDSCxJQUFJLEVBR2xEUCxHQUFNM0ksQ0FBQUEsRUFBUXlJLElBQUksQ0FBQ0UsSUFBSSxDQUFHL0csS0FBQUEsQ0FBUSxFQUN0Q2lILEVBQUtHLE1BQU0sQ0FBQyxlQUFnQk8sS0FBS0MsU0FBUyxDQUFDckosRUFBS3dILHFCQUFxQixDQUFDM0gsRUFBUXlJLElBQUksR0FDcEYsQ0FBQyxBQUVEekksRUFBUXlJLElBQUksQ0FBQ0UsSUFBSSxDQUFHRSxDQUN0QixNQUFXN0ksRUFBUXlJLElBQUksRUFBSSxDQUFDLENBQUMsTUFBTyxTQUFTLENBQUNnQixRQUFRLENBQUN6SixFQUFRd0ksTUFBTSxHQUNuRUosQ0FBQUEsQ0FBTyxDQUFDLGVBQWUsQ0FBRyxrQkFBaUIsQ0FDNUMsQUFDSCxDQUFDLEFBRUQsTUFBTyxDQUNMQSxRQUFBQSxFQUNBSyxLQUFPekksRUFBUXlJLElBQUksRUFBRUUsTUFBUVksS0FBS0MsU0FBUyxDQUFDckosRUFBS3dILHFCQUFxQixDQUFDM0gsRUFBUXlJLElBQUksR0FDbkZELE9BQVF4SSxFQUFRd0ksTUFBTSxBQUN4QixDQUNGLEVBRUFrQix5QkFBMEIsQ0FDeEIsSUFBTWpDLEVBQU1qRSxLQUFLaUUsR0FBRyxHQUVwQixJQUFLLEdBQU0sQ0FBQ08sRUFBSzJCLEVBQU0sR0FBSXhKLEVBQUtZLGdCQUFnQixDQUFDNkksT0FBTyxHQU9sREQsRUFBTWpDLGNBQWMsQ0FBR0QsSUFHM0J0SCxFQUFLWSxnQkFBZ0IsQ0FBQzhJLE1BQU0sQ0FBQzdCLEdBRWpCLFdBQVJBLEdBQWtCN0gsQ0FBQUEsRUFBS08sbUJBQW1CLENBQUcsQ0FBQSxDQUFJLEVBSW5EUCxDQUErQixJQUEvQkEsRUFBS1ksZ0JBQWdCLENBQUMrSSxJQUFJLENBQzVCM0osRUFBS1EsMEJBQTBCLENBQUcsQ0FBQSxHQUVsQ1IsRUFBS1EsMEJBQTBCLENBQUcsQ0FBQSxFQUVsQ29KLFdBQVcsSUFBTSxDQUVmNUosRUFBS3VKLHVCQUF1QixFQUM5QixFQUFHLEtBRVAsRUFHQU0sZUFBZXpJLENBQUcsQ0FBRTZHLENBQU8sQ0FBRSxDQUMzQixJQUFJNkIsRUFBYyxDQUFBLEVBR1pDLEVBQVk5QixFQUFRYixHQUFHLENBQUMseUJBQ3hCNEMsRUFBYS9CLEVBQVFiLEdBQUcsQ0FBQywyQkFDekI2QyxFQUFRNUcsS0FBS2lFLEdBQUcsR0FBSzRDLEFBQXFCLElBQXJCQSxPQUFPRixHQUM1QjNDLEVBQVNZLEVBQVFiLEdBQUcsQ0FBQyxzQkFFckIrQyxFQUFXbEMsRUFBUWIsR0FBRyxDQUFDLHVCQUF5QjNGLEtBQUFBLEVBQ2hEOEIsRUFBUTBFLEVBQVFiLEdBQUcsQ0FBQyxxQkE4QjFCLEdBNUJBcEgsRUFBS1UsTUFBTSxDQUFDMEcsR0FBRyxDQUFDaEcsSUFBTWdKLHVCQUF1QixDQUMzQ0wsVUFBV0EsRUFBWUcsT0FBT0gsR0FBYXRJLEtBQUFBLENBQVMsQ0FDcEQ0SSxTQUFVTCxFQUFhRSxBQUFxQixJQUFyQkEsT0FBT0YsR0FBcUJ2SSxLQUFBQSxDQUFTLENBQzVENkksSUFBSy9HLEVBQVEyRyxPQUFPM0csR0FBUzlCLEtBQUFBLENBQVMsQUFDeEMsR0FHa0IsTUFBZHNJLElBQ0ZELEVBQWMsQ0FBQSxFQUdkOUosRUFBS1ksZ0JBQWdCLENBQUMySixHQUFHLENBQUNuSixFQUFLLENBQzdCQSxJQUFBQSxFQUNBbUcsZUFBZ0IwQyxFQUNoQkUsU0FBQUEsQ0FDRixHQUdJQSxHQUNGbkssRUFBS1ksZ0JBQWdCLENBQUMySixHQUFHLENBQUNKLEVBQVUsQ0FDbEMvSSxJQUFBQSxFQUNBbUcsZUFBZ0IwQyxFQUNoQkUsU0FBQUEsQ0FDRixJQUtBOUMsRUFBUSxDQUNWLElBQU0yQyxFQUFhL0IsRUFBUWIsR0FBRyxDQUFDLGVBQ3pCb0QsRUFBY25ILEtBQUtpRSxHQUFHLEdBQUs0QyxBQUFxQixJQUFyQkEsT0FBT0YsRUFJeENoSyxDQUFBQSxFQUFLTyxtQkFBbUIsQ0FBRyxDQUFBLEVBQzNCdUosRUFBYyxDQUFBLEVBRWRGLFdBQVcsSUFBTSxDQUNmNUosRUFBS08sbUJBQW1CLENBQUcsQ0FBQSxDQUM3QixFQUFHaUssR0FFSHhLLEVBQUtZLGdCQUFnQixDQUFDMkosR0FBRyxDQUFDLFNBQVUsQ0FDbENuSixJQUFLLFNBQ0xtRyxlQUFnQmlELEVBQ2hCTCxTQUFBQSxDQUNGLEdBRUlBLEdBQ0ZuSyxFQUFLWSxnQkFBZ0IsQ0FBQzJKLEdBQUcsQ0FBQ0osRUFBVSxDQUNsQy9JLElBQUssU0FDTG1HLGVBQWdCaUQsRUFDaEJMLFNBQUFBLENBQ0YsRUFFSixDQUFDLEFBS0QsT0FISUwsR0FBZSxDQUFDOUosRUFBS1EsMEJBQTBCLEVBQ2pEUixFQUFLdUosdUJBQXVCLEdBRXZCTyxFQUFjSyxFQUFXMUksS0FBQUEsQ0FBUyxBQUMzQyxFQUVBLE1BQU1nSixZQUFZNUssQ0FBTyxDQUFFLENBQ3pCLElBQU11QixFQUFNdkIsRUFBUXVCLEdBQUcsQ0FBQ3NKLFVBQVUsQ0FBQyxZQUFjN0ssRUFBUXVCLEdBQUcsQ0FBRyxDQUFDLEVBQUVwQixFQUFLSSxPQUFPLENBQUMsRUFBRSxFQUFFSixFQUFLRyxPQUFPLENBQUMsRUFBRU4sRUFBUXVCLEdBQUcsQ0FBQyxDQUFDLENBQ3pHdUosRUFBVTNLLEVBQUtnSSxhQUFhLENBQUMsQ0FBRUssT0FBUXhJLEVBQVF3SSxNQUFNLENBQUVqSCxJQUFLdkIsRUFBUXVCLEdBQUcsQ0FBRWtILEtBQU16SSxFQUFReUksSUFBSSxDQUFFLEdBQUd6SSxFQUFRQSxPQUFPLEFBQUMsR0FFdEhMLEVBQU9vTCxLQUFLLENBQUMsQ0FBQyxtQkFBbUIsRUFBRXhKLEVBQUksQ0FBQyxDQUFFLGdCQUFpQixDQUFFLEdBQUd1SixDQUFPLENBQUUxQyxRQUFTLENBQUUsR0FBRzBDLEVBQVExQyxPQUFPLENBQUVFLGNBQWUsZUFBZ0IsQ0FBRSxHQUN6SSxJQUFNMEMsRUFBVyxNQUFNQyxNQUFNMUosRUFBS3VKLEdBQ2xDbkwsRUFBT29MLEtBQUssQ0FBQyxDQUFDLHFCQUFxQixFQUFFeEosRUFBSSxhQUFhLEVBQUV5SixFQUFTRSxNQUFNLENBQUMsR0FBRyxFQUFFRixFQUFTRyxVQUFVLENBQUMsQ0FBQyxFQUdsRyxJQUFNYixFQUFXbkssRUFBSzZKLGNBQWMsQ0FBQzdKLEVBQUtpTCxXQUFXLENBQUNwTCxFQUFRdUIsR0FBRyxDQUFFdkIsRUFBUXdJLE1BQU0sRUFBR3dDLEVBQVM1QyxPQUFPLEVBR3BHLEdBRklrQyxHQUFVdEssQ0FBQUEsRUFBUXNLLFFBQVEsQ0FBR0EsQ0FBTyxFQUVwQ1UsRUFBU0UsTUFBTSxDQUFHLEtBQU9GLEVBQVNFLE1BQU0sRUFBSSxJQUFLLENBR25ELEdBRkF2TCxFQUFPb0wsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFeEosRUFBSSxRQUFRLENBQUMsRUFFcEN5SixBQUFvQixNQUFwQkEsRUFBU0UsTUFBTSxDQUFVLENBRzNCLEdBRkF2TCxFQUFPb0wsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFeEosRUFBSSxpQkFBaUIsQ0FBQyxFQUU3Q3ZCLEVBQVFxTCxVQUFVLElBQU1sTCxFQUFLSyxhQUFhLENBSTVDLE9BSEFiLEVBQU9vTCxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUV4SixFQUFJLHNDQUFzQyxDQUFDLENBQUUsZ0JBQWlCdUosR0FHbEY5SyxFQUFRc0wsTUFBTSxHQUFHLENBQ3RCQyxHQUFJLENBQUEsRUFDSkwsT0FBUUYsRUFBU0UsTUFBTSxDQUN2Qk0sTUFBTyxrRUFDVCxFQUNELENBR0RyTCxFQUFLYSxhQUFhLENBQUN1SixzQkFBc0IsQ0FBQ1MsRUFBU0UsTUFBTSxDQUFFRixBQUE4QyxXQUE5Q0EsRUFBUzVDLE9BQU8sQ0FBQ2IsR0FBRyxDQUFDLHNCQUVoRixJQUFNa0UsRUFBYVQsRUFBUzVDLE9BQU8sQ0FBQ2IsR0FBRyxDQUFDLDJCQUd4QyxPQUZJa0UsR0FBWSxNQUFNak0sRUFBTTZLLEFBQXFCLElBQXJCQSxPQUFPb0IsSUFFNUIsTUFBTXpMLEVBQVEwTCxZQUFZLEdBQUcxTCxFQUN0QyxDQUFDLEFBRUQsT0FBT0EsRUFBUXNMLE1BQU0sQ0FBQyxNQUFNTixFQUFTVyxJQUFJLEdBQzNDLENBQUMsQUFHRCxHQUFJWCxBQUFvQixNQUFwQkEsRUFBU0UsTUFBTSxDQUFVLE9BQU9sTCxFQUFRNEwsT0FBTyxDQUFDaEssS0FBQUEsRUFBVSxDQUU5RDVCLEVBQVE0TCxPQUFPLENBQUMsTUFBTVosRUFBU1csSUFBSSxHQUNyQyxFQUlBUCxZQUFZN0osQ0FBRyxDQUFFaUgsQ0FBTSxDQUFFLENBQ3ZCLElBQUlxRCxFQUFRdEssRUFDVHVLLE9BQU8sQ0FBQyxpQ0FBa0MsU0FBVUMsQ0FBSyxDQUFFQyxDQUFTLENBQUUsQ0FDckUsTUFBTyxDQUFDLFdBQVksU0FBUyxDQUFDdkMsUUFBUSxDQUFDdUMsR0FBS0QsRUFBUSxDQUFDLENBQUMsRUFBRUMsRUFBRSxFQUFFLENBQUMsQUFDL0QsR0FDQ0YsT0FBTyxDQUFDLHNCQUF1QixnQkFZbEMsT0FUSUQsRUFBTXBDLFFBQVEsQ0FBQyxlQUNqQm9DLENBQUFBLEVBQVFBLEVBQU1JLFNBQVMsQ0FBQyxFQUFHSixFQUFNSyxPQUFPLENBQUMsY0FBZ0IsR0FBbUIsRUFJL0QsV0FBWDFELEdBQXVCcUQsRUFBTTlDLFFBQVEsQ0FBQyxnQkFDeEM4QyxDQUFBQSxFQUFRckQsRUFBU3FELENBQUksRUFHaEJBLENBQ1QsRUFFQU0sZUFBZUMsQ0FBMkIsQ0FBRSxDQUMxQyxJQUFNUCxFQUFRTyxFQUFRN0ssR0FBRyxDQUFDMEssU0FBUyxDQUFDRyxFQUFRN0ssR0FBRyxDQUFDMkssT0FBTyxDQUFDLFNBQ2xERyxFQUFRUixFQUFNUyxLQUFLLENBQUMsS0FFMUJELEVBQU1FLEtBQUssR0FFUEYsQ0FBSyxDQUFDLEVBQUUsRUFBRXhCLFdBQVcsTUFBTXdCLEVBQU1FLEtBQUssR0FFMUNILEVBQVE3SyxHQUFHLENBQUcsQ0FBQyxFQUFFcEIsRUFBS0ksT0FBTyxDQUFDLEVBQUUsRUFBRUosRUFBS0csT0FBTyxDQUFDLENBQUMsRUFBRStMLEVBQU1wRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBRW5FLElBQU0xRSxFQUFNcEIsRUFBS2lMLFdBQVcsQ0FBQ2dCLEVBQVE3SyxHQUFHLENBQUU2SyxFQUFRNUQsTUFBTSxFQUNsRGdFLEVBQVFyTSxFQUFLVSxNQUFNLENBQUMwRyxHQUFHLENBQUNoRyxHQUU5QixHQUFJaUwsQUFBVTVLLEtBQUFBLElBQVY0SyxFQUNGQSxFQUFNQyxXQUFXLENBQUNMLE9BQ2IsQ0FFTCxJQUFNTSxFQUFjLElBQUk1TSxFQUFNSyxFQUFNLENBQUVvQixJQUFBQSxFQUFLWCxpQkFBa0JULEVBQUtTLGdCQUFnQixBQUFDLEdBR25GOEwsRUFBWUQsV0FBVyxDQUFDTCxHQUV4QmpNLEVBQUtVLE1BQU0sQ0FBQzZKLEdBQUcsQ0FBQ25KLEVBQUttTCxFQUN2QixDQUFDLEFBQ0gsRUFFTUQsWUFBTixNQUFrQmpFLEVBQVFqSCxFQUFLa0gsRUFBTXpJLElBQzVCLE1BQU0sSUFBSTJNLFFBQVEsQ0FBQ2YsRUFBU04sSUFBVyxDQUM1Q25MLEVBQUtnTSxjQUFjLENBQUMsQ0FDbEI1SyxJQUFBQSxFQUNBaUgsT0FBQUEsRUFDQUMsS0FBQUEsRUFDQTRDLFdBQVksRUFDWkssYUFBYyxlQUFnQjFMLENBQTJCLENBQUUsQ0FFekQsTUFBTUcsRUFBS3lLLFdBQVcsQ0FBQzVLLEVBQ3pCLEVBQ0E0TCxRQUFBQSxFQUNBTixPQUFBQSxFQUNBdEwsUUFBQUEsQ0FDRixFQUNGLEdBR0l1SCxJQUFOLE1BQXVDaEcsR0FDOUJqQyxFQUFTLE1BQU1hLEVBQUtzTSxXQUFXLENBQUMsTUFBT2xMLElBRzFDcUwsS0FBTixNQUF3Q3JMLEVBQWFrSCxJQUM1Q25KLEVBQVMsTUFBTWEsRUFBS3NNLFdBQVcsQ0FBQyxPQUFRbEwsRUFBS2tILElBR2hEb0IsT0FBTixNQUFhdEksRUFBYWtILElBQ2pCbkosRUFBUyxNQUFNYSxFQUFLc00sV0FBVyxDQUFDLFNBQVVsTCxFQUFLa0gsSUFHbERvRSxNQUFOLE1BQXlDdEwsRUFBYWtILElBQzdDbkosRUFBUyxNQUFNYSxFQUFLc00sV0FBVyxDQUFDLFFBQVNsTCxFQUFLa0gsSUFHakRxRSxJQUFOLE1BQW9CdkwsRUFBYWtILEVBQTRCekksSUFDcERWLEVBQVMsTUFBTWEsRUFBS3NNLFdBQVcsQ0FBQyxNQUFPbEwsRUFBS2tILEVBQU16SSxJQUczRGdDLFNBQVUsQ0FDUk8sU0FBVSxDQUNGc0gsT0FBTixNQUFhM0gsRUFBV1osRUFBV29ILElBQzFCLE1BQU12SSxFQUFLNE0sYUFBYSxDQUFDN0ssRUFBV1osRUFBV29ILEdBRWxEc0UsS0FBTixNQUFXOUssRUFBV1osRUFBV3RCLElBQ3hCLE1BQU1HLEVBQUs4TSxXQUFXLENBQUMvSyxFQUFXWixFQUFXdEIsR0FHaERrTixLQUFOLE1BQVdoTCxFQUFXbEMsSUFDYixNQUFNRyxFQUFLZ04sV0FBVyxDQUFDakwsRUFBV2xDLEdBR3JDb04sUUFBTixNQUFjbEwsRUFBV1osSUFDaEIsTUFBTW5CLEVBQUtrTixjQUFjLENBQUNuTCxFQUFXWixFQUVoRCxFQUVNaUcsSUFBTixNQUFVcEcsR0FDRCxNQUFNaEIsRUFBS21OLFVBQVUsQ0FBQ25NLEdBR3pCb00sT0FBTixNQUFhdkssRUFBU2hELElBQ2IsTUFBTUcsRUFBS3FOLGFBQWEsQ0FBQ3hLLEVBQVNoRCxHQUdyQzZKLE9BQU4sTUFBYTFJLEVBQUl1SCxJQUNSLE1BQU12SSxFQUFLc04sYUFBYSxDQUFDdE0sRUFBSXVILEdBR2hDc0UsS0FBTixNQUFXN0wsRUFBSW5CLElBQ04sTUFBTUcsRUFBS3VOLFdBQVcsQ0FBQ3ZNLEVBQUluQixHQUc5Qm9DLE9BQU4sTUFBYXVMLEVBQWlCQyxJQUNyQixNQUFNek4sRUFBSzBOLGtCQUFrQixDQUFDRixFQUFpQkMsR0FHeERFLE9BQVEsQ0FDQWxCLEtBQU4sTUFBVzFLLEVBQVdsQyxJQUNiLE1BQU1HLEVBQUs0TixpQkFBaUIsQ0FBQzdMLEVBQVdsQyxFQUVuRCxFQUVBNEcsWUFBYSxDQUNMb0csS0FBTixNQUFXOUssRUFBV2xDLElBQ2IsTUFBTUcsRUFBSzZOLDhCQUE4QixDQUFDOUwsRUFBV2xDLEdBR3hENkosT0FBTixNQUFhM0gsRUFBV2YsSUFDZixNQUFNaEIsRUFBSzhOLCtCQUErQixDQUFDL0wsRUFBV2YsRUFFakUsRUFFTStNLFVBQU4sTUFBZ0JsTCxFQUFTbUwsSUFDaEIsTUFBTWhPLEVBQUtpTyxvQkFBb0IsQ0FBQ3BMLEVBQVNtTCxHQUc1QzdMLFFBQU4sTUFBY25CLEdBQ0wsTUFBTWhCLEVBQUtrTyxpQkFBaUIsQ0FBQ2xOLEdBR3RDd0IsT0FBUSxDQUNBNEssT0FBTixNQUFhdk4sR0FDSixNQUFNRyxFQUFLbU8sbUJBQW1CLENBQUN0TyxHQUdsQzZKLE9BQU4sTUFBYTNILEVBQVd3RyxJQUNmLE1BQU12SSxFQUFLb08sbUJBQW1CLENBQUNyTSxFQUFXd0csR0FHN0NzRSxLQUFOLE1BQVc5SyxFQUFXc00sSUFDYixNQUFNck8sRUFBS3NPLGlCQUFpQixDQUFDdk0sRUFBV3NNLEdBRzNDakgsSUFBTixNQUFVckYsR0FDRCxNQUFNL0IsRUFBS3VPLGdCQUFnQixDQUFDeE0sRUFFdkMsRUFFQVcsUUFBUyxDQUNQMEssT0FBUSxDQUNOb0IsS0FBTSxDQUNFdE4sUUFBTixNQUFjYSxFQUFXWixFQUFXdEIsSUFDM0IsTUFBTUcsRUFBS3lPLHNCQUFzQixDQUFDMU0sRUFBV1osRUFBV3RCLEVBRW5FLEVBQ0E2TyxRQUFTLENBQ0R4TixRQUFOLE1BQWNhLEVBQVdsQyxJQUNoQixNQUFNRyxFQUFLMk8seUJBQXlCLENBQUM1TSxFQUFXbEMsRUFFM0QsQ0FDRixFQUVBdUgsSUFBSyxDQUNHeEUsT0FBTixNQUFhQyxHQUNKLE1BQU03QyxFQUFLNE8sZ0JBQWdCLENBQUMvTCxHQUdyQ0ssU0FBVSxDQUNGTSxRQUFOLE1BQWN6QixFQUFXbEMsSUFDaEIsTUFBTUcsRUFBSzZPLHlCQUF5QixDQUFDOU0sRUFBV2xDLEdBR25ENEQsT0FBTixNQUFhMUIsRUFBV2xDLElBQ2YsTUFBTUcsRUFBSzhPLCtCQUErQixDQUFDL00sRUFBV2xDLEdBR3pEc0QsT0FBTixNQUFhcEIsRUFBV2xDLElBQ2YsTUFBTUcsRUFBSytPLHdCQUF3QixDQUFDaE4sRUFBV2xDLEVBRTFELEVBRU13RixPQUFOLE1BQWF0RCxFQUFXa0IsSUFDZixNQUFNakQsRUFBS2dQLGVBQWUsQ0FBQ2pOLEVBQVdrQixHQUd6Q0gsUUFBTixNQUFjZixHQUNMLE1BQU0vQixFQUFLaVAsZ0JBQWdCLENBQUNsTixFQUV2QyxFQUVNK0QsS0FBTixNQUFXL0QsR0FDRixNQUFNL0IsRUFBS2tQLFVBQVUsQ0FBQ25OLEdBR3pCb04sTUFBTixNQUFZcE4sR0FDSCxNQUFNL0IsRUFBS29QLFdBQVcsQ0FBQ3JOLEdBRzFCc04sS0FBTixNQUFXdE4sRUFBV2tCLElBQ2IsTUFBTWpELEVBQUtzUCxrQkFBa0IsQ0FBQ3ZOLEVBQVdrQixFQUVwRCxFQUVNUyxPQUFOLE1BQWExQyxHQUNKLE1BQU1oQixFQUFLdVAsc0JBQXNCLENBQUN2TyxFQUU3QyxFQUVBa0QsT0FBUSxDQUNBa0osT0FBTixNQUFhdkssRUFBU2hELElBQ2IsTUFBTUcsRUFBS3dQLFdBQVcsQ0FBQzNNLEVBQVNoRCxHQUduQzZKLE9BQU4sTUFBYTdHLEVBQVM3QixFQUFJdUgsSUFDakIsTUFBTXZJLEVBQUt5UCxXQUFXLENBQUM1TSxFQUFTN0IsRUFBSXVILEdBR3ZDc0UsS0FBTixNQUFXaEssRUFBUzdCLEVBQUluQixJQUNmLE1BQU1HLEVBQUswUCxTQUFTLENBQUM3TSxFQUFTN0IsRUFBSW5CLEdBR3JDdUgsSUFBTixNQUFVdkUsRUFBU29CLElBQ1YsTUFBTWpFLEVBQUsyUCxRQUFRLENBQUM5TSxFQUFTb0IsRUFFeEMsRUFFQU4sT0FBUSxDQUNOQyxRQUFTLENBQ0R3SixPQUFOLE1BQWF2SyxFQUFTaEQsSUFDYixNQUFNRyxFQUFLNFAsaUJBQWlCLENBQUMvTSxFQUFTaEQsR0FHekM2SixPQUFOLE1BQWE3RyxFQUFTeUIsSUFDYixNQUFNdEUsRUFBSzZQLGlCQUFpQixDQUFDaE4sRUFBU3lCLEdBR3pDdUksS0FBTixNQUFXaEssRUFBU2lCLEVBQVFqRSxJQUNuQixNQUFNRyxFQUFLOFAsZUFBZSxDQUFDak4sRUFBU2lCLEVBQVFqRSxHQUdyRHVILElBQUssQ0FDR3ZELEtBQU4sTUFBV2hCLEVBQVNpQixJQUNYLE1BQU05RCxFQUFLK1AsY0FBYyxDQUFDbE4sRUFBU2lCLEdBR3RDQyxNQUFOLE1BQVlsQixHQUNILE1BQU03QyxFQUFLZ1EsZUFBZSxDQUFDbk4sRUFFdEMsQ0FDRixFQUVNdUssT0FBTixNQUFhdk4sR0FDSixNQUFNRyxFQUFLaVEsV0FBVyxDQUFDcFEsR0FHMUJnQyxTQUFOLE1BQWViLEdBQ04sTUFBTWhCLEVBQUtrUSxXQUFXLENBQUNsUCxHQUcxQjBJLE9BQU4sTUFBYTFJLEdBQ0osTUFBTWhCLEVBQUttUSxXQUFXLENBQUNuUCxHQUcxQmtELE9BQU4sTUFBYWxELEdBQ0osTUFBTWhCLEVBQUtvUSxTQUFTLENBQUNwUCxHQUc5Qm1ELE9BQVEsQ0FDQWlKLE9BQU4sTUFBYXZLLEVBQVNoRCxJQUNiLE1BQU1HLEVBQUtxUSxvQkFBb0IsQ0FBQ3hOLEVBQVNoRCxHQUc1QzZKLE9BQU4sTUFBYTdHLEVBQVN5QixJQUNiLE1BQU10RSxFQUFLc1Esb0JBQW9CLENBQUN6TixFQUFTeUIsR0FHNUN1SSxLQUFOLE1BQVdoSyxFQUFTeUIsRUFBU3pFLElBQ3BCLE1BQU1HLEVBQUt1USxrQkFBa0IsQ0FBQzFOLEVBQVN5QixFQUFTekUsR0FHekR1SCxJQUFLLENBQ0cvQyxNQUFOLE1BQVl4QixFQUFTeUIsRUFBU3pFLElBQ3JCLE1BQU1HLEVBQUt3USxpQkFBaUIsQ0FBQzNOLEVBQVN5QixFQUFTekUsR0FHbERzRSxPQUFOLE1BQWF0QixFQUFTaEQsSUFDYixNQUFNRyxFQUFLeVEsa0JBQWtCLENBQUM1TixFQUFTaEQsR0FHMUMwRSxNQUFOLE1BQVkxQixFQUFTeUIsRUFBU3pFLElBQ3JCLE1BQU1HLEVBQUswUSxzQkFBc0IsQ0FBQzdOLEVBQVN5QixFQUFTekUsRUFFL0QsQ0FDRixFQUVBaUYsYUFBYyxDQUNOc0MsSUFBTixNQUFVdkUsR0FDRCxNQUFNN0MsRUFBSzJRLGVBQWUsQ0FBQzlOLEdBRzlCNkcsT0FBTixNQUFhN0csRUFBU2dDLElBQ2IsTUFBTTdFLEVBQUs0USxpQkFBaUIsQ0FBQy9OLEVBQVNnQyxFQUVqRCxFQUVBMUMsUUFBUyxDQUNEaUwsT0FBTixNQUFhckwsRUFBV2xDLElBQ2YsTUFBTUcsRUFBSzZRLFlBQVksQ0FBQzlPLEVBQVdsQyxHQUd0QzZKLE9BQU4sTUFBYTFFLEVBQVl1RCxJQUNoQixNQUFNdkksRUFBSzhRLFlBQVksQ0FBQzlMLEVBQVl1RCxHQUd2Q25CLElBQU4sTUFBVXBDLEVBQVluRixJQUNiLE1BQU1HLEVBQUsrUSxTQUFTLENBQUMvTCxFQUFZbkYsR0FHcENtUixLQUFOLE1BQVduTyxHQUNGLE1BQU03QyxFQUFLaVIsVUFBVSxDQUFDcE8sRUFFakMsRUFFQXNELFVBQVcsQ0FDSGlILE9BQU4sTUFBYXZLLEVBQVNoRCxJQUNiLE1BQU1HLEVBQUtrUixtQkFBbUIsQ0FBQ3JPLEVBQVNoRCxHQUUzQzZKLE9BQU4sTUFBYTdHLEVBQVNzTyxJQUNiLE1BQU1uUixFQUFLb1IsbUJBQW1CLENBQUN2TyxFQUFTc08sR0FFM0N0RSxLQUFOLE1BQVdoSyxFQUFTc08sRUFBY3RSLElBQ3pCLE1BQU1HLEVBQUtxUixpQkFBaUIsQ0FBQ3hPLEVBQVNzTyxFQUFjdFIsR0FFdkR1SCxJQUFOLE1BQVUrSixHQUNELE1BQU1uUixFQUFLc1IsZ0JBQWdCLENBQUNILEdBRS9CSCxLQUFOLE1BQVduTyxHQUNGLE1BQU03QyxFQUFLdVIsaUJBQWlCLENBQUMxTyxHQUVoQzJPLEtBQU4sTUFBVzNPLEdBQ0YsTUFBTTdDLEVBQUt5UixpQkFBaUIsQ0FBQzVPLEVBRXhDLEVBRUFDLFFBQVMsQ0FDRHFDLElBQU4sTUFBVXRDLEVBQVNJLEVBQVFwRCxJQUNsQixNQUFNRyxFQUFLMFIsU0FBUyxDQUFDN08sRUFBU0ksRUFBUXBELEdBRXpDZ04sS0FBTixNQUFXaEssRUFBU0ksRUFBUXBELElBQ25CLE1BQU1HLEVBQUsyUixVQUFVLENBQUM5TyxFQUFTSSxFQUFRcEQsR0FHMUMrUixTQUFOLE1BQWUvTyxFQUFTaEQsSUFDZixNQUFNRyxFQUFLNlIsYUFBYSxDQUFDaFAsRUFBU2hELEdBR3JDdUgsSUFBTixNQUFVdkUsRUFBU0ksSUFDVixNQUFNakQsRUFBSzhSLFNBQVMsQ0FBQ2pQLEVBQVNJLEdBR2pDbkIsR0FBTixNQUFTbUIsR0FDQSxNQUFNakQsRUFBSytSLFlBQVksQ0FBQzlPLEdBRzNCb00sS0FBTixNQUFXeE0sRUFBU0ksRUFBUXNGLElBQ25CLE1BQU12SSxFQUFLZ1MsVUFBVSxDQUFDblAsRUFBU0ksRUFBUXNGLEdBRzFDeUksS0FBTixNQUFXbk8sRUFBU2hELElBQ1gsTUFBTUcsRUFBS2lTLFVBQVUsQ0FBQ3BQLEVBQVNoRCxHQUdsQzRGLE1BQU4sTUFBWTVDLEVBQVNoRCxJQUNaLE1BQU1HLEVBQUtrUyxZQUFZLENBQUNyUCxFQUFTaEQsR0FHcEN5RixPQUFOLE1BQWF6QyxFQUFTMEMsRUFBTzFGLElBQ3BCLE1BQU1HLEVBQUttUyxhQUFhLENBQUN0UCxFQUFTMEMsRUFBTzFGLEdBRzVDdVMsTUFBTixNQUFZdlAsRUFBU0ksSUFDWixNQUFNakQsRUFBS3FTLFdBQVcsQ0FBQ3hQLEVBQVNJLEVBRTNDLEVBRUFvRCxhQUFjLENBQ1pDLFNBQVUsQ0FDUjhHLE9BQVEsQ0FDQS9GLE9BQU4sTUFBYVYsR0FDSixNQUFNM0csRUFBS3NTLDhCQUE4QixDQUFDM0wsR0FHN0NqQyxNQUFOLE1BQVlpQyxFQUFTOUQsSUFDWixNQUFNN0MsRUFBS3VTLDZCQUE2QixDQUFDNUwsRUFBUzlELEVBRTdELEVBRUE2RyxPQUFRLENBQ0FyQyxPQUFOLE1BQWFkLEdBQ0osTUFBTXZHLEVBQUt3Uyw4QkFBOEIsQ0FBQ2pNLEdBRzdDN0IsTUFBTixNQUFZNkIsRUFBVzFELElBQ2QsTUFBTTdDLEVBQUt5Uyw2QkFBNkIsQ0FBQ2xNLEVBQVcxRCxFQUUvRCxFQUVBZ0ssS0FBTSxDQUNFeEYsT0FBTixNQUFhZCxFQUFXMUcsSUFDZixNQUFNRyxFQUFLMFMsNEJBQTRCLENBQUNuTSxFQUFXMUcsR0FHdEQ2RSxNQUFOLE1BQVk2QixFQUFXMUQsRUFBU2hELElBQ3ZCLE1BQU1HLEVBQUsyUywyQkFBMkIsQ0FBQ3BNLEVBQVcxRCxFQUFTaEQsR0FHOUQ0RyxZQUFOLE1BQWtCNUQsRUFBUzBELEVBQVdxTSxFQUFhL1MsSUFDMUMsTUFBTUcsRUFBSzZTLGlDQUFpQyxDQUFDaFEsRUFBUzBELEVBQVdxTSxFQUFhL1MsRUFFekYsRUFFQXVILElBQUssQ0FDSEMsT0FBUSxDQUNBMUUsSUFBTixTQUNTLE1BQU0zQyxFQUFLOFMsNEJBQTRCLEdBRzFDOU0sSUFBTixNQUFVTyxHQUNELE1BQU12RyxFQUFLK1MsMkJBQTJCLENBQUN4TSxFQUVsRCxFQUVBNUMsT0FBUSxDQUNBaEIsSUFBTixNQUFVRSxHQUNELE1BQU03QyxFQUFLZ1QsMkJBQTJCLENBQUNuUSxHQUcxQ21ELElBQU4sTUFBVU8sRUFBVzFELElBQ1osTUFBTTdDLEVBQUtpVCwwQkFBMEIsQ0FBQzFNLEVBQVcxRCxFQUU1RCxFQUVNNkQsV0FBTixNQUFpQjdELEVBQVMwRCxJQUNqQixNQUFNdkcsRUFBS2tULCtCQUErQixDQUFDclEsRUFBUzBELEdBR3ZERSxZQUFOLE1BQWtCNUQsR0FDVCxNQUFNN0MsRUFBS21ULGdDQUFnQyxDQUFDdFEsRUFFdkQsRUFFQThJLFFBQVMsQ0FDRHRFLE9BQU4sTUFBYWYsR0FDSixNQUFNdEcsRUFBS29ULCtCQUErQixDQUFDOU0sR0FHOUM1QixNQUFOLE1BQVk3QixFQUFTeUQsSUFDWixNQUFNdEcsRUFBS3FULDhCQUE4QixDQUFDeFEsRUFBU3lELEVBRTlELENBQ0YsRUFFQU0sVUFBVyxDQUNUd0csT0FBUSxDQUNBa0csU0FBTixNQUFleFQsRUFBT0QsSUFDYixNQUFNRyxFQUFLdVQsbUJBQW1CLENBQUN6VCxFQUFPRCxHQUd6Q3lCLFNBQU4sTUFBZXdGLEVBQWVoSCxFQUFPRCxJQUM1QixNQUFNRyxFQUFLd1QsdUJBQXVCLENBQUMxTSxFQUFlaEgsRUFBT0QsRUFFcEUsRUFFQTZKLE9BQVEsQ0FDQTRKLFNBQU4sTUFBZXhULEVBQU9xQixJQUNiLE1BQU1uQixFQUFLeVQscUJBQXFCLENBQUMzVCxFQUFPcUIsR0FHM0NHLFNBQU4sTUFBZXhCLEdBQ04sTUFBTUUsRUFBSzBULGlDQUFpQyxDQUFDNVQsRUFFeEQsRUFFQStNLEtBQU0sQ0FDRXlHLFNBQU4sTUFBZXhULEVBQU9xQixFQUFXdEIsSUFDeEIsTUFBTUcsRUFBSzJULG1CQUFtQixDQUFDN1QsRUFBT3FCLEVBQVd0QixHQUdwRHlCLFNBQU4sTUFBZXhCLEVBQU9ELElBQ2IsTUFBTUcsRUFBSzRULCtCQUErQixDQUFDOVQsRUFBT0QsRUFFN0QsRUFFQXVILElBQUssQ0FDR2tNLFNBQU4sTUFBZXhULEVBQU9xQixJQUNiLE1BQU1uQixFQUFLNlQsa0JBQWtCLENBQUMvVCxFQUFPcUIsR0FHeENHLFNBQU4sTUFBZXhCLEdBQ04sTUFBTUUsRUFBSzhULDhCQUE4QixDQUFDaFUsRUFFckQsQ0FDRixDQUNGLEVBRUFpRyxNQUFPLENBQ0NnTyxJQUFOLE1BQVVsUixFQUFTSSxFQUFRZ0QsRUFBUXNDLElBQzFCLE1BQU12SSxFQUFLZ1UsT0FBTyxDQUFDblIsRUFBU0ksRUFBUWdELEVBQVFzQyxHQUcvQzZFLE9BQU4sTUFBYXZLLEVBQVNoRCxFQUFTMEksSUFDdEIsTUFBTXZJLEVBQUtpVSxVQUFVLENBQUNwUixFQUFTaEQsRUFBUzBJLEdBRzNDbUIsT0FBTixNQUFhN0csRUFBU29ELElBQ2IsTUFBTWpHLEVBQUtrVSxVQUFVLENBQUNyUixFQUFTb0QsR0FHbEM0RyxLQUFOLE1BQVdoSyxFQUFTb0QsRUFBUXBHLElBQ25CLE1BQU1HLEVBQUttVSxRQUFRLENBQUN0UixFQUFTb0QsRUFBUXBHLEdBR3hDbVIsS0FBTixNQUFXbk8sR0FDRixNQUFNN0MsRUFBS29VLFFBQVEsQ0FBQ3ZSLEdBR3ZCa0wsVUFBTixNQUFnQmxMLEVBQVNoRCxJQUNoQixNQUFNRyxFQUFLcVUsaUJBQWlCLENBQUN4UixFQUFTaEQsR0FHekN5VSxPQUFOLE1BQWF6UixFQUFTSSxFQUFRZ0QsRUFBUXNDLElBQzdCLE1BQU12SSxFQUFLdVUsVUFBVSxDQUFDMVIsRUFBU0ksRUFBUWdELEVBQVFzQyxFQUUxRCxDQUNGLEVBRUFoRSxNQUFPLENBQ0N2QyxRQUFOLE1BQWNpQixHQUNMLE1BQU1qRCxFQUFLK1IsWUFBWSxDQUFDOU8sRUFFbkMsRUFFQWxDLFNBQVUsQ0FDRnFNLE9BQU4sTUFBYXJMLEVBQVdsQyxJQUNmLE1BQU1HLEVBQUt3VSxhQUFhLENBQUN6UyxFQUFXbEMsR0FHN0M2SixPQUFRLENBQ044RSxLQUFNLENBQ0V4TixHQUFOLE1BQVNBLEVBQUl1SCxJQUNKLE1BQU12SSxFQUFLeVUsYUFBYSxDQUFDelQsRUFBSXVILEdBR2hDekksTUFBTixNQUFZa0IsRUFBSWxCLElBQ1AsTUFBTUUsRUFBSzBVLHNCQUFzQixDQUFDMVQsRUFBSWxCLEVBRWpELENBQ0YsRUFFQStNLEtBQU0sQ0FDSjJCLEtBQU0sQ0FDRXhOLEdBQU4sTUFBU0MsRUFBV3BCLElBQ1gsTUFBTUcsRUFBSzJVLFdBQVcsQ0FBQzFULEVBQVdwQixHQUdyQ0MsTUFBTixNQUFZa0IsRUFBSWxCLEVBQU9ELElBQ2QsTUFBTUcsRUFBSzRVLG9CQUFvQixDQUFDNVQsRUFBSWxCLEVBQU9ELEVBRXRELENBQ0YsRUFFTWdWLFFBQU4sTUFBYzVULEVBQVduQixFQUFPRCxJQUN2QixNQUFNRyxFQUFLOFUsY0FBYyxDQUFDN1QsRUFBV25CLEVBQU9ELEdBR3JEdUgsSUFBSyxDQUNHcEYsUUFBTixNQUFjRCxHQUNMLE1BQU0vQixFQUFLK1Usa0JBQWtCLENBQUNoVCxHQUdqQzJDLE1BQU4sTUFBWTdCLEdBQ0gsTUFBTTdDLEVBQUtnVixnQkFBZ0IsQ0FBQ25TLEdBRy9CM0IsUUFBTixNQUFjRCxFQUFXbkIsRUFBT3FCLEVBQVd0QixJQUNsQyxNQUFNRyxFQUFLaVYsaUJBQWlCLENBQUNoVSxFQUFXbkIsRUFBT3FCLEVBQVd0QixHQUduRTJPLEtBQU0sQ0FDRXhOLEdBQU4sTUFBU0MsR0FDQSxNQUFNakIsRUFBS2tWLFVBQVUsQ0FBQ2pVLEdBR3pCbkIsTUFBTixNQUFZbUIsRUFBV25CLElBQ2QsTUFBTUUsRUFBS21WLG1CQUFtQixDQUFDbFUsRUFBV25CLEVBRXJELENBQ0YsRUFFQXNDLFNBQVUsQ0FDRnNILE9BQU4sTUFBYXpJLEVBQVduQixFQUFPcUIsRUFBV3RCLElBQ2pDLE1BQU1HLEVBQUtvVixvQkFBb0IsQ0FBQ25VLEVBQVduQixFQUFPcUIsRUFBV3RCLEdBSXRFZ04sS0FBTS9FLE9BQU91TixNQUFNLENBRWhCLE1BQU9wVSxFQUFXbkIsRUFBT3FCLEVBQVd0QixJQUM1QixNQUFNRyxFQUFLc1Ysa0JBQWtCLENBQUNyVSxFQUFXbkIsRUFBT3FCLEVBQVd0QixHQUdwRSxDQUNFeUIsU0FBVSxNQUFPTCxFQUFXbkIsRUFBT0QsSUFDMUIsTUFBTUcsRUFBS3VWLDBCQUEwQixDQUFDdFUsRUFBV25CLEVBQU9ELEVBRW5FLEVBRUosQ0FDRixFQUVNbVUsUUFBTixNQUFjblIsRUFBU0ksRUFBUWdELEVBQVFzQyxJQUM5QixNQUFNdkksRUFBSzJNLEdBQUcsQ0FBQzNNLEVBQUtjLE1BQU0sQ0FBQzZDLE1BQU0sQ0FBQ29DLEtBQUssQ0FBQ1YsTUFBTSxDQUFDeEMsRUFBU0ksRUFBUWdELEdBQVMsQ0FBRXNDLE9BQUFBLENBQU8sR0FHckZpTixnQkFBTixNQUFzQnpULEVBQVdrQixJQUN4QixNQUFNakQsRUFBSzJNLEdBQUcsQ0FBQzNNLEVBQUtjLE1BQU0sQ0FBQ2UsUUFBUSxDQUFDYSxPQUFPLENBQUNNLElBQUksQ0FBQ2pCLEVBQVdrQixJQUcvRDJNLGtCQUFOLE1BQXdCL00sRUFBU2hELElBQ3hCLE1BQU1HLEVBQUt5TSxJQUFJLENBQTRCek0sRUFBS2MsTUFBTSxDQUFDNkMsTUFBTSxDQUFDQyxPQUFPLENBQUNHLEtBQUssQ0FBQ2xCLEdBQVVoRCxHQUd6RndOLGNBQU4sTUFBb0J4SyxFQUFTaEQsSUFDcEIsTUFBTUcsRUFBS3lNLElBQUksQ0FBaUJ6TSxFQUFLYyxNQUFNLENBQUM2QyxNQUFNLENBQUM5QixRQUFRLENBQUNnQixHQUFVaEQsR0FHekUyUCxZQUFOLE1BQWtCM00sRUFBU2hELElBQ2xCLE1BQU1HLEVBQUt5TSxJQUFJLENBQWV6TSxFQUFLYyxNQUFNLENBQUM2QyxNQUFNLENBQUNPLE1BQU0sQ0FBQ3JCLEdBQVVoRCxHQUdyRXlTLCtCQUFOLE1BQXFDM0wsR0FDNUIsTUFBTTNHLEVBQUt5TSxJQUFJLENBQTRCek0sRUFBS2MsTUFBTSxDQUFDdUYsWUFBWSxDQUFDQyxRQUFRLENBQUNBLFFBQVEsQ0FBQ3RHLEVBQUtDLGFBQWEsRUFBRzBHLEdBRzlHc0osWUFBTixNQUFrQnBRLEdBQ1QsTUFBTUcsRUFBS3lNLElBQUksQ0FBZXpNLEVBQUtjLE1BQU0sQ0FBQzZDLE1BQU0sQ0FBQ2hCLEdBQUcsR0FBSTlDLEdBRzNEMFMsOEJBQU4sTUFBb0M1TCxFQUFTOUQsSUFDcEMsTUFBTTdDLEVBQUt5TSxJQUFJLENBQTRCek0sRUFBS2MsTUFBTSxDQUFDdUYsWUFBWSxDQUFDQyxRQUFRLENBQUMzQyxNQUFNLENBQUNoQixHQUFHLENBQUMzQyxFQUFLQyxhQUFhLENBQUU0QyxHQUFVOEQsR0FHekh1SyxvQkFBTixNQUEwQnJPLEVBQVNoRCxJQUMxQixNQUFNRyxFQUFLeU0sSUFBSSxDQUFrQnpNLEVBQUtjLE1BQU0sQ0FBQzZDLE1BQU0sQ0FBQ3dDLFNBQVMsQ0FBQ3hELEdBQUcsQ0FBQ0UsR0FBVWhELEdBRy9FK04sa0JBQU4sTUFBd0I3TCxFQUFXbEMsSUFDMUIsTUFBTUcsRUFBS3lNLElBQUksQ0FBaUJ6TSxFQUFLYyxNQUFNLENBQUNlLFFBQVEsQ0FBQ0ssS0FBSyxDQUFDSCxHQUFZbEMsR0FHMUVnUixhQUFOLE1BQW1COU8sRUFBV2xDLEVBQVUsQ0FBQyxDQUFDLEdBQ2pDLE1BQU1HLEVBQUt5TSxJQUFJLENBQWdCek0sRUFBS2MsTUFBTSxDQUFDZSxRQUFRLENBQUNNLE9BQU8sQ0FBQ0osR0FBWWxDLEdBRzNFb1UsV0FBTixNQUFpQnBSLEVBQVNoRCxFQUFTMEksSUFDMUIsTUFBTXZJLEVBQUt5TSxJQUFJLENBQWN6TSxFQUFLYyxNQUFNLENBQUM2QyxNQUFNLENBQUNvQyxLQUFLLENBQUNwRCxHQUFHLENBQUNFLEdBQVUsQ0FDekUsR0FBR2hELENBQU8sQ0FDVjBJLE9BQUFBLENBQ0YsR0FHSThILHFCQUFOLE1BQTJCeE4sRUFBU2hELElBQzNCLE1BQU1HLEVBQUt5TSxJQUFJLENBQXdCek0sRUFBS2MsTUFBTSxDQUFDNkMsTUFBTSxDQUFDUSxNQUFNLENBQUNBLE1BQU0sQ0FBQ3RCLEdBQVVoRCxHQUdyRnNPLG9CQUFOLE1BQTBCdE8sR0FDakIsTUFBTUcsRUFBS3lNLElBQUksQ0FBdUJ6TSxFQUFLYyxNQUFNLENBQUNlLFFBQVEsQ0FBQ1csTUFBTSxHQUFJM0MsR0FHeEUyVSxjQUFOLE1BQW9CelMsRUFBV2xDLElBQ3RCLE1BQU1HLEVBQUt5TSxJQUFJLENBQWlCek0sRUFBS2MsTUFBTSxDQUFDZSxRQUFRLENBQUNkLFFBQVEsQ0FBQ2dCLEdBQVksQ0FDL0VnSCxLQUFNbEosRUFBUWtKLElBQUksQ0FDbEIwTSxPQUFRNVYsRUFBUTRWLE1BQU0sQ0FBRyxNQUFNaFcsRUFBWUksRUFBUTRWLE1BQU0sRUFBSWhVLEtBQUFBLENBQVMsQ0FDdEU4RyxPQUFRMUksRUFBUTBJLE1BQU0sQUFDeEIsR0FHSXNILGtCQUFOLE1BQXdCaE4sRUFBU2lCLEVBQVF5RSxJQUNoQyxNQUFNdkksRUFBSzBKLE1BQU0sQ0FBQzFKLEVBQUtjLE1BQU0sQ0FBQzZDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDQyxJQUFJLENBQUNoQixFQUFTaUIsR0FBUyxDQUFFeUUsT0FBQUEsQ0FBTyxHQUdoRitFLGNBQU4sTUFBb0J2TCxFQUFXd0csSUFDdEIsTUFBTXZJLEVBQUswSixNQUFNLENBQUMxSixFQUFLYyxNQUFNLENBQUNlLFFBQVEsQ0FBQ0csT0FBTyxDQUFDRCxHQUFZLENBQ2hFd0csT0FBQUEsQ0FDRixHQUdJdUYsZ0NBQU4sTUFBc0MvTCxFQUFXTyxFQUFhaUcsSUFDckQsTUFBTXZJLEVBQUswSixNQUFNLENBQUMxSixFQUFLYyxNQUFNLENBQUNlLFFBQVEsQ0FBQ1EsU0FBUyxDQUFDTixFQUFXTyxHQUFjaUcsRUFBUyxDQUFFQSxPQUFBQSxDQUFPLEVBQUk5RyxLQUFBQSxDQUFTLEVBRzVHZ08sWUFBTixNQUFrQjVNLEVBQVM3QixFQUFJdUgsSUFDdEIsTUFBTXZJLEVBQUswSixNQUFNLENBQUMxSixFQUFLYyxNQUFNLENBQUM2QyxNQUFNLENBQUNLLEtBQUssQ0FBQ25CLEVBQVM3QixHQUFLLENBQUV1SCxPQUFBQSxDQUFPLEdBR3JFa0wsc0JBQU4sTUFBNEIzVCxFQUFPcUIsSUFDMUIsTUFBTW5CLEVBQUswSixNQUFNLENBQUMxSixFQUFLYyxNQUFNLENBQUN1RixZQUFZLENBQUNPLFNBQVMsQ0FBQzFGLE9BQU8sQ0FBQ2xCLEVBQUtDLGFBQWEsQ0FBRUgsRUFBT3FCLElBRzNGcVIsK0JBQU4sTUFBcUNqTSxHQUM1QixNQUFNdkcsRUFBSzBKLE1BQU0sQ0FBQzFKLEVBQUtjLE1BQU0sQ0FBQ3VGLFlBQVksQ0FBQ0MsUUFBUSxDQUFDSyxPQUFPLENBQUMzRyxFQUFLQyxhQUFhLENBQUVzRyxJQUduRjRKLFlBQU4sTUFBa0J0TixHQUNULE1BQU03QyxFQUFLMEosTUFBTSxDQUFDMUosRUFBS2MsTUFBTSxDQUFDNkMsTUFBTSxDQUFDZSxLQUFLLENBQUM3QixJQUc5QzRQLDhCQUFOLE1BQW9DbE0sRUFBVzFELElBQ3RDLE1BQU03QyxFQUFLMEosTUFBTSxDQUFDMUosRUFBS2MsTUFBTSxDQUFDdUYsWUFBWSxDQUFDQyxRQUFRLENBQUMzQyxNQUFNLENBQUNxQyxHQUFHLENBQUNoRyxFQUFLQyxhQUFhLENBQUU0QyxFQUFTMEQsSUFHL0Y2SyxvQkFBTixNQUEwQnZPLEVBQVNzTyxJQUMxQixNQUFNblIsRUFBSzBKLE1BQU0sQ0FBQzFKLEVBQUtjLE1BQU0sQ0FBQzZDLE1BQU0sQ0FBQ3dDLFNBQVMsQ0FBQ3pCLEtBQUssQ0FBQzdCLEVBQVNzTyxJQUdqRVAsa0JBQU4sTUFBd0IvTixFQUFTZ0MsSUFDeEIsTUFBTTdFLEVBQUswSixNQUFNLENBQUMxSixFQUFLYyxNQUFNLENBQUM2QyxNQUFNLENBQUNpQixXQUFXLENBQUMvQixFQUFTZ0MsSUFHN0RpTSxhQUFOLE1BQW1COUwsRUFBWXVELElBQ3RCLE1BQU12SSxFQUFLMEosTUFBTSxDQUFDMUosRUFBS2MsTUFBTSxDQUFDNkMsTUFBTSxDQUFDb0IsTUFBTSxDQUFDQyxHQUFhdUQsRUFBUyxDQUFFQSxPQUFBQSxDQUFPLEVBQUk5RyxLQUFBQSxDQUFTLEVBRzNGbUwsY0FBTixNQUFvQjdLLEVBQVdaLEVBQVdvSCxJQUNqQyxNQUFNdkksRUFBSzBKLE1BQU0sQ0FBQzFKLEVBQUtjLE1BQU0sQ0FBQ2UsUUFBUSxDQUFDWCxPQUFPLENBQUNhLEVBQVdaLEdBQVksQ0FBRW9ILE9BQUFBLENBQU8sR0FHbEZtTCxrQ0FBTixNQUF3QzVULEdBQy9CLE1BQU1FLEVBQUswSixNQUFNLENBQUMxSixFQUFLYyxNQUFNLENBQUN1RixZQUFZLENBQUNPLFNBQVMsQ0FBQ3RGLFFBQVEsQ0FBQ3RCLEVBQUtDLGFBQWEsQ0FBRUgsSUFHckZvVSxXQUFOLE1BQWlCclIsRUFBU29ELElBQ2pCLE1BQU1qRyxFQUFLMEosTUFBTSxDQUFDMUosRUFBS2MsTUFBTSxDQUFDNkMsTUFBTSxDQUFDb0MsS0FBSyxDQUFDQyxHQUFHLENBQUNuRCxFQUFTb0QsSUFHM0RxSyxxQkFBTixNQUEyQnpOLEVBQVN5QixJQUMzQixNQUFNdEUsRUFBSzBKLE1BQU0sQ0FBQzFKLEVBQUtjLE1BQU0sQ0FBQzZDLE1BQU0sQ0FBQ1EsTUFBTSxDQUFDRSxLQUFLLENBQUN4QixFQUFTeUIsSUFHOUQ4SixvQkFBTixNQUEwQnJNLEVBQVd3RyxJQUM1QixNQUFNdkksRUFBSzBKLE1BQU0sQ0FBQzFKLEVBQUtjLE1BQU0sQ0FBQ2UsUUFBUSxDQUFDWSxLQUFLLENBQUNWLEdBQVl3RyxFQUFTLENBQUVBLE9BQUFBLENBQU8sRUFBSTlHLEtBQUFBLENBQVMsRUFHM0ZnVCxjQUFOLE1BQW9CeFQsRUFBV3NILElBQ3RCLE1BQU12SSxFQUFLMEosTUFBTSxDQUFDMUosRUFBS2MsTUFBTSxDQUFDQyxRQUFRLENBQUNDLEVBQUUsQ0FBQ0MsR0FBWSxDQUFFc0gsT0FBQUEsQ0FBTyxHQUdsRTZNLHFCQUFOLE1BQTJCblUsRUFBV25CLEVBQU9xQixFQUFXdEIsSUFDL0MsTUFBTUcsRUFBSzBKLE1BQU0sQ0FBQzFKLEVBQUtjLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDRyxPQUFPLENBQUNELEVBQVduQixFQUFPcUIsRUFBV3RCLElBRy9FNlUsdUJBQU4sTUFBNkJ6VCxFQUFXbkIsSUFDL0IsTUFBTUUsRUFBSzBKLE1BQU0sQ0FBQzFKLEVBQUtjLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDUSxPQUFPLENBQUNOLEVBQVduQixJQUc3RCtTLGtDQUFOLE1BQXdDaFEsRUFBUzBELEVBQVdxTSxFQUFhL1MsSUFDaEUsTUFBTUcsRUFBSzJNLEdBQUcsQ0FDbkIzTSxFQUFLYyxNQUFNLENBQUN1RixZQUFZLENBQUNDLFFBQVEsQ0FBQ0ksVUFBVSxDQUFDMUcsRUFBS0MsYUFBYSxDQUFFNEMsRUFBUzBELEdBQzFFLENBQ0VFLFlBQWE1RyxDQUNmLEVBQ0EsQ0FDRW9JLFFBQVMsQ0FBRUUsY0FBZSxDQUFDLE9BQU8sRUFBRXlLLEVBQVksQ0FBQyxBQUFDLENBQ3BELEdBSUU5QyxnQkFBTixNQUFzQmpOLEVBQVNpQixFQUFRakUsSUFDOUIsTUFBTUcsRUFBSzBNLEtBQUssQ0FBNEIxTSxFQUFLYyxNQUFNLENBQUM2QyxNQUFNLENBQUNDLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDaEIsRUFBU2lCLEdBQVNqRSxHQUd2RyxNQUFNNlYsZUFBZTdWLENBQU8sQ0FBRSxDQUM1QixJQUFNNFYsRUFBUzVWLEdBQVM4VixhQUFlLE1BQU1sVyxFQUFZSSxHQUFTOFYsY0FBZ0I5VixHQUFTOFYsWUFBWSxDQUV2RyxPQUFPLE1BQU0zVixFQUFLME0sS0FBSyxDQUFjMU0sRUFBS2MsTUFBTSxDQUFDaUcsT0FBTyxHQUFJLENBQzFENk8sU0FBVS9WLEVBQVErVixRQUFRLEVBQUVDLE9BQzVCSixPQUFBQSxDQUNGLEVBQ0YsRUFFTWxJLFlBQU4sTUFBa0J4TCxFQUFXbEMsSUFDcEIsTUFBTUcsRUFBSzBNLEtBQUssQ0FBaUIxTSxFQUFLYyxNQUFNLENBQUNlLFFBQVEsQ0FBQ0csT0FBTyxDQUFDRCxHQUFZbEMsR0FHN0VnTywrQkFBTixNQUFxQzlMLEVBQVdsQyxJQUN2QyxNQUFNRyxFQUFLMk0sR0FBRyxDQUFDM00sRUFBS2MsTUFBTSxDQUFDZSxRQUFRLENBQUNRLFNBQVMsQ0FBQ04sRUFBV2xDLEVBQVFtQixFQUFFLEVBQUduQixHQUd6RW9PLHFCQUFOLE1BQTJCcEwsRUFBU21MLElBQzNCLE1BQU1oTyxFQUFLME0sS0FBSyxDQUFDMU0sRUFBS2MsTUFBTSxDQUFDNkMsTUFBTSxDQUFDOUIsUUFBUSxDQUFDZ0IsR0FBVW1MLEdBRzFEMEIsVUFBTixNQUFnQjdNLEVBQVM3QixFQUFJbkIsSUFDcEIsTUFBTUcsRUFBSzBNLEtBQUssQ0FBZTFNLEVBQUtjLE1BQU0sQ0FBQzZDLE1BQU0sQ0FBQ0ssS0FBSyxDQUFDbkIsRUFBUzdCLEdBQUtuQixHQUd6RThULG9CQUFOLE1BQTBCN1QsRUFBT3FCLEVBQVd0QixJQUNuQyxNQUFNRyxFQUFLME0sS0FBSyxDQUFpQjFNLEVBQUtjLE1BQU0sQ0FBQ3VGLFlBQVksQ0FBQ08sU0FBUyxDQUFDMUYsT0FBTyxDQUFDbEIsRUFBS0MsYUFBYSxDQUFFSCxFQUFPcUIsR0FBWXRCLEdBR3RINlMsNkJBQU4sTUFBbUNuTSxFQUFXMUcsSUFDckMsTUFBTUcsRUFBSzBNLEtBQUssQ0FBNEIxTSxFQUFLYyxNQUFNLENBQUN1RixZQUFZLENBQUNDLFFBQVEsQ0FBQ0ssT0FBTyxDQUFDM0csRUFBS0MsYUFBYSxDQUFFc0csR0FBWTFHLEdBR3pIOFMsNEJBQU4sTUFBa0NwTSxFQUFXMUQsRUFBU2hELElBQzdDLE1BQU1HLEVBQUswTSxLQUFLLENBQ3JCMU0sRUFBS2MsTUFBTSxDQUFDdUYsWUFBWSxDQUFDQyxRQUFRLENBQUMzQyxNQUFNLENBQUNxQyxHQUFHLENBQUNoRyxFQUFLQyxhQUFhLENBQUU0QyxFQUFTMEQsR0FDMUUxRyxHQUlFd1Isa0JBQU4sTUFBd0J4TyxFQUFvQnNPLEVBQXNCdFIsSUFDekQsTUFBTUcsRUFBSzBNLEtBQUssQ0FBa0IxTSxFQUFLYyxNQUFNLENBQUM2QyxNQUFNLENBQUN3QyxTQUFTLENBQUN6QixLQUFLLENBQUM3QixFQUFTc08sR0FBZXRSLEdBR2hHaU4sWUFBTixNQUFrQi9LLEVBQVdaLEVBQVd0QixJQUMvQixNQUFNRyxFQUFLME0sS0FBSyxDQUFpQjFNLEVBQUtjLE1BQU0sQ0FBQ2UsUUFBUSxDQUFDWCxPQUFPLENBQUNhLEVBQVdaLEdBQVl0QixHQUd4RitULGdDQUFOLE1BQXNDOVQsRUFBT0QsSUFDcEMsTUFBTUcsRUFBSzBNLEtBQUssQ0FBaUIxTSxFQUFLYyxNQUFNLENBQUN1RixZQUFZLENBQUNPLFNBQVMsQ0FBQ3RGLFFBQVEsQ0FBQ3RCLEVBQUtDLGFBQWEsQ0FBRUgsR0FBUUQsR0FHNUcwViwyQkFBTixNQUFpQ3RVLEVBQVduQixFQUFPRCxJQUMxQyxNQUFNRyxFQUFLME0sS0FBSyxDQUFpQjFNLEVBQUtjLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDTyxRQUFRLENBQUNMLEVBQVduQixFQUFPRCxHQUFVLENBQ2hHaVcsS0FBTTVXLEVBQXlCNlcsYUFBYSxDQUM1QzFILEtBQU14TyxDQUNSLEdBR0kwUSxtQkFBTixNQUF5QjFOLEVBQVN5QixFQUFTekUsSUFDbEMsTUFBTUcsRUFBSzBNLEtBQUssQ0FBd0IxTSxFQUFLYyxNQUFNLENBQUM2QyxNQUFNLENBQUNRLE1BQU0sQ0FBQ0UsS0FBSyxDQUFDeEIsRUFBU3lCLEdBQVV6RSxHQUc5RnNVLFNBQU4sTUFBZXRSLEVBQVNvRCxFQUFRcEcsSUFDdkIsTUFBTUcsRUFBSzBNLEtBQUssQ0FBYzFNLEVBQUtjLE1BQU0sQ0FBQzZDLE1BQU0sQ0FBQ29DLEtBQUssQ0FBQ0MsR0FBRyxDQUFDbkQsRUFBU29ELEdBQVNwRyxHQUdoRndVLGtCQUFOLE1BQXdCeFIsRUFBU2hELElBQ3hCLE1BQU1HLEVBQUswTSxLQUFLLENBQWdCMU0sRUFBS2MsTUFBTSxDQUFDNkMsTUFBTSxDQUFDb0MsS0FBSyxDQUFDcEQsR0FBRyxDQUFDRSxHQUFVaEQsR0FHMUV5TyxrQkFBTixNQUF3QnZNLEVBQVdzTSxJQUMxQixNQUFNck8sRUFBSzBNLEtBQUssQ0FBdUIxTSxFQUFLYyxNQUFNLENBQUNlLFFBQVEsQ0FBQ1ksS0FBSyxDQUFDVixHQUFZLENBQUVpVSxNQUFPM0gsRUFBSzJILEtBQUssQUFBQyxHQUdyR3JCLFlBQU4sTUFBa0IxVCxFQUFXcEIsSUFDcEIsTUFBTUcsRUFBSzBNLEtBQUssQ0FBaUIxTSxFQUFLYyxNQUFNLENBQUNDLFFBQVEsQ0FBQ0MsRUFBRSxDQUFDQyxHQUFZcEIsR0FHeEV5VixtQkFBTixNQUF5QnJVLEVBQVduQixFQUFPcUIsRUFBV3RCLElBQzdDLE1BQU1HLEVBQUswTSxLQUFLLENBQWlCMU0sRUFBS2MsTUFBTSxDQUFDQyxRQUFRLENBQUNHLE9BQU8sQ0FBQ0QsRUFBV25CLEVBQU9xQixFQUFXdEIsR0FBVSxDQUMxR2lXLEtBQU01VyxFQUF5QjZXLGFBQWEsQ0FDNUMxSCxLQUFNeE8sQ0FDUixHQUdJK1UscUJBQU4sTUFBMkIzVCxFQUFXbkIsRUFBT0QsSUFDcEMsTUFBTUcsRUFBSzBNLEtBQUssQ0FBaUIxTSxFQUFLYyxNQUFNLENBQUNDLFFBQVEsQ0FBQ1EsT0FBTyxDQUFDTixFQUFXbkIsR0FBUUQsR0FHcEZpVixlQUFOLE1BQXFCN1QsRUFBV25CLEVBQU9ELElBQzlCLE1BQU1HLEVBQUt5TSxJQUFJLENBQWlCek0sRUFBS2MsTUFBTSxDQUFDQyxRQUFRLENBQUNRLE9BQU8sQ0FBQ04sRUFBV25CLEVBQU9ELEdBQVVBLEdBRzVGNk4sbUJBQU4sTUFBeUJGLEVBQWlCQyxJQUNqQyxNQUFNek4sRUFBS3lNLElBQUksQ0FBeUJ6TSxFQUFLYyxNQUFNLENBQUNlLFFBQVEsQ0FBQ0ksTUFBTSxDQUFDdUwsR0FBa0IsQ0FDM0Z5SSxtQkFBb0J4SSxDQUN0QixHQUdJbUIsaUJBQU4sTUFBdUIvTCxHQUNkLE1BQU03QyxFQUFLb0gsR0FBRyxDQUEyQnBILEVBQUtjLE1BQU0sQ0FBQ2UsUUFBUSxDQUFDYSxPQUFPLENBQUNFLE1BQU0sQ0FBQ0MsSUFHaEZxUSxnQ0FBTixNQUFzQ3JRLEVBQVMwRCxJQUN0QyxNQUFNdkcsRUFBS29ILEdBQUcsQ0FDbkJwSCxFQUFLYyxNQUFNLENBQUN1RixZQUFZLENBQUNDLFFBQVEsQ0FBQ0ksVUFBVSxDQUFDMUcsRUFBS0MsYUFBYSxDQUFFNEMsRUFBUzBELElBSXhFNE0saUNBQU4sTUFBdUN0USxHQUM5QixNQUFNN0MsRUFBS29ILEdBQUcsQ0FBeUNwSCxFQUFLYyxNQUFNLENBQUN1RixZQUFZLENBQUNDLFFBQVEsQ0FBQ0csV0FBVyxDQUFDekcsRUFBS0MsYUFBYSxDQUFFNEMsSUFHNUhxVCxtQkFBTixTQUNTLE1BQU1sVyxFQUFLb0gsR0FBRyxDQUFxQnBILEVBQUtjLE1BQU0sQ0FBQ2tHLGlCQUFpQixJQUduRStJLGVBQU4sTUFBcUJsTixFQUFTaUIsSUFDckIsTUFBTTlELEVBQUtvSCxHQUFHLENBQTRCcEgsRUFBS2MsTUFBTSxDQUFDNkMsTUFBTSxDQUFDQyxPQUFPLENBQUNDLElBQUksQ0FBQ2hCLEVBQVNpQixJQUd0RmtNLGdCQUFOLE1BQXNCbk4sR0FDYixNQUFNN0MsRUFBS29ILEdBQUcsQ0FBOEJwSCxFQUFLYyxNQUFNLENBQUM2QyxNQUFNLENBQUNDLE9BQU8sQ0FBQ0csS0FBSyxDQUFDbEIsSUFHaEZzSyxXQUFOLE1BQWlCbk0sR0FDUixNQUFNaEIsRUFBS29ILEdBQUcsQ0FBaUJwSCxFQUFLYyxNQUFNLENBQUNlLFFBQVEsQ0FBQ0csT0FBTyxDQUFDaEIsSUFHL0RrTixrQkFBTixNQUF3Qm5NLEdBQ2YsTUFBTS9CLEVBQUtvSCxHQUFHLENBQTBCcEgsRUFBS2MsTUFBTSxDQUFDZSxRQUFRLENBQUNNLE9BQU8sQ0FBQ0osSUFHeEVtTyxZQUFOLE1BQWtCck4sR0FDVCxNQUFNN0MsRUFBS29ILEdBQUcsQ0FBbUJwSCxFQUFLYyxNQUFNLENBQUM2QyxNQUFNLENBQUM5QixRQUFRLENBQUNnQixJQUdoRWtTLG1CQUFOLE1BQXlCaFQsR0FDaEIsTUFBTS9CLEVBQUtvSCxHQUFHLENBQW1CcEgsRUFBS2MsTUFBTSxDQUFDZSxRQUFRLENBQUNkLFFBQVEsQ0FBQ2dCLElBR2xFZ1EsYUFBTixNQUFtQjlPLEdBQ1YsTUFBTWpELEVBQUt5TSxJQUFJLENBQWlCek0sRUFBS2MsTUFBTSxDQUFDZSxRQUFRLENBQUNDLEVBQUUsR0FBSSxDQUNoRXFVLGFBQWNsVCxFQUFPdkIsUUFBUSxFQUMvQixHQUdJaU8sU0FBTixNQUFlOU0sRUFBU29CLElBQ2YsTUFBTWpFLEVBQUtvSCxHQUFHLENBQWVwSCxFQUFLYyxNQUFNLENBQUM2QyxNQUFNLENBQUNLLEtBQUssQ0FBQ25CLEVBQVNvQixJQUdsRW1NLFVBQU4sTUFBZ0J2TixHQUNQLE1BQU03QyxFQUFLb0gsR0FBRyxDQUFpQnBILEVBQUtjLE1BQU0sQ0FBQzZDLE1BQU0sQ0FBQ08sTUFBTSxDQUFDckIsSUFHNURnUixtQkFBTixNQUF5Qi9ULEVBQU9xQixJQUN2QixNQUFNbkIsRUFBS29ILEdBQUcsQ0FBaUJwSCxFQUFLYyxNQUFNLENBQUN1RixZQUFZLENBQUNPLFNBQVMsQ0FBQzFGLE9BQU8sQ0FBQ2xCLEVBQUtDLGFBQWEsQ0FBRUgsRUFBT3FCLElBR3hHaVYsY0FBTixTQUNTLE1BQU1wVyxFQUFLb0gsR0FBRyxDQUF1QnBILEVBQUtjLE1BQU0sQ0FBQ2MsVUFBVSxJQUc5RG1SLDRCQUFOLE1BQWtDeE0sR0FDekIsTUFBTXZHLEVBQUtvSCxHQUFHLENBQTRCcEgsRUFBS2MsTUFBTSxDQUFDdUYsWUFBWSxDQUFDQyxRQUFRLENBQUNLLE9BQU8sQ0FBQzNHLEVBQUtDLGFBQWEsQ0FBRXNHLElBRzNHdU0sNkJBQU4sU0FDUyxNQUFNOVMsRUFBS29ILEdBQUcsQ0FBOEJwSCxFQUFLYyxNQUFNLENBQUN1RixZQUFZLENBQUNDLFFBQVEsQ0FBQ0EsUUFBUSxDQUFDdEcsRUFBS0MsYUFBYSxHQUc1R2dULDJCQUFOLE1BQWlDMU0sRUFBVzFELElBQ25DLE1BQU03QyxFQUFLb0gsR0FBRyxDQUE0QnBILEVBQUtjLE1BQU0sQ0FBQ3VGLFlBQVksQ0FBQ0MsUUFBUSxDQUFDM0MsTUFBTSxDQUFDcUMsR0FBRyxDQUFDaEcsRUFBS0MsYUFBYSxDQUFFNEMsRUFBUzBELElBR3ZIeU0sNEJBQU4sTUFBa0NuUSxHQUN6QixNQUFNN0MsRUFBS29ILEdBQUcsQ0FBOEJwSCxFQUFLYyxNQUFNLENBQUN1RixZQUFZLENBQUNDLFFBQVEsQ0FBQzNDLE1BQU0sQ0FBQ2hCLEdBQUcsQ0FBQzNDLEVBQUtDLGFBQWEsQ0FBRTRDLElBR2hIeU8saUJBQU4sTUFBdUJILEdBQ2QsTUFBTW5SLEVBQUtvSCxHQUFHLENBQWtCcEgsRUFBS2MsTUFBTSxDQUFDNkMsTUFBTSxDQUFDd0MsU0FBUyxDQUFDQyxJQUFJLENBQUMrSyxJQUdyRUksa0JBQU4sTUFBd0IxTyxHQUNmLE1BQU03QyxFQUFLb0gsR0FBRyxDQUFvQnBILEVBQUtjLE1BQU0sQ0FBQzZDLE1BQU0sQ0FBQ3dDLFNBQVMsQ0FBQ3hELEdBQUcsQ0FBQ0UsSUFHdEVtUyxpQkFBTixNQUF1Qm5TLEdBQ2QsTUFBTTdDLEVBQUtvSCxHQUFHLENBQW1CcEgsRUFBS2MsTUFBTSxDQUFDNkMsTUFBTSxDQUFDNUMsUUFBUSxDQUFDOEIsSUFHaEU4TixnQkFBTixNQUFzQjlOLEdBQ2IsTUFBTTdDLEVBQUtvSCxHQUFHLENBQXVCcEgsRUFBS2MsTUFBTSxDQUFDNkMsTUFBTSxDQUFDbUIsWUFBWSxDQUFDakMsSUFHeEVrTyxVQUFOLE1BQWdCL0wsRUFBWW5GLElBQ25CLE1BQU1HLEVBQUtvSCxHQUFHLENBQXdCcEgsRUFBS2MsTUFBTSxDQUFDNkMsTUFBTSxDQUFDb0IsTUFBTSxDQUFDQyxFQUFZbkYsSUFHL0VvUixXQUFOLE1BQWlCcE8sR0FDUixNQUFNN0MsRUFBS29ILEdBQUcsQ0FBMEJwSCxFQUFLYyxNQUFNLENBQUM2QyxNQUFNLENBQUN4QixPQUFPLENBQUNVLElBR3RFd1QscUJBQU4sU0FDUyxNQUFNclcsRUFBS29ILEdBQUcsQ0FBdUJwSCxFQUFLYyxNQUFNLENBQUNtRyxpQkFBaUIsSUFHckU2TSwrQkFBTixNQUFxQ2hVLEdBQzVCLE1BQU1FLEVBQUtvSCxHQUFHLENBQWlCcEgsRUFBS2MsTUFBTSxDQUFDdUYsWUFBWSxDQUFDTyxTQUFTLENBQUN0RixRQUFRLENBQUN0QixFQUFLQyxhQUFhLENBQUVILElBR2xHK08sMEJBQU4sTUFBZ0M5TSxFQUFXbEMsSUFDbEMsTUFBTUcsRUFBS29ILEdBQUcsQ0FBNkJwSCxFQUFLYyxNQUFNLENBQUNlLFFBQVEsQ0FBQ2EsT0FBTyxDQUFDYyxPQUFPLENBQUN6QixFQUFXbEMsSUFHOUZpUCxnQ0FBTixNQUFzQy9NLEVBQVdsQyxJQUN4QyxNQUFNRyxFQUFLb0gsR0FBRyxDQUE2QnBILEVBQUtjLE1BQU0sQ0FBQ2UsUUFBUSxDQUFDYSxPQUFPLENBQUNlLE1BQU0sQ0FBQzFCLEVBQVdsQyxJQUc3RmtQLHlCQUFOLE1BQStCaE4sRUFBV2xDLElBQ2pDLE1BQU1HLEVBQUtvSCxHQUFHLENBQTZCcEgsRUFBS2MsTUFBTSxDQUFDZSxRQUFRLENBQUNhLE9BQU8sQ0FBQ1MsTUFBTSxDQUFDcEIsRUFBV2xDLElBRzdGdVUsU0FBTixNQUFldlIsR0FDTixNQUFNN0MsRUFBS29ILEdBQUcsQ0FBZ0JwSCxFQUFLYyxNQUFNLENBQUM2QyxNQUFNLENBQUNvQyxLQUFLLENBQUNwRCxHQUFHLENBQUNFLElBRzlEMk4sa0JBQU4sTUFBd0IzTixFQUFTeUIsRUFBU3pFLElBQ2pDLE1BQU1HLEVBQUtvSCxHQUFHLENBQXdCcEgsRUFBS2MsTUFBTSxDQUFDNkMsTUFBTSxDQUFDUSxNQUFNLENBQUNFLEtBQUssQ0FBQ3hCLEVBQVN5QixFQUFTekUsR0FBU3VFLGdCQUdwR3FNLG1CQUFOLE1BQXlCNU4sRUFBU2hELElBQ3pCLE1BQU1HLEVBQUtvSCxHQUFHLENBQTBCcEgsRUFBS2MsTUFBTSxDQUFDNkMsTUFBTSxDQUFDUSxNQUFNLENBQUNBLE1BQU0sQ0FBQ3RCLEVBQVNoRCxHQUFTdUUsZ0JBRzlGc00sdUJBQU4sTUFBNkI3TixFQUFTeUIsRUFBU3pFLElBQ3RDLE1BQU1HLEVBQUtvSCxHQUFHLENBQXVEcEgsRUFBS2MsTUFBTSxDQUFDNkMsTUFBTSxDQUFDUSxNQUFNLENBQUNJLEtBQUssQ0FBQzFCLEVBQVN5QixFQUFTekUsSUFHMUh5VyxlQUFOLFNBQ1MsTUFBTXRXLEVBQUtvVyxhQUFhLEdBRzNCN0gsaUJBQU4sTUFBdUJ4TSxHQUNkLE1BQU0vQixFQUFLb0gsR0FBRyxDQUF1QnBILEVBQUtjLE1BQU0sQ0FBQ2UsUUFBUSxDQUFDWSxLQUFLLENBQUNWLElBR25FaU4sZ0JBQU4sTUFBc0JqTixFQUFXa0IsSUFDeEIsTUFBTWpELEVBQUtvSCxHQUFHLENBQXNCcEgsRUFBS2MsTUFBTSxDQUFDZSxRQUFRLENBQUNhLE9BQU8sQ0FBQ00sSUFBSSxDQUFDakIsRUFBV2tCLElBR3BGZ00saUJBQU4sTUFBdUJsTixHQUNkLE1BQU0vQixFQUFLb0gsR0FBRyxDQUF3QnBILEVBQUtjLE1BQU0sQ0FBQ2UsUUFBUSxDQUFDYSxPQUFPLENBQUNJLE9BQU8sQ0FBQ2YsSUFHOUV3VSxRQUFOLE1BQWN2VixHQUNMLE1BQU1oQixFQUFLb0gsR0FBRyxDQUFjcEgsRUFBS2MsTUFBTSxDQUFDa0MsSUFBSSxDQUFDaEMsSUFHaERrVSxXQUFOLE1BQWlCalUsR0FDUixNQUFNakIsRUFBS29ILEdBQUcsQ0FBaUJwSCxFQUFLYyxNQUFNLENBQUNDLFFBQVEsQ0FBQ0MsRUFBRSxDQUFDQyxJQUcxRGdVLGtCQUFOLE1BQXdCaFUsRUFBV25CLEVBQU9xQixFQUFXdEIsSUFDNUMsTUFBTUcsRUFBS29ILEdBQUcsQ0FBaUJwSCxFQUFLYyxNQUFNLENBQUNDLFFBQVEsQ0FBQ0csT0FBTyxDQUFDRCxFQUFXbkIsRUFBT3FCLEVBQVd0QixJQUc1RnNWLG9CQUFOLE1BQTBCbFUsRUFBV25CLElBQzVCLE1BQU1FLEVBQUtvSCxHQUFHLENBQWlCcEgsRUFBS2MsTUFBTSxDQUFDQyxRQUFRLENBQUNRLE9BQU8sQ0FBQ04sRUFBV25CLElBRzFFb1AsV0FBTixNQUFpQm5OLEdBQ1IsTUFBTS9CLEVBQUsyTSxHQUFHLENBQUMzTSxFQUFLYyxNQUFNLENBQUNlLFFBQVEsQ0FBQ2EsT0FBTyxDQUFDSyxFQUFFLENBQUNoQixJQUdsRHFOLFlBQU4sTUFBa0JyTixHQUNULE1BQU0vQixFQUFLMEosTUFBTSxDQUFDMUosRUFBS2MsTUFBTSxDQUFDZSxRQUFRLENBQUNhLE9BQU8sQ0FBQ0ssRUFBRSxDQUFDaEIsSUFHckRtTCxlQUFOLE1BQXFCbkwsRUFBV1osSUFDdkIsTUFBTW5CLEVBQUt5TSxJQUFJLENBQWlCek0sRUFBS2MsTUFBTSxDQUFDZSxRQUFRLENBQUNVLFNBQVMsQ0FBQ1IsRUFBV1osSUFHN0VvVCxXQUFOLE1BQWlCMVIsRUFBU0ksRUFBUWdELEVBQVFzQyxJQUNqQyxNQUFNdkksRUFBSzBKLE1BQU0sQ0FBQzFKLEVBQUtjLE1BQU0sQ0FBQzZDLE1BQU0sQ0FBQ29DLEtBQUssQ0FBQ1YsTUFBTSxDQUFDeEMsRUFBU0ksRUFBUWdELEdBQVMsQ0FBRXNDLE9BQUFBLENBQU8sR0FHeEYrRyxtQkFBTixNQUF5QnZOLEVBQVdrQixJQUMzQixNQUFNakQsRUFBSzBKLE1BQU0sQ0FBQzFKLEVBQUtjLE1BQU0sQ0FBQ2UsUUFBUSxDQUFDYSxPQUFPLENBQUNNLElBQUksQ0FBQ2pCLEVBQVdrQixJQUdsRXNRLG9CQUFOLE1BQTBCelQsRUFBT0QsSUFDeEIsTUFBTSxJQUFJMk0sUUFBUSxDQUFDZixFQUFTTixJQUFXLENBQzVDbkwsRUFBS3lLLFdBQVcsQ0FBQyxDQUNmckosSUFBS3BCLEVBQUtjLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDUSxPQUFPLENBQUN2QixFQUFLQyxhQUFhLENBQUVILEdBQ3REdUksT0FBUSxPQUNSQyxLQUFNekksRUFDTnFMLFdBQVksRUFDWkssYUFBYyxlQUFnQjFMLENBQTJCLENBQUUsQ0FFekQsTUFBTUcsRUFBS3lLLFdBQVcsQ0FBQzVLLEVBQ3pCLEVBQ0E0TCxRQUFBQSxFQUNBTixPQUFBQSxDQUNGLEVBQ0YsR0FHSXFJLHdCQUFOLE1BQThCMU0sRUFBZWhILEVBQU9ELElBQzNDLE1BQU0sSUFBSTJNLFFBQVEsQ0FBQ2YsRUFBU04sSUFBVyxDQUM1Q25MLEVBQUt5SyxXQUFXLENBQUMsQ0FDZnJKLElBQUtwQixFQUFLYyxNQUFNLENBQUN1RixZQUFZLENBQUNPLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDQyxFQUFlaEgsR0FDaEV1SSxPQUFRLE9BQ1JDLEtBQU16SSxFQUNOcUwsV0FBWSxFQUNaSyxhQUFjLGVBQWdCMUwsQ0FBMkIsQ0FBRSxDQUV6RCxNQUFNRyxFQUFLeUssV0FBVyxDQUFDNUssRUFDekIsRUFDQTRMLFFBQUFBLEVBQ0FOLE9BQUFBLENBQ0YsRUFDRixHQUdJNkIsWUFBTixNQUFrQmpMLEVBQVdsQyxJQUNwQixNQUFNRyxFQUFLeU0sSUFBSSxDQUFpQnpNLEVBQUtjLE1BQU0sQ0FBQ2UsUUFBUSxDQUFDTyxRQUFRLENBQUNMLEdBQVlsQyxHQUc3RTRPLHVCQUFOLE1BQTZCMU0sRUFBV1osRUFBV3RCLElBQzFDLE1BQU1HLEVBQUt5TSxJQUFJLENBQWlCek0sRUFBS2MsTUFBTSxDQUFDZSxRQUFRLENBQUNhLE9BQU8sQ0FBQ3hCLE9BQU8sQ0FBQ2EsRUFBV1osR0FBWXRCLEdBRy9GOE8sMEJBQU4sTUFBZ0M1TSxFQUFXbEMsSUFDbEMsTUFBTUcsRUFBS3lNLElBQUksQ0FBaUJ6TSxFQUFLYyxNQUFNLENBQUNlLFFBQVEsQ0FBQ2EsT0FBTyxDQUFDQyxHQUFHLENBQUNaLEdBQVlsQyxHQUdoRjRSLGtCQUFOLE1BQXdCNU8sR0FDZixNQUFNN0MsRUFBSzJNLEdBQUcsQ0FBa0IzTSxFQUFLYyxNQUFNLENBQUM2QyxNQUFNLENBQUN3QyxTQUFTLENBQUN4RCxHQUFHLENBQUNFLElBR3BFNk8sVUFBTixNQUFnQjdPLEVBQVNJLEVBQVFwRCxJQUN4QixNQUFNRyxFQUFLMk0sR0FBRyxDQUFPM00sRUFBS2MsTUFBTSxDQUFDNkMsTUFBTSxDQUFDYixPQUFPLENBQUNxQyxHQUFHLENBQUN0QyxFQUFTSSxHQUFTcEQsR0FHekVnUyxjQUFOLE1BQW9CaFAsRUFBU2hELElBQ3BCLE1BQU1HLEVBQUswTSxLQUFLLENBQWdCMU0sRUFBS2MsTUFBTSxDQUFDNkMsTUFBTSxDQUFDYixPQUFPLENBQUNzQyxHQUFHLENBQUN2QyxHQUFVaEQsR0FHNUU4UixXQUFOLE1BQWlCOU8sRUFBU0ksRUFBUXBELElBQ3pCLE1BQU1HLEVBQUswTSxLQUFLLENBQXdCMU0sRUFBS2MsTUFBTSxDQUFDNkMsTUFBTSxDQUFDYixPQUFPLENBQUN1QyxNQUFNLENBQUN4QyxFQUFTSSxHQUFTcEQsR0FHL0ZpUyxVQUFOLE1BQWdCalAsRUFBU0ksSUFDaEIsTUFBTWpELEVBQUtvSCxHQUFHLENBQXdCcEgsRUFBS2MsTUFBTSxDQUFDNkMsTUFBTSxDQUFDYixPQUFPLENBQUN1QyxNQUFNLENBQUN4QyxFQUFTSSxJQUdwRmdQLFdBQU4sTUFBaUJwUCxFQUFTaEQsSUFDakIsTUFBTUcsRUFBS29ILEdBQUcsQ0FBMEJwSCxFQUFLYyxNQUFNLENBQUM2QyxNQUFNLENBQUNiLE9BQU8sQ0FBQ0EsT0FBTyxDQUFDRCxFQUFTaEQsSUFHdkZtUyxXQUFOLE1BQWlCblAsRUFBU0ksRUFBUXNGLElBQ3pCLE1BQU12SSxFQUFLMEosTUFBTSxDQUFDMUosRUFBS2MsTUFBTSxDQUFDNkMsTUFBTSxDQUFDYixPQUFPLENBQUN1QyxNQUFNLENBQUN4QyxFQUFTSSxHQUFTLENBQzNFc0YsT0FBQUEsQ0FDRixHQUdJMkosYUFBTixNQUFtQnJQLEVBQVNoRCxJQUNuQixNQUFNRyxFQUFLeU0sSUFBSSxDQUE0QnpNLEVBQUtjLE1BQU0sQ0FBQzZDLE1BQU0sQ0FBQ2IsT0FBTyxDQUFDMkMsS0FBSyxDQUFDNUMsR0FBVWhELEdBR3pGc1MsY0FBTixNQUFvQnRQLEVBQVMwQyxFQUFPMUYsSUFDM0IsTUFBTUcsRUFBS29ILEdBQUcsQ0FBMEJwSCxFQUFLYyxNQUFNLENBQUM2QyxNQUFNLENBQUNiLE9BQU8sQ0FBQ3dDLE1BQU0sQ0FBQ3pDLEVBQVMwQyxFQUFPMUYsSUFHN0Z3UyxZQUFOLE1BQWtCeFAsRUFBU0ksSUFDbEIsTUFBTWpELEVBQUswSixNQUFNLENBQUMxSixFQUFLYyxNQUFNLENBQUM2QyxNQUFNLENBQUNiLE9BQU8sQ0FBQ3FDLEdBQUcsQ0FBQ3RDLEVBQVNJLElBRzdEc00sdUJBQU4sTUFBNkJ4TixHQUNwQixNQUFNL0IsRUFBS3lNLElBQUksQ0FBQ3pNLEVBQUtjLE1BQU0sQ0FBQ2UsUUFBUSxDQUFDNkIsTUFBTSxDQUFDM0IsSUFHL0NxUixnQ0FBTixNQUFzQzlNLEdBQzdCLE1BQU10RyxFQUFLMk0sR0FBRyxDQUE4QjNNLEVBQUtjLE1BQU0sQ0FBQ3VGLFlBQVksQ0FBQ0MsUUFBUSxDQUFDQSxRQUFRLENBQUN0RyxFQUFLQyxhQUFhLEVBQUdxRyxHQUcvRytNLCtCQUFOLE1BQXFDeFEsRUFBU3lELElBQ3JDLE1BQU10RyxFQUFLMk0sR0FBRyxDQUE4QjNNLEVBQUtjLE1BQU0sQ0FBQ3VGLFlBQVksQ0FBQ0MsUUFBUSxDQUFDM0MsTUFBTSxDQUFDaEIsR0FBRyxDQUFDM0MsRUFBS0MsYUFBYSxDQUFFNEMsR0FBVXlELEVBRWxJLEVBRUEsT0FBT3RHLENBQ1QsQ0FBQyJ9
1
+ import{InteractionResponseTypes as e}from"@discordeno/types";import{calculateBits as t,camelize as a,camelToSnakeCase as s,delay as i,findFiles as n,getBotIdFromToken as o,logger as r,urlToBase64 as l}from"@discordeno/utils";import{createInvalidRequestBucket as d}from"./invalidBucket.js";import{Queue as c}from"./queue.js";export function createRestManager(u){if(!u.token)throw Error("You must provide a valid token.");let m={token:u.token,applicationId:u.applicationId?BigInt(u.applicationId):o(u.token),version:u.version??10,baseUrl:u.baseUrl??"https://discord.com/api",maxRetryCount:1/0,globallyRateLimited:!1,processingRateLimitedPaths:!1,deleteQueueDelay:6e4,queues:new Map,rateLimitedPaths:new Map,invalidBucket:d({}),routes:{webhooks:{id:e=>`/webhooks/${e}`,message:(e,t,a,s)=>{let i=`/webhooks/${e}/${t}/messages/${a}?`;return s&&s.threadId&&(i+=`thread_id=${s.threadId}`),i},original:(e,t,a)=>{let s=`/webhooks/${e}/${t}/messages/@original?`;return a&&a.threadId&&(s+=`thread_id=${a.threadId}`),s},webhook:(e,t,a)=>{let s=`/webhooks/${e}/${t}?`;return a&&(a?.wait!==void 0&&(s+=`wait=${a.wait.toString()}`),a.threadId&&(s+=`thread_id=${a.threadId}`)),s}},sessionInfo:()=>m.routes.gatewayBot(),channels:{dm:()=>"/users/@me/channels",webhooks:e=>`/channels/${e}/webhooks`,channel:e=>`/channels/${e}`,follow:e=>`/channels/${e}/followers`,forum:e=>`/channels/${e}/threads?has_message=true`,invites:e=>`/channels/${e}/invites`,message:(e,t)=>`/channels/${e}/messages/${t}`,messages:(e,t)=>{let a=`/channels/${e}/messages?`;return a},overwrite:(e,t)=>`/channels/${e}/permissions/${t}`,crosspost:(e,t)=>`/channels/${e}/messages/${t}/crosspost`,stages:()=>"/stage-instances",stage:e=>`/stage-instances/${e}`,threads:{message:(e,t)=>`/channels/${e}/messages/${t}/threads`,all:e=>`/channels/${e}/threads`,active:e=>`/guilds/${e}/threads/active`,members:e=>`/channels/${e}/thread-members`,me:e=>`/channels/${e}/thread-members/@me`,user:(e,t)=>`/channels/${e}/thread-members/${t}`,archived:e=>`/channels/${e}/threads/archived`,public:(e,t)=>{let a=`/channels/${e}/threads/archived/public?`;return t&&(t.before&&(a+=`before=${new Date(t.before).toISOString()}`),t.limit&&(a+=`&limit=${t.limit}`)),a},private:(e,t)=>{let a=`/channels/${e}/threads/archived/private?`;return t&&(t.before&&(a+=`before=${new Date(t.before).toISOString()}`),t.limit&&(a+=`&limit=${t.limit}`)),a},joined:(e,t)=>{let a=`/channels/${e}/users/@me/threads/archived/private?`;return t&&(t.before&&(a+=`before=${new Date(t.before).toISOString()}`),t.limit&&(a+=`&limit=${t.limit}`)),a}},typing:e=>`/channels/${e}/typing`},guilds:{all:()=>"/guilds",automod:{rule:(e,t)=>`/guilds/${e}/auto-moderation/rules/${t}`,rules:e=>`/guilds/${e}/auto-moderation/rules`},channels:e=>`/guilds/${e}/channels`,emoji:(e,t)=>`/guilds/${e}/emojis/${t}`,emojis:e=>`/guilds/${e}/emojis`,events:{events:(e,t)=>{let a=`/guilds/${e}/scheduled-events?`;return void 0!==t&&(a+=`with_user_count=${t.toString()}`),a},event:(e,t,a)=>{let s=`/guilds/${e}/scheduled-events/${t}`;return void 0!==a&&(s+=`with_user_count=${a.toString()}`),s},users:(e,t,a)=>{let s=`/guilds/${e}/scheduled-events/${t}/users?`;return a&&(void 0!==a.limit&&(s+=`limit=${a.limit}`),void 0!==a.withMember&&(s+=`&with_member=${a.withMember.toString()}`),void 0!==a.after&&(s+=`&after=${a.after}`),void 0!==a.before&&(s+=`&before=${a.before}`)),s}},guild(e,t){let a=`/guilds/${e}?`;return void 0!==t&&(a+=`with_counts=${t.toString()}`),a},integration:(e,t)=>`/guilds/${e}/integrations/${t}`,integrations:e=>`/guilds/${e}/integrations?include_applications=true`,invite(e,t){let a=`/invites/${e}?`;return t&&(void 0!==t.withCounts&&(a+=`with_counts=${t.withCounts.toString()}`),void 0!==t.withExpiration&&(a+=`&with_expiration=${t.withExpiration.toString()}`),t.scheduledEventId&&(a+=`&guild_scheduled_event_id=${t.scheduledEventId}`)),a},invites:e=>`/guilds/${e}/invites`,members:{ban:(e,t)=>`/guilds/${e}/bans/${t}`,bot:e=>`/guilds/${e}/members/@me`,member:(e,t)=>`/guilds/${e}/members/${t}`,members:(e,t)=>{let a=`/guilds/${e}/members?`;return void 0!==t&&(t.limit&&(a+=`limit=${t.limit}`),t.after&&(a+=`&after=${t.after}`)),a},search:(e,t,a)=>{let s=`/guilds/${e}/members/search?query=${encodeURIComponent(t)}`;return a&&void 0!==a.limit&&(s+=`&limit=${a.limit}`),s},prune:(e,t)=>{let a=`/guilds/${e}/prune?`;return t&&(t.days&&(a+=`days=${t.days}`),Array.isArray(t.includeRoles)?a+=`&include_roles=${t.includeRoles.join(",")}`:t.includeRoles&&(a+=`&include_roles=${t.includeRoles}`)),a}},roles:{one:(e,t)=>`/guilds/${e}/roles/${t}`,all:e=>`/guilds/${e}/roles`,member:(e,t,a)=>`/guilds/${e}/members/${t}/roles/${a}`},templates:{code:e=>`/guilds/templates/${e}`,guild:(e,t)=>`/guilds/${e}/templates/${t}`,all:e=>`/guilds/${e}/templates`},webhooks:e=>`/guilds/${e}/webhooks`},interactions:{commands:{commands:e=>`/applications/${e}/commands`,guilds:{all:(e,t)=>`/applications/${e}/guilds/${t}/commands`,one(e,t,a,s){let i=`/applications/${e}/guilds/${t}/commands/${a}?`;return void 0!==s&&(i+=`with_localizations=${s.toString()}`),i}},permissions:(e,t)=>`/applications/${e}/guilds/${t}/commands/permissions`,permission:(e,t,a)=>`/applications/${e}/guilds/${t}/commands/${a}/permissions`,command:(e,t,a)=>{let s=`/applications/${e}/commands/${t}?`;return void 0!==a&&(s+=`withLocalizations=${a.toString()}`),s}},responses:{callback:(e,t)=>`/interactions/${e}/${t}/callback`,original:(e,t)=>`/webhooks/${e}/${t}/messages/@original`,message:(e,t,a)=>`/webhooks/${e}/${t}/messages/${a}`}},user:e=>`/users/${e}`,userBot:()=>"/users/@me",oauth2Application:()=>"oauth2/applications/@me",gatewayBot:()=>"/gateway/bot",nitroStickerPacks:()=>"/sticker-packs"},checkRateLimits(e){let t=m.rateLimitedPaths.get(e),a=m.rateLimitedPaths.get("global"),s=Date.now();return t&&s<t.resetTimestamp?t.resetTimestamp-s:!!a&&s<a.resetTimestamp&&a.resetTimestamp-s},changeToDiscordFormat(e){if(null===e)return null;if("object"==typeof e){if(Array.isArray(e))return e.map(e=>m.changeToDiscordFormat(e));let a={};for(let i of Object.keys(e)){if("permissions"===i){a.permissions=t(e[i]);continue}a[s(i)]=m.changeToDiscordFormat(e[i])}return a}return"bigint"==typeof e?e.toString():e},createRequest(e){let t={"user-agent":"DiscordBot (https://github.com/discordeno/discordeno, v19.0.0-alpha.1)"};if(e.unauthorized||(t.authorization=`Bot ${m.token}`),e.headers)for(let a in e.headers)t[a.toLowerCase()]=e.headers[a];if("GET"===e.method&&(e.body=void 0),e.body?.reason&&(t["X-Audit-Log-Reason"]=encodeURIComponent(e.body.reason),e.body.reason=void 0),e.body){let{file:s}=e.body;if(s){let i=n(s),o=new FormData;if(e.url?.endsWith("/stickers")&&"POST"===e.method)o.append("file",i[0].blob,i[0].name),o.append("name",e.body.name),o.append("description",e.body.description),o.append("tags",e.body.tags);else{for(let r=0;r<i.length;r++)o.append(`file${r}`,i[r].blob,i[r].name);s&&(e.body.file=void 0),o.append("payload_json",JSON.stringify(m.changeToDiscordFormat(e.body)))}e.body.file=o}else e.body&&!["GET","DELETE"].includes(e.method)&&(t["Content-Type"]="application/json")}return{headers:t,body:e.body?.file??JSON.stringify(m.changeToDiscordFormat(e.body)),method:e.method}},processRateLimitedPaths(){let e=Date.now();for(let[t,a]of m.rateLimitedPaths.entries())a.resetTimestamp>e||(m.rateLimitedPaths.delete(t),"global"!==t||(m.globallyRateLimited=!1));0===m.rateLimitedPaths.size?m.processingRateLimitedPaths=!1:(m.processingRateLimitedPaths=!0,setTimeout(()=>{m.processRateLimitedPaths()},1e3))},processHeaders(e,t){let a=!1,s=t.get("x-ratelimit-remaining"),i=t.get("x-ratelimit-reset-after"),n=Date.now()+1e3*Number(i),o=t.get("x-ratelimit-global"),r=t.get("x-ratelimit-bucket")??void 0,l=t.get("x-ratelimit-limit");if(m.queues.get(e)?.handleCompletedRequest({remaining:s?Number(s):void 0,interval:i?1e3*Number(i):void 0,max:l?Number(l):void 0}),"0"===s&&(a=!0,m.rateLimitedPaths.set(e,{url:e,resetTimestamp:n,bucketId:r}),r&&m.rateLimitedPaths.set(r,{url:e,resetTimestamp:n,bucketId:r})),o){let d=t.get("retry-after"),c=Date.now()+1e3*Number(d);m.globallyRateLimited=!0,a=!0,setTimeout(()=>{m.globallyRateLimited=!1},c),m.rateLimitedPaths.set("global",{url:"global",resetTimestamp:c,bucketId:r}),r&&m.rateLimitedPaths.set(r,{url:"global",resetTimestamp:c,bucketId:r})}return a&&!m.processingRateLimitedPaths&&m.processRateLimitedPaths(),a?r:void 0},async sendRequest(e){let t=e.url.startsWith("https://")?e.url:`${m.baseUrl}/v${m.version}${e.url}`,a=m.createRequest({method:e.method,url:e.url,body:e.body,...e.options});r.debug(`sending request to ${t}`,"with payload:",{...a,headers:{...a.headers,authorization:"Bot tokenhere"}});let s=await fetch(t,a);r.debug(`request fetched from ${t} with status ${s.status} & ${s.statusText}`);let n=m.processHeaders(m.simplifyUrl(e.url,e.method),s.headers);if(n&&(e.bucketId=n),s.status<200||s.status>=400){if(r.debug(`Request to ${t} failed.`),429===s.status){if(r.debug(`Request to ${t} was ratelimited.`),e.retryCount++>=m.maxRetryCount)return r.debug(`Request to ${t} exceeded the maximum allowed retries.`,"with payload:",a),e.reject?.({ok:!1,status:s.status,error:"The options was rate limited and it maxed out the retries limit."});m.invalidBucket.handleCompletedRequest(s.status,"shared"===s.headers.get("X-RateLimit-Scope"));let o=s.headers.get("x-ratelimit-reset-after");return o&&await i(1e3*Number(o)),await e.retryRequest?.(e)}return e.reject(await s.json())}if(204===s.status)return e.resolve(void 0);e.resolve(await s.json())},simplifyUrl(e,t){let a=e.replace(/\/([a-z-]+)\/(?:[0-9]{17,19})/g,function(e,t){return["channels","guilds"].includes(t)?e:`/${t}/x`}).replace(/\/reactions\/[^/]+/g,"/reactions/x");return a.includes("/reactions")&&(a=a.substring(0,a.indexOf("/reactions")+10)),"DELETE"===t&&a.endsWith("/messages/x")&&(a=t+a),a},processRequest(e){let t=e.url.substring(e.url.indexOf("api/")),a=t.split("/");a.shift(),a[0]?.startsWith("v")&&a.shift(),e.url=`${m.baseUrl}/v${m.version}/${a.join("/")}`;let s=m.simplifyUrl(e.url,e.method),i=m.queues.get(s);if(void 0!==i)i.makeRequest(e);else{let n=new c(m,{url:s,deleteQueueDelay:m.deleteQueueDelay});n.makeRequest(e),m.queues.set(s,n)}},makeRequest:async(e,t,a,s)=>await new Promise((i,n)=>{m.processRequest({url:t,method:e,body:a,retryCount:0,retryRequest:async function(e){await m.sendRequest(e)},resolve:i,reject:n,options:s})}),get:async e=>a(await m.makeRequest("GET",e)),post:async(e,t)=>a(await m.makeRequest("POST",e,t)),delete:async(e,t)=>a(await m.makeRequest("DELETE",e,t)),patch:async(e,t)=>a(await m.makeRequest("PATCH",e,t)),put:async(e,t,s)=>a(await m.makeRequest("PUT",e,t,s)),channels:{messages:{delete:async(e,t,a)=>await m.deleteMessage(e,t,a),edit:async(e,t,a)=>await m.editMessage(e,t,a),send:async(e,t)=>await m.sendMessage(e,t),publish:async(e,t)=>await m.publishMessage(e,t)},get:async e=>await m.getChannel(e),create:async(e,t)=>await m.createChannel(e,t),delete:async(e,t)=>await m.deleteChannel(e,t),edit:async(e,t)=>await m.editChannel(e,t),follow:async(e,t)=>await m.followAnnouncement(e,t),forums:{post:async(e,t)=>await m.createForumThread(e,t)},permissions:{edit:async(e,t)=>await m.editChannelPermissionOverrides(e,t),delete:async(e,t)=>await m.deleteChannelPermissionOverride(e,t)},positions:async(e,t)=>await m.editChannelPositions(e,t),invites:async e=>await m.getChannelInvites(e),stages:{create:async e=>await m.createStageInstance(e),delete:async(e,t)=>await m.deleteStageInstance(e,t),edit:async(e,t)=>await m.editStageInstance(e,t),get:async e=>await m.getStageInstance(e)},threads:{create:{with:{message:async(e,t,a)=>await m.startThreadWithMessage(e,t,a)},without:{message:async(e,t)=>await m.startThreadWithoutMessage(e,t)}},get:{active:async e=>await m.getActiveThreads(e),archived:{private:async(e,t)=>await m.getPrivateArchivedThreads(e,t),joined:async(e,t)=>await m.getPrivateJoinedArchivedThreads(e,t),public:async(e,t)=>await m.getPublicArchivedThreads(e,t)},member:async(e,t)=>await m.getThreadMember(e,t),members:async e=>await m.getThreadMembers(e)},join:async e=>await m.joinThread(e),leave:async e=>await m.leaveThread(e),kick:async(e,t)=>await m.removeThreadMember(e,t)},typing:async e=>await m.triggerTypingIndicator(e)},emojis:{create:async(e,t)=>await m.createEmoji(e,t),delete:async(e,t,a)=>await m.deleteEmoji(e,t,a),edit:async(e,t,a)=>await m.editEmoji(e,t,a),get:async(e,t)=>await m.getEmoji(e,t)},guilds:{automod:{create:async(e,t)=>await m.createAutomodRule(e,t),delete:async(e,t)=>await m.deleteAutomodRule(e,t),edit:async(e,t,a)=>await m.editAutomodRule(e,t,a),get:{rule:async(e,t)=>await m.getAutomodRule(e,t),rules:async e=>await m.getAutomodRules(e)}},create:async e=>await m.createGuild(e),channels:async e=>await m.getChannels(e),delete:async e=>await m.deleteGuild(e),emojis:async e=>await m.getEmojis(e),events:{create:async(e,t)=>await m.createScheduledEvent(e,t),delete:async(e,t)=>await m.deleteScheduledEvent(e,t),edit:async(e,t,a)=>await m.editScheduledEvent(e,t,a),get:{event:async(e,t,a)=>await m.getScheduledEvent(e,t,a),events:async(e,t)=>await m.getScheduledEvents(e,t),users:async(e,t,a)=>await m.getScheduledEventUsers(e,t,a)}},integrations:{get:async e=>await m.getIntegrations(e),delete:async(e,t)=>await m.deleteIntegration(e,t)},invites:{create:async(e,t)=>await m.createInvite(e,t),delete:async(e,t)=>await m.deleteInvite(e,t),get:async(e,t)=>await m.getInvite(e,t),list:async e=>await m.getInvites(e)},templates:{create:async(e,t)=>await m.createGuildTemplate(e,t),delete:async(e,t)=>await m.deleteGuildTemplate(e,t),edit:async(e,t,a)=>await m.editGuildTemplate(e,t,a),get:async e=>await m.getGuildTemplate(e),list:async e=>await m.getGuildTemplates(e),sync:async e=>await m.syncGuildTemplate(e)},members:{ban:async(e,t,a)=>await m.banMember(e,t,a),edit:async(e,t,a)=>await m.editMember(e,t,a),editSelf:async(e,t)=>await m.editBotMember(e,t),get:async(e,t)=>await m.getMember(e,t),dm:async e=>await m.getDmChannel(e),kick:async(e,t,a)=>await m.kickMember(e,t,a),list:async(e,t)=>await m.getMembers(e,t),prune:async(e,t)=>await m.pruneMembers(e,t),search:async(e,t,a)=>await m.searchMembers(e,t,a),unban:async(e,t)=>await m.unbanMember(e,t)},interactions:{commands:{create:{global:async e=>await m.createGlobalApplicationCommand(e),guild:async(e,t)=>await m.createGuildApplicationCommand(e,t)},delete:{global:async e=>await m.deleteGlobalApplicationCommand(e),guild:async(e,t)=>await m.deleteGuildApplicationCommand(e,t)},edit:{global:async(e,t)=>await m.editGlobalApplicationCommand(e,t),guild:async(e,t,a)=>await m.editGuildApplicationCommand(e,t,a),permissions:async(e,t,a,s)=>await m.editApplicationCommandPermissions(e,t,a,s)},get:{global:{all:async()=>await m.getGlobalApplicationCommands(),one:async e=>await m.getGlobalApplicationCommand(e)},guilds:{all:async e=>await m.getGuildApplicationCommands(e),one:async(e,t)=>await m.getGuildApplicationCommand(e,t)},permission:async(e,t)=>await m.getApplicationCommandPermission(e,t),permissions:async e=>await m.getApplicationCommandPermissions(e)},replace:{global:async e=>await m.upsertGlobalApplicationCommands(e),guild:async(e,t)=>await m.upsertGuildApplicationCommands(e,t)}},responses:{create:{followup:async(e,t)=>await m.sendFollowupMessage(e,t),original:async(e,t,a)=>await m.sendInteractionResponse(e,t,a)},delete:{followup:async(e,t)=>await m.deleteFollowupMessage(e,t),original:async e=>await m.deleteOriginalInteractionResponse(e)},edit:{followup:async(e,t,a)=>await m.editFollowupMessage(e,t,a),original:async(e,t)=>await m.editOriginalInteractionResponse(e,t)},get:{followup:async(e,t)=>await m.getFollowupMessage(e,t),original:async e=>await m.getOriginalInteractionResponse(e)}}},roles:{add:async(e,t,a,s)=>await m.addRole(e,t,a,s),create:async(e,t,a)=>await m.createRole(e,t,a),delete:async(e,t)=>await m.deleteRole(e,t),edit:async(e,t,a)=>await m.editRole(e,t,a),list:async e=>await m.getRoles(e),positions:async(e,t)=>await m.editRolePositions(e,t),remove:async(e,t,a,s)=>await m.removeRole(e,t,a,s)}},users:{channel:async e=>await m.getDmChannel(e)},webhooks:{create:async(e,t)=>await m.createWebhook(e,t),delete:{with:{id:async(e,t)=>await m.deleteWebhook(e,t),token:async(e,t)=>await m.deleteWebhookWithToken(e,t)}},edit:{with:{id:async(e,t)=>await m.editWebhook(e,t),token:async(e,t,a)=>await m.editWebhookWithToken(e,t,a)}},execute:async(e,t,a)=>await m.executeWebhook(e,t,a),get:{channel:async e=>await m.getChannelWebhooks(e),guild:async e=>await m.getGuildWebhooks(e),message:async(e,t,a,s)=>await m.getWebhookMessage(e,t,a,s),with:{id:async e=>await m.getWebhook(e),token:async(e,t)=>await m.getWebhookWithToken(e,t)}},messages:{delete:async(e,t,a,s)=>await m.deleteWebhookMessage(e,t,a,s),edit:Object.assign(async(e,t,a,s)=>await m.editWebhookMessage(e,t,a,s),{original:async(e,t,a)=>await m.editOriginalWebhookMessage(e,t,a)})}},addRole:async(e,t,a,s)=>await m.put(m.routes.guilds.roles.member(e,t,a),{reason:s}),addThreadMember:async(e,t)=>await m.put(m.routes.channels.threads.user(e,t)),createAutomodRule:async(e,t)=>await m.post(m.routes.guilds.automod.rules(e),t),createChannel:async(e,t)=>await m.post(m.routes.guilds.channels(e),t),createEmoji:async(e,t)=>await m.post(m.routes.guilds.emojis(e),t),createGlobalApplicationCommand:async e=>await m.post(m.routes.interactions.commands.commands(m.applicationId),e),createGuild:async e=>await m.post(m.routes.guilds.all(),e),createGuildApplicationCommand:async(e,t)=>await m.post(m.routes.interactions.commands.guilds.all(m.applicationId,t),e),createGuildTemplate:async(e,t)=>await m.post(m.routes.guilds.templates.all(e),t),createForumThread:async(e,t)=>await m.post(m.routes.channels.forum(e),t),createInvite:async(e,t={})=>await m.post(m.routes.channels.invites(e),t),createRole:async(e,t,a)=>await m.post(m.routes.guilds.roles.all(e),{...t,reason:a}),createScheduledEvent:async(e,t)=>await m.post(m.routes.guilds.events.events(e),t),createStageInstance:async e=>await m.post(m.routes.channels.stages(),e),createWebhook:async(e,t)=>await m.post(m.routes.channels.webhooks(e),{name:t.name,avatar:t.avatar?await l(t.avatar):void 0,reason:t.reason}),deleteAutomodRule:async(e,t,a)=>await m.delete(m.routes.guilds.automod.rule(e,t),{reason:a}),deleteChannel:async(e,t)=>await m.delete(m.routes.channels.channel(e),{reason:t}),deleteChannelPermissionOverride:async(e,t,a)=>await m.delete(m.routes.channels.overwrite(e,t),a?{reason:a}:void 0),deleteEmoji:async(e,t,a)=>await m.delete(m.routes.guilds.emoji(e,t),{reason:a}),deleteFollowupMessage:async(e,t)=>await m.delete(m.routes.interactions.responses.message(m.applicationId,e,t)),deleteGlobalApplicationCommand:async e=>await m.delete(m.routes.interactions.commands.command(m.applicationId,e)),deleteGuild:async e=>await m.delete(m.routes.guilds.guild(e)),deleteGuildApplicationCommand:async(e,t)=>await m.delete(m.routes.interactions.commands.guilds.one(m.applicationId,t,e)),deleteGuildTemplate:async(e,t)=>await m.delete(m.routes.guilds.templates.guild(e,t)),deleteIntegration:async(e,t)=>await m.delete(m.routes.guilds.integration(e,t)),deleteInvite:async(e,t)=>await m.delete(m.routes.guilds.invite(e),t?{reason:t}:void 0),deleteMessage:async(e,t,a)=>await m.delete(m.routes.channels.message(e,t),{reason:a}),deleteOriginalInteractionResponse:async e=>await m.delete(m.routes.interactions.responses.original(m.applicationId,e)),deleteRole:async(e,t)=>await m.delete(m.routes.guilds.roles.one(e,t)),deleteScheduledEvent:async(e,t)=>await m.delete(m.routes.guilds.events.event(e,t)),deleteStageInstance:async(e,t)=>await m.delete(m.routes.channels.stage(e),t?{reason:t}:void 0),deleteWebhook:async(e,t)=>await m.delete(m.routes.webhooks.id(e),{reason:t}),deleteWebhookMessage:async(e,t,a,s)=>await m.delete(m.routes.webhooks.message(e,t,a,s)),deleteWebhookWithToken:async(e,t)=>await m.delete(m.routes.webhooks.webhook(e,t)),editApplicationCommandPermissions:async(e,t,a,s)=>await m.put(m.routes.interactions.commands.permission(m.applicationId,e,t),{permissions:s},{headers:{authorization:`Bearer ${a}`}}),editAutomodRule:async(e,t,a)=>await m.patch(m.routes.guilds.automod.rule(e,t),a),async editBotProfile(e){let t=e?.botAvatarURL?await l(e?.botAvatarURL):e?.botAvatarURL;return await m.patch(m.routes.userBot(),{username:e.username?.trim(),avatar:t})},editChannel:async(e,t)=>await m.patch(m.routes.channels.channel(e),t),editChannelPermissionOverrides:async(e,t)=>await m.put(m.routes.channels.overwrite(e,t.id),t),editChannelPositions:async(e,t)=>await m.patch(m.routes.guilds.channels(e),t),editEmoji:async(e,t,a)=>await m.patch(m.routes.guilds.emoji(e,t),a),editFollowupMessage:async(e,t,a)=>await m.patch(m.routes.interactions.responses.message(m.applicationId,e,t),a),editGlobalApplicationCommand:async(e,t)=>await m.patch(m.routes.interactions.commands.command(m.applicationId,e),t),editGuildApplicationCommand:async(e,t,a)=>await m.patch(m.routes.interactions.commands.guilds.one(m.applicationId,t,e),a),editGuildTemplate:async(e,t,a)=>await m.patch(m.routes.guilds.templates.guild(e,t),a),editMessage:async(e,t,a)=>await m.patch(m.routes.channels.message(e,t),a),editOriginalInteractionResponse:async(e,t)=>await m.patch(m.routes.interactions.responses.original(m.applicationId,e),t),editOriginalWebhookMessage:async(t,a,s)=>await m.patch(m.routes.webhooks.original(t,a,s),{type:e.UpdateMessage,data:s}),editScheduledEvent:async(e,t,a)=>await m.patch(m.routes.guilds.events.event(e,t),a),editRole:async(e,t,a)=>await m.patch(m.routes.guilds.roles.one(e,t),a),editRolePositions:async(e,t)=>await m.patch(m.routes.guilds.roles.all(e),t),editStageInstance:async(e,t)=>await m.patch(m.routes.channels.stage(e),{topic:t.topic}),editWebhook:async(e,t)=>await m.patch(m.routes.webhooks.id(e),t),editWebhookMessage:async(t,a,s,i)=>await m.patch(m.routes.webhooks.message(t,a,s,i),{type:e.UpdateMessage,data:i}),editWebhookWithToken:async(e,t,a)=>await m.patch(m.routes.webhooks.webhook(e,t),a),executeWebhook:async(e,t,a)=>await m.post(m.routes.webhooks.webhook(e,t,a),a),followAnnouncement:async(e,t)=>await m.post(m.routes.channels.follow(e),{webhook_channel_id:t}),getActiveThreads:async e=>await m.get(m.routes.channels.threads.active(e)),getApplicationCommandPermission:async(e,t)=>await m.get(m.routes.interactions.commands.permission(m.applicationId,e,t)),getApplicationCommandPermissions:async e=>await m.get(m.routes.interactions.commands.permissions(m.applicationId,e)),getApplicationInfo:async()=>await m.get(m.routes.oauth2Application()),getAutomodRule:async(e,t)=>await m.get(m.routes.guilds.automod.rule(e,t)),getAutomodRules:async e=>await m.get(m.routes.guilds.automod.rules(e)),getChannel:async e=>await m.get(m.routes.channels.channel(e)),getChannelInvites:async e=>await m.get(m.routes.channels.invites(e)),getChannels:async e=>await m.get(m.routes.guilds.channels(e)),getChannelWebhooks:async e=>await m.get(m.routes.channels.webhooks(e)),getDmChannel:async e=>await m.post(m.routes.channels.dm(),{recipient_id:e.toString()}),getEmoji:async(e,t)=>await m.get(m.routes.guilds.emoji(e,t)),getEmojis:async e=>await m.get(m.routes.guilds.emojis(e)),getFollowupMessage:async(e,t)=>await m.get(m.routes.interactions.responses.message(m.applicationId,e,t)),getGatewayBot:async()=>await m.get(m.routes.gatewayBot()),getGlobalApplicationCommand:async e=>await m.get(m.routes.interactions.commands.command(m.applicationId,e)),getGlobalApplicationCommands:async()=>await m.get(m.routes.interactions.commands.commands(m.applicationId)),getGuildApplicationCommand:async(e,t)=>await m.get(m.routes.interactions.commands.guilds.one(m.applicationId,t,e)),getGuildApplicationCommands:async e=>await m.get(m.routes.interactions.commands.guilds.all(m.applicationId,e)),getGuildTemplate:async e=>await m.get(m.routes.guilds.templates.code(e)),getGuildTemplates:async e=>await m.get(m.routes.guilds.templates.all(e)),getGuildWebhooks:async e=>await m.get(m.routes.guilds.webhooks(e)),getIntegrations:async e=>await m.get(m.routes.guilds.integrations(e)),getInvite:async(e,t)=>await m.get(m.routes.guilds.invite(e,t)),getInvites:async e=>await m.get(m.routes.guilds.invites(e)),getNitroStickerPacks:async()=>await m.get(m.routes.nitroStickerPacks()),getOriginalInteractionResponse:async e=>await m.get(m.routes.interactions.responses.original(m.applicationId,e)),getPrivateArchivedThreads:async(e,t)=>await m.get(m.routes.channels.threads.private(e,t)),getPrivateJoinedArchivedThreads:async(e,t)=>await m.get(m.routes.channels.threads.joined(e,t)),getPublicArchivedThreads:async(e,t)=>await m.get(m.routes.channels.threads.public(e,t)),getRoles:async e=>await m.get(m.routes.guilds.roles.all(e)),getScheduledEvent:async(e,t,a)=>await m.get(m.routes.guilds.events.event(e,t,a?.withUserCount)),getScheduledEvents:async(e,t)=>await m.get(m.routes.guilds.events.events(e,t?.withUserCount)),getScheduledEventUsers:async(e,t,a)=>await m.get(m.routes.guilds.events.users(e,t,a)),getSessionInfo:async()=>await m.getGatewayBot(),getStageInstance:async e=>await m.get(m.routes.channels.stage(e)),getThreadMember:async(e,t)=>await m.get(m.routes.channels.threads.user(e,t)),getThreadMembers:async e=>await m.get(m.routes.channels.threads.members(e)),getUser:async e=>await m.get(m.routes.user(e)),getWebhook:async e=>await m.get(m.routes.webhooks.id(e)),getWebhookMessage:async(e,t,a,s)=>await m.get(m.routes.webhooks.message(e,t,a,s)),getWebhookWithToken:async(e,t)=>await m.get(m.routes.webhooks.webhook(e,t)),joinThread:async e=>await m.put(m.routes.channels.threads.me(e)),leaveThread:async e=>await m.delete(m.routes.channels.threads.me(e)),publishMessage:async(e,t)=>await m.post(m.routes.channels.crosspost(e,t)),removeRole:async(e,t,a,s)=>await m.delete(m.routes.guilds.roles.member(e,t,a),{reason:s}),removeThreadMember:async(e,t)=>await m.delete(m.routes.channels.threads.user(e,t)),sendFollowupMessage:async(e,t)=>await new Promise((a,s)=>{m.sendRequest({url:m.routes.webhooks.webhook(m.applicationId,e),method:"POST",body:t,retryCount:0,retryRequest:async function(e){await m.sendRequest(e)},resolve:a,reject:s})}),sendInteractionResponse:async(e,t,a)=>await new Promise((s,i)=>{m.sendRequest({url:m.routes.interactions.responses.callback(e,t),method:"POST",body:a,retryCount:0,retryRequest:async function(e){await m.sendRequest(e)},resolve:s,reject:i})}),sendMessage:async(e,t)=>await m.post(m.routes.channels.messages(e),t),startThreadWithMessage:async(e,t,a)=>await m.post(m.routes.channels.threads.message(e,t),a),startThreadWithoutMessage:async(e,t)=>await m.post(m.routes.channels.threads.all(e),t),syncGuildTemplate:async e=>await m.put(m.routes.guilds.templates.all(e)),banMember:async(e,t,a)=>await m.put(m.routes.guilds.members.ban(e,t),a),editBotMember:async(e,t)=>await m.patch(m.routes.guilds.members.bot(e),t),editMember:async(e,t,a)=>await m.patch(m.routes.guilds.members.member(e,t),a),getMember:async(e,t)=>await m.get(m.routes.guilds.members.member(e,t)),getMembers:async(e,t)=>await m.get(m.routes.guilds.members.members(e,t)),kickMember:async(e,t,a)=>await m.delete(m.routes.guilds.members.member(e,t),{reason:a}),pruneMembers:async(e,t)=>await m.post(m.routes.guilds.members.prune(e),t),searchMembers:async(e,t,a)=>await m.get(m.routes.guilds.members.search(e,t,a)),unbanMember:async(e,t)=>await m.delete(m.routes.guilds.members.ban(e,t)),triggerTypingIndicator:async e=>await m.post(m.routes.channels.typing(e)),upsertGlobalApplicationCommands:async e=>await m.put(m.routes.interactions.commands.commands(m.applicationId),e),upsertGuildApplicationCommands:async(e,t)=>await m.put(m.routes.interactions.commands.guilds.all(m.applicationId,e),t)};return m}
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEludGVyYWN0aW9uUmVzcG9uc2VUeXBlcyB9IGZyb20gJ0BkaXNjb3JkZW5vL3R5cGVzJ1xuaW1wb3J0IHsgY2FsY3VsYXRlQml0cywgY2FtZWxpemUsIGNhbWVsVG9TbmFrZUNhc2UsIGRlbGF5LCBmaW5kRmlsZXMsIGdldEJvdElkRnJvbVRva2VuLCBsb2dnZXIsIHVybFRvQmFzZTY0IH0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnXG5cbmltcG9ydCB7IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0IH0gZnJvbSAnLi9pbnZhbGlkQnVja2V0LmpzJ1xuaW1wb3J0IHsgUXVldWUgfSBmcm9tICcuL3F1ZXVlLmpzJ1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zLFxuICBCaWdTdHJpbmcsXG4gIENhbWVsaXplLFxuICBDcmVhdGVBcHBsaWNhdGlvbkNvbW1hbmQsXG4gIENyZWF0ZUF1dG9Nb2RlcmF0aW9uUnVsZU9wdGlvbnMsXG4gIENyZWF0ZUNoYW5uZWxJbnZpdGUsXG4gIENyZWF0ZUZvcnVtUG9zdFdpdGhNZXNzYWdlLFxuICBDcmVhdGVHdWlsZCxcbiAgQ3JlYXRlR3VpbGRDaGFubmVsLFxuICBDcmVhdGVHdWlsZEVtb2ppLFxuICBDcmVhdGVHdWlsZFJvbGUsXG4gIENyZWF0ZU1lc3NhZ2VPcHRpb25zLFxuICBDcmVhdGVTY2hlZHVsZWRFdmVudCxcbiAgQ3JlYXRlU3RhZ2VJbnN0YW5jZSxcbiAgRGVsZXRlV2ViaG9va01lc3NhZ2VPcHRpb25zLFxuICBEaXNjb3JkQWN0aXZlVGhyZWFkcyxcbiAgRGlzY29yZEFwcGxpY2F0aW9uLFxuICBEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kLFxuICBEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMsXG4gIERpc2NvcmRBcmNoaXZlZFRocmVhZHMsXG4gIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIERpc2NvcmRDaGFubmVsLFxuICBEaXNjb3JkQ3JlYXRlV2ViaG9vayxcbiAgRGlzY29yZEVtb2ppLFxuICBEaXNjb3JkRm9sbG93QW5ub3VuY2VtZW50Q2hhbm5lbCxcbiAgRGlzY29yZEZvbGxvd2VkQ2hhbm5lbCxcbiAgRGlzY29yZEdldEdhdGV3YXlCb3QsXG4gIERpc2NvcmRHdWlsZCxcbiAgRGlzY29yZEludGVncmF0aW9uLFxuICBEaXNjb3JkSW52aXRlLFxuICBEaXNjb3JkSW52aXRlTWV0YWRhdGEsXG4gIERpc2NvcmRMaXN0QWN0aXZlVGhyZWFkcyxcbiAgRGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHMsXG4gIERpc2NvcmRNZW1iZXIsXG4gIERpc2NvcmRNZW1iZXJXaXRoVXNlcixcbiAgRGlzY29yZE1lc3NhZ2UsXG4gIERpc2NvcmRSb2xlLFxuICBEaXNjb3JkU2NoZWR1bGVkRXZlbnQsXG4gIERpc2NvcmRTdGFnZUluc3RhbmNlLFxuICBEaXNjb3JkU3RpY2tlclBhY2ssXG4gIERpc2NvcmRUZW1wbGF0ZSxcbiAgRGlzY29yZFRocmVhZE1lbWJlcixcbiAgRGlzY29yZFVzZXIsXG4gIERpc2NvcmRXZWJob29rLFxuICBFZGl0QXV0b01vZGVyYXRpb25SdWxlT3B0aW9ucyxcbiAgRWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzT3B0aW9ucyxcbiAgRWRpdEd1aWxkUm9sZSxcbiAgRWRpdE1lc3NhZ2UsXG4gIEVkaXRTY2hlZHVsZWRFdmVudCxcbiAgRWRpdFN0YWdlSW5zdGFuY2VPcHRpb25zLFxuICBFeGVjdXRlV2ViaG9vayxcbiAgR2V0R3VpbGRQcnVuZUNvdW50UXVlcnksXG4gIEdldEludml0ZSxcbiAgR2V0TWVzc2FnZXNPcHRpb25zLFxuICBHZXRTY2hlZHVsZWRFdmVudHMsXG4gIEdldFNjaGVkdWxlZEV2ZW50VXNlcnMsXG4gIEdldFdlYmhvb2tNZXNzYWdlT3B0aW9ucyxcbiAgSW50ZXJhY3Rpb25DYWxsYmFja0RhdGEsXG4gIEludGVyYWN0aW9uUmVzcG9uc2UsXG4gIExpc3RBcmNoaXZlZFRocmVhZHMsXG4gIExpc3RHdWlsZE1lbWJlcnMsXG4gIE1vZGlmeUNoYW5uZWwsXG4gIE1vZGlmeUd1aWxkQ2hhbm5lbFBvc2l0aW9ucyxcbiAgTW9kaWZ5R3VpbGRFbW9qaSxcbiAgTW9kaWZ5Um9sZVBvc2l0aW9ucyxcbiAgTW9kaWZ5V2ViaG9vayxcbiAgU2VhcmNoTWVtYmVycyxcbiAgU3RhcnRUaHJlYWRXaXRoTWVzc2FnZSxcbiAgU3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZSxcbiAgV2l0aFJlYXNvbixcbn0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQgdHlwZSB7IEludmFsaWRSZXF1ZXN0QnVja2V0IH0gZnJvbSAnLi9pbnZhbGlkQnVja2V0LmpzJ1xuXG4vLyBUT0RPOiBtYWtlIGR5bmFtaWMgYmFzZWQgb24gcGFja2FnZS5qc29uIGZpbGVcbmNvbnN0IHZlcnNpb24gPSAnMTkuMC4wLWFscGhhLjEnXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZXN0TWFuYWdlcihvcHRpb25zOiBDcmVhdGVSZXN0TWFuYWdlck9wdGlvbnMpOiBSZXN0TWFuYWdlciB7XG4gIC8vIEZhbHN5IHRva2VuIHN0cmluZyBjaGVja1xuICBpZiAoIW9wdGlvbnMudG9rZW4pIHRocm93IG5ldyBFcnJvcignWW91IG11c3QgcHJvdmlkZSBhIHZhbGlkIHRva2VuLicpXG5cbiAgY29uc3QgcmVzdDogUmVzdE1hbmFnZXIgPSB7XG4gICAgdG9rZW46IG9wdGlvbnMudG9rZW4sXG4gICAgYXBwbGljYXRpb25JZDogb3B0aW9ucy5hcHBsaWNhdGlvbklkID8gQmlnSW50KG9wdGlvbnMuYXBwbGljYXRpb25JZCkgOiBnZXRCb3RJZEZyb21Ub2tlbihvcHRpb25zLnRva2VuKSxcbiAgICB2ZXJzaW9uOiBvcHRpb25zLnZlcnNpb24gPz8gMTAsXG4gICAgYmFzZVVybDogb3B0aW9ucy5iYXNlVXJsID8/ICdodHRwczovL2Rpc2NvcmQuY29tL2FwaScsXG4gICAgbWF4UmV0cnlDb3VudDogSW5maW5pdHksXG4gICAgZ2xvYmFsbHlSYXRlTGltaXRlZDogZmFsc2UsXG4gICAgcHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHM6IGZhbHNlLFxuICAgIGRlbGV0ZVF1ZXVlRGVsYXk6IDYwMDAwLFxuICAgIHF1ZXVlczogbmV3IE1hcCgpLFxuICAgIHJhdGVMaW1pdGVkUGF0aHM6IG5ldyBNYXAoKSxcbiAgICBpbnZhbGlkQnVja2V0OiBjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCh7fSksXG5cbiAgICByb3V0ZXM6IHtcbiAgICAgIHdlYmhvb2tzOiB7XG4gICAgICAgIGlkOiAod2ViaG9va0lkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvd2ViaG9va3MvJHt3ZWJob29rSWR9YFxuICAgICAgICB9LFxuICAgICAgICBtZXNzYWdlOiAod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvd2ViaG9va3MvJHt3ZWJob29rSWR9LyR7dG9rZW59L21lc3NhZ2VzLyR7bWVzc2FnZUlkfT9gXG5cbiAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMudGhyZWFkSWQpIHVybCArPSBgdGhyZWFkX2lkPSR7b3B0aW9ucy50aHJlYWRJZH1gXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICB9LFxuICAgICAgICBvcmlnaW5hbDogKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICBsZXQgdXJsID0gYC93ZWJob29rcy8ke3dlYmhvb2tJZH0vJHt0b2tlbn0vbWVzc2FnZXMvQG9yaWdpbmFsP2BcblxuICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy50aHJlYWRJZCkgdXJsICs9IGB0aHJlYWRfaWQ9JHtvcHRpb25zLnRocmVhZElkfWBcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgIH0sXG4gICAgICAgIHdlYmhvb2s6ICh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvd2ViaG9va3MvJHt3ZWJob29rSWR9LyR7dG9rZW59P2BcblxuICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucz8ud2FpdCAhPT0gdW5kZWZpbmVkKSB1cmwgKz0gYHdhaXQ9JHtvcHRpb25zLndhaXQudG9TdHJpbmcoKX1gXG4gICAgICAgICAgICBpZiAob3B0aW9ucy50aHJlYWRJZCkgdXJsICs9IGB0aHJlYWRfaWQ9JHtvcHRpb25zLnRocmVhZElkfWBcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgIH0sXG4gICAgICB9LFxuXG4gICAgICAvLyBNaXNjZWxsYW5lb3VzIEVuZHBvaW50c1xuICAgICAgc2Vzc2lvbkluZm86ICgpID0+IHJlc3Qucm91dGVzLmdhdGV3YXlCb3QoKSxcblxuICAgICAgLy8gQ2hhbm5lbCBFbmRwb2ludHNcbiAgICAgIGNoYW5uZWxzOiB7XG4gICAgICAgIGRtOiAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuICcvdXNlcnMvQG1lL2NoYW5uZWxzJ1xuICAgICAgICB9LFxuICAgICAgICB3ZWJob29rczogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS93ZWJob29rc2BcbiAgICAgICAgfSxcblxuICAgICAgICBjaGFubmVsOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9YFxuICAgICAgICB9LFxuXG4gICAgICAgIGZvbGxvdzogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9mb2xsb3dlcnNgXG4gICAgICAgIH0sXG5cbiAgICAgICAgZm9ydW06IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vdGhyZWFkcz9oYXNfbWVzc2FnZT10cnVlYFxuICAgICAgICB9LFxuXG4gICAgICAgIGludml0ZXM6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vaW52aXRlc2BcbiAgICAgICAgfSxcblxuICAgICAgICBtZXNzYWdlOiAoY2hhbm5lbElkLCBtZXNzYWdlSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vbWVzc2FnZXMvJHttZXNzYWdlSWR9YFxuICAgICAgICB9LFxuXG4gICAgICAgIG1lc3NhZ2VzOiAoY2hhbm5lbElkLCBvcHRpb25zPzogR2V0TWVzc2FnZXNPcHRpb25zKSA9PiB7XG4gICAgICAgICAgY29uc3QgdXJsID0gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vbWVzc2FnZXM/YFxuXG4gICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIC8vIGlmIChpc0dldE1lc3NhZ2VzQWZ0ZXIob3B0aW9ucykgJiYgb3B0aW9ucy5hZnRlcikge1xuICAgICAgICAgICAgLy8gICB1cmwgKz0gYGFmdGVyPSR7b3B0aW9ucy5hZnRlcn1gXG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBpZiAoaXNHZXRNZXNzYWdlc0JlZm9yZShvcHRpb25zKSAmJiBvcHRpb25zLmJlZm9yZSkge1xuICAgICAgICAgICAgLy8gICB1cmwgKz0gYCZiZWZvcmU9JHtvcHRpb25zLmJlZm9yZX1gXG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBpZiAoaXNHZXRNZXNzYWdlc0Fyb3VuZChvcHRpb25zKSAmJiBvcHRpb25zLmFyb3VuZCkge1xuICAgICAgICAgICAgLy8gICB1cmwgKz0gYCZhcm91bmQ9JHtvcHRpb25zLmFyb3VuZH1gXG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBpZiAoaXNHZXRNZXNzYWdlc0xpbWl0KG9wdGlvbnMpICYmIG9wdGlvbnMubGltaXQpIHtcbiAgICAgICAgICAgIC8vICAgdXJsICs9IGAmbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgIH0sXG5cbiAgICAgICAgb3ZlcndyaXRlOiAoY2hhbm5lbElkLCBvdmVyd3JpdGVJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9wZXJtaXNzaW9ucy8ke292ZXJ3cml0ZUlkfWBcbiAgICAgICAgfSxcblxuICAgICAgICBjcm9zc3Bvc3Q6IChjaGFubmVsSWQsIG1lc3NhZ2VJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9tZXNzYWdlcy8ke21lc3NhZ2VJZH0vY3Jvc3Nwb3N0YFxuICAgICAgICB9LFxuXG4gICAgICAgIHN0YWdlczogKCkgPT4ge1xuICAgICAgICAgIHJldHVybiAnL3N0YWdlLWluc3RhbmNlcydcbiAgICAgICAgfSxcblxuICAgICAgICBzdGFnZTogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL3N0YWdlLWluc3RhbmNlcy8ke2NoYW5uZWxJZH1gXG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gVGhyZWFkIEVuZHBvaW50c1xuICAgICAgICB0aHJlYWRzOiB7XG4gICAgICAgICAgbWVzc2FnZTogKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vbWVzc2FnZXMvJHttZXNzYWdlSWR9L3RocmVhZHNgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbGw6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS90aHJlYWRzYFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWN0aXZlOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vdGhyZWFkcy9hY3RpdmVgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZW1iZXJzOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vdGhyZWFkLW1lbWJlcnNgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZTogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3RocmVhZC1tZW1iZXJzL0BtZWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVzZXI6IChjaGFubmVsSWQsIHVzZXJJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3RocmVhZC1tZW1iZXJzLyR7dXNlcklkfWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFyY2hpdmVkOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vdGhyZWFkcy9hcmNoaXZlZGBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHB1YmxpYzogKGNoYW5uZWxJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3RocmVhZHMvYXJjaGl2ZWQvcHVibGljP2BcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgdXJsICs9IGBiZWZvcmU9JHtuZXcgRGF0ZShvcHRpb25zLmJlZm9yZSkudG9JU09TdHJpbmcoKX1gXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCkgdXJsICs9IGAmbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJpdmF0ZTogKGNoYW5uZWxJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3RocmVhZHMvYXJjaGl2ZWQvcHJpdmF0ZT9gXG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmJlZm9yZSkge1xuICAgICAgICAgICAgICAgIHVybCArPSBgYmVmb3JlPSR7bmV3IERhdGUob3B0aW9ucy5iZWZvcmUpLnRvSVNPU3RyaW5nKCl9YFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubGltaXQpIHVybCArPSBgJmxpbWl0PSR7b3B0aW9ucy5saW1pdH1gXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGpvaW5lZDogKGNoYW5uZWxJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3VzZXJzL0BtZS90aHJlYWRzL2FyY2hpdmVkL3ByaXZhdGU/YFxuXG4gICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5iZWZvcmUpIHtcbiAgICAgICAgICAgICAgICB1cmwgKz0gYGJlZm9yZT0ke25ldyBEYXRlKG9wdGlvbnMuYmVmb3JlKS50b0lTT1N0cmluZygpfWBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0KSB1cmwgKz0gYCZsaW1pdD0ke29wdGlvbnMubGltaXR9YFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICB0eXBpbmc6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vdHlwaW5nYFxuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgICAgLy8gR3VpbGQgRW5kcG9pbnRzXG4gICAgICBndWlsZHM6IHtcbiAgICAgICAgYWxsOiAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuICcvZ3VpbGRzJ1xuICAgICAgICB9LFxuICAgICAgICBhdXRvbW9kOiB7XG4gICAgICAgICAgcnVsZTogKGd1aWxkSWQsIHJ1bGVJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vYXV0by1tb2RlcmF0aW9uL3J1bGVzLyR7cnVsZUlkfWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJ1bGVzOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vYXV0by1tb2RlcmF0aW9uL3J1bGVzYFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNoYW5uZWxzOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L2NoYW5uZWxzYFxuICAgICAgICB9LFxuICAgICAgICBlbW9qaTogKGd1aWxkSWQsIGVtb2ppSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9lbW9qaXMvJHtlbW9qaUlkfWBcbiAgICAgICAgfSxcbiAgICAgICAgZW1vamlzOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L2Vtb2ppc2BcbiAgICAgICAgfSxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgZXZlbnRzOiAoZ3VpbGRJZCwgd2l0aFVzZXJDb3VudD86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgIGxldCB1cmwgPSBgL2d1aWxkcy8ke2d1aWxkSWR9L3NjaGVkdWxlZC1ldmVudHM/YFxuXG4gICAgICAgICAgICBpZiAod2l0aFVzZXJDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHVybCArPSBgd2l0aF91c2VyX2NvdW50PSR7d2l0aFVzZXJDb3VudC50b1N0cmluZygpfWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGV2ZW50OiAoZ3VpbGRJZCwgZXZlbnRJZCwgd2l0aFVzZXJDb3VudD86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgIGxldCB1cmwgPSBgL2d1aWxkcy8ke2d1aWxkSWR9L3NjaGVkdWxlZC1ldmVudHMvJHtldmVudElkfWBcblxuICAgICAgICAgICAgaWYgKHdpdGhVc2VyQ291bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB1cmwgKz0gYHdpdGhfdXNlcl9jb3VudD0ke3dpdGhVc2VyQ291bnQudG9TdHJpbmcoKX1gXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVzZXJzOiAoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucz86IEdldFNjaGVkdWxlZEV2ZW50VXNlcnMpID0+IHtcbiAgICAgICAgICAgIGxldCB1cmwgPSBgL2d1aWxkcy8ke2d1aWxkSWR9L3NjaGVkdWxlZC1ldmVudHMvJHtldmVudElkfS91c2Vycz9gXG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubGltaXQgIT09IHVuZGVmaW5lZCkgdXJsICs9IGBsaW1pdD0ke29wdGlvbnMubGltaXR9YFxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy53aXRoTWVtYmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgICAgdXJsICs9IGAmd2l0aF9tZW1iZXI9JHtvcHRpb25zLndpdGhNZW1iZXIudG9TdHJpbmcoKX1gXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hZnRlciAhPT0gdW5kZWZpbmVkKSB1cmwgKz0gYCZhZnRlcj0ke29wdGlvbnMuYWZ0ZXJ9YFxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmJlZm9yZSAhPT0gdW5kZWZpbmVkKSB1cmwgKz0gYCZiZWZvcmU9JHtvcHRpb25zLmJlZm9yZX1gXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBndWlsZChndWlsZElkLCB3aXRoQ291bnRzKSB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvZ3VpbGRzLyR7Z3VpbGRJZH0/YFxuXG4gICAgICAgICAgaWYgKHdpdGhDb3VudHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdXJsICs9IGB3aXRoX2NvdW50cz0ke3dpdGhDb3VudHMudG9TdHJpbmcoKX1gXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICB9LFxuICAgICAgICBpbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkKSB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vaW50ZWdyYXRpb25zLyR7aW50ZWdyYXRpb25JZH1gXG4gICAgICAgIH0sXG4gICAgICAgIGludGVncmF0aW9uczogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9pbnRlZ3JhdGlvbnM/aW5jbHVkZV9hcHBsaWNhdGlvbnM9dHJ1ZWBcbiAgICAgICAgfSxcbiAgICAgICAgaW52aXRlKGludml0ZUNvZGUsIG9wdGlvbnMpIHtcbiAgICAgICAgICBsZXQgdXJsID0gYC9pbnZpdGVzLyR7aW52aXRlQ29kZX0/YFxuXG4gICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLndpdGhDb3VudHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIHVybCArPSBgd2l0aF9jb3VudHM9JHtvcHRpb25zLndpdGhDb3VudHMudG9TdHJpbmcoKX1gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy53aXRoRXhwaXJhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgdXJsICs9IGAmd2l0aF9leHBpcmF0aW9uPSR7b3B0aW9ucy53aXRoRXhwaXJhdGlvbi50b1N0cmluZygpfWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnNjaGVkdWxlZEV2ZW50SWQpIHtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICB1cmwgKz0gYCZndWlsZF9zY2hlZHVsZWRfZXZlbnRfaWQ9JHtvcHRpb25zLnNjaGVkdWxlZEV2ZW50SWR9YFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgfSxcbiAgICAgICAgaW52aXRlczogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9pbnZpdGVzYFxuICAgICAgICB9LFxuICAgICAgICBtZW1iZXJzOiB7XG4gICAgICAgICAgYmFuOiAoZ3VpbGRJZCwgdXNlcklkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9iYW5zLyR7dXNlcklkfWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJvdDogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L21lbWJlcnMvQG1lYFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVtYmVyOiAoZ3VpbGRJZCwgdXNlcklkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9tZW1iZXJzLyR7dXNlcklkfWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lbWJlcnM6IChndWlsZElkLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtndWlsZElkfS9tZW1iZXJzP2BcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0KSB1cmwgKz0gYGxpbWl0PSR7b3B0aW9ucy5saW1pdH1gXG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXIpIHVybCArPSBgJmFmdGVyPSR7b3B0aW9ucy5hZnRlcn1gXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlYXJjaDogKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtndWlsZElkfS9tZW1iZXJzL3NlYXJjaD9xdWVyeT0ke2VuY29kZVVSSUNvbXBvbmVudChxdWVyeSl9YFxuXG4gICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCAhPT0gdW5kZWZpbmVkKSB1cmwgKz0gYCZsaW1pdD0ke29wdGlvbnMubGltaXR9YFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcnVuZTogKGd1aWxkSWQsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGxldCB1cmwgPSBgL2d1aWxkcy8ke2d1aWxkSWR9L3BydW5lP2BcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5kYXlzKSB1cmwgKz0gYGRheXM9JHtvcHRpb25zLmRheXN9YFxuICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLmluY2x1ZGVSb2xlcykpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgICAgdXJsICs9IGAmaW5jbHVkZV9yb2xlcz0ke29wdGlvbnMuaW5jbHVkZVJvbGVzLmpvaW4oJywnKX1gXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5pbmNsdWRlUm9sZXMpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgICAgdXJsICs9IGAmaW5jbHVkZV9yb2xlcz0ke29wdGlvbnMuaW5jbHVkZVJvbGVzfWBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcm9sZXM6IHtcbiAgICAgICAgICBvbmU6IChndWlsZElkOiBCaWdTdHJpbmcsIHJvbGVJZDogQmlnU3RyaW5nKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9yb2xlcy8ke3JvbGVJZH1gXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbGw6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L3JvbGVzYFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVtYmVyOiAoZ3VpbGRJZCwgbWVtYmVySWQsIHJvbGVJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vbWVtYmVycy8ke21lbWJlcklkfS9yb2xlcy8ke3JvbGVJZH1gXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgY29kZTogKGNvZGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2d1aWxkcy90ZW1wbGF0ZXMvJHtjb2RlfWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIGd1aWxkOiAoZ3VpbGRJZCwgY29kZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vdGVtcGxhdGVzLyR7Y29kZX1gXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbGw6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS90ZW1wbGF0ZXNgXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgd2ViaG9va3M6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vd2ViaG9va3NgXG4gICAgICAgIH0sXG4gICAgICB9LFxuXG4gICAgICAvLyBJbnRlcmFjdGlvbiBFbmRwb2ludHNcbiAgICAgIGludGVyYWN0aW9uczoge1xuICAgICAgICBjb21tYW5kczoge1xuICAgICAgICAgIC8vIEFwcGxpY2F0aW9uIEVuZHBvaW50c1xuICAgICAgICAgIGNvbW1hbmRzOiAoYXBwbGljYXRpb25JZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvYXBwbGljYXRpb25zLyR7YXBwbGljYXRpb25JZH0vY29tbWFuZHNgXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGd1aWxkczoge1xuICAgICAgICAgICAgYWxsKGFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGAvYXBwbGljYXRpb25zLyR7YXBwbGljYXRpb25JZH0vZ3VpbGRzLyR7Z3VpbGRJZH0vY29tbWFuZHNgXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBvbmUoYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkLCB3aXRoTG9jYWxpemF0aW9ucykge1xuICAgICAgICAgICAgICBsZXQgdXJsID0gYC9hcHBsaWNhdGlvbnMvJHthcHBsaWNhdGlvbklkfS9ndWlsZHMvJHtndWlsZElkfS9jb21tYW5kcy8ke2NvbW1hbmRJZH0/YFxuXG4gICAgICAgICAgICAgIGlmICh3aXRoTG9jYWxpemF0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdXJsICs9IGB3aXRoX2xvY2FsaXphdGlvbnM9JHt3aXRoTG9jYWxpemF0aW9ucy50b1N0cmluZygpfWBcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwZXJtaXNzaW9uczogKGFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2FwcGxpY2F0aW9ucy8ke2FwcGxpY2F0aW9uSWR9L2d1aWxkcy8ke2d1aWxkSWR9L2NvbW1hbmRzL3Blcm1pc3Npb25zYFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGVybWlzc2lvbjogKGFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvYXBwbGljYXRpb25zLyR7YXBwbGljYXRpb25JZH0vZ3VpbGRzLyR7Z3VpbGRJZH0vY29tbWFuZHMvJHtjb21tYW5kSWR9L3Blcm1pc3Npb25zYFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tbWFuZDogKGFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCwgd2l0aExvY2FsaXphdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGxldCB1cmwgPSBgL2FwcGxpY2F0aW9ucy8ke2FwcGxpY2F0aW9uSWR9L2NvbW1hbmRzLyR7Y29tbWFuZElkfT9gXG5cbiAgICAgICAgICAgIGlmICh3aXRoTG9jYWxpemF0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHVybCArPSBgd2l0aExvY2FsaXphdGlvbnM9JHt3aXRoTG9jYWxpemF0aW9ucy50b1N0cmluZygpfWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVzcG9uc2VzOiB7XG4gICAgICAgICAgLy8gSW50ZXJhY3Rpb24gRW5kcG9pbnRzXG4gICAgICAgICAgY2FsbGJhY2s6IChpbnRlcmFjdGlvbklkLCB0b2tlbikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvaW50ZXJhY3Rpb25zLyR7aW50ZXJhY3Rpb25JZH0vJHt0b2tlbn0vY2FsbGJhY2tgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvcmlnaW5hbDogKGludGVyYWN0aW9uSWQsIHRva2VuKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC93ZWJob29rcy8ke2ludGVyYWN0aW9uSWR9LyR7dG9rZW59L21lc3NhZ2VzL0BvcmlnaW5hbGBcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lc3NhZ2U6IChhcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC93ZWJob29rcy8ke2FwcGxpY2F0aW9uSWR9LyR7dG9rZW59L21lc3NhZ2VzLyR7bWVzc2FnZUlkfWBcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgICAgLy8gVXNlciBlbmRwb2ludHNcbiAgICAgIHVzZXIodXNlcklkKSB7XG4gICAgICAgIHJldHVybiBgL3VzZXJzLyR7dXNlcklkfWBcbiAgICAgIH0sXG5cbiAgICAgIHVzZXJCb3QoKSB7XG4gICAgICAgIHJldHVybiAnL3VzZXJzL0BtZSdcbiAgICAgIH0sXG5cbiAgICAgIG9hdXRoMkFwcGxpY2F0aW9uKCkge1xuICAgICAgICByZXR1cm4gJ29hdXRoMi9hcHBsaWNhdGlvbnMvQG1lJ1xuICAgICAgfSxcblxuICAgICAgZ2F0ZXdheUJvdCgpIHtcbiAgICAgICAgcmV0dXJuICcvZ2F0ZXdheS9ib3QnXG4gICAgICB9LFxuXG4gICAgICBuaXRyb1N0aWNrZXJQYWNrcygpIHtcbiAgICAgICAgcmV0dXJuICcvc3RpY2tlci1wYWNrcydcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIGNoZWNrUmF0ZUxpbWl0cyh1cmwpIHtcbiAgICAgIGNvbnN0IHJhdGVsaW1pdGVkID0gcmVzdC5yYXRlTGltaXRlZFBhdGhzLmdldCh1cmwpXG4gICAgICBjb25zdCBnbG9iYWwgPSByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZ2V0KCdnbG9iYWwnKVxuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKVxuXG4gICAgICBpZiAocmF0ZWxpbWl0ZWQgJiYgbm93IDwgcmF0ZWxpbWl0ZWQucmVzZXRUaW1lc3RhbXApIHtcbiAgICAgICAgcmV0dXJuIHJhdGVsaW1pdGVkLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iYWwgJiYgbm93IDwgZ2xvYmFsLnJlc2V0VGltZXN0YW1wKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWwucmVzZXRUaW1lc3RhbXAgLSBub3dcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGNoYW5nZVRvRGlzY29yZEZvcm1hdChvYmo6IGFueSk6IGFueSB7XG4gICAgICBpZiAob2JqID09PSBudWxsKSByZXR1cm4gbnVsbFxuXG4gICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICAgIHJldHVybiBvYmoubWFwKChpdGVtKSA9PiByZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChpdGVtKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld09iajogYW55ID0ge31cblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3Blcm1pc3Npb25zJykge1xuICAgICAgICAgICAgbmV3T2JqLnBlcm1pc3Npb25zID0gY2FsY3VsYXRlQml0cyhvYmpba2V5XSlcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV3T2JqW2NhbWVsVG9TbmFrZUNhc2Uoa2V5KV0gPSByZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvYmpba2V5XSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXdPYmpcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdiaWdpbnQnKSByZXR1cm4gb2JqLnRvU3RyaW5nKClcblxuICAgICAgcmV0dXJuIG9ialxuICAgIH0sXG5cbiAgICBjcmVhdGVSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgICd1c2VyLWFnZW50JzogYERpc2NvcmRCb3QgKGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3JkZW5vL2Rpc2NvcmRlbm8sIHYke3ZlcnNpb259KWAsXG4gICAgICB9XG5cbiAgICAgIGlmICghb3B0aW9ucy51bmF1dGhvcml6ZWQpIGhlYWRlcnMuYXV0aG9yaXphdGlvbiA9IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgLy8gU09NRVRJTUVTIFNQRUNJQUwgSEVBREVSUyAoRS5HLiBDVVNUT00gQVVUSE9SSVpBVElPTikgTkVFRCBUTyBCRSBVU0VEXG4gICAgICBpZiAob3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICAgIGhlYWRlcnNba2V5LnRvTG93ZXJDYXNlKCldID0gb3B0aW9ucy5oZWFkZXJzW2tleV1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBHRVQgTUVUSE9EUyBTSE9VTEQgTk9UIEhBVkUgQSBCT0RZXG4gICAgICBpZiAob3B0aW9ucy5tZXRob2QgPT09ICdHRVQnKSB7XG4gICAgICAgIG9wdGlvbnMuYm9keSA9IHVuZGVmaW5lZFxuICAgICAgfVxuXG4gICAgICAvLyBJRiBBIFJFQVNPTiBJUyBQUk9WSURFRCBFTkNPREUgSVQgSU4gSEVBREVSU1xuICAgICAgaWYgKG9wdGlvbnMuYm9keT8ucmVhc29uKSB7XG4gICAgICAgIGhlYWRlcnNbJ1gtQXVkaXQtTG9nLVJlYXNvbiddID0gZW5jb2RlVVJJQ29tcG9uZW50KG9wdGlvbnMuYm9keS5yZWFzb24gYXMgc3RyaW5nKVxuICAgICAgICBvcHRpb25zLmJvZHkucmVhc29uID0gdW5kZWZpbmVkXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmJvZHkpIHtcbiAgICAgICAgY29uc3QgeyBmaWxlIH0gPSBvcHRpb25zLmJvZHlcbiAgICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgICBjb25zdCBmaWxlcyA9IGZpbmRGaWxlcyhmaWxlKVxuICAgICAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuXG4gICAgICAgICAgLy8gV0hFTiBDUkVBVElORyBBIFNUSUNLRVIsIERJU0NPUkQgV0FOVFMgRk9STSBEQVRBIE9OTFlcbiAgICAgICAgICBpZiAob3B0aW9ucy51cmw/LmVuZHNXaXRoKCcvc3RpY2tlcnMnKSAmJiBvcHRpb25zLm1ldGhvZCA9PT0gJ1BPU1QnKSB7XG4gICAgICAgICAgICBmb3JtLmFwcGVuZCgnZmlsZScsIGZpbGVzWzBdLmJsb2IsIGZpbGVzWzBdLm5hbWUpXG4gICAgICAgICAgICBmb3JtLmFwcGVuZCgnbmFtZScsIG9wdGlvbnMuYm9keS5uYW1lIGFzIHN0cmluZylcbiAgICAgICAgICAgIGZvcm0uYXBwZW5kKCdkZXNjcmlwdGlvbicsIG9wdGlvbnMuYm9keS5kZXNjcmlwdGlvbiBhcyBzdHJpbmcpXG4gICAgICAgICAgICBmb3JtLmFwcGVuZCgndGFncycsIG9wdGlvbnMuYm9keS50YWdzIGFzIHN0cmluZylcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBmb3JtLmFwcGVuZChgZmlsZSR7aX1gLCBmaWxlc1tpXS5ibG9iLCBmaWxlc1tpXS5uYW1lKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmlsZSkgb3B0aW9ucy5ib2R5LmZpbGUgPSB1bmRlZmluZWRcbiAgICAgICAgICAgIGZvcm0uYXBwZW5kKCdwYXlsb2FkX2pzb24nLCBKU09OLnN0cmluZ2lmeShyZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvcHRpb25zLmJvZHkpKSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvcHRpb25zLmJvZHkuZmlsZSA9IGZvcm1cbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmJvZHkgJiYgIVsnR0VUJywgJ0RFTEVURSddLmluY2x1ZGVzKG9wdGlvbnMubWV0aG9kKSkge1xuICAgICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgYm9keTogKG9wdGlvbnMuYm9keT8uZmlsZSA/PyBKU09OLnN0cmluZ2lmeShyZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvcHRpb25zLmJvZHkpKSkgYXMgRm9ybURhdGEgfCBzdHJpbmcsXG4gICAgICAgIG1ldGhvZDogb3B0aW9ucy5tZXRob2QsXG4gICAgICB9XG4gICAgfSxcblxuICAgIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKCkge1xuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZW50cmllcygpKSB7XG4gICAgICAgIC8vICAgcmVzdC5kZWJ1ZyhcbiAgICAgICAgLy8gYFtSRVNUIC0gcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHNdIFJ1bm5pbmcgZm9yIG9mIGxvb3AuICR7XG4gICAgICAgIC8vICAgdmFsdWUucmVzZXRUaW1lc3RhbXAgLSBub3dcbiAgICAgICAgLy8gfWBcbiAgICAgICAgLy8gICApXG4gICAgICAgIC8vIElmIHRoZSB0aW1lIGhhcyBub3QgcmVhY2hlZCBjYW5jZWxcbiAgICAgICAgaWYgKHZhbHVlLnJlc2V0VGltZXN0YW1wID4gbm93KSBjb250aW51ZVxuXG4gICAgICAgIC8vIFJhdGUgbGltaXQgaXMgb3ZlciwgZGVsZXRlIHRoZSByYXRlIGxpbWl0ZXJcbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmRlbGV0ZShrZXkpXG4gICAgICAgIC8vIElmIGl0IHdhcyBnbG9iYWwsIGFsc28gbWFyayB0aGUgZ2xvYmFsIHZhbHVlIGFzIGZhbHNlXG4gICAgICAgIGlmIChrZXkgPT09ICdnbG9iYWwnKSByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSBmYWxzZVxuICAgICAgfVxuXG4gICAgICAvLyBBTEwgUEFUSFMgQVJFIENMRUFSRUQgQ0FOIENBTkNFTCBPVVQhXG4gICAgICBpZiAocmVzdC5yYXRlTGltaXRlZFBhdGhzLnNpemUgPT09IDApIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN0LnByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzID0gdHJ1ZVxuICAgICAgICAvLyBSRUNIRUNLIElOIDEgU0VDT05EXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIC8vIHJlc3QuZGVidWcoJ1tSRVNUIC0gcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHNdIFJ1bm5pbmcgc2V0VGltZW91dC4nKVxuICAgICAgICAgIHJlc3QucHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKVxuICAgICAgICB9LCAxMDAwKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKiogUHJvY2Vzc2VzIHRoZSByYXRlIGxpbWl0IGhlYWRlcnMgYW5kIGRldGVybWluZXMgaWYgaXQgbmVlZHMgdG8gYmUgcmF0ZSBsaW1pdGVkIGFuZCByZXR1cm5zIHRoZSBidWNrZXQgaWQgaWYgYXZhaWxhYmxlICovXG4gICAgcHJvY2Vzc0hlYWRlcnModXJsLCBoZWFkZXJzKSB7XG4gICAgICBsZXQgcmF0ZUxpbWl0ZWQgPSBmYWxzZVxuXG4gICAgICAvLyBHRVQgQUxMIE5FQ0VTU0FSWSBIRUFERVJTXG4gICAgICBjb25zdCByZW1haW5pbmcgPSBoZWFkZXJzLmdldCgneC1yYXRlbGltaXQtcmVtYWluaW5nJylcbiAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBoZWFkZXJzLmdldCgneC1yYXRlbGltaXQtcmVzZXQtYWZ0ZXInKVxuICAgICAgY29uc3QgcmVzZXQgPSBEYXRlLm5vdygpICsgTnVtYmVyKHJldHJ5QWZ0ZXIpICogMTAwMFxuICAgICAgY29uc3QgZ2xvYmFsID0gaGVhZGVycy5nZXQoJ3gtcmF0ZWxpbWl0LWdsb2JhbCcpXG4gICAgICAvLyB1bmRlZmluZWQgb3ZlcnJpZGUgbnVsbCBuZWVkZWQgZm9yIHR5cGluZ3NcbiAgICAgIGNvbnN0IGJ1Y2tldElkID0gaGVhZGVycy5nZXQoJ3gtcmF0ZWxpbWl0LWJ1Y2tldCcpID8/IHVuZGVmaW5lZFxuICAgICAgY29uc3QgbGltaXQgPSBoZWFkZXJzLmdldCgneC1yYXRlbGltaXQtbGltaXQnKVxuXG4gICAgICByZXN0LnF1ZXVlcy5nZXQodXJsKT8uaGFuZGxlQ29tcGxldGVkUmVxdWVzdCh7XG4gICAgICAgIHJlbWFpbmluZzogcmVtYWluaW5nID8gTnVtYmVyKHJlbWFpbmluZykgOiB1bmRlZmluZWQsXG4gICAgICAgIGludGVydmFsOiByZXRyeUFmdGVyID8gTnVtYmVyKHJldHJ5QWZ0ZXIpICogMTAwMCA6IHVuZGVmaW5lZCxcbiAgICAgICAgbWF4OiBsaW1pdCA/IE51bWJlcihsaW1pdCkgOiB1bmRlZmluZWQsXG4gICAgICB9KVxuXG4gICAgICAvLyBJRiBUSEVSRSBJUyBOTyBSRU1BSU5JTkcgUkFURSBMSU1JVCwgTUFSSyBJVCBBUyBSQVRFIExJTUlURURcbiAgICAgIGlmIChyZW1haW5pbmcgPT09ICcwJykge1xuICAgICAgICByYXRlTGltaXRlZCA9IHRydWVcblxuICAgICAgICAvLyBTQVZFIFRIRSBVUkwgQVMgTElNSVRFRCwgSU1QT1JUQU5UIEZPUiBORVcgUkVRVUVTVFMgQlkgVVNFUiBXSVRIT1VUIEJVQ0tFVFxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KHVybCwge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICByZXNldFRpbWVzdGFtcDogcmVzZXQsXG4gICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gU0FWRSBUSEUgQlVDS0VUIEFTIExJTUlURUQgU0lOQ0UgRElGRkVSRU5UIFVSTFMgTUFZIFNIQVJFIEEgQlVDS0VUXG4gICAgICAgIGlmIChidWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYnVja2V0SWQsIHtcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiByZXNldCxcbiAgICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSUYgVEhFUkUgSVMgTk8gUkVNQUlOSU5HIEdMT0JBTCBMSU1JVCwgTUFSSyBJVCBSQVRFIExJTUlURUQgR0xPQkFMTFlcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgY29uc3QgcmV0cnlBZnRlciA9IGhlYWRlcnMuZ2V0KCdyZXRyeS1hZnRlcicpXG4gICAgICAgIGNvbnN0IGdsb2JhbFJlc2V0ID0gRGF0ZS5ub3coKSArIE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDBcbiAgICAgICAgLy8gICByZXN0LmRlYnVnKFxuICAgICAgICAvLyBgW1JFU1QgPSBHbG9iYWxseSBSYXRlIExpbWl0ZWRdIFVSTDogJHt1cmx9IHwgR2xvYmFsIFJlc3Q6ICR7Z2xvYmFsUmVzZXR9YFxuICAgICAgICAvLyAgIClcbiAgICAgICAgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gdHJ1ZVxuICAgICAgICByYXRlTGltaXRlZCA9IHRydWVcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSBmYWxzZVxuICAgICAgICB9LCBnbG9iYWxSZXNldClcblxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KCdnbG9iYWwnLCB7XG4gICAgICAgICAgdXJsOiAnZ2xvYmFsJyxcbiAgICAgICAgICByZXNldFRpbWVzdGFtcDogZ2xvYmFsUmVzZXQsXG4gICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChidWNrZXRJZCwge1xuICAgICAgICAgICAgdXJsOiAnZ2xvYmFsJyxcbiAgICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiBnbG9iYWxSZXNldCxcbiAgICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHJhdGVMaW1pdGVkICYmICFyZXN0LnByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzKSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJhdGVMaW1pdGVkID8gYnVja2V0SWQgOiB1bmRlZmluZWRcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFJlcXVlc3Qob3B0aW9ucykge1xuICAgICAgY29uc3QgdXJsID0gb3B0aW9ucy51cmwuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSA/IG9wdGlvbnMudXJsIDogYCR7cmVzdC5iYXNlVXJsfS92JHtyZXN0LnZlcnNpb259JHtvcHRpb25zLnVybH1gXG4gICAgICBjb25zdCBwYXlsb2FkID0gcmVzdC5jcmVhdGVSZXF1ZXN0KHsgbWV0aG9kOiBvcHRpb25zLm1ldGhvZCwgdXJsOiBvcHRpb25zLnVybCwgYm9keTogb3B0aW9ucy5ib2R5LCAuLi5vcHRpb25zLm9wdGlvbnMgfSlcblxuICAgICAgbG9nZ2VyLmRlYnVnKGBzZW5kaW5nIHJlcXVlc3QgdG8gJHt1cmx9YCwgJ3dpdGggcGF5bG9hZDonLCB7IC4uLnBheWxvYWQsIGhlYWRlcnM6IHsgLi4ucGF5bG9hZC5oZWFkZXJzLCBhdXRob3JpemF0aW9uOiAnQm90IHRva2VuaGVyZScgfSB9KVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHBheWxvYWQpXG4gICAgICBsb2dnZXIuZGVidWcoYHJlcXVlc3QgZmV0Y2hlZCBmcm9tICR7dXJsfSB3aXRoIHN0YXR1cyAke3Jlc3BvbnNlLnN0YXR1c30gJiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YClcblxuICAgICAgLy8gU2V0IHRoZSBidWNrZXQgaWQgaWYgaXQgd2FzIGF2YWlsYWJsZSBvbiB0aGUgaGVhZGVyc1xuICAgICAgY29uc3QgYnVja2V0SWQgPSByZXN0LnByb2Nlc3NIZWFkZXJzKHJlc3Quc2ltcGxpZnlVcmwob3B0aW9ucy51cmwsIG9wdGlvbnMubWV0aG9kKSwgcmVzcG9uc2UuaGVhZGVycylcbiAgICAgIGlmIChidWNrZXRJZCkgb3B0aW9ucy5idWNrZXRJZCA9IGJ1Y2tldElkXG5cbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPCAyMDAgfHwgcmVzcG9uc2Uuc3RhdHVzID49IDQwMCkge1xuICAgICAgICBsb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGZhaWxlZC5gKVxuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQyOSkge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgUmVxdWVzdCB0byAke3VybH0gd2FzIHJhdGVsaW1pdGVkLmApXG4gICAgICAgICAgLy8gVG9vIG1hbnkgYXR0ZW1wdHMsIGdldCByaWQgb2YgcmVxdWVzdCBmcm9tIHF1ZXVlLlxuICAgICAgICAgIGlmIChvcHRpb25zLnJldHJ5Q291bnQrKyA+PSByZXN0Lm1heFJldHJ5Q291bnQpIHtcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgUmVxdWVzdCB0byAke3VybH0gZXhjZWVkZWQgdGhlIG1heGltdW0gYWxsb3dlZCByZXRyaWVzLmAsICd3aXRoIHBheWxvYWQ6JywgcGF5bG9hZClcbiAgICAgICAgICAgIC8vIHJlc3QuZGVidWcoYFtSRVNUIC0gUmV0cmllc01heGVkXSAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfWApXG4gICAgICAgICAgICAvLyBSZW1vdmUgaXRlbSBmcm9tIHF1ZXVlIHRvIHByZXZlbnQgcmV0cnlcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLnJlamVjdD8uKHtcbiAgICAgICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgICAgZXJyb3I6ICdUaGUgb3B0aW9ucyB3YXMgcmF0ZSBsaW1pdGVkIGFuZCBpdCBtYXhlZCBvdXQgdGhlIHJldHJpZXMgbGltaXQuJyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gUmF0ZSBsaW1pdGVkLCBhZGQgYmFjayB0byBxdWV1ZVxuICAgICAgICAgIHJlc3QuaW52YWxpZEJ1Y2tldC5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KHJlc3BvbnNlLnN0YXR1cywgcmVzcG9uc2UuaGVhZGVycy5nZXQoJ1gtUmF0ZUxpbWl0LVNjb3BlJykgPT09ICdzaGFyZWQnKVxuXG4gICAgICAgICAgY29uc3QgcmVzZXRBZnRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCd4LXJhdGVsaW1pdC1yZXNldC1hZnRlcicpXG4gICAgICAgICAgaWYgKHJlc2V0QWZ0ZXIpIGF3YWl0IGRlbGF5KE51bWJlcihyZXNldEFmdGVyKSAqIDEwMDApXG5cbiAgICAgICAgICByZXR1cm4gYXdhaXQgb3B0aW9ucy5yZXRyeVJlcXVlc3Q/LihvcHRpb25zKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnMucmVqZWN0KGF3YWl0IHJlc3BvbnNlLmpzb24oKSlcbiAgICAgIH1cblxuICAgICAgLy8gRGlzY29yZCBzb21ldGltZXMgc2VuZHMgbm8gcmVzcG9uc2VcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwNCkgcmV0dXJuIG9wdGlvbnMucmVzb2x2ZSh1bmRlZmluZWQpXG5cbiAgICAgIG9wdGlvbnMucmVzb2x2ZShhd2FpdCByZXNwb25zZS5qc29uKCkpXG4gICAgfSxcblxuICAgIC8vIENyZWRpdHM6IGdpdGh1Yi5jb20vYWJhbGFiYWhhaGEvZXJpcyBsaWIvcmVzdC9SZXF1ZXN0SGFuZGxlci5qcyNMMzk3XG4gICAgLy8gTW9kaWZpZWQgZm9yIG91ciB1c2UtY2FzZVxuICAgIHNpbXBsaWZ5VXJsKHVybCwgbWV0aG9kKSB7XG4gICAgICBsZXQgcm91dGUgPSB1cmxcbiAgICAgICAgLnJlcGxhY2UoL1xcLyhbYS16LV0rKVxcLyg/OlswLTldezE3LDE5fSkvZywgZnVuY3Rpb24gKG1hdGNoLCBwOiBzdHJpbmcpIHtcbiAgICAgICAgICByZXR1cm4gWydjaGFubmVscycsICdndWlsZHMnXS5pbmNsdWRlcyhwKSA/IG1hdGNoIDogYC8ke3B9L3hgXG4gICAgICAgIH0pXG4gICAgICAgIC5yZXBsYWNlKC9cXC9yZWFjdGlvbnNcXC9bXi9dKy9nLCAnL3JlYWN0aW9ucy94JylcblxuICAgICAgLy8gR0VORVJBTCAvcmVhY3Rpb25zIGFuZCAvcmVhY3Rpb25zL2Vtb2ppL0BtZSBzaGFyZSB0aGUgYnVja2V0c1xuICAgICAgaWYgKHJvdXRlLmluY2x1ZGVzKCcvcmVhY3Rpb25zJykpIHtcbiAgICAgICAgcm91dGUgPSByb3V0ZS5zdWJzdHJpbmcoMCwgcm91dGUuaW5kZXhPZignL3JlYWN0aW9ucycpICsgJy9yZWFjdGlvbnMnLmxlbmd0aClcbiAgICAgIH1cblxuICAgICAgLy8gRGVsZXRlIE1lc3NhZ2UgZW5kcG9pbnQgaGFzIGl0cyBvd24gcmF0ZSBsaW1pdFxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0RFTEVURScgJiYgcm91dGUuZW5kc1dpdGgoJy9tZXNzYWdlcy94JykpIHtcbiAgICAgICAgcm91dGUgPSBtZXRob2QgKyByb3V0ZVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcm91dGVcbiAgICB9LFxuXG4gICAgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdDogU2VuZFJlcXVlc3RPcHRpb25zKSB7XG4gICAgICBjb25zdCByb3V0ZSA9IHJlcXVlc3QudXJsLnN1YnN0cmluZyhyZXF1ZXN0LnVybC5pbmRleE9mKCdhcGkvJykpXG4gICAgICBjb25zdCBwYXJ0cyA9IHJvdXRlLnNwbGl0KCcvJylcbiAgICAgIC8vIFJlbW92ZSB0aGUgYXBpL1xuICAgICAgcGFydHMuc2hpZnQoKVxuICAgICAgLy8gUmVtb3ZlcyB0aGUgL3YjL1xuICAgICAgaWYgKHBhcnRzWzBdPy5zdGFydHNXaXRoKCd2JykpIHBhcnRzLnNoaWZ0KClcbiAgICAgIC8vIFNldCB0aGUgZnVsbCB1cmwgdG8gZGlzY29yZCBhcGkgaW4gY2FzZSBpdCB3YXMgcmVjaWV2ZWQgaW4gYSBwcm94eSByZXN0XG4gICAgICByZXF1ZXN0LnVybCA9IGAke3Jlc3QuYmFzZVVybH0vdiR7cmVzdC52ZXJzaW9ufS8ke3BhcnRzLmpvaW4oJy8nKX1gXG5cbiAgICAgIGNvbnN0IHVybCA9IHJlc3Quc2ltcGxpZnlVcmwocmVxdWVzdC51cmwsIHJlcXVlc3QubWV0aG9kKVxuICAgICAgY29uc3QgcXVldWUgPSByZXN0LnF1ZXVlcy5nZXQodXJsKVxuXG4gICAgICBpZiAocXVldWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBxdWV1ZS5tYWtlUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ1JFQVRFUyBBIE5FVyBRVUVVRVxuICAgICAgICBjb25zdCBidWNrZXRRdWV1ZSA9IG5ldyBRdWV1ZShyZXN0LCB7IHVybCwgZGVsZXRlUXVldWVEZWxheTogcmVzdC5kZWxldGVRdWV1ZURlbGF5IH0pXG5cbiAgICAgICAgLy8gQWRkIHJlcXVlc3QgdG8gcXVldWVcbiAgICAgICAgYnVja2V0UXVldWUubWFrZVJlcXVlc3QocmVxdWVzdClcbiAgICAgICAgLy8gU2F2ZSBxdWV1ZVxuICAgICAgICByZXN0LnF1ZXVlcy5zZXQodXJsLCBidWNrZXRRdWV1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgbWFrZVJlcXVlc3QobWV0aG9kLCB1cmwsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHJlc3QucHJvY2Vzc1JlcXVlc3Qoe1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgYm9keSxcbiAgICAgICAgICByZXRyeUNvdW50OiAwLFxuICAgICAgICAgIHJldHJ5UmVxdWVzdDogYXN5bmMgZnVuY3Rpb24gKG9wdGlvbnM6IFNlbmRSZXF1ZXN0T3B0aW9ucykge1xuICAgICAgICAgICAgLy8gVE9ETzogc2hvdWxkIGNoYW5nZSB0byByZXByb2Nlc3MgcXVldWUgaXRlbVxuICAgICAgICAgICAgYXdhaXQgcmVzdC5zZW5kUmVxdWVzdChvcHRpb25zKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICByZWplY3QsXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnR0VUJywgdXJsKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgcG9zdDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nLCBib2R5PzogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BPU1QnLCB1cmwsIGJvZHkpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGUodXJsOiBzdHJpbmcsIGJvZHk/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnREVMRVRFJywgdXJsLCBib2R5KSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcGF0Y2g8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgYm9keT86IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQQVRDSCcsIHVybCwgYm9keSkpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHB1dDxUID0gdm9pZD4odXJsOiBzdHJpbmcsIGJvZHk/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BVVCcsIHVybCwgYm9keSwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGNoYW5uZWxzOiB7XG4gICAgICBtZXNzYWdlczoge1xuICAgICAgICBhc3luYyBkZWxldGUoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbj8pIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGVNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pXG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jIGVkaXQoY2hhbm5lbElkLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5lZGl0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgb3B0aW9ucylcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBzZW5kKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LnNlbmRNZXNzYWdlKGNoYW5uZWxJZCwgb3B0aW9ucylcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBwdWJsaXNoKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHVibGlzaE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpXG4gICAgICAgIH0sXG4gICAgICB9LFxuXG4gICAgICBhc3luYyBnZXQoaWQpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0Q2hhbm5lbChpZClcbiAgICAgIH0sXG5cbiAgICAgIGFzeW5jIGNyZWF0ZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCByZXN0LmNyZWF0ZUNoYW5uZWwoZ3VpbGRJZCwgb3B0aW9ucylcbiAgICAgIH0sXG5cbiAgICAgIGFzeW5jIGRlbGV0ZShpZCwgcmVhc29uKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZUNoYW5uZWwoaWQsIHJlYXNvbilcbiAgICAgIH0sXG5cbiAgICAgIGFzeW5jIGVkaXQoaWQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZWRpdENoYW5uZWwoaWQsIG9wdGlvbnMpXG4gICAgICB9LFxuXG4gICAgICBhc3luYyBmb2xsb3coc291cmNlQ2hhbm5lbElkLCB0YXJnZXRDaGFubmVsSWQpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZm9sbG93QW5ub3VuY2VtZW50KHNvdXJjZUNoYW5uZWxJZCwgdGFyZ2V0Q2hhbm5lbElkKVxuICAgICAgfSxcblxuICAgICAgZm9ydW1zOiB7XG4gICAgICAgIGFzeW5jIHBvc3QoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuY3JlYXRlRm9ydW1UaHJlYWQoY2hhbm5lbElkLCBvcHRpb25zKVxuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgYXN5bmMgZWRpdChjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5lZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXMoY2hhbm5lbElkLCBvcHRpb25zKVxuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIGRlbGV0ZShjaGFubmVsSWQsIGlkKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlQ2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZShjaGFubmVsSWQsIGlkKVxuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgICAgYXN5bmMgcG9zaXRpb25zKGd1aWxkSWQsIGNoYW5uZWxQb3NpdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZWRpdENoYW5uZWxQb3NpdGlvbnMoZ3VpbGRJZCwgY2hhbm5lbFBvc2l0aW9ucylcbiAgICAgIH0sXG5cbiAgICAgIGFzeW5jIGludml0ZXMoaWQpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0Q2hhbm5lbEludml0ZXMoaWQpXG4gICAgICB9LFxuXG4gICAgICBzdGFnZXM6IHtcbiAgICAgICAgYXN5bmMgY3JlYXRlKG9wdGlvbnMpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5jcmVhdGVTdGFnZUluc3RhbmNlKG9wdGlvbnMpXG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgZGVsZXRlKGNoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlU3RhZ2VJbnN0YW5jZShjaGFubmVsSWQsIHJlYXNvbilcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBlZGl0KGNoYW5uZWxJZCwgZGF0YSkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmVkaXRTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgZGF0YSlcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBnZXQoY2hhbm5lbElkKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQpXG4gICAgICAgIH0sXG4gICAgICB9LFxuXG4gICAgICB0aHJlYWRzOiB7XG4gICAgICAgIGNyZWF0ZToge1xuICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgIGFzeW5jIG1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3Quc3RhcnRUaHJlYWRXaXRoTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgb3B0aW9ucylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3aXRob3V0OiB7XG4gICAgICAgICAgICBhc3luYyBtZXNzYWdlKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5zdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlKGNoYW5uZWxJZCwgb3B0aW9ucylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICBnZXQ6IHtcbiAgICAgICAgICBhc3luYyBhY3RpdmUoZ3VpbGRJZCkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0QWN0aXZlVGhyZWFkcyhndWlsZElkKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBhcmNoaXZlZDoge1xuICAgICAgICAgICAgYXN5bmMgcHJpdmF0ZShjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0UHJpdmF0ZUFyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBhc3luYyBqb2luZWQoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldFByaXZhdGVKb2luZWRBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgYXN5bmMgcHVibGljKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRQdWJsaWNBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgYXN5bmMgbWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGFzeW5jIG1lbWJlcnMoY2hhbm5lbElkKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRUaHJlYWRNZW1iZXJzKGNoYW5uZWxJZClcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIGpvaW4oY2hhbm5lbElkKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3Quam9pblRocmVhZChjaGFubmVsSWQpXG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgbGVhdmUoY2hhbm5lbElkKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QubGVhdmVUaHJlYWQoY2hhbm5lbElkKVxuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIGtpY2soY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5yZW1vdmVUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpXG4gICAgICAgIH0sXG4gICAgICB9LFxuXG4gICAgICBhc3luYyB0eXBpbmcoaWQpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QudHJpZ2dlclR5cGluZ0luZGljYXRvcihpZClcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIGVtb2ppczoge1xuICAgICAgYXN5bmMgY3JlYXRlKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuY3JlYXRlRW1vamkoZ3VpbGRJZCwgb3B0aW9ucylcbiAgICAgIH0sXG5cbiAgICAgIGFzeW5jIGRlbGV0ZShndWlsZElkLCBpZCwgcmVhc29uKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZUVtb2ppKGd1aWxkSWQsIGlkLCByZWFzb24pXG4gICAgICB9LFxuXG4gICAgICBhc3luYyBlZGl0KGd1aWxkSWQsIGlkLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCByZXN0LmVkaXRFbW9qaShndWlsZElkLCBpZCwgb3B0aW9ucylcbiAgICAgIH0sXG5cbiAgICAgIGFzeW5jIGdldChndWlsZElkLCBlbW9qaUlkKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldEVtb2ppKGd1aWxkSWQsIGVtb2ppSWQpXG4gICAgICB9LFxuICAgIH0sXG5cbiAgICBndWlsZHM6IHtcbiAgICAgIGF1dG9tb2Q6IHtcbiAgICAgICAgYXN5bmMgY3JlYXRlKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5jcmVhdGVBdXRvbW9kUnVsZShndWlsZElkLCBvcHRpb25zKVxuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIGRlbGV0ZShndWlsZElkLCBldmVudElkKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgZXZlbnRJZClcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBlZGl0KGd1aWxkSWQsIHJ1bGVJZCwgb3B0aW9ucykge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmVkaXRBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQsIG9wdGlvbnMpXG4gICAgICAgIH0sXG5cbiAgICAgICAgZ2V0OiB7XG4gICAgICAgICAgYXN5bmMgcnVsZShndWlsZElkLCBydWxlSWQpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZClcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgYXN5bmMgcnVsZXMoZ3VpbGRJZCkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0QXV0b21vZFJ1bGVzKGd1aWxkSWQpXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG5cbiAgICAgIGFzeW5jIGNyZWF0ZShvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCByZXN0LmNyZWF0ZUd1aWxkKG9wdGlvbnMpXG4gICAgICB9LFxuXG4gICAgICBhc3luYyBjaGFubmVscyhpZCkge1xuICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRDaGFubmVscyhpZClcbiAgICAgIH0sXG5cbiAgICAgIGFzeW5jIGRlbGV0ZShpZCkge1xuICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGVHdWlsZChpZClcbiAgICAgIH0sXG5cbiAgICAgIGFzeW5jIGVtb2ppcyhpZCkge1xuICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRFbW9qaXMoaWQpXG4gICAgICB9LFxuXG4gICAgICBldmVudHM6IHtcbiAgICAgICAgYXN5bmMgY3JlYXRlKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5jcmVhdGVTY2hlZHVsZWRFdmVudChndWlsZElkLCBvcHRpb25zKVxuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIGRlbGV0ZShndWlsZElkLCBldmVudElkKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlU2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZClcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBlZGl0KGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5lZGl0U2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucylcbiAgICAgICAgfSxcblxuICAgICAgICBnZXQ6IHtcbiAgICAgICAgICBhc3luYyBldmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBhc3luYyBldmVudHMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0U2NoZWR1bGVkRXZlbnRzKGd1aWxkSWQsIG9wdGlvbnMpXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGFzeW5jIHVzZXJzKGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldFNjaGVkdWxlZEV2ZW50VXNlcnMoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucylcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgICAgaW50ZWdyYXRpb25zOiB7XG4gICAgICAgIGFzeW5jIGdldChndWlsZElkKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0SW50ZWdyYXRpb25zKGd1aWxkSWQpXG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgZGVsZXRlKGd1aWxkSWQsIGludGVncmF0aW9uSWQpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGVJbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkKVxuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgICAgaW52aXRlczoge1xuICAgICAgICBhc3luYyBjcmVhdGUoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuY3JlYXRlSW52aXRlKGNoYW5uZWxJZCwgb3B0aW9ucylcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBkZWxldGUoaW52aXRlQ29kZSwgcmVhc29uKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlSW52aXRlKGludml0ZUNvZGUsIHJlYXNvbilcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBnZXQoaW52aXRlQ29kZSwgb3B0aW9ucykge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldEludml0ZShpbnZpdGVDb2RlLCBvcHRpb25zKVxuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIGxpc3QoZ3VpbGRJZCkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldEludml0ZXMoZ3VpbGRJZClcbiAgICAgICAgfSxcbiAgICAgIH0sXG5cbiAgICAgIHRlbXBsYXRlczoge1xuICAgICAgICBhc3luYyBjcmVhdGUoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmNyZWF0ZUd1aWxkVGVtcGxhdGUoZ3VpbGRJZCwgb3B0aW9ucylcbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgZGVsZXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZUd1aWxkVGVtcGxhdGUoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKVxuICAgICAgICB9LFxuICAgICAgICBhc3luYyBlZGl0KGd1aWxkSWQsIHRlbXBsYXRlQ29kZSwgb3B0aW9ucykge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmVkaXRHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSwgb3B0aW9ucylcbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgZ2V0KHRlbXBsYXRlQ29kZSkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldEd1aWxkVGVtcGxhdGUodGVtcGxhdGVDb2RlKVxuICAgICAgICB9LFxuICAgICAgICBhc3luYyBsaXN0KGd1aWxkSWQpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRHdWlsZFRlbXBsYXRlcyhndWlsZElkKVxuICAgICAgICB9LFxuICAgICAgICBhc3luYyBzeW5jKGd1aWxkSWQpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5zeW5jR3VpbGRUZW1wbGF0ZShndWlsZElkKVxuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgICAgbWVtYmVyczoge1xuICAgICAgICBhc3luYyBiYW4oZ3VpbGRJZCwgdXNlcklkLCBvcHRpb25zKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuYmFuTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgb3B0aW9ucylcbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgZWRpdChndWlsZElkLCB1c2VySWQsIG9wdGlvbnMpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5lZGl0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgb3B0aW9ucylcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBlZGl0U2VsZihndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZWRpdEJvdE1lbWJlcihndWlsZElkLCBvcHRpb25zKVxuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIGdldChndWlsZElkLCB1c2VySWQpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkKVxuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIGRtKHVzZXJJZCkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldERtQ2hhbm5lbCh1c2VySWQpXG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMga2ljayhndWlsZElkLCB1c2VySWQsIHJlYXNvbikge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmtpY2tNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByZWFzb24pXG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgbGlzdChndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0TWVtYmVycyhndWlsZElkLCBvcHRpb25zKVxuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIHBydW5lKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5wcnVuZU1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucylcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBzZWFyY2goZ3VpbGRJZCwgcXVlcnksIG9wdGlvbnMpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5zZWFyY2hNZW1iZXJzKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKVxuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIHVuYmFuKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LnVuYmFuTWVtYmVyKGd1aWxkSWQsIHVzZXJJZClcbiAgICAgICAgfSxcbiAgICAgIH0sXG5cbiAgICAgIGludGVyYWN0aW9uczoge1xuICAgICAgICBjb21tYW5kczoge1xuICAgICAgICAgIGNyZWF0ZToge1xuICAgICAgICAgICAgYXN5bmMgZ2xvYmFsKGNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmQpXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBhc3luYyBndWlsZChjb21tYW5kLCBndWlsZElkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmNyZWF0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmQsIGd1aWxkSWQpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBkZWxldGU6IHtcbiAgICAgICAgICAgIGFzeW5jIGdsb2JhbChjb21tYW5kSWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZClcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGFzeW5jIGd1aWxkKGNvbW1hbmRJZCwgZ3VpbGRJZCkge1xuICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBlZGl0OiB7XG4gICAgICAgICAgICBhc3luYyBnbG9iYWwoY29tbWFuZElkLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmVkaXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBvcHRpb25zKVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgYXN5bmMgZ3VpbGQoY29tbWFuZElkLCBndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmVkaXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQsIG9wdGlvbnMpXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBhc3luYyBwZXJtaXNzaW9ucyhndWlsZElkLCBjb21tYW5kSWQsIGJlYXJlclRva2VuLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmVkaXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyhndWlsZElkLCBjb21tYW5kSWQsIGJlYXJlclRva2VuLCBvcHRpb25zKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgZ2V0OiB7XG4gICAgICAgICAgICBnbG9iYWw6IHtcbiAgICAgICAgICAgICAgYXN5bmMgYWxsKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMoKVxuICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgIGFzeW5jIG9uZShjb21tYW5kSWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkKVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZ3VpbGRzOiB7XG4gICAgICAgICAgICAgIGFzeW5jIGFsbChndWlsZElkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzKGd1aWxkSWQpXG4gICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgYXN5bmMgb25lKGNvbW1hbmRJZCwgZ3VpbGRJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZClcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGFzeW5jIHBlcm1pc3Npb24oZ3VpbGRJZCwgY29tbWFuZElkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb24oZ3VpbGRJZCwgY29tbWFuZElkKVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgYXN5bmMgcGVybWlzc2lvbnMoZ3VpbGRJZCkge1xuICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyhndWlsZElkKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgcmVwbGFjZToge1xuICAgICAgICAgICAgYXN5bmMgZ2xvYmFsKGNvbW1hbmRzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LnVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMoY29tbWFuZHMpXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBhc3luYyBndWlsZChndWlsZElkLCBjb21tYW5kcykge1xuICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC51cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMoZ3VpbGRJZCwgY29tbWFuZHMpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVzcG9uc2VzOiB7XG4gICAgICAgICAgY3JlYXRlOiB7XG4gICAgICAgICAgICBhc3luYyBmb2xsb3d1cCh0b2tlbiwgb3B0aW9ucykge1xuICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5zZW5kRm9sbG93dXBNZXNzYWdlKHRva2VuLCBvcHRpb25zKVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgYXN5bmMgb3JpZ2luYWwoaW50ZXJhY3Rpb25JZCwgdG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3Quc2VuZEludGVyYWN0aW9uUmVzcG9uc2UoaW50ZXJhY3Rpb25JZCwgdG9rZW4sIG9wdGlvbnMpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBkZWxldGU6IHtcbiAgICAgICAgICAgIGFzeW5jIGZvbGxvd3VwKHRva2VuLCBtZXNzYWdlSWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlRm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQpXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBhc3luYyBvcmlnaW5hbCh0b2tlbikge1xuICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGVPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4pXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBlZGl0OiB7XG4gICAgICAgICAgICBhc3luYyBmb2xsb3d1cCh0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmVkaXRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucylcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGFzeW5jIG9yaWdpbmFsKHRva2VuLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmVkaXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4sIG9wdGlvbnMpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBnZXQ6IHtcbiAgICAgICAgICAgIGFzeW5jIGZvbGxvd3VwKHRva2VuLCBtZXNzYWdlSWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQpXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBhc3luYyBvcmlnaW5hbCh0b2tlbikge1xuICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4pXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuXG4gICAgICByb2xlczoge1xuICAgICAgICBhc3luYyBhZGQoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmFkZFJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbilcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBjcmVhdGUoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuY3JlYXRlUm9sZShndWlsZElkLCBvcHRpb25zLCByZWFzb24pXG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgZGVsZXRlKGd1aWxkSWQsIHJvbGVJZCkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZVJvbGUoZ3VpbGRJZCwgcm9sZUlkKVxuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIGVkaXQoZ3VpbGRJZCwgcm9sZUlkLCBvcHRpb25zKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZWRpdFJvbGUoZ3VpbGRJZCwgcm9sZUlkLCBvcHRpb25zKVxuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIGxpc3QoZ3VpbGRJZCkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldFJvbGVzKGd1aWxkSWQpXG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgcG9zaXRpb25zKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5lZGl0Um9sZVBvc2l0aW9ucyhndWlsZElkLCBvcHRpb25zKVxuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIHJlbW92ZShndWlsZElkLCB1c2VySWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucmVtb3ZlUm9sZShndWlsZElkLCB1c2VySWQsIHJvbGVJZCwgcmVhc29uKVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuXG4gICAgdXNlcnM6IHtcbiAgICAgIGFzeW5jIGNoYW5uZWwodXNlcklkKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldERtQ2hhbm5lbCh1c2VySWQpXG4gICAgICB9LFxuICAgIH0sXG5cbiAgICB3ZWJob29rczoge1xuICAgICAgYXN5bmMgY3JlYXRlKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5jcmVhdGVXZWJob29rKGNoYW5uZWxJZCwgb3B0aW9ucylcbiAgICAgIH0sXG5cbiAgICAgIGRlbGV0ZToge1xuICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgYXN5bmMgaWQoaWQsIHJlYXNvbikge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlV2ViaG9vayhpZCwgcmVhc29uKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBhc3luYyB0b2tlbihpZCwgdG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZVdlYmhvb2tXaXRoVG9rZW4oaWQsIHRva2VuKVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuXG4gICAgICBlZGl0OiB7XG4gICAgICAgIHdpdGg6IHtcbiAgICAgICAgICBhc3luYyBpZCh3ZWJob29rSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmVkaXRXZWJob29rKHdlYmhvb2tJZCwgb3B0aW9ucylcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgYXN5bmMgdG9rZW4oaWQsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5lZGl0V2ViaG9va1dpdGhUb2tlbihpZCwgdG9rZW4sIG9wdGlvbnMpXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG5cbiAgICAgIGFzeW5jIGV4ZWN1dGUod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5leGVjdXRlV2ViaG9vayh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKVxuICAgICAgfSxcblxuICAgICAgZ2V0OiB7XG4gICAgICAgIGFzeW5jIGNoYW5uZWwoY2hhbm5lbElkKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0Q2hhbm5lbFdlYmhvb2tzKGNoYW5uZWxJZClcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBndWlsZChndWlsZElkKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0R3VpbGRXZWJob29rcyhndWlsZElkKVxuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIG1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0V2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKVxuICAgICAgICB9LFxuXG4gICAgICAgIHdpdGg6IHtcbiAgICAgICAgICBhc3luYyBpZCh3ZWJob29rSWQpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldFdlYmhvb2sod2ViaG9va0lkKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBhc3luYyB0b2tlbih3ZWJob29rSWQsIHRva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG5cbiAgICAgIG1lc3NhZ2VzOiB7XG4gICAgICAgIGFzeW5jIGRlbGV0ZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGVXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpXG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8ganMgaGFjayBtYWtpbmcgaXQgcG9zc2libGUgdG8gZG8gd2ViaG9va3MubWVzc2FnZXMuZWRpdCgpIGFzIHdlbGwgYXMgd2ViaG9va3MubWVzc2FnZXMuZWRpdC5vcmlnaW5hbCgpXG4gICAgICAgIGVkaXQ6IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgLy8gVGhlIGJhc2UgZnVuY3Rpb24gZm9yIHdlYmhvb2tzLm1lc3NhZ2VzLmVkaXQoKVxuICAgICAgICAgIChhc3luYyAod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdC5lZGl0V2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKVxuICAgICAgICAgIH0pIGFzIFdlYmhvb2tNZXNzYWdlRWRpdG9yLFxuICAgICAgICAgIC8vIFRoZSBwcm9wZXJ0aWVzIHRoYXQgd2ViaG9va3MubWVzc2FnZXMuZWRpdC54eHggd2lsbCBoYXZlIGFyZSBsaXN0ZWQgaW4gdGhpcyBvYmplY3RcbiAgICAgICAgICB7XG4gICAgICAgICAgICBvcmlnaW5hbDogYXN5bmMgKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZWRpdE9yaWdpbmFsV2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSBhcyBXZWJob29rTWVzc2FnZUVkaXRvcixcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVBdXRvbW9kUnVsZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVDaGFubmVsKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlRW1vamkoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaXMoZ3VpbGRJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCBjb21tYW5kKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZChvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmFsbCgpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kLCBndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksIGNvbW1hbmQpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkVGVtcGxhdGUoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuYWxsKGd1aWxkSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVGb3J1bVRocmVhZChjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmZvcnVtKGNoYW5uZWxJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUludml0ZShjaGFubmVsSWQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkSW52aXRlPihyZXN0LnJvdXRlcy5jaGFubmVscy5pbnZpdGVzKGNoYW5uZWxJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVJvbGUoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRSb2xlPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpLCB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50cyhndWlsZElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlU3RhZ2VJbnN0YW5jZShvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZXMoKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlV2ViaG9vayhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLmNoYW5uZWxzLndlYmhvb2tzKGNoYW5uZWxJZCksIHtcbiAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICBhdmF0YXI6IG9wdGlvbnMuYXZhdGFyID8gYXdhaXQgdXJsVG9CYXNlNjQob3B0aW9ucy5hdmF0YXIpIDogdW5kZWZpbmVkLFxuICAgICAgICByZWFzb246IG9wdGlvbnMucmVhc29uLFxuICAgICAgfSBhcyBEaXNjb3JkQ3JlYXRlV2ViaG9vaylcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUNoYW5uZWwoY2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGNoYW5uZWxJZCksIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQ2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZShjaGFubmVsSWQsIG92ZXJ3cml0ZUlkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5vdmVyd3JpdGUoY2hhbm5lbElkLCBvdmVyd3JpdGVJZCksIHJlYXNvbiA/IHsgcmVhc29uIH0gOiB1bmRlZmluZWQpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUVtb2ppKGd1aWxkSWQsIGlkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgaWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMubWVzc2FnZShyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmQocmVzdC5hcHBsaWNhdGlvbklkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZChndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkVGVtcGxhdGUoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5ndWlsZChndWlsZElkLCB0ZW1wbGF0ZUNvZGUpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVJbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmludGVncmF0aW9uKGd1aWxkSWQsIGludGVncmF0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVJbnZpdGUoaW52aXRlQ29kZSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZShpbnZpdGVDb2RlKSwgcmVhc29uID8geyByZWFzb24gfSA6IHVuZGVmaW5lZClcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVJvbGUoZ3VpbGRJZCwgcm9sZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlU3RhZ2VJbnN0YW5jZShjaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCksIHJlYXNvbiA/IHsgcmVhc29uIH0gOiB1bmRlZmluZWQpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2sod2ViaG9va0lkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyhndWlsZElkLCBjb21tYW5kSWQsIGJlYXJlclRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb24ocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLFxuICAgICAgICB7XG4gICAgICAgICAgcGVybWlzc2lvbnM6IG9wdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBoZWFkZXJzOiB7IGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtiZWFyZXJUb2tlbn1gIH0sXG4gICAgICAgIH0sXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEJvdFByb2ZpbGUob3B0aW9ucykge1xuICAgICAgY29uc3QgYXZhdGFyID0gb3B0aW9ucz8uYm90QXZhdGFyVVJMID8gYXdhaXQgdXJsVG9CYXNlNjQob3B0aW9ucz8uYm90QXZhdGFyVVJMKSA6IG9wdGlvbnM/LmJvdEF2YXRhclVSTFxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkVXNlcj4ocmVzdC5yb3V0ZXMudXNlckJvdCgpLCB7XG4gICAgICAgIHVzZXJuYW1lOiBvcHRpb25zLnVzZXJuYW1lPy50cmltKCksXG4gICAgICAgIGF2YXRhcixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoY2hhbm5lbElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLm92ZXJ3cml0ZShjaGFubmVsSWQsIG9wdGlvbnMuaWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBvc2l0aW9ucyhndWlsZElkLCBjaGFubmVsUG9zaXRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMuY2hhbm5lbHMoZ3VpbGRJZCksIGNoYW5uZWxQb3NpdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRFbW9qaShndWlsZElkLCBpZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgaWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkVGVtcGxhdGUoZ3VpbGRJZDogQmlnU3RyaW5nLCB0ZW1wbGF0ZUNvZGU6IHN0cmluZywgb3B0aW9uczogTW9kaWZ5R3VpbGRUZW1wbGF0ZSk6IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj4ge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmd1aWxkKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0T3JpZ2luYWxXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3Mub3JpZ2luYWwod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucyksIHtcbiAgICAgICAgdHlwZTogSW50ZXJhY3Rpb25SZXNwb25zZVR5cGVzLlVwZGF0ZU1lc3NhZ2UsXG4gICAgICAgIGRhdGE6IG9wdGlvbnMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0U2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Um9sZShndWlsZElkLCByb2xlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRSb2xlPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMub25lKGd1aWxkSWQsIHJvbGVJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRSb2xlUG9zaXRpb25zKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRSb2xlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgZGF0YSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCksIHsgdG9waWM6IGRhdGEudG9waWMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2sod2ViaG9va0lkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSwge1xuICAgICAgICB0eXBlOiBJbnRlcmFjdGlvblJlc3BvbnNlVHlwZXMuVXBkYXRlTWVzc2FnZSxcbiAgICAgICAgZGF0YTogb3B0aW9ucyxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBleGVjdXRlV2ViaG9vayh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBmb2xsb3dBbm5vdW5jZW1lbnQoc291cmNlQ2hhbm5lbElkLCB0YXJnZXRDaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEZvbGxvd2VkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZm9sbG93KHNvdXJjZUNoYW5uZWxJZCksIHtcbiAgICAgICAgd2ViaG9va19jaGFubmVsX2lkOiB0YXJnZXRDaGFubmVsSWQsXG4gICAgICB9IGFzIERpc2NvcmRGb2xsb3dBbm5vdW5jZW1lbnRDaGFubmVsKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBY3RpdmVUaHJlYWRzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuYWN0aXZlKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uKGd1aWxkSWQsIGNvbW1hbmRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucz4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5wZXJtaXNzaW9uKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uc1tdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbnMocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25JbmZvKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyQXBwbGljYXRpb24oKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdXRvbW9kUnVsZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWwoaWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChpZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxJbnZpdGVzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5pbnZpdGVzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ2hhbm5lbFtdPihyZXN0LnJvdXRlcy5ndWlsZHMuY2hhbm5lbHMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxXZWJob29rcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9va1tdPihyZXN0LnJvdXRlcy5jaGFubmVscy53ZWJob29rcyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXREbUNoYW5uZWwodXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5kbSgpLCB7XG4gICAgICAgIHJlY2lwaWVudF9pZDogdXNlcklkLnRvU3RyaW5nKCksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbW9qaShndWlsZElkLCBlbW9qaUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgZW1vamlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVtb2ppcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppW10+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMubWVzc2FnZShyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHYXRld2F5Qm90KCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHZXRHYXRld2F5Qm90PihyZXN0LnJvdXRlcy5nYXRld2F5Qm90KCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRUZW1wbGF0ZSh0ZW1wbGF0ZUNvZGUpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuY29kZSh0ZW1wbGF0ZUNvZGUpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFRlbXBsYXRlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRlbXBsYXRlW10+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuYWxsKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFdlYmhvb2tzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9va1tdPihyZXN0LnJvdXRlcy5ndWlsZHMud2ViaG9va3MoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludGVncmF0aW9ucyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludGVncmF0aW9uW10+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnRlZ3JhdGlvbnMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludml0ZShpbnZpdGVDb2RlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhPihyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlKGludml0ZUNvZGUsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnZpdGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE5pdHJvU3RpY2tlclBhY2tzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyUGFja1tdPihyZXN0LnJvdXRlcy5uaXRyb1N0aWNrZXJQYWNrcygpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJpdmF0ZUFyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5wcml2YXRlKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFByaXZhdGVKb2luZWRBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuam9pbmVkKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFB1YmxpY0FyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5wdWJsaWMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Um9sZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRSb2xlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucz8ud2l0aFVzZXJDb3VudCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNjaGVkdWxlZEV2ZW50cyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNjaGVkdWxlZEV2ZW50W10+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnRzKGd1aWxkSWQsIG9wdGlvbnM/LndpdGhVc2VyQ291bnQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudFVzZXJzKGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxBcnJheTx7IHVzZXI6IERpc2NvcmRVc2VyOyBtZW1iZXI/OiBEaXNjb3JkTWVtYmVyIH0+PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLnVzZXJzKGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTZXNzaW9uSW5mbygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldEdhdGV3YXlCb3QoKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGhyZWFkTWVtYmVyPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaHJlYWRNZW1iZXJzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUaHJlYWRNZW1iZXJbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZW1iZXJzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXIoaWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcj4ocmVzdC5yb3V0ZXMudXNlcihpZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2sod2ViaG9va0lkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pKVxuICAgIH0sXG5cbiAgICBhc3luYyBqb2luVGhyZWFkKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWUoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGVhdmVUaHJlYWQoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZShjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBwdWJsaXNoTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY3Jvc3Nwb3N0KGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlUm9sZShndWlsZElkLCB1c2VySWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm1lbWJlcihndWlsZElkLCB1c2VySWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMudXNlcihjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHJlc3Quc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgIHVybDogcmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayhyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSxcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICAgIHJldHJ5Q291bnQ6IDAsXG4gICAgICAgICAgcmV0cnlSZXF1ZXN0OiBhc3luYyBmdW5jdGlvbiAob3B0aW9uczogU2VuZFJlcXVlc3RPcHRpb25zKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBzaG91bGQgY2hhbmdlIHRvIHJlcHJvY2VzcyBxdWV1ZSBpdGVtXG4gICAgICAgICAgICBhd2FpdCByZXN0LnNlbmRSZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgIHJlamVjdCxcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRJbnRlcmFjdGlvblJlc3BvbnNlKGludGVyYWN0aW9uSWQsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICByZXN0LnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICB1cmw6IHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMuY2FsbGJhY2soaW50ZXJhY3Rpb25JZCwgdG9rZW4pLFxuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgICAgcmV0cnlDb3VudDogMCxcbiAgICAgICAgICByZXRyeVJlcXVlc3Q6IGFzeW5jIGZ1bmN0aW9uIChvcHRpb25zOiBTZW5kUmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IHNob3VsZCBjaGFuZ2UgdG8gcmVwcm9jZXNzIHF1ZXVlIGl0ZW1cbiAgICAgICAgICAgIGF3YWl0IHJlc3Quc2VuZFJlcXVlc3Qob3B0aW9ucylcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc29sdmUsXG4gICAgICAgICAgcmVqZWN0LFxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZE1lc3NhZ2UoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlcyhjaGFubmVsSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBzdGFydFRocmVhZFdpdGhNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hbGwoY2hhbm5lbElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgc3luY0d1aWxkVGVtcGxhdGUoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDx2b2lkPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEJvdE1lbWJlcihndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVtYmVyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5ib3QoZ3VpbGRJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVtYmVycyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGtpY2tNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBwcnVuZU1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDx7IHBydW5lZDogbnVtYmVyIHwgbnVsbCB9PihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5wcnVuZShndWlsZElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VhcmNoTWVtYmVycyhndWlsZElkLCBxdWVyeSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5zZWFyY2goZ3VpbGRJZCwgcXVlcnksIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyB1bmJhbk1lbWJlcihndWlsZElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdHJpZ2dlclR5cGluZ0luZGljYXRvcihjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuY2hhbm5lbHMudHlwaW5nKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMoY29tbWFuZHMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCBjb21tYW5kcylcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBzZXJ0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzKGd1aWxkSWQsIGNvbW1hbmRzKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLCBjb21tYW5kcylcbiAgICB9LFxuICB9XG5cbiAgcmV0dXJuIHJlc3Rcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVSZXN0TWFuYWdlck9wdGlvbnMge1xuICAvKiogVGhlIGJvdCB0b2tlbiB3aGljaCB3aWxsIGJlIHVzZWQgdG8gbWFrZSByZXF1ZXN0cy4gKi9cbiAgdG9rZW46IHN0cmluZ1xuICAvKipcbiAgICogRm9yIG9sZCBib3RzIHRoYXQgaGF2ZSBhIGRpZmZlcmVudCBib3QgaWQgYW5kIGFwcGxpY2F0aW9uIGlkLlxuICAgKiBAZGVmYXVsdCBib3QgaWQgZnJvbSB0b2tlblxuICAgKi9cbiAgYXBwbGljYXRpb25JZD86IEJpZ1N0cmluZ1xuICAvKipcbiAgICogVGhlIGJhc2UgdXJsIHRvIGNvbm5lY3QgdG8uIElmIHlvdSBjcmVhdGUgYSBwcm94eSByZXN0LCB0aGF0IHVybCB3b3VsZCBnbyBoZXJlLlxuICAgKiBJVCBTSE9VTEQgTk9UIEVORCBXSVRIIEEgL1xuICAgKiBAZGVmYXVsdCBodHRwczovL2Rpc2NvcmQuY29tL2FwaVxuICAgKi9cbiAgYmFzZVVybD86IHN0cmluZ1xuICAvKipcbiAgICogVGhlIGFwaSB2ZXJzaW9ucyB3aGljaCBjYW4gYmUgdXNlZCB0byBtYWtlIHJlcXVlc3RzLlxuICAgKiBAZGVmYXVsdCAxMFxuICAgKi9cbiAgdmVyc2lvbj86IEFwaVZlcnNpb25zXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdE1hbmFnZXIge1xuICAvKiogVGhlIGJvdCB0b2tlbiB3aGljaCB3aWxsIGJlIHVzZWQgdG8gbWFrZSByZXF1ZXN0cy4gKi9cbiAgdG9rZW46IHN0cmluZ1xuICAvKiogVGhlIGFwcGxpY2F0aW9uIGlkLiBOb3JtYWxseSB0aGlzIGlzIG5vdCByZXF1aXJlZCBmb3IgcmVjZW50IGJvdHMgYnV0IG9sZCBib3QncyBhcHBsaWNhdGlvbiBpZCBpcyBzb21ldGltZXMgZGlmZmVyZW50IGZyb20gdGhlIGJvdCBpZCBzbyBpdCBpcyByZXF1aXJlZCBmb3IgdGhvc2UgYm90cy4gKi9cbiAgYXBwbGljYXRpb25JZDogYmlnaW50XG4gIC8qKiBUaGUgYXBpIHZlcnNpb24gdG8gdXNlIHdoZW4gbWFraW5nIHJlcXVlc3RzLiBPbmx5IHRoZSBsYXRlc3Qgc3VwcG9ydGVkIHZlcnNpb24gd2lsbCBiZSB0ZXN0ZWQuICovXG4gIHZlcnNpb246IEFwaVZlcnNpb25zXG4gIC8qKlxuICAgKiBUaGUgYmFzZSB1cmwgdG8gY29ubmVjdCB0by4gSWYgeW91IGNyZWF0ZSBhIHByb3h5IHJlc3QsIHRoYXQgdXJsIHdvdWxkIGdvIGhlcmUuXG4gICAqIElUIFNIT1VMRCBOT1QgRU5EIFdJVEggQSAvXG4gICAqIEBkZWZhdWx0IGh0dHBzOi8vZGlzY29yZC5jb20vYXBpXG4gICAqL1xuICBiYXNlVXJsOiBzdHJpbmdcbiAgLyoqIFRoZSBtYXhpbXVtIGFtb3VudCBvZiB0aW1lcyBhIHJlcXVlc3Qgc2hvdWxkIGJlIHJldHJpZWQuIERlZmF1bHRzIHRvIEluZmluaXR5ICovXG4gIG1heFJldHJ5Q291bnQ6IG51bWJlclxuICAvKiogV2hldGhlciBvciBub3QgdGhlIG1hbmFnZXIgaXMgcmF0ZSBsaW1pdGVkIGdsb2JhbGx5IGFjcm9zcyBhbGwgcmVxdWVzdHMuIERlZmF1bHRzIHRvIGZhbHNlLiAqL1xuICBnbG9iYWxseVJhdGVMaW1pdGVkOiBib29sZWFuXG4gIC8qKiBXaGV0aGVyIG9yIG5vdCB0aGUgcmF0ZSBsaW1pdGVkIHBhdGhzIGFyZSBiZWluZyBwcm9jZXNzZWQgdG8gYWxsb3cgcmVxdWVzdHMgdG8gYmUgbWFkZSBvbmNlIHRpbWUgaXMgdXAuIERlZmF1bHRzIHRvIGZhbHNlLiAqL1xuICBwcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRoczogYm9vbGVhblxuICAvKiogVGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGRlbGV0aW5nIHRoaXMgcXVldWUgaWYgaXQgaXMgZW1wdHkuIERlZmF1bHRzIHRvIDYwMDAwKG9uZSBtaW51dGUpLiAqL1xuICBkZWxldGVRdWV1ZURlbGF5OiBudW1iZXJcbiAgLyoqIFRoZSBxdWV1ZXMgdGhhdCBob2xkIGFsbCB0aGUgcmVxdWVzdHMgdG8gYmUgcHJvY2Vzc2VkLiAqL1xuICBxdWV1ZXM6IE1hcDxzdHJpbmcsIFF1ZXVlPlxuICAvKiogVGhlIHBhdGhzIHRoYXQgYXJlIGN1cnJlbnRseSByYXRlIGxpbWl0ZWQuICovXG4gIHJhdGVMaW1pdGVkUGF0aHM6IE1hcDxzdHJpbmcsIFJlc3RSYXRlTGltaXRlZFBhdGg+XG4gIC8qKiBUaGUgYnVja2V0IGZvciBoYW5kbGluZyBhbnkgaW52YWxpZCByZXF1ZXN0cy4gICovXG4gIGludmFsaWRCdWNrZXQ6IEludmFsaWRSZXF1ZXN0QnVja2V0XG4gIC8qKiBUaGUgcm91dGVzIHRoYXQgYXJlIGF2YWlsYWJsZSBmb3IgdGhpcyBtYW5hZ2VyLiAqL1xuICByb3V0ZXM6IHtcbiAgICAvKiogUm91dGUgdG8gZ2V0IGEgYm90cyBzZXNzaW9uIGluZm8uICovXG4gICAgc2Vzc2lvbkluZm86ICgpID0+IHN0cmluZ1xuICAgIC8qKiBBIHNwZWNpZmljIHVzZXIgcm91dGUuICovXG4gICAgdXNlcjogKGlkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgIC8qKiBDdXJyZW50IGJvdCB1c2VyIHJvdXRlLiAqL1xuICAgIHVzZXJCb3Q6ICgpID0+IHN0cmluZ1xuICAgIC8vIE9BdXRoMlxuICAgIG9hdXRoMkFwcGxpY2F0aW9uOiAoKSA9PiBzdHJpbmdcbiAgICAvLyBHYXRld2F5IEJvdFxuICAgIGdhdGV3YXlCb3Q6ICgpID0+IHN0cmluZ1xuICAgIC8vIE5pdHJvIFN0aWNrZXIgUGFja3NcbiAgICBuaXRyb1N0aWNrZXJQYWNrczogKCkgPT4gc3RyaW5nXG4gICAgLyoqIFJvdXRlcyBmb3Igd2ViaG9vayByZWxhdGVkIHJvdXRlcy4gKi9cbiAgICB3ZWJob29rczoge1xuICAgICAgLyoqIFJvdXRlIGZvciBtYW5hZ2luZyB0aGUgb3JpZ2luYWwgbWVzc2FnZSBzZW50IGJ5IGEgd2ViaG9vay4gKi9cbiAgICAgIG9yaWdpbmFsOiAod2ViaG9va0lkOiBCaWdTdHJpbmcsIHRva2VuOiBzdHJpbmcsIG9wdGlvbnM/OiB7IHRocmVhZElkPzogQmlnU3RyaW5nIH0pID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlIGZvciB3ZWJob29rIHdpdGggYSBpZC4gKi9cbiAgICAgIGlkOiAod2ViaG9va0lkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBhIHdlYmhvb2sgd2l0aCBhIHRva2VuLiAqL1xuICAgICAgd2ViaG9vazogKHdlYmhvb2tJZDogQmlnU3RyaW5nLCB0b2tlbjogc3RyaW5nLCBvcHRpb25zPzogeyB3YWl0PzogYm9vbGVhbjsgdGhyZWFkSWQ/OiBCaWdTdHJpbmcgfSkgPT4gc3RyaW5nXG4gICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGEgbWVzc2FnZSB0aGF0IHdhcyBzZW50IHRocm91Z2ggYSB3ZWJob29rLiAqL1xuICAgICAgbWVzc2FnZTogKHdlYmhvb2tJZDogQmlnU3RyaW5nLCB0b2tlbjogc3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IHsgdGhyZWFkSWQ/OiBCaWdTdHJpbmcgfSkgPT4gc3RyaW5nXG4gICAgfVxuICAgIC8qKiBSb3V0ZXMgZm9yIGNoYW5uZWwgcmVsYXRlZCBlbmRwb2ludHMuICovXG4gICAgY2hhbm5lbHM6IHtcbiAgICAgIC8qKiBSb3V0ZSBmb3Igbm9uLXNwZWNpZmljIGRtIGNoYW5uZWwuICovXG4gICAgICBkbTogKCkgPT4gc3RyaW5nXG4gICAgICAvKiogUm91dGUgZm9yIG5vbi1zcGVjaWZpYyB3ZWJob29rIGluIGEgY2hhbm5lbC4gKi9cbiAgICAgIHdlYmhvb2tzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlIGZvciBhIHNwZWNpZmljIGNoYW5uZWwuICovXG4gICAgICBjaGFubmVsOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlIGZvciBmb2xsb3dpbmcgYSBzcGVjaWZpYyBjaGFubmVsLiAqL1xuICAgICAgZm9sbG93OiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlIGZvciBtYW5hZ2luZyBhIGZvcnVtIHdpdGggYSBtZXNzYWdlLiAqL1xuICAgICAgZm9ydW06IChjaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAvKiogUm91dGUgZm9yIGEgc3BlY2lmaWMgY2hhbm5lbCdzIGludml0ZXMuICovXG4gICAgICBpbnZpdGVzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlIGZvciBhIHNwZWNpZmljIG1lc3NhZ2UgKi9cbiAgICAgIG1lc3NhZ2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgaWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIG5vbi1zcGVjaWZpYyBtZXNzYWdlcy4gKi9cbiAgICAgIG1lc3NhZ2VzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBHZXRNZXNzYWdlc09wdGlvbnMpID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBhIHNwZWNpZmljIG92ZXJ3cml0ZS4gKi9cbiAgICAgIG92ZXJ3cml0ZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvdmVyd3JpdGVJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgY3Jvc3Nwb3N0aW5nIGEgc3BlY2lmaWMgbWVzc2FnZS4gKi9cbiAgICAgIGNyb3NzcG9zdDogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIG5vbi1zcGVjaWZpYyBzdGFnZXMgKi9cbiAgICAgIHN0YWdlczogKCkgPT4gc3RyaW5nXG4gICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGEgc3BlY2lmaWMgc3RhZ2UgKi9cbiAgICAgIHN0YWdlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlcyBmb3IgaGFuZGxpbmcgdGhyZWFkIHJlbGF0ZWQgdG8gYSBjaGFubmVsLiAqL1xuICAgICAgdGhyZWFkczoge1xuICAgICAgICAvKiogUm91dGUgZm9yIHRocmVhZCBhIHNwZWNpZmljIG1lc3NhZ2UuICovXG4gICAgICAgIG1lc3NhZ2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgICAvKiogUm91dGUgZm9yIHRocmVhZCB3aXRob3V0IGEgbWVzc2FnZS4gKi9cbiAgICAgICAgYWxsOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgICAvKiogUm91dGUgZm9yIGFjdGl2ZSB0aHJlYWRzLiAqL1xuICAgICAgICBhY3RpdmU6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgICAvKiogUm91dGUgZm9yIG1lbWJlcnMgaW4gYSB0aHJlYWQuICovXG4gICAgICAgIG1lbWJlcnM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgdGhlIGJvdCBtZW1iZXIgaW4gYSB0aHJlYWQuICovXG4gICAgICAgIG1lOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgICAvKiogUm91dGUgZm9yIGEgc3BlY2lmaWMgbWVtYmVyIGluIGEgdGhyZWFkLiAqL1xuICAgICAgICB1c2VyOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBhcmNoaXZlZCB0aHJlYWRzLiAqL1xuICAgICAgICBhcmNoaXZlZDogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBwdWJsaWNhbGx5IGFyY2hpdmVkIHRocmVhZHMuICovXG4gICAgICAgIHB1YmxpYzogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogTGlzdEFyY2hpdmVkVGhyZWFkcykgPT4gc3RyaW5nXG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgcHJpdmF0ZSBhcmNoaXZlZCB0aHJlYWRzLiAqL1xuICAgICAgICBwcml2YXRlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBMaXN0QXJjaGl2ZWRUaHJlYWRzKSA9PiBzdHJpbmdcbiAgICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBwcml2YXRlIGFyY2hpdmVkIHRocmVhZHMgdGhhdCB0aGUgYm90IGhhcyBqb2luZWQuICovXG4gICAgICAgIGpvaW5lZDogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogTGlzdEFyY2hpdmVkVGhyZWFkcykgPT4gc3RyaW5nXG4gICAgICB9XG4gICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIHR5cGluZyBpbmRpY2F0b3JzIGluIGEgY8KraGFubmVsLiAqL1xuICAgICAgdHlwaW5nOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgIH1cbiAgICAvKiogUm91dGVzIGZvciBndWlsZCByZWxhdGVkIGVuZHBvaW50cy4gKi9cbiAgICBndWlsZHM6IHtcbiAgICAgIC8qKiBSb3V0ZXMgZm9yIGhhbmRsaW5nIGEgbm9uLXNwZWNpZmljIGd1aWxkLiAqL1xuICAgICAgYWxsOiAoKSA9PiBzdHJpbmdcbiAgICAgIC8qKiBSb3V0ZXMgZm9yIGEgZ3VpbGRzIGF1dG9tb2RlcmF0aW9uLiAqL1xuICAgICAgYXV0b21vZDoge1xuICAgICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGEgZ3VpbGQncyBhdXRvbW9kZXJhdGlvbi4gKi9cbiAgICAgICAgcnVsZXM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGEgc3BlY2lmaWMgYXV0b21vZGVyYXRpb24gcnVsZSBndWlsZCdzICovXG4gICAgICAgIHJ1bGU6IChndWlsZElkOiBCaWdTdHJpbmcsIHJ1bGVJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgIH1cbiAgICAgIC8qKiBSb3V0ZXMgZm9yIGhhbmRsaW5nIGEgZ3VpbGQncyBzY2hlZHVsZWQgZXZlbnRzLiAqL1xuICAgICAgZXZlbnRzOiB7XG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgbm9uLXNwZWNpZmljIHNjaGVkdWxlZCBldmVudC4gKi9cbiAgICAgICAgZXZlbnRzOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB3aXRoVXNlckNvdW50PzogYm9vbGVhbikgPT4gc3RyaW5nXG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgYSBzcGVjaWZpYyBzY2hlZHVsZWQgZXZlbnQuICovXG4gICAgICAgIGV2ZW50OiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBldmVudElkOiBCaWdTdHJpbmcsIHdpdGhVc2VyQ291bnQ/OiBib29sZWFuKSA9PiBzdHJpbmdcbiAgICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBhIHNjaGVkdWxlZCBldmVudCB1c2Vycy4gKi9cbiAgICAgICAgdXNlcnM6IChndWlsZElkOiBCaWdTdHJpbmcsIGV2ZW50SWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IEdldFNjaGVkdWxlZEV2ZW50VXNlcnMpID0+IHN0cmluZ1xuICAgICAgfVxuICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBub24tc3BlY2lmaWMgY2hhbm5lbHMgaW4gYSBndWlsZCAqL1xuICAgICAgY2hhbm5lbHM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBhIHNwZWNpZmljIGVtb2ppLiAqL1xuICAgICAgZW1vamk6IChndWlsZElkOiBCaWdTdHJpbmcsIGlkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBub24tc3BlY2lmaWMgZW1vamlzLiAqL1xuICAgICAgZW1vamlzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgYSBzcGVjaWZpYyBndWlsZC4gKi9cbiAgICAgIGd1aWxkOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB3aXRoQ291bnRzPzogYm9vbGVhbikgPT4gc3RyaW5nXG4gICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGEgc3BlY2lmaWMgaW50ZWdyYXRpb24uICovXG4gICAgICBpbnRlZ3JhdGlvbjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgaW50ZWdyYXRpb25JZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgbm9uLXNwZWNpZmljIGludGVncmF0aW9ucy4gKi9cbiAgICAgIGludGVncmF0aW9uczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGEgc3BlY2lmaWMgZ3VpbGQgaW52aXRlLiAqL1xuICAgICAgaW52aXRlOiAoaW52aXRlQ29kZTogc3RyaW5nLCBvcHRpb25zPzogR2V0SW52aXRlKSA9PiBzdHJpbmdcbiAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgbm9uLXNwZWNpZmljIGludml0ZXMgaW4gYSBndWlsZC4gKi9cbiAgICAgIGludml0ZXM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBub24tc3BlY2lmaWMgd2ViaG9va3MgaW4gYSBndWlsZCAqL1xuICAgICAgd2ViaG9va3M6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlcyBmb3IgaGFuZGxpbmcgYSBndWlsZCdzIG1lbWJlcnMuICovXG4gICAgICBtZW1iZXJzOiB7XG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgYSBzcGVjaWZpYyBndWlsZCBtZW1iZXIncyBiYW4uICovXG4gICAgICAgIGJhbjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGEgdGhlIGJvdCBndWlsZCBtZW1iZXIuICovXG4gICAgICAgIGJvdDogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgYSBzcGVjaWZpYyBndWlsZCBtZW1iZXIuICovXG4gICAgICAgIG1lbWJlcjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIG5vbi1zcGVjaWZpYyBndWlsZCBtZW1iZXJzLiAqL1xuICAgICAgICBtZW1iZXJzOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogTGlzdEd1aWxkTWVtYmVycykgPT4gc3RyaW5nXG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgbWVtYmVyIHNlYXJjaGluZyBpbiBhIGd1aWxkLiAqL1xuICAgICAgICBzZWFyY2g6IChndWlsZElkOiBCaWdTdHJpbmcsIHF1ZXJ5OiBzdHJpbmcsIG9wdGlvbnM/OiB7IGxpbWl0PzogbnVtYmVyIH0pID0+IHN0cmluZ1xuICAgICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIHBydW5pbmcgZ3VpbGQgbWVtYmVycy4gKi9cbiAgICAgICAgcHJ1bmU6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBHZXRHdWlsZFBydW5lQ291bnRRdWVyeSkgPT4gc3RyaW5nXG4gICAgICB9XG4gICAgICAvKiogUm91dGVzIGZvciBoYW5kbGluZyBhIGd1aWxkJ3MgdGVtcGxhdGVzLiAqL1xuICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgYSBzcGVjaWZjIGd1aWxkJ3MgdGVtcGxhdGVzIHdpdGggYSBjb2RlIG9ubHkuICovXG4gICAgICAgIGNvZGU6IChjb2RlOiBzdHJpbmcpID0+IHN0cmluZ1xuICAgICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGEgc3BlY2lmaWMgZ3VpbGQncyB0ZW1wbGF0ZSB3aXRoIGEgZ3VpbGQgaWQgYW5kIGNvZGUuICovXG4gICAgICAgIGd1aWxkOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBjb2RlOiBzdHJpbmcpID0+IHN0cmluZ1xuICAgICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIG5vbi1zcGVjaWZpYyBndWlsZCdzIHRlbXBsYXRlcy4gKi9cbiAgICAgICAgYWxsOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgIH1cbiAgICAgIC8qKiBSb3V0ZXMgZm9yIGhhbmRsaW5nIGEgZ3VpbGQncyByb2xlcy4gKi9cbiAgICAgIHJvbGVzOiB7XG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgYSBzcGVjaWZpYyBndWlsZCByb2xlLiAqL1xuICAgICAgICBvbmU6IChndWlsZElkOiBCaWdTdHJpbmcsIHJvbGVJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBhIGd1aWxkJ3Mgcm9sZXMuICovXG4gICAgICAgIGFsbDogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgYSBtZW1iZXJzIHJvbGVzIGluIGEgZ3VpbGQuICovXG4gICAgICAgIG1lbWJlcjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgbWVtYmVySWQ6IEJpZ1N0cmluZywgcm9sZUlkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgfVxuICAgIH1cbiAgICAvKiogUm91dGVzIGZvciBpbnRlcmFjdGlvbiByZWxhdGVkIGVuZHBvaW50cy4gKi9cbiAgICBpbnRlcmFjdGlvbnM6IHtcbiAgICAgIC8qKiBSb3V0ZXMgZm9yIGludGVyYWN0aW9uIGNvbW1hbmQgcmVsYXRlZCBlbmRwb2ludHMuICovXG4gICAgICBjb21tYW5kczoge1xuICAgICAgICAvKiogUm91dGUgZm9yIG5vbi1zcGVjaWZpYyBjb21tYW5kcy4gKi9cbiAgICAgICAgY29tbWFuZHM6IChhcHBsaWNhdGlvbklkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgICAvKiogUm91dGUgZm9yIGd1aWxkIHJlbGF0ZWQgY29tbWFuZHMuICovXG4gICAgICAgIGd1aWxkczoge1xuICAgICAgICAgIC8qKiBSb3V0ZSBmb3Igbm9uLXNwZWNpZmljIGd1aWxkIGNvbW1hbmRzLiAqL1xuICAgICAgICAgIGFsbDogKGFwcGxpY2F0aW9uSWQ6IEJpZ1N0cmluZywgZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgICAgICAvKiogUm91dGUgZm9yIGEgc3BlY2lmaWMgZ3VpbGQgY29tbWFuZC4gKi9cbiAgICAgICAgICBvbmU6IChhcHBsaWNhdGlvbklkOiBCaWdTdHJpbmcsIGd1aWxkSWQ6IEJpZ1N0cmluZywgY29tbWFuZElkOiBCaWdTdHJpbmcsIHdpdGhMb2NhbGl6YXRpb25zPzogYm9vbGVhbikgPT4gc3RyaW5nXG4gICAgICAgIH1cbiAgICAgICAgLyoqIFJvdXRlIGZvciBub24tc3BlY2lmaWMgY29tbWFuZCBwZXJtaXNzaW9ucy4gKi9cbiAgICAgICAgcGVybWlzc2lvbnM6IChhcHBsaWNhdGlvbklkOiBCaWdTdHJpbmcsIGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgYSBzcGVjaWZpYyBjb21tYW5kJ3MgcGVybWlzc2lvbi4gKi9cbiAgICAgICAgcGVybWlzc2lvbjogKGFwcGxpY2F0aW9uSWQ6IEJpZ1N0cmluZywgZ3VpbGRJZDogQmlnU3RyaW5nLCBjb21tYW5kSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgYSBzcGVjaWZpYyBjb21tYW5kLiAqL1xuICAgICAgICBjb21tYW5kOiAoYXBwbGljYXRpb25JZDogQmlnU3RyaW5nLCBjb21tYW5kSWQ6IEJpZ1N0cmluZywgd2l0aExvY2FsaXphdGlvbnM/OiBib29sZWFuKSA9PiBzdHJpbmdcbiAgICAgIH1cbiAgICAgIC8qKiBSb3V0ZXMgZm9yIGludGVyYWN0aW9uIHJlc3BvbnNlIHJlbGF0ZWQgZW5kcG9pbnRzLiAqL1xuICAgICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgYSBjYWxsYmFjayByZXNwb25zZSB3aXRoIGlkIGFuZCB0b2tlbi4gKi9cbiAgICAgICAgY2FsbGJhY2s6IChpbnRlcmFjdGlvbklkOiBCaWdTdHJpbmcsIHRva2VuOiBzdHJpbmcpID0+IHN0cmluZ1xuICAgICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIHRoZSBvcmlnaW5hbCByZXNwb25zZSB1c2luZyBpZCBhbmQgdG9rZW4uICovXG4gICAgICAgIG9yaWdpbmFsOiAoaW50ZXJhY3Rpb25JZDogQmlnU3RyaW5nLCB0b2tlbjogc3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBhIGZvbGxvd3VwIG1lc3NhZ2UgZnJvbSBhIGludGVyYWN0aW9uIHJlc3BvbnNlLiAqL1xuICAgICAgICBtZXNzYWdlOiAoYXBwbGljYXRpb25JZDogQmlnU3RyaW5nLCB0b2tlbjogc3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKiBDaGVjayB0aGUgcmF0ZSBsaW1pdHMgZm9yIGEgdXJsIG9yIGEgYnVja2V0LiAqL1xuICBjaGVja1JhdGVMaW1pdHM6ICh1cmw6IHN0cmluZykgPT4gbnVtYmVyIHwgZmFsc2VcbiAgLyoqIFJlc2hhcGVzIGFuZCBtb2RpZmllcyB0aGUgb2JqIGFzIG5lZWRlZCB0byBtYWtlIGl0IHJlYWR5IGZvciBkaXNjb3JkcyBhcGkuICovXG4gIGNoYW5nZVRvRGlzY29yZEZvcm1hdDogKG9iajogYW55KSA9PiBhbnlcbiAgLyoqIENyZWF0ZXMgdGhlIHJlcXVlc3QgYm9keSBhbmQgaGVhZGVycyB0aGF0IGFyZSBuZWNlc3NhcnkgdG8gc2VuZCBhIHJlcXVlc3QuIFdpbGwgaGFuZGxlIGRpZmZlcmVudCB0eXBlcyBvZiBtZXRob2RzIGFuZCBldmVyeXRoaW5nIG5lY2Vzc2FyeSBmb3IgZGlzY29yZC4gKi9cbiAgY3JlYXRlUmVxdWVzdDogKG9wdGlvbnM6IENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucykgPT4gUmVxdWVzdEJvZHlcbiAgLyoqIFRoaXMgd2lsbCBjcmVhdGUgYSBpbmZpbml0ZSBsb29wIHJ1bm5pbmcgaW4gMSBzZWNvbmRzIHVzaW5nIHRhaWwgcmVjdXJzaW9uIHRvIGtlZXAgcmF0ZSBsaW1pdHMgY2xlYW4uIFdoZW4gYSByYXRlIGxpbWl0IHJlc2V0cywgdGhpcyB3aWxsIHJlbW92ZSBpdCBzbyB0aGUgcXVldWUgY2FuIHByb2NlZWQuICovXG4gIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzOiAoKSA9PiB2b2lkXG4gIC8qKiBQcm9jZXNzZXMgdGhlIHJhdGUgbGltaXQgaGVhZGVycyBhbmQgZGV0ZXJtaW5lcyBpZiBpdCBuZWVkcyB0byBiZSByYXRlIGxpbWl0ZWQgYW5kIHJldHVybnMgdGhlIGJ1Y2tldCBpZCBpZiBhdmFpbGFibGUgKi9cbiAgcHJvY2Vzc0hlYWRlcnM6ICh1cmw6IHN0cmluZywgaGVhZGVyczogSGVhZGVycykgPT4gc3RyaW5nIHwgdW5kZWZpbmVkXG4gIC8qKiBTZW5kcyBhIHJlcXVlc3QgdG8gdGhlIGFwaS4gKi9cbiAgc2VuZFJlcXVlc3Q6IChvcHRpb25zOiBTZW5kUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqIFNwbGl0IGEgdXJsIHRvIHNlcGFyYXRlIHJhdGUgbGltaXQgYnVja2V0cyBiYXNlZCBvbiBtYWpvci9taW5vciBwYXJhbWV0ZXJzLiAqL1xuICBzaW1wbGlmeVVybDogKHVybDogc3RyaW5nLCBtZXRob2Q6IFJlcXVlc3RNZXRob2RzKSA9PiBzdHJpbmdcbiAgLyoqIE1ha2UgYSByZXF1ZXN0IHRvIGJlIHNlbnQgdG8gdGhlIGFwaS4gKi9cbiAgbWFrZVJlcXVlc3Q6IDxUID0gdW5rbm93bj4obWV0aG9kOiBSZXF1ZXN0TWV0aG9kcywgdXJsOiBzdHJpbmcsIGJvZHk/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgYW55PikgPT4gUHJvbWlzZTxUPlxuICAvKiogVGFrZXMgYSByZXF1ZXN0IGFuZCBwcm9jZXNzZXMgaXQgaW50byBhIHF1ZXVlLiAqL1xuICBwcm9jZXNzUmVxdWVzdDogKHJlcXVlc3Q6IFNlbmRSZXF1ZXN0T3B0aW9ucykgPT4gdm9pZFxuICAvKiogTWFrZSBhIGdldCByZXF1ZXN0IHRvIHRoZSBhcGkgKi9cbiAgZ2V0OiA8VCA9IHZvaWQ+KHVybDogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPFQ+PlxuICAvKiogTWFrZSBhIHBvc3QgcmVxdWVzdCB0byB0aGUgYXBpLiAqL1xuICBwb3N0OiA8VCA9IHZvaWQ+KHVybDogc3RyaW5nLCBib2R5PzogUmVjb3JkPHN0cmluZywgYW55PikgPT4gUHJvbWlzZTxDYW1lbGl6ZTxUPj5cbiAgLyoqIE1ha2UgYSBwdXQgcmVxdWVzdCB0byB0aGUgYXBpLiAqL1xuICBwdXQ6IDxUID0gdm9pZD4odXJsOiBzdHJpbmcsIGJvZHk/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgYW55PikgPT4gUHJvbWlzZTxDYW1lbGl6ZTxUPj5cbiAgLyoqIE1ha2UgYSBkZWxldGUgcmVxdWVzdCB0byB0aGUgYXBpLiAqL1xuICBkZWxldGU6ICh1cmw6IHN0cmluZywgYm9keT86IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IFByb21pc2U8dm9pZD5cbiAgLyoqIE1ha2UgYSBwYXRjaCByZXF1ZXN0IHRvIHRoZSBhcGkuICovXG4gIHBhdGNoOiA8VCA9IHZvaWQ+KHVybDogc3RyaW5nLCBib2R5PzogUmVjb3JkPHN0cmluZywgYW55PikgPT4gUHJvbWlzZTxDYW1lbGl6ZTxUPj5cbiAgLyoqIEhlbHBlciBtZXRob2RzIHJlbGF0ZWQgdG8gY2hhbm5lbHMgKi9cbiAgY2hhbm5lbHM6IHtcbiAgICAvKiogTWV0aG9kcyByZWxhdGVkIHRvIG1lc3NhZ2VzIGluIGEgY2hhbm5lbCAqL1xuICAgIG1lc3NhZ2VzOiB7XG4gICAgICAvKipcbiAgICAgICAqIFNlbmRzIGEgbWVzc2FnZSB0byBhIGNoYW5uZWwuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBzZW5kIHRoZSBtZXNzYWdlIGluLlxuICAgICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBtZXNzYWdlLlxuICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRNZXNzYWdlfS5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogUmVxdWlyZXMgdGhhdCB0aGUgYm90IHVzZXIgYmUgYWJsZSB0byBzZWUgdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFubmVsIHRoZSBtZXNzYWdlIGlzIHRvIGJlIHNlbnQgaW4uXG4gICAgICAgKlxuICAgICAgICogSWYgc2VuZGluZyBhIG1lc3NhZ2UgdG8gYSBndWlsZCBjaGFubmVsOlxuICAgICAgICogLSBSZXF1aXJlcyB0aGUgYFNFTkRfTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAgICAgKlxuICAgICAgICogSWYgc2VuZGluZyBhIFRUUyBtZXNzYWdlOlxuICAgICAgICogLSBSZXF1aXJlcyB0aGUgYFNFTkRfVFRTX01FU1NBR0VTYCBwZXJtaXNzaW9uLlxuICAgICAgICpcbiAgICAgICAqIElmIHNlbmRpbmcgYSBtZXNzYWdlIGFzIGEgcmVwbHkgdG8gYW5vdGhlciBtZXNzYWdlOlxuICAgICAgICogLSBSZXF1aXJlcyB0aGUgYFJFQURfTUVTU0FHRV9ISVNUT1JZYCBwZXJtaXNzaW9uLlxuICAgICAgICogLSBUaGUgbWVzc2FnZSBiZWluZyByZXBsaWVkIHRvIGNhbm5vdCBiZSBhIHN5c3RlbSBtZXNzYWdlLlxuICAgICAgICpcbiAgICAgICAqIOKaoO+4jyBUaGUgbWF4aW11bSBzaXplIG9mIGEgcmVxdWVzdCAoYWNjb3VudGluZyBmb3IgYW55IGF0dGFjaG1lbnRzIGFuZCBtZXNzYWdlIGNvbnRlbnQpIGZvciBib3QgdXNlcnMgaXMgXzggTWlCXy5cbiAgICAgICAqXG4gICAgICAgKiBGaXJlcyBhIF9NZXNzYWdlIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNjcmVhdGUtbWVzc2FnZX1cbiAgICAgICAqL1xuICAgICAgc2VuZDogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVNZXNzYWdlT3B0aW9ucykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+XG4gICAgICAvKipcbiAgICAgICAqIEVkaXRzIGEgbWVzc2FnZS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGVkaXQgdGhlIG1lc3NhZ2UgaW4uXG4gICAgICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEcyBvZiB0aGUgbWVzc2FnZSB0byBlZGl0LlxuICAgICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIG1lc3NhZ2UuXG4gICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBNZXNzYWdlfS5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogSWYgZWRpdGluZyBhbm90aGVyIHVzZXIncyBtZXNzYWdlOlxuICAgICAgICogLSBSZXF1aXJlcyB0aGUgYE1BTkFHRV9NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICAgICAqIC0gT25seSB0aGUge0BsaW5rIEVkaXRNZXNzYWdlLmZsYWdzIHwgZmxhZ3N9IHByb3BlcnR5IG9mIHRoZSB7QGxpbmsgb3B0aW9uc30gb2JqZWN0IHBhcmFtZXRlciBjYW4gYmUgZWRpdGVkLlxuICAgICAgICpcbiAgICAgICAqIEZpcmVzIGEgX01lc3NhZ2UgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2VkaXQtbWVzc2FnZX1cbiAgICAgICAqL1xuICAgICAgZWRpdDogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogRWRpdE1lc3NhZ2UpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PlxuICAgICAgLyoqXG4gICAgICAgKiBDcm9zcy1wb3N0cyBhIG1lc3NhZ2UgcG9zdGVkIGluIGFuIGFubm91bmNlbWVudCBjaGFubmVsIHRvIHN1YnNjcmliZWQgY2hhbm5lbHMuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgYW5ub3VuY2VtZW50IGNoYW5uZWwuXG4gICAgICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGNyb3NzLXBvc3QuXG4gICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3Jvc3MtcG9zdGVkIHtAbGluayBNZXNzYWdlfS5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogUmVxdWlyZXMgdGhlIGBTRU5EX01FU1NBR0VTYCBwZXJtaXNzaW9uLlxuICAgICAgICpcbiAgICAgICAqIElmIG5vdCBjcm9zcy1wb3N0aW5nIG93biBtZXNzYWdlOlxuICAgICAgICogLSBSZXF1aXJlcyB0aGUgYE1BTkFHRV9NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICAgICAqXG4gICAgICAgKiBGaXJlcyBhIF9NZXNzYWdlIENyZWF0ZV8gZXZlbnQgaW4gdGhlIGd1aWxkcyB0aGUgc3Vic2NyaWJlZCBjaGFubmVscyBhcmUgaW4uXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjY3Jvc3Nwb3N0LW1lc3NhZ2V9XG4gICAgICAgKi9cbiAgICAgIHB1Ymxpc2g6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PlxuICAgICAgLyoqXG4gICAgICAgKiBEZWxldGVzIGEgbWVzc2FnZSBmcm9tIGEgY2hhbm5lbC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGRlbGV0ZSB0aGUgbWVzc2FnZSBmcm9tLlxuICAgICAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBkZWxldGUgZnJvbSB0aGUgY2hhbm5lbC5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogSWYgbm90IGRlbGV0aW5nIG93biBtZXNzYWdlOlxuICAgICAgICogLSBSZXF1aXJlcyB0aGUgYE1BTkFHRV9NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICAgICAqXG4gICAgICAgKiBGaXJlcyBhIF9NZXNzYWdlIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNkZWxldGUtbWVzc2FnZX1cbiAgICAgICAqL1xuICAgICAgZGVsZXRlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyBhIGNoYW5uZWwgYnkgaXRzIElELlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZENoYW5uZWx9LlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBJZiB0aGUgY2hhbm5lbCBpcyBhIHRocmVhZCwgYSB7QGxpbmsgVGhyZWFkTWVtYmVyfSBvYmplY3QgaXMgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdC5cbiAgICAgKlxuICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2dldC1jaGFubmVsfVxuICAgICAqL1xuICAgIGdldDogKGlkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZENoYW5uZWw+PlxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjaGFubmVsIHdpdGhpbiBhIGd1aWxkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGNyZWF0ZSB0aGUgY2hhbm5lbCB3aXRoaW4uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBjaGFubmVsLlxuICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkQ2hhbm5lbH0uXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0NIQU5ORUxTYCBwZXJtaXNzaW9uLlxuICAgICAqXG4gICAgICogSWYgc2V0dGluZyBwZXJtaXNzaW9uIG92ZXJ3cml0ZXMsIG9ubHkgdGhlIHBlcm1pc3Npb25zIHRoZSBib3QgdXNlciBoYXMgaW4gdGhlIGd1aWxkIGNhbiBiZSBhbGxvd2VkIG9yIGRlbmllZC5cbiAgICAgKlxuICAgICAqIFNldHRpbmcgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24gaXMgb25seSBwb3NzaWJsZSBmb3IgZ3VpbGQgYWRtaW5pc3RyYXRvcnMuXG4gICAgICpcbiAgICAgKiBGaXJlcyBhIF9DaGFubmVsIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgKlxuICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNjcmVhdGUtZ3VpbGQtY2hhbm5lbH1cbiAgICAgKi9cbiAgICBjcmVhdGU6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZUd1aWxkQ2hhbm5lbCkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQ2hhbm5lbD4+XG4gICAgLyoqXG4gICAgICogRGVsZXRlcyBhIGNoYW5uZWwgZnJvbSB3aXRoaW4gYSBndWlsZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZGVsZXRlLlxuICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBkZWxldGVkIHtAbGluayBDaGFubmVsfS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogRm9yIGNvbW11bml0eSBndWlsZHMsIHRoZSBfUnVsZXNfLCBfR3VpZGVsaW5lc18gYW5kIF9Db21tdW5pdHkgVXBkYXRlXyBjaGFubmVscyBjYW5ub3QgYmUgZGVsZXRlZC5cbiAgICAgKlxuICAgICAqIElmIHRoZSBjaGFubmVsIGlzIGEgdGhyZWFkOlxuICAgICAqIC0gUmVxdWlyZXMgdGhlIGBNQU5BR0VfVEhSRUFEU2AgcGVybWlzc2lvbi5cbiAgICAgKlxuICAgICAqIC0gRmlyZXMgYSBfVGhyZWFkIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgKlxuICAgICAqIE90aGVyd2lzZTpcbiAgICAgKiAtIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0NIQU5ORUxTYCBwZXJtaXNzaW9uLlxuICAgICAqXG4gICAgICogLSDimqDvuI8gRGVsZXRpbmcgYSBjYXRlZ29yeSBjaGFubmVsIGRvZXMgbm90IGRlbGV0ZSBpdHMgY2hpbGQgY2hhbm5lbHMuXG4gICAgICogICBJbnN0ZWFkLCB0aGV5IHdpbGwgaGF2ZSB0aGVpciBgcGFyZW50X2lkYCBwcm9wZXJ0eSByZW1vdmVkLCBhbmQgYSBgQ2hhbm5lbCBVcGRhdGVgIGdhdGV3YXkgZXZlbnQgd2lsbCBmaXJlIGZvciBlYWNoIG9mIHRoZW0uXG4gICAgICpcbiAgICAgKiAtIEZpcmVzIGEgX0NoYW5uZWwgRGVsZXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAqXG4gICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZGVsZXRlY2xvc2UtY2hhbm5lbH1cbiAgICAgKi9cbiAgICBkZWxldGU6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gICAgLyoqXG4gICAgICogRWRpdHMgYSBjaGFubmVsJ3Mgc2V0dGluZ3MuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGVkaXQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIGNoYW5uZWwuXG4gICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZENoYW5uZWx9LlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBJZiBlZGl0aW5nIGEgY2hhbm5lbCBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXMuR3JvdXBEbX06XG4gICAgICogLSBGaXJlcyBhIF9DaGFubmVsIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgKlxuICAgICAqIElmIGVkaXRpbmcgYSB0aHJlYWQgY2hhbm5lbDpcbiAgICAgKiAtIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1RIUkVBRFNgIHBlcm1pc3Npb24gX191bmxlc3NfXyBpZiBzZXR0aW5nIHRoZSBgYXJjaGl2ZWRgIHByb3BlcnR5IHRvIGBmYWxzZWAgd2hlbiB0aGUgYGxvY2tlZGAgcHJvcGVydHkgaXMgYWxzbyBgZmFsc2VgLCBpbiB3aGljaCBjYXNlIG9ubHkgdGhlIGBTRU5EX01FU1NBR0VTYCBwZXJtaXNzaW9uIGlzIHJlcXVpcmVkLlxuICAgICAqXG4gICAgICogLSBGaXJlcyBhIF9UaHJlYWQgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAqXG4gICAgICogSWYgZWRpdGluZyBhIGd1aWxkIGNoYW5uZWw6XG4gICAgICogLSBSZXF1aXJlcyB0aGUgYE1BTkFHRV9DSEFOTkVMU2AgcGVybWlzc2lvbi5cbiAgICAgKlxuICAgICAqIC0gSWYgbW9kaWZ5aW5nIHBlcm1pc3Npb24gb3ZlcnJpZGVzOlxuICAgICAqICAgLSBSZXF1aXJlcyB0aGUgYE1BTkFHRV9ST0xFU2AgcGVybWlzc2lvbi5cbiAgICAgKlxuICAgICAqICAgLSBPbmx5IHBlcm1pc3Npb25zIHRoZSBib3QgdXNlciBoYXMgaW4gdGhlIGd1aWxkIG9yIHBhcmVudCBjaGFubmVsIGNhbiBiZSBhbGxvd2VkL2RlbmllZCBfX3VubGVzc19fIHRoZSBib3QgdXNlciBoYXMgYSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uIG92ZXJyaWRlIGluIHRoZSBjaGFubmVsLlxuICAgICAqXG4gICAgICogLSBJZiBtb2RpZnlpbmcgYSBjaGFubmVsIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlcy5HdWlsZENhdGVnb3J5fTpcbiAgICAgKiAgICAgLSBGaXJlcyBhIF9DaGFubmVsIFVwZGF0ZV8gZ2F0ZXdheSBldmVudCBmb3IgZWFjaCBjaGlsZCBjaGFubmVsIGltcGFjdGVkIGluIHRoaXMgY2hhbmdlLlxuICAgICAqIC0gT3RoZXJ3aXNlOlxuICAgICAqICAgICAtIEZpcmVzIGEgX0NoYW5uZWwgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAqL1xuICAgIGVkaXQ6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogTW9kaWZ5Q2hhbm5lbCkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQ2hhbm5lbD4+XG4gICAgLyoqXG4gICAgICogRm9sbG93cyBhbiBhbm5vdW5jZW1lbnQgY2hhbm5lbCwgYWxsb3dpbmcgbWVzc2FnZXMgcG9zdGVkIHdpdGhpbiBpdCB0byBiZSBjcm9zcy1wb3N0ZWQgaW50byB0aGUgdGFyZ2V0IGNoYW5uZWwuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc291cmNlQ2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBhbm5vdW5jZW1lbnQgY2hhbm5lbCB0byBmb2xsb3cuXG4gICAgICogQHBhcmFtIHRhcmdldENoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgdGFyZ2V0IGNoYW5uZWwgLSB0aGUgY2hhbm5lbCB0byBjcm9zcy1wb3N0IHRvLlxuICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkRm9sbG93ZWRDaGFubmVsfS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfV0VCSE9PS1NgIHBlcm1pc3Npb24gaW4gdGhlIF9fdGFyZ2V0IGNoYW5uZWxfXy5cbiAgICAgKlxuICAgICAqIEZpcmVzIGEgX1dlYmhvb2tzIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgKlxuICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2ZvbGxvdy1hbm5vdW5jZW1lbnQtY2hhbm5lbH1cbiAgICAgKi9cbiAgICBmb2xsb3c6IChzb3VyY2VDaGFubmVsSWQ6IEJpZ1N0cmluZywgdGFyZ2V0Q2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEZvbGxvd2VkQ2hhbm5lbD4+XG4gICAgLyoqIEZvcnVtIHJlbGF0ZWQgaGVscGVycyBpbiBhIGNoYW5uZWwgKi9cbiAgICBmb3J1bXM6IHtcbiAgICAgIC8qKlxuICAgICAgICogQ3JlYXRlcyBhIG5ldyB0aHJlYWQgaW4gYSBmb3J1bSBjaGFubmVsLCBhbmQgc2VuZHMgYSBtZXNzYWdlIHdpdGhpbiB0aGUgY3JlYXRlZCB0aHJlYWQuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgZm9ydW0gY2hhbm5lbCB0byBjcmVhdGUgdGhlIHRocmVhZCB3aXRoaW4uXG4gICAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIHRocmVhZC5cbiAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkQ2hhbm5lbH0gd2l0aCBhIG5lc3RlZCB7QGxpbmsgTWVzc2FnZX0gb2JqZWN0LlxuICAgICAgICpcbiAgICAgICAqIEByZW1hcmtzXG4gICAgICAgKiBSZXF1aXJlcyB0aGUgYENSRUFURV9NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICAgICAqXG4gICAgICAgKiBGaXJlcyBhIF9UaHJlYWQgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAgICogRmlyZXMgYSBfTWVzc2FnZSBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjc3RhcnQtdGhyZWFkLWluLWZvcnVtLWNoYW5uZWx9XG4gICAgICAgKlxuICAgICAgICogQGV4cGVyaW1lbnRhbFxuICAgICAgICovXG4gICAgICBwb3N0OiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZUZvcnVtUG9zdFdpdGhNZXNzYWdlKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRDaGFubmVsPj5cbiAgICB9XG4gICAgLyoqIFBlcm1pc3Npb24gcmVsYXRlZCBoZWxwZXJzIGluIGEgY2hhbm5lbCAqL1xuICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAvKipcbiAgICAgICAqIEVkaXRzIHRoZSBwZXJtaXNzaW9uIG92ZXJyaWRlcyBmb3IgYSB1c2VyIG9yIHJvbGUgaW4gYSBjaGFubmVsLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZWRpdCB0aGUgcGVybWlzc2lvbiBvdmVycmlkZXMgb2YuXG4gICAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwZXJtaXNzaW9uIG92ZXJyaWRlLlxuICAgICAgICpcbiAgICAgICAqIEByZW1hcmtzXG4gICAgICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9ST0xFU2AgcGVybWlzc2lvbi5cbiAgICAgICAqXG4gICAgICAgKiBPbmx5IHBlcm1pc3Npb25zIHRoZSBib3QgdXNlciBoYXMgaW4gdGhlIGd1aWxkIG9yIHBhcmVudCBjaGFubmVsIGNhbiBiZSBhbGxvd2VkL2RlbmllZCBfX3VubGVzc19fIHRoZSBib3QgdXNlciBoYXMgYSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uIG92ZXJyaWRlIGluIHRoZSBjaGFubmVsLlxuICAgICAgICpcbiAgICAgICAqIEZpcmVzIGEgX0NoYW5uZWwgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2VkaXQtY2hhbm5lbC1wZXJtaXNzaW9uc31cbiAgICAgICAqL1xuICAgICAgZWRpdDogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBFZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXNPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+XG4gICAgICAvKipcbiAgICAgICAqIERlbGV0ZXMgYSBwZXJtaXNzaW9uIG92ZXJyaWRlIGZvciBhIHVzZXIgb3Igcm9sZSBpbiBhIGNoYW5uZWwuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBkZWxldGUgdGhlIHBlcm1pc3Npb24gb3ZlcnJpZGUgb2YuXG4gICAgICAgKiBAcGFyYW0gb3ZlcndyaXRlSWQgLSBUaGUgSUQgb2YgdGhlIHBlcm1pc3Npb24gb3ZlcnJpZGUgdG8gZGVsZXRlLlxuICAgICAgICpcbiAgICAgICAqIEByZW1hcmtzXG4gICAgICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9ST0xFU2AgcGVybWlzc2lvbi5cbiAgICAgICAqXG4gICAgICAgKiBGaXJlcyBhIF9DaGFubmVsIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNkZWxldGUtY2hhbm5lbC1wZXJtaXNzaW9ufVxuICAgICAgICovXG4gICAgICBkZWxldGU6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3ZlcndyaXRlSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gICAgfVxuICAgIHRocmVhZHM6IHtcbiAgICAgIGdldDoge1xuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgbGlzdCBvZiBhbGwgYWN0aXZlIHRocmVhZHMgZm9yIGEgZ3VpbGQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHRocmVhZHMgb2YuXG4gICAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkQWN0aXZlVGhyZWFkc30uXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZW1hcmtzXG4gICAgICAgICAqIFJldHVybnMgYm90aCBwdWJsaWMgYW5kIHByaXZhdGUgdGhyZWFkcy5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhyZWFkcyBhcmUgb3JkZXJlZCBieSB0aGUgYGlkYCBwcm9wZXJ0eSBpbiBkZXNjZW5kaW5nIG9yZGVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjbGlzdC1hY3RpdmUtZ3VpbGQtdGhyZWFkc31cbiAgICAgICAgICovXG4gICAgICAgIGFjdGl2ZTogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQWN0aXZlVGhyZWFkcz4+XG4gICAgICAgIC8qKiBNZXRob2RzIHJlbGF0ZWQgdG8gZ2V0dGluZyBhcmNoaXZlZCB0aHJlYWRzLiAqL1xuICAgICAgICBhcmNoaXZlZDoge1xuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIEdldHMgdGhlIGxpc3Qgb2YgcHJpdmF0ZSBhcmNoaXZlZCB0aHJlYWRzIGZvciBhIGNoYW5uZWwuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGdldCB0aGUgYXJjaGl2ZWQgdGhyZWFkcyBmb3IuXG4gICAgICAgICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRocmVhZHMuXG4gICAgICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRBcmNoaXZlZFRocmVhZHN9LlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHJlbWFya3NcbiAgICAgICAgICAgKiBSZXF1aXJlcyB0aGUgYFJFQURfTUVTU0FHRV9ISVNUT1JZYCBwZXJtaXNzaW9uLlxuICAgICAgICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1RIUkVBRFNgIHBlcm1pc3Npb24uXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBSZXR1cm5zIHRocmVhZHMgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzLkd1aWxkUHJpdmF0ZVRocmVhZH0uXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBUaHJlYWRzIGFyZSBvcmRlcmVkIGJ5IHRoZSBgYXJjaGl2ZV90aW1lc3RhbXBgIHByb3BlcnR5IGluY2x1ZGVkIGluIHRoZSBtZXRhZGF0YSBvZiB0aGUgb2JqZWN0IGluIGRlc2NlbmRpbmcgb3JkZXIuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNsaXN0LXByaXZhdGUtYXJjaGl2ZWQtdGhyZWFkc31cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBwcml2YXRlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBMaXN0QXJjaGl2ZWRUaHJlYWRzKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcmNoaXZlZFRocmVhZHM+PlxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIEdldHMgdGhlIGxpc3Qgb2YgcHJpdmF0ZSBhcmNoaXZlZCB0aHJlYWRzIHRoZSBib3QgaXMgYSBtZW1iZXIgb2YgZm9yIGEgY2hhbm5lbC5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZ2V0IHRoZSBhcmNoaXZlZCB0aHJlYWRzIGZvci5cbiAgICAgICAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhyZWFkcy5cbiAgICAgICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEFyY2hpdmVkVGhyZWFkc30uXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAcmVtYXJrc1xuICAgICAgICAgICAqIFJlcXVpcmVzIHRoZSBgUkVBRF9NRVNTQUdFX0hJU1RPUllgIHBlcm1pc3Npb24uXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBSZXR1cm5zIHRocmVhZHMgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzLkd1aWxkUHJpdmF0ZVRocmVhZH0uXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBUaHJlYWRzIGFyZSBvcmRlcmVkIGJ5IHRoZSBgaWRgIHByb3BlcnR5IGluIGRlc2NlbmRpbmcgb3JkZXIuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNsaXN0LWpvaW5lZC1wcml2YXRlLWFyY2hpdmVkLXRocmVhZHN9XG4gICAgICAgICAgICovXG4gICAgICAgICAgam9pbmVkOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBMaXN0QXJjaGl2ZWRUaHJlYWRzKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcmNoaXZlZFRocmVhZHM+PlxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIEdldHMgdGhlIGxpc3Qgb2YgcHVibGljIGFyY2hpdmVkIHRocmVhZHMgZm9yIGEgY2hhbm5lbC5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZ2V0IHRoZSBhcmNoaXZlZCB0aHJlYWRzIGZvci5cbiAgICAgICAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhyZWFkcy5cbiAgICAgICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgQXJjaGl2ZWRUaHJlYWRzfS5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEByZW1hcmtzXG4gICAgICAgICAgICogUmVxdWlyZXMgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbi5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIElmIGNhbGxlZCBvbiBhIGNoYW5uZWwgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzLkd1aWxkVGV4dH0sIHJldHVybnMgdGhyZWFkcyBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXMuR3VpbGRQdWJsaWNUaHJlYWR9LlxuICAgICAgICAgICAqIElmIGNhbGxlZCBvbiBhIGNoYW5uZWwgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzLkd1aWxkTmV3c30sIHJldHVybnMgdGhyZWFkcyBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXMuR3VpbGROZXdzVGhyZWFkfS5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIFRocmVhZHMgYXJlIG9yZGVyZWQgYnkgdGhlIGBhcmNoaXZlX3RpbWVzdGFtcGAgcHJvcGVydHkgaW5jbHVkZWQgaW4gdGhlIG1ldGFkYXRhIG9mIHRoZSBvYmplY3QgaW4gZGVzY2VuZGluZyBvcmRlci5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2xpc3QtcHVibGljLWFyY2hpdmVkLXRocmVhZHN9XG4gICAgICAgICAgICovXG4gICAgICAgICAgcHVibGljOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBMaXN0QXJjaGl2ZWRUaHJlYWRzKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcmNoaXZlZFRocmVhZHM+PlxuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIGEgdGhyZWFkIG1lbWJlciBieSB0aGVpciB1c2VyIElELlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSB0aHJlYWQgdG8gZ2V0IHRoZSB0aHJlYWQgbWVtYmVyIG9mLlxuICAgICAgICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIHVzZXIgSUQgb2YgdGhlIHRocmVhZCBtZW1iZXIgdG8gZ2V0LlxuICAgICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZFRocmVhZE1lbWJlcn0uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2dldC10aHJlYWQtbWVtYmVyfVxuICAgICAgICAgKi9cbiAgICAgICAgbWVtYmVyOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRUaHJlYWRNZW1iZXI+PlxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgbGlzdCBvZiB0aHJlYWQgbWVtYmVycyBmb3IgYSB0aHJlYWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIHRocmVhZCB0byBnZXQgdGhlIHRocmVhZCBtZW1iZXJzIG9mLlxuICAgICAgICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRUaHJlYWRNZW1iZXJ9IGFzc29ydGVkIGJ5IHVzZXIgSUQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZW1hcmtzXG4gICAgICAgICAqIFJlcXVpcmVzIHRoZSBhcHBsaWNhdGlvbiB0byBoYXZlIHRoZSBgR1VJTERfTUVNQkVSU2AgcHJpdmlsZWdlZCBpbnRlbnQgZW5hYmxlZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjbGlzdC10aHJlYWQtbWVtYmVyc31cbiAgICAgICAgICovXG4gICAgICAgIG1lbWJlcnM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGhyZWFkTWVtYmVyW10+PlxuICAgICAgfVxuICAgICAgLyoqXG4gICAgICAgKiBBZGRzIHRoZSBib3QgdXNlciB0byBhIHRocmVhZC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSB0aHJlYWQgdG8gYWRkIHRoZSBib3QgdXNlciB0by5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogUmVxdWlyZXMgdGhlIHRocmVhZCBub3QgYmUgYXJjaGl2ZWQuXG4gICAgICAgKlxuICAgICAgICogRmlyZXMgYSBfVGhyZWFkIE1lbWJlcnMgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2pvaW4tdGhyZWFkfVxuICAgICAgICovXG4gICAgICBqb2luOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgICAgIC8qKlxuICAgICAgICogUmVtb3ZlcyB0aGUgYm90IHVzZXIgZnJvbSBhIHRocmVhZC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSB0aHJlYWQgdG8gcmVtb3ZlIHRoZSBib3QgdXNlciBmcm9tLlxuICAgICAgICpcbiAgICAgICAqIEByZW1hcmtzXG4gICAgICAgKiBSZXF1aXJlcyB0aGUgdGhyZWFkIG5vdCBiZSBhcmNoaXZlZC5cbiAgICAgICAqXG4gICAgICAgKiBGaXJlcyBhIF9UaHJlYWQgTWVtYmVycyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjbGVhdmUtdGhyZWFkfVxuICAgICAgICovXG4gICAgICBsZWF2ZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gICAgICAvKipcbiAgICAgICAqIFJlbW92ZXMgYSBtZW1iZXIgZnJvbSBhIHRocmVhZC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSB0aHJlYWQgdG8gcmVtb3ZlIHRoZSB0aHJlYWQgbWVtYmVyIG9mLlxuICAgICAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSB1c2VyIElEIG9mIHRoZSB0aHJlYWQgbWVtYmVyIHRvIHJlbW92ZS5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogSWYgdGhlIHRocmVhZCBpcyBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXMuR3VpbGRQcml2YXRlVGhyZWFkfSwgcmVxdWlyZXMgdG8gYmUgdGhlIGNyZWF0b3Igb2YgdGhlIHRocmVhZC5cbiAgICAgICAqIE90aGVyd2lzZSwgcmVxdWlyZXMgdGhlIGBNQU5BR0VfVEhSRUFEU2AgcGVybWlzc2lvbi5cbiAgICAgICAqXG4gICAgICAgKiBSZXF1aXJlcyB0aGUgdGhyZWFkIG5vdCBiZSBhcmNoaXZlZC5cbiAgICAgICAqXG4gICAgICAgKiBGaXJlcyBhIF9UaHJlYWQgTWVtYmVycyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjcmVtb3ZlLXRocmVhZC1tZW1iZXJ9XG4gICAgICAgKi9cbiAgICAgIGtpY2s6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgICAgIC8qKiBNZXRob2RzIHJlbGF0ZWQgdG8gY3JlYXRpbmcgYSB0aHJlYWQuICovXG4gICAgICBjcmVhdGU6IHtcbiAgICAgICAgd2l0aDoge1xuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIENyZWF0ZXMgYSB0aHJlYWQsIHVzaW5nIGFuIGV4aXN0aW5nIG1lc3NhZ2UgYXMgaXRzIHBvaW50IG9mIG9yaWdpbi5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgaW4gd2hpY2ggdG8gY3JlYXRlIHRoZSB0aHJlYWQuXG4gICAgICAgICAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byB1c2UgYXMgdGhlIHRocmVhZCdzIHBvaW50IG9mIG9yaWdpbi5cbiAgICAgICAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIHRvIHVzZSBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSB0aHJlYWQuXG4gICAgICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIENoYW5uZWwgfCBUaHJlYWR9LlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHJlbWFya3NcbiAgICAgICAgICAgKiBJZiBjYWxsZWQgb24gYSBjaGFubmVsIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlcy5HdWlsZFRleHR9LCBjcmVhdGVzIGEge0BsaW5rIENoYW5uZWxUeXBlcy5HdWlsZFB1YmxpY1RocmVhZH0uXG4gICAgICAgICAgICogSWYgY2FsbGVkIG9uIGEgY2hhbm5lbCBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXMuR3VpbGROZXdzfSwgY3JlYXRlcyBhIHtAbGluayBDaGFubmVsVHlwZXMuR3VpbGROZXdzVGhyZWFkfS5cbiAgICAgICAgICAgKiBEb2VzIG5vdCB3b3JrIG9uIGNoYW5uZWxzIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlcy5HdWlsZEZvcnVtfS5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIFRoZSBJRCBvZiB0aGUgY3JlYXRlZCB0aHJlYWQgd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUgSUQgb2YgdGhlIHNvdXJjZSBtZXNzYWdlLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogRmlyZXMgYSBfVGhyZWFkIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI3N0YXJ0LXRocmVhZC1mcm9tLW1lc3NhZ2V9XG4gICAgICAgICAgICovXG4gICAgICAgICAgbWVzc2FnZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogU3RhcnRUaHJlYWRXaXRoTWVzc2FnZSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQ2hhbm5lbD4+XG4gICAgICAgIH1cbiAgICAgICAgd2l0aG91dDoge1xuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIENyZWF0ZXMgYSB0aHJlYWQgd2l0aG91dCB1c2luZyBhIG1lc3NhZ2UgYXMgdGhlIHRocmVhZCdzIHBvaW50IG9mIG9yaWdpbi5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgaW4gd2hpY2ggdG8gY3JlYXRlIHRoZSB0aHJlYWQuXG4gICAgICAgICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyB0byB1c2UgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgdGhyZWFkLlxuICAgICAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkQ2hhbm5lbCB8IFRocmVhZH0uXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAcmVtYXJrc1xuICAgICAgICAgICAqIENyZWF0aW5nIGEgcHJpdmF0ZSB0aHJlYWQgcmVxdWlyZXMgdGhlIHNlcnZlciB0byBiZSBib29zdGVkLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogRmlyZXMgYSBfVGhyZWFkIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI3N0YXJ0LXRocmVhZC13aXRob3V0LW1lc3NhZ2V9XG4gICAgICAgICAgICovXG4gICAgICAgICAgbWVzc2FnZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBTdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRDaGFubmVsPj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBFZGl0cyB0aGUgcG9zaXRpb25zIG9mIGEgc2V0IG9mIGNoYW5uZWxzIGluIGEgZ3VpbGQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgaW4gd2hpY2ggdG8gZWRpdCB0aGUgcG9zaXRpb25zIG9mIHRoZSBjaGFubmVscy5cbiAgICAgKiBAcGFyYW0gY2hhbm5lbFBvc2l0aW9ucyAtIEEgc2V0IG9mIG9iamVjdHMgZGVmaW5pbmcgdGhlIHVwZGF0ZWQgcG9zaXRpb25zIG9mIHRoZSBjaGFubmVscy5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfQ0hBTk5FTFNgIHBlcm1pc3Npb24uXG4gICAgICpcbiAgICAgKiBGaXJlcyBhIF9DaGFubmVsIFVwZGF0ZV8gZ2F0ZXdheSBldmVudCBmb3IgZXZlcnkgY2hhbm5lbCBpbXBhY3RlZCBpbiB0aGlzIGNoYW5nZS5cbiAgICAgKlxuICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNtb2RpZnktZ3VpbGQtY2hhbm5lbC1wb3NpdGlvbnN9XG4gICAgICovXG4gICAgcG9zaXRpb25zOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBjaGFubmVsUG9zaXRpb25zOiBNb2RpZnlHdWlsZENoYW5uZWxQb3NpdGlvbnNbXSkgPT4gUHJvbWlzZTx2b2lkPlxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGxpc3Qgb2YgaW52aXRlcyBmb3IgYSBjaGFubmVsLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBnZXQgdGhlIGludml0ZXMgb2YuXG4gICAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkSW52aXRlTWV0YWRhdGF9IG9iamVjdHMgYXNzb3J0ZWQgYnkgaW52aXRlIGNvZGUuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0NIQU5ORUxTYCBwZXJtaXNzaW9uLlxuICAgICAqXG4gICAgICogT25seSB1c2FibGUgZm9yIGd1aWxkIGNoYW5uZWxzLlxuICAgICAqXG4gICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZ2V0LWNoYW5uZWwtaW52aXRlc31cbiAgICAgKi9cbiAgICBpbnZpdGVzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEludml0ZU1ldGFkYXRhW10+PlxuICAgIC8qKiBTdGFnZSByZWxhdGVkIGhlbHBlcnMgZm9yIGEgY2hhbm5lbC4gKi9cbiAgICBzdGFnZXM6IHtcbiAgICAgIC8qKlxuICAgICAgICogQ3JlYXRlcyBhIHN0YWdlIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCBhIHN0YWdlIGNoYW5uZWwuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBzdGFnZSBpbnN0YW5jZS5cbiAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkU3RhZ2VJbnN0YW5jZX0uXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoZSB1c2VyIHRvIGJlIGEgbW9kZXJhdG9yIG9mIHRoZSBzdGFnZSBjaGFubmVsLlxuICAgICAgICpcbiAgICAgICAqIEZpcmVzIGEgX1N0YWdlIEluc3RhbmNlIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvc3RhZ2UtaW5zdGFuY2UjY3JlYXRlLXN0YWdlLWluc3RhbmNlfVxuICAgICAgICovXG4gICAgICBjcmVhdGU6IChvcHRpb25zOiBDcmVhdGVTdGFnZUluc3RhbmNlKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTdGFnZUluc3RhbmNlPj5cbiAgICAgIC8qKlxuICAgICAgICogRGVsZXRlcyB0aGUgc3RhZ2UgaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIGEgc3RhZ2UgY2hhbm5lbCwgaWYgb25lIGV4aXN0cy5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBzdGFnZSBjaGFubmVsIHRoZSBzdGFnZSBpbnN0YW5jZSBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoZSB1c2VyIHRvIGJlIGEgbW9kZXJhdG9yIG9mIHRoZSBzdGFnZSBjaGFubmVsLlxuICAgICAgICpcbiAgICAgICAqIEZpcmVzIGEgX1N0YWdlIEluc3RhbmNlIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvc3RhZ2UtaW5zdGFuY2UjZGVsZXRlLXN0YWdlLWluc3RhbmNlfVxuICAgICAgICovXG4gICAgICBkZWxldGU6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gICAgICAvKipcbiAgICAgICAqIEVkaXRzIGEgc3RhZ2UgaW5zdGFuY2UuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgc3RhZ2UgY2hhbm5lbCB0aGUgc3RhZ2UgaW5zdGFuY2UgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIHVwZGF0ZWQge0BsaW5rIERpc2NvcmRTdGFnZUluc3RhbmNlfS5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogUmVxdWlyZXMgdGhlIHVzZXIgdG8gYmUgYSBtb2RlcmF0b3Igb2YgdGhlIHN0YWdlIGNoYW5uZWwuXG4gICAgICAgKlxuICAgICAgICogRmlyZXMgYSBfU3RhZ2UgSW5zdGFuY2UgVXBkYXRlXyBldmVudC5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvc3RhZ2UtaW5zdGFuY2UjbW9kaWZ5LXN0YWdlLWluc3RhbmNlfVxuICAgICAgICovXG4gICAgICBlZGl0OiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIGRhdGE6IEVkaXRTdGFnZUluc3RhbmNlT3B0aW9ucykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4+XG4gICAgICAvKipcbiAgICAgICAqIEdldHMgdGhlIHN0YWdlIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCBhIHN0YWdlIGNoYW5uZWwsIGlmIG9uZSBleGlzdHMuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgc3RhZ2UgY2hhbm5lbCB0aGUgc3RhZ2UgaW5zdGFuY2UgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRTdGFnZUluc3RhbmNlfS5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvc3RhZ2UtaW5zdGFuY2UjZ2V0LXN0YWdlLWluc3RhbmNlfVxuICAgICAgICovXG4gICAgICBnZXQ6IChjaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4+XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRyaWdnZXJzIGEgdHlwaW5nIGluZGljYXRvciBmb3IgdGhlIGJvdCB1c2VyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCBpbiB3aGljaCB0byB0cmlnZ2VyIHRoZSB0eXBpbmcgaW5kaWNhdG9yLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBHZW5lcmFsbHksIGJvdHMgc2hvdWxkIF9ub3RfIHVzZSB0aGlzIHJvdXRlLlxuICAgICAqXG4gICAgICogRmlyZXMgYSBfVHlwaW5nIFN0YXJ0XyBnYXRld2F5IGV2ZW50LlxuICAgICAqXG4gICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjdHJpZ2dlci10eXBpbmctaW5kaWNhdG9yfVxuICAgICAqL1xuICAgIHR5cGluZzogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIH1cbiAgLyoqIEVtb2ppIHJlbGF0ZWQgaGVscGVyIG1ldGhvZHMuICovXG4gIGVtb2ppczoge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gZW1vamkgaW4gYSBndWlsZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCBpbiB3aGljaCB0byBjcmVhdGUgdGhlIGVtb2ppLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgZW1vamkuXG4gICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRFbW9qaX0uXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0VNT0pJU19BTkRfU1RJQ0tFUlNgIHBlcm1pc3Npb24uXG4gICAgICpcbiAgICAgKiBFbW9qaXMgaGF2ZSBhIG1heGltdW0gZmlsZSBzaXplIG9mIDI1NiBraWxvYml0cy4gQXR0ZW1wdGluZyB0byB1cGxvYWQgYSBsYXJnZXIgZW1vamkgd2lsbCBjYXVzZSB0aGUgcm91dGUgdG8gcmV0dXJuIDQwMCBCYWQgUmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEZpcmVzIGEgX0d1aWxkIEVtb2ppcyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZW1vamkjY3JlYXRlLWd1aWxkLWVtb2ppfVxuICAgICAqL1xuICAgIGNyZWF0ZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlR3VpbGRFbW9qaSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkRW1vamk+PlxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgYW4gZW1vamkgZnJvbSBhIGd1aWxkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIGZyb20gd2hpY2ggdG8gZGVsZXRlIHRoZSBlbW9qaS5cbiAgICAgKiBAcGFyYW0gaWQgLSBUaGUgSUQgb2YgdGhlIGVtb2ppIHRvIGRlbGV0ZS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfRU1PSklTX0FORF9TVElDS0VSU2AgcGVybWlzc2lvbi5cbiAgICAgKlxuICAgICAqIEZpcmVzIGEgX0d1aWxkIEVtb2ppcyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZW1vamkjZGVsZXRlLWd1aWxkLWVtb2ppfVxuICAgICAqL1xuICAgIGRlbGV0ZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgaWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gICAgLyoqXG4gICAgICogRWRpdHMgYW4gZW1vamkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgaW4gd2hpY2ggdG8gZWRpdCB0aGUgZW1vamkuXG4gICAgICogQHBhcmFtIGlkIC0gVGhlIElEIG9mIHRoZSBlbW9qaSB0byBlZGl0LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBlbW9qaS5cbiAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgdXBkYXRlZCB7QGxpbmsgRGlzY29yZEVtb2ppfS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfRU1PSklTX0FORF9TVElDS0VSU2AgcGVybWlzc2lvbi5cbiAgICAgKlxuICAgICAqIEZpcmVzIGEgYEd1aWxkIEVtb2ppcyBVcGRhdGVgIGdhdGV3YXkgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZW1vamkjbW9kaWZ5LWd1aWxkLWVtb2ppfVxuICAgICAqL1xuICAgIGVkaXQ6IChndWlsZElkOiBCaWdTdHJpbmcsIGlkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IE1vZGlmeUd1aWxkRW1vamkpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEVtb2ppPj5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFuIGVtb2ppIGJ5IGl0cyBJRC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCBmcm9tIHdoaWNoIHRvIGdldCB0aGUgZW1vamkuXG4gICAgICogQHBhcmFtIGVtb2ppSWQgLSBUaGUgSUQgb2YgdGhlIGVtb2ppIHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEVtb2ppfS5cbiAgICAgKlxuICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9lbW9qaSNnZXQtZ3VpbGQtZW1vaml9XG4gICAgICovXG4gICAgZ2V0OiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBlbW9qaUlkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEVtb2ppPj5cbiAgfVxuICAvKiogR3VpbGQgcmVsYXRlZCBoZWxwZXIgbWV0aG9kcyAqL1xuICBndWlsZHM6IHtcbiAgICBhdXRvbW9kOiB7XG4gICAgICAvKipcbiAgICAgICAqIENyZWF0ZXMgYW4gYXV0b21vZCBydWxlIGluIGEgZ3VpbGQuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGNyZWF0ZSB0aGUgcnVsZSBpbi5cbiAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgcnVsZS5cbiAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlfS5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAgICAgKlxuICAgICAgICogRmlyZXMgYW4gX0F1dG8gTW9kZXJhdGlvbiBSdWxlIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvYXV0by1tb2RlcmF0aW9uI2NyZWF0ZS1hdXRvLW1vZGVyYXRpb24tcnVsZX1cbiAgICAgICAqL1xuICAgICAgY3JlYXRlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVBdXRvTW9kZXJhdGlvblJ1bGVPcHRpb25zKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+PlxuICAgICAgLyoqXG4gICAgICAgKiBEZWxldGVzIGEgc2NoZWR1bGVkIGV2ZW50IGZyb20gYSBndWlsZC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZGVsZXRlIHRoZSBzY2hlZHVsZWQgZXZlbnQgZnJvbS5cbiAgICAgICAqIEBwYXJhbSBldmVudElkIC0gVGhlIElEIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQgdG8gZGVsZXRlLlxuICAgICAgICpcbiAgICAgICAqIEByZW1hcmtzXG4gICAgICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9FVkVOVFNgIHBlcm1pc3Npb24uXG4gICAgICAgKlxuICAgICAgICogRmlyZXMgYSBfR3VpbGQgU2NoZWR1bGVkIEV2ZW50IERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQtc2NoZWR1bGVkLWV2ZW50I2RlbGV0ZS1ndWlsZC1zY2hlZHVsZWQtZXZlbnR9XG4gICAgICAgKi9cbiAgICAgIGRlbGV0ZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgZXZlbnRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gICAgICAvKipcbiAgICAgICAqIEVkaXRzIGFuIGF1dG9tb2QgcnVsZS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZWRpdCB0aGUgcnVsZSBpbi5cbiAgICAgICAqIEBwYXJhbSBydWxlSWQgLSBUaGUgSUQgb2YgdGhlIHJ1bGUgdG8gZWRpdC5cbiAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBydWxlLlxuICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZX0uXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgICAgICpcbiAgICAgICAqIEZpcmVzIGFuIF9BdXRvIE1vZGVyYXRpb24gUnVsZSBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2F1dG8tbW9kZXJhdGlvbiNtb2RpZnktYXV0by1tb2RlcmF0aW9uLXJ1bGV9XG4gICAgICAgKi9cbiAgICAgIGVkaXQ6IChndWlsZElkOiBCaWdTdHJpbmcsIHJ1bGVJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBQYXJ0aWFsPEVkaXRBdXRvTW9kZXJhdGlvblJ1bGVPcHRpb25zPikgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPj5cbiAgICAgIC8qKiBNZXRob2RzIHJlbGF0ZWQgdG8gZ2V0dGluZyBhdXRvbW9kZXJhdGlvbiBkYXRhIGluIGEgZ3VpbGQuICovXG4gICAgICBnZXQ6IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgYW4gYXV0b21vZCBydWxlIGJ5IGl0cyBJRC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgcnVsZSBvZi5cbiAgICAgICAgICogQHBhcmFtIHJ1bGVJZCAtIFRoZSBJRCBvZiB0aGUgcnVsZSB0byBnZXQuXG4gICAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlfS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJlbWFya3NcbiAgICAgICAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9hdXRvLW1vZGVyYXRpb24jZ2V0LWF1dG8tbW9kZXJhdGlvbi1ydWxlfVxuICAgICAgICAgKi9cbiAgICAgICAgcnVsZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgcnVsZUlkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4+XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIGF1dG9tb2QgcnVsZXMgZm9yIGEgZ3VpbGQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHJ1bGVzIGZyb20uXG4gICAgICAgICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZX0gb2JqZWN0cyBhc3NvcnRlZCBieSBydWxlIElELlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmVtYXJrc1xuICAgICAgICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2F1dG8tbW9kZXJhdGlvbiNsaXN0LWF1dG8tbW9kZXJhdGlvbi1ydWxlcy1mb3ItZ3VpbGR9XG4gICAgICAgICAqL1xuICAgICAgICBydWxlczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlW10+PlxuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZ3VpbGQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIGd1aWxkLlxuICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkR3VpbGR9LlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiDimqDvuI8gVGhpcyByb3V0ZSBjYW4gb25seSBiZSB1c2VkIGJ5IGJvdHMgaW4gX19mZXdlciB0aGFuIDEwIGd1aWxkc19fLlxuICAgICAqXG4gICAgICogRmlyZXMgYSBfR3VpbGQgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAqXG4gICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2NyZWF0ZS1ndWlsZH1cbiAgICAgKi9cbiAgICBjcmVhdGU6IChvcHRpb25zOiBDcmVhdGVHdWlsZCkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkR3VpbGQ+PlxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGxpc3Qgb2YgY2hhbm5lbHMgZm9yIGEgZ3VpbGQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBjaGFubmVscyBvZi5cbiAgICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRDaGFubmVsfSBvYmplY3RzIGFzc29ydGVkIGJ5IGNoYW5uZWwgSUQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIEV4Y2x1ZGVzIHRocmVhZHMuXG4gICAgICpcbiAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjZ2V0LWd1aWxkLWNoYW5uZWxzfVxuICAgICAqL1xuICAgIGNoYW5uZWxzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRDaGFubmVsW10+PlxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgYSBndWlsZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBkZWxldGUuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFRoZSBib3QgdXNlciBtdXN0IGJlIHRoZSBvd25lciBvZiB0aGUgZ3VpbGQuXG4gICAgICpcbiAgICAgKiBGaXJlcyBhIF9HdWlsZCBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjZGVsZXRlLWd1aWxkfVxuICAgICAqL1xuICAgIGRlbGV0ZTogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGxpc3Qgb2YgZW1vamlzIGZvciBhIGd1aWxkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHdoaWNoIHRvIGdldCB0aGUgZW1vamlzIG9mLlxuICAgICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZEVtb2ppfSBvYmplY3RzIGFzc29ydGVkIGJ5IGVtb2ppIElELlxuICAgICAqXG4gICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2Vtb2ppI2xpc3QtZ3VpbGQtZW1vamlzfVxuICAgICAqL1xuICAgIGVtb2ppczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkRW1vamlbXT4+XG4gICAgLyoqIE1ldGhvZHMgcmVsYXRlZCB0byBhIGd1aWxkJ3Mgc2NoZWR1bGVkIGV2ZW50cy4gKi9cbiAgICBldmVudHM6IHtcbiAgICAgIC8qKlxuICAgICAgICogQ3JlYXRlcyBhIHNjaGVkdWxlZCBldmVudCBpbiBhIGd1aWxkLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBjcmVhdGUgdGhlIHNjaGVkdWxlZCBldmVudCBpbi5cbiAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50LlxuICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIFNjaGVkdWxlZEV2ZW50fS5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfRVZFTlRTYCBwZXJtaXNzaW9uLlxuICAgICAgICpcbiAgICAgICAqIEEgZ3VpbGQgY2FuIG9ubHkgaGF2ZSBhIG1heGltdW0gb2YgMTAwIGV2ZW50cyB3aXRoIGEgc3RhdHVzIG9mIHtAbGluayBTY2hlZHVsZWRFdmVudFN0YXR1cy5BY3RpdmV9IG9yIHtAbGluayBTY2hlZHVsZWRFdmVudFN0YXR1cy5TY2hlZHVsZWR9IChpbmNsdXNpdmUpLlxuICAgICAgICpcbiAgICAgICAqIEZpcmVzIGEgX0d1aWxkIFNjaGVkdWxlZCBFdmVudCBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkLXNjaGVkdWxlZC1ldmVudCNjcmVhdGUtZ3VpbGQtc2NoZWR1bGVkLWV2ZW50fVxuICAgICAgICovXG4gICAgICBjcmVhdGU6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZVNjaGVkdWxlZEV2ZW50KSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTY2hlZHVsZWRFdmVudD4+XG4gICAgICAvKipcbiAgICAgICAqIERlbGV0ZXMgYSBzY2hlZHVsZWQgZXZlbnQgZnJvbSBhIGd1aWxkLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBkZWxldGUgdGhlIHNjaGVkdWxlZCBldmVudCBmcm9tLlxuICAgICAgICogQHBhcmFtIGV2ZW50SWQgLSBUaGUgSUQgb2YgdGhlIHNjaGVkdWxlZCBldmVudCB0byBkZWxldGUuXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0VWRU5UU2AgcGVybWlzc2lvbi5cbiAgICAgICAqXG4gICAgICAgKiBGaXJlcyBhIF9HdWlsZCBTY2hlZHVsZWQgRXZlbnQgRGVsZXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC1zY2hlZHVsZWQtZXZlbnQjZGVsZXRlLWd1aWxkLXNjaGVkdWxlZC1ldmVudH1cbiAgICAgICAqL1xuICAgICAgZGVsZXRlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBldmVudElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgICAgIC8qKlxuICAgICAgICogRWRpdHMgYSBzY2hlZHVsZWQgZXZlbnQuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQgdGhlIHNjaGVkdWxlZCBldmVudCBpbi5cbiAgICAgICAqIEBwYXJhbSBldmVudElkIC0gVGhlIElEIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQgdG8gZWRpdC5cbiAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIFNjaGVkdWxlZEV2ZW50fS5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfRVZFTlRTYCBwZXJtaXNzaW9uLlxuICAgICAgICpcbiAgICAgICAqIFRvIHN0YXJ0IG9yIGVuZCBhbiBldmVudCwgbW9kaWZ5IHRoZSBldmVudCdzIGBzdGF0dXNgIHByb3BlcnR5LlxuICAgICAgICpcbiAgICAgICAqIFRoZSBgZW50aXR5X21ldGFkYXRhYCBwcm9wZXJ0eSBpcyBkaXNjYXJkZWQgZm9yIGV2ZW50cyB3aG9zZSBgZW50aXR5X3R5cGVgIGlzIG5vdCB7QGxpbmsgU2NoZWR1bGVkRXZlbnRFbnRpdHlUeXBlLkV4dGVybmFsfS5cbiAgICAgICAqXG4gICAgICAgKiBGaXJlcyBhIF9HdWlsZCBTY2hlZHVsZWQgRXZlbnQgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC1zY2hlZHVsZWQtZXZlbnQjbW9kaWZ5LWd1aWxkLXNjaGVkdWxlZC1ldmVudH1cbiAgICAgICAqL1xuICAgICAgZWRpdDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgZXZlbnRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBQYXJ0aWFsPEVkaXRTY2hlZHVsZWRFdmVudD4pID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFNjaGVkdWxlZEV2ZW50Pj5cblxuICAgICAgZ2V0OiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXRzIGEgc2NoZWR1bGVkIGV2ZW50IGJ5IGl0cyBJRC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgc2NoZWR1bGVkIGV2ZW50IGZyb20uXG4gICAgICAgICAqIEBwYXJhbSBldmVudElkIC0gVGhlIElEIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQgdG8gZ2V0LlxuICAgICAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIHNjaGVkdWxlZCBldmVudC5cbiAgICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIFNjaGVkdWxlZEV2ZW50fS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkLXNjaGVkdWxlZC1ldmVudCNnZXQtZ3VpbGQtc2NoZWR1bGVkLWV2ZW50fVxuICAgICAgICAgKi9cbiAgICAgICAgZXZlbnQ6IChndWlsZElkOiBCaWdTdHJpbmcsIGV2ZW50SWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IHsgd2l0aFVzZXJDb3VudD86IGJvb2xlYW4gfSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+PlxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyB0aGUgbGlzdCBvZiBzY2hlZHVsZWQgZXZlbnRzIGZvciBhIGd1aWxkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBzY2hlZHVsZWQgZXZlbnRzIGZyb20uXG4gICAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50cy5cbiAgICAgICAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBTY2hlZHVsZWRFdmVudH0gb2JqZWN0cyBhc3NvcnRlZCBieSBldmVudCBJRC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkLXNjaGVkdWxlZC1ldmVudCNsaXN0LXNjaGVkdWxlZC1ldmVudHMtZm9yLWd1aWxkfVxuICAgICAgICAgKi9cbiAgICAgICAgZXZlbnRzOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogR2V0U2NoZWR1bGVkRXZlbnRzKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTY2hlZHVsZWRFdmVudFtdPj5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgdGhlIGxpc3Qgb2Ygc3Vic2NyaWJlcnMgdG8gYSBzY2hlZHVsZWQgZXZlbnQgZnJvbSBhIGd1aWxkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBzdWJzY3JpYmVycyB0byB0aGUgc2NoZWR1bGVkIGV2ZW50IGZyb20uXG4gICAgICAgICAqIEBwYXJhbSBldmVudElkIC0gVGhlIElEIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQgdG8gZ2V0IHRoZSBzdWJzY3JpYmVycyBvZi5cbiAgICAgICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSBzdWJzY3JpYmVycy5cbiAgICAgICAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBVc2VyfSBvYmplY3RzIGFzc29ydGVkIGJ5IHVzZXIgSUQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZW1hcmtzXG4gICAgICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0VWRU5UU2AgcGVybWlzc2lvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogVXNlcnMgYXJlIG9yZGVyZWQgYnkgdGhlaXIgSURzIGluIF9hc2NlbmRpbmdfIG9yZGVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQtc2NoZWR1bGVkLWV2ZW50I2dldC1ndWlsZC1zY2hlZHVsZWQtZXZlbnQtdXNlcnN9XG4gICAgICAgICAqL1xuICAgICAgICB1c2VyczogKFxuICAgICAgICAgIGd1aWxkSWQ6IEJpZ1N0cmluZyxcbiAgICAgICAgICBldmVudElkOiBCaWdTdHJpbmcsXG4gICAgICAgICAgb3B0aW9ucz86IEdldFNjaGVkdWxlZEV2ZW50VXNlcnMsXG4gICAgICAgICkgPT4gUHJvbWlzZTxcbiAgICAgICAgICBBcnJheTx7XG4gICAgICAgICAgICB1c2VyOiBDYW1lbGl6ZTxEaXNjb3JkVXNlcj5cbiAgICAgICAgICAgIG1lbWJlcj86IENhbWVsaXplPERpc2NvcmRNZW1iZXI+XG4gICAgICAgICAgfT5cbiAgICAgICAgPlxuICAgICAgfVxuICAgIH1cbiAgICAvKiogTWV0aG9kcyByZWxhdGVkIHRvIGEgZ3VpbGQncyBpbnRlZ3JhdGlvbnMuICovXG4gICAgaW50ZWdyYXRpb25zOiB7XG4gICAgICAvKipcbiAgICAgICAqIEdldHMgdGhlIGxpc3Qgb2YgaW50ZWdyYXRpb25zIGF0dGFjaGVkIHRvIGEgZ3VpbGQuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgbGlzdCBvZiBpbnRlZ3JhdGlvbnMgZnJvbS5cbiAgICAgICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgSW50ZWdyYXRpb259IG9iamVjdHMgYXNzb3J0ZWQgYnkgaW50ZWdyYXRpb24gSUQuXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNnZXQtZ3VpbGQtaW50ZWdyYXRpb25zfVxuICAgICAgICovXG4gICAgICBnZXQ6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEludGVncmF0aW9uW10+PlxuICAgICAgLyoqXG4gICAgICAgKiBEZWxldGVzIGFuIGludGVncmF0aW9uIGF0dGFjaGVkIHRvIGEgZ3VpbGQuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIGZyb20gd2hpY2ggdG8gZGVsZXRlIHRoZSBpbnRlZ3JhdGlvbi5cbiAgICAgICAqIEBwYXJhbSBpbnRlZ3JhdGlvbklkIC0gVGhlIElEIG9mIHRoZSBpbnRlZ3JhdGlvbiB0byBkZWxldGUgZnJvbSB0aGUgZ3VpbGQuXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgICAgICpcbiAgICAgICAqIERlbGV0ZXMgYWxsIHdlYmhvb2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW50ZWdyYXRpb24sIGFuZCBraWNrcyB0aGUgYXNzb2NpYXRlZCBib3QgaWYgdGhlcmUgaXMgb25lLlxuICAgICAgICpcbiAgICAgICAqIEZpcmVzIGEgX0d1aWxkIEludGVncmF0aW9ucyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICAgKiBGaXJlcyBhIF9JbnRlZ3JhdGlvbiBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2RlbGV0ZS1ndWlsZC1pbnRlZ3JhdGlvbn1cbiAgICAgICAqL1xuICAgICAgZGVsZXRlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBpbnRlZ3JhdGlvbklkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgICB9XG4gICAgLyoqIE1ldGhvZHMgcmVsYXRlZCB0byBhIGd1aWxkJ3MgaW52aXRlcy4gKi9cbiAgICBpbnZpdGVzOiB7XG4gICAgICAvKipcbiAgICAgICAqIENyZWF0ZXMgYW4gaW52aXRlIHRvIGEgY2hhbm5lbCBpbiBhIGd1aWxkLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gY3JlYXRlIHRoZSBpbnZpdGUgdG8uXG4gICAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIGludml0ZS5cbiAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkSW52aXRlfS5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogUmVxdWlyZXMgdGhlIGBDUkVBVEVfSU5TVEFOVF9JTlZJVEVgIHBlcm1pc3Npb24uXG4gICAgICAgKlxuICAgICAgICogRmlyZXMgYW4gX0ludml0ZSBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICAgKlxuICAgICAgICogQHByaXZhdGVSZW1hcmtzXG4gICAgICAgKiBUaGUgcmVxdWVzdCBib2R5IGlzIG5vdCBvcHRpb25hbCwgYW5kIGFuIGVtcHR5IEpTT04gb2JqZWN0IG11c3QgYmUgc2VudCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYW55IGZpZWxkcyBhcmUgYmVpbmcgdHJhbnNtaXR0ZWQuXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjY3JlYXRlLWNoYW5uZWwtaW52aXRlfVxuICAgICAgICovXG4gICAgICBjcmVhdGU6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IENyZWF0ZUNoYW5uZWxJbnZpdGUpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEludml0ZT4+XG4gICAgICAvKipcbiAgICAgICAqIERlbGV0ZXMgYW4gaW52aXRlIHRvIGEgY2hhbm5lbC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gaW52aXRlQ29kZSAtIFRoZSBpbnZpdGUgY29kZSBvZiB0aGUgaW52aXRlIHRvIGRlbGV0ZS5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfQ0hBTk5FTFNgIHBlcm1pc3Npb24uXG4gICAgICAgKlxuICAgICAgICogRmlyZXMgYW4gX0ludml0ZSBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZGVsZXRlLWNoYW5uZWwtaW52aXRlfVxuICAgICAgICovXG4gICAgICBkZWxldGU6IChpbnZpdGVDb2RlOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAgICAgLyoqXG4gICAgICAgKiBHZXRzIGFuIGludml0ZSB0byBhIGNoYW5uZWwgYnkgaXRzIGludml0ZSBjb2RlLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBpbnZpdGVDb2RlIC0gVGhlIGludml0ZSBjb2RlIG9mIHRoZSBpbnZpdGUgdG8gZ2V0LlxuICAgICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSBpbnZpdGUuXG4gICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEludml0ZU1ldGFkYXRhfS5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvaW52aXRlI2dldC1pbnZpdGV9XG4gICAgICAgKi9cbiAgICAgIGdldDogKGludml0ZUNvZGU6IHN0cmluZywgb3B0aW9ucz86IEdldEludml0ZSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkSW52aXRlTWV0YWRhdGE+PlxuICAgICAgLyoqXG4gICAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIGludml0ZXMgZm9yIGEgZ3VpbGQuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgaW52aXRlcyBmcm9tLlxuICAgICAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkSW52aXRlTWV0YWRhdGF9IG9iamVjdHMgYXNzb3J0ZWQgYnkgaW52aXRlIGNvZGUuXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9pbnZpdGUjZ2V0LWludml0ZXN9XG4gICAgICAgKi9cbiAgICAgIGxpc3Q6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEludml0ZU1ldGFkYXRhW10+PlxuICAgIH1cbiAgICAvKiogTWV0aG9kcyByZWxhdGVkIHRvIGEgZ3VpbGQncyB0ZW1wbGF0ZXMuICovXG4gICAgdGVtcGxhdGVzOiB7XG4gICAgICAvKipcbiAgICAgICAqIENyZWF0ZXMgYSB0ZW1wbGF0ZSBmcm9tIGEgZ3VpbGQuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGNyZWF0ZSB0aGUgdGVtcGxhdGUgZnJvbS5cbiAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgdGVtcGxhdGUuXG4gICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgVGVtcGxhdGV9LlxuICAgICAgICpcbiAgICAgICAqIEByZW1hcmtzXG4gICAgICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICAgICAqXG4gICAgICAgKiBGaXJlcyBhIF9HdWlsZCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkLXRlbXBsYXRlI2NyZWF0ZS1ndWlsZC10ZW1wbGF0ZX1cbiAgICAgICAqL1xuICAgICAgY3JlYXRlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVUZW1wbGF0ZSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGVtcGxhdGU+PlxuICAgICAgLyoqXG4gICAgICAgKiBEZWxldGVzIGEgdGVtcGxhdGUgZnJvbSBhIGd1aWxkLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBkZWxldGUgdGhlIHRlbXBsYXRlIGZyb20uXG4gICAgICAgKiBAcGFyYW0gdGVtcGxhdGVDb2RlIC0gVGhlIGNvZGUgb2YgdGhlIHRlbXBsYXRlIHRvIGRlbGV0ZS5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAgICAgKlxuICAgICAgICogRmlyZXMgYSBfR3VpbGQgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC10ZW1wbGF0ZSNkZWxldGUtZ3VpbGQtdGVtcGxhdGV9XG4gICAgICAgKi9cbiAgICAgIGRlbGV0ZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdGVtcGxhdGVDb2RlOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgICAgIC8qKlxuICAgICAgICogRWRpdHMgYSB0ZW1wbGF0ZSdzIHNldHRpbmdzLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBlZGl0IGEgdGVtcGxhdGUgb2YuXG4gICAgICAgKiBAcGFyYW0gdGVtcGxhdGVDb2RlIC0gVGhlIGNvZGUgb2YgdGhlIHRlbXBsYXRlIHRvIGVkaXQuXG4gICAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgdGVtcGxhdGUuXG4gICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBUZW1wbGF0ZX0uXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgICAgICpcbiAgICAgICAqIEZpcmVzIGEgX0d1aWxkIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQtdGVtcGxhdGUjbW9kaWZ5LWd1aWxkLXRlbXBsYXRlfVxuICAgICAgICovXG4gICAgICBlZGl0OiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB0ZW1wbGF0ZUNvZGU6IHN0cmluZywgb3B0aW9uczogTW9kaWZ5R3VpbGRUZW1wbGF0ZSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGVtcGxhdGU+PlxuICAgICAgLyoqXG4gICAgICAgKiBHZXRzIGEgdGVtcGxhdGUgYnkgaXRzIGNvZGUuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHRlbXBsYXRlQ29kZSAtIFRoZSBjb2RlIG9mIHRoZSB0ZW1wbGF0ZSB0byBnZXQuXG4gICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgVGVtcGxhdGV9LlxuICAgICAgICpcbiAgICAgICAqIEByZW1hcmtzXG4gICAgICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQtdGVtcGxhdGUjZ2V0LWd1aWxkLXRlbXBsYXRlfVxuICAgICAgICovXG4gICAgICBnZXQ6ICh0ZW1wbGF0ZUNvZGU6IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGVtcGxhdGU+PlxuICAgICAgLyoqXG4gICAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIHRlbXBsYXRlcyBmb3IgYSBndWlsZC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBsaXN0IG9mIHRlbXBsYXRlcyBmb3IuXG4gICAgICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIFRlbXBsYXRlfSBvYmplY3RzIGFzc29ydGVkIGJ5IHRlbXBsYXRlIGNvZGUuXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC10ZW1wbGF0ZSNnZXQtZ3VpbGQtdGVtcGxhdGVzfVxuICAgICAgICovXG4gICAgICBsaXN0OiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRUZW1wbGF0ZVtdPj5cbiAgICAgIC8qKlxuICAgICAgICogU3luY2hyb25pc2VzIGEgdGVtcGxhdGUgd2l0aCB0aGUgY3VycmVudCBzdGF0ZSBvZiBhIGd1aWxkLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBzeW5jaHJvbmlzZSBhIHRlbXBsYXRlIG9mLlxuICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgVGVtcGxhdGV9LlxuICAgICAgICpcbiAgICAgICAqIEByZW1hcmtzXG4gICAgICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICAgICAqXG4gICAgICAgKiBGaXJlcyBhIF9HdWlsZCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkLXRlbXBsYXRlI2dldC1ndWlsZC10ZW1wbGF0ZXN9XG4gICAgICAgKi9cbiAgICAgIHN5bmM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj5cbiAgICB9XG4gICAgLyogR3VpbGQgTWVtYmVycyByZWxhdGVkIGhlbHBlciBtZXRob2RzLiAqL1xuICAgIG1lbWJlcnM6IHtcbiAgICAgIC8qKlxuICAgICAgICogQmFucyBhIHVzZXIgZnJvbSBhIGd1aWxkLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBiYW4gdGhlIHVzZXIgZnJvbS5cbiAgICAgICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgSUQgb2YgdGhlIHVzZXIgdG8gYmFuIGZyb20gdGhlIGd1aWxkLlxuICAgICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBiYW4uXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoZSBgQkFOX01FTUJFUlNgIHBlcm1pc3Npb24uXG4gICAgICAgKlxuICAgICAgICogRmlyZXMgYSBfR3VpbGQgQmFuIEFkZF8gZ2F0ZXdheSBldmVudC5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjY3JlYXRlLWd1aWxkLWJhbn1cbiAgICAgICAqL1xuICAgICAgYmFuOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IENyZWF0ZUd1aWxkQmFuKSA9PiBQcm9taXNlPHZvaWQ+XG4gICAgICAvKipcbiAgICAgICAqIEVkaXRzIHRoZSBuaWNrbmFtZSBvZiB0aGUgYm90IHVzZXIuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQgdGhlIG5pY2tuYW1lIG9mIHRoZSBib3QgdXNlciBpbi5cbiAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBuaWNrbmFtZS5cbiAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRNZW1iZXJ9XG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIEZpcmVzIGEgX0d1aWxkIE1lbWJlciBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI21vZGlmeS1jdXJyZW50LW1lbWJlcn1cbiAgICAgICAqL1xuICAgICAgZWRpdFNlbGY6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEVkaXRCb3RNZW1iZXJPcHRpb25zKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZW1iZXI+PlxuICAgICAgLyoqXG4gICAgICAgKiBFZGl0cyBhIG1lbWJlcidzIHByb3BlcnRpZXMuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQgdGhlIG1lbWJlciBvZi5cbiAgICAgICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgdXNlciBJRCBvZiB0aGUgbWVtYmVyIHRvIGVkaXQuXG4gICAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgdXNlci5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogVGhpcyBlbmRwb2ludCByZXF1aXJlcyB2YXJpb3VzIHBlcm1pc3Npb25zIGRlcGVuZGluZyBvbiB3aGF0IGlzIGVkaXRlZCBhYm91dCB0aGUgbWVtYmVyLlxuICAgICAgICogVG8gZmluZCBvdXQgdGhlIHJlcXVpcmVkIHBlcm1pc3Npb24gdG8gZW5hY3QgYSBjaGFuZ2UsIHJlYWQgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhpcyBlbmRwb2ludCdzIHtAbGluayBNb2RpZnlHdWlsZE1lbWJlciB8IHBhcmFtZXRlcnN9LlxuICAgICAgICpcbiAgICAgICAqIEZpcmVzIGEgX0d1aWxkIE1lbWJlciBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI21vZGlmeS1ndWlsZC1tZW1iZXJ9XG4gICAgICAgKi9cbiAgICAgIGVkaXQ6IChndWlsZElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBNb2RpZnlHdWlsZE1lbWJlcikgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyPj5cbiAgICAgIC8qKlxuICAgICAgICogR2V0cyBvciBjcmVhdGVzIGEgRE0gY2hhbm5lbCB3aXRoIGEgdXNlci5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIElEIG9mIHRoZSB1c2VyIHRvIGNyZWF0ZSB0aGUgRE0gY2hhbm5lbCB3aXRoLlxuICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIENoYW5uZWx9LlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy91c2VyI2NyZWF0ZS1kbX1cbiAgICAgICAqL1xuICAgICAgZG06ICh1c2VySWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQ2hhbm5lbD4+XG4gICAgICAvKipcbiAgICAgICAqIEdldHMgdGhlIG1lbWJlciBvYmplY3QgYnkgdXNlciBJRC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBtZW1iZXIgb2JqZWN0IGZvci5cbiAgICAgICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgSUQgb2YgdGhlIHVzZXIgdG8gZ2V0IHRoZSBtZW1iZXIgb2JqZWN0IGZvci5cbiAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkTWVtYmVyV2l0aFVzZXJ9LlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNnZXQtZ3VpbGQtbWVtYmVyfVxuICAgICAgICovXG4gICAgICBnZXQ6IChndWlsZElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZW1iZXJXaXRoVXNlcj4+XG4gICAgICAvKipcbiAgICAgICAqIEdldHMgdGhlIGxpc3Qgb2YgbWVtYmVycyBmb3IgYSBndWlsZC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBsaXN0IG9mIG1lbWJlcnMgZm9yLlxuICAgICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSBtZW1iZXJzLlxuICAgICAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkTWVtYmVyV2l0aFVzZXJ9IG9iamVjdHMgYXNzb3J0ZWQgYnkgdXNlciBJRC5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogUmVxdWlyZXMgdGhlIGBHVUlMRF9NRU1CRVJTYCBpbnRlbnQuXG4gICAgICAgKlxuICAgICAgICog4pqg77iPIEl0IGlzIG5vdCByZWNvbW1lbmRlZCB0byB1c2UgdGhpcyBlbmRwb2ludCB3aXRoIHZlcnkgbGFyZ2UgYm90cy4gSW5zdGVhZCwgb3B0IHRvIHVzZSBgZmV0Y2hNZW1iZXJzKClgOlxuICAgICAgICogUkVTVCBjb21tdW5pY2F0aW9uIG9ubHkgcGVybWl0cyA1MCByZXF1ZXN0cyB0byBiZSBtYWRlIHBlciBzZWNvbmQsIHdoaWxlIGdhdGV3YXlzIGFsbG93IGZvciB1cCB0byAxMjAgcmVxdWVzdHNcbiAgICAgICAqIHBlciBtaW51dGUgcGVyIHNoYXJkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVhZCB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL3JhdGUtbGltaXRzI3JhdGUtbGltaXRzfS5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjbGlzdC1ndWlsZC1tZW1iZXJzfVxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjcmVxdWVzdC1ndWlsZC1tZW1iZXJzfVxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL3JhdGUtbGltaXRzI3JhdGUtbGltaXRzfVxuICAgICAgICovXG4gICAgICBsaXN0OiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBMaXN0R3VpbGRNZW1iZXJzKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPj5cbiAgICAgIC8qKlxuICAgICAgICogS2lja3MgYSBtZW1iZXIgZnJvbSBhIGd1aWxkLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBraWNrIHRoZSBtZW1iZXIgZnJvbS5cbiAgICAgICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgdXNlciBJRCBvZiB0aGUgbWVtYmVyIHRvIGtpY2sgZnJvbSB0aGUgZ3VpbGQuXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoZSBgS0lDS19NRU1CRVJTYCBwZXJtaXNzaW9uLlxuICAgICAgICpcbiAgICAgICAqIEZpcmVzIGEgX0d1aWxkIE1lbWJlciBSZW1vdmVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI3JlbW92ZS1ndWlsZC1tZW1iZXJ9XG4gICAgICAgKi9cbiAgICAgIGtpY2s6IChndWlsZElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgICAgIC8qKlxuICAgICAgICogSW5pdGlhdGVzIHRoZSBwcm9jZXNzIG9mIHBydW5pbmcgaW5hY3RpdmUgbWVtYmVycy5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gcHJ1bmUgdGhlIG1lbWJlcnMgb2YuXG4gICAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgcHJ1bmluZyBvZiBtZW1iZXJzLlxuICAgICAgICogQHJldHVybnMgQSBudW1iZXIgaW5kaWNhdGluZyBob3cgbWFueSBtZW1iZXJzIHdlcmUgcHJ1bmVkLlxuICAgICAgICpcbiAgICAgICAqIEByZW1hcmtzXG4gICAgICAgKiBSZXF1aXJlcyB0aGUgYEtJQ0tfTUVNQkVSU2AgcGVybWlzc2lvbi5cbiAgICAgICAqXG4gICAgICAgKiDinZcgUmVxdWVzdHMgdG8gdGhpcyBlbmRwb2ludCB3aWxsIHRpbWUgb3V0IGZvciBsYXJnZSBndWlsZHMuIFRvIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZywgc2V0IHRoZSB7QGxpbmsgQmVnaW5HdWlsZFBydW5lLmNvbXB1dGVQcnVuZUNvdW50fSBwcm9wZXJ0eSBvZiB0aGUge0BsaW5rIG9wdGlvbnN9IG9iamVjdCBwYXJhbWV0ZXIgdG8gYGZhbHNlYC4gVGhpcyB3aWxsIGJlZ2luIHRoZSBwcm9jZXNzIG9mIHBydW5pbmcsIGFuZCBpbW1lZGlhdGVseSByZXR1cm4gYHVuZGVmaW5lZGAsIHJhdGhlciB0aGFuIHdhaXQgZm9yIHRoZSBwcm9jZXNzIHRvIGNvbXBsZXRlIGJlZm9yZSByZXR1cm5pbmcgdGhlIGFjdHVhbCBjb3VudCBvZiBtZW1iZXJzIHRoYXQgaGF2ZSBiZWVuIGtpY2tlZC5cbiAgICAgICAqXG4gICAgICAgKiDimqDvuI8gQnkgZGVmYXVsdCwgdGhpcyBwcm9jZXNzIHdpbGwgbm90IHJlbW92ZSBtZW1iZXJzIHdpdGggYSByb2xlLiBUbyBpbmNsdWRlIHRoZSBtZW1iZXJzIHdobyBoYXZlIGEgX3BhcnRpY3VsYXIgc3Vic2V0IG9mIHJvbGVzXywgc3BlY2lmeSB0aGUgcm9sZShzKSBpbiB0aGUge0BsaW5rIEJlZ2luR3VpbGRQcnVuZS5pbmNsdWRlUm9sZXMgfCBpbmNsdWRlUm9sZXN9IHByb3BlcnR5IG9mIHRoZSB7QGxpbmsgb3B0aW9uc30gb2JqZWN0IHBhcmFtZXRlci5cbiAgICAgICAqXG4gICAgICAgKiBGaXJlcyBhIF9HdWlsZCBNZW1iZXIgUmVtb3ZlXyBnYXRld2F5IGV2ZW50IGZvciBldmVyeSBtZW1iZXIga2lja2VkLlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNiZWdpbi1ndWlsZC1wcnVuZX1cbiAgICAgICAqL1xuICAgICAgcHJ1bmU6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEJlZ2luR3VpbGRQcnVuZSkgPT4gUHJvbWlzZTx7IHBydW5lZDogbnVtYmVyIHwgbnVsbCB9PlxuICAgICAgLyoqXG4gICAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIG1lbWJlcnMgd2hvc2UgdXNlcm5hbWVzIG9yIG5pY2tuYW1lcyBzdGFydCB3aXRoIGEgcHJvdmlkZWQgc3RyaW5nLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBzZWFyY2ggaW4uXG4gICAgICAgKiBAcGFyYW0gcXVlcnkgLSBUaGUgc3RyaW5nIHRvIG1hdGNoIHVzZXJuYW1lcyBvciBuaWNrbmFtZXMgYWdhaW5zdC5cbiAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHNlYXJjaGluZyB0aHJvdWdoIHRoZSBtZW1iZXJzLlxuICAgICAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkTWVtYmVyfSBvYmplY3RzIGFzc29ydGVkIGJ5IHVzZXIgSUQuXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI3NlYXJjaC1ndWlsZC1tZW1iZXJzfVxuICAgICAgICovXG4gICAgICBzZWFyY2g6IChndWlsZElkOiBCaWdTdHJpbmcsIHF1ZXJ5OiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PFNlYXJjaE1lbWJlcnMsICdxdWVyeSc+KSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPj5cbiAgICAgIC8qKlxuICAgICAgICogVW5iYW5zIGEgdXNlciBmcm9tIGEgZ3VpbGQuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIHVuYmFuIHRoZSB1c2VyIGluLlxuICAgICAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSBJRCBvZiB0aGUgdXNlciB0byB1bmJhbi5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogUmVxdWlyZXMgdGhlIGBCQU5fTUVNQkVSU2AgcGVybWlzc2lvbi5cbiAgICAgICAqXG4gICAgICAgKiBGaXJlcyBhIF9HdWlsZCBCYW4gUmVtb3ZlXyBnYXRld2F5IGV2ZW50LlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNyZW1vdmUtZ3VpbGQtYmFufVxuICAgICAgICovXG4gICAgICB1bmJhbjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgICB9XG4gICAgLyoqIEludGVyYWN0aW9uIHJlbGF0ZWQgaGVscGVyIG1ldGhvZHMuICovXG4gICAgaW50ZXJhY3Rpb25zOiB7XG4gICAgICAvKiogQ29tbWFuZCByZWxhdGVkIGhlbHBlciBtZXRob2RzLiAqL1xuICAgICAgY29tbWFuZHM6IHtcbiAgICAgICAgLyoqIE1ldGhvZHMgZm9yIGNyZWF0aW5nIGEgY29tbWFuZC4gKi9cbiAgICAgICAgY3JlYXRlOiB7XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogQ3JlYXRlcyBhbiBhcHBsaWNhdGlvbiBjb21tYW5kIGFjY2Vzc2libGUgZ2xvYmFsbHk7IGFjcm9zcyBkaWZmZXJlbnQgZ3VpbGRzIGFuZCBjaGFubmVscy5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgdG8gY3JlYXRlLlxuICAgICAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBBcHBsaWNhdGlvbkNvbW1hbmR9LlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHJlbWFya3NcbiAgICAgICAgICAgKiDimqDvuI8gQ3JlYXRpbmcgYSBjb21tYW5kIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhbiBleGlzdGluZyBjb21tYW5kIGZvciB5b3VyIGFwcGxpY2F0aW9uIHdpbGwgb3ZlcndyaXRlIHRoZSBvbGQgY29tbWFuZC5cbiAgICAgICAgICAgKiDimqDvuI8gR2xvYmFsIGNvbW1hbmRzIG9uY2UgY3JlYXRlZCBhcmUgY2FjaGVkIGZvciBwZXJpb2RzIG9mIF9fYW4gaG91cl9fLCBzbyBjaGFuZ2VzIG1hZGUgdG8gZXhpc3RpbmcgY29tbWFuZHMgd2lsbCB0YWtlIGFuIGhvdXIgdG8gc3VyZmFjZS5cbiAgICAgICAgICAgKiDimqDvuI8gWW91IGNhbiBvbmx5IGNyZWF0ZSB1cCB0byAyMDAgX25ld18gY29tbWFuZHMgZGFpbHkuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjY3JlYXRlLWdsb2JhbC1hcHBsaWNhdGlvbi1jb21tYW5kfVxuICAgICAgICAgICAqL1xuICAgICAgICAgIGdsb2JhbDogKGNvbW1hbmQ6IENyZWF0ZUFwcGxpY2F0aW9uQ29tbWFuZCkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPj5cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBDcmVhdGVzIGFuIGFwcGxpY2F0aW9uIGNvbW1hbmQgb25seSBhY2Nlc3NpYmxlIGluIGEgc3BlY2lmaWMgZ3VpbGQuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBjb21tYW5kIHRvIGNyZWF0ZS5cbiAgICAgICAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gY3JlYXRlIHRoZSBjb21tYW5kIGZvci5cbiAgICAgICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgQXBwbGljYXRpb25Db21tYW5kfS5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEByZW1hcmtzXG4gICAgICAgICAgICog4pqg77iPIENyZWF0aW5nIGEgY29tbWFuZCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3RpbmcgY29tbWFuZCBmb3IgeW91ciBhcHBsaWNhdGlvbiB3aWxsIG92ZXJ3cml0ZSB0aGUgb2xkIGNvbW1hbmQuXG4gICAgICAgICAgICog4pqg77iPIFlvdSBjYW4gb25seSBjcmVhdGUgdXAgdG8gMjAwIF9uZXdfIGNvbW1hbmRzIGRhaWx5LlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2NyZWF0ZS1ndWlsZC1hcHBsaWNhdGlvbi1jb21tYW5kfVxuICAgICAgICAgICAqL1xuICAgICAgICAgIGd1aWxkOiAoY29tbWFuZDogQ3JlYXRlQXBwbGljYXRpb25Db21tYW5kLCBndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4+XG4gICAgICAgIH1cbiAgICAgICAgLyoqIE1ldGhvZHMgZm9yIGRlbGV0aW5nIGEgY29tbWFuZC4gKi9cbiAgICAgICAgZGVsZXRlOiB7XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogRGVsZXRlcyBhbiBhcHBsaWNhdGlvbiBjb21tYW5kIHJlZ2lzdGVyZWQgZ2xvYmFsbHkuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAcGFyYW0gY29tbWFuZElkIC0gVGhlIElEIG9mIHRoZSBjb21tYW5kIHRvIGRlbGV0ZS5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNkZWxldGUtZ2xvYmFsLWFwcGxpY2F0aW9uLWNvbW1hbmR9XG4gICAgICAgICAgICovXG4gICAgICAgICAgZ2xvYmFsOiAoY29tbWFuZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBEZWxldGVzIGFuIGFwcGxpY2F0aW9uIGNvbW1hbmQgcmVnaXN0ZXJlZCBpbiBhIGd1aWxkLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGRlbGV0ZSB0aGUgY29tbWFuZCBmcm9tLlxuICAgICAgICAgICAqIEBwYXJhbSBjb21tYW5kSWQgLSBUaGUgSUQgb2YgdGhlIGNvbW1hbmQgdG8gZGVsZXRlIGZyb20gdGhlIGd1aWxkLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2RlbGV0ZS1ndWlsZC1hcHBsaWNhdGlvbi1jb21tYW5kfVxuICAgICAgICAgICAqL1xuICAgICAgICAgIGd1aWxkOiAoY29tbWFuZElkOiBCaWdTdHJpbmcsIGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAgICAgICB9XG4gICAgICAgIC8qKiBNZXRob2RzIGZvciBlZGl0aW5nIGEgY29tbWFuZC4gKi9cbiAgICAgICAgZWRpdDoge1xuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIEVkaXRzIGEgZ2xvYmFsIGFwcGxpY2F0aW9uIGNvbW1hbmQuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAcGFyYW0gY29tbWFuZElkIC0gVGhlIElEIG9mIHRoZSBjb21tYW5kIHRvIGVkaXQuXG4gICAgICAgICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIGNvbW1hbmQuXG4gICAgICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgQXBwbGljYXRpb25Db21tYW5kfS5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNlZGl0LWdsb2JhbC1hcHBsaWNhdGlvbi1jb21tYW5kfVxuICAgICAgICAgICAqL1xuICAgICAgICAgIGdsb2JhbDogKGNvbW1hbmRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVBcHBsaWNhdGlvbkNvbW1hbmQpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4+XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogRWRpdHMgYW4gYXBwbGljYXRpb24gY29tbWFuZCByZWdpc3RlcmVkIGluIGEgZ3VpbGQuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdGhlIGNvbW1hbmQgaXMgcmVnaXN0ZXJlZCBpbi5cbiAgICAgICAgICAgKiBAcGFyYW0gY29tbWFuZElkIC0gVGhlIElEIG9mIHRoZSBjb21tYW5kIHRvIGVkaXQuXG4gICAgICAgICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIGNvbW1hbmQuXG4gICAgICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgQXBwbGljYXRpb25Db21tYW5kfS5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNlZGl0LWd1aWxkLWFwcGxpY2F0aW9uLWNvbW1hbmR9XG4gICAgICAgICAgICovXG4gICAgICAgICAgZ3VpbGQ6IChjb21tYW5kSWQ6IEJpZ1N0cmluZywgZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVBcHBsaWNhdGlvbkNvbW1hbmQpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4+XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogRWRpdHMgdGhlIHBlcm1pc3Npb25zIGZvciBhIGd1aWxkIGFwcGxpY2F0aW9uIGNvbW1hbmQuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdGhlIGNvbW1hbmQgaXMgcmVnaXN0ZXJlZCBpbi5cbiAgICAgICAgICAgKiBAcGFyYW0gY29tbWFuZElkIC0gVGhlIElEIG9mIHRoZSBjb21tYW5kIHRvIGVkaXQgdGhlIHBlcm1pc3Npb25zIG9mLlxuICAgICAgICAgICAqIEBwYXJhbSBiZWFyZXJUb2tlbiAtIFRoZSBiZWFyZXIgdG9rZW4gdG8gdXNlIHRvIG1ha2UgdGhlIHJlcXVlc3QuXG4gICAgICAgICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIGNvbW1hbmQgcGVybWlzc2lvbnMuXG4gICAgICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbn0uXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAcmVtYXJrc1xuICAgICAgICAgICAqIFRoZSBiZWFyZXIgdG9rZW4gcmVxdWlyZXMgdGhlIGBhcHBsaWNhdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbnMudXBkYXRlYCBzY29wZSB0byBiZSBlbmFibGVkLCBhbmQgdG8gaGF2ZSBhY2Nlc3MgdG8gdGhlIGd1aWxkIHdob3NlIElEIGhhcyBiZWVuIHByb3ZpZGVkIGluIHRoZSBwYXJhbWV0ZXJzLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2VkaXQtYXBwbGljYXRpb24tY29tbWFuZC1wZXJtaXNzaW9uc31cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBwZXJtaXNzaW9uczogKFxuICAgICAgICAgICAgZ3VpbGRJZDogQmlnU3RyaW5nLFxuICAgICAgICAgICAgY29tbWFuZElkOiBCaWdTdHJpbmcsXG4gICAgICAgICAgICBiZWFyZXJUb2tlbjogc3RyaW5nLFxuICAgICAgICAgICAgb3B0aW9uczogQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnNbXSxcbiAgICAgICAgICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPj5cbiAgICAgICAgfVxuICAgICAgICAvKiogTWV0aG9kcyBmb3IgZ2V0dGluZyBhIGNvbW1hbmQuICovXG4gICAgICAgIGdldDoge1xuICAgICAgICAgIGdsb2JhbDoge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBHZXRzIGEgZ2xvYmFsIGFwcGxpY2F0aW9uIGNvbW1hbmQgYnkgaXRzIElELlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEBwYXJhbSBjb21tYW5kSWQgLSBUaGUgSUQgb2YgdGhlIGNvbW1hbmQgdG8gZ2V0LlxuICAgICAgICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIEFwcGxpY2F0aW9uQ29tbWFuZH0uXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2dldC1nbG9iYWwtYXBwbGljYXRpb24tY29tbWFuZH1cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgb25lOiAoY29tbWFuZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4+XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEdldHMgdGhlIGxpc3Qgb2YgeW91ciBib3QncyBnbG9iYWwgYXBwbGljYXRpb24gY29tbWFuZHMuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBBcHBsaWNhdGlvbkNvbW1hbmR9IG9iamVjdHMgYXNzb3J0ZWQgYnkgY29tbWFuZCBJRC5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZ2V0LWdsb2JhbC1hcHBsaWNhdGlvbi1jb21tYW5kc31cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYWxsOiAoKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4+XG4gICAgICAgICAgfVxuICAgICAgICAgIGd1aWxkczoge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBHZXRzIGEgZ3VpbGQgYXBwbGljYXRpb24gY29tbWFuZCBieSBpdHMgSUQuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRoZSBjb21tYW5kIGlzIHJlZ2lzdGVyZWQgaW4uXG4gICAgICAgICAgICAgKiBAcGFyYW0gY29tbWFuZElkIC0gVGhlIElEIG9mIHRoZSBjb21tYW5kIHRvIGdldC5cbiAgICAgICAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBBcHBsaWNhdGlvbkNvbW1hbmR9LlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNnZXQtZ3VpbGQtYXBwbGljYXRpb24tY29tbWFuZH1cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgb25lOiAoY29tbWFuZElkOiBCaWdTdHJpbmcsIGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPj5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogR2V0cyB0aGUgbGlzdCBvZiBhcHBsaWNhdGlvbiBjb21tYW5kcyByZWdpc3RlcmVkIGJ5IHlvdXIgYm90IGluIGEgZ3VpbGQuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRoZSBjb21tYW5kcyBhcmUgcmVnaXN0ZXJlZCBpbi5cbiAgICAgICAgICAgICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgQXBwbGljYXRpb25Db21tYW5kfSBvYmplY3RzIGFzc29ydGVkIGJ5IGNvbW1hbmQgSUQuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2dldC1nbG9iYWwtYXBwbGljYXRpb24tY29tbWFuZHNzfVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBhbGw6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPj5cbiAgICAgICAgICB9XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogR2V0cyB0aGUgcGVybWlzc2lvbnMgb2YgYSBndWlsZCBhcHBsaWNhdGlvbiBjb21tYW5kLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRoZSBjb21tYW5kIGlzIHJlZ2lzdGVyZWQgaW4uXG4gICAgICAgICAgICogQHBhcmFtIGNvbW1hbmRJZCAtIFRoZSBJRCBvZiB0aGUgY29tbWFuZCB0byBnZXQgdGhlIHBlcm1pc3Npb25zIG9mLlxuICAgICAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ufS5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNnZXQtYXBwbGljYXRpb24tY29tbWFuZC1wZXJtaXNzaW9uc31cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBwZXJtaXNzaW9uOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBjb21tYW5kSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+PlxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIEdldHMgdGhlIHBlcm1pc3Npb25zIG9mIGFsbCBhcHBsaWNhdGlvbiBjb21tYW5kcyByZWdpc3RlcmVkIGluIGEgZ3VpbGQgYnkgdGhlIElEIG9mIHRoZSBndWlsZC5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHBlcm1pc3Npb25zIG9iamVjdHMgb2YuXG4gICAgICAgICAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ufSBvYmplY3RzIGFzc29ydGVkIGJ5IGNvbW1hbmQgSUQuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZ2V0LWd1aWxkLWFwcGxpY2F0aW9uLWNvbW1hbmQtcGVybWlzc2lvbnN9XG4gICAgICAgICAgICovXG4gICAgICAgICAgcGVybWlzc2lvbnM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zW10+PlxuICAgICAgICB9XG4gICAgICAgIC8qKiBNZXRob2RzIGZvciByZXBsYWNpbmcgZXhpc3RpbmcgY29tbWFuZHMgaW4gYnVsay4gKi9cbiAgICAgICAgcmVwbGFjZToge1xuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIFJlLXJlZ2lzdGVycyB0aGUgbGlzdCBvZiBnbG9iYWwgYXBwbGljYXRpb24gY29tbWFuZHMsIG92ZXJ3cml0aW5nIHRoZSBwcmV2aW91cyBjb21tYW5kcyBjb21wbGV0ZWx5LlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHBhcmFtIGNvbW1hbmRzIC0gVGhlIGxpc3Qgb2YgY29tbWFuZHMgdG8gdXNlIHRvIG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgbGlzdC5cbiAgICAgICAgICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIEFwcGxpY2F0aW9uQ29tbWFuZH0gb2JqZWN0cyBhc3NvcnRlZCBieSBjb21tYW5kIElELlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHJlbWFya3NcbiAgICAgICAgICAgKiDinZcgQ29tbWFuZHMgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIGBjb21tYW5kc2AgYXJyYXkgd2lsbCBiZSBfX2RlbGV0ZWRfXy5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIOKaoO+4jyBDb21tYW5kcyB0aGF0IGRvIG5vdCBhbHJlYWR5IGV4aXN0IHdpbGwgY291bnQgdG93YXJkcyB0aGUgZGFpbHkgbGltaXQgb2YgXzIwMF8gbmV3IGNvbW1hbmRzLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2J1bGstb3ZlcndyaXRlLWdsb2JhbC1hcHBsaWNhdGlvbi1jb21tYW5kc31cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBnbG9iYWw6IChjb21tYW5kczogQ3JlYXRlQXBwbGljYXRpb25Db21tYW5kW10pID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPj5cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBSZS1yZWdpc3RlcnMgdGhlIGxpc3Qgb2YgYXBwbGljYXRpb24gY29tbWFuZHMgcmVnaXN0ZXJlZCBpbiBhIGd1aWxkLCBvdmVyd3JpdGluZyB0aGUgcHJldmlvdXMgY29tbWFuZHMgY29tcGxldGVseS5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB3aG9zZSBsaXN0IG9mIGNvbW1hbmRzIHRvIG92ZXJ3cml0ZS5cbiAgICAgICAgICAgKiBAcGFyYW0gY29tbWFuZHMgLSBUaGUgbGlzdCBvZiBjb21tYW5kcyB0byB1c2UgdG8gb3ZlcndyaXRlIHRoZSBwcmV2aW91cyBsaXN0LlxuICAgICAgICAgICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgQXBwbGljYXRpb25Db21tYW5kfSBvYmplY3RzIGFzc29ydGVkIGJ5IGNvbW1hbmQgSUQuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAcmVtYXJrc1xuICAgICAgICAgICAqIOKdlyBDb21tYW5kcyB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgYGNvbW1hbmRzYCBhcnJheSB3aWxsIGJlIF9fZGVsZXRlZF9fLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICog4pqg77iPIENvbW1hbmRzIHRoYXQgZG8gbm90IGFscmVhZHkgZXhpc3Qgd2lsbCBjb3VudCB0b3dhcmRzIHRoZSBkYWlseSBsaW1pdCBvZiBfMjAwXyBuZXcgY29tbWFuZHMuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjYnVsay1vdmVyd3JpdGUtZ3VpbGQtYXBwbGljYXRpb24tY29tbWFuZHN9XG4gICAgICAgICAgICovXG4gICAgICAgICAgZ3VpbGQ6IChndWlsZElkOiBCaWdTdHJpbmcsIGNvbW1hbmRzOiBDcmVhdGVBcHBsaWNhdGlvbkNvbW1hbmRbXSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+PlxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvKiogUmVzcG9uc2UgcmVsYXRlZCBoZWxwZXIgbWV0aG9kcy4gKi9cbiAgICAgIHJlc3BvbnNlczoge1xuICAgICAgICAvKiogSGVscGVyIG1ldGhvZHMgcmVsYXRlZCB0byBjcmVhdGluZyBhIHJlc3BvbnNlLiAqL1xuICAgICAgICBjcmVhdGU6IHtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBTZW5kcyBhIGZvbGxvdy11cCBtZXNzYWdlIHRvIGFuIGludGVyYWN0aW9uLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHBhcmFtIHRva2VuIC0gVGhlIGludGVyYWN0aW9uIHRva2VuIHRvIHVzZSwgcHJvdmlkZWQgaW4gdGhlIG9yaWdpbmFsIGludGVyYWN0aW9uLlxuICAgICAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgbWVzc2FnZS5cbiAgICAgICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgTWVzc2FnZX0uXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAcmVtYXJrc1xuICAgICAgICAgICAqIOKaoO+4jyBJbnRlcmFjdGlvbiB0b2tlbnMgYXJlIG9ubHkgdmFsaWQgZm9yIF8xNSBtaW51dGVzXy5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEJ5IGRlZmF1bHQsIG1lbnRpb25zIGFyZSBzdXBwcmVzc2VkLiBUbyBlbmFibGUgbWVudGlvbnMsIHBhc3MgYSBtZW50aW9uIG9iamVjdCB3aXRoIHRoZSBjYWxsYmFjayBkYXRhLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogVW5saWtlIGBzZW5kTWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0OlxuICAgICAgICAgICAqIC0gTmVlZGluZyB0byBiZSBhYmxlIHRvIHNlZSB0aGUgY29udGVudHMgb2YgdGhlIGNoYW5uZWwgdGhhdCB0aGUgbWVzc2FnZSBpcyBpbi4gKGBSRUFEX01FU1NBR0VTYCBwZXJtaXNzaW9uLilcbiAgICAgICAgICAgKiAtIFJlcXVpcmluZyB0aGUgYE1FU1NBR0VfQ09OVEVOVGAgaW50ZW50LlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogRmlyZXMgYSBfTWVzc2FnZSBDcmVhdGVfIGV2ZW50LlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL3JlY2VpdmluZy1hbmQtcmVzcG9uZGluZyNjcmVhdGUtZm9sbG93dXAtbWVzc2FnZX1cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBmb2xsb3d1cDogKHRva2VuOiBzdHJpbmcsIG9wdGlvbnM6IEludGVyYWN0aW9uQ2FsbGJhY2tEYXRhKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj5cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBTZW5kcyBhIHJlc3BvbnNlIHRvIGFuIGludGVyYWN0aW9uLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHBhcmFtIGludGVyYWN0aW9uSWQgLSBUaGUgSUQgb2YgdGhlIGludGVyYWN0aW9uIHRvIHJlc3BvbmQgdG8uXG4gICAgICAgICAgICogQHBhcmFtIHRva2VuIC0gVGhlIGludGVyYWN0aW9uIHRva2VuIHRvIHVzZSwgcHJvdmlkZWQgaW4gdGhlIG9yaWdpbmFsIGludGVyYWN0aW9uLlxuICAgICAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgbWVzc2FnZS5cbiAgICAgICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgTWVzc2FnZX0uXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAcmVtYXJrc1xuICAgICAgICAgICAqIOKaoO+4jyBJbnRlcmFjdGlvbiB0b2tlbnMgYXJlIG9ubHkgdmFsaWQgZm9yIF8xNSBtaW51dGVzXy5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEJ5IGRlZmF1bHQsIG1lbnRpb25zIGFyZSBzdXBwcmVzc2VkLiBUbyBlbmFibGUgbWVudGlvbnMsIHBhc3MgYSBtZW50aW9uIG9iamVjdCB3aXRoIHRoZSBjYWxsYmFjayBkYXRhLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogVW5saWtlIGBzZW5kTWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0OlxuICAgICAgICAgICAqIC0gTmVlZGluZyB0byBiZSBhYmxlIHRvIHNlZSB0aGUgY29udGVudHMgb2YgdGhlIGNoYW5uZWwgdGhhdCB0aGUgbWVzc2FnZSBpcyBpbi4gKGBSRUFEX01FU1NBR0VTYCBwZXJtaXNzaW9uLilcbiAgICAgICAgICAgKiAtIFJlcXVpcmluZyB0aGUgYE1FU1NBR0VfQ09OVEVOVGAgaW50ZW50LlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogRmlyZXMgYSBfTWVzc2FnZSBDcmVhdGVfIGV2ZW50LlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL3JlY2VpdmluZy1hbmQtcmVzcG9uZGluZyNjcmVhdGUtaW50ZXJhY3Rpb24tcmVzcG9uc2V9XG4gICAgICAgICAgICovXG4gICAgICAgICAgb3JpZ2luYWw6IChpbnRlcmFjdGlvbklkOiBCaWdTdHJpbmcsIHRva2VuOiBzdHJpbmcsIG9wdGlvbnM6IEludGVyYWN0aW9uUmVzcG9uc2UpID0+IFByb21pc2U8dm9pZD5cbiAgICAgICAgfVxuICAgICAgICAvKiogSGVscGVyIG1ldGhvZHMgcmVsYXRlZCB0byBkZWxldGluZyBhIHJlc3BvbnNlLiAqL1xuICAgICAgICBkZWxldGU6IHtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBEZWxldGVzIGEgZm9sbG93LXVwIG1lc3NhZ2UgdG8gYW4gaW50ZXJhY3Rpb24uXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgaW50ZXJhY3Rpb24gdG9rZW4gdG8gdXNlLCBwcm92aWRlZCBpbiB0aGUgb3JpZ2luYWwgaW50ZXJhY3Rpb24uXG4gICAgICAgICAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBkZWxldGUuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAcmVtYXJrc1xuICAgICAgICAgICAqIFVubGlrZSBgZGVsZXRlTWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0IG5lZWRpbmcgdG8gc2VlIHRoZSBjaGFubmVsIHRoZSBtZXNzYWdlIGlzIGluLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogRmlyZXMgYSBfTWVzc2FnZSBEZWxldGVfIGV2ZW50LlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL3JlY2VpdmluZy1hbmQtcmVzcG9uZGluZyNkZWxldGUtZm9sbG93dXAtbWVzc2FnZX1cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBmb2xsb3d1cDogKHRva2VuOiBzdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogRGVsZXRlcyB0aGUgaW5pdGlhbCBtZXNzYWdlIHJlc3BvbnNlIHRvIGFuIGludGVyYWN0aW9uLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHBhcmFtIHRva2VuIC0gVGhlIGludGVyYWN0aW9uIHRva2VuIHRvIHVzZSwgcHJvdmlkZWQgaW4gdGhlIG9yaWdpbmFsIGludGVyYWN0aW9uLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHJlbWFya3NcbiAgICAgICAgICAgKiBVbmxpa2UgYGRlbGV0ZU1lc3NhZ2UoKWAsIHRoaXMgZW5kcG9pbnQgYWxsb3dzIHRoZSBib3QgdXNlciB0byBhY3Qgd2l0aG91dCBuZWVkaW5nIHRvIHNlZSB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSBpcyBpbi5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEZpcmVzIGEgX01lc3NhZ2UgRGVsZXRlXyBldmVudC5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9yZWNlaXZpbmctYW5kLXJlc3BvbmRpbmcjZGVsZXRlLW9yaWdpbmFsLWludGVyYWN0aW9uLXJlc3BvbnNlfVxuICAgICAgICAgICAqL1xuICAgICAgICAgIG9yaWdpbmFsOiAodG9rZW46IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAgICAgICB9XG4gICAgICAgIC8qKiBIZWxwZXIgbWV0aG9kcyByZWxhdGVkIHRvIGVkaXRpbmcgYSByZXNwb25zZS4gKi9cbiAgICAgICAgZWRpdDoge1xuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIEVkaXRzIGEgZm9sbG93LXVwIG1lc3NhZ2UgdG8gYW4gaW50ZXJhY3Rpb24uXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgaW50ZXJhY3Rpb24gdG9rZW4gdG8gdXNlLCBwcm92aWRlZCBpbiB0aGUgb3JpZ2luYWwgaW50ZXJhY3Rpb24uXG4gICAgICAgICAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBlZGl0LlxuICAgICAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBtZXNzYWdlLlxuICAgICAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIE1lc3NhZ2V9LlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHJlbWFya3NcbiAgICAgICAgICAgKiBVbmxpa2UgYGVkaXRNZXNzYWdlKClgLCB0aGlzIGVuZHBvaW50IGFsbG93cyB0aGUgYm90IHVzZXIgdG8gYWN0IHdpdGhvdXQgbmVlZGluZyB0byBzZWUgdGhlIGNoYW5uZWwgdGhlIG1lc3NhZ2UgaXMgaW4uXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBEb2VzIG5vdCBzdXBwb3J0IGVwaGVtZXJhbCBmb2xsb3ctdXAgbWVzc2FnZXMgZHVlIHRvIHRoZXNlIGJlaW5nIHN0YXRlbGVzcy5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEZpcmVzIGEgX01lc3NhZ2UgVXBkYXRlXyBldmVudC5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9yZWNlaXZpbmctYW5kLXJlc3BvbmRpbmcjZWRpdC1mb2xsb3d1cC1tZXNzYWdlfVxuICAgICAgICAgICAqL1xuICAgICAgICAgIGZvbGxvd3VwOiAodG9rZW46IHN0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEludGVyYWN0aW9uQ2FsbGJhY2tEYXRhKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj5cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBFZGl0cyB0aGUgaW5pdGlhbCBtZXNzYWdlIHJlc3BvbnNlIHRvIGFuIGludGVyYWN0aW9uLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHBhcmFtIHRva2VuIC0gVGhlIGludGVyYWN0aW9uIHRva2VuIHRvIHVzZSwgcHJvdmlkZWQgaW4gdGhlIG9yaWdpbmFsIGludGVyYWN0aW9uLlxuICAgICAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSByZXNwb25zZS5cbiAgICAgICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBNZXNzYWdlfS5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEByZW1hcmtzXG4gICAgICAgICAgICogVW5saWtlIGBlZGl0TWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0IG5lZWRpbmcgdG8gc2VlIHRoZSBjaGFubmVsIHRoZSBtZXNzYWdlIGlzIGluLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogRG9lcyBub3Qgc3VwcG9ydCBlcGhlbWVyYWwgZm9sbG93LXVwIG1lc3NhZ2VzIGR1ZSB0byB0aGVzZSBiZWluZyBzdGF0ZWxlc3MuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBGaXJlcyBhIF9NZXNzYWdlIFVwZGF0ZV8gZXZlbnQuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvcmVjZWl2aW5nLWFuZC1yZXNwb25kaW5nI2VkaXQtb3JpZ2luYWwtaW50ZXJhY3Rpb24tcmVzcG9uc2V9XG4gICAgICAgICAgICovXG4gICAgICAgICAgb3JpZ2luYWw6ICh0b2tlbjogc3RyaW5nLCBvcHRpb25zOiBJbnRlcmFjdGlvbkNhbGxiYWNrRGF0YSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4gfCB1bmRlZmluZWQ+XG4gICAgICAgIH1cbiAgICAgICAgLyoqIEhlbHBlciBtZXRob2RzIHJlbGF0ZWQgdG8gZ2V0dGluZyBhIHJlc3BvbnNlLiAqL1xuICAgICAgICBnZXQ6IHtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBHZXRzIGEgZm9sbG93LXVwIG1lc3NhZ2UgdG8gYW4gaW50ZXJhY3Rpb24gYnkgdGhlIElEIG9mIHRoZSBtZXNzYWdlLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHBhcmFtIHRva2VuIC0gVGhlIGludGVyYWN0aW9uIHRva2VuIHRvIHVzZSwgcHJvdmlkZWQgaW4gdGhlIG9yaWdpbmFsIGludGVyYWN0aW9uLlxuICAgICAgICAgICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gZ2V0LlxuICAgICAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBNZXNzYWdlfS5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEByZW1hcmtzXG4gICAgICAgICAgICogVW5saWtlIGBnZXRNZXNzYWdlKClgLCB0aGlzIGVuZHBvaW50IGFsbG93cyB0aGUgYm90IHVzZXIgdG8gYWN0IHdpdGhvdXQ6XG4gICAgICAgICAgICogLSBOZWVkaW5nIHRvIGJlIGFibGUgdG8gc2VlIHRoZSBjb250ZW50cyBvZiB0aGUgY2hhbm5lbCB0aGF0IHRoZSBtZXNzYWdlIGlzIGluLiAoYFJFQURfTUVTU0FHRVNgIHBlcm1pc3Npb24uKVxuICAgICAgICAgICAqIC0gUmVxdWlyaW5nIHRoZSBgTUVTU0FHRV9DT05URU5UYCBpbnRlbnQuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBEb2VzIG5vdCBzdXBwb3J0IGVwaGVtZXJhbCBmb2xsb3ctdXAgbWVzc2FnZXMgZHVlIHRvIHRoZXNlIGJlaW5nIHN0YXRlbGVzcy5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9yZWNlaXZpbmctYW5kLXJlc3BvbmRpbmcjZ2V0LWZvbGxvd3VwLW1lc3NhZ2V9XG4gICAgICAgICAgICovXG4gICAgICAgICAgZm9sbG93dXA6ICh0b2tlbjogc3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogR2V0cyB0aGUgaW5pdGlhbCBtZXNzYWdlIHJlc3BvbnNlIHRvIGFuIGludGVyYWN0aW9uLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQHBhcmFtIHRva2VuIC0gVGhlIGludGVyYWN0aW9uIHRva2VuIHRvIHVzZSwgcHJvdmlkZWQgaW4gdGhlIG9yaWdpbmFsIGludGVyYWN0aW9uLlxuICAgICAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBNZXNzYWdlfS5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEByZW1hcmtzXG4gICAgICAgICAgICogVW5saWtlIGBnZXRNZXNzYWdlKClgLCB0aGlzIGVuZHBvaW50IGFsbG93cyB0aGUgYm90IHVzZXIgdG8gYWN0IHdpdGhvdXQ6XG4gICAgICAgICAgICogLSBOZWVkaW5nIHRvIGJlIGFibGUgdG8gc2VlIHRoZSBjb250ZW50cyBvZiB0aGUgY2hhbm5lbCB0aGF0IHRoZSBtZXNzYWdlIGlzIGluLiAoYFJFQURfTUVTU0FHRVNgIHBlcm1pc3Npb24uKVxuICAgICAgICAgICAqIC0gUmVxdWlyaW5nIHRoZSBgTUVTU0FHRV9DT05URU5UYCBpbnRlbnQuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBEb2VzIG5vdCBzdXBwb3J0IGVwaGVtZXJhbCBmb2xsb3ctdXAgbWVzc2FnZXMgZHVlIHRvIHRoZXNlIGJlaW5nIHN0YXRlbGVzcy5cbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9yZWNlaXZpbmctYW5kLXJlc3BvbmRpbmcjZ2V0LW9yaWdpbmFsLWludGVyYWN0aW9uLXJlc3BvbnNlfVxuICAgICAgICAgICAqL1xuICAgICAgICAgIG9yaWdpbmFsOiAodG9rZW46IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLyoqIFJvbGUgcmVsYXRlZCBoZWxwZXJzIG1ldGhvZHMuICovXG4gICAgcm9sZXM6IHtcbiAgICAgIC8qKlxuICAgICAgICogQWRkcyBhIHJvbGUgdG8gYSBtZW1iZXIuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRoZSBtZW1iZXIgdG8gYWRkIHRoZSByb2xlIHRvIGlzIGluLlxuICAgICAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSB1c2VyIElEIG9mIHRoZSBtZW1iZXIgdG8gYWRkIHRoZSByb2xlIHRvLlxuICAgICAgICogQHBhcmFtIHJvbGVJZCAtIFRoZSBJRCBvZiB0aGUgcm9sZSB0byBhZGQgdG8gdGhlIG1lbWJlci5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24uXG4gICAgICAgKlxuICAgICAgICogRmlyZXMgYSBfR3VpbGQgTWVtYmVyIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjYWRkLWd1aWxkLW1lbWJlci1yb2xlfVxuICAgICAgICovXG4gICAgICBhZGQ6IChndWlsZElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nLCByb2xlSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gICAgICAvKipcbiAgICAgICAqIENyZWF0ZXMgYSByb2xlIGluIGEgZ3VpbGQuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGNyZWF0ZSB0aGUgcm9sZSBpbi5cbiAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgcm9sZS5cbiAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkUm9sZX0uXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uLlxuICAgICAgICpcbiAgICAgICAqIEZpcmVzIGEgX0d1aWxkIFJvbGUgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNjcmVhdGUtZ3VpbGQtcm9sZX1cbiAgICAgICAqL1xuICAgICAgY3JlYXRlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVHdWlsZFJvbGUsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkUm9sZT4+XG4gICAgICAvKipcbiAgICAgICAqIERlbGV0ZXMgYSByb2xlIGZyb20gYSBndWlsZC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZGVsZXRlIHRoZSByb2xlIGZyb20uXG4gICAgICAgKiBAcGFyYW0gcm9sZUlkIC0gVGhlIElEIG9mIHRoZSByb2xlIHRvIGRlbGV0ZS5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24uXG4gICAgICAgKlxuICAgICAgICogRmlyZXMgYSBfR3VpbGQgUm9sZSBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2RlbGV0ZS1ndWlsZC1yb2xlfVxuICAgICAgICovXG4gICAgICBkZWxldGU6IChndWlsZElkOiBCaWdTdHJpbmcsIHJvbGVJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gICAgICAvKipcbiAgICAgICAqIEVkaXRzIGEgcm9sZSBpbiBhIGd1aWxkLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBlZGl0IHRoZSByb2xlIGluLlxuICAgICAgICogQHBhcmFtIHJvbGVJZCAtIFRoZSBJRCBvZiB0aGUgcm9sZSB0byBlZGl0LlxuICAgICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIHJvbGUuXG4gICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkUm9sZX0uXG4gICAgICAgKlxuICAgICAgICogQHJlbWFya3NcbiAgICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uLlxuICAgICAgICpcbiAgICAgICAqIEZpcmVzIGEgX0d1aWxkIFJvbGUgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNtb2RpZnktZ3VpbGQtcm9sZX1cbiAgICAgICAqL1xuICAgICAgZWRpdDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgcm9sZUlkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEVkaXRHdWlsZFJvbGUpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFJvbGU+PlxuICAgICAgLyoqXG4gICAgICAgKiBFZGl0cyB0aGUgcG9zaXRpb25zIG9mIGEgc2V0IG9mIHJvbGVzLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBlZGl0IHRoZSByb2xlIHBvc2l0aW9ucyBpbi5cbiAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSByb2xlIHBvc2l0aW9ucy5cbiAgICAgICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZFJvbGV9IG9iamVjdHMgYXNzb3J0ZWQgYnkgcm9sZSBJRC5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24uXG4gICAgICAgKlxuICAgICAgICogRmlyZXMgYSBfR3VpbGQgUm9sZSBVcGRhdGVfIGdhdGV3YXkgZXZlbnQgZm9yIGV2ZXJ5IHJvbGUgaW1wYWN0ZWQgaW4gdGhpcyBjaGFuZ2UuXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI21vZGlmeS1ndWlsZC1yb2xlLXBvc2l0aW9uc31cbiAgICAgICAqL1xuICAgICAgcG9zaXRpb25zOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBNb2RpZnlSb2xlUG9zaXRpb25zW10pID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFJvbGVbXT4+XG4gICAgICAvKipcbiAgICAgICAqIEdldHMgdGhlIGxpc3Qgb2Ygcm9sZXMgZm9yIGEgZ3VpbGQuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgbGlzdCBvZiByb2xlcyBmb3IuXG4gICAgICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc29yY1JvbGV9IG9iamVjdHMgYXNzb3J0ZWQgYnkgcm9sZSBJRC5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICog4pqg77iPIFRoaXMgZW5kcG9pbnQgc2hvdWxkIGJlIHVzZWQgc3BhcmluZ2x5IGR1ZSB0byB7QGxpbmsgVXNlcn0gb2JqZWN0cyBhbHJlYWR5IGJlaW5nIGluY2x1ZGVkIGluIGd1aWxkIHBheWxvYWRzLlxuICAgICAgICpcbiAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNnZXQtZ3VpbGQtcm9sZXN9XG4gICAgICAgKi9cbiAgICAgIGxpc3Q6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFJvbGVbXT4+XG4gICAgICAvKipcbiAgICAgICAqIFJlbW92ZXMgYSByb2xlIGZyb20gYSBtZW1iZXIuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRoZSBtZW1iZXIgdG8gcmVtb3ZlIHRoZSByb2xlIGZyb20gaXMgaW4uXG4gICAgICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIHVzZXIgSUQgb2YgdGhlIG1lbWJlciB0byByZW1vdmUgdGhlIHJvbGUgZnJvbS5cbiAgICAgICAqIEBwYXJhbSByb2xlSWQgLSBUaGUgSUQgb2YgdGhlIHJvbGUgdG8gcmVtb3ZlIGZyb20gdGhlIG1lbWJlci5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24uXG4gICAgICAgKlxuICAgICAgICogRmlyZXMgYSBfR3VpbGQgTWVtYmVyIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjcmVtb3ZlLWd1aWxkLW1lbWJlci1yb2xlfVxuICAgICAgICovXG4gICAgICByZW1vdmU6IChndWlsZElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nLCByb2xlSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gICAgfVxuICB9XG4gIC8qKiBXZWJob29rIHJlbGF0ZWQgaGVscGVyIG1ldGhvZHMuICovXG4gIHdlYmhvb2tzOiB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHdlYmhvb2suXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGNyZWF0ZSB0aGUgd2ViaG9vayBpbi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIHdlYmhvb2suXG4gICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRXZWJob29rfS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfV0VCSE9PS1NgIHBlcm1pc3Npb24uXG4gICAgICpcbiAgICAgKiDimqDvuI8gVGhlIHdlYmhvb2sgbmFtZSBtdXN0IG5vdCBjb250YWluIHRoZSBzdHJpbmcgJ2NseWRlJyAoY2FzZS1pbnNlbnNpdGl2ZSkuXG4gICAgICpcbiAgICAgKiBGaXJlcyBhIF9XZWJob29rcyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNjcmVhdGUtd2ViaG9va31cbiAgICAgKi9cbiAgICBjcmVhdGU6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlV2ViaG9vaykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkV2ViaG9vaz4+XG4gICAgLyoqIE1ldGhvZHMgdG8gZGVsZXRlIGEgd2ViaG9vay4gKi9cbiAgICBkZWxldGU6IHtcbiAgICAgIHdpdGg6IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlbGV0ZXMgYSB3ZWJob29rLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gaWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZGVsZXRlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmVtYXJrc1xuICAgICAgICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9XRUJIT09LU2AgcGVybWlzc2lvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogRmlyZXMgYSBfV2ViaG9va3MgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNkZWxldGUtd2ViaG9va31cbiAgICAgICAgICovXG4gICAgICAgIGlkOiAoaWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWxldGVzIGEgd2ViaG9vayBtZXNzYWdlIHVzaW5nIHRoZSB3ZWJob29rIHRva2VuLCB0aGVyZWJ5IGJ5cGFzc2luZyB0aGUgbmVlZCBmb3IgYXV0aGVudGljYXRpb24gKyBwZXJtaXNzaW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGlkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGRlbGV0ZSB0aGUgbWVzc2FnZSBiZWxvbmdpbmcgdG8uXG4gICAgICAgICAqIEBwYXJhbSB0b2tlbiAtIFRoZSB3ZWJob29rIHRva2VuLCB1c2VkIHRvIGRlbGV0ZSB0aGUgd2ViaG9vay5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJlbWFya3NcbiAgICAgICAgICogRmlyZXMgYSBfTWVzc2FnZSBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy93ZWJob29rI2RlbGV0ZS13ZWJob29rLXdpdGgtdG9rZW59XG4gICAgICAgICAqL1xuICAgICAgICB0b2tlbjogKGlkOiBCaWdTdHJpbmcsIHRva2VuOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgICAgIH1cbiAgICB9XG4gICAgLyoqIE1ldGhvZHMgcmVsYXRlZCB0byBlZGl0aW5nIGEgd2ViaG9vay4gKi9cbiAgICBlZGl0OiB7XG4gICAgICB3aXRoOiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFZGl0cyBhIHdlYmhvb2suXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZWRpdC5cbiAgICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZFdlYmhvb2t9LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmVtYXJrc1xuICAgICAgICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9XRUJIT09LU2AgcGVybWlzc2lvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogRmlyZXMgYSBfV2ViaG9va3MgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNlZGl0LXdlYmhvb2t9XG4gICAgICAgICAqL1xuICAgICAgICBpZDogKHdlYmhvb2tJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBNb2RpZnlXZWJob29rKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRXZWJob29rPj5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEVkaXRzIGEgd2ViaG9vayB1c2luZyB0aGUgd2ViaG9vayB0b2tlbiwgdGhlcmVieSBieXBhc3NpbmcgdGhlIG5lZWQgZm9yIGF1dGhlbnRpY2F0aW9uICsgcGVybWlzc2lvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZWRpdC5cbiAgICAgICAgICogQHBhcmFtIHRva2VuIC0gVGhlIHdlYmhvb2sgdG9rZW4sIHVzZWQgdG8gZWRpdCB0aGUgd2ViaG9vay5cbiAgICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZFdlYmhvb2t9LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmVtYXJrc1xuICAgICAgICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9XRUJIT09LU2AgcGVybWlzc2lvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogRmlyZXMgYSBfV2ViaG9va3MgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNtb2RpZnktd2ViaG9vay13aXRoLXRva2VufVxuICAgICAgICAgKi9cbiAgICAgICAgdG9rZW46ICh3ZWJob29rSWQ6IEJpZ1N0cmluZywgdG9rZW46IHN0cmluZywgb3B0aW9uczogT21pdDxNb2RpZnlXZWJob29rLCAnY2hhbm5lbElkJz4pID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFdlYmhvb2s+PlxuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlcyBhIHdlYmhvb2ssIGNhdXNpbmcgYSBtZXNzYWdlIHRvIGJlIHBvc3RlZCBpbiB0aGUgY2hhbm5lbCBjb25maWd1cmVkIGZvciB0aGUgd2ViaG9vay5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZXhlY3V0ZS5cbiAgICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgd2ViaG9vayB0b2tlbiwgdXNlZCB0byBleGVjdXRlIHRoZSB3ZWJob29rLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlIHdlYmhvb2suXG4gICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRNZXNzYWdlfSwgb3IgYHVuZGVmaW5lZGAgaWYgdGhlIHtAbGluayBFeGVjdXRlV2ViaG9vay53YWl0IHwgd2FpdH0gcHJvcGVydHkgb2YgdGhlIHtAbGluayBvcHRpb25zfSBvYmplY3QgcGFyYW1ldGVyIGlzIHNldCB0byBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBJZiB0aGUgd2ViaG9vayBjaGFubmVsIGlzIGEgZm9ydW0gY2hhbm5lbCwgeW91IG11c3QgcHJvdmlkZSBhIHZhbHVlIGZvciBlaXRoZXIgYHRocmVhZElkYCBvciBgdGhyZWFkTmFtZWAuXG4gICAgICpcbiAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNleGVjdXRlLXdlYmhvb2t9XG4gICAgICovXG4gICAgZXhlY3V0ZTogKHdlYmhvb2tJZDogQmlnU3RyaW5nLCB0b2tlbjogc3RyaW5nLCBvcHRpb25zOiBFeGVjdXRlV2ViaG9vaykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4gfCB1bmRlZmluZWQ+XG4gICAgLyoqIE1ldGhvZHMgcmVsYXRlZCB0byBnZXR0aW5nIHdlYmhvb2tzLiAqL1xuICAgIGdldDoge1xuICAgICAgLyoqXG4gICAgICAgKiBHZXRzIGEgbGlzdCBvZiB3ZWJob29rcyBmb3IgYSBjaGFubmVsLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgd2hpY2ggdG8gZ2V0IHRoZSB3ZWJob29rcyBvZi5cbiAgICAgICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZFdlYmhvb2t9IG9iamVjdHMgYXNzb3J0ZWQgYnkgd2ViaG9vayBJRC5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfV0VCSE9PS1NgIHBlcm1pc3Npb24uXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZ2V0LWNoYW5uZWwtd2ViaG9va3N9XG4gICAgICAgKi9cbiAgICAgIGNoYW5uZWw6IChjaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkV2ViaG9va1tdPj5cbiAgICAgIC8qKlxuICAgICAgICogR2V0cyB0aGUgbGlzdCBvZiB3ZWJob29rcyBmb3IgYSBndWlsZC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBsaXN0IG9mIHdlYmhvb2tzIGZvci5cbiAgICAgICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZFdlYmhvb2t9IG9iamVjdHMgYXNzb3J0ZWQgYnkgd2ViaG9vayBJRC5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfV0VCSE9PS1NgIHBlcm1pc3Npb24uXG4gICAgICAgKlxuICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZ2V0LWd1aWxkLXdlYmhvb2tzfVxuICAgICAgICovXG4gICAgICBndWlsZDogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkV2ViaG9va1tdPj5cbiAgICAgIC8qKlxuICAgICAgICogR2V0cyBhIHdlYmhvb2sgbWVzc2FnZSBieSBpdHMgSUQuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHdlYmhvb2tJZCAtIFRoZSBJRCBvZiB0aGUgd2ViaG9vayB0byBnZXQgYSBtZXNzYWdlIG9mLlxuICAgICAgICogQHBhcmFtIHRva2VuIC0gVGhlIHdlYmhvb2sgdG9rZW4sIHVzZWQgdG8gZ2V0IHdlYmhvb2sgbWVzc2FnZXMuXG4gICAgICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gdGhlIElEIG9mIHRoZSB3ZWJob29rIG1lc3NhZ2UgdG8gZ2V0LlxuICAgICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSBtZXNzYWdlLlxuICAgICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRNZXNzYWdlfS5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNnZXQtd2ViaG9vay1tZXNzYWdlfVxuICAgICAgICovXG4gICAgICBtZXNzYWdlOiAod2ViaG9va0lkOiBCaWdTdHJpbmcsIHRva2VuOiBzdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogR2V0V2ViaG9va01lc3NhZ2VPcHRpb25zKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj5cbiAgICAgIHdpdGg6IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgYSB3ZWJob29rIGJ5IGl0cyBJRC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHdlYmhvb2tJZCAtIFRoZSBJRCBvZiB0aGUgd2ViaG9vayB0byBnZXQuXG4gICAgICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkV2ViaG9va30uXG4gICAgICAgICAqXG4gICAgICAgICAqIEByZW1hcmtzXG4gICAgICAgICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1dFQkhPT0tTYCBwZXJtaXNzaW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNnZXQtd2ViaG9va31cbiAgICAgICAgICovXG4gICAgICAgIGlkOiAod2ViaG9va0lkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFdlYmhvb2s+PlxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyBhIHdlYmhvb2sgdXNpbmcgdGhlIHdlYmhvb2sgdG9rZW4sIHRoZXJlYnkgYnlwYXNzaW5nIHRoZSBuZWVkIGZvciBhdXRoZW50aWNhdGlvbiArIHBlcm1pc3Npb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGdldC5cbiAgICAgICAgICogQHBhcmFtIHRva2VuIC0gVGhlIHdlYmhvb2sgdG9rZW4sIHVzZWQgdG8gZ2V0IHRoZSB3ZWJob29rLlxuICAgICAgICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZFdlYmhvb2t9LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNnZXQtd2ViaG9vay13aXRoLXRva2VufVxuICAgICAgICAgKi9cbiAgICAgICAgdG9rZW46ICh3ZWJob29rSWQ6IEJpZ1N0cmluZywgdG9rZW46IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkV2ViaG9vaz4+XG4gICAgICB9XG4gICAgfVxuICAgIC8qKiBNZXRob2RzIHJlbGF0ZWQgdG8gbWVzc2FnZSBzZW50IGJ5IGEgd2ViaG9vay4gKi9cbiAgICBtZXNzYWdlczoge1xuICAgICAgLyoqXG4gICAgICAgKiBEZWxldGVzIGEgd2ViaG9vayBtZXNzYWdlLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZGVsZXRlIHRoZSBtZXNzYWdlIGJlbG9uZ2luZyB0by5cbiAgICAgICAqIEBwYXJhbSB0b2tlbiAtIFRoZSB3ZWJob29rIHRva2VuLCB1c2VkIHRvIG1hbmFnZSB0aGUgd2ViaG9vay5cbiAgICAgICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gZGVsZXRlLlxuICAgICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGRlbGV0aW9uIG9mIHRoZSBtZXNzYWdlLlxuICAgICAgICpcbiAgICAgICAqIEByZW1hcmtzXG4gICAgICAgKiBGaXJlcyBhIF9NZXNzYWdlIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICAgICAqXG4gICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNkZWxldGUtd2ViaG9va31cbiAgICAgICAqL1xuICAgICAgZGVsZXRlOiAod2ViaG9va0lkOiBCaWdTdHJpbmcsIHRva2VuOiBzdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogRGVsZXRlV2ViaG9va01lc3NhZ2VPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+XG4gICAgICAvKiogTWV0aG9kcyByZWxhdGVkIHRvIGVkaXRpbmcgbWVzc2FnZXMgc2VudCBieSBhIHdlYmhvb2suICovXG4gICAgICBlZGl0OiBXZWJob29rTWVzc2FnZUVkaXRvclxuICAgIH1cbiAgfVxuICAvKiogVXNlciByZWxhdGVkIGhlbHBlciBtZXRob2RzLiAqL1xuICB1c2Vyczoge1xuICAgIC8qKlxuICAgICAqIEdldHMgb3IgY3JlYXRlcyBhIERNIGNoYW5uZWwgd2l0aCBhIHVzZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIElEIG9mIHRoZSB1c2VyIHRvIGNyZWF0ZSB0aGUgRE0gY2hhbm5lbCB3aXRoLlxuICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkQ2hhbm5lbH0uXG4gICAgICpcbiAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvdXNlciNjcmVhdGUtZG19XG4gICAgICovXG4gICAgY2hhbm5lbDogKHVzZXJJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRDaGFubmVsPj5cbiAgfVxuICAvKipcbiAgICogQWRkcyBhIHJvbGUgdG8gYSBtZW1iZXIuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0aGUgbWVtYmVyIHRvIGFkZCB0aGUgcm9sZSB0byBpcyBpbi5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSB1c2VyIElEIG9mIHRoZSBtZW1iZXIgdG8gYWRkIHRoZSByb2xlIHRvLlxuICAgKiBAcGFyYW0gcm9sZUlkIC0gVGhlIElEIG9mIHRoZSByb2xlIHRvIGFkZCB0byB0aGUgbWVtYmVyLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9ST0xFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgTWVtYmVyIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2FkZC1ndWlsZC1tZW1iZXItcm9sZX1cbiAgICovXG4gIGFkZFJvbGU6IChndWlsZElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nLCByb2xlSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBBZGRzIGEgbWVtYmVyIHRvIGEgdGhyZWFkLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSB0aHJlYWQgdG8gYWRkIHRoZSBtZW1iZXIgdG8uXG4gICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgdXNlciBJRCBvZiB0aGUgbWVtYmVyIHRvIGFkZCB0byB0aGUgdGhyZWFkLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYWJpbGl0eSB0byBzZW5kIG1lc3NhZ2VzIGluIHRoZSB0aHJlYWQuXG4gICAqIFJlcXVpcmVzIHRoZSB0aHJlYWQgbm90IGJlIGFyY2hpdmVkLlxuICAgKlxuICAgKiBGaXJlcyBhIF9UaHJlYWQgTWVtYmVycyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2FkZC10aHJlYWQtbWVtYmVyfVxuICAgKi9cbiAgYWRkVGhyZWFkTWVtYmVyOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGF1dG9tb2QgcnVsZSBpbiBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gY3JlYXRlIHRoZSBydWxlIGluLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIHJ1bGUuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGFuIF9BdXRvIE1vZGVyYXRpb24gUnVsZSBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9hdXRvLW1vZGVyYXRpb24jY3JlYXRlLWF1dG8tbW9kZXJhdGlvbi1ydWxlfVxuICAgKi9cbiAgY3JlYXRlQXV0b21vZFJ1bGU6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZUF1dG9Nb2RlcmF0aW9uUnVsZU9wdGlvbnMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4+XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY2hhbm5lbCB3aXRoaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGNyZWF0ZSB0aGUgY2hhbm5lbCB3aXRoaW4uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgY2hhbm5lbC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRDaGFubmVsfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfQ0hBTk5FTFNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIElmIHNldHRpbmcgcGVybWlzc2lvbiBvdmVyd3JpdGVzLCBvbmx5IHRoZSBwZXJtaXNzaW9ucyB0aGUgYm90IHVzZXIgaGFzIGluIHRoZSBndWlsZCBjYW4gYmUgYWxsb3dlZCBvciBkZW5pZWQuXG4gICAqXG4gICAqIFNldHRpbmcgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24gaXMgb25seSBwb3NzaWJsZSBmb3IgZ3VpbGQgYWRtaW5pc3RyYXRvcnMuXG4gICAqXG4gICAqIEZpcmVzIGEgX0NoYW5uZWwgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjY3JlYXRlLWd1aWxkLWNoYW5uZWx9XG4gICAqL1xuICBjcmVhdGVDaGFubmVsOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVHdWlsZENoYW5uZWwpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZENoYW5uZWw+PlxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBlbW9qaSBpbiBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgaW4gd2hpY2ggdG8gY3JlYXRlIHRoZSBlbW9qaS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBlbW9qaS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRFbW9qaX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0VNT0pJU19BTkRfU1RJQ0tFUlNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEVtb2ppcyBoYXZlIGEgbWF4aW11bSBmaWxlIHNpemUgb2YgMjU2IGtpbG9iaXRzLiBBdHRlbXB0aW5nIHRvIHVwbG9hZCBhIGxhcmdlciBlbW9qaSB3aWxsIGNhdXNlIHRoZSByb3V0ZSB0byByZXR1cm4gNDAwIEJhZCBSZXF1ZXN0LlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBFbW9qaXMgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZW1vamkjY3JlYXRlLWd1aWxkLWVtb2ppfVxuICAgKi9cbiAgY3JlYXRlRW1vamk6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZUd1aWxkRW1vamkpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEVtb2ppPj5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgdGhyZWFkIGluIGEgZm9ydW0gY2hhbm5lbCwgYW5kIHNlbmRzIGEgbWVzc2FnZSB3aXRoaW4gdGhlIGNyZWF0ZWQgdGhyZWFkLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBmb3J1bSBjaGFubmVsIHRvIGNyZWF0ZSB0aGUgdGhyZWFkIHdpdGhpbi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSB0aHJlYWQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkQ2hhbm5lbH0gd2l0aCBhIG5lc3RlZCB7QGxpbmsgTWVzc2FnZX0gb2JqZWN0LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYENSRUFURV9NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfVGhyZWFkIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICogRmlyZXMgYSBfTWVzc2FnZSBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI3N0YXJ0LXRocmVhZC1pbi1mb3J1bS1jaGFubmVsfVxuICAgKlxuICAgKiBAZXhwZXJpbWVudGFsXG4gICAqL1xuICBjcmVhdGVGb3J1bVRocmVhZDogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVGb3J1bVBvc3RXaXRoTWVzc2FnZSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQ2hhbm5lbD4+XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGFwcGxpY2F0aW9uIGNvbW1hbmQgYWNjZXNzaWJsZSBnbG9iYWxseTsgYWNyb3NzIGRpZmZlcmVudCBndWlsZHMgYW5kIGNoYW5uZWxzLlxuICAgKlxuICAgKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBjb21tYW5kIHRvIGNyZWF0ZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIEFwcGxpY2F0aW9uQ29tbWFuZH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIOKaoO+4jyBDcmVhdGluZyBhIGNvbW1hbmQgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGFuIGV4aXN0aW5nIGNvbW1hbmQgZm9yIHlvdXIgYXBwbGljYXRpb24gd2lsbCBvdmVyd3JpdGUgdGhlIG9sZCBjb21tYW5kLlxuICAgKiDimqDvuI8gR2xvYmFsIGNvbW1hbmRzIG9uY2UgY3JlYXRlZCBhcmUgY2FjaGVkIGZvciBwZXJpb2RzIG9mIF9fYW4gaG91cl9fLCBzbyBjaGFuZ2VzIG1hZGUgdG8gZXhpc3RpbmcgY29tbWFuZHMgd2lsbCB0YWtlIGFuIGhvdXIgdG8gc3VyZmFjZS5cbiAgICog4pqg77iPIFlvdSBjYW4gb25seSBjcmVhdGUgdXAgdG8gMjAwIF9uZXdfIGNvbW1hbmRzIGRhaWx5LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjY3JlYXRlLWdsb2JhbC1hcHBsaWNhdGlvbi1jb21tYW5kfVxuICAgKi9cbiAgY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kOiAoY29tbWFuZDogQ3JlYXRlQXBwbGljYXRpb25Db21tYW5kKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+PlxuICAvKipcbiAgICogQ3JlYXRlcyBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIGd1aWxkLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZEd1aWxkfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICog4pqg77iPIFRoaXMgcm91dGUgY2FuIG9ubHkgYmUgdXNlZCBieSBib3RzIGluIF9fZmV3ZXIgdGhhbiAxMCBndWlsZHNfXy5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjY3JlYXRlLWd1aWxkfVxuICAgKi9cbiAgY3JlYXRlR3VpbGQ6IChvcHRpb25zOiBDcmVhdGVHdWlsZCkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkR3VpbGQ+PlxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBhcHBsaWNhdGlvbiBjb21tYW5kIG9ubHkgYWNjZXNzaWJsZSBpbiBhIHNwZWNpZmljIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBjb21tYW5kIHRvIGNyZWF0ZS5cbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGNyZWF0ZSB0aGUgY29tbWFuZCBmb3IuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBBcHBsaWNhdGlvbkNvbW1hbmR9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiDimqDvuI8gQ3JlYXRpbmcgYSBjb21tYW5kIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhbiBleGlzdGluZyBjb21tYW5kIGZvciB5b3VyIGFwcGxpY2F0aW9uIHdpbGwgb3ZlcndyaXRlIHRoZSBvbGQgY29tbWFuZC5cbiAgICog4pqg77iPIFlvdSBjYW4gb25seSBjcmVhdGUgdXAgdG8gMjAwIF9uZXdfIGNvbW1hbmRzIGRhaWx5LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjY3JlYXRlLWd1aWxkLWFwcGxpY2F0aW9uLWNvbW1hbmR9XG4gICAqL1xuICBjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZDogKGNvbW1hbmQ6IENyZWF0ZUFwcGxpY2F0aW9uQ29tbWFuZCwgZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+PlxuICAvKipcbiAgICogQ3JlYXRlcyBhIHRlbXBsYXRlIGZyb20gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGNyZWF0ZSB0aGUgdGVtcGxhdGUgZnJvbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSB0ZW1wbGF0ZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIFRlbXBsYXRlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkLXRlbXBsYXRlI2NyZWF0ZS1ndWlsZC10ZW1wbGF0ZX1cbiAgICovXG4gIGNyZWF0ZUd1aWxkVGVtcGxhdGU6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZVRlbXBsYXRlKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRUZW1wbGF0ZT4+XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGludml0ZSB0byBhIGNoYW5uZWwgaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBjcmVhdGUgdGhlIGludml0ZSB0by5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBpbnZpdGUuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkSW52aXRlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBDUkVBVEVfSU5TVEFOVF9JTlZJVEVgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGFuIF9JbnZpdGUgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAcHJpdmF0ZVJlbWFya3NcbiAgICogVGhlIHJlcXVlc3QgYm9keSBpcyBub3Qgb3B0aW9uYWwsIGFuZCBhbiBlbXB0eSBKU09OIG9iamVjdCBtdXN0IGJlIHNlbnQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGFueSBmaWVsZHMgYXJlIGJlaW5nIHRyYW5zbWl0dGVkLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNjcmVhdGUtY2hhbm5lbC1pbnZpdGV9XG4gICAqL1xuICBjcmVhdGVJbnZpdGU6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IENyZWF0ZUNoYW5uZWxJbnZpdGUpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEludml0ZT4+XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcm9sZSBpbiBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gY3JlYXRlIHRoZSByb2xlIGluLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIHJvbGUuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkUm9sZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBSb2xlIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2NyZWF0ZS1ndWlsZC1yb2xlfVxuICAgKi9cbiAgY3JlYXRlUm9sZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlR3VpbGRSb2xlLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFJvbGU+PlxuICAvKipcbiAgICogQ3JlYXRlcyBhIHNjaGVkdWxlZCBldmVudCBpbiBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gY3JlYXRlIHRoZSBzY2hlZHVsZWQgZXZlbnQgaW4uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgU2NoZWR1bGVkRXZlbnR9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9FVkVOVFNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEEgZ3VpbGQgY2FuIG9ubHkgaGF2ZSBhIG1heGltdW0gb2YgMTAwIGV2ZW50cyB3aXRoIGEgc3RhdHVzIG9mIHtAbGluayBTY2hlZHVsZWRFdmVudFN0YXR1cy5BY3RpdmV9IG9yIHtAbGluayBTY2hlZHVsZWRFdmVudFN0YXR1cy5TY2hlZHVsZWR9IChpbmNsdXNpdmUpLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBTY2hlZHVsZWQgRXZlbnQgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQtc2NoZWR1bGVkLWV2ZW50I2NyZWF0ZS1ndWlsZC1zY2hlZHVsZWQtZXZlbnR9XG4gICAqL1xuICBjcmVhdGVTY2hlZHVsZWRFdmVudDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlU2NoZWR1bGVkRXZlbnQpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFNjaGVkdWxlZEV2ZW50Pj5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzdGFnZSBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggYSBzdGFnZSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIHN0YWdlIGluc3RhbmNlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZFN0YWdlSW5zdGFuY2V9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgdXNlciB0byBiZSBhIG1vZGVyYXRvciBvZiB0aGUgc3RhZ2UgY2hhbm5lbC5cbiAgICpcbiAgICogRmlyZXMgYSBfU3RhZ2UgSW5zdGFuY2UgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvc3RhZ2UtaW5zdGFuY2UjY3JlYXRlLXN0YWdlLWluc3RhbmNlfVxuICAgKi9cbiAgY3JlYXRlU3RhZ2VJbnN0YW5jZTogKG9wdGlvbnM6IENyZWF0ZVN0YWdlSW5zdGFuY2UpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFN0YWdlSW5zdGFuY2U+PlxuICAvKipcbiAgICogQ3JlYXRlcyBhIHdlYmhvb2suXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gY3JlYXRlIHRoZSB3ZWJob29rIGluLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIHdlYmhvb2suXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkV2ViaG9va30uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1dFQkhPT0tTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiDimqDvuI8gVGhlIHdlYmhvb2sgbmFtZSBtdXN0IG5vdCBjb250YWluIHRoZSBzdHJpbmcgJ2NseWRlJyAoY2FzZS1pbnNlbnNpdGl2ZSkuXG4gICAqXG4gICAqIEZpcmVzIGEgX1dlYmhvb2tzIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjY3JlYXRlLXdlYmhvb2t9XG4gICAqL1xuICBjcmVhdGVXZWJob29rOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZVdlYmhvb2spID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFdlYmhvb2s+PlxuICAvKipcbiAgICogRGVsZXRlcyBhbiBhdXRvbW9kIHJ1bGUuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBkZWxldGUgdGhlIHJ1bGUgZnJvbS5cbiAgICogQHBhcmFtIHJ1bGVJZCAtIFRoZSBJRCBvZiB0aGUgYXV0b21vZCBydWxlIHRvIGRlbGV0ZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGFuIF9BdXRvIE1vZGVyYXRpb24gUnVsZSBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9hdXRvLW1vZGVyYXRpb24jZGVsZXRlLWF1dG8tbW9kZXJhdGlvbi1ydWxlfVxuICAgKi9cbiAgZGVsZXRlQXV0b21vZFJ1bGU6IChndWlsZElkOiBCaWdTdHJpbmcsIHJ1bGVJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSBjaGFubmVsIGZyb20gd2l0aGluIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZGVsZXRlZCB7QGxpbmsgQ2hhbm5lbH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZvciBjb21tdW5pdHkgZ3VpbGRzLCB0aGUgX1J1bGVzXywgX0d1aWRlbGluZXNfIGFuZCBfQ29tbXVuaXR5IFVwZGF0ZV8gY2hhbm5lbHMgY2Fubm90IGJlIGRlbGV0ZWQuXG4gICAqXG4gICAqIElmIHRoZSBjaGFubmVsIGlzIGEgdGhyZWFkOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1RIUkVBRFNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIC0gRmlyZXMgYSBfVGhyZWFkIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogT3RoZXJ3aXNlOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0NIQU5ORUxTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiAtIOKaoO+4jyBEZWxldGluZyBhIGNhdGVnb3J5IGNoYW5uZWwgZG9lcyBub3QgZGVsZXRlIGl0cyBjaGlsZCBjaGFubmVscy5cbiAgICogICBJbnN0ZWFkLCB0aGV5IHdpbGwgaGF2ZSB0aGVpciBgcGFyZW50X2lkYCBwcm9wZXJ0eSByZW1vdmVkLCBhbmQgYSBgQ2hhbm5lbCBVcGRhdGVgIGdhdGV3YXkgZXZlbnQgd2lsbCBmaXJlIGZvciBlYWNoIG9mIHRoZW0uXG4gICAqXG4gICAqIC0gRmlyZXMgYSBfQ2hhbm5lbCBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2RlbGV0ZWNsb3NlLWNoYW5uZWx9XG4gICAqL1xuICBkZWxldGVDaGFubmVsOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhIHBlcm1pc3Npb24gb3ZlcnJpZGUgZm9yIGEgdXNlciBvciByb2xlIGluIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBkZWxldGUgdGhlIHBlcm1pc3Npb24gb3ZlcnJpZGUgb2YuXG4gICAqIEBwYXJhbSBvdmVyd3JpdGVJZCAtIFRoZSBJRCBvZiB0aGUgcGVybWlzc2lvbiBvdmVycmlkZSB0byBkZWxldGUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9DaGFubmVsIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZGVsZXRlLWNoYW5uZWwtcGVybWlzc2lvbn1cbiAgICovXG4gIGRlbGV0ZUNoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGU6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3ZlcndyaXRlSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIGFuIGVtb2ppIGZyb20gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIGZyb20gd2hpY2ggdG8gZGVsZXRlIHRoZSBlbW9qaS5cbiAgICogQHBhcmFtIGlkIC0gVGhlIElEIG9mIHRoZSBlbW9qaSB0byBkZWxldGUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0VNT0pJU19BTkRfU1RJQ0tFUlNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIEVtb2ppcyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9lbW9qaSNkZWxldGUtZ3VpbGQtZW1vaml9XG4gICAqL1xuICBkZWxldGVFbW9qaTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgaWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIGEgZm9sbG93LXVwIG1lc3NhZ2UgdG8gYW4gaW50ZXJhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSBpbnRlcmFjdGlvbiB0b2tlbiB0byB1c2UsIHByb3ZpZGVkIGluIHRoZSBvcmlnaW5hbCBpbnRlcmFjdGlvbi5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBkZWxldGUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFVubGlrZSBgZGVsZXRlTWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0IG5lZWRpbmcgdG8gc2VlIHRoZSBjaGFubmVsIHRoZSBtZXNzYWdlIGlzIGluLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIERlbGV0ZV8gZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9yZWNlaXZpbmctYW5kLXJlc3BvbmRpbmcjZGVsZXRlLWZvbGxvd3VwLW1lc3NhZ2V9XG4gICAqL1xuICBkZWxldGVGb2xsb3d1cE1lc3NhZ2U6ICh0b2tlbjogc3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhbiBhcHBsaWNhdGlvbiBjb21tYW5kIHJlZ2lzdGVyZWQgZ2xvYmFsbHkuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kSWQgLSBUaGUgSUQgb2YgdGhlIGNvbW1hbmQgdG8gZGVsZXRlLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZGVsZXRlLWdsb2JhbC1hcHBsaWNhdGlvbi1jb21tYW5kfVxuICAgKi9cbiAgZGVsZXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kOiAoY29tbWFuZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGRlbGV0ZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIGJvdCB1c2VyIG11c3QgYmUgdGhlIG93bmVyIG9mIHRoZSBndWlsZC5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgRGVsZXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjZGVsZXRlLWd1aWxkfVxuICAgKi9cbiAgZGVsZXRlR3VpbGQ6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYW4gYXBwbGljYXRpb24gY29tbWFuZCByZWdpc3RlcmVkIGluIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBkZWxldGUgdGhlIGNvbW1hbmQgZnJvbS5cbiAgICogQHBhcmFtIGNvbW1hbmRJZCAtIFRoZSBJRCBvZiB0aGUgY29tbWFuZCB0byBkZWxldGUgZnJvbSB0aGUgZ3VpbGQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNkZWxldGUtZ3VpbGQtYXBwbGljYXRpb24tY29tbWFuZH1cbiAgICovXG4gIGRlbGV0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kOiAoY29tbWFuZElkOiBCaWdTdHJpbmcsIGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhIHRlbXBsYXRlIGZyb20gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGRlbGV0ZSB0aGUgdGVtcGxhdGUgZnJvbS5cbiAgICogQHBhcmFtIHRlbXBsYXRlQ29kZSAtIFRoZSBjb2RlIG9mIHRoZSB0ZW1wbGF0ZSB0byBkZWxldGUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC10ZW1wbGF0ZSNkZWxldGUtZ3VpbGQtdGVtcGxhdGV9XG4gICAqL1xuICBkZWxldGVHdWlsZFRlbXBsYXRlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB0ZW1wbGF0ZUNvZGU6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhbiBpbnRlZ3JhdGlvbiBhdHRhY2hlZCB0byBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgZnJvbSB3aGljaCB0byBkZWxldGUgdGhlIGludGVncmF0aW9uLlxuICAgKiBAcGFyYW0gaW50ZWdyYXRpb25JZCAtIFRoZSBJRCBvZiB0aGUgaW50ZWdyYXRpb24gdG8gZGVsZXRlIGZyb20gdGhlIGd1aWxkLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRGVsZXRlcyBhbGwgd2ViaG9va3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnRlZ3JhdGlvbiwgYW5kIGtpY2tzIHRoZSBhc3NvY2lhdGVkIGJvdCBpZiB0aGVyZSBpcyBvbmUuXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIEludGVncmF0aW9ucyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqIEZpcmVzIGEgX0ludGVncmF0aW9uIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2RlbGV0ZS1ndWlsZC1pbnRlZ3JhdGlvbn1cbiAgICovXG4gIGRlbGV0ZUludGVncmF0aW9uOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBpbnRlZ3JhdGlvbklkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYW4gaW52aXRlIHRvIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGludml0ZUNvZGUgLSBUaGUgaW52aXRlIGNvZGUgb2YgdGhlIGludml0ZSB0byBkZWxldGUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0NIQU5ORUxTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhbiBfSW52aXRlIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZGVsZXRlLWNoYW5uZWwtaW52aXRlfVxuICAgKi9cbiAgZGVsZXRlSW52aXRlOiAoaW52aXRlQ29kZTogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSBtZXNzYWdlIGZyb20gYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGRlbGV0ZSB0aGUgbWVzc2FnZSBmcm9tLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGRlbGV0ZSBmcm9tIHRoZSBjaGFubmVsLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiBub3QgZGVsZXRpbmcgb3duIG1lc3NhZ2U6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBNQU5BR0VfTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgRGVsZXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNkZWxldGUtbWVzc2FnZX1cbiAgICovXG4gIGRlbGV0ZU1lc3NhZ2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgaW5pdGlhbCBtZXNzYWdlIHJlc3BvbnNlIHRvIGFuIGludGVyYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgaW50ZXJhY3Rpb24gdG9rZW4gdG8gdXNlLCBwcm92aWRlZCBpbiB0aGUgb3JpZ2luYWwgaW50ZXJhY3Rpb24uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFVubGlrZSBgZGVsZXRlTWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0IG5lZWRpbmcgdG8gc2VlIHRoZSBjaGFubmVsIHRoZSBtZXNzYWdlIGlzIGluLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIERlbGV0ZV8gZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9yZWNlaXZpbmctYW5kLXJlc3BvbmRpbmcjZGVsZXRlLW9yaWdpbmFsLWludGVyYWN0aW9uLXJlc3BvbnNlfVxuICAgKi9cbiAgZGVsZXRlT3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlOiAodG9rZW46IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhIHJvbGUgZnJvbSBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZGVsZXRlIHRoZSByb2xlIGZyb20uXG4gICAqIEBwYXJhbSByb2xlSWQgLSBUaGUgSUQgb2YgdGhlIHJvbGUgdG8gZGVsZXRlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9ST0xFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgUm9sZSBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNkZWxldGUtZ3VpbGQtcm9sZX1cbiAgICovXG4gIGRlbGV0ZVJvbGU6IChndWlsZElkOiBCaWdTdHJpbmcsIHJvbGVJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIGEgc2NoZWR1bGVkIGV2ZW50IGZyb20gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGRlbGV0ZSB0aGUgc2NoZWR1bGVkIGV2ZW50IGZyb20uXG4gICAqIEBwYXJhbSBldmVudElkIC0gVGhlIElEIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQgdG8gZGVsZXRlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9FVkVOVFNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIFNjaGVkdWxlZCBFdmVudCBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC1zY2hlZHVsZWQtZXZlbnQjZGVsZXRlLWd1aWxkLXNjaGVkdWxlZC1ldmVudH1cbiAgICovXG4gIGRlbGV0ZVNjaGVkdWxlZEV2ZW50OiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBldmVudElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHN0YWdlIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCBhIHN0YWdlIGNoYW5uZWwsIGlmIG9uZSBleGlzdHMuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIHN0YWdlIGNoYW5uZWwgdGhlIHN0YWdlIGluc3RhbmNlIGlzIGFzc29jaWF0ZWQgd2l0aC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIHVzZXIgdG8gYmUgYSBtb2RlcmF0b3Igb2YgdGhlIHN0YWdlIGNoYW5uZWwuXG4gICAqXG4gICAqIEZpcmVzIGEgX1N0YWdlIEluc3RhbmNlIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3N0YWdlLWluc3RhbmNlI2RlbGV0ZS1zdGFnZS1pbnN0YW5jZX1cbiAgICovXG4gIGRlbGV0ZVN0YWdlSW5zdGFuY2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIGEgd2ViaG9vay5cbiAgICpcbiAgICogQHBhcmFtIHdlYmhvb2tJZCAtIFRoZSBJRCBvZiB0aGUgd2ViaG9vayB0byBkZWxldGUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1dFQkhPT0tTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9XZWJob29rcyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy93ZWJob29rI2RlbGV0ZS13ZWJob29rfVxuICAgKi9cbiAgZGVsZXRlV2ViaG9vazogKHdlYmhvb2tJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSB3ZWJob29rIG1lc3NhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZGVsZXRlIHRoZSBtZXNzYWdlIGJlbG9uZ2luZyB0by5cbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIHdlYmhvb2sgdG9rZW4sIHVzZWQgdG8gbWFuYWdlIHRoZSB3ZWJob29rLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGRlbGV0ZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGRlbGV0aW9uIG9mIHRoZSBtZXNzYWdlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBGaXJlcyBhIF9NZXNzYWdlIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZGVsZXRlLXdlYmhvb2t9XG4gICAqL1xuICBkZWxldGVXZWJob29rTWVzc2FnZTogKHdlYmhvb2tJZDogQmlnU3RyaW5nLCB0b2tlbjogc3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IERlbGV0ZVdlYmhvb2tNZXNzYWdlT3B0aW9ucykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhIHdlYmhvb2sgbWVzc2FnZSB1c2luZyB0aGUgd2ViaG9vayB0b2tlbiwgdGhlcmVieSBieXBhc3NpbmcgdGhlIG5lZWQgZm9yIGF1dGhlbnRpY2F0aW9uICsgcGVybWlzc2lvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZGVsZXRlIHRoZSBtZXNzYWdlIGJlbG9uZ2luZyB0by5cbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIHdlYmhvb2sgdG9rZW4sIHVzZWQgdG8gZGVsZXRlIHRoZSB3ZWJob29rLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBGaXJlcyBhIF9NZXNzYWdlIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZGVsZXRlLXdlYmhvb2std2l0aC10b2tlbn1cbiAgICovXG4gIGRlbGV0ZVdlYmhvb2tXaXRoVG9rZW46ICh3ZWJob29rSWQ6IEJpZ1N0cmluZywgdG9rZW46IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRWRpdHMgdGhlIHBlcm1pc3Npb25zIGZvciBhIGd1aWxkIGFwcGxpY2F0aW9uIGNvbW1hbmQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0aGUgY29tbWFuZCBpcyByZWdpc3RlcmVkIGluLlxuICAgKiBAcGFyYW0gY29tbWFuZElkIC0gVGhlIElEIG9mIHRoZSBjb21tYW5kIHRvIGVkaXQgdGhlIHBlcm1pc3Npb25zIG9mLlxuICAgKiBAcGFyYW0gYmVhcmVyVG9rZW4gLSBUaGUgYmVhcmVyIHRva2VuIHRvIHVzZSB0byBtYWtlIHRoZSByZXF1ZXN0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgY29tbWFuZCBwZXJtaXNzaW9ucy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbn0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBiZWFyZXIgdG9rZW4gcmVxdWlyZXMgdGhlIGBhcHBsaWNhdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbnMudXBkYXRlYCBzY29wZSB0byBiZSBlbmFibGVkLCBhbmQgdG8gaGF2ZSBhY2Nlc3MgdG8gdGhlIGd1aWxkIHdob3NlIElEIGhhcyBiZWVuIHByb3ZpZGVkIGluIHRoZSBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZWRpdC1hcHBsaWNhdGlvbi1jb21tYW5kLXBlcm1pc3Npb25zfVxuICAgKi9cbiAgZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zOiAoXG4gICAgZ3VpbGRJZDogQmlnU3RyaW5nLFxuICAgIGNvbW1hbmRJZDogQmlnU3RyaW5nLFxuICAgIGJlYXJlclRva2VuOiBzdHJpbmcsXG4gICAgb3B0aW9uczogQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnNbXSxcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucz4+XG4gIC8qKlxuICAgKiBFZGl0cyBhbiBhdXRvbW9kIHJ1bGUuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBlZGl0IHRoZSBydWxlIGluLlxuICAgKiBAcGFyYW0gcnVsZUlkIC0gVGhlIElEIG9mIHRoZSBydWxlIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBydWxlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGFuIF9BdXRvIE1vZGVyYXRpb24gUnVsZSBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9hdXRvLW1vZGVyYXRpb24jbW9kaWZ5LWF1dG8tbW9kZXJhdGlvbi1ydWxlfVxuICAgKi9cbiAgZWRpdEF1dG9tb2RSdWxlOiAoXG4gICAgZ3VpbGRJZDogQmlnU3RyaW5nLFxuICAgIHJ1bGVJZDogQmlnU3RyaW5nLFxuICAgIG9wdGlvbnM6IFBhcnRpYWw8RWRpdEF1dG9Nb2RlcmF0aW9uUnVsZU9wdGlvbnM+LFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4+XG4gIC8qKlxuICAgKiBNb2RpZmllcyB0aGUgYm90J3MgdXNlcm5hbWUgb3IgYXZhdGFyLlxuICAgKiBOT1RFOiB1c2VybmFtZTogaWYgY2hhbmdlZCBtYXkgY2F1c2UgdGhlIGJvdCdzIGRpc2NyaW1pbmF0b3IgdG8gYmUgcmFuZG9taXplZC5cbiAgICovXG4gIGVkaXRCb3RQcm9maWxlOiAob3B0aW9uczogeyB1c2VybmFtZT86IHN0cmluZzsgYm90QXZhdGFyVVJMPzogc3RyaW5nIHwgbnVsbCB9KSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRVc2VyPj5cbiAgLyoqXG4gICAqIEVkaXRzIGEgY2hhbm5lbCdzIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBjaGFubmVsLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkQ2hhbm5lbH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIElmIGVkaXRpbmcgYSBjaGFubmVsIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlcy5Hcm91cERtfTpcbiAgICogLSBGaXJlcyBhIF9DaGFubmVsIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogSWYgZWRpdGluZyBhIHRocmVhZCBjaGFubmVsOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1RIUkVBRFNgIHBlcm1pc3Npb24gX191bmxlc3NfXyBpZiBzZXR0aW5nIHRoZSBgYXJjaGl2ZWRgIHByb3BlcnR5IHRvIGBmYWxzZWAgd2hlbiB0aGUgYGxvY2tlZGAgcHJvcGVydHkgaXMgYWxzbyBgZmFsc2VgLCBpbiB3aGljaCBjYXNlIG9ubHkgdGhlIGBTRU5EX01FU1NBR0VTYCBwZXJtaXNzaW9uIGlzIHJlcXVpcmVkLlxuICAgKlxuICAgKiAtIEZpcmVzIGEgX1RocmVhZCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIElmIGVkaXRpbmcgYSBndWlsZCBjaGFubmVsOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0NIQU5ORUxTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiAtIElmIG1vZGlmeWluZyBwZXJtaXNzaW9uIG92ZXJyaWRlczpcbiAgICogICAtIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiAgIC0gT25seSBwZXJtaXNzaW9ucyB0aGUgYm90IHVzZXIgaGFzIGluIHRoZSBndWlsZCBvciBwYXJlbnQgY2hhbm5lbCBjYW4gYmUgYWxsb3dlZC9kZW5pZWQgX191bmxlc3NfXyB0aGUgYm90IHVzZXIgaGFzIGEgYE1BTkFHRV9ST0xFU2AgcGVybWlzc2lvbiBvdmVycmlkZSBpbiB0aGUgY2hhbm5lbC5cbiAgICpcbiAgICogLSBJZiBtb2RpZnlpbmcgYSBjaGFubmVsIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlcy5HdWlsZENhdGVnb3J5fTpcbiAgICogICAgIC0gRmlyZXMgYSBfQ2hhbm5lbCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQgZm9yIGVhY2ggY2hpbGQgY2hhbm5lbCBpbXBhY3RlZCBpbiB0aGlzIGNoYW5nZS5cbiAgICogLSBPdGhlcndpc2U6XG4gICAqICAgICAtIEZpcmVzIGEgX0NoYW5uZWwgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKi9cbiAgZWRpdENoYW5uZWw6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogTW9kaWZ5Q2hhbm5lbCkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQ2hhbm5lbD4+XG4gIC8qKlxuICAgKiBFZGl0cyB0aGUgcGVybWlzc2lvbiBvdmVycmlkZXMgZm9yIGEgdXNlciBvciByb2xlIGluIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBlZGl0IHRoZSBwZXJtaXNzaW9uIG92ZXJyaWRlcyBvZi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGVybWlzc2lvbiBvdmVycmlkZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIE9ubHkgcGVybWlzc2lvbnMgdGhlIGJvdCB1c2VyIGhhcyBpbiB0aGUgZ3VpbGQgb3IgcGFyZW50IGNoYW5uZWwgY2FuIGJlIGFsbG93ZWQvZGVuaWVkIF9fdW5sZXNzX18gdGhlIGJvdCB1c2VyIGhhcyBhIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24gb3ZlcnJpZGUgaW4gdGhlIGNoYW5uZWwuXG4gICAqXG4gICAqIEZpcmVzIGEgX0NoYW5uZWwgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNlZGl0LWNoYW5uZWwtcGVybWlzc2lvbnN9XG4gICAqL1xuICBlZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogRWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzT3B0aW9ucykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRWRpdHMgdGhlIHBvc2l0aW9ucyBvZiBhIHNldCBvZiBjaGFubmVscyBpbiBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgaW4gd2hpY2ggdG8gZWRpdCB0aGUgcG9zaXRpb25zIG9mIHRoZSBjaGFubmVscy5cbiAgICogQHBhcmFtIGNoYW5uZWxQb3NpdGlvbnMgLSBBIHNldCBvZiBvYmplY3RzIGRlZmluaW5nIHRoZSB1cGRhdGVkIHBvc2l0aW9ucyBvZiB0aGUgY2hhbm5lbHMuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0NIQU5ORUxTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9DaGFubmVsIFVwZGF0ZV8gZ2F0ZXdheSBldmVudCBmb3IgZXZlcnkgY2hhbm5lbCBpbXBhY3RlZCBpbiB0aGlzIGNoYW5nZS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI21vZGlmeS1ndWlsZC1jaGFubmVsLXBvc2l0aW9uc31cbiAgICovXG4gIGVkaXRDaGFubmVsUG9zaXRpb25zOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBjaGFubmVsUG9zaXRpb25zOiBNb2RpZnlHdWlsZENoYW5uZWxQb3NpdGlvbnNbXSkgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRWRpdHMgYW4gZW1vamkuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCBpbiB3aGljaCB0byBlZGl0IHRoZSBlbW9qaS5cbiAgICogQHBhcmFtIGlkIC0gVGhlIElEIG9mIHRoZSBlbW9qaSB0byBlZGl0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgZW1vamkuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSB1cGRhdGVkIHtAbGluayBEaXNjb3JkRW1vaml9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9FTU9KSVNfQU5EX1NUSUNLRVJTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIGBHdWlsZCBFbW9qaXMgVXBkYXRlYCBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZW1vamkjbW9kaWZ5LWd1aWxkLWVtb2ppfVxuICAgKi9cbiAgZWRpdEVtb2ppOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBpZDogQmlnU3RyaW5nLCBvcHRpb25zOiBNb2RpZnlHdWlsZEVtb2ppKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRFbW9qaT4+XG4gIC8qKlxuICAgKiBFZGl0cyBhIGZvbGxvdy11cCBtZXNzYWdlIHRvIGFuIGludGVyYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgaW50ZXJhY3Rpb24gdG9rZW4gdG8gdXNlLCBwcm92aWRlZCBpbiB0aGUgb3JpZ2luYWwgaW50ZXJhY3Rpb24uXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gZWRpdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIG1lc3NhZ2UuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIE1lc3NhZ2V9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBVbmxpa2UgYGVkaXRNZXNzYWdlKClgLCB0aGlzIGVuZHBvaW50IGFsbG93cyB0aGUgYm90IHVzZXIgdG8gYWN0IHdpdGhvdXQgbmVlZGluZyB0byBzZWUgdGhlIGNoYW5uZWwgdGhlIG1lc3NhZ2UgaXMgaW4uXG4gICAqXG4gICAqIERvZXMgbm90IHN1cHBvcnQgZXBoZW1lcmFsIGZvbGxvdy11cCBtZXNzYWdlcyBkdWUgdG8gdGhlc2UgYmVpbmcgc3RhdGVsZXNzLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIFVwZGF0ZV8gZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9yZWNlaXZpbmctYW5kLXJlc3BvbmRpbmcjZWRpdC1mb2xsb3d1cC1tZXNzYWdlfVxuICAgKi9cbiAgZWRpdEZvbGxvd3VwTWVzc2FnZTogKHRva2VuOiBzdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBJbnRlcmFjdGlvbkNhbGxiYWNrRGF0YSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+XG4gIC8qKlxuICAgKiBFZGl0cyBhIGdsb2JhbCBhcHBsaWNhdGlvbiBjb21tYW5kLlxuICAgKlxuICAgKiBAcGFyYW0gY29tbWFuZElkIC0gVGhlIElEIG9mIHRoZSBjb21tYW5kIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBjb21tYW5kLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBBcHBsaWNhdGlvbkNvbW1hbmR9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZWRpdC1nbG9iYWwtYXBwbGljYXRpb24tY29tbWFuZH1cbiAgICovXG4gIGVkaXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQ6IChjb21tYW5kSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlQXBwbGljYXRpb25Db21tYW5kKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+PlxuICAvKipcbiAgICogRWRpdHMgYW4gYXBwbGljYXRpb24gY29tbWFuZCByZWdpc3RlcmVkIGluIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0aGUgY29tbWFuZCBpcyByZWdpc3RlcmVkIGluLlxuICAgKiBAcGFyYW0gY29tbWFuZElkIC0gVGhlIElEIG9mIHRoZSBjb21tYW5kIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBjb21tYW5kLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBBcHBsaWNhdGlvbkNvbW1hbmR9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZWRpdC1ndWlsZC1hcHBsaWNhdGlvbi1jb21tYW5kfVxuICAgKi9cbiAgZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kOiAoXG4gICAgY29tbWFuZElkOiBCaWdTdHJpbmcsXG4gICAgZ3VpbGRJZDogQmlnU3RyaW5nLFxuICAgIG9wdGlvbnM6IENyZWF0ZUFwcGxpY2F0aW9uQ29tbWFuZCxcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+PlxuICAvKipcbiAgICogRWRpdHMgYSB0ZW1wbGF0ZSdzIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZWRpdCBhIHRlbXBsYXRlIG9mLlxuICAgKiBAcGFyYW0gdGVtcGxhdGVDb2RlIC0gVGhlIGNvZGUgb2YgdGhlIHRlbXBsYXRlIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSB0ZW1wbGF0ZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgVGVtcGxhdGV9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQtdGVtcGxhdGUjbW9kaWZ5LWd1aWxkLXRlbXBsYXRlfVxuICAgKi9cbiAgZWRpdEd1aWxkVGVtcGxhdGU6IChndWlsZElkOiBCaWdTdHJpbmcsIHRlbXBsYXRlQ29kZTogc3RyaW5nLCBvcHRpb25zOiBNb2RpZnlHdWlsZFRlbXBsYXRlKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRUZW1wbGF0ZT4+XG4gIC8qKlxuICAgKiBFZGl0cyBhIG1lc3NhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZWRpdCB0aGUgbWVzc2FnZSBpbi5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRHMgb2YgdGhlIG1lc3NhZ2UgdG8gZWRpdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIG1lc3NhZ2UuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIE1lc3NhZ2V9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiBlZGl0aW5nIGFub3RoZXIgdXNlcidzIG1lc3NhZ2U6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBNQU5BR0VfTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAqIC0gT25seSB0aGUge0BsaW5rIEVkaXRNZXNzYWdlLmZsYWdzIHwgZmxhZ3N9IHByb3BlcnR5IG9mIHRoZSB7QGxpbmsgb3B0aW9uc30gb2JqZWN0IHBhcmFtZXRlciBjYW4gYmUgZWRpdGVkLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZWRpdC1tZXNzYWdlfVxuICAgKi9cbiAgZWRpdE1lc3NhZ2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEVkaXRNZXNzYWdlKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj5cbiAgLyoqXG4gICAqIEVkaXRzIHRoZSBpbml0aWFsIG1lc3NhZ2UgcmVzcG9uc2UgdG8gYW4gaW50ZXJhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSBpbnRlcmFjdGlvbiB0b2tlbiB0byB1c2UsIHByb3ZpZGVkIGluIHRoZSBvcmlnaW5hbCBpbnRlcmFjdGlvbi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIHJlc3BvbnNlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBNZXNzYWdlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVW5saWtlIGBlZGl0TWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0IG5lZWRpbmcgdG8gc2VlIHRoZSBjaGFubmVsIHRoZSBtZXNzYWdlIGlzIGluLlxuICAgKlxuICAgKiBEb2VzIG5vdCBzdXBwb3J0IGVwaGVtZXJhbCBmb2xsb3ctdXAgbWVzc2FnZXMgZHVlIHRvIHRoZXNlIGJlaW5nIHN0YXRlbGVzcy5cbiAgICpcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBVcGRhdGVfIGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvcmVjZWl2aW5nLWFuZC1yZXNwb25kaW5nI2VkaXQtb3JpZ2luYWwtaW50ZXJhY3Rpb24tcmVzcG9uc2V9XG4gICAqL1xuICBlZGl0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlOiAodG9rZW46IHN0cmluZywgb3B0aW9uczogSW50ZXJhY3Rpb25DYWxsYmFja0RhdGEpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+IHwgdW5kZWZpbmVkPlxuICAvKipcbiAgICogRWRpdHMgdGhlIG9yaWdpbmFsIHdlYmhvb2sgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIHdlYmhvb2tJZCAtIFRoZSBJRCBvZiB0aGUgd2ViaG9vayB0byBlZGl0IHRoZSBvcmlnaW5hbCBtZXNzYWdlIG9mLlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgd2ViaG9vayB0b2tlbiwgdXNlZCB0byBlZGl0IHRoZSBtZXNzYWdlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgbWVzc2FnZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZE1lc3NhZ2V9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBGaXJlcyBhIF9NZXNzYWdlIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZWRpdC13ZWJob29rLW1lc3NhZ2V9XG4gICAqL1xuICBlZGl0T3JpZ2luYWxXZWJob29rTWVzc2FnZTogKFxuICAgIHdlYmhvb2tJZDogQmlnU3RyaW5nLFxuICAgIHRva2VuOiBzdHJpbmcsXG4gICAgb3B0aW9uczogSW50ZXJhY3Rpb25DYWxsYmFja0RhdGEgJiB7IHRocmVhZElkPzogQmlnU3RyaW5nIH0sXG4gICkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+XG4gIC8qKlxuICAgKiBFZGl0cyBhIHJvbGUgaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQgdGhlIHJvbGUgaW4uXG4gICAqIEBwYXJhbSByb2xlSWQgLSBUaGUgSUQgb2YgdGhlIHJvbGUgdG8gZWRpdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIHJvbGUuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRSb2xlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIFJvbGUgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjbW9kaWZ5LWd1aWxkLXJvbGV9XG4gICAqL1xuICBlZGl0Um9sZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgcm9sZUlkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEVkaXRHdWlsZFJvbGUpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFJvbGU+PlxuICAvKipcbiAgICogRWRpdHMgdGhlIHBvc2l0aW9ucyBvZiBhIHNldCBvZiByb2xlcy5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQgdGhlIHJvbGUgcG9zaXRpb25zIGluLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgcm9sZSBwb3NpdGlvbnMuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZFJvbGV9IG9iamVjdHMgYXNzb3J0ZWQgYnkgcm9sZSBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIFJvbGUgVXBkYXRlXyBnYXRld2F5IGV2ZW50IGZvciBldmVyeSByb2xlIGltcGFjdGVkIGluIHRoaXMgY2hhbmdlLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjbW9kaWZ5LWd1aWxkLXJvbGUtcG9zaXRpb25zfVxuICAgKi9cbiAgZWRpdFJvbGVQb3NpdGlvbnM6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IE1vZGlmeVJvbGVQb3NpdGlvbnNbXSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkUm9sZVtdPj5cbiAgLyoqXG4gICAqIEVkaXRzIGEgc2NoZWR1bGVkIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZWRpdCB0aGUgc2NoZWR1bGVkIGV2ZW50IGluLlxuICAgKiBAcGFyYW0gZXZlbnRJZCAtIFRoZSBJRCBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50IHRvIGVkaXQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIFNjaGVkdWxlZEV2ZW50fS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfRVZFTlRTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBUbyBzdGFydCBvciBlbmQgYW4gZXZlbnQsIG1vZGlmeSB0aGUgZXZlbnQncyBgc3RhdHVzYCBwcm9wZXJ0eS5cbiAgICpcbiAgICogVGhlIGBlbnRpdHlfbWV0YWRhdGFgIHByb3BlcnR5IGlzIGRpc2NhcmRlZCBmb3IgZXZlbnRzIHdob3NlIGBlbnRpdHlfdHlwZWAgaXMgbm90IHtAbGluayBTY2hlZHVsZWRFdmVudEVudGl0eVR5cGUuRXh0ZXJuYWx9LlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBTY2hlZHVsZWQgRXZlbnQgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQtc2NoZWR1bGVkLWV2ZW50I21vZGlmeS1ndWlsZC1zY2hlZHVsZWQtZXZlbnR9XG4gICAqL1xuICBlZGl0U2NoZWR1bGVkRXZlbnQ6IChndWlsZElkOiBCaWdTdHJpbmcsIGV2ZW50SWQ6IEJpZ1N0cmluZywgb3B0aW9uczogUGFydGlhbDxFZGl0U2NoZWR1bGVkRXZlbnQ+KSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTY2hlZHVsZWRFdmVudD4+XG4gIC8qKlxuICAgKiBFZGl0cyBhIHN0YWdlIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBzdGFnZSBjaGFubmVsIHRoZSBzdGFnZSBpbnN0YW5jZSBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSB1cGRhdGVkIHtAbGluayBEaXNjb3JkU3RhZ2VJbnN0YW5jZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSB1c2VyIHRvIGJlIGEgbW9kZXJhdG9yIG9mIHRoZSBzdGFnZSBjaGFubmVsLlxuICAgKlxuICAgKiBGaXJlcyBhIF9TdGFnZSBJbnN0YW5jZSBVcGRhdGVfIGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvc3RhZ2UtaW5zdGFuY2UjbW9kaWZ5LXN0YWdlLWluc3RhbmNlfVxuICAgKi9cbiAgZWRpdFN0YWdlSW5zdGFuY2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgZGF0YTogRWRpdFN0YWdlSW5zdGFuY2VPcHRpb25zKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTdGFnZUluc3RhbmNlPj5cbiAgLyoqXG4gICAqIEVkaXRzIGEgd2ViaG9vay5cbiAgICpcbiAgICogQHBhcmFtIHdlYmhvb2tJZCAtIFRoZSBJRCBvZiB0aGUgd2ViaG9vayB0byBlZGl0LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkV2ViaG9va30uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1dFQkhPT0tTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9XZWJob29rcyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy93ZWJob29rI2VkaXQtd2ViaG9va31cbiAgICovXG4gIGVkaXRXZWJob29rOiAod2ViaG9va0lkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IE1vZGlmeVdlYmhvb2spID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFdlYmhvb2s+PlxuICAvKipcbiAgICogRWRpdHMgYSB3ZWJob29rIG1lc3NhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZWRpdCB0aGUgbWVzc2FnZSBvZi5cbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIHdlYmhvb2sgdG9rZW4sIHVzZWQgdG8gZWRpdCB0aGUgbWVzc2FnZS5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBlZGl0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgbWVzc2FnZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZE1lc3NhZ2V9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBGaXJlcyBhIF9NZXNzYWdlIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZWRpdC13ZWJob29rLW1lc3NhZ2V9XG4gICAqL1xuICBlZGl0V2ViaG9va01lc3NhZ2U6IChcbiAgICB3ZWJob29rSWQ6IEJpZ1N0cmluZyxcbiAgICB0b2tlbjogc3RyaW5nLFxuICAgIG1lc3NhZ2VJZDogQmlnU3RyaW5nLFxuICAgIG9wdGlvbnM6IEludGVyYWN0aW9uQ2FsbGJhY2tEYXRhICYgeyB0aHJlYWRJZD86IEJpZ1N0cmluZyB9LFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PlxuICAvKipcbiAgICogRWRpdHMgYSB3ZWJob29rIHVzaW5nIHRoZSB3ZWJob29rIHRva2VuLCB0aGVyZWJ5IGJ5cGFzc2luZyB0aGUgbmVlZCBmb3IgYXV0aGVudGljYXRpb24gKyBwZXJtaXNzaW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHdlYmhvb2tJZCAtIFRoZSBJRCBvZiB0aGUgd2ViaG9vayB0byBlZGl0LlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgd2ViaG9vayB0b2tlbiwgdXNlZCB0byBlZGl0IHRoZSB3ZWJob29rLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkV2ViaG9va30uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1dFQkhPT0tTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9XZWJob29rcyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy93ZWJob29rI21vZGlmeS13ZWJob29rLXdpdGgtdG9rZW59XG4gICAqL1xuICBlZGl0V2ViaG9va1dpdGhUb2tlbjogKHdlYmhvb2tJZDogQmlnU3RyaW5nLCB0b2tlbjogc3RyaW5nLCBvcHRpb25zOiBPbWl0PE1vZGlmeVdlYmhvb2ssICdjaGFubmVsSWQnPikgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkV2ViaG9vaz4+XG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhIHdlYmhvb2ssIGNhdXNpbmcgYSBtZXNzYWdlIHRvIGJlIHBvc3RlZCBpbiB0aGUgY2hhbm5lbCBjb25maWd1cmVkIGZvciB0aGUgd2ViaG9vay5cbiAgICpcbiAgICogQHBhcmFtIHdlYmhvb2tJZCAtIFRoZSBJRCBvZiB0aGUgd2ViaG9vayB0byBleGVjdXRlLlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgd2ViaG9vayB0b2tlbiwgdXNlZCB0byBleGVjdXRlIHRoZSB3ZWJob29rLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSB3ZWJob29rLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZE1lc3NhZ2V9LCBvciBgdW5kZWZpbmVkYCBpZiB0aGUge0BsaW5rIEV4ZWN1dGVXZWJob29rLndhaXQgfCB3YWl0fSBwcm9wZXJ0eSBvZiB0aGUge0BsaW5rIG9wdGlvbnN9IG9iamVjdCBwYXJhbWV0ZXIgaXMgc2V0IHRvIGBmYWxzZWAuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIElmIHRoZSB3ZWJob29rIGNoYW5uZWwgaXMgYSBmb3J1bSBjaGFubmVsLCB5b3UgbXVzdCBwcm92aWRlIGEgdmFsdWUgZm9yIGVpdGhlciBgdGhyZWFkSWRgIG9yIGB0aHJlYWROYW1lYC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZXhlY3V0ZS13ZWJob29rfVxuICAgKi9cbiAgZXhlY3V0ZVdlYmhvb2s6ICh3ZWJob29rSWQ6IEJpZ1N0cmluZywgdG9rZW46IHN0cmluZywgb3B0aW9uczogRXhlY3V0ZVdlYmhvb2spID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+IHwgdW5kZWZpbmVkPlxuICAvKipcbiAgICogRm9sbG93cyBhbiBhbm5vdW5jZW1lbnQgY2hhbm5lbCwgYWxsb3dpbmcgbWVzc2FnZXMgcG9zdGVkIHdpdGhpbiBpdCB0byBiZSBjcm9zcy1wb3N0ZWQgaW50byB0aGUgdGFyZ2V0IGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBzb3VyY2VDaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGFubm91bmNlbWVudCBjaGFubmVsIHRvIGZvbGxvdy5cbiAgICogQHBhcmFtIHRhcmdldENoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgdGFyZ2V0IGNoYW5uZWwgLSB0aGUgY2hhbm5lbCB0byBjcm9zcy1wb3N0IHRvLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEZvbGxvd2VkQ2hhbm5lbH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1dFQkhPT0tTYCBwZXJtaXNzaW9uIGluIHRoZSBfX3RhcmdldCBjaGFubmVsX18uXG4gICAqXG4gICAqIEZpcmVzIGEgX1dlYmhvb2tzIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZm9sbG93LWFubm91bmNlbWVudC1jaGFubmVsfVxuICAgKi9cbiAgZm9sbG93QW5ub3VuY2VtZW50OiAoc291cmNlQ2hhbm5lbElkOiBCaWdTdHJpbmcsIHRhcmdldENoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRGb2xsb3dlZENoYW5uZWw+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBhbGwgYWN0aXZlIHRocmVhZHMgZm9yIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHRocmVhZHMgb2YuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkQWN0aXZlVGhyZWFkc30uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJldHVybnMgYm90aCBwdWJsaWMgYW5kIHByaXZhdGUgdGhyZWFkcy5cbiAgICpcbiAgICogVGhyZWFkcyBhcmUgb3JkZXJlZCBieSB0aGUgYGlkYCBwcm9wZXJ0eSBpbiBkZXNjZW5kaW5nIG9yZGVyLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjbGlzdC1hY3RpdmUtZ3VpbGQtdGhyZWFkc31cbiAgICovXG4gIGdldEFjdGl2ZVRocmVhZHM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFjdGl2ZVRocmVhZHM+PlxuICAvKiogR2V0IHRoZSBhcHBsaWNhdGlvbnMgaW5mbyAqL1xuICBnZXRBcHBsaWNhdGlvbkluZm86ICgpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHBlcm1pc3Npb25zIG9mIGEgZ3VpbGQgYXBwbGljYXRpb24gY29tbWFuZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRoZSBjb21tYW5kIGlzIHJlZ2lzdGVyZWQgaW4uXG4gICAqIEBwYXJhbSBjb21tYW5kSWQgLSBUaGUgSUQgb2YgdGhlIGNvbW1hbmQgdG8gZ2V0IHRoZSBwZXJtaXNzaW9ucyBvZi5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb259LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZ2V0LWFwcGxpY2F0aW9uLWNvbW1hbmQtcGVybWlzc2lvbnN9XG4gICAqL1xuICBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBjb21tYW5kSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+PlxuICAvKipcbiAgICogR2V0cyB0aGUgcGVybWlzc2lvbnMgb2YgYWxsIGFwcGxpY2F0aW9uIGNvbW1hbmRzIHJlZ2lzdGVyZWQgaW4gYSBndWlsZCBieSB0aGUgSUQgb2YgdGhlIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBwZXJtaXNzaW9ucyBvYmplY3RzIG9mLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb259IG9iamVjdHMgYXNzb3J0ZWQgYnkgY29tbWFuZCBJRC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2dldC1ndWlsZC1hcHBsaWNhdGlvbi1jb21tYW5kLXBlcm1pc3Npb25zfVxuICAgKi9cbiAgZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zW10+PlxuICAvKipcbiAgICogR2V0cyBhbiBhdXRvbW9kIHJ1bGUgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBydWxlIG9mLlxuICAgKiBAcGFyYW0gcnVsZUlkIC0gVGhlIElEIG9mIHRoZSBydWxlIHRvIGdldC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGV9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2F1dG8tbW9kZXJhdGlvbiNnZXQtYXV0by1tb2RlcmF0aW9uLXJ1bGV9XG4gICAqL1xuICBnZXRBdXRvbW9kUnVsZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgcnVsZUlkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIGF1dG9tb2QgcnVsZXMgZm9yIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHJ1bGVzIGZyb20uXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZX0gb2JqZWN0cyBhc3NvcnRlZCBieSBydWxlIElELlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2F1dG8tbW9kZXJhdGlvbiNsaXN0LWF1dG8tbW9kZXJhdGlvbi1ydWxlcy1mb3ItZ3VpbGR9XG4gICAqL1xuICBnZXRBdXRvbW9kUnVsZXM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZVtdPj5cbiAgLyoqXG4gICAqIEdldHMgYSBjaGFubmVsIGJ5IGl0cyBJRC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBnZXQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkQ2hhbm5lbH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIElmIHRoZSBjaGFubmVsIGlzIGEgdGhyZWFkLCBhIHtAbGluayBUaHJlYWRNZW1iZXJ9IG9iamVjdCBpcyBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNnZXQtY2hhbm5lbH1cbiAgICovXG4gIGdldENoYW5uZWw6IChjaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQ2hhbm5lbD4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIGludml0ZXMgZm9yIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBnZXQgdGhlIGludml0ZXMgb2YuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZEludml0ZU1ldGFkYXRhfSBvYmplY3RzIGFzc29ydGVkIGJ5IGludml0ZSBjb2RlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9DSEFOTkVMU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogT25seSB1c2FibGUgZm9yIGd1aWxkIGNoYW5uZWxzLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNnZXQtY2hhbm5lbC1pbnZpdGVzfVxuICAgKi9cbiAgZ2V0Q2hhbm5lbEludml0ZXM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkSW52aXRlTWV0YWRhdGFbXT4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIGNoYW5uZWxzIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBjaGFubmVscyBvZi5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkQ2hhbm5lbH0gb2JqZWN0cyBhc3NvcnRlZCBieSBjaGFubmVsIElELlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBFeGNsdWRlcyB0aHJlYWRzLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjZ2V0LWd1aWxkLWNoYW5uZWxzfVxuICAgKi9cbiAgZ2V0Q2hhbm5lbHM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZENoYW5uZWxbXT4+XG4gIC8qKlxuICAgKiBHZXRzIGEgbGlzdCBvZiB3ZWJob29rcyBmb3IgYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHdoaWNoIHRvIGdldCB0aGUgd2ViaG9va3Mgb2YuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZFdlYmhvb2t9IG9iamVjdHMgYXNzb3J0ZWQgYnkgd2ViaG9vayBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfV0VCSE9PS1NgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy93ZWJob29rI2dldC1jaGFubmVsLXdlYmhvb2tzfVxuICAgKi9cbiAgZ2V0Q2hhbm5lbFdlYmhvb2tzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFdlYmhvb2tbXT4+XG4gIC8qKlxuICAgKiBHZXRzIG9yIGNyZWF0ZXMgYSBETSBjaGFubmVsIHdpdGggYSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIElEIG9mIHRoZSB1c2VyIHRvIGNyZWF0ZSB0aGUgRE0gY2hhbm5lbCB3aXRoLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZENoYW5uZWx9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvdXNlciNjcmVhdGUtZG19XG4gICAqL1xuICBnZXREbUNoYW5uZWw6ICh1c2VySWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQ2hhbm5lbD4+XG4gIC8qKlxuICAgKiBHZXRzIGFuIGVtb2ppIGJ5IGl0cyBJRC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIGZyb20gd2hpY2ggdG8gZ2V0IHRoZSBlbW9qaS5cbiAgICogQHBhcmFtIGVtb2ppSWQgLSBUaGUgSUQgb2YgdGhlIGVtb2ppIHRvIGdldC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRFbW9qaX0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9lbW9qaSNnZXQtZ3VpbGQtZW1vaml9XG4gICAqL1xuICBnZXRFbW9qaTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgZW1vamlJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRFbW9qaT4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIGVtb2ppcyBmb3IgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHdoaWNoIHRvIGdldCB0aGUgZW1vamlzIG9mLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRFbW9qaX0gb2JqZWN0cyBhc3NvcnRlZCBieSBlbW9qaSBJRC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2Vtb2ppI2xpc3QtZ3VpbGQtZW1vamlzfVxuICAgKi9cbiAgZ2V0RW1vamlzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRFbW9qaVtdPj5cbiAgLyoqXG4gICAqIEdldHMgYSBmb2xsb3ctdXAgbWVzc2FnZSB0byBhbiBpbnRlcmFjdGlvbiBieSB0aGUgSUQgb2YgdGhlIG1lc3NhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSBpbnRlcmFjdGlvbiB0b2tlbiB0byB1c2UsIHByb3ZpZGVkIGluIHRoZSBvcmlnaW5hbCBpbnRlcmFjdGlvbi5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBnZXQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBNZXNzYWdlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVW5saWtlIGBnZXRNZXNzYWdlKClgLCB0aGlzIGVuZHBvaW50IGFsbG93cyB0aGUgYm90IHVzZXIgdG8gYWN0IHdpdGhvdXQ6XG4gICAqIC0gTmVlZGluZyB0byBiZSBhYmxlIHRvIHNlZSB0aGUgY29udGVudHMgb2YgdGhlIGNoYW5uZWwgdGhhdCB0aGUgbWVzc2FnZSBpcyBpbi4gKGBSRUFEX01FU1NBR0VTYCBwZXJtaXNzaW9uLilcbiAgICogLSBSZXF1aXJpbmcgdGhlIGBNRVNTQUdFX0NPTlRFTlRgIGludGVudC5cbiAgICpcbiAgICogRG9lcyBub3Qgc3VwcG9ydCBlcGhlbWVyYWwgZm9sbG93LXVwIG1lc3NhZ2VzIGR1ZSB0byB0aGVzZSBiZWluZyBzdGF0ZWxlc3MuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9yZWNlaXZpbmctYW5kLXJlc3BvbmRpbmcjZ2V0LWZvbGxvd3VwLW1lc3NhZ2V9XG4gICAqL1xuICBnZXRGb2xsb3d1cE1lc3NhZ2U6ICh0b2tlbjogc3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+XG4gIC8qKiBHZXQgdGhlIGJvdHMgR2F0ZXdheSBtZXRhZGF0YSB0aGF0IGNhbiBoZWxwIGR1cmluZyB0aGUgb3BlcmF0aW9uIG9mIGxhcmdlIG9yIHNoYXJkZWQgYm90cy4gKi9cbiAgZ2V0R2F0ZXdheUJvdDogKCkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkR2V0R2F0ZXdheUJvdD4+XG4gIC8qKlxuICAgKiBHZXRzIGEgZ2xvYmFsIGFwcGxpY2F0aW9uIGNvbW1hbmQgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0gY29tbWFuZElkIC0gVGhlIElEIG9mIHRoZSBjb21tYW5kIHRvIGdldC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIEFwcGxpY2F0aW9uQ29tbWFuZH0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNnZXQtZ2xvYmFsLWFwcGxpY2F0aW9uLWNvbW1hbmR9XG4gICAqL1xuICBnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQ6IChjb21tYW5kSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgeW91ciBib3QncyBnbG9iYWwgYXBwbGljYXRpb24gY29tbWFuZHMuXG4gICAqXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgQXBwbGljYXRpb25Db21tYW5kfSBvYmplY3RzIGFzc29ydGVkIGJ5IGNvbW1hbmQgSUQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNnZXQtZ2xvYmFsLWFwcGxpY2F0aW9uLWNvbW1hbmRzfVxuICAgKi9cbiAgZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kczogKCkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+PlxuICAvKipcbiAgICogR2V0cyBhIGd1aWxkIGFwcGxpY2F0aW9uIGNvbW1hbmQgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdGhlIGNvbW1hbmQgaXMgcmVnaXN0ZXJlZCBpbi5cbiAgICogQHBhcmFtIGNvbW1hbmRJZCAtIFRoZSBJRCBvZiB0aGUgY29tbWFuZCB0byBnZXQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBBcHBsaWNhdGlvbkNvbW1hbmR9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZ2V0LWd1aWxkLWFwcGxpY2F0aW9uLWNvbW1hbmR9XG4gICAqL1xuICBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZDogKGNvbW1hbmRJZDogQmlnU3RyaW5nLCBndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIGFwcGxpY2F0aW9uIGNvbW1hbmRzIHJlZ2lzdGVyZWQgYnkgeW91ciBib3QgaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRoZSBjb21tYW5kcyBhcmUgcmVnaXN0ZXJlZCBpbi5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBBcHBsaWNhdGlvbkNvbW1hbmR9IG9iamVjdHMgYXNzb3J0ZWQgYnkgY29tbWFuZCBJRC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2dldC1nbG9iYWwtYXBwbGljYXRpb24tY29tbWFuZHNzfVxuICAgKi9cbiAgZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4+XG4gIC8qKlxuICAgKiBHZXRzIGEgdGVtcGxhdGUgYnkgaXRzIGNvZGUuXG4gICAqXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZUNvZGUgLSBUaGUgY29kZSBvZiB0aGUgdGVtcGxhdGUgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgVGVtcGxhdGV9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkLXRlbXBsYXRlI2dldC1ndWlsZC10ZW1wbGF0ZX1cbiAgICovXG4gIGdldEd1aWxkVGVtcGxhdGU6ICh0ZW1wbGF0ZUNvZGU6IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGVtcGxhdGU+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiB0ZW1wbGF0ZXMgZm9yIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIGxpc3Qgb2YgdGVtcGxhdGVzIGZvci5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBUZW1wbGF0ZX0gb2JqZWN0cyBhc3NvcnRlZCBieSB0ZW1wbGF0ZSBjb2RlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkLXRlbXBsYXRlI2dldC1ndWlsZC10ZW1wbGF0ZXN9XG4gICAqL1xuICBnZXRHdWlsZFRlbXBsYXRlczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGVtcGxhdGVbXT4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIHdlYmhvb2tzIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBsaXN0IG9mIHdlYmhvb2tzIGZvci5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkV2ViaG9va30gb2JqZWN0cyBhc3NvcnRlZCBieSB3ZWJob29rIElELlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9XRUJIT09LU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZ2V0LWd1aWxkLXdlYmhvb2tzfVxuICAgKi9cbiAgZ2V0R3VpbGRXZWJob29rczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkV2ViaG9va1tdPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgaW50ZWdyYXRpb25zIGF0dGFjaGVkIHRvIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIGxpc3Qgb2YgaW50ZWdyYXRpb25zIGZyb20uXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgSW50ZWdyYXRpb259IG9iamVjdHMgYXNzb3J0ZWQgYnkgaW50ZWdyYXRpb24gSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjZ2V0LWd1aWxkLWludGVncmF0aW9uc31cbiAgICovXG4gIGdldEludGVncmF0aW9uczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkSW50ZWdyYXRpb25bXT4+XG4gIC8qKlxuICAgKiBHZXRzIGFuIGludml0ZSB0byBhIGNoYW5uZWwgYnkgaXRzIGludml0ZSBjb2RlLlxuICAgKlxuICAgKiBAcGFyYW0gaW52aXRlQ29kZSAtIFRoZSBpbnZpdGUgY29kZSBvZiB0aGUgaW52aXRlIHRvIGdldC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSBpbnZpdGUuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkSW52aXRlTWV0YWRhdGF9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvaW52aXRlI2dldC1pbnZpdGV9XG4gICAqL1xuICBnZXRJbnZpdGU6IChpbnZpdGVDb2RlOiBzdHJpbmcsIG9wdGlvbnM/OiBHZXRJbnZpdGUpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEludml0ZU1ldGFkYXRhPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgaW52aXRlcyBmb3IgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgaW52aXRlcyBmcm9tLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIEludml0ZU1ldGFkYXRhIHwgSW52aXRlfSBvYmplY3RzIGFzc29ydGVkIGJ5IGludml0ZSBjb2RlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2ludml0ZSNnZXQtaW52aXRlc31cbiAgICovXG4gIGdldEludml0ZXM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEludml0ZU1ldGFkYXRhW10+PlxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBzdGlja2VyIHBhY2tzIGF2YWlsYWJsZSB0byBOaXRybyBzdWJzY3JpYmVycy5cbiAgICpcbiAgICogQHBhcmFtIGJvdCBUaGUgYm90IGluc3RhbmNlIHRvIHVzZSB0byBtYWtlIHRoZSByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIFN0aWNrZXJQYWNrfSBvYmplY3RzIGFzc29ydGVkIGJ5IHN0aWNrZXIgSUQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9zdGlja2VyI2xpc3Qtbml0cm8tc3RpY2tlci1wYWNrc31cbiAgICovXG4gIGdldE5pdHJvU3RpY2tlclBhY2tzOiAoKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTdGlja2VyUGFja1tdPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGluaXRpYWwgbWVzc2FnZSByZXNwb25zZSB0byBhbiBpbnRlcmFjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIGludGVyYWN0aW9uIHRva2VuIHRvIHVzZSwgcHJvdmlkZWQgaW4gdGhlIG9yaWdpbmFsIGludGVyYWN0aW9uLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFVubGlrZSBgZ2V0TWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0OlxuICAgKiAtIE5lZWRpbmcgdG8gYmUgYWJsZSB0byBzZWUgdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFubmVsIHRoYXQgdGhlIG1lc3NhZ2UgaXMgaW4uIChgUkVBRF9NRVNTQUdFU2AgcGVybWlzc2lvbi4pXG4gICAqIC0gUmVxdWlyaW5nIHRoZSBgTUVTU0FHRV9DT05URU5UYCBpbnRlbnQuXG4gICAqXG4gICAqIERvZXMgbm90IHN1cHBvcnQgZXBoZW1lcmFsIGZvbGxvdy11cCBtZXNzYWdlcyBkdWUgdG8gdGhlc2UgYmVpbmcgc3RhdGVsZXNzLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvcmVjZWl2aW5nLWFuZC1yZXNwb25kaW5nI2dldC1vcmlnaW5hbC1pbnRlcmFjdGlvbi1yZXNwb25zZX1cbiAgICovXG4gIGdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZTogKHRva2VuOiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBwcml2YXRlIGFyY2hpdmVkIHRocmVhZHMgZm9yIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBnZXQgdGhlIGFyY2hpdmVkIHRocmVhZHMgZm9yLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhyZWFkcy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRBcmNoaXZlZFRocmVhZHN9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYFJFQURfTUVTU0FHRV9ISVNUT1JZYCBwZXJtaXNzaW9uLlxuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9USFJFQURTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBSZXR1cm5zIHRocmVhZHMgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzLkd1aWxkUHJpdmF0ZVRocmVhZH0uXG4gICAqXG4gICAqIFRocmVhZHMgYXJlIG9yZGVyZWQgYnkgdGhlIGBhcmNoaXZlX3RpbWVzdGFtcGAgcHJvcGVydHkgaW5jbHVkZWQgaW4gdGhlIG1ldGFkYXRhIG9mIHRoZSBvYmplY3QgaW4gZGVzY2VuZGluZyBvcmRlci5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjbGlzdC1wcml2YXRlLWFyY2hpdmVkLXRocmVhZHN9XG4gICAqL1xuICBnZXRQcml2YXRlQXJjaGl2ZWRUaHJlYWRzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBMaXN0QXJjaGl2ZWRUaHJlYWRzKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcmNoaXZlZFRocmVhZHM+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBwcml2YXRlIGFyY2hpdmVkIHRocmVhZHMgdGhlIGJvdCBpcyBhIG1lbWJlciBvZiBmb3IgYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGdldCB0aGUgYXJjaGl2ZWQgdGhyZWFkcyBmb3IuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aHJlYWRzLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEFyY2hpdmVkVGhyZWFkc30uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgUkVBRF9NRVNTQUdFX0hJU1RPUllgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIFJldHVybnMgdGhyZWFkcyBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXMuR3VpbGRQcml2YXRlVGhyZWFkfS5cbiAgICpcbiAgICogVGhyZWFkcyBhcmUgb3JkZXJlZCBieSB0aGUgYGlkYCBwcm9wZXJ0eSBpbiBkZXNjZW5kaW5nIG9yZGVyLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNsaXN0LWpvaW5lZC1wcml2YXRlLWFyY2hpdmVkLXRocmVhZHN9XG4gICAqL1xuICBnZXRQcml2YXRlSm9pbmVkQXJjaGl2ZWRUaHJlYWRzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBMaXN0QXJjaGl2ZWRUaHJlYWRzKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcmNoaXZlZFRocmVhZHM+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBwdWJsaWMgYXJjaGl2ZWQgdGhyZWFkcyBmb3IgYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGdldCB0aGUgYXJjaGl2ZWQgdGhyZWFkcyBmb3IuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aHJlYWRzLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgQXJjaGl2ZWRUaHJlYWRzfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogSWYgY2FsbGVkIG9uIGEgY2hhbm5lbCBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXMuR3VpbGRUZXh0fSwgcmV0dXJucyB0aHJlYWRzIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlcy5HdWlsZFB1YmxpY1RocmVhZH0uXG4gICAqIElmIGNhbGxlZCBvbiBhIGNoYW5uZWwgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzLkd1aWxkTmV3c30sIHJldHVybnMgdGhyZWFkcyBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXMuR3VpbGROZXdzVGhyZWFkfS5cbiAgICpcbiAgICogVGhyZWFkcyBhcmUgb3JkZXJlZCBieSB0aGUgYGFyY2hpdmVfdGltZXN0YW1wYCBwcm9wZXJ0eSBpbmNsdWRlZCBpbiB0aGUgbWV0YWRhdGEgb2YgdGhlIG9iamVjdCBpbiBkZXNjZW5kaW5nIG9yZGVyLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNsaXN0LXB1YmxpYy1hcmNoaXZlZC10aHJlYWRzfVxuICAgKi9cbiAgZ2V0UHVibGljQXJjaGl2ZWRUaHJlYWRzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBMaXN0QXJjaGl2ZWRUaHJlYWRzKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcmNoaXZlZFRocmVhZHM+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiByb2xlcyBmb3IgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgbGlzdCBvZiByb2xlcyBmb3IuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzb3JjUm9sZX0gb2JqZWN0cyBhc3NvcnRlZCBieSByb2xlIElELlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiDimqDvuI8gVGhpcyBlbmRwb2ludCBzaG91bGQgYmUgdXNlZCBzcGFyaW5nbHkgZHVlIHRvIHtAbGluayBVc2VyfSBvYmplY3RzIGFscmVhZHkgYmVpbmcgaW5jbHVkZWQgaW4gZ3VpbGQgcGF5bG9hZHMuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNnZXQtZ3VpbGQtcm9sZXN9XG4gICAqL1xuICBnZXRSb2xlczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkUm9sZVtdPj5cbiAgLyoqXG4gICAqIEdldHMgYSBzY2hlZHVsZWQgZXZlbnQgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBzY2hlZHVsZWQgZXZlbnQgZnJvbS5cbiAgICogQHBhcmFtIGV2ZW50SWQgLSBUaGUgSUQgb2YgdGhlIHNjaGVkdWxlZCBldmVudCB0byBnZXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgU2NoZWR1bGVkRXZlbnR9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQtc2NoZWR1bGVkLWV2ZW50I2dldC1ndWlsZC1zY2hlZHVsZWQtZXZlbnR9XG4gICAqL1xuICBnZXRTY2hlZHVsZWRFdmVudDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgZXZlbnRJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogeyB3aXRoVXNlckNvdW50PzogYm9vbGVhbiB9KSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTY2hlZHVsZWRFdmVudD4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIHNjaGVkdWxlZCBldmVudHMgZm9yIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHNjaGVkdWxlZCBldmVudHMgZnJvbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnRzLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIFNjaGVkdWxlZEV2ZW50fSBvYmplY3RzIGFzc29ydGVkIGJ5IGV2ZW50IElELlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQtc2NoZWR1bGVkLWV2ZW50I2xpc3Qtc2NoZWR1bGVkLWV2ZW50cy1mb3ItZ3VpbGR9XG4gICAqL1xuICBnZXRTY2hlZHVsZWRFdmVudHM6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBHZXRTY2hlZHVsZWRFdmVudHMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFNjaGVkdWxlZEV2ZW50W10+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBzdWJzY3JpYmVycyB0byBhIHNjaGVkdWxlZCBldmVudCBmcm9tIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHN1YnNjcmliZXJzIHRvIHRoZSBzY2hlZHVsZWQgZXZlbnQgZnJvbS5cbiAgICogQHBhcmFtIGV2ZW50SWQgLSBUaGUgSUQgb2YgdGhlIHNjaGVkdWxlZCBldmVudCB0byBnZXQgdGhlIHN1YnNjcmliZXJzIG9mLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIHN1YnNjcmliZXJzLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIFVzZXJ9IG9iamVjdHMgYXNzb3J0ZWQgYnkgdXNlciBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfRVZFTlRTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBVc2VycyBhcmUgb3JkZXJlZCBieSB0aGVpciBJRHMgaW4gX2FzY2VuZGluZ18gb3JkZXIuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC1zY2hlZHVsZWQtZXZlbnQjZ2V0LWd1aWxkLXNjaGVkdWxlZC1ldmVudC11c2Vyc31cbiAgICovXG4gIGdldFNjaGVkdWxlZEV2ZW50VXNlcnM6IChcbiAgICBndWlsZElkOiBCaWdTdHJpbmcsXG4gICAgZXZlbnRJZDogQmlnU3RyaW5nLFxuICAgIG9wdGlvbnM/OiBHZXRTY2hlZHVsZWRFdmVudFVzZXJzLFxuICApID0+IFByb21pc2U8QXJyYXk8eyB1c2VyOiBDYW1lbGl6ZTxEaXNjb3JkVXNlcj47IG1lbWJlcj86IENhbWVsaXplPERpc2NvcmRNZW1iZXI+IH0+PlxuICAvKiogR2V0IHRoZSBib3RzIEdhdGV3YXkgbWV0YWRhdGEgdGhhdCBjYW4gaGVscCBkdXJpbmcgdGhlIG9wZXJhdGlvbiBvZiBsYXJnZSBvciBzaGFyZGVkIGJvdHMuICovXG4gIGdldFNlc3Npb25JbmZvOiAoKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRHZXRHYXRld2F5Qm90Pj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHN0YWdlIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCBhIHN0YWdlIGNoYW5uZWwsIGlmIG9uZSBleGlzdHMuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIHN0YWdlIGNoYW5uZWwgdGhlIHN0YWdlIGluc3RhbmNlIGlzIGFzc29jaWF0ZWQgd2l0aC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRTdGFnZUluc3RhbmNlfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3N0YWdlLWluc3RhbmNlI2dldC1zdGFnZS1pbnN0YW5jZX1cbiAgICovXG4gIGdldFN0YWdlSW5zdGFuY2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4+XG4gIC8qKlxuICAgKiBHZXRzIGEgdGhyZWFkIG1lbWJlciBieSB0aGVpciB1c2VyIElELlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSB0aHJlYWQgdG8gZ2V0IHRoZSB0aHJlYWQgbWVtYmVyIG9mLlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIHVzZXIgSUQgb2YgdGhlIHRocmVhZCBtZW1iZXIgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZFRocmVhZE1lbWJlcn0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2dldC10aHJlYWQtbWVtYmVyfVxuICAgKi9cbiAgZ2V0VGhyZWFkTWVtYmVyOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRUaHJlYWRNZW1iZXI+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiB0aHJlYWQgbWVtYmVycyBmb3IgYSB0aHJlYWQuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIHRocmVhZCB0byBnZXQgdGhlIHRocmVhZCBtZW1iZXJzIG9mLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRUaHJlYWRNZW1iZXJ9IGFzc29ydGVkIGJ5IHVzZXIgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBhcHBsaWNhdGlvbiB0byBoYXZlIHRoZSBgR1VJTERfTUVNQkVSU2AgcHJpdmlsZWdlZCBpbnRlbnQgZW5hYmxlZC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjbGlzdC10aHJlYWQtbWVtYmVyc31cbiAgICovXG4gIGdldFRocmVhZE1lbWJlcnM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGhyZWFkTWVtYmVyW10+PlxuICAvKipcbiAgICogR2V0IGEgdXNlcidzIGRhdGEgZnJvbSB0aGUgYXBpXG4gICAqXG4gICAqIEBwYXJhbSBpZCBUaGUgdXNlcidzIGlkXG4gICAqIEByZXR1cm5zIHtDYW1lbGl6ZTxEaXNjb3JkVXNlcj59XG4gICAqL1xuICBnZXRVc2VyOiAoaWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVXNlcj4+XG4gIC8qKlxuICAgKiBHZXRzIGEgd2ViaG9vayBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZFdlYmhvb2t9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9XRUJIT09LU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZ2V0LXdlYmhvb2t9XG4gICAqL1xuICBnZXRXZWJob29rOiAod2ViaG9va0lkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFdlYmhvb2s+PlxuICAvKipcbiAgICogR2V0cyBhIHdlYmhvb2sgbWVzc2FnZSBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZ2V0IGEgbWVzc2FnZSBvZi5cbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIHdlYmhvb2sgdG9rZW4sIHVzZWQgdG8gZ2V0IHdlYmhvb2sgbWVzc2FnZXMuXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSB0aGUgSUQgb2YgdGhlIHdlYmhvb2sgbWVzc2FnZSB0byBnZXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgbWVzc2FnZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRNZXNzYWdlfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZ2V0LXdlYmhvb2stbWVzc2FnZX1cbiAgICovXG4gIGdldFdlYmhvb2tNZXNzYWdlOiAoXG4gICAgd2ViaG9va0lkOiBCaWdTdHJpbmcsXG4gICAgdG9rZW46IHN0cmluZyxcbiAgICBtZXNzYWdlSWQ6IEJpZ1N0cmluZyxcbiAgICBvcHRpb25zPzogR2V0V2ViaG9va01lc3NhZ2VPcHRpb25zLFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PlxuICAvKipcbiAgICogR2V0cyBhIHdlYmhvb2sgdXNpbmcgdGhlIHdlYmhvb2sgdG9rZW4sIHRoZXJlYnkgYnlwYXNzaW5nIHRoZSBuZWVkIGZvciBhdXRoZW50aWNhdGlvbiArIHBlcm1pc3Npb25zLlxuICAgKlxuICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGdldC5cbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIHdlYmhvb2sgdG9rZW4sIHVzZWQgdG8gZ2V0IHRoZSB3ZWJob29rLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZFdlYmhvb2t9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNnZXQtd2ViaG9vay13aXRoLXRva2VufVxuICAgKi9cbiAgZ2V0V2ViaG9va1dpdGhUb2tlbjogKHdlYmhvb2tJZDogQmlnU3RyaW5nLCB0b2tlbjogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRXZWJob29rPj5cbiAgLyoqXG4gICAqIEFkZHMgdGhlIGJvdCB1c2VyIHRvIGEgdGhyZWFkLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSB0aHJlYWQgdG8gYWRkIHRoZSBib3QgdXNlciB0by5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIHRocmVhZCBub3QgYmUgYXJjaGl2ZWQuXG4gICAqXG4gICAqIEZpcmVzIGEgX1RocmVhZCBNZW1iZXJzIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjam9pbi10aHJlYWR9XG4gICAqL1xuICBqb2luVGhyZWFkOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGJvdCB1c2VyIGZyb20gYSB0aHJlYWQuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIHRocmVhZCB0byByZW1vdmUgdGhlIGJvdCB1c2VyIGZyb20uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSB0aHJlYWQgbm90IGJlIGFyY2hpdmVkLlxuICAgKlxuICAgKiBGaXJlcyBhIF9UaHJlYWQgTWVtYmVycyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2xlYXZlLXRocmVhZH1cbiAgICovXG4gIGxlYXZlVGhyZWFkOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIENyb3NzLXBvc3RzIGEgbWVzc2FnZSBwb3N0ZWQgaW4gYW4gYW5ub3VuY2VtZW50IGNoYW5uZWwgdG8gc3Vic2NyaWJlZCBjaGFubmVscy5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgYW5ub3VuY2VtZW50IGNoYW5uZWwuXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gY3Jvc3MtcG9zdC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyb3NzLXBvc3RlZCB7QGxpbmsgTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgU0VORF9NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogSWYgbm90IGNyb3NzLXBvc3Rpbmcgb3duIG1lc3NhZ2U6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBNQU5BR0VfTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgQ3JlYXRlXyBldmVudCBpbiB0aGUgZ3VpbGRzIHRoZSBzdWJzY3JpYmVkIGNoYW5uZWxzIGFyZSBpbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjY3Jvc3Nwb3N0LW1lc3NhZ2V9XG4gICAqL1xuICBwdWJsaXNoTWVzc2FnZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+XG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgcm9sZSBmcm9tIGEgbWVtYmVyLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdGhlIG1lbWJlciB0byByZW1vdmUgdGhlIHJvbGUgZnJvbSBpcyBpbi5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSB1c2VyIElEIG9mIHRoZSBtZW1iZXIgdG8gcmVtb3ZlIHRoZSByb2xlIGZyb20uXG4gICAqIEBwYXJhbSByb2xlSWQgLSBUaGUgSUQgb2YgdGhlIHJvbGUgdG8gcmVtb3ZlIGZyb20gdGhlIG1lbWJlci5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIE1lbWJlciBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNyZW1vdmUtZ3VpbGQtbWVtYmVyLXJvbGV9XG4gICAqL1xuICByZW1vdmVSb2xlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZywgcm9sZUlkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogUmVtb3ZlcyBhIG1lbWJlciBmcm9tIGEgdGhyZWFkLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSB0aHJlYWQgdG8gcmVtb3ZlIHRoZSB0aHJlYWQgbWVtYmVyIG9mLlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIHVzZXIgSUQgb2YgdGhlIHRocmVhZCBtZW1iZXIgdG8gcmVtb3ZlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiB0aGUgdGhyZWFkIGlzIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlcy5HdWlsZFByaXZhdGVUaHJlYWR9LCByZXF1aXJlcyB0byBiZSB0aGUgY3JlYXRvciBvZiB0aGUgdGhyZWFkLlxuICAgKiBPdGhlcndpc2UsIHJlcXVpcmVzIHRoZSBgTUFOQUdFX1RIUkVBRFNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIFJlcXVpcmVzIHRoZSB0aHJlYWQgbm90IGJlIGFyY2hpdmVkLlxuICAgKlxuICAgKiBGaXJlcyBhIF9UaHJlYWQgTWVtYmVycyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI3JlbW92ZS10aHJlYWQtbWVtYmVyfVxuICAgKi9cbiAgcmVtb3ZlVGhyZWFkTWVtYmVyOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBTZW5kcyBhIG1lc3NhZ2UgdG8gYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIHNlbmQgdGhlIG1lc3NhZ2UgaW4uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgbWVzc2FnZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRNZXNzYWdlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhhdCB0aGUgYm90IHVzZXIgYmUgYWJsZSB0byBzZWUgdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFubmVsIHRoZSBtZXNzYWdlIGlzIHRvIGJlIHNlbnQgaW4uXG4gICAqXG4gICAqIElmIHNlbmRpbmcgYSBtZXNzYWdlIHRvIGEgZ3VpbGQgY2hhbm5lbDpcbiAgICogLSBSZXF1aXJlcyB0aGUgYFNFTkRfTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIElmIHNlbmRpbmcgYSBUVFMgbWVzc2FnZTpcbiAgICogLSBSZXF1aXJlcyB0aGUgYFNFTkRfVFRTX01FU1NBR0VTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBJZiBzZW5kaW5nIGEgbWVzc2FnZSBhcyBhIHJlcGx5IHRvIGFub3RoZXIgbWVzc2FnZTpcbiAgICogLSBSZXF1aXJlcyB0aGUgYFJFQURfTUVTU0FHRV9ISVNUT1JZYCBwZXJtaXNzaW9uLlxuICAgKiAtIFRoZSBtZXNzYWdlIGJlaW5nIHJlcGxpZWQgdG8gY2Fubm90IGJlIGEgc3lzdGVtIG1lc3NhZ2UuXG4gICAqXG4gICAqIOKaoO+4jyBUaGUgbWF4aW11bSBzaXplIG9mIGEgcmVxdWVzdCAoYWNjb3VudGluZyBmb3IgYW55IGF0dGFjaG1lbnRzIGFuZCBtZXNzYWdlIGNvbnRlbnQpIGZvciBib3QgdXNlcnMgaXMgXzggTWlCXy5cbiAgICpcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2NyZWF0ZS1tZXNzYWdlfVxuICAgKi9cbiAgc2VuZE1lc3NhZ2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlTWVzc2FnZU9wdGlvbnMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PlxuICAvKipcbiAgICogU2VuZHMgYSBmb2xsb3ctdXAgbWVzc2FnZSB0byBhbiBpbnRlcmFjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIGludGVyYWN0aW9uIHRva2VuIHRvIHVzZSwgcHJvdmlkZWQgaW4gdGhlIG9yaWdpbmFsIGludGVyYWN0aW9uLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIG1lc3NhZ2UuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBNZXNzYWdlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICog4pqg77iPIEludGVyYWN0aW9uIHRva2VucyBhcmUgb25seSB2YWxpZCBmb3IgXzE1IG1pbnV0ZXNfLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBtZW50aW9ucyBhcmUgc3VwcHJlc3NlZC4gVG8gZW5hYmxlIG1lbnRpb25zLCBwYXNzIGEgbWVudGlvbiBvYmplY3Qgd2l0aCB0aGUgY2FsbGJhY2sgZGF0YS5cbiAgICpcbiAgICogVW5saWtlIGBzZW5kTWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0OlxuICAgKiAtIE5lZWRpbmcgdG8gYmUgYWJsZSB0byBzZWUgdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFubmVsIHRoYXQgdGhlIG1lc3NhZ2UgaXMgaW4uIChgUkVBRF9NRVNTQUdFU2AgcGVybWlzc2lvbi4pXG4gICAqIC0gUmVxdWlyaW5nIHRoZSBgTUVTU0FHRV9DT05URU5UYCBpbnRlbnQuXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgQ3JlYXRlXyBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL3JlY2VpdmluZy1hbmQtcmVzcG9uZGluZyNjcmVhdGUtZm9sbG93dXAtbWVzc2FnZX1cbiAgICovXG4gIHNlbmRGb2xsb3d1cE1lc3NhZ2U6ICh0b2tlbjogc3RyaW5nLCBvcHRpb25zOiBJbnRlcmFjdGlvbkNhbGxiYWNrRGF0YSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+XG4gIC8qKlxuICAgKiBTZW5kcyBhIHJlc3BvbnNlIHRvIGFuIGludGVyYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gaW50ZXJhY3Rpb25JZCAtIFRoZSBJRCBvZiB0aGUgaW50ZXJhY3Rpb24gdG8gcmVzcG9uZCB0by5cbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIGludGVyYWN0aW9uIHRva2VuIHRvIHVzZSwgcHJvdmlkZWQgaW4gdGhlIG9yaWdpbmFsIGludGVyYWN0aW9uLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIG1lc3NhZ2UuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBNZXNzYWdlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICog4pqg77iPIEludGVyYWN0aW9uIHRva2VucyBhcmUgb25seSB2YWxpZCBmb3IgXzE1IG1pbnV0ZXNfLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBtZW50aW9ucyBhcmUgc3VwcHJlc3NlZC4gVG8gZW5hYmxlIG1lbnRpb25zLCBwYXNzIGEgbWVudGlvbiBvYmplY3Qgd2l0aCB0aGUgY2FsbGJhY2sgZGF0YS5cbiAgICpcbiAgICogVW5saWtlIGBzZW5kTWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0OlxuICAgKiAtIE5lZWRpbmcgdG8gYmUgYWJsZSB0byBzZWUgdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFubmVsIHRoYXQgdGhlIG1lc3NhZ2UgaXMgaW4uIChgUkVBRF9NRVNTQUdFU2AgcGVybWlzc2lvbi4pXG4gICAqIC0gUmVxdWlyaW5nIHRoZSBgTUVTU0FHRV9DT05URU5UYCBpbnRlbnQuXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgQ3JlYXRlXyBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL3JlY2VpdmluZy1hbmQtcmVzcG9uZGluZyNjcmVhdGUtaW50ZXJhY3Rpb24tcmVzcG9uc2V9XG4gICAqL1xuICBzZW5kSW50ZXJhY3Rpb25SZXNwb25zZTogKGludGVyYWN0aW9uSWQ6IEJpZ1N0cmluZywgdG9rZW46IHN0cmluZywgb3B0aW9uczogSW50ZXJhY3Rpb25SZXNwb25zZSkgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogQ3JlYXRlcyBhIHRocmVhZCwgdXNpbmcgYW4gZXhpc3RpbmcgbWVzc2FnZSBhcyBpdHMgcG9pbnQgb2Ygb3JpZ2luLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIGluIHdoaWNoIHRvIGNyZWF0ZSB0aGUgdGhyZWFkLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIHVzZSBhcyB0aGUgdGhyZWFkJ3MgcG9pbnQgb2Ygb3JpZ2luLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIHRvIHVzZSBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSB0aHJlYWQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBDaGFubmVsIHwgVGhyZWFkfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSWYgY2FsbGVkIG9uIGEgY2hhbm5lbCBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXMuR3VpbGRUZXh0fSwgY3JlYXRlcyBhIHtAbGluayBDaGFubmVsVHlwZXMuR3VpbGRQdWJsaWNUaHJlYWR9LlxuICAgKiBJZiBjYWxsZWQgb24gYSBjaGFubmVsIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlcy5HdWlsZE5ld3N9LCBjcmVhdGVzIGEge0BsaW5rIENoYW5uZWxUeXBlcy5HdWlsZE5ld3NUaHJlYWR9LlxuICAgKiBEb2VzIG5vdCB3b3JrIG9uIGNoYW5uZWxzIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlcy5HdWlsZEZvcnVtfS5cbiAgICpcbiAgICogVGhlIElEIG9mIHRoZSBjcmVhdGVkIHRocmVhZCB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSBJRCBvZiB0aGUgc291cmNlIG1lc3NhZ2UuXG4gICAqXG4gICAqIEZpcmVzIGEgX1RocmVhZCBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI3N0YXJ0LXRocmVhZC1mcm9tLW1lc3NhZ2V9XG4gICAqL1xuICBzdGFydFRocmVhZFdpdGhNZXNzYWdlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBTdGFydFRocmVhZFdpdGhNZXNzYWdlKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRDaGFubmVsPj5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0aHJlYWQgd2l0aG91dCB1c2luZyBhIG1lc3NhZ2UgYXMgdGhlIHRocmVhZCdzIHBvaW50IG9mIG9yaWdpbi5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCBpbiB3aGljaCB0byBjcmVhdGUgdGhlIHRocmVhZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyB0byB1c2UgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgdGhyZWFkLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZENoYW5uZWwgfCBUaHJlYWR9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBDcmVhdGluZyBhIHByaXZhdGUgdGhyZWFkIHJlcXVpcmVzIHRoZSBzZXJ2ZXIgdG8gYmUgYm9vc3RlZC5cbiAgICpcbiAgICogRmlyZXMgYSBfVGhyZWFkIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjc3RhcnQtdGhyZWFkLXdpdGhvdXQtbWVzc2FnZX1cbiAgICovXG4gIHN0YXJ0VGhyZWFkV2l0aG91dE1lc3NhZ2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogU3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQ2hhbm5lbD4+XG4gIC8qKlxuICAgKiBTeW5jaHJvbmlzZXMgYSB0ZW1wbGF0ZSB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBzeW5jaHJvbmlzZSBhIHRlbXBsYXRlIG9mLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBUZW1wbGF0ZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC10ZW1wbGF0ZSNnZXQtZ3VpbGQtdGVtcGxhdGVzfVxuICAgKi9cbiAgc3luY0d1aWxkVGVtcGxhdGU6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgdHlwaW5nIGluZGljYXRvciBmb3IgdGhlIGJvdCB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIGluIHdoaWNoIHRvIHRyaWdnZXIgdGhlIHR5cGluZyBpbmRpY2F0b3IuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEdlbmVyYWxseSwgYm90cyBzaG91bGQgX25vdF8gdXNlIHRoaXMgcm91dGUuXG4gICAqXG4gICAqIEZpcmVzIGEgX1R5cGluZyBTdGFydF8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjdHJpZ2dlci10eXBpbmctaW5kaWNhdG9yfVxuICAgKi9cbiAgdHJpZ2dlclR5cGluZ0luZGljYXRvcjogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBSZS1yZWdpc3RlcnMgdGhlIGxpc3Qgb2YgZ2xvYmFsIGFwcGxpY2F0aW9uIGNvbW1hbmRzLCBvdmVyd3JpdGluZyB0aGUgcHJldmlvdXMgY29tbWFuZHMgY29tcGxldGVseS5cbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmRzIC0gVGhlIGxpc3Qgb2YgY29tbWFuZHMgdG8gdXNlIHRvIG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgbGlzdC5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBBcHBsaWNhdGlvbkNvbW1hbmR9IG9iamVjdHMgYXNzb3J0ZWQgYnkgY29tbWFuZCBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICog4p2XIENvbW1hbmRzIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBgY29tbWFuZHNgIGFycmF5IHdpbGwgYmUgX19kZWxldGVkX18uXG4gICAqXG4gICAqIOKaoO+4jyBDb21tYW5kcyB0aGF0IGRvIG5vdCBhbHJlYWR5IGV4aXN0IHdpbGwgY291bnQgdG93YXJkcyB0aGUgZGFpbHkgbGltaXQgb2YgXzIwMF8gbmV3IGNvbW1hbmRzLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjYnVsay1vdmVyd3JpdGUtZ2xvYmFsLWFwcGxpY2F0aW9uLWNvbW1hbmRzfVxuICAgKi9cbiAgdXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kczogKGNvbW1hbmRzOiBDcmVhdGVBcHBsaWNhdGlvbkNvbW1hbmRbXSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+PlxuICAvKipcbiAgICogUmUtcmVnaXN0ZXJzIHRoZSBsaXN0IG9mIGFwcGxpY2F0aW9uIGNvbW1hbmRzIHJlZ2lzdGVyZWQgaW4gYSBndWlsZCwgb3ZlcndyaXRpbmcgdGhlIHByZXZpb3VzIGNvbW1hbmRzIGNvbXBsZXRlbHkuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB3aG9zZSBsaXN0IG9mIGNvbW1hbmRzIHRvIG92ZXJ3cml0ZS5cbiAgICogQHBhcmFtIGNvbW1hbmRzIC0gVGhlIGxpc3Qgb2YgY29tbWFuZHMgdG8gdXNlIHRvIG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgbGlzdC5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBBcHBsaWNhdGlvbkNvbW1hbmR9IG9iamVjdHMgYXNzb3J0ZWQgYnkgY29tbWFuZCBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICog4p2XIENvbW1hbmRzIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBgY29tbWFuZHNgIGFycmF5IHdpbGwgYmUgX19kZWxldGVkX18uXG4gICAqXG4gICAqIOKaoO+4jyBDb21tYW5kcyB0aGF0IGRvIG5vdCBhbHJlYWR5IGV4aXN0IHdpbGwgY291bnQgdG93YXJkcyB0aGUgZGFpbHkgbGltaXQgb2YgXzIwMF8gbmV3IGNvbW1hbmRzLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjYnVsay1vdmVyd3JpdGUtZ3VpbGQtYXBwbGljYXRpb24tY29tbWFuZHN9XG4gICAqL1xuICB1cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHM6IChndWlsZElkOiBCaWdTdHJpbmcsIGNvbW1hbmRzOiBDcmVhdGVBcHBsaWNhdGlvbkNvbW1hbmRbXSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+PlxuICAvKipcbiAqIEJhbnMgYSB1c2VyIGZyb20gYSBndWlsZC5cbiAqXG5cbiAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBiYW4gdGhlIHVzZXIgZnJvbS5cbiAqIEBwYXJhbSB1c2VySWQgLSBUaGUgSUQgb2YgdGhlIHVzZXIgdG8gYmFuIGZyb20gdGhlIGd1aWxkLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBiYW4uXG4gKlxuICogQHJlbWFya3NcbiAqIFJlcXVpcmVzIHRoZSBgQkFOX01FTUJFUlNgIHBlcm1pc3Npb24uXG4gKlxuICogRmlyZXMgYSBfR3VpbGQgQmFuIEFkZF8gZ2F0ZXdheSBldmVudC5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjY3JlYXRlLWd1aWxkLWJhbn1cbiAqL1xuICBiYW5NZW1iZXI6IChndWlsZElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogQ3JlYXRlR3VpbGRCYW4pID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIEVkaXRzIHRoZSBuaWNrbmFtZSBvZiB0aGUgYm90IHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBlZGl0IHRoZSBuaWNrbmFtZSBvZiB0aGUgYm90IHVzZXIgaW4uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBuaWNrbmFtZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZE1lbWJlcn1cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRmlyZXMgYSBfR3VpbGQgTWVtYmVyIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI21vZGlmeS1jdXJyZW50LW1lbWJlcn1cbiAgICovXG4gIGVkaXRCb3RNZW1iZXI6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEVkaXRCb3RNZW1iZXJPcHRpb25zKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZW1iZXI+PlxuICAvKipcbiAgICogRWRpdHMgYSBtZW1iZXIncyBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZWRpdCB0aGUgbWVtYmVyIG9mLlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIHVzZXIgSUQgb2YgdGhlIG1lbWJlciB0byBlZGl0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgdXNlci5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyBlbmRwb2ludCByZXF1aXJlcyB2YXJpb3VzIHBlcm1pc3Npb25zIGRlcGVuZGluZyBvbiB3aGF0IGlzIGVkaXRlZCBhYm91dCB0aGUgbWVtYmVyLlxuICAgKiBUbyBmaW5kIG91dCB0aGUgcmVxdWlyZWQgcGVybWlzc2lvbiB0byBlbmFjdCBhIGNoYW5nZSwgcmVhZCB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGlzIGVuZHBvaW50J3Mge0BsaW5rIE1vZGlmeUd1aWxkTWVtYmVyIHwgcGFyYW1ldGVyc30uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIE1lbWJlciBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNtb2RpZnktZ3VpbGQtbWVtYmVyfVxuICAgKi9cbiAgZWRpdE1lbWJlcjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IE1vZGlmeUd1aWxkTWVtYmVyKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZW1iZXI+PlxuICAvKipcbiAqIEdldHMgdGhlIG1lbWJlciBvYmplY3QgYnkgdXNlciBJRC5cbiAqXG5cbiAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIG1lbWJlciBvYmplY3QgZm9yLlxuICogQHBhcmFtIHVzZXJJZCAtIFRoZSBJRCBvZiB0aGUgdXNlciB0byBnZXQgdGhlIG1lbWJlciBvYmplY3QgZm9yLlxuICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRNZW1iZXJXaXRoVXNlcn0uXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC1tZW1iZXJ9XG4gKi9cbiAgZ2V0TWVtYmVyOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBtZW1iZXJzIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBsaXN0IG9mIG1lbWJlcnMgZm9yLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIG1lbWJlcnMuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZE1lbWJlcldpdGhVc2VyfSBvYmplY3RzIGFzc29ydGVkIGJ5IHVzZXIgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgR1VJTERfTUVNQkVSU2AgaW50ZW50LlxuICAgKlxuICAgKiDimqDvuI8gSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIHVzZSB0aGlzIGVuZHBvaW50IHdpdGggdmVyeSBsYXJnZSBib3RzLiBJbnN0ZWFkLCBvcHQgdG8gdXNlIGBmZXRjaE1lbWJlcnMoKWA6XG4gICAqIFJFU1QgY29tbXVuaWNhdGlvbiBvbmx5IHBlcm1pdHMgNTAgcmVxdWVzdHMgdG8gYmUgbWFkZSBwZXIgc2Vjb25kLCB3aGlsZSBnYXRld2F5cyBhbGxvdyBmb3IgdXAgdG8gMTIwIHJlcXVlc3RzXG4gICAqIHBlciBtaW51dGUgcGVyIHNoYXJkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVhZCB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL3JhdGUtbGltaXRzI3JhdGUtbGltaXRzfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2xpc3QtZ3VpbGQtbWVtYmVyc31cbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjcmVxdWVzdC1ndWlsZC1tZW1iZXJzfVxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvcmF0ZS1saW1pdHMjcmF0ZS1saW1pdHN9XG4gICAqL1xuICBnZXRNZW1iZXJzOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBMaXN0R3VpbGRNZW1iZXJzKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPj5cblxuICAvKipcbiAqIEtpY2tzIGEgbWVtYmVyIGZyb20gYSBndWlsZC5cbiAqXG5cbiAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBraWNrIHRoZSBtZW1iZXIgZnJvbS5cbiAqIEBwYXJhbSB1c2VySWQgLSBUaGUgdXNlciBJRCBvZiB0aGUgbWVtYmVyIHRvIGtpY2sgZnJvbSB0aGUgZ3VpbGQuXG4gKlxuICogQHJlbWFya3NcbiAqIFJlcXVpcmVzIHRoZSBgS0lDS19NRU1CRVJTYCBwZXJtaXNzaW9uLlxuICpcbiAqIEZpcmVzIGEgX0d1aWxkIE1lbWJlciBSZW1vdmVfIGdhdGV3YXkgZXZlbnQuXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI3JlbW92ZS1ndWlsZC1tZW1iZXJ9XG4gKi9cbiAga2lja01lbWJlcjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAqIEluaXRpYXRlcyB0aGUgcHJvY2VzcyBvZiBwcnVuaW5nIGluYWN0aXZlIG1lbWJlcnMuXG4gKlxuXG4gKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gcHJ1bmUgdGhlIG1lbWJlcnMgb2YuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgcHJ1bmluZyBvZiBtZW1iZXJzLlxuICogQHJldHVybnMgQSBudW1iZXIgaW5kaWNhdGluZyBob3cgbWFueSBtZW1iZXJzIHdlcmUgcHJ1bmVkLlxuICpcbiAqIEByZW1hcmtzXG4gKiBSZXF1aXJlcyB0aGUgYEtJQ0tfTUVNQkVSU2AgcGVybWlzc2lvbi5cbiAqXG4gKiDinZcgUmVxdWVzdHMgdG8gdGhpcyBlbmRwb2ludCB3aWxsIHRpbWUgb3V0IGZvciBsYXJnZSBndWlsZHMuIFRvIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZywgc2V0IHRoZSB7QGxpbmsgQmVnaW5HdWlsZFBydW5lLmNvbXB1dGVQcnVuZUNvdW50fSBwcm9wZXJ0eSBvZiB0aGUge0BsaW5rIG9wdGlvbnN9IG9iamVjdCBwYXJhbWV0ZXIgdG8gYGZhbHNlYC4gVGhpcyB3aWxsIGJlZ2luIHRoZSBwcm9jZXNzIG9mIHBydW5pbmcsIGFuZCBpbW1lZGlhdGVseSByZXR1cm4gYHVuZGVmaW5lZGAsIHJhdGhlciB0aGFuIHdhaXQgZm9yIHRoZSBwcm9jZXNzIHRvIGNvbXBsZXRlIGJlZm9yZSByZXR1cm5pbmcgdGhlIGFjdHVhbCBjb3VudCBvZiBtZW1iZXJzIHRoYXQgaGF2ZSBiZWVuIGtpY2tlZC5cbiAqXG4gKiDimqDvuI8gQnkgZGVmYXVsdCwgdGhpcyBwcm9jZXNzIHdpbGwgbm90IHJlbW92ZSBtZW1iZXJzIHdpdGggYSByb2xlLiBUbyBpbmNsdWRlIHRoZSBtZW1iZXJzIHdobyBoYXZlIGEgX3BhcnRpY3VsYXIgc3Vic2V0IG9mIHJvbGVzXywgc3BlY2lmeSB0aGUgcm9sZShzKSBpbiB0aGUge0BsaW5rIEJlZ2luR3VpbGRQcnVuZS5pbmNsdWRlUm9sZXMgfCBpbmNsdWRlUm9sZXN9IHByb3BlcnR5IG9mIHRoZSB7QGxpbmsgb3B0aW9uc30gb2JqZWN0IHBhcmFtZXRlci5cbiAqXG4gKiBGaXJlcyBhIF9HdWlsZCBNZW1iZXIgUmVtb3ZlXyBnYXRld2F5IGV2ZW50IGZvciBldmVyeSBtZW1iZXIga2lja2VkLlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNiZWdpbi1ndWlsZC1wcnVuZX1cbiAqL1xuICBwcnVuZU1lbWJlcnM6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEJlZ2luR3VpbGRQcnVuZSkgPT4gUHJvbWlzZTx7IHBydW5lZDogbnVtYmVyIHwgbnVsbCB9PlxuICAvKipcbiAqIEdldHMgdGhlIGxpc3Qgb2YgbWVtYmVycyB3aG9zZSB1c2VybmFtZXMgb3Igbmlja25hbWVzIHN0YXJ0IHdpdGggYSBwcm92aWRlZCBzdHJpbmcuXG4gKlxuXG4gKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gc2VhcmNoIGluLlxuICogQHBhcmFtIHF1ZXJ5IC0gVGhlIHN0cmluZyB0byBtYXRjaCB1c2VybmFtZXMgb3Igbmlja25hbWVzIGFnYWluc3QuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBzZWFyY2hpbmcgdGhyb3VnaCB0aGUgbWVtYmVycy5cbiAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZE1lbWJlcn0gb2JqZWN0cyBhc3NvcnRlZCBieSB1c2VyIElELlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNzZWFyY2gtZ3VpbGQtbWVtYmVyc31cbiAqL1xuICBzZWFyY2hNZW1iZXJzOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBxdWVyeTogc3RyaW5nLCBvcHRpb25zPzogT21pdDxTZWFyY2hNZW1iZXJzLCAncXVlcnknPikgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4+XG4gIC8qKlxuICogVW5iYW5zIGEgdXNlciBmcm9tIGEgZ3VpbGQuXG4gKlxuXG4gKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gdW5iYW4gdGhlIHVzZXIgaW4uXG4gKiBAcGFyYW0gdXNlcklkIC0gVGhlIElEIG9mIHRoZSB1c2VyIHRvIHVuYmFuLlxuICpcbiAqIEByZW1hcmtzXG4gKiBSZXF1aXJlcyB0aGUgYEJBTl9NRU1CRVJTYCBwZXJtaXNzaW9uLlxuICpcbiAqIEZpcmVzIGEgX0d1aWxkIEJhbiBSZW1vdmVfIGdhdGV3YXkgZXZlbnQuXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI3JlbW92ZS1ndWlsZC1iYW59XG4gKi9cbiAgdW5iYW5NZW1iZXI6IChndWlsZElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG59XG5cbmV4cG9ydCB0eXBlIFJlcXVlc3RNZXRob2RzID0gJ0dFVCcgfCAnUE9TVCcgfCAnREVMRVRFJyB8ICdQQVRDSCcgfCAnUFVUJ1xuZXhwb3J0IHR5cGUgQXBpVmVyc2lvbnMgPSA5IHwgMTBcblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVXZWJob29rIGV4dGVuZHMgV2l0aFJlYXNvbiB7XG4gIC8qKiBOYW1lIG9mIHRoZSB3ZWJob29rICgxLTgwIGNoYXJhY3RlcnMpICovXG4gIG5hbWU6IHN0cmluZ1xuICAvKiogSW1hZ2UgdXJsIGZvciB0aGUgZGVmYXVsdCB3ZWJob29rIGF2YXRhciAqL1xuICBhdmF0YXI/OiBzdHJpbmcgfCBudWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zIHtcbiAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgbWV0aG9kOiBSZXF1ZXN0TWV0aG9kc1xuICBib2R5PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgdW5hdXRob3JpemVkPzogYm9vbGVhblxuICB1cmw/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0Qm9keSB7XG4gIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgYm9keTogc3RyaW5nIHwgRm9ybURhdGFcbiAgbWV0aG9kOiBSZXF1ZXN0TWV0aG9kc1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlbmRSZXF1ZXN0T3B0aW9ucyB7XG4gIC8qKiBUaGUgdXJsIHRvIHNlbmQgdGhlIHJlcXVlc3QgdG8uICovXG4gIHVybDogc3RyaW5nXG4gIC8qKiBUaGUgbWV0aG9kIHRvIHVzZSB3aGVuIHNlbmRpbmcgdGhlIHJlcXVlc3QuICovXG4gIG1ldGhvZDogUmVxdWVzdE1ldGhvZHNcbiAgLyoqIFRoZSBib2R5IHRvIGJlIHNlbnQgaW4gdGhlIHJlcXVlc3QuICovXG4gIGJvZHk/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gIC8qKiBUaGUgYW1vdW50IG9mIHRpbWVzIHRoaXMgcmVxdWVzdCBoYXMgYmVlbiByZXRyaWVkLiAqL1xuICByZXRyeUNvdW50OiBudW1iZXJcbiAgLyoqIEhhbmRsZXIgdG8gcmV0cnkgYSByZXF1ZXN0IHNob3VsZCBpdCBiZSByYXRlIGxpbWl0ZWQuICovXG4gIHJldHJ5UmVxdWVzdD86IChvcHRpb25zOiBTZW5kUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqIFJlc29sdmUgaGFuZGxlciB3aGVuIGEgcmVxdWVzdCBzdWNjZWVkcy4gKi9cbiAgcmVzb2x2ZTogKHZhbHVlOiBhbnkgfCBQcm9taXNlTGlrZTxhbnk+KSA9PiB2b2lkXG4gIC8qKiBSZWplY3QgaGFuZGxlciB3aGVuIGEgcmVxdWVzdCBmYWlscy4gKi9cbiAgcmVqZWN0OiAocmVhc29uPzogYW55KSA9PiB2b2lkXG4gIC8qKiBJZiB0aGlzIHJlcXVlc3QgaGFzIGEgYnVja2V0IGlkIHdoaWNoIGl0IGZhbGxzIHVuZGVyIGZvciByYXRlIGxpbWl0ICovXG4gIGJ1Y2tldElkPzogc3RyaW5nXG4gIC8qKiBBZGRpdGlvbmFsIHJlcXVlc3Qgb3B0aW9ucywgdXNlZCBmb3IgdGhpbmdzIGxpa2Ugb3ZlcnJpZGluZyBhdXRob3JpemF0aW9uIGhlYWRlci4gKi9cbiAgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIGFueT5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXN0UmF0ZUxpbWl0ZWRQYXRoIHtcbiAgdXJsOiBzdHJpbmdcbiAgcmVzZXRUaW1lc3RhbXA6IG51bWJlclxuICBidWNrZXRJZD86IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2tNZXNzYWdlRWRpdG9yIHtcbiAgLyoqXG4gICAqIEVkaXRzIGEgd2ViaG9vayBtZXNzYWdlLlxuICAgKlxuICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGVkaXQgdGhlIG1lc3NhZ2Ugb2YuXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSB3ZWJob29rIHRva2VuLCB1c2VkIHRvIGVkaXQgdGhlIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gZWRpdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIG1lc3NhZ2UuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRNZXNzYWdlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy93ZWJob29rI2VkaXQtd2ViaG9vay1tZXNzYWdlfVxuICAgKi9cbiAgKHdlYmhvb2tJZDogQmlnU3RyaW5nLCB0b2tlbjogc3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogSW50ZXJhY3Rpb25DYWxsYmFja0RhdGEgJiB7IHRocmVhZElkPzogQmlnU3RyaW5nIH0pOiBQcm9taXNlPFxuICAgIENhbWVsaXplPERpc2NvcmRNZXNzYWdlPlxuICA+XG4gIC8qKlxuICAgKiBFZGl0cyB0aGUgb3JpZ2luYWwgd2ViaG9vayBtZXNzYWdlLlxuICAgKlxuICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGVkaXQgdGhlIG9yaWdpbmFsIG1lc3NhZ2Ugb2YuXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSB3ZWJob29rIHRva2VuLCB1c2VkIHRvIGVkaXQgdGhlIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBtZXNzYWdlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNlZGl0LXdlYmhvb2stbWVzc2FnZX1cbiAgICovXG4gIG9yaWdpbmFsOiAod2ViaG9va0lkOiBCaWdTdHJpbmcsIHRva2VuOiBzdHJpbmcsIG9wdGlvbnM6IEludGVyYWN0aW9uQ2FsbGJhY2tEYXRhICYgeyB0aHJlYWRJZD86IEJpZ1N0cmluZyB9KSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj5cbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlVGVtcGxhdGUge1xuICAvKiogTmFtZSB3aGljaCB0aGUgdGVtcGxhdGUgc2hvdWxkIGhhdmUgKi9cbiAgbmFtZTogc3RyaW5nXG4gIC8qKiBEZXNjcmlwdGlvbiBvZiB0aGUgdGVtcGxhdGUgKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmdcbn1cbi8qKiBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvdGVtcGxhdGUjbW9kaWZ5LWd1aWxkLXRlbXBsYXRlICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGlmeUd1aWxkVGVtcGxhdGUge1xuICAvKiogTmFtZSBvZiB0aGUgdGVtcGxhdGUgKDEtMTAwIGNoYXJhY3RlcnMpICovXG4gIG5hbWU/OiBzdHJpbmdcbiAgLyoqIERlc2NyaXB0aW9uIG9mIHRoZSB0ZW1wbGF0ZSAoMC0xMjAgY2hhcmFjdGVycykgKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCBudWxsXG59XG4vKiogaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2NyZWF0ZS1ndWlsZC1iYW4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlR3VpbGRCYW4gZXh0ZW5kcyBXaXRoUmVhc29uIHtcbiAgLyoqIE51bWJlciBvZiBzZWNvbmRzIHRvIGRlbGV0ZSBtZXNzYWdlcyBmb3IsIGJldHdlZW4gMCBhbmQgNjA0ODAwICg3IGRheXMpICovXG4gIGRlbGV0ZU1lc3NhZ2VTZWNvbmRzPzogbnVtYmVyXG59XG5leHBvcnQgaW50ZXJmYWNlIEVkaXRCb3RNZW1iZXJPcHRpb25zIGV4dGVuZHMgV2l0aFJlYXNvbiB7XG4gIG5pY2s/OiBzdHJpbmcgfCBudWxsXG59XG4vKiogaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI21vZGlmeS1ndWlsZC1tZW1iZXIgKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kaWZ5R3VpbGRNZW1iZXIge1xuICAvKiogVmFsdWUgdG8gc2V0IHVzZXJzIG5pY2tuYW1lIHRvLiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9OSUNLTkFNRVNgIHBlcm1pc3Npb24gKi9cbiAgbmljaz86IHN0cmluZyB8IG51bGxcbiAgLyoqIEFycmF5IG9mIHJvbGUgaWRzIHRoZSBtZW1iZXIgaXMgYXNzaWduZWQuIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uICovXG4gIHJvbGVzPzogQmlnU3RyaW5nW10gfCBudWxsXG4gIC8qKiBXaGV0aGVyIHRoZSB1c2VyIGlzIG11dGVkIGluIHZvaWNlIGNoYW5uZWxzLiBXaWxsIHRocm93IGEgNDAwIGlmIHRoZSB1c2VyIGlzIG5vdCBpbiBhIHZvaWNlIGNoYW5uZWwuIFJlcXVpcmVzIHRoZSBgTVVURV9NRU1CRVJTYCBwZXJtaXNzaW9uICovXG4gIG11dGU/OiBib29sZWFuIHwgbnVsbFxuICAvKiogV2hldGhlciB0aGUgdXNlciBpcyBkZWFmZW5lZCBpbiB2b2ljZSBjaGFubmVscy4gV2lsbCB0aHJvdyBhIDQwMCBpZiB0aGUgdXNlciBpcyBub3QgaW4gYSB2b2ljZSBjaGFubmVsLiBSZXF1aXJlcyB0aGUgYE1PVkVfTUVNQkVSU2AgcGVybWlzc2lvbiAqL1xuICBkZWFmPzogYm9vbGVhbiB8IG51bGxcbiAgLyoqIElkIG9mIGNoYW5uZWwgdG8gbW92ZSB1c2VyIHRvIChpZiB0aGV5IGFyZSBjb25uZWN0ZWQgdG8gdm9pY2UpLiBSZXF1aXJlcyB0aGUgYE1PVkVfTUVNQkVSU2AgcGVybWlzc2lvbiAqL1xuICBjaGFubmVsSWQ/OiBCaWdTdHJpbmcgfCBudWxsXG4gIC8qKiB3aGVuIHRoZSB1c2VyJ3MgdGltZW91dCB3aWxsIGV4cGlyZSBhbmQgdGhlIHVzZXIgd2lsbCBiZSBhYmxlIHRvIGNvbW11bmljYXRlIGluIHRoZSBndWlsZCBhZ2FpbiAodXAgdG8gMjggZGF5cyBpbiB0aGUgZnV0dXJlKSwgc2V0IHRvIG51bGwgdG8gcmVtb3ZlIHRpbWVvdXQuIFJlcXVpcmVzIHRoZSBgTU9ERVJBVEVfTUVNQkVSU2AgcGVybWlzc2lvbiAqL1xuICBjb21tdW5pY2F0aW9uRGlzYWJsZWRVbnRpbD86IG51bWJlciB8IG51bGxcbn1cbi8qKiBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjYmVnaW4tZ3VpbGQtcHJ1bmUgKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmVnaW5HdWlsZFBydW5lIHtcbiAgLyoqIE51bWJlciBvZiBkYXlzIHRvIHBydW5lICgxIG9yIG1vcmUpLCBkZWZhdWx0OiA3ICovXG4gIGRheXM/OiBudW1iZXJcbiAgLyoqIFdoZXRoZXIgJ3BydW5lZCcgaXMgcmV0dXJuZWQsIGRpc2NvdXJhZ2VkIGZvciBsYXJnZSBndWlsZHMsIGRlZmF1bHQ6IHRydWUgKi9cbiAgY29tcHV0ZVBydW5lQ291bnQ/OiBib29sZWFuXG4gIC8qKiBSb2xlKHMpIHJvIGluY2x1ZGUsIGRlZmF1bHQ6IG5vbmUgKi9cbiAgaW5jbHVkZVJvbGVzPzogc3RyaW5nW11cbn1cbiJdLCJuYW1lcyI6WyJJbnRlcmFjdGlvblJlc3BvbnNlVHlwZXMiLCJjYWxjdWxhdGVCaXRzIiwiY2FtZWxpemUiLCJjYW1lbFRvU25ha2VDYXNlIiwiZGVsYXkiLCJmaW5kRmlsZXMiLCJnZXRCb3RJZEZyb21Ub2tlbiIsImxvZ2dlciIsInVybFRvQmFzZTY0IiwiY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQiLCJRdWV1ZSIsImNyZWF0ZVJlc3RNYW5hZ2VyIiwib3B0aW9ucyIsInRva2VuIiwiRXJyb3IiLCJyZXN0IiwiYXBwbGljYXRpb25JZCIsIkJpZ0ludCIsInZlcnNpb24iLCJiYXNlVXJsIiwibWF4UmV0cnlDb3VudCIsIkluZmluaXR5IiwiZ2xvYmFsbHlSYXRlTGltaXRlZCIsInByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzIiwiZGVsZXRlUXVldWVEZWxheSIsInF1ZXVlcyIsIk1hcCIsInJhdGVMaW1pdGVkUGF0aHMiLCJpbnZhbGlkQnVja2V0Iiwicm91dGVzIiwid2ViaG9va3MiLCJpZCIsIndlYmhvb2tJZCIsIm1lc3NhZ2UiLCJtZXNzYWdlSWQiLCJ1cmwiLCJ0aHJlYWRJZCIsIm9yaWdpbmFsIiwid2ViaG9vayIsIndhaXQiLCJ1bmRlZmluZWQiLCJ0b1N0cmluZyIsInNlc3Npb25JbmZvIiwiZ2F0ZXdheUJvdCIsImNoYW5uZWxzIiwiZG0iLCJjaGFubmVsSWQiLCJjaGFubmVsIiwiZm9sbG93IiwiZm9ydW0iLCJpbnZpdGVzIiwibWVzc2FnZXMiLCJvdmVyd3JpdGUiLCJvdmVyd3JpdGVJZCIsImNyb3NzcG9zdCIsInN0YWdlcyIsInN0YWdlIiwidGhyZWFkcyIsImFsbCIsImFjdGl2ZSIsImd1aWxkSWQiLCJtZW1iZXJzIiwibWUiLCJ1c2VyIiwidXNlcklkIiwiYXJjaGl2ZWQiLCJwdWJsaWMiLCJiZWZvcmUiLCJEYXRlIiwidG9JU09TdHJpbmciLCJsaW1pdCIsInByaXZhdGUiLCJqb2luZWQiLCJ0eXBpbmciLCJndWlsZHMiLCJhdXRvbW9kIiwicnVsZSIsInJ1bGVJZCIsInJ1bGVzIiwiZW1vamkiLCJlbW9qaUlkIiwiZW1vamlzIiwiZXZlbnRzIiwid2l0aFVzZXJDb3VudCIsImV2ZW50IiwiZXZlbnRJZCIsInVzZXJzIiwid2l0aE1lbWJlciIsImFmdGVyIiwiZ3VpbGQiLCJ3aXRoQ291bnRzIiwiaW50ZWdyYXRpb24iLCJpbnRlZ3JhdGlvbklkIiwiaW50ZWdyYXRpb25zIiwiaW52aXRlIiwiaW52aXRlQ29kZSIsIndpdGhFeHBpcmF0aW9uIiwic2NoZWR1bGVkRXZlbnRJZCIsImJhbiIsImJvdCIsIm1lbWJlciIsInNlYXJjaCIsInF1ZXJ5IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwicHJ1bmUiLCJkYXlzIiwiQXJyYXkiLCJpc0FycmF5IiwiaW5jbHVkZVJvbGVzIiwiam9pbiIsInJvbGVzIiwib25lIiwicm9sZUlkIiwibWVtYmVySWQiLCJ0ZW1wbGF0ZXMiLCJjb2RlIiwiaW50ZXJhY3Rpb25zIiwiY29tbWFuZHMiLCJjb21tYW5kSWQiLCJ3aXRoTG9jYWxpemF0aW9ucyIsInBlcm1pc3Npb25zIiwicGVybWlzc2lvbiIsImNvbW1hbmQiLCJyZXNwb25zZXMiLCJjYWxsYmFjayIsImludGVyYWN0aW9uSWQiLCJ1c2VyQm90Iiwib2F1dGgyQXBwbGljYXRpb24iLCJuaXRyb1N0aWNrZXJQYWNrcyIsImNoZWNrUmF0ZUxpbWl0cyIsInJhdGVsaW1pdGVkIiwiZ2V0IiwiZ2xvYmFsIiwibm93IiwicmVzZXRUaW1lc3RhbXAiLCJjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQiLCJvYmoiLCJtYXAiLCJpdGVtIiwibmV3T2JqIiwia2V5IiwiT2JqZWN0Iiwia2V5cyIsImNyZWF0ZVJlcXVlc3QiLCJoZWFkZXJzIiwidW5hdXRob3JpemVkIiwiYXV0aG9yaXphdGlvbiIsInRvTG93ZXJDYXNlIiwibWV0aG9kIiwiYm9keSIsInJlYXNvbiIsImZpbGUiLCJmaWxlcyIsImZvcm0iLCJGb3JtRGF0YSIsImVuZHNXaXRoIiwiYXBwZW5kIiwiYmxvYiIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsInRhZ3MiLCJpIiwibGVuZ3RoIiwiSlNPTiIsInN0cmluZ2lmeSIsImluY2x1ZGVzIiwicHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMiLCJ2YWx1ZSIsImVudHJpZXMiLCJkZWxldGUiLCJzaXplIiwic2V0VGltZW91dCIsInByb2Nlc3NIZWFkZXJzIiwicmF0ZUxpbWl0ZWQiLCJyZW1haW5pbmciLCJyZXRyeUFmdGVyIiwicmVzZXQiLCJOdW1iZXIiLCJidWNrZXRJZCIsImhhbmRsZUNvbXBsZXRlZFJlcXVlc3QiLCJpbnRlcnZhbCIsIm1heCIsInNldCIsImdsb2JhbFJlc2V0Iiwic2VuZFJlcXVlc3QiLCJzdGFydHNXaXRoIiwicGF5bG9hZCIsImRlYnVnIiwicmVzcG9uc2UiLCJmZXRjaCIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJzaW1wbGlmeVVybCIsInJldHJ5Q291bnQiLCJyZWplY3QiLCJvayIsImVycm9yIiwicmVzZXRBZnRlciIsInJldHJ5UmVxdWVzdCIsImpzb24iLCJyZXNvbHZlIiwicm91dGUiLCJyZXBsYWNlIiwibWF0Y2giLCJwIiwic3Vic3RyaW5nIiwiaW5kZXhPZiIsInByb2Nlc3NSZXF1ZXN0IiwicmVxdWVzdCIsInBhcnRzIiwic3BsaXQiLCJzaGlmdCIsInF1ZXVlIiwibWFrZVJlcXVlc3QiLCJidWNrZXRRdWV1ZSIsIlByb21pc2UiLCJwb3N0IiwicGF0Y2giLCJwdXQiLCJkZWxldGVNZXNzYWdlIiwiZWRpdCIsImVkaXRNZXNzYWdlIiwic2VuZCIsInNlbmRNZXNzYWdlIiwicHVibGlzaCIsInB1Ymxpc2hNZXNzYWdlIiwiZ2V0Q2hhbm5lbCIsImNyZWF0ZSIsImNyZWF0ZUNoYW5uZWwiLCJkZWxldGVDaGFubmVsIiwiZWRpdENoYW5uZWwiLCJzb3VyY2VDaGFubmVsSWQiLCJ0YXJnZXRDaGFubmVsSWQiLCJmb2xsb3dBbm5vdW5jZW1lbnQiLCJmb3J1bXMiLCJjcmVhdGVGb3J1bVRocmVhZCIsImVkaXRDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlcyIsImRlbGV0ZUNoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGUiLCJwb3NpdGlvbnMiLCJjaGFubmVsUG9zaXRpb25zIiwiZWRpdENoYW5uZWxQb3NpdGlvbnMiLCJnZXRDaGFubmVsSW52aXRlcyIsImNyZWF0ZVN0YWdlSW5zdGFuY2UiLCJkZWxldGVTdGFnZUluc3RhbmNlIiwiZGF0YSIsImVkaXRTdGFnZUluc3RhbmNlIiwiZ2V0U3RhZ2VJbnN0YW5jZSIsIndpdGgiLCJzdGFydFRocmVhZFdpdGhNZXNzYWdlIiwid2l0aG91dCIsInN0YXJ0VGhyZWFkV2l0aG91dE1lc3NhZ2UiLCJnZXRBY3RpdmVUaHJlYWRzIiwiZ2V0UHJpdmF0ZUFyY2hpdmVkVGhyZWFkcyIsImdldFByaXZhdGVKb2luZWRBcmNoaXZlZFRocmVhZHMiLCJnZXRQdWJsaWNBcmNoaXZlZFRocmVhZHMiLCJnZXRUaHJlYWRNZW1iZXIiLCJnZXRUaHJlYWRNZW1iZXJzIiwiam9pblRocmVhZCIsImxlYXZlIiwibGVhdmVUaHJlYWQiLCJraWNrIiwicmVtb3ZlVGhyZWFkTWVtYmVyIiwidHJpZ2dlclR5cGluZ0luZGljYXRvciIsImNyZWF0ZUVtb2ppIiwiZGVsZXRlRW1vamkiLCJlZGl0RW1vamkiLCJnZXRFbW9qaSIsImNyZWF0ZUF1dG9tb2RSdWxlIiwiZGVsZXRlQXV0b21vZFJ1bGUiLCJlZGl0QXV0b21vZFJ1bGUiLCJnZXRBdXRvbW9kUnVsZSIsImdldEF1dG9tb2RSdWxlcyIsImNyZWF0ZUd1aWxkIiwiZ2V0Q2hhbm5lbHMiLCJkZWxldGVHdWlsZCIsImdldEVtb2ppcyIsImNyZWF0ZVNjaGVkdWxlZEV2ZW50IiwiZGVsZXRlU2NoZWR1bGVkRXZlbnQiLCJlZGl0U2NoZWR1bGVkRXZlbnQiLCJnZXRTY2hlZHVsZWRFdmVudCIsImdldFNjaGVkdWxlZEV2ZW50cyIsImdldFNjaGVkdWxlZEV2ZW50VXNlcnMiLCJnZXRJbnRlZ3JhdGlvbnMiLCJkZWxldGVJbnRlZ3JhdGlvbiIsImNyZWF0ZUludml0ZSIsImRlbGV0ZUludml0ZSIsImdldEludml0ZSIsImxpc3QiLCJnZXRJbnZpdGVzIiwiY3JlYXRlR3VpbGRUZW1wbGF0ZSIsInRlbXBsYXRlQ29kZSIsImRlbGV0ZUd1aWxkVGVtcGxhdGUiLCJlZGl0R3VpbGRUZW1wbGF0ZSIsImdldEd1aWxkVGVtcGxhdGUiLCJnZXRHdWlsZFRlbXBsYXRlcyIsInN5bmMiLCJzeW5jR3VpbGRUZW1wbGF0ZSIsImJhbk1lbWJlciIsImVkaXRNZW1iZXIiLCJlZGl0U2VsZiIsImVkaXRCb3RNZW1iZXIiLCJnZXRNZW1iZXIiLCJnZXREbUNoYW5uZWwiLCJraWNrTWVtYmVyIiwiZ2V0TWVtYmVycyIsInBydW5lTWVtYmVycyIsInNlYXJjaE1lbWJlcnMiLCJ1bmJhbiIsInVuYmFuTWVtYmVyIiwiY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJkZWxldGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImVkaXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJlZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJiZWFyZXJUb2tlbiIsImVkaXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyIsImdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb24iLCJnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyIsInVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJ1cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJmb2xsb3d1cCIsInNlbmRGb2xsb3d1cE1lc3NhZ2UiLCJzZW5kSW50ZXJhY3Rpb25SZXNwb25zZSIsImRlbGV0ZUZvbGxvd3VwTWVzc2FnZSIsImRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImVkaXRGb2xsb3d1cE1lc3NhZ2UiLCJlZGl0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiZ2V0Rm9sbG93dXBNZXNzYWdlIiwiZ2V0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiYWRkIiwiYWRkUm9sZSIsImNyZWF0ZVJvbGUiLCJkZWxldGVSb2xlIiwiZWRpdFJvbGUiLCJnZXRSb2xlcyIsImVkaXRSb2xlUG9zaXRpb25zIiwicmVtb3ZlIiwicmVtb3ZlUm9sZSIsImNyZWF0ZVdlYmhvb2siLCJkZWxldGVXZWJob29rIiwiZGVsZXRlV2ViaG9va1dpdGhUb2tlbiIsImVkaXRXZWJob29rIiwiZWRpdFdlYmhvb2tXaXRoVG9rZW4iLCJleGVjdXRlIiwiZXhlY3V0ZVdlYmhvb2siLCJnZXRDaGFubmVsV2ViaG9va3MiLCJnZXRHdWlsZFdlYmhvb2tzIiwiZ2V0V2ViaG9va01lc3NhZ2UiLCJnZXRXZWJob29rIiwiZ2V0V2ViaG9va1dpdGhUb2tlbiIsImRlbGV0ZVdlYmhvb2tNZXNzYWdlIiwiYXNzaWduIiwiZWRpdFdlYmhvb2tNZXNzYWdlIiwiZWRpdE9yaWdpbmFsV2ViaG9va01lc3NhZ2UiLCJhZGRUaHJlYWRNZW1iZXIiLCJhdmF0YXIiLCJlZGl0Qm90UHJvZmlsZSIsImJvdEF2YXRhclVSTCIsInVzZXJuYW1lIiwidHJpbSIsInR5cGUiLCJVcGRhdGVNZXNzYWdlIiwidG9waWMiLCJ3ZWJob29rX2NoYW5uZWxfaWQiLCJnZXRBcHBsaWNhdGlvbkluZm8iLCJyZWNpcGllbnRfaWQiLCJnZXRHYXRld2F5Qm90IiwiZ2V0Tml0cm9TdGlja2VyUGFja3MiLCJnZXRTZXNzaW9uSW5mbyIsImdldFVzZXIiXSwibWFwcGluZ3MiOiJBQUFBLE9BQVNBLDRCQUFBQSxDQUF3QixLQUFRLG1CQUFtQixBQUM1RCxRQUFTQyxpQkFBQUEsQ0FBYSxDQUFFQyxZQUFBQSxDQUFRLENBQUVDLG9CQUFBQSxDQUFnQixDQUFFQyxTQUFBQSxDQUFLLENBQUVDLGFBQUFBLENBQVMsQ0FBRUMscUJBQUFBLENBQWlCLENBQUVDLFVBQUFBLENBQU0sQ0FBRUMsZUFBQUEsQ0FBVyxLQUFRLG1CQUFtQixBQUV2SSxRQUFTQyw4QkFBQUEsQ0FBMEIsS0FBUSxvQkFBb0IsQUFDL0QsUUFBU0MsU0FBQUEsQ0FBSyxLQUFRLFlBQVksQUErRWxDLFFBQU8sU0FBU0Msa0JBQWtCQyxDQUFpQyxDQUFlLENBRWhGLEdBQUksQ0FBQ0EsRUFBUUMsS0FBSyxDQUFFLE1BQU0sQUFBSUMsTUFBTSxrQ0FBa0MsQ0FFdEUsSUFBTUMsRUFBb0IsQ0FDeEJGLE1BQU9ELEVBQVFDLEtBQUssQ0FDcEJHLGNBQWVKLEVBQVFJLGFBQWEsQ0FBR0MsT0FBT0wsRUFBUUksYUFBYSxFQUFJVixFQUFrQk0sRUFBUUMsS0FBSyxDQUFDLENBQ3ZHSyxRQUFTTixFQUFRTSxPQUFPLEVBQUksR0FDNUJDLFFBQVNQLEVBQVFPLE9BQU8sRUFBSSwwQkFDNUJDLGNBQWVDLElBQ2ZDLG9CQUFxQixDQUFBLEVBQ3JCQywyQkFBNEIsQ0FBQSxFQUM1QkMs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