@discordeno/rest 19.0.0-next.49a7291 → 19.0.0-next.4bb34c9
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.
- package/dist/manager.d.ts.map +1 -1
- package/dist/manager.js +2 -2
- package/package.json +3 -3
package/dist/manager.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"AAkEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,WAAW,EAAsB,MAAM,YAAY,CAAA;AAK3F,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,WAAW,
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"AAkEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,WAAW,EAAsB,MAAM,YAAY,CAAA;AAK3F,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,WAAW,CA2nDhF"}
|
package/dist/manager.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{InteractionResponseTypes as e}from"@discordeno/types";import{calculateBits as t,camelize as s,camelToSnakeCase as a,delay as i,findFiles as n,getBotIdFromToken as o,isGetMessagesAfter as r,isGetMessagesAround as l,isGetMessagesBefore as d,isGetMessagesLimit as u,logger as c,processReactionString as m,urlToBase64 as g}from"@discordeno/utils";import{createInvalidRequestBucket as p}from"./invalidBucket.js";import{Queue as h}from"./queue.js";export function createRestManager(w){if(!w.token)throw Error("You must provide a valid token.");let y={token:w.token,applicationId:w.applicationId?BigInt(w.applicationId):o(w.token),version:w.version??10,baseUrl:w.baseUrl??"https://discord.com/api",maxRetryCount:1/0,globallyRateLimited:!1,processingRateLimitedPaths:!1,deleteQueueDelay:6e4,queues:new Map,rateLimitedPaths:new Map,invalidBucket:p({}),routes:{webhooks:{id:e=>`/webhooks/${e}`,message:(e,t,s,a)=>{let i=`/webhooks/${e}/${t}/messages/${s}?`;return a&&a.threadId&&(i+=`thread_id=${a.threadId}`),i},original:(e,t,s)=>{let a=`/webhooks/${e}/${t}/messages/@original?`;return s&&s.threadId&&(a+=`thread_id=${s.threadId}`),a},webhook:(e,t,s)=>{let a=`/webhooks/${e}/${t}?`;return s&&(s?.wait!==void 0&&(a+=`wait=${s.wait.toString()}`),s.threadId&&(a+=`thread_id=${s.threadId}`)),a}},sessionInfo:()=>y.routes.gatewayBot(),channels:{bulk:e=>`/channels/${e}/messages/bulk-delete`,dm:()=>"/users/@me/channels",pin:(e,t)=>`/channels/${e}/pins/${t}`,pins:e=>`/channels/${e}/pins`,reactions:{bot:(e,t,s)=>`/channels/${e}/messages/${t}/reactions/${encodeURIComponent(s)}/@me`,user:(e,t,s,a)=>`/channels/${e}/messages/${t}/reactions/${encodeURIComponent(s)}/${a}`,all:(e,t)=>`/channels/${e}/messages/${t}/reactions`,emoji:(e,t,s,a)=>{let i=`/channels/${e}/messages/${t}/reactions/${encodeURIComponent(s)}?`;return a&&(a.after&&(i+=`after=${a.after}`),a.limit&&(i+=`&limit=${a.limit}`)),i},message:(e,t,s,a)=>{let i=`/channels/${e}/messages/${t}/reactions/${encodeURIComponent(s)}?`;return a&&(a.after&&(i+=`after=${a.after}`),a.limit&&(i+=`&limit=${a.limit}`)),i}},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 s=`/channels/${e}/messages?`;return t&&(r(t)&&t.after&&(s+=`after=${t.after}`),d(t)&&t.before&&(s+=`&before=${t.before}`),l(t)&&t.around&&(s+=`&around=${t.around}`),u(t)&&t.limit&&(s+=`&limit=${t.limit}`)),s},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 s=`/channels/${e}/threads/archived/public?`;return t&&(t.before&&(s+=`before=${new Date(t.before).toISOString()}`),t.limit&&(s+=`&limit=${t.limit}`)),s},private:(e,t)=>{let s=`/channels/${e}/threads/archived/private?`;return t&&(t.before&&(s+=`before=${new Date(t.before).toISOString()}`),t.limit&&(s+=`&limit=${t.limit}`)),s},joined:(e,t)=>{let s=`/channels/${e}/users/@me/threads/archived/private?`;return t&&(t.before&&(s+=`before=${new Date(t.before).toISOString()}`),t.limit&&(s+=`&limit=${t.limit}`)),s}},typing:e=>`/channels/${e}/typing`},guilds:{all:()=>"/guilds",auditlogs:(e,t)=>{let s=`/guilds/${e}/audit-logs?`;return t&&(t.actionType&&(s+=`action_type=${t.actionType}`),t.before&&(s+=`&before=${t.before}`),t.limit&&(s+=`&limit=${t.limit}`),t.userId&&(s+=`&user_id=${t.userId}`)),s},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 s=`/guilds/${e}/scheduled-events?`;return void 0!==t&&(s+=`with_user_count=${t.toString()}`),s},event:(e,t,s)=>{let a=`/guilds/${e}/scheduled-events/${t}`;return void 0!==s&&(a+=`with_user_count=${s.toString()}`),a},users:(e,t,s)=>{let a=`/guilds/${e}/scheduled-events/${t}/users?`;return s&&(void 0!==s.limit&&(a+=`limit=${s.limit}`),void 0!==s.withMember&&(a+=`&with_member=${s.withMember.toString()}`),void 0!==s.after&&(a+=`&after=${s.after}`),void 0!==s.before&&(a+=`&before=${s.before}`)),a}},guild(e,t){let s=`/guilds/${e}?`;return void 0!==t&&(s+=`with_counts=${t.toString()}`),s},integration:(e,t)=>`/guilds/${e}/integrations/${t}`,integrations:e=>`/guilds/${e}/integrations?include_applications=true`,invite(e,t){let s=`/invites/${e}?`;return t&&(void 0!==t.withCounts&&(s+=`with_counts=${t.withCounts.toString()}`),void 0!==t.withExpiration&&(s+=`&with_expiration=${t.withExpiration.toString()}`),t.scheduledEventId&&(s+=`&guild_scheduled_event_id=${t.scheduledEventId}`)),s},invites:e=>`/guilds/${e}/invites`,leave:e=>`/users/@me/guilds/${e}`,members:{ban:(e,t)=>`/guilds/${e}/bans/${t}`,bans:(e,t)=>{let s=`/guilds/${e}/bans?`;return t&&(t.limit&&(s+=`limit=${t.limit}`),t.after&&(s+=`&after=${t.after}`),t.before&&(s+=`&before=${t.before}`)),s},bot:e=>`/guilds/${e}/members/@me`,member:(e,t)=>`/guilds/${e}/members/${t}`,members:(e,t)=>{let s=`/guilds/${e}/members?`;return void 0!==t&&(t.limit&&(s+=`limit=${t.limit}`),t.after&&(s+=`&after=${t.after}`)),s},search:(e,t,s)=>{let a=`/guilds/${e}/members/search?query=${encodeURIComponent(t)}`;return s&&void 0!==s.limit&&(a+=`&limit=${s.limit}`),a},prune:(e,t)=>{let s=`/guilds/${e}/prune?`;return t&&(t.days&&(s+=`days=${t.days}`),Array.isArray(t.includeRoles)?s+=`&include_roles=${t.includeRoles.join(",")}`:t.includeRoles&&(s+=`&include_roles=${t.includeRoles}`)),s}},mfa:e=>`/guilds/${e}/mfa`,preview:e=>`/guilds/${e}/preview`,prune:(e,t)=>{let s=`/guilds/${e}/prune?`;return t&&(t.days&&(s+=`days=${t.days}`),Array.isArray(t.includeRoles)?s+=`&include_roles=${t.includeRoles.join(",")}`:t.includeRoles&&(s+=`&include_roles=${t.includeRoles}`)),s},roles:{one:(e,t)=>`/guilds/${e}/roles/${t}`,all:e=>`/guilds/${e}/roles`,member:(e,t,s)=>`/guilds/${e}/members/${t}/roles/${s}`},stickers:e=>`/guilds/${e}/stickers`,sticker:(e,t)=>`/guilds/${e}/stickers/${t}`,voice:(e,t)=>`/guilds/${e}/voice-states/${t??"@me"}`,templates:{code:e=>`/guilds/templates/${e}`,guild:(e,t)=>`/guilds/${e}/templates/${t}`,all:e=>`/guilds/${e}/templates`},vanity:e=>`/guilds/${e}/vanity-url`,regions:e=>`/guilds/${e}/regions`,webhooks:e=>`/guilds/${e}/webhooks`,welcome:e=>`/guilds/${e}/welcome-screen`,widget:e=>`/guilds/${e}/widget`,widgetJson:e=>`/guilds/${e}/widget.json`},sticker:e=>`/stickers/${e}`,regions:()=>"/voice/regions",interactions:{commands:{commands:e=>`/applications/${e}/commands`,guilds:{all:(e,t)=>`/applications/${e}/guilds/${t}/commands`,one(e,t,s,a){let i=`/applications/${e}/guilds/${t}/commands/${s}?`;return void 0!==a&&(i+=`with_localizations=${a.toString()}`),i}},permissions:(e,t)=>`/applications/${e}/guilds/${t}/commands/permissions`,permission:(e,t,s)=>`/applications/${e}/guilds/${t}/commands/${s}/permissions`,command:(e,t,s)=>{let a=`/applications/${e}/commands/${t}?`;return void 0!==s&&(a+=`withLocalizations=${s.toString()}`),a}},responses:{callback:(e,t)=>`/interactions/${e}/${t}/callback`,original:(e,t)=>`/webhooks/${e}/${t}/messages/@original`,message:(e,t,s)=>`/webhooks/${e}/${t}/messages/${s}`}},user:e=>`/users/${e}`,userBot:()=>"/users/@me",oauth2Application:()=>"oauth2/applications/@me",gatewayBot:()=>"/gateway/bot",nitroStickerPacks:()=>"/sticker-packs"},checkRateLimits(e){let t=y.rateLimitedPaths.get(e),s=y.rateLimitedPaths.get("global"),a=Date.now();return t&&a<t.resetTimestamp?t.resetTimestamp-a:!!s&&a<s.resetTimestamp&&s.resetTimestamp-a},changeToDiscordFormat(e){if(null===e)return null;if("object"==typeof e){if(Array.isArray(e))return e.map(e=>y.changeToDiscordFormat(e));let s={};for(let i of Object.keys(e)){if("permissions"===i){s.permissions=t(e[i]);continue}s[a(i)]=y.changeToDiscordFormat(e[i])}return s}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 ${y.token}`),e.headers)for(let s in e.headers)t[s.toLowerCase()]=e.headers[s];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:a}=e.body;if(a){let i=n(a),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);a&&(e.body.file=void 0),o.append("payload_json",JSON.stringify(y.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(y.changeToDiscordFormat(e.body)),method:e.method}},processRateLimitedPaths(){let e=Date.now();for(let[t,s]of y.rateLimitedPaths.entries())s.resetTimestamp>e||(y.rateLimitedPaths.delete(t),"global"!==t||(y.globallyRateLimited=!1));0===y.rateLimitedPaths.size?y.processingRateLimitedPaths=!1:(y.processingRateLimitedPaths=!0,setTimeout(()=>{y.processRateLimitedPaths()},1e3))},processHeaders(e,t){let s=!1,a=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(y.queues.get(e)?.handleCompletedRequest({remaining:a?Number(a):void 0,interval:i?1e3*Number(i):void 0,max:l?Number(l):void 0}),"0"===a&&(s=!0,y.rateLimitedPaths.set(e,{url:e,resetTimestamp:n,bucketId:r}),r&&y.rateLimitedPaths.set(r,{url:e,resetTimestamp:n,bucketId:r})),o){let d=t.get("retry-after"),u=Date.now()+1e3*Number(d);y.globallyRateLimited=!0,s=!0,setTimeout(()=>{y.globallyRateLimited=!1},u),y.rateLimitedPaths.set("global",{url:"global",resetTimestamp:u,bucketId:r}),r&&y.rateLimitedPaths.set(r,{url:"global",resetTimestamp:u,bucketId:r})}return s&&!y.processingRateLimitedPaths&&y.processRateLimitedPaths(),s?r:void 0},async sendRequest(e){let t=e.url.startsWith("https://")?e.url:`${y.baseUrl}/v${y.version}${e.url}`,s=y.createRequest({method:e.method,url:e.url,body:e.body,...e.options});c.debug(`sending request to ${t}`,"with payload:",{...s,headers:{...s.headers,authorization:"Bot tokenhere"}});let a=await fetch(t,s);c.debug(`request fetched from ${t} with status ${a.status} & ${a.statusText}`);let n=y.processHeaders(y.simplifyUrl(e.url,e.method),a.headers);if(n&&(e.bucketId=n),a.status<200||a.status>=400){if(c.debug(`Request to ${t} failed.`),429===a.status){if(c.debug(`Request to ${t} was ratelimited.`),e.retryCount++>=y.maxRetryCount)return c.debug(`Request to ${t} exceeded the maximum allowed retries.`,"with payload:",s),e.reject({ok:!1,status:a.status,error:"The options was rate limited and it maxed out the retries limit."});y.invalidBucket.handleCompletedRequest(a.status,"shared"===a.headers.get("X-RateLimit-Scope"));let o=a.headers.get("x-ratelimit-reset-after");return o&&await i(1e3*Number(o)),await a.json(),await e.retryRequest?.(e)}return e.reject({ok:!1,status:a.status,body:JSON.stringify(await a.json())})}let r=204===a.status,l=r?void 0:await a.json();return e.resolve({ok:!0,status:a.status,body:JSON.stringify(l)})},simplifyUrl(e,t){let s=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 s.includes("/reactions")&&(s=s.substring(0,s.indexOf("/reactions")+10)),"DELETE"===t&&s.endsWith("/messages/x")&&(s=t+s),s},processRequest(e){let t=e.url.substring(e.url.indexOf("api/")),s=t.split("/");s.shift(),s[0]?.startsWith("v")&&s.shift(),e.url=`${y.baseUrl}/v${y.version}/${s.join("/")}`;let a=y.simplifyUrl(e.url,e.method),i=y.queues.get(a);if(void 0!==i)i.makeRequest(e);else{let n=new h(y,{url:a,deleteQueueDelay:y.deleteQueueDelay});n.makeRequest(e),y.queues.set(a,n)}},makeRequest:async(e,t,s,a)=>await new Promise((i,n)=>{let o={url:t,method:e,body:s,retryCount:0,retryRequest:async function(e){y.processRequest(o)},resolve:e=>i(204!==e.status?JSON.parse(e.body??"{}"):void 0),reject:n,options:a};y.processRequest(o)}),get:async e=>s(await y.makeRequest("GET",e)),post:async(e,t)=>s(await y.makeRequest("POST",e,t)),delete:async(e,t)=>s(await y.makeRequest("DELETE",e,t)),patch:async(e,t)=>s(await y.makeRequest("PATCH",e,t)),put:async(e,t,a)=>s(await y.makeRequest("PUT",e,t,a)),addReaction:async(e,t,s)=>await y.put(y.routes.channels.reactions.bot(e,t,s=m(s))),async addReactions(e,t,s,a=!1){if(!a){await Promise.all(s.map(async s=>await y.addReaction(e,t,s)));return}for(let i of s)await y.addReaction(e,t,i)},addRole:async(e,t,s,a)=>await y.put(y.routes.guilds.roles.member(e,t,s),{reason:a}),addThreadMember:async(e,t)=>await y.put(y.routes.channels.threads.user(e,t)),createAutomodRule:async(e,t)=>await y.post(y.routes.guilds.automod.rules(e),t),createChannel:async(e,t)=>await y.post(y.routes.guilds.channels(e),t),createEmoji:async(e,t)=>await y.post(y.routes.guilds.emojis(e),t),createGlobalApplicationCommand:async e=>await y.post(y.routes.interactions.commands.commands(y.applicationId),e),createGuild:async e=>await y.post(y.routes.guilds.all(),e),createGuildApplicationCommand:async(e,t)=>await y.post(y.routes.interactions.commands.guilds.all(y.applicationId,t),e),createGuildFromTemplate:async(e,t)=>(t.icon&&(t.icon=await g(t.icon)),await y.post(y.routes.guilds.templates.code(e),t)),createGuildSticker:async(e,t)=>await y.post(y.routes.guilds.stickers(e),t),createGuildTemplate:async(e,t)=>await y.post(y.routes.guilds.templates.all(e),t),createForumThread:async(e,t)=>await y.post(y.routes.channels.forum(e),t),createInvite:async(e,t={})=>await y.post(y.routes.channels.invites(e),t),createRole:async(e,t,s)=>await y.post(y.routes.guilds.roles.all(e),{...t,reason:s}),createScheduledEvent:async(e,t)=>await y.post(y.routes.guilds.events.events(e),t),createStageInstance:async e=>await y.post(y.routes.channels.stages(),e),createWebhook:async(e,t)=>await y.post(y.routes.channels.webhooks(e),{name:t.name,avatar:t.avatar?await g(t.avatar):void 0,reason:t.reason}),deleteAutomodRule:async(e,t,s)=>await y.delete(y.routes.guilds.automod.rule(e,t),{reason:s}),deleteChannel:async(e,t)=>await y.delete(y.routes.channels.channel(e),{reason:t}),deleteChannelPermissionOverride:async(e,t,s)=>await y.delete(y.routes.channels.overwrite(e,t),s?{reason:s}:void 0),deleteEmoji:async(e,t,s)=>await y.delete(y.routes.guilds.emoji(e,t),{reason:s}),deleteFollowupMessage:async(e,t)=>await y.delete(y.routes.interactions.responses.message(y.applicationId,e,t)),deleteGlobalApplicationCommand:async e=>await y.delete(y.routes.interactions.commands.command(y.applicationId,e)),deleteGuild:async e=>await y.delete(y.routes.guilds.guild(e)),deleteGuildApplicationCommand:async(e,t)=>await y.delete(y.routes.interactions.commands.guilds.one(y.applicationId,t,e)),deleteGuildSticker:async(e,t,s)=>await y.delete(y.routes.guilds.sticker(e,t),s?{reason:s}:void 0),deleteGuildTemplate:async(e,t)=>await y.delete(y.routes.guilds.templates.guild(e,t)),deleteIntegration:async(e,t)=>await y.delete(y.routes.guilds.integration(e,t)),deleteInvite:async(e,t)=>await y.delete(y.routes.guilds.invite(e),t?{reason:t}:void 0),deleteMessage:async(e,t,s)=>await y.delete(y.routes.channels.message(e,t),{reason:s}),deleteMessages:async(e,t,s)=>await y.post(y.routes.channels.bulk(e),{messages:t.slice(0,100).map(e=>e.toString()),reason:s}),deleteOriginalInteractionResponse:async e=>await y.delete(y.routes.interactions.responses.original(y.applicationId,e)),deleteOwnReaction:async(e,t,s)=>await y.delete(y.routes.channels.reactions.bot(e,t,s=m(s))),deleteReactionsAll:async(e,t)=>await y.delete(y.routes.channels.reactions.all(e,t)),deleteReactionsEmoji:async(e,t,s)=>await y.delete(y.routes.channels.reactions.emoji(e,t,s=m(s))),deleteRole:async(e,t)=>await y.delete(y.routes.guilds.roles.one(e,t)),deleteScheduledEvent:async(e,t)=>await y.delete(y.routes.guilds.events.event(e,t)),deleteStageInstance:async(e,t)=>await y.delete(y.routes.channels.stage(e),t?{reason:t}:void 0),deleteUserReaction:async(e,t,s,a)=>await y.delete(y.routes.channels.reactions.user(e,t,a=m(a),s)),deleteWebhook:async(e,t)=>await y.delete(y.routes.webhooks.id(e),{reason:t}),deleteWebhookMessage:async(e,t,s,a)=>await y.delete(y.routes.webhooks.message(e,t,s,a)),deleteWebhookWithToken:async(e,t)=>await y.delete(y.routes.webhooks.webhook(e,t)),editApplicationCommandPermissions:async(e,t,s,a)=>await y.put(y.routes.interactions.commands.permission(y.applicationId,e,t),{permissions:a},{headers:{authorization:`Bearer ${s}`}}),editAutomodRule:async(e,t,s)=>await y.patch(y.routes.guilds.automod.rule(e,t),s),async editBotProfile(e){let t=e?.botAvatarURL?await g(e?.botAvatarURL):e?.botAvatarURL;return await y.patch(y.routes.userBot(),{username:e.username?.trim(),avatar:t})},editChannel:async(e,t)=>await y.patch(y.routes.channels.channel(e),t),editChannelPermissionOverrides:async(e,t)=>await y.put(y.routes.channels.overwrite(e,t.id),t),editChannelPositions:async(e,t)=>await y.patch(y.routes.guilds.channels(e),t),editEmoji:async(e,t,s)=>await y.patch(y.routes.guilds.emoji(e,t),s),editFollowupMessage:async(e,t,s)=>await y.patch(y.routes.interactions.responses.message(y.applicationId,e,t),s),editGlobalApplicationCommand:async(e,t)=>await y.patch(y.routes.interactions.commands.command(y.applicationId,e),t),editGuild:async(e,t)=>await y.patch(y.routes.guilds.guild(e),t),editGuildApplicationCommand:async(e,t,s)=>await y.patch(y.routes.interactions.commands.guilds.one(y.applicationId,t,e),s),editGuildMfaLevel:async(e,t,s)=>await y.post(y.routes.guilds.mfa(e),{level:t,reason:s}),editGuildSticker:async(e,t,s)=>await y.patch(y.routes.guilds.sticker(e,t),s),editGuildTemplate:async(e,t,s)=>await y.patch(y.routes.guilds.templates.guild(e,t),s),editMessage:async(e,t,s)=>await y.patch(y.routes.channels.message(e,t),s),editOriginalInteractionResponse:async(e,t)=>await y.patch(y.routes.interactions.responses.original(y.applicationId,e),t),editOriginalWebhookMessage:async(t,s,a)=>await y.patch(y.routes.webhooks.original(t,s,a),{type:e.UpdateMessage,data:a}),editOwnVoiceState:async(e,t)=>await y.patch(y.routes.guilds.voice(e),{channel_id:t.channelId,suppress:t.suppress,request_to_speak_timestamp:t.requestToSpeakTimestamp?new Date(t.requestToSpeakTimestamp).toISOString():t.requestToSpeakTimestamp}),editScheduledEvent:async(e,t,s)=>await y.patch(y.routes.guilds.events.event(e,t),s),editRole:async(e,t,s)=>await y.patch(y.routes.guilds.roles.one(e,t),s),editRolePositions:async(e,t)=>await y.patch(y.routes.guilds.roles.all(e),t),editStageInstance:async(e,t)=>await y.patch(y.routes.channels.stage(e),{topic:t.topic}),editUserVoiceState:async(e,t)=>await y.patch(y.routes.guilds.voice(e,t.userId),{channel_id:t.channelId,suppress:t.suppress,user_id:t.userId}),editWebhook:async(e,t)=>await y.patch(y.routes.webhooks.id(e),t),editWebhookMessage:async(e,t,s,a)=>await y.patch(y.routes.webhooks.message(e,t,s,a),a),editWebhookWithToken:async(e,t,s)=>await y.patch(y.routes.webhooks.webhook(e,t),s),editWelcomeScreen:async(e,t)=>await y.patch(y.routes.guilds.welcome(e),t),editWidgetSettings:async(e,t)=>await y.patch(y.routes.guilds.widget(e),t),executeWebhook:async(e,t,s)=>await y.post(y.routes.webhooks.webhook(e,t,s),s),followAnnouncement:async(e,t)=>await y.post(y.routes.channels.follow(e),{webhook_channel_id:t}),getActiveThreads:async e=>await y.get(y.routes.channels.threads.active(e)),getApplicationCommandPermission:async(e,t)=>await y.get(y.routes.interactions.commands.permission(y.applicationId,e,t)),getApplicationCommandPermissions:async e=>await y.get(y.routes.interactions.commands.permissions(y.applicationId,e)),getApplicationInfo:async()=>await y.get(y.routes.oauth2Application()),getAuditLog:async(e,t)=>await y.get(y.routes.guilds.auditlogs(e,t)),getAutomodRule:async(e,t)=>await y.get(y.routes.guilds.automod.rule(e,t)),getAutomodRules:async e=>await y.get(y.routes.guilds.automod.rules(e)),getAvailableVoiceRegions:async()=>await y.get(y.routes.regions()),getBan:async(e,t)=>await y.get(y.routes.guilds.members.ban(e,t)),getBans:async(e,t)=>await y.get(y.routes.guilds.members.bans(e,t)),getChannel:async e=>await y.get(y.routes.channels.channel(e)),getChannelInvites:async e=>await y.get(y.routes.channels.invites(e)),getChannels:async e=>await y.get(y.routes.guilds.channels(e)),getChannelWebhooks:async e=>await y.get(y.routes.channels.webhooks(e)),getDmChannel:async e=>await y.post(y.routes.channels.dm(),{recipient_id:e.toString()}),getEmoji:async(e,t)=>await y.get(y.routes.guilds.emoji(e,t)),getEmojis:async e=>await y.get(y.routes.guilds.emojis(e)),getFollowupMessage:async(e,t)=>await y.get(y.routes.interactions.responses.message(y.applicationId,e,t)),getGatewayBot:async()=>await y.get(y.routes.gatewayBot()),getGlobalApplicationCommand:async e=>await y.get(y.routes.interactions.commands.command(y.applicationId,e)),getGlobalApplicationCommands:async()=>await y.get(y.routes.interactions.commands.commands(y.applicationId)),getGuild:async(e,t={counts:!0})=>await y.get(y.routes.guilds.guild(e,t.counts)),getGuildApplicationCommand:async(e,t)=>await y.get(y.routes.interactions.commands.guilds.one(y.applicationId,t,e)),getGuildApplicationCommands:async e=>await y.get(y.routes.interactions.commands.guilds.all(y.applicationId,e)),getGuildPreview:async e=>await y.get(y.routes.guilds.preview(e)),getGuildTemplate:async e=>await y.get(y.routes.guilds.templates.code(e)),getGuildTemplates:async e=>await y.get(y.routes.guilds.templates.all(e)),getGuildWebhooks:async e=>await y.get(y.routes.guilds.webhooks(e)),getIntegrations:async e=>await y.get(y.routes.guilds.integrations(e)),getInvite:async(e,t)=>await y.get(y.routes.guilds.invite(e,t)),getInvites:async e=>await y.get(y.routes.guilds.invites(e)),getMessage:async(e,t)=>await y.get(y.routes.channels.message(e,t)),getMessages:async(e,t)=>await y.get(y.routes.channels.messages(e,t)),getNitroStickerPacks:async()=>await y.get(y.routes.nitroStickerPacks()),getOriginalInteractionResponse:async e=>await y.get(y.routes.interactions.responses.original(y.applicationId,e)),getPinnedMessages:async e=>await y.get(y.routes.channels.pins(e)),getPrivateArchivedThreads:async(e,t)=>await y.get(y.routes.channels.threads.private(e,t)),getPrivateJoinedArchivedThreads:async(e,t)=>await y.get(y.routes.channels.threads.joined(e,t)),getPruneCount:async(e,t)=>await y.get(y.routes.guilds.prune(e,t)),getPublicArchivedThreads:async(e,t)=>await y.get(y.routes.channels.threads.public(e,t)),getRoles:async e=>await y.get(y.routes.guilds.roles.all(e)),getScheduledEvent:async(e,t,s)=>await y.get(y.routes.guilds.events.event(e,t,s?.withUserCount)),getScheduledEvents:async(e,t)=>await y.get(y.routes.guilds.events.events(e,t?.withUserCount)),getScheduledEventUsers:async(e,t,s)=>await y.get(y.routes.guilds.events.users(e,t,s)),getSessionInfo:async()=>await y.getGatewayBot(),getStageInstance:async e=>await y.get(y.routes.channels.stage(e)),getSticker:async e=>await y.get(y.routes.sticker(e)),getGuildSticker:async(e,t)=>await y.get(y.routes.guilds.sticker(e,t)),getGuildStickers:async e=>await y.get(y.routes.guilds.stickers(e)),getThreadMember:async(e,t)=>await y.get(y.routes.channels.threads.user(e,t)),getThreadMembers:async e=>await y.get(y.routes.channels.threads.members(e)),getReactions:async(e,t,s,a)=>await y.get(y.routes.channels.reactions.message(e,t,s,a)),getUser:async e=>await y.get(y.routes.user(e)),getVanityUrl:async e=>await y.get(y.routes.guilds.vanity(e)),getVoiceRegions:async e=>await y.get(y.routes.guilds.regions(e)),getWebhook:async e=>await y.get(y.routes.webhooks.id(e)),getWebhookMessage:async(e,t,s,a)=>await y.get(y.routes.webhooks.message(e,t,s,a)),getWebhookWithToken:async(e,t)=>await y.get(y.routes.webhooks.webhook(e,t)),getWelcomeScreen:async e=>await y.get(y.routes.guilds.welcome(e)),getWidget:async e=>await y.get(y.routes.guilds.widgetJson(e)),getWidgetSettings:async e=>await y.get(y.routes.guilds.widget(e)),joinThread:async e=>await y.put(y.routes.channels.threads.me(e)),leaveGuild:async e=>await y.delete(y.routes.guilds.leave(e)),leaveThread:async e=>await y.delete(y.routes.channels.threads.me(e)),publishMessage:async(e,t)=>await y.post(y.routes.channels.crosspost(e,t)),removeRole:async(e,t,s,a)=>await y.delete(y.routes.guilds.roles.member(e,t,s),{reason:a}),removeThreadMember:async(e,t)=>await y.delete(y.routes.channels.threads.user(e,t)),sendFollowupMessage:async(e,t)=>await new Promise((s,a)=>{y.sendRequest({url:y.routes.webhooks.webhook(y.applicationId,e),method:"POST",body:t,retryCount:0,retryRequest:async function(e){await y.sendRequest(e)},resolve:e=>s(204!==e.status?JSON.parse(e.body??"{}"):void 0),reject:a})}),sendInteractionResponse:async(e,t,s)=>await new Promise((a,i)=>{y.sendRequest({url:y.routes.interactions.responses.callback(e,t),method:"POST",body:s,retryCount:0,retryRequest:async function(e){await y.sendRequest(e)},resolve:e=>a(204!==e.status?JSON.parse(e.body??"{}"):void 0),reject:i})}),sendMessage:async(e,t)=>await y.post(y.routes.channels.messages(e),t),startThreadWithMessage:async(e,t,s)=>await y.post(y.routes.channels.threads.message(e,t),s),startThreadWithoutMessage:async(e,t)=>await y.post(y.routes.channels.threads.all(e),t),syncGuildTemplate:async e=>await y.put(y.routes.guilds.templates.all(e)),banMember:async(e,t,s)=>await y.put(y.routes.guilds.members.ban(e,t),s),editBotMember:async(e,t)=>await y.patch(y.routes.guilds.members.bot(e),t),editMember:async(e,t,s)=>await y.patch(y.routes.guilds.members.member(e,t),s),getMember:async(e,t)=>await y.get(y.routes.guilds.members.member(e,t)),getMembers:async(e,t)=>await y.get(y.routes.guilds.members.members(e,t)),kickMember:async(e,t,s)=>await y.delete(y.routes.guilds.members.member(e,t),{reason:s}),pinMessage:async(e,t,s)=>await y.put(y.routes.channels.pin(e,t),s?{reason:s}:void 0),pruneMembers:async(e,t)=>await y.post(y.routes.guilds.members.prune(e),t),searchMembers:async(e,t,s)=>await y.get(y.routes.guilds.members.search(e,t,s)),unbanMember:async(e,t)=>await y.delete(y.routes.guilds.members.ban(e,t)),unpinMessage:async(e,t,s)=>await y.delete(y.routes.channels.pin(e,t),s?{reason:s}:void 0),triggerTypingIndicator:async e=>await y.post(y.routes.channels.typing(e)),upsertGlobalApplicationCommands:async e=>await y.put(y.routes.interactions.commands.commands(y.applicationId),e),upsertGuildApplicationCommands:async(e,t)=>await y.put(y.routes.interactions.commands.guilds.all(y.applicationId,e),t)};return y}
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9ucyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc3QtYXNzaWduICovXG5pbXBvcnQgeyBJbnRlcmFjdGlvblJlc3BvbnNlVHlwZXMgfSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7XG4gIGNhbGN1bGF0ZUJpdHMsXG4gIGNhbWVsaXplLFxuICBjYW1lbFRvU25ha2VDYXNlLFxuICBkZWxheSxcbiAgZmluZEZpbGVzLFxuICBnZXRCb3RJZEZyb21Ub2tlbixcbiAgaXNHZXRNZXNzYWdlc0FmdGVyLFxuICBpc0dldE1lc3NhZ2VzQXJvdW5kLFxuICBpc0dldE1lc3NhZ2VzQmVmb3JlLFxuICBpc0dldE1lc3NhZ2VzTGltaXQsXG4gIGxvZ2dlcixcbiAgcHJvY2Vzc1JlYWN0aW9uU3RyaW5nLFxuICB1cmxUb0Jhc2U2NCxcbn0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnXG5cbmltcG9ydCB7IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0IH0gZnJvbSAnLi9pbnZhbGlkQnVja2V0LmpzJ1xuaW1wb3J0IHsgUXVldWUgfSBmcm9tICcuL3F1ZXVlLmpzJ1xuXG5pbXBvcnQgdHlwZSB7XG4gIEJpZ1N0cmluZyxcbiAgQ2FtZWxpemUsXG4gIERpc2NvcmRBcHBsaWNhdGlvbixcbiAgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZCxcbiAgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zLFxuICBEaXNjb3JkQXVkaXRMb2csXG4gIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIERpc2NvcmRCYW4sXG4gIERpc2NvcmRDaGFubmVsLFxuICBEaXNjb3JkRW1vamksXG4gIERpc2NvcmRGb2xsb3dBbm5vdW5jZW1lbnRDaGFubmVsLFxuICBEaXNjb3JkRm9sbG93ZWRDaGFubmVsLFxuICBEaXNjb3JkR2V0R2F0ZXdheUJvdCxcbiAgRGlzY29yZEd1aWxkLFxuICBEaXNjb3JkR3VpbGRQcmV2aWV3LFxuICBEaXNjb3JkR3VpbGRXaWRnZXQsXG4gIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzLFxuICBEaXNjb3JkSW50ZWdyYXRpb24sXG4gIERpc2NvcmRJbnZpdGUsXG4gIERpc2NvcmRJbnZpdGVNZXRhZGF0YSxcbiAgRGlzY29yZExpc3RBY3RpdmVUaHJlYWRzLFxuICBEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcyxcbiAgRGlzY29yZE1lbWJlcixcbiAgRGlzY29yZE1lbWJlcldpdGhVc2VyLFxuICBEaXNjb3JkTWVzc2FnZSxcbiAgRGlzY29yZFBydW5lZENvdW50LFxuICBEaXNjb3JkUm9sZSxcbiAgRGlzY29yZFNjaGVkdWxlZEV2ZW50LFxuICBEaXNjb3JkU3RhZ2VJbnN0YW5jZSxcbiAgRGlzY29yZFN0aWNrZXIsXG4gIERpc2NvcmRTdGlja2VyUGFjayxcbiAgRGlzY29yZFRlbXBsYXRlLFxuICBEaXNjb3JkVGhyZWFkTWVtYmVyLFxuICBEaXNjb3JkVXNlcixcbiAgRGlzY29yZFZhbml0eVVybCxcbiAgRGlzY29yZFZvaWNlUmVnaW9uLFxuICBEaXNjb3JkV2ViaG9vayxcbiAgRGlzY29yZFdlbGNvbWVTY3JlZW4sXG4gIEdldE1lc3NhZ2VzT3B0aW9ucyxcbiAgR2V0U2NoZWR1bGVkRXZlbnRVc2VycyxcbiAgTWZhTGV2ZWxzLFxuICBNb2RpZnlHdWlsZFRlbXBsYXRlLFxufSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB0eXBlIHsgQ3JlYXRlUmVzdE1hbmFnZXJPcHRpb25zLCBSZXN0TWFuYWdlciwgU2VuZFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi90eXBlcy5qcydcblxuLy8gVE9ETzogbWFrZSBkeW5hbWljIGJhc2VkIG9uIHBhY2thZ2UuanNvbiBmaWxlXG5jb25zdCB2ZXJzaW9uID0gJzE5LjAuMC1hbHBoYS4xJ1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVzdE1hbmFnZXIob3B0aW9uczogQ3JlYXRlUmVzdE1hbmFnZXJPcHRpb25zKTogUmVzdE1hbmFnZXIge1xuICAvLyBGYWxzeSB0b2tlbiBzdHJpbmcgY2hlY2tcbiAgaWYgKCFvcHRpb25zLnRva2VuKSB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IHByb3ZpZGUgYSB2YWxpZCB0b2tlbi4nKVxuXG4gIGNvbnN0IHJlc3Q6IFJlc3RNYW5hZ2VyID0ge1xuICAgIHRva2VuOiBvcHRpb25zLnRva2VuLFxuICAgIGFwcGxpY2F0aW9uSWQ6IG9wdGlvbnMuYXBwbGljYXRpb25JZCA/IEJpZ0ludChvcHRpb25zLmFwcGxpY2F0aW9uSWQpIDogZ2V0Qm90SWRGcm9tVG9rZW4ob3B0aW9ucy50b2tlbiksXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/IDEwLFxuICAgIGJhc2VVcmw6IG9wdGlvbnMuYmFzZVVybCA/PyAnaHR0cHM6Ly9kaXNjb3JkLmNvbS9hcGknLFxuICAgIG1heFJldHJ5Q291bnQ6IEluZmluaXR5LFxuICAgIGdsb2JhbGx5UmF0ZUxpbWl0ZWQ6IGZhbHNlLFxuICAgIHByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzOiBmYWxzZSxcbiAgICBkZWxldGVRdWV1ZURlbGF5OiA2MDAwMCxcbiAgICBxdWV1ZXM6IG5ldyBNYXAoKSxcbiAgICByYXRlTGltaXRlZFBhdGhzOiBuZXcgTWFwKCksXG4gICAgaW52YWxpZEJ1Y2tldDogY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQoe30pLFxuXG4gICAgcm91dGVzOiB7XG4gICAgICB3ZWJob29rczoge1xuICAgICAgICBpZDogKHdlYmhvb2tJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL3dlYmhvb2tzLyR7d2ViaG9va0lkfWBcbiAgICAgICAgfSxcbiAgICAgICAgbWVzc2FnZTogKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgIGxldCB1cmwgPSBgL3dlYmhvb2tzLyR7d2ViaG9va0lkfS8ke3Rva2VufS9tZXNzYWdlcy8ke21lc3NhZ2VJZH0/YFxuXG4gICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnRocmVhZElkKSB1cmwgKz0gYHRocmVhZF9pZD0ke29wdGlvbnMudGhyZWFkSWR9YFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgfSxcbiAgICAgICAgb3JpZ2luYWw6ICh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvd2ViaG9va3MvJHt3ZWJob29rSWR9LyR7dG9rZW59L21lc3NhZ2VzL0BvcmlnaW5hbD9gXG5cbiAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMudGhyZWFkSWQpIHVybCArPSBgdGhyZWFkX2lkPSR7b3B0aW9ucy50aHJlYWRJZH1gXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICB9LFxuICAgICAgICB3ZWJob29rOiAod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgIGxldCB1cmwgPSBgL3dlYmhvb2tzLyR7d2ViaG9va0lkfS8ke3Rva2VufT9gXG5cbiAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnM/LndhaXQgIT09IHVuZGVmaW5lZCkgdXJsICs9IGB3YWl0PSR7b3B0aW9ucy53YWl0LnRvU3RyaW5nKCl9YFxuICAgICAgICAgICAgaWYgKG9wdGlvbnMudGhyZWFkSWQpIHVybCArPSBgdGhyZWFkX2lkPSR7b3B0aW9ucy50aHJlYWRJZH1gXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgICAgLy8gTWlzY2VsbGFuZW91cyBFbmRwb2ludHNcbiAgICAgIHNlc3Npb25JbmZvOiAoKSA9PiByZXN0LnJvdXRlcy5nYXRld2F5Qm90KCksXG5cbiAgICAgIC8vIENoYW5uZWwgRW5kcG9pbnRzXG4gICAgICBjaGFubmVsczoge1xuICAgICAgICBidWxrOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L21lc3NhZ2VzL2J1bGstZGVsZXRlYFxuICAgICAgICB9LFxuICAgICAgICBkbTogKCkgPT4ge1xuICAgICAgICAgIHJldHVybiAnL3VzZXJzL0BtZS9jaGFubmVscydcbiAgICAgICAgfSxcbiAgICAgICAgcGluOiAoY2hhbm5lbElkLCBtZXNzYWdlSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vcGlucy8ke21lc3NhZ2VJZH1gXG4gICAgICAgIH0sXG4gICAgICAgIHBpbnM6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vcGluc2BcbiAgICAgICAgfSxcbiAgICAgICAgcmVhY3Rpb25zOiB7XG4gICAgICAgICAgYm90OiAoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGVtb2ppKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vbWVzc2FnZXMvJHttZXNzYWdlSWR9L3JlYWN0aW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChlbW9qaSl9L0BtZWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVzZXI6IChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgZW1vamksIHVzZXJJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L21lc3NhZ2VzLyR7bWVzc2FnZUlkfS9yZWFjdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoZW1vamkpfS8ke3VzZXJJZH1gXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbGw6IChjaGFubmVsSWQsIG1lc3NhZ2VJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L21lc3NhZ2VzLyR7bWVzc2FnZUlkfS9yZWFjdGlvbnNgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbW9qaTogKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBlbW9qaSwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L21lc3NhZ2VzLyR7bWVzc2FnZUlkfS9yZWFjdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoZW1vamkpfT9gXG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXIpIHVybCArPSBgYWZ0ZXI9JHtvcHRpb25zLmFmdGVyfWBcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCkgdXJsICs9IGAmbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVzc2FnZTogKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBlbW9qaSwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L21lc3NhZ2VzLyR7bWVzc2FnZUlkfS9yZWFjdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoZW1vamkpfT9gXG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXIpIHVybCArPSBgYWZ0ZXI9JHtvcHRpb25zLmFmdGVyfWBcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCkgdXJsICs9IGAmbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHdlYmhvb2tzOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3dlYmhvb2tzYFxuICAgICAgICB9LFxuXG4gICAgICAgIGNoYW5uZWw6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH1gXG4gICAgICAgIH0sXG5cbiAgICAgICAgZm9sbG93OiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L2ZvbGxvd2Vyc2BcbiAgICAgICAgfSxcblxuICAgICAgICBmb3J1bTogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS90aHJlYWRzP2hhc19tZXNzYWdlPXRydWVgXG4gICAgICAgIH0sXG5cbiAgICAgICAgaW52aXRlczogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9pbnZpdGVzYFxuICAgICAgICB9LFxuXG4gICAgICAgIG1lc3NhZ2U6IChjaGFubmVsSWQsIG1lc3NhZ2VJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9tZXNzYWdlcy8ke21lc3NhZ2VJZH1gXG4gICAgICAgIH0sXG5cbiAgICAgICAgbWVzc2FnZXM6IChjaGFubmVsSWQsIG9wdGlvbnM/OiBHZXRNZXNzYWdlc09wdGlvbnMpID0+IHtcbiAgICAgICAgICBsZXQgdXJsID0gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vbWVzc2FnZXM/YFxuXG4gICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChpc0dldE1lc3NhZ2VzQWZ0ZXIob3B0aW9ucykgJiYgb3B0aW9ucy5hZnRlcikge1xuICAgICAgICAgICAgICB1cmwgKz0gYGFmdGVyPSR7b3B0aW9ucy5hZnRlcn1gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNHZXRNZXNzYWdlc0JlZm9yZShvcHRpb25zKSAmJiBvcHRpb25zLmJlZm9yZSkge1xuICAgICAgICAgICAgICB1cmwgKz0gYCZiZWZvcmU9JHtvcHRpb25zLmJlZm9yZX1gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNHZXRNZXNzYWdlc0Fyb3VuZChvcHRpb25zKSAmJiBvcHRpb25zLmFyb3VuZCkge1xuICAgICAgICAgICAgICB1cmwgKz0gYCZhcm91bmQ9JHtvcHRpb25zLmFyb3VuZH1gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNHZXRNZXNzYWdlc0xpbWl0KG9wdGlvbnMpICYmIG9wdGlvbnMubGltaXQpIHtcbiAgICAgICAgICAgICAgdXJsICs9IGAmbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgIH0sXG5cbiAgICAgICAgb3ZlcndyaXRlOiAoY2hhbm5lbElkLCBvdmVyd3JpdGVJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9wZXJtaXNzaW9ucy8ke292ZXJ3cml0ZUlkfWBcbiAgICAgICAgfSxcblxuICAgICAgICBjcm9zc3Bvc3Q6IChjaGFubmVsSWQsIG1lc3NhZ2VJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9tZXNzYWdlcy8ke21lc3NhZ2VJZH0vY3Jvc3Nwb3N0YFxuICAgICAgICB9LFxuXG4gICAgICAgIHN0YWdlczogKCkgPT4ge1xuICAgICAgICAgIHJldHVybiAnL3N0YWdlLWluc3RhbmNlcydcbiAgICAgICAgfSxcblxuICAgICAgICBzdGFnZTogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL3N0YWdlLWluc3RhbmNlcy8ke2NoYW5uZWxJZH1gXG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gVGhyZWFkIEVuZHBvaW50c1xuICAgICAgICB0aHJlYWRzOiB7XG4gICAgICAgICAgbWVzc2FnZTogKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vbWVzc2FnZXMvJHttZXNzYWdlSWR9L3RocmVhZHNgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbGw6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS90aHJlYWRzYFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWN0aXZlOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vdGhyZWFkcy9hY3RpdmVgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZW1iZXJzOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vdGhyZWFkLW1lbWJlcnNgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZTogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3RocmVhZC1tZW1iZXJzL0BtZWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVzZXI6IChjaGFubmVsSWQsIHVzZXJJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3RocmVhZC1tZW1iZXJzLyR7dXNlcklkfWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFyY2hpdmVkOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vdGhyZWFkcy9hcmNoaXZlZGBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHB1YmxpYzogKGNoYW5uZWxJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3RocmVhZHMvYXJjaGl2ZWQvcHVibGljP2BcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgdXJsICs9IGBiZWZvcmU9JHtuZXcgRGF0ZShvcHRpb25zLmJlZm9yZSkudG9JU09TdHJpbmcoKX1gXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCkgdXJsICs9IGAmbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJpdmF0ZTogKGNoYW5uZWxJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3RocmVhZHMvYXJjaGl2ZWQvcHJpdmF0ZT9gXG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmJlZm9yZSkge1xuICAgICAgICAgICAgICAgIHVybCArPSBgYmVmb3JlPSR7bmV3IERhdGUob3B0aW9ucy5iZWZvcmUpLnRvSVNPU3RyaW5nKCl9YFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubGltaXQpIHVybCArPSBgJmxpbWl0PSR7b3B0aW9ucy5saW1pdH1gXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGpvaW5lZDogKGNoYW5uZWxJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3VzZXJzL0BtZS90aHJlYWRzL2FyY2hpdmVkL3ByaXZhdGU/YFxuXG4gICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5iZWZvcmUpIHtcbiAgICAgICAgICAgICAgICB1cmwgKz0gYGJlZm9yZT0ke25ldyBEYXRlKG9wdGlvbnMuYmVmb3JlKS50b0lTT1N0cmluZygpfWBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0KSB1cmwgKz0gYCZsaW1pdD0ke29wdGlvbnMubGltaXR9YFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICB0eXBpbmc6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vdHlwaW5nYFxuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgICAgLy8gR3VpbGQgRW5kcG9pbnRzXG4gICAgICBndWlsZHM6IHtcbiAgICAgICAgYWxsOiAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuICcvZ3VpbGRzJ1xuICAgICAgICB9LFxuICAgICAgICBhdWRpdGxvZ3M6IChndWlsZElkLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvZ3VpbGRzLyR7Z3VpbGRJZH0vYXVkaXQtbG9ncz9gXG5cbiAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWN0aW9uVHlwZSkgdXJsICs9IGBhY3Rpb25fdHlwZT0ke29wdGlvbnMuYWN0aW9uVHlwZX1gXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5iZWZvcmUpIHVybCArPSBgJmJlZm9yZT0ke29wdGlvbnMuYmVmb3JlfWBcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0KSB1cmwgKz0gYCZsaW1pdD0ke29wdGlvbnMubGltaXR9YFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMudXNlcklkKSB1cmwgKz0gYCZ1c2VyX2lkPSR7b3B0aW9ucy51c2VySWR9YFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgfSxcbiAgICAgICAgYXV0b21vZDoge1xuICAgICAgICAgIHJ1bGU6IChndWlsZElkLCBydWxlSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L2F1dG8tbW9kZXJhdGlvbi9ydWxlcy8ke3J1bGVJZH1gXG4gICAgICAgICAgfSxcbiAgICAgICAgICBydWxlczogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L2F1dG8tbW9kZXJhdGlvbi9ydWxlc2BcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBjaGFubmVsczogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9jaGFubmVsc2BcbiAgICAgICAgfSxcbiAgICAgICAgZW1vamk6IChndWlsZElkLCBlbW9qaUlkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vZW1vamlzLyR7ZW1vamlJZH1gXG4gICAgICAgIH0sXG4gICAgICAgIGVtb2ppczogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9lbW9qaXNgXG4gICAgICAgIH0sXG4gICAgICAgIGV2ZW50czoge1xuICAgICAgICAgIGV2ZW50czogKGd1aWxkSWQsIHdpdGhVc2VyQ291bnQ/OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtndWlsZElkfS9zY2hlZHVsZWQtZXZlbnRzP2BcblxuICAgICAgICAgICAgaWYgKHdpdGhVc2VyQ291bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB1cmwgKz0gYHdpdGhfdXNlcl9jb3VudD0ke3dpdGhVc2VyQ291bnQudG9TdHJpbmcoKX1gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBldmVudDogKGd1aWxkSWQsIGV2ZW50SWQsIHdpdGhVc2VyQ291bnQ/OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtndWlsZElkfS9zY2hlZHVsZWQtZXZlbnRzLyR7ZXZlbnRJZH1gXG5cbiAgICAgICAgICAgIGlmICh3aXRoVXNlckNvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdXJsICs9IGB3aXRoX3VzZXJfY291bnQ9JHt3aXRoVXNlckNvdW50LnRvU3RyaW5nKCl9YFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB1c2VyczogKGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnM/OiBHZXRTY2hlZHVsZWRFdmVudFVzZXJzKSA9PiB7XG4gICAgICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtndWlsZElkfS9zY2hlZHVsZWQtZXZlbnRzLyR7ZXZlbnRJZH0vdXNlcnM/YFxuXG4gICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0ICE9PSB1bmRlZmluZWQpIHVybCArPSBgbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMud2l0aE1lbWJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICAgIHVybCArPSBgJndpdGhfbWVtYmVyPSR7b3B0aW9ucy53aXRoTWVtYmVyLnRvU3RyaW5nKCl9YFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXIgIT09IHVuZGVmaW5lZCkgdXJsICs9IGAmYWZ0ZXI9JHtvcHRpb25zLmFmdGVyfWBcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5iZWZvcmUgIT09IHVuZGVmaW5lZCkgdXJsICs9IGAmYmVmb3JlPSR7b3B0aW9ucy5iZWZvcmV9YFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZ3VpbGQoZ3VpbGRJZCwgd2l0aENvdW50cykge1xuICAgICAgICAgIGxldCB1cmwgPSBgL2d1aWxkcy8ke2d1aWxkSWR9P2BcblxuICAgICAgICAgIGlmICh3aXRoQ291bnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHVybCArPSBgd2l0aF9jb3VudHM9JHt3aXRoQ291bnRzLnRvU3RyaW5nKCl9YFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgfSxcbiAgICAgICAgaW50ZWdyYXRpb24oZ3VpbGRJZCwgaW50ZWdyYXRpb25JZCkge1xuICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L2ludGVncmF0aW9ucy8ke2ludGVncmF0aW9uSWR9YFxuICAgICAgICB9LFxuICAgICAgICBpbnRlZ3JhdGlvbnM6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vaW50ZWdyYXRpb25zP2luY2x1ZGVfYXBwbGljYXRpb25zPXRydWVgXG4gICAgICAgIH0sXG4gICAgICAgIGludml0ZShpbnZpdGVDb2RlLCBvcHRpb25zKSB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvaW52aXRlcy8ke2ludml0ZUNvZGV9P2BcblxuICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy53aXRoQ291bnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICB1cmwgKz0gYHdpdGhfY291bnRzPSR7b3B0aW9ucy53aXRoQ291bnRzLnRvU3RyaW5nKCl9YFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMud2l0aEV4cGlyYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIHVybCArPSBgJndpdGhfZXhwaXJhdGlvbj0ke29wdGlvbnMud2l0aEV4cGlyYXRpb24udG9TdHJpbmcoKX1gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zY2hlZHVsZWRFdmVudElkKSB7XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgdXJsICs9IGAmZ3VpbGRfc2NoZWR1bGVkX2V2ZW50X2lkPSR7b3B0aW9ucy5zY2hlZHVsZWRFdmVudElkfWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgIH0sXG4gICAgICAgIGludml0ZXM6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vaW52aXRlc2BcbiAgICAgICAgfSxcbiAgICAgICAgbGVhdmU6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvdXNlcnMvQG1lL2d1aWxkcy8ke2d1aWxkSWR9YFxuICAgICAgICB9LFxuICAgICAgICBtZW1iZXJzOiB7XG4gICAgICAgICAgYmFuOiAoZ3VpbGRJZCwgdXNlcklkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9iYW5zLyR7dXNlcklkfWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJhbnM6IChndWlsZElkLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtndWlsZElkfS9iYW5zP2BcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCkgdXJsICs9IGBsaW1pdD0ke29wdGlvbnMubGltaXR9YFxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmFmdGVyKSB1cmwgKz0gYCZhZnRlcj0ke29wdGlvbnMuYWZ0ZXJ9YFxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmJlZm9yZSkgdXJsICs9IGAmYmVmb3JlPSR7b3B0aW9ucy5iZWZvcmV9YFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBib3Q6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9tZW1iZXJzL0BtZWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lbWJlcjogKGd1aWxkSWQsIHVzZXJJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vbWVtYmVycy8ke3VzZXJJZH1gXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZW1iZXJzOiAoZ3VpbGRJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvZ3VpbGRzLyR7Z3VpbGRJZH0vbWVtYmVycz9gXG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCkgdXJsICs9IGBsaW1pdD0ke29wdGlvbnMubGltaXR9YFxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmFmdGVyKSB1cmwgKz0gYCZhZnRlcj0ke29wdGlvbnMuYWZ0ZXJ9YFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWFyY2g6IChndWlsZElkLCBxdWVyeSwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvZ3VpbGRzLyR7Z3VpbGRJZH0vbWVtYmVycy9zZWFyY2g/cXVlcnk9JHtlbmNvZGVVUklDb21wb25lbnQocXVlcnkpfWBcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubGltaXQgIT09IHVuZGVmaW5lZCkgdXJsICs9IGAmbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJ1bmU6IChndWlsZElkLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtndWlsZElkfS9wcnVuZT9gXG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGF5cykgdXJsICs9IGBkYXlzPSR7b3B0aW9ucy5kYXlzfWBcbiAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy5pbmNsdWRlUm9sZXMpKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICAgIHVybCArPSBgJmluY2x1ZGVfcm9sZXM9JHtvcHRpb25zLmluY2x1ZGVSb2xlcy5qb2luKCcsJyl9YFxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaW5jbHVkZVJvbGVzKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICAgIHVybCArPSBgJmluY2x1ZGVfcm9sZXM9JHtvcHRpb25zLmluY2x1ZGVSb2xlc31gXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIG1mYTogKGd1aWxkSWQpID0+IGAvZ3VpbGRzLyR7Z3VpbGRJZH0vbWZhYCxcbiAgICAgICAgcHJldmlldzogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9wcmV2aWV3YFxuICAgICAgICB9LFxuICAgICAgICBwcnVuZTogKGd1aWxkSWQsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtndWlsZElkfS9wcnVuZT9gXG5cbiAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGF5cykgdXJsICs9IGBkYXlzPSR7b3B0aW9ucy5kYXlzfWBcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMuaW5jbHVkZVJvbGVzKSkge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIHVybCArPSBgJmluY2x1ZGVfcm9sZXM9JHtvcHRpb25zLmluY2x1ZGVSb2xlcy5qb2luKCcsJyl9YFxuICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmluY2x1ZGVSb2xlcykge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIHVybCArPSBgJmluY2x1ZGVfcm9sZXM9JHtvcHRpb25zLmluY2x1ZGVSb2xlc31gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICB9LFxuICAgICAgICByb2xlczoge1xuICAgICAgICAgIG9uZTogKGd1aWxkSWQsIHJvbGVJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vcm9sZXMvJHtyb2xlSWR9YFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vcm9sZXNgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZW1iZXI6IChndWlsZElkLCBtZW1iZXJJZCwgcm9sZUlkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9tZW1iZXJzLyR7bWVtYmVySWR9L3JvbGVzLyR7cm9sZUlkfWBcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzdGlja2VyczogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9zdGlja2Vyc2BcbiAgICAgICAgfSxcbiAgICAgICAgc3RpY2tlcjogKGd1aWxkSWQsIHN0aWNrZXJJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L3N0aWNrZXJzLyR7c3RpY2tlcklkfWBcbiAgICAgICAgfSxcbiAgICAgICAgdm9pY2U6IChndWlsZElkLCB1c2VySWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS92b2ljZS1zdGF0ZXMvJHt1c2VySWQgPz8gJ0BtZSd9YFxuICAgICAgICB9LFxuICAgICAgICB0ZW1wbGF0ZXM6IHtcbiAgICAgICAgICBjb2RlOiAoY29kZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzL3RlbXBsYXRlcy8ke2NvZGV9YFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZ3VpbGQ6IChndWlsZElkLCBjb2RlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS90ZW1wbGF0ZXMvJHtjb2RlfWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFsbDogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L3RlbXBsYXRlc2BcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB2YW5pdHk6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vdmFuaXR5LXVybGBcbiAgICAgICAgfSxcbiAgICAgICAgcmVnaW9uczogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9yZWdpb25zYFxuICAgICAgICB9LFxuICAgICAgICB3ZWJob29rczogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS93ZWJob29rc2BcbiAgICAgICAgfSxcbiAgICAgICAgd2VsY29tZTogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS93ZWxjb21lLXNjcmVlbmBcbiAgICAgICAgfSxcbiAgICAgICAgd2lkZ2V0OiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L3dpZGdldGBcbiAgICAgICAgfSxcbiAgICAgICAgd2lkZ2V0SnNvbjogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS93aWRnZXQuanNvbmBcbiAgICAgICAgfSxcbiAgICAgIH0sXG5cbiAgICAgIHN0aWNrZXI6IChzdGlja2VySWQ6IEJpZ1N0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gYC9zdGlja2Vycy8ke3N0aWNrZXJJZH1gXG4gICAgICB9LFxuXG4gICAgICByZWdpb25zOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiAnL3ZvaWNlL3JlZ2lvbnMnXG4gICAgICB9LFxuXG4gICAgICAvLyBJbnRlcmFjdGlvbiBFbmRwb2ludHNcbiAgICAgIGludGVyYWN0aW9uczoge1xuICAgICAgICBjb21tYW5kczoge1xuICAgICAgICAgIC8vIEFwcGxpY2F0aW9uIEVuZHBvaW50c1xuICAgICAgICAgIGNvbW1hbmRzOiAoYXBwbGljYXRpb25JZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvYXBwbGljYXRpb25zLyR7YXBwbGljYXRpb25JZH0vY29tbWFuZHNgXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGd1aWxkczoge1xuICAgICAgICAgICAgYWxsKGFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGAvYXBwbGljYXRpb25zLyR7YXBwbGljYXRpb25JZH0vZ3VpbGRzLyR7Z3VpbGRJZH0vY29tbWFuZHNgXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBvbmUoYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkLCB3aXRoTG9jYWxpemF0aW9ucykge1xuICAgICAgICAgICAgICBsZXQgdXJsID0gYC9hcHBsaWNhdGlvbnMvJHthcHBsaWNhdGlvbklkfS9ndWlsZHMvJHtndWlsZElkfS9jb21tYW5kcy8ke2NvbW1hbmRJZH0/YFxuXG4gICAgICAgICAgICAgIGlmICh3aXRoTG9jYWxpemF0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdXJsICs9IGB3aXRoX2xvY2FsaXphdGlvbnM9JHt3aXRoTG9jYWxpemF0aW9ucy50b1N0cmluZygpfWBcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwZXJtaXNzaW9uczogKGFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2FwcGxpY2F0aW9ucy8ke2FwcGxpY2F0aW9uSWR9L2d1aWxkcy8ke2d1aWxkSWR9L2NvbW1hbmRzL3Blcm1pc3Npb25zYFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGVybWlzc2lvbjogKGFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvYXBwbGljYXRpb25zLyR7YXBwbGljYXRpb25JZH0vZ3VpbGRzLyR7Z3VpbGRJZH0vY29tbWFuZHMvJHtjb21tYW5kSWR9L3Blcm1pc3Npb25zYFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tbWFuZDogKGFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCwgd2l0aExvY2FsaXphdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGxldCB1cmwgPSBgL2FwcGxpY2F0aW9ucy8ke2FwcGxpY2F0aW9uSWR9L2NvbW1hbmRzLyR7Y29tbWFuZElkfT9gXG5cbiAgICAgICAgICAgIGlmICh3aXRoTG9jYWxpemF0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHVybCArPSBgd2l0aExvY2FsaXphdGlvbnM9JHt3aXRoTG9jYWxpemF0aW9ucy50b1N0cmluZygpfWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVzcG9uc2VzOiB7XG4gICAgICAgICAgLy8gSW50ZXJhY3Rpb24gRW5kcG9pbnRzXG4gICAgICAgICAgY2FsbGJhY2s6IChpbnRlcmFjdGlvbklkLCB0b2tlbikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvaW50ZXJhY3Rpb25zLyR7aW50ZXJhY3Rpb25JZH0vJHt0b2tlbn0vY2FsbGJhY2tgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvcmlnaW5hbDogKGludGVyYWN0aW9uSWQsIHRva2VuKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC93ZWJob29rcy8ke2ludGVyYWN0aW9uSWR9LyR7dG9rZW59L21lc3NhZ2VzL0BvcmlnaW5hbGBcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lc3NhZ2U6IChhcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC93ZWJob29rcy8ke2FwcGxpY2F0aW9uSWR9LyR7dG9rZW59L21lc3NhZ2VzLyR7bWVzc2FnZUlkfWBcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgICAgLy8gVXNlciBlbmRwb2ludHNcbiAgICAgIHVzZXIodXNlcklkKSB7XG4gICAgICAgIHJldHVybiBgL3VzZXJzLyR7dXNlcklkfWBcbiAgICAgIH0sXG5cbiAgICAgIHVzZXJCb3QoKSB7XG4gICAgICAgIHJldHVybiAnL3VzZXJzL0BtZSdcbiAgICAgIH0sXG5cbiAgICAgIG9hdXRoMkFwcGxpY2F0aW9uKCkge1xuICAgICAgICByZXR1cm4gJ29hdXRoMi9hcHBsaWNhdGlvbnMvQG1lJ1xuICAgICAgfSxcblxuICAgICAgZ2F0ZXdheUJvdCgpIHtcbiAgICAgICAgcmV0dXJuICcvZ2F0ZXdheS9ib3QnXG4gICAgICB9LFxuXG4gICAgICBuaXRyb1N0aWNrZXJQYWNrcygpIHtcbiAgICAgICAgcmV0dXJuICcvc3RpY2tlci1wYWNrcydcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIGNoZWNrUmF0ZUxpbWl0cyh1cmwpIHtcbiAgICAgIGNvbnN0IHJhdGVsaW1pdGVkID0gcmVzdC5yYXRlTGltaXRlZFBhdGhzLmdldCh1cmwpXG4gICAgICBjb25zdCBnbG9iYWwgPSByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZ2V0KCdnbG9iYWwnKVxuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKVxuXG4gICAgICBpZiAocmF0ZWxpbWl0ZWQgJiYgbm93IDwgcmF0ZWxpbWl0ZWQucmVzZXRUaW1lc3RhbXApIHtcbiAgICAgICAgcmV0dXJuIHJhdGVsaW1pdGVkLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iYWwgJiYgbm93IDwgZ2xvYmFsLnJlc2V0VGltZXN0YW1wKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWwucmVzZXRUaW1lc3RhbXAgLSBub3dcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGNoYW5nZVRvRGlzY29yZEZvcm1hdChvYmo6IGFueSk6IGFueSB7XG4gICAgICBpZiAob2JqID09PSBudWxsKSByZXR1cm4gbnVsbFxuXG4gICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICAgIHJldHVybiBvYmoubWFwKChpdGVtKSA9PiByZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChpdGVtKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld09iajogYW55ID0ge31cblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3Blcm1pc3Npb25zJykge1xuICAgICAgICAgICAgbmV3T2JqLnBlcm1pc3Npb25zID0gY2FsY3VsYXRlQml0cyhvYmpba2V5XSlcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV3T2JqW2NhbWVsVG9TbmFrZUNhc2Uoa2V5KV0gPSByZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvYmpba2V5XSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXdPYmpcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdiaWdpbnQnKSByZXR1cm4gb2JqLnRvU3RyaW5nKClcblxuICAgICAgcmV0dXJuIG9ialxuICAgIH0sXG5cbiAgICBjcmVhdGVSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgICd1c2VyLWFnZW50JzogYERpc2NvcmRCb3QgKGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3JkZW5vL2Rpc2NvcmRlbm8sIHYke3ZlcnNpb259KWAsXG4gICAgICB9XG5cbiAgICAgIGlmICghb3B0aW9ucy51bmF1dGhvcml6ZWQpIGhlYWRlcnMuYXV0aG9yaXphdGlvbiA9IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgLy8gU09NRVRJTUVTIFNQRUNJQUwgSEVBREVSUyAoRS5HLiBDVVNUT00gQVVUSE9SSVpBVElPTikgTkVFRCBUTyBCRSBVU0VEXG4gICAgICBpZiAob3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICAgIGhlYWRlcnNba2V5LnRvTG93ZXJDYXNlKCldID0gb3B0aW9ucy5oZWFkZXJzW2tleV1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBHRVQgTUVUSE9EUyBTSE9VTEQgTk9UIEhBVkUgQSBCT0RZXG4gICAgICBpZiAob3B0aW9ucy5tZXRob2QgPT09ICdHRVQnKSB7XG4gICAgICAgIG9wdGlvbnMuYm9keSA9IHVuZGVmaW5lZFxuICAgICAgfVxuXG4gICAgICAvLyBJRiBBIFJFQVNPTiBJUyBQUk9WSURFRCBFTkNPREUgSVQgSU4gSEVBREVSU1xuICAgICAgaWYgKG9wdGlvbnMuYm9keT8ucmVhc29uKSB7XG4gICAgICAgIGhlYWRlcnNbJ1gtQXVkaXQtTG9nLVJlYXNvbiddID0gZW5jb2RlVVJJQ29tcG9uZW50KG9wdGlvbnMuYm9keS5yZWFzb24gYXMgc3RyaW5nKVxuICAgICAgICBvcHRpb25zLmJvZHkucmVhc29uID0gdW5kZWZpbmVkXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmJvZHkpIHtcbiAgICAgICAgY29uc3QgeyBmaWxlIH0gPSBvcHRpb25zLmJvZHlcbiAgICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgICBjb25zdCBmaWxlcyA9IGZpbmRGaWxlcyhmaWxlKVxuICAgICAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuXG4gICAgICAgICAgLy8gV0hFTiBDUkVBVElORyBBIFNUSUNLRVIsIERJU0NPUkQgV0FOVFMgRk9STSBEQVRBIE9OTFlcbiAgICAgICAgICBpZiAob3B0aW9ucy51cmw/LmVuZHNXaXRoKCcvc3RpY2tlcnMnKSAmJiBvcHRpb25zLm1ldGhvZCA9PT0gJ1BPU1QnKSB7XG4gICAgICAgICAgICBmb3JtLmFwcGVuZCgnZmlsZScsIGZpbGVzWzBdLmJsb2IsIGZpbGVzWzBdLm5hbWUpXG4gICAgICAgICAgICBmb3JtLmFwcGVuZCgnbmFtZScsIG9wdGlvbnMuYm9keS5uYW1lIGFzIHN0cmluZylcbiAgICAgICAgICAgIGZvcm0uYXBwZW5kKCdkZXNjcmlwdGlvbicsIG9wdGlvbnMuYm9keS5kZXNjcmlwdGlvbiBhcyBzdHJpbmcpXG4gICAgICAgICAgICBmb3JtLmFwcGVuZCgndGFncycsIG9wdGlvbnMuYm9keS50YWdzIGFzIHN0cmluZylcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBmb3JtLmFwcGVuZChgZmlsZSR7aX1gLCBmaWxlc1tpXS5ibG9iLCBmaWxlc1tpXS5uYW1lKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmlsZSkgb3B0aW9ucy5ib2R5LmZpbGUgPSB1bmRlZmluZWRcbiAgICAgICAgICAgIGZvcm0uYXBwZW5kKCdwYXlsb2FkX2pzb24nLCBKU09OLnN0cmluZ2lmeShyZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvcHRpb25zLmJvZHkpKSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvcHRpb25zLmJvZHkuZmlsZSA9IGZvcm1cbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmJvZHkgJiYgIVsnR0VUJywgJ0RFTEVURSddLmluY2x1ZGVzKG9wdGlvbnMubWV0aG9kKSkge1xuICAgICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgYm9keTogKG9wdGlvbnMuYm9keT8uZmlsZSA/PyBKU09OLnN0cmluZ2lmeShyZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvcHRpb25zLmJvZHkpKSkgYXMgRm9ybURhdGEgfCBzdHJpbmcsXG4gICAgICAgIG1ldGhvZDogb3B0aW9ucy5tZXRob2QsXG4gICAgICB9XG4gICAgfSxcblxuICAgIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKCkge1xuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZW50cmllcygpKSB7XG4gICAgICAgIC8vICAgcmVzdC5kZWJ1ZyhcbiAgICAgICAgLy8gYFtSRVNUIC0gcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHNdIFJ1bm5pbmcgZm9yIG9mIGxvb3AuICR7XG4gICAgICAgIC8vICAgdmFsdWUucmVzZXRUaW1lc3RhbXAgLSBub3dcbiAgICAgICAgLy8gfWBcbiAgICAgICAgLy8gICApXG4gICAgICAgIC8vIElmIHRoZSB0aW1lIGhhcyBub3QgcmVhY2hlZCBjYW5jZWxcbiAgICAgICAgaWYgKHZhbHVlLnJlc2V0VGltZXN0YW1wID4gbm93KSBjb250aW51ZVxuXG4gICAgICAgIC8vIFJhdGUgbGltaXQgaXMgb3ZlciwgZGVsZXRlIHRoZSByYXRlIGxpbWl0ZXJcbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmRlbGV0ZShrZXkpXG4gICAgICAgIC8vIElmIGl0IHdhcyBnbG9iYWwsIGFsc28gbWFyayB0aGUgZ2xvYmFsIHZhbHVlIGFzIGZhbHNlXG4gICAgICAgIGlmIChrZXkgPT09ICdnbG9iYWwnKSByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSBmYWxzZVxuICAgICAgfVxuXG4gICAgICAvLyBBTEwgUEFUSFMgQVJFIENMRUFSRUQgQ0FOIENBTkNFTCBPVVQhXG4gICAgICBpZiAocmVzdC5yYXRlTGltaXRlZFBhdGhzLnNpemUgPT09IDApIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN0LnByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzID0gdHJ1ZVxuICAgICAgICAvLyBSRUNIRUNLIElOIDEgU0VDT05EXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIC8vIHJlc3QuZGVidWcoJ1tSRVNUIC0gcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHNdIFJ1bm5pbmcgc2V0VGltZW91dC4nKVxuICAgICAgICAgIHJlc3QucHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKVxuICAgICAgICB9LCAxMDAwKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKiogUHJvY2Vzc2VzIHRoZSByYXRlIGxpbWl0IGhlYWRlcnMgYW5kIGRldGVybWluZXMgaWYgaXQgbmVlZHMgdG8gYmUgcmF0ZSBsaW1pdGVkIGFuZCByZXR1cm5zIHRoZSBidWNrZXQgaWQgaWYgYXZhaWxhYmxlICovXG4gICAgcHJvY2Vzc0hlYWRlcnModXJsLCBoZWFkZXJzKSB7XG4gICAgICBsZXQgcmF0ZUxpbWl0ZWQgPSBmYWxzZVxuXG4gICAgICAvLyBHRVQgQUxMIE5FQ0VTU0FSWSBIRUFERVJTXG4gICAgICBjb25zdCByZW1haW5pbmcgPSBoZWFkZXJzLmdldCgneC1yYXRlbGltaXQtcmVtYWluaW5nJylcbiAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBoZWFkZXJzLmdldCgneC1yYXRlbGltaXQtcmVzZXQtYWZ0ZXInKVxuICAgICAgY29uc3QgcmVzZXQgPSBEYXRlLm5vdygpICsgTnVtYmVyKHJldHJ5QWZ0ZXIpICogMTAwMFxuICAgICAgY29uc3QgZ2xvYmFsID0gaGVhZGVycy5nZXQoJ3gtcmF0ZWxpbWl0LWdsb2JhbCcpXG4gICAgICAvLyB1bmRlZmluZWQgb3ZlcnJpZGUgbnVsbCBuZWVkZWQgZm9yIHR5cGluZ3NcbiAgICAgIGNvbnN0IGJ1Y2tldElkID0gaGVhZGVycy5nZXQoJ3gtcmF0ZWxpbWl0LWJ1Y2tldCcpID8/IHVuZGVmaW5lZFxuICAgICAgY29uc3QgbGltaXQgPSBoZWFkZXJzLmdldCgneC1yYXRlbGltaXQtbGltaXQnKVxuXG4gICAgICByZXN0LnF1ZXVlcy5nZXQodXJsKT8uaGFuZGxlQ29tcGxldGVkUmVxdWVzdCh7XG4gICAgICAgIHJlbWFpbmluZzogcmVtYWluaW5nID8gTnVtYmVyKHJlbWFpbmluZykgOiB1bmRlZmluZWQsXG4gICAgICAgIGludGVydmFsOiByZXRyeUFmdGVyID8gTnVtYmVyKHJldHJ5QWZ0ZXIpICogMTAwMCA6IHVuZGVmaW5lZCxcbiAgICAgICAgbWF4OiBsaW1pdCA/IE51bWJlcihsaW1pdCkgOiB1bmRlZmluZWQsXG4gICAgICB9KVxuXG4gICAgICAvLyBJRiBUSEVSRSBJUyBOTyBSRU1BSU5JTkcgUkFURSBMSU1JVCwgTUFSSyBJVCBBUyBSQVRFIExJTUlURURcbiAgICAgIGlmIChyZW1haW5pbmcgPT09ICcwJykge1xuICAgICAgICByYXRlTGltaXRlZCA9IHRydWVcblxuICAgICAgICAvLyBTQVZFIFRIRSBVUkwgQVMgTElNSVRFRCwgSU1QT1JUQU5UIEZPUiBORVcgUkVRVUVTVFMgQlkgVVNFUiBXSVRIT1VUIEJVQ0tFVFxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KHVybCwge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICByZXNldFRpbWVzdGFtcDogcmVzZXQsXG4gICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gU0FWRSBUSEUgQlVDS0VUIEFTIExJTUlURUQgU0lOQ0UgRElGRkVSRU5UIFVSTFMgTUFZIFNIQVJFIEEgQlVDS0VUXG4gICAgICAgIGlmIChidWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYnVja2V0SWQsIHtcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiByZXNldCxcbiAgICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSUYgVEhFUkUgSVMgTk8gUkVNQUlOSU5HIEdMT0JBTCBMSU1JVCwgTUFSSyBJVCBSQVRFIExJTUlURUQgR0xPQkFMTFlcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgY29uc3QgcmV0cnlBZnRlciA9IGhlYWRlcnMuZ2V0KCdyZXRyeS1hZnRlcicpXG4gICAgICAgIGNvbnN0IGdsb2JhbFJlc2V0ID0gRGF0ZS5ub3coKSArIE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDBcbiAgICAgICAgLy8gICByZXN0LmRlYnVnKFxuICAgICAgICAvLyBgW1JFU1QgPSBHbG9iYWxseSBSYXRlIExpbWl0ZWRdIFVSTDogJHt1cmx9IHwgR2xvYmFsIFJlc3Q6ICR7Z2xvYmFsUmVzZXR9YFxuICAgICAgICAvLyAgIClcbiAgICAgICAgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gdHJ1ZVxuICAgICAgICByYXRlTGltaXRlZCA9IHRydWVcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSBmYWxzZVxuICAgICAgICB9LCBnbG9iYWxSZXNldClcblxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KCdnbG9iYWwnLCB7XG4gICAgICAgICAgdXJsOiAnZ2xvYmFsJyxcbiAgICAgICAgICByZXNldFRpbWVzdGFtcDogZ2xvYmFsUmVzZXQsXG4gICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChidWNrZXRJZCwge1xuICAgICAgICAgICAgdXJsOiAnZ2xvYmFsJyxcbiAgICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiBnbG9iYWxSZXNldCxcbiAgICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHJhdGVMaW1pdGVkICYmICFyZXN0LnByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzKSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJhdGVMaW1pdGVkID8gYnVja2V0SWQgOiB1bmRlZmluZWRcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFJlcXVlc3Qob3B0aW9ucykge1xuICAgICAgY29uc3QgdXJsID0gb3B0aW9ucy51cmwuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSA/IG9wdGlvbnMudXJsIDogYCR7cmVzdC5iYXNlVXJsfS92JHtyZXN0LnZlcnNpb259JHtvcHRpb25zLnVybH1gXG4gICAgICBjb25zdCBwYXlsb2FkID0gcmVzdC5jcmVhdGVSZXF1ZXN0KHsgbWV0aG9kOiBvcHRpb25zLm1ldGhvZCwgdXJsOiBvcHRpb25zLnVybCwgYm9keTogb3B0aW9ucy5ib2R5LCAuLi5vcHRpb25zLm9wdGlvbnMgfSlcblxuICAgICAgbG9nZ2VyLmRlYnVnKGBzZW5kaW5nIHJlcXVlc3QgdG8gJHt1cmx9YCwgJ3dpdGggcGF5bG9hZDonLCB7IC4uLnBheWxvYWQsIGhlYWRlcnM6IHsgLi4ucGF5bG9hZC5oZWFkZXJzLCBhdXRob3JpemF0aW9uOiAnQm90IHRva2VuaGVyZScgfSB9KVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHBheWxvYWQpXG4gICAgICBsb2dnZXIuZGVidWcoYHJlcXVlc3QgZmV0Y2hlZCBmcm9tICR7dXJsfSB3aXRoIHN0YXR1cyAke3Jlc3BvbnNlLnN0YXR1c30gJiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YClcblxuICAgICAgLy8gU2V0IHRoZSBidWNrZXQgaWQgaWYgaXQgd2FzIGF2YWlsYWJsZSBvbiB0aGUgaGVhZGVyc1xuICAgICAgY29uc3QgYnVja2V0SWQgPSByZXN0LnByb2Nlc3NIZWFkZXJzKHJlc3Quc2ltcGxpZnlVcmwob3B0aW9ucy51cmwsIG9wdGlvbnMubWV0aG9kKSwgcmVzcG9uc2UuaGVhZGVycylcbiAgICAgIGlmIChidWNrZXRJZCkgb3B0aW9ucy5idWNrZXRJZCA9IGJ1Y2tldElkXG5cbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPCAyMDAgfHwgcmVzcG9uc2Uuc3RhdHVzID49IDQwMCkge1xuICAgICAgICBsb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGZhaWxlZC5gKVxuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQyOSkge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgUmVxdWVzdCB0byAke3VybH0gd2FzIHJhdGVsaW1pdGVkLmApXG4gICAgICAgICAgLy8gVG9vIG1hbnkgYXR0ZW1wdHMsIGdldCByaWQgb2YgcmVxdWVzdCBmcm9tIHF1ZXVlLlxuICAgICAgICAgIGlmIChvcHRpb25zLnJldHJ5Q291bnQrKyA+PSByZXN0Lm1heFJldHJ5Q291bnQpIHtcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgUmVxdWVzdCB0byAke3VybH0gZXhjZWVkZWQgdGhlIG1heGltdW0gYWxsb3dlZCByZXRyaWVzLmAsICd3aXRoIHBheWxvYWQ6JywgcGF5bG9hZClcbiAgICAgICAgICAgIC8vIHJlc3QuZGVidWcoYFtSRVNUIC0gUmV0cmllc01heGVkXSAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfWApXG4gICAgICAgICAgICAvLyBSZW1vdmUgaXRlbSBmcm9tIHF1ZXVlIHRvIHByZXZlbnQgcmV0cnlcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLnJlamVjdCh7XG4gICAgICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICAgIGVycm9yOiAnVGhlIG9wdGlvbnMgd2FzIHJhdGUgbGltaXRlZCBhbmQgaXQgbWF4ZWQgb3V0IHRoZSByZXRyaWVzIGxpbWl0LicsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFJhdGUgbGltaXRlZCwgYWRkIGJhY2sgdG8gcXVldWVcbiAgICAgICAgICByZXN0LmludmFsaWRCdWNrZXQuaGFuZGxlQ29tcGxldGVkUmVxdWVzdChyZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdYLVJhdGVMaW1pdC1TY29wZScpID09PSAnc2hhcmVkJylcblxuICAgICAgICAgIGNvbnN0IHJlc2V0QWZ0ZXIgPSByZXNwb25zZS5oZWFkZXJzLmdldCgneC1yYXRlbGltaXQtcmVzZXQtYWZ0ZXInKVxuICAgICAgICAgIGlmIChyZXNldEFmdGVyKSBhd2FpdCBkZWxheShOdW1iZXIocmVzZXRBZnRlcikgKiAxMDAwKVxuICAgICAgICAgIC8vIHByb2Nlc3MgdGhlIHJlc3BvbnNlIHRvIHByZXZlbnQgbWVtIGxlYWtcbiAgICAgICAgICBhd2FpdCByZXNwb25zZS5qc29uKClcblxuICAgICAgICAgIHJldHVybiBhd2FpdCBvcHRpb25zLnJldHJ5UmVxdWVzdD8uKG9wdGlvbnMpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3B0aW9ucy5yZWplY3QoeyBvazogZmFsc2UsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBib2R5OiBKU09OLnN0cmluZ2lmeShhd2FpdCByZXNwb25zZS5qc29uKCkpIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzMjA0ID0gcmVzcG9uc2Uuc3RhdHVzID09PSAyMDRcbiAgICAgIGNvbnN0IGpzb24gPSBpczIwNCA/IHVuZGVmaW5lZCA6IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuICAgICAgLy8gRGlzY29yZCBzb21ldGltZXMgc2VuZHMgbm8gcmVzcG9uc2Ugd2l0aCAyMDQgY29kZVxuICAgICAgcmV0dXJuIG9wdGlvbnMucmVzb2x2ZSh7IG9rOiB0cnVlLCBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cywgYm9keTogSlNPTi5zdHJpbmdpZnkoanNvbikgfSlcbiAgICB9LFxuXG4gICAgLy8gQ3JlZGl0czogZ2l0aHViLmNvbS9hYmFsYWJhaGFoYS9lcmlzIGxpYi9yZXN0L1JlcXVlc3RIYW5kbGVyLmpzI0wzOTdcbiAgICAvLyBNb2RpZmllZCBmb3Igb3VyIHVzZS1jYXNlXG4gICAgc2ltcGxpZnlVcmwodXJsLCBtZXRob2QpIHtcbiAgICAgIGxldCByb3V0ZSA9IHVybFxuICAgICAgICAucmVwbGFjZSgvXFwvKFthLXotXSspXFwvKD86WzAtOV17MTcsMTl9KS9nLCBmdW5jdGlvbiAobWF0Y2gsIHA6IHN0cmluZykge1xuICAgICAgICAgIHJldHVybiBbJ2NoYW5uZWxzJywgJ2d1aWxkcyddLmluY2x1ZGVzKHApID8gbWF0Y2ggOiBgLyR7cH0veGBcbiAgICAgICAgfSlcbiAgICAgICAgLnJlcGxhY2UoL1xcL3JlYWN0aW9uc1xcL1teL10rL2csICcvcmVhY3Rpb25zL3gnKVxuXG4gICAgICAvLyBHRU5FUkFMIC9yZWFjdGlvbnMgYW5kIC9yZWFjdGlvbnMvZW1vamkvQG1lIHNoYXJlIHRoZSBidWNrZXRzXG4gICAgICBpZiAocm91dGUuaW5jbHVkZXMoJy9yZWFjdGlvbnMnKSkge1xuICAgICAgICByb3V0ZSA9IHJvdXRlLnN1YnN0cmluZygwLCByb3V0ZS5pbmRleE9mKCcvcmVhY3Rpb25zJykgKyAnL3JlYWN0aW9ucycubGVuZ3RoKVxuICAgICAgfVxuXG4gICAgICAvLyBEZWxldGUgTWVzc2FnZSBlbmRwb2ludCBoYXMgaXRzIG93biByYXRlIGxpbWl0XG4gICAgICBpZiAobWV0aG9kID09PSAnREVMRVRFJyAmJiByb3V0ZS5lbmRzV2l0aCgnL21lc3NhZ2VzL3gnKSkge1xuICAgICAgICByb3V0ZSA9IG1ldGhvZCArIHJvdXRlXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByb3V0ZVxuICAgIH0sXG5cbiAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0OiBTZW5kUmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJvdXRlID0gcmVxdWVzdC51cmwuc3Vic3RyaW5nKHJlcXVlc3QudXJsLmluZGV4T2YoJ2FwaS8nKSlcbiAgICAgIGNvbnN0IHBhcnRzID0gcm91dGUuc3BsaXQoJy8nKVxuICAgICAgLy8gUmVtb3ZlIHRoZSBhcGkvXG4gICAgICBwYXJ0cy5zaGlmdCgpXG4gICAgICAvLyBSZW1vdmVzIHRoZSAvdiMvXG4gICAgICBpZiAocGFydHNbMF0/LnN0YXJ0c1dpdGgoJ3YnKSkgcGFydHMuc2hpZnQoKVxuICAgICAgLy8gU2V0IHRoZSBmdWxsIHVybCB0byBkaXNjb3JkIGFwaSBpbiBjYXNlIGl0IHdhcyByZWNpZXZlZCBpbiBhIHByb3h5IHJlc3RcbiAgICAgIHJlcXVlc3QudXJsID0gYCR7cmVzdC5iYXNlVXJsfS92JHtyZXN0LnZlcnNpb259LyR7cGFydHMuam9pbignLycpfWBcblxuICAgICAgY29uc3QgdXJsID0gcmVzdC5zaW1wbGlmeVVybChyZXF1ZXN0LnVybCwgcmVxdWVzdC5tZXRob2QpXG4gICAgICBjb25zdCBxdWV1ZSA9IHJlc3QucXVldWVzLmdldCh1cmwpXG5cbiAgICAgIGlmIChxdWV1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHF1ZXVlLm1ha2VSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDUkVBVEVTIEEgTkVXIFFVRVVFXG4gICAgICAgIGNvbnN0IGJ1Y2tldFF1ZXVlID0gbmV3IFF1ZXVlKHJlc3QsIHsgdXJsLCBkZWxldGVRdWV1ZURlbGF5OiByZXN0LmRlbGV0ZVF1ZXVlRGVsYXkgfSlcblxuICAgICAgICAvLyBBZGQgcmVxdWVzdCB0byBxdWV1ZVxuICAgICAgICBidWNrZXRRdWV1ZS5tYWtlUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgICAvLyBTYXZlIHF1ZXVlXG4gICAgICAgIHJlc3QucXVldWVzLnNldCh1cmwsIGJ1Y2tldFF1ZXVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBtYWtlUmVxdWVzdChtZXRob2QsIHVybCwgYm9keSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgcGF5bG9hZDogU2VuZFJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgYm9keSxcbiAgICAgICAgICByZXRyeUNvdW50OiAwLFxuICAgICAgICAgIHJldHJ5UmVxdWVzdDogYXN5bmMgZnVuY3Rpb24gKG9wdGlvbnM6IFNlbmRSZXF1ZXN0T3B0aW9ucykge1xuICAgICAgICAgICAgcmVzdC5wcm9jZXNzUmVxdWVzdChwYXlsb2FkKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzb2x2ZTogKGRhdGEpID0+IHJlc29sdmUoZGF0YS5zdGF0dXMgIT09IDIwNCA/IEpTT04ucGFyc2UoZGF0YS5ib2R5ID8/ICd7fScpIDogdW5kZWZpbmVkKSxcbiAgICAgICAgICByZWplY3QsXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3QucHJvY2Vzc1JlcXVlc3QocGF5bG9hZClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnR0VUJywgdXJsKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgcG9zdDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nLCBib2R5PzogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BPU1QnLCB1cmwsIGJvZHkpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGUodXJsOiBzdHJpbmcsIGJvZHk/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnREVMRVRFJywgdXJsLCBib2R5KSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcGF0Y2g8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgYm9keT86IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQQVRDSCcsIHVybCwgYm9keSkpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHB1dDxUID0gdm9pZD4odXJsOiBzdHJpbmcsIGJvZHk/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BVVCcsIHVybCwgYm9keSwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuYm90KGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJlYWN0aW9ucyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb25zLCBvcmRlcmVkID0gZmFsc2UpIHtcbiAgICAgIGlmICghb3JkZXJlZCkge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChyZWFjdGlvbnMubWFwKGFzeW5jIChyZWFjdGlvbikgPT4gYXdhaXQgcmVzdC5hZGRSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgcmVhY3Rpb24gb2YgcmVhY3Rpb25zKSB7XG4gICAgICAgIGF3YWl0IHJlc3QuYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRSb2xlKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkVGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlcyhndWlsZElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQ2hhbm5lbChndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5ndWlsZHMuY2hhbm5lbHMoZ3VpbGRJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUVtb2ppKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamlzKGd1aWxkSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSwgY29tbWFuZClcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGQob3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy5hbGwoKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZCwgZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLCBjb21tYW5kKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZEZyb21UZW1wbGF0ZSh0ZW1wbGF0ZUNvZGUsIG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmljb24pIHtcbiAgICAgICAgb3B0aW9ucy5pY29uID0gYXdhaXQgdXJsVG9CYXNlNjQob3B0aW9ucy5pY29uKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5jb2RlKHRlbXBsYXRlQ29kZSksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkU3RpY2tlcihndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcnMoZ3VpbGRJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkVGVtcGxhdGUoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuYWxsKGd1aWxkSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVGb3J1bVRocmVhZChjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmZvcnVtKGNoYW5uZWxJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUludml0ZShjaGFubmVsSWQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkSW52aXRlPihyZXN0LnJvdXRlcy5jaGFubmVscy5pbnZpdGVzKGNoYW5uZWxJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVJvbGUoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRSb2xlPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpLCB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50cyhndWlsZElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlU3RhZ2VJbnN0YW5jZShvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZXMoKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlV2ViaG9vayhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLmNoYW5uZWxzLndlYmhvb2tzKGNoYW5uZWxJZCksIHtcbiAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICBhdmF0YXI6IG9wdGlvbnMuYXZhdGFyID8gYXdhaXQgdXJsVG9CYXNlNjQob3B0aW9ucy5hdmF0YXIpIDogdW5kZWZpbmVkLFxuICAgICAgICByZWFzb246IG9wdGlvbnMucmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUNoYW5uZWwoY2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGNoYW5uZWxJZCksIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQ2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZShjaGFubmVsSWQsIG92ZXJ3cml0ZUlkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5vdmVyd3JpdGUoY2hhbm5lbElkLCBvdmVyd3JpdGVJZCksIHJlYXNvbiA/IHsgcmVhc29uIH0gOiB1bmRlZmluZWQpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUVtb2ppKGd1aWxkSWQsIGlkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgaWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMubWVzc2FnZShyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmQocmVzdC5hcHBsaWNhdGlvbklkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZChndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCksIHJlYXNvbiA/IHsgcmVhc29uIH0gOiB1bmRlZmluZWQpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkVGVtcGxhdGUoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5ndWlsZChndWlsZElkLCB0ZW1wbGF0ZUNvZGUpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVJbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmludGVncmF0aW9uKGd1aWxkSWQsIGludGVncmF0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVJbnZpdGUoaW52aXRlQ29kZSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZShpbnZpdGVDb2RlKSwgcmVhc29uID8geyByZWFzb24gfSA6IHVuZGVmaW5lZClcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU1lc3NhZ2VzKGNoYW5uZWxJZCwgbWVzc2FnZUlkcywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLmNoYW5uZWxzLmJ1bGsoY2hhbm5lbElkKSwge1xuICAgICAgICBtZXNzYWdlczogbWVzc2FnZUlkcy5zbGljZSgwLCAxMDApLm1hcCgoaWQpID0+IGlkLnRvU3RyaW5nKCkpLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVPd25SZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNBbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuYWxsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUmVhY3Rpb25zRW1vamkoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5lbW9qaShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSb2xlKGd1aWxkSWQsIHJvbGVJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlU2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVN0YWdlSW5zdGFuY2UoY2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpLCByZWFzb24gPyB7IHJlYXNvbiB9IDogdW5kZWZpbmVkKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVVc2VyUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHVzZXJJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLnVzZXIoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rKHdlYmhvb2tJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlV2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMoZ3VpbGRJZCwgY29tbWFuZElkLCBiZWFyZXJUb2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucz4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5wZXJtaXNzaW9uKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSxcbiAgICAgICAge1xuICAgICAgICAgIHBlcm1pc3Npb25zOiBvcHRpb25zLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaGVhZGVyczogeyBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YmVhcmVyVG9rZW59YCB9LFxuICAgICAgICB9LFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRCb3RQcm9maWxlKG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGF2YXRhciA9IG9wdGlvbnM/LmJvdEF2YXRhclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEF2YXRhclVSTCkgOiBvcHRpb25zPy5ib3RBdmF0YXJVUkxcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLnVzZXJCb3QoKSwge1xuICAgICAgICB1c2VybmFtZTogb3B0aW9ucy51c2VybmFtZT8udHJpbSgpLFxuICAgICAgICBhdmF0YXIsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbChjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGNoYW5uZWxJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5vdmVyd3JpdGUoY2hhbm5lbElkLCBvcHRpb25zLmlkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWxQb3NpdGlvbnMoZ3VpbGRJZCwgY2hhbm5lbFBvc2l0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpLCBjaGFubmVsUG9zaXRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0RW1vamkoZ3VpbGRJZCwgaWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGlkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZChndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkTWZhTGV2ZWwoZ3VpbGRJZDogQmlnU3RyaW5nLCBtZmFMZXZlbDogTWZhTGV2ZWxzLCByZWFzb24/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuZ3VpbGRzLm1mYShndWlsZElkKSwgeyBsZXZlbDogbWZhTGV2ZWwsIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZTogc3RyaW5nLCBvcHRpb25zOiBNb2RpZnlHdWlsZFRlbXBsYXRlKTogUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGVtcGxhdGU+PiB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuZ3VpbGQoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRPcmlnaW5hbFdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy5vcmlnaW5hbCh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSwge1xuICAgICAgICB0eXBlOiBJbnRlcmFjdGlvblJlc3BvbnNlVHlwZXMuVXBkYXRlTWVzc2FnZSxcbiAgICAgICAgZGF0YTogb3B0aW9ucyxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRPd25Wb2ljZVN0YXRlKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkKSwge1xuICAgICAgICBjaGFubmVsX2lkOiBvcHRpb25zLmNoYW5uZWxJZCxcbiAgICAgICAgc3VwcHJlc3M6IG9wdGlvbnMuc3VwcHJlc3MsXG4gICAgICAgIHJlcXVlc3RfdG9fc3BlYWtfdGltZXN0YW1wOiBvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wXG4gICAgICAgICAgPyBuZXcgRGF0ZShvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wKS50b0lTT1N0cmluZygpXG4gICAgICAgICAgOiBvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFJvbGUoZ3VpbGRJZCwgcm9sZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Um9sZVBvc2l0aW9ucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkUm9sZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQsIGRhdGEpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpLCB7IHRvcGljOiBkYXRhLnRvcGljIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRVc2VyVm9pY2VTdGF0ZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCwgb3B0aW9ucy51c2VySWQpLCB7XG4gICAgICAgIGNoYW5uZWxfaWQ6IG9wdGlvbnMuY2hhbm5lbElkLFxuICAgICAgICBzdXBwcmVzczogb3B0aW9ucy5zdXBwcmVzcyxcbiAgICAgICAgdXNlcl9pZDogb3B0aW9ucy51c2VySWQsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9vayh3ZWJob29rSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlbGNvbWVTY3JlZW4oZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlbGNvbWVTY3JlZW4+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWxjb21lKGd1aWxkSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2lkZ2V0U2V0dGluZ3MoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXQoZ3VpbGRJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGV4ZWN1dGVXZWJob29rKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucyksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGZvbGxvd0Fubm91bmNlbWVudChzb3VyY2VDaGFubmVsSWQsIHRhcmdldENoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRm9sbG93ZWRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5mb2xsb3coc291cmNlQ2hhbm5lbElkKSwge1xuICAgICAgICB3ZWJob29rX2NoYW5uZWxfaWQ6IHRhcmdldENoYW5uZWxJZCxcbiAgICAgIH0gYXMgRGlzY29yZEZvbGxvd0Fubm91bmNlbWVudENoYW5uZWwpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFjdGl2ZVRocmVhZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QWN0aXZlVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hY3RpdmUoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb24oZ3VpbGRJZCwgY29tbWFuZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb24ocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5wZXJtaXNzaW9ucyhyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkluZm8oKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDJBcHBsaWNhdGlvbigpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdWRpdExvZyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1ZGl0TG9nPihyZXN0LnJvdXRlcy5ndWlsZHMuYXVkaXRsb2dzKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1dG9tb2RSdWxlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVJlZ2lvbltdPihyZXN0LnJvdXRlcy5yZWdpb25zKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEJhbihndWlsZElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQmFuPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QmFucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEJhbltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW5zKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsKGlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsSW52aXRlcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuaW52aXRlcyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVscyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENoYW5uZWxbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsV2ViaG9va3MoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2tbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMud2ViaG9va3MoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RG1DaGFubmVsKHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG0oKSwge1xuICAgICAgICByZWNpcGllbnRfaWQ6IHVzZXJJZC50b1N0cmluZygpLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RW1vamkoZ3VpbGRJZCwgZW1vamlJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGVtb2ppSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbW9qaXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamlzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2F0ZXdheUJvdCgpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR2V0R2F0ZXdheUJvdD4ocmVzdC5yb3V0ZXMuZ2F0ZXdheUJvdCgpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmQocmVzdC5hcHBsaWNhdGlvbklkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkKGd1aWxkSWQsIG9wdGlvbnMgPSB7IGNvdW50czogdHJ1ZSB9KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMuZ3VpbGQoZ3VpbGRJZCwgb3B0aW9ucy5jb3VudHMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFByZXZpZXcoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFByZXZpZXc+KHJlc3Qucm91dGVzLmd1aWxkcy5wcmV2aWV3KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFRlbXBsYXRlKHRlbXBsYXRlQ29kZSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5jb2RlKHRlbXBsYXRlQ29kZSkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkVGVtcGxhdGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGVtcGxhdGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkV2ViaG9va3MoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rW10+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWJob29rcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW50ZWdyYXRpb25zKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW50ZWdyYXRpb25bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludGVncmF0aW9ucyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW52aXRlKGludml0ZUNvZGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGE+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGUoaW52aXRlQ29kZSwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludml0ZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVzc2FnZXMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2VbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZXMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Tml0cm9TdGlja2VyUGFja3MoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJQYWNrW10+KHJlc3Qucm91dGVzLm5pdHJvU3RpY2tlclBhY2tzKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQaW5uZWRNZXNzYWdlcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5waW5zKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFByaXZhdGVBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMucHJpdmF0ZShjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcml2YXRlSm9pbmVkQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmpvaW5lZChjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcnVuZUNvdW50KGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUHJ1bmVkQ291bnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5wcnVuZShndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHVibGljQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnB1YmxpYyhjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRSb2xlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFJvbGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zPy53aXRoVXNlckNvdW50KSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnRzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU2NoZWR1bGVkRXZlbnRbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudHMoZ3VpbGRJZCwgb3B0aW9ucz8ud2l0aFVzZXJDb3VudCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNjaGVkdWxlZEV2ZW50VXNlcnMoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PEFycmF5PHsgdXNlcjogRGlzY29yZFVzZXI7IG1lbWJlcj86IERpc2NvcmRNZW1iZXIgfT4+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMudXNlcnMoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNlc3Npb25JbmZvKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0R2F0ZXdheUJvdCgpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0YWdlSW5zdGFuY2UoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0aWNrZXIoc3RpY2tlcklkOiBCaWdTdHJpbmcpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuc3RpY2tlcihzdGlja2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkU3RpY2tlcnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyW10+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VycyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRocmVhZE1lbWJlcj4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VGhyZWFkTWVtYmVycyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGhyZWFkTWVtYmVyW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWVtYmVycyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRSZWFjdGlvbnMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXJbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlcihpZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyPihyZXN0LnJvdXRlcy51c2VyKGlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VmFuaXR5VXJsKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVmFuaXR5VXJsPihyZXN0LnJvdXRlcy5ndWlsZHMudmFuaXR5KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRWb2ljZVJlZ2lvbnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVJlZ2lvbltdPihyZXN0LnJvdXRlcy5ndWlsZHMucmVnaW9ucyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9vayh3ZWJob29rSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlbGNvbWVTY3JlZW4oZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWxjb21lU2NyZWVuPihyZXN0LnJvdXRlcy5ndWlsZHMud2VsY29tZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2lkZ2V0KGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRXaWRnZXQ+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXRKc29uKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXaWRnZXRTZXR0aW5ncyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXQoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGpvaW5UaHJlYWQoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZShjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZUd1aWxkKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubGVhdmUoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlVGhyZWFkKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWUoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcHVibGlzaE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNyb3NzcG9zdChjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kRm9sbG93dXBNZXNzYWdlKHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICByZXN0LnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICB1cmw6IHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2socmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksXG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgICByZXRyeUNvdW50OiAwLFxuICAgICAgICAgIHJldHJ5UmVxdWVzdDogYXN5bmMgZnVuY3Rpb24gKG9wdGlvbnM6IFNlbmRSZXF1ZXN0T3B0aW9ucykge1xuICAgICAgICAgICAgLy8gVE9ETzogc2hvdWxkIGNoYW5nZSB0byByZXByb2Nlc3MgcXVldWUgaXRlbVxuICAgICAgICAgICAgYXdhaXQgcmVzdC5zZW5kUmVxdWVzdChvcHRpb25zKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzb2x2ZTogKGRhdGEpID0+IHJlc29sdmUoZGF0YS5zdGF0dXMgIT09IDIwNCA/IEpTT04ucGFyc2UoZGF0YS5ib2R5ID8/ICd7fScpIDogdW5kZWZpbmVkKSxcbiAgICAgICAgICByZWplY3QsXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kSW50ZXJhY3Rpb25SZXNwb25zZShpbnRlcmFjdGlvbklkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgcmVzdC5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgdXJsOiByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLmNhbGxiYWNrKGludGVyYWN0aW9uSWQsIHRva2VuKSxcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICAgIHJldHJ5Q291bnQ6IDAsXG4gICAgICAgICAgcmV0cnlSZXF1ZXN0OiBhc3luYyBmdW5jdGlvbiAob3B0aW9uczogU2VuZFJlcXVlc3RPcHRpb25zKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBzaG91bGQgY2hhbmdlIHRvIHJlcHJvY2VzcyBxdWV1ZSBpdGVtXG4gICAgICAgICAgICBhd2FpdCByZXN0LnNlbmRSZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvbHZlOiAoZGF0YSkgPT4gcmVzb2x2ZShkYXRhLnN0YXR1cyAhPT0gMjA0ID8gSlNPTi5wYXJzZShkYXRhLmJvZHkgPz8gJ3t9JykgOiB1bmRlZmluZWQpLFxuICAgICAgICAgIHJlamVjdCxcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRNZXNzYWdlKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZXMoY2hhbm5lbElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RhcnRUaHJlYWRXaXRoTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZShjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuYWxsKGNoYW5uZWxJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIHN5bmNHdWlsZFRlbXBsYXRlKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuYWxsKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBiYW5NZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8dm9pZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRCb3RNZW1iZXIoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lbWJlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYm90KGd1aWxkSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBraWNrTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCksIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcGluTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMucGluKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgcmVhc29uID8geyByZWFzb24gfSA6IHVuZGVmaW5lZClcbiAgICB9LFxuXG4gICAgYXN5bmMgcHJ1bmVNZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8eyBwcnVuZWQ6IG51bWJlciB8IG51bGwgfT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMucHJ1bmUoZ3VpbGRJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIHNlYXJjaE1lbWJlcnMoZ3VpbGRJZCwgcXVlcnksIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuc2VhcmNoKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdW5iYW5NZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHVucGluTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucGluKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgcmVhc29uID8geyByZWFzb24gfSA6IHVuZGVmaW5lZClcbiAgICB9LFxuXG4gICAgYXN5bmMgdHJpZ2dlclR5cGluZ0luZGljYXRvcihjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuY2hhbm5lbHMudHlwaW5nKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMoY29tbWFuZHMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCBjb21tYW5kcylcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBzZXJ0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzKGd1aWxkSWQsIGNvbW1hbmRzKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLCBjb21tYW5kcylcbiAgICB9LFxuICB9XG5cbiAgcmV0dXJuIHJlc3Rcbn1cbiJdLCJuYW1lcyI6WyJJbnRlcmFjdGlvblJlc3BvbnNlVHlwZXMiLCJjYWxjdWxhdGVCaXRzIiwiY2FtZWxpemUiLCJjYW1lbFRvU25ha2VDYXNlIiwiZGVsYXkiLCJmaW5kRmlsZXMiLCJnZXRCb3RJZEZyb21Ub2tlbiIsImlzR2V0TWVzc2FnZXNBZnRlciIsImlzR2V0TWVzc2FnZXNBcm91bmQiLCJpc0dldE1lc3NhZ2VzQmVmb3JlIiwiaXNHZXRNZXNzYWdlc0xpbWl0IiwibG9nZ2VyIiwicHJvY2Vzc1JlYWN0aW9uU3RyaW5nIiwidXJsVG9CYXNlNjQiLCJjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCIsIlF1ZXVlIiwiY3JlYXRlUmVzdE1hbmFnZXIiLCJvcHRpb25zIiwidG9rZW4iLCJFcnJvciIsInJlc3QiLCJhcHBsaWNhdGlvbklkIiwiQmlnSW50IiwidmVyc2lvbiIsImJhc2VVcmwiLCJtYXhSZXRyeUNvdW50IiwiSW5maW5pdHkiLCJnbG9iYWxseVJhdGVMaW1pdGVkIiwicHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMiLCJkZWxldGVRdWV1ZURlbGF5IiwicXVldWVzIiwiTWFwIiwicmF0ZUxpbWl0ZWRQYXRocyIsImludmFsaWRCdWNrZXQiLCJyb3V0ZXMiLCJ3ZWJob29rcyIsImlkIiwid2ViaG9va0lkIiwibWVzc2FnZSIsIm1lc3NhZ2VJZCIsInVybCIsInRocmVhZElkIiwib3JpZ2luYWwiLCJ3ZWJob29rIiwid2FpdCIsInVuZGVmaW5lZCIsInRvU3RyaW5nIiwic2Vzc2lvbkluZm8iLCJnYXRld2F5Qm90IiwiY2hhbm5lbHMiLCJidWxrIiwiY2hhbm5lbElkIiwiZG0iLCJwaW4iLCJwaW5zIiwicmVhY3Rpb25zIiwiYm90IiwiZW1vamkiLCJlbmNvZGVVUklDb21wb25lbnQiLCJ1c2VyIiwidXNlcklkIiwiYWxsIiwiYWZ0ZXIiLCJsaW1pdCIsImNoYW5uZWwiLCJmb2xsb3ciLCJmb3J1bSIsImludml0ZXMiLCJtZXNzYWdlcyIsImJlZm9yZSIsImFyb3VuZCIsIm92ZXJ3cml0ZSIsIm92ZXJ3cml0ZUlkIiwiY3Jvc3Nwb3N0Iiwic3RhZ2VzIiwic3RhZ2UiLCJ0aHJlYWRzIiwiYWN0aXZlIiwiZ3VpbGRJZCIsIm1lbWJlcnMiLCJtZSIsImFyY2hpdmVkIiwicHVibGljIiwiRGF0ZSIsInRvSVNPU3RyaW5nIiwicHJpdmF0ZSIsImpvaW5lZCIsInR5cGluZyIsImd1aWxkcyIsImF1ZGl0bG9ncyIsImFjdGlvblR5cGUiLCJhdXRvbW9kIiwicnVsZSIsInJ1bGVJZCIsInJ1bGVzIiwiZW1vamlJZCIsImVtb2ppcyIsImV2ZW50cyIsIndpdGhVc2VyQ291bnQiLCJldmVudCIsImV2ZW50SWQiLCJ1c2VycyIsIndpdGhNZW1iZXIiLCJndWlsZCIsIndpdGhDb3VudHMiLCJpbnRlZ3JhdGlvbiIsImludGVncmF0aW9uSWQiLCJpbnRlZ3JhdGlvbnMiLCJpbnZpdGUiLCJpbnZpdGVDb2RlIiwid2l0aEV4cGlyYXRpb24iLCJzY2hlZHVsZWRFdmVudElkIiwibGVhdmUiLCJiYW4iLCJiYW5zIiwibWVtYmVyIiwic2VhcmNoIiwicXVlcnkiLCJwcnVuZSIsImRheXMiLCJBcnJheSIsImlzQXJyYXkiLCJpbmNsdWRlUm9sZXMiLCJqb2luIiwibWZhIiwicHJldmlldyIsInJvbGVzIiwib25lIiwicm9sZUlkIiwibWVtYmVySWQiLCJzdGlja2VycyIsInN0aWNrZXIiLCJzdGlja2VySWQiLCJ2b2ljZSIsInRlbXBsYXRlcyIsImNvZGUiLCJ2YW5pdHkiLCJyZWdpb25zIiwid2VsY29tZSIsIndpZGdldCIsIndpZGdldEpzb24iLCJpbnRlcmFjdGlvbnMiLCJjb21tYW5kcyIsImNvbW1hbmRJZCIsIndpdGhMb2NhbGl6YXRpb25zIiwicGVybWlzc2lvbnMiLCJwZXJtaXNzaW9uIiwiY29tbWFuZCIsInJlc3BvbnNlcyIsImNhbGxiYWNrIiwiaW50ZXJhY3Rpb25JZCIsInVzZXJCb3QiLCJvYXV0aDJBcHBsaWNhdGlvbiIsIm5pdHJvU3RpY2tlclBhY2tzIiwiY2hlY2tSYXRlTGltaXRzIiwicmF0ZWxpbWl0ZWQiLCJnZXQiLCJnbG9iYWwiLCJub3ciLCJyZXNldFRpbWVzdGFtcCIsImNoYW5nZVRvRGlzY29yZEZvcm1hdCIsIm9iaiIsIm1hcCIsIml0ZW0iLCJuZXdPYmoiLCJrZXkiLCJPYmplY3QiLCJrZXlzIiwiY3JlYXRlUmVxdWVzdCIsImhlYWRlcnMiLCJ1bmF1dGhvcml6ZWQiLCJhdXRob3JpemF0aW9uIiwidG9Mb3dlckNhc2UiLCJtZXRob2QiLCJib2R5IiwicmVhc29uIiwiZmlsZSIsImZpbGVzIiwiZm9ybSIsIkZvcm1EYXRhIiwiZW5kc1dpdGgiLCJhcHBlbmQiLCJibG9iIiwibmFtZSIsImRlc2NyaXB0aW9uIiwidGFncyIsImkiLCJsZW5ndGgiLCJKU09OIiwic3RyaW5naWZ5IiwiaW5jbHVkZXMiLCJwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocyIsInZhbHVlIiwiZW50cmllcyIsImRlbGV0ZSIsInNpemUiLCJzZXRUaW1lb3V0IiwicHJvY2Vzc0hlYWRlcnMiLCJyYXRlTGltaXRlZCIsInJlbWFpbmluZyIsInJldHJ5QWZ0ZXIiLCJyZXNldCIsIk51bWJlciIsImJ1Y2tldElkIiwiaGFuZGxlQ29tcGxldGVkUmVxdWVzdCIsImludGVydmFsIiwibWF4Iiwic2V0IiwiZ2xvYmFsUmVzZXQiLCJzZW5kUmVxdWVzdCIsInN0YXJ0c1dpdGgiLCJwYXlsb2FkIiwiZGVidWciLCJyZXNwb25zZSIsImZldGNoIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsInNpbXBsaWZ5VXJsIiwicmV0cnlDb3VudCIsInJlamVjdCIsIm9rIiwiZXJyb3IiLCJyZXNldEFmdGVyIiwianNvbiIsInJldHJ5UmVxdWVzdCIsImlzMjA0IiwicmVzb2x2ZSIsInJvdXRlIiwicmVwbGFjZSIsIm1hdGNoIiwicCIsInN1YnN0cmluZyIsImluZGV4T2YiLCJwcm9jZXNzUmVxdWVzdCIsInJlcXVlc3QiLCJwYXJ0cyIsInNwbGl0Iiwic2hpZnQiLCJxdWV1ZSIsIm1ha2VSZXF1ZXN0IiwiYnVja2V0UXVldWUiLCJQcm9taXNlIiwiZGF0YSIsInBhcnNlIiwicG9zdCIsInBhdGNoIiwicHV0IiwiYWRkUmVhY3Rpb24iLCJyZWFjdGlvbiIsImFkZFJlYWN0aW9ucyIsIm9yZGVyZWQiLCJhZGRSb2xlIiwiYWRkVGhyZWFkTWVtYmVyIiwiY3JlYXRlQXV0b21vZFJ1bGUiLCJjcmVhdGVDaGFubmVsIiwiY3JlYXRlRW1vamkiLCJjcmVhdGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJjcmVhdGVHdWlsZCIsImNyZWF0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiY3JlYXRlR3VpbGRGcm9tVGVtcGxhdGUiLCJ0ZW1wbGF0ZUNvZGUiLCJpY29uIiwiY3JlYXRlR3VpbGRTdGlja2VyIiwiY3JlYXRlR3VpbGRUZW1wbGF0ZSIsImNyZWF0ZUZvcnVtVGhyZWFkIiwiY3JlYXRlSW52aXRlIiwiY3JlYXRlUm9sZSIsImNyZWF0ZVNjaGVkdWxlZEV2ZW50IiwiY3JlYXRlU3RhZ2VJbnN0YW5jZSIsImNyZWF0ZVdlYmhvb2siLCJhdmF0YXIiLCJkZWxldGVBdXRvbW9kUnVsZSIsImRlbGV0ZUNoYW5uZWwiLCJkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlIiwiZGVsZXRlRW1vamkiLCJkZWxldGVGb2xsb3d1cE1lc3NhZ2UiLCJkZWxldGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJkZWxldGVHdWlsZCIsImRlbGV0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiZGVsZXRlR3VpbGRTdGlja2VyIiwiZGVsZXRlR3VpbGRUZW1wbGF0ZSIsImRlbGV0ZUludGVncmF0aW9uIiwiZGVsZXRlSW52aXRlIiwiZGVsZXRlTWVzc2FnZSIsImRlbGV0ZU1lc3NhZ2VzIiwibWVzc2FnZUlkcyIsInNsaWNlIiwiZGVsZXRlT3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiZGVsZXRlT3duUmVhY3Rpb24iLCJkZWxldGVSZWFjdGlvbnNBbGwiLCJkZWxldGVSZWFjdGlvbnNFbW9qaSIsImRlbGV0ZVJvbGUiLCJkZWxldGVTY2hlZHVsZWRFdmVudCIsImRlbGV0ZVN0YWdlSW5zdGFuY2UiLCJkZWxldGVVc2VyUmVhY3Rpb24iLCJkZWxldGVXZWJob29rIiwiZGVsZXRlV2ViaG9va01lc3NhZ2UiLCJkZWxldGVXZWJob29rV2l0aFRva2VuIiwiZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zIiwiYmVhcmVyVG9rZW4iLCJlZGl0QXV0b21vZFJ1bGUiLCJlZGl0Qm90UHJvZmlsZSIsImJvdEF2YXRhclVSTCIsInVzZXJuYW1lIiwidHJpbSIsImVkaXRDaGFubmVsIiwiZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzIiwiZWRpdENoYW5uZWxQb3NpdGlvbnMiLCJjaGFubmVsUG9zaXRpb25zIiwiZWRpdEVtb2ppIiwiZWRpdEZvbGxvd3VwTWVzc2FnZSIsImVkaXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJlZGl0R3VpbGQiLCJlZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJlZGl0R3VpbGRNZmFMZXZlbCIsIm1mYUxldmVsIiwibGV2ZWwiLCJlZGl0R3VpbGRTdGlja2VyIiwiZWRpdEd1aWxkVGVtcGxhdGUiLCJlZGl0TWVzc2FnZSIsImVkaXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UiLCJlZGl0T3JpZ2luYWxXZWJob29rTWVzc2FnZSIsInR5cGUiLCJVcGRhdGVNZXNzYWdlIiwiZWRpdE93blZvaWNlU3RhdGUiLCJjaGFubmVsX2lkIiwic3VwcHJlc3MiLCJyZXF1ZXN0X3RvX3NwZWFrX3RpbWVzdGFtcCIsInJlcXVlc3RUb1NwZWFrVGltZXN0YW1wIiwiZWRpdFNjaGVkdWxlZEV2ZW50IiwiZWRpdFJvbGUiLCJlZGl0Um9sZVBvc2l0aW9ucyIsImVkaXRTdGFnZUluc3RhbmNlIiwidG9waWMiLCJlZGl0VXNlclZvaWNlU3RhdGUiLCJ1c2VyX2lkIiwiZWRpdFdlYmhvb2siLCJlZGl0V2ViaG9va01lc3NhZ2UiLCJlZGl0V2ViaG9va1dpdGhUb2tlbiIsImVkaXRXZWxjb21lU2NyZWVuIiwiZWRpdFdpZGdldFNldHRpbmdzIiwiZXhlY3V0ZVdlYmhvb2siLCJmb2xsb3dBbm5vdW5jZW1lbnQiLCJzb3VyY2VDaGFubmVsSWQiLCJ0YXJnZXRDaGFubmVsSWQiLCJ3ZWJob29rX2NoYW5uZWxfaWQiLCJnZXRBY3RpdmVUaHJlYWRzIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbiIsImdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zIiwiZ2V0QXBwbGljYXRpb25JbmZvIiwiZ2V0QXVkaXRMb2ciLCJnZXRBdXRvbW9kUnVsZSIsImdldEF1dG9tb2RSdWxlcyIsImdldEF2YWlsYWJsZVZvaWNlUmVnaW9ucyIsImdldEJhbiIsImdldEJhbnMiLCJnZXRDaGFubmVsIiwiZ2V0Q2hhbm5lbEludml0ZXMiLCJnZXRDaGFubmVscyIsImdldENoYW5uZWxXZWJob29rcyIsImdldERtQ2hhbm5lbCIsInJlY2lwaWVudF9pZCIsImdldEVtb2ppIiwiZ2V0RW1vamlzIiwiZ2V0Rm9sbG93dXBNZXNzYWdlIiwiZ2V0R2F0ZXdheUJvdCIsImdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJnZXRHdWlsZCIsImNvdW50cyIsImdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZ2V0R3VpbGRQcmV2aWV3IiwiZ2V0R3VpbGRUZW1wbGF0ZSIsImdldEd1aWxkVGVtcGxhdGVzIiwiZ2V0R3VpbGRXZWJob29rcyIsImdldEludGVncmF0aW9ucyIsImdldEludml0ZSIsImdldEludml0ZXMiLCJnZXRNZXNzYWdlIiwiZ2V0TWVzc2FnZXMiLCJnZXROaXRyb1N0aWNrZXJQYWNrcyIsImdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImdldFBpbm5lZE1lc3NhZ2VzIiwiZ2V0UHJpdmF0ZUFyY2hpdmVkVGhyZWFkcyIsImdldFByaXZhdGVKb2luZWRBcmNoaXZlZFRocmVhZHMiLCJnZXRQcnVuZUNvdW50IiwiZ2V0UHVibGljQXJjaGl2ZWRUaHJlYWRzIiwiZ2V0Um9sZXMiLCJnZXRTY2hlZHVsZWRFdmVudCIsImdldFNjaGVkdWxlZEV2ZW50cyIsImdldFNjaGVkdWxlZEV2ZW50VXNlcnMiLCJnZXRTZXNzaW9uSW5mbyIsImdldFN0YWdlSW5zdGFuY2UiLCJnZXRTdGlja2VyIiwiZ2V0R3VpbGRTdGlja2VyIiwiZ2V0R3VpbGRTdGlja2VycyIsImdldFRocmVhZE1lbWJlciIsImdldFRocmVhZE1lbWJlcnMiLCJnZXRSZWFjdGlvbnMiLCJnZXRVc2VyIiwiZ2V0VmFuaXR5VXJsIiwiZ2V0Vm9pY2VSZWdpb25zIiwiZ2V0V2ViaG9vayIsImdldFdlYmhvb2tNZXNzYWdlIiwiZ2V0V2ViaG9va1dpdGhUb2tlbiIsImdldFdlbGNvbWVTY3JlZW4iLCJnZXRXaWRnZXQiLCJnZXRXaWRnZXRTZXR0aW5ncyIsImpvaW5UaHJlYWQiLCJsZWF2ZUd1aWxkIiwibGVhdmVUaHJlYWQiLCJwdWJsaXNoTWVzc2FnZSIsInJlbW92ZVJvbGUiLCJyZW1vdmVUaHJlYWRNZW1iZXIiLCJzZW5kRm9sbG93dXBNZXNzYWdlIiwic2VuZEludGVyYWN0aW9uUmVzcG9uc2UiLCJzZW5kTWVzc2FnZSIsInN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UiLCJzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlIiwic3luY0d1aWxkVGVtcGxhdGUiLCJiYW5NZW1iZXIiLCJlZGl0Qm90TWVtYmVyIiwiZWRpdE1lbWJlciIsImdldE1lbWJlciIsImdldE1lbWJlcnMiLCJraWNrTWVtYmVyIiwicGluTWVzc2FnZSIsInBydW5lTWVtYmVycyIsInNlYXJjaE1lbWJlcnMiLCJ1bmJhbk1lbWJlciIsInVucGluTWVzc2FnZSIsInRyaWdnZXJUeXBpbmdJbmRpY2F0b3IiLCJ1cHNlcnRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzIiwidXBzZXJ0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzIl0sIm1hcHBpbmdzIjoiQUFFQSxPQUFTQSw0QkFBQUEsQ0FBd0IsS0FBUSxtQkFBbUIsQUFDNUQsUUFDRUMsaUJBQUFBLENBQWEsQ0FDYkMsWUFBQUEsQ0FBUSxDQUNSQyxvQkFBQUEsQ0FBZ0IsQ0FDaEJDLFNBQUFBLENBQUssQ0FDTEMsYUFBQUEsQ0FBUyxDQUNUQyxxQkFBQUEsQ0FBaUIsQ0FDakJDLHNCQUFBQSxDQUFrQixDQUNsQkMsdUJBQUFBLENBQW1CLENBQ25CQyx1QkFBQUEsQ0FBbUIsQ0FDbkJDLHNCQUFBQSxDQUFrQixDQUNsQkMsVUFBQUEsQ0FBTSxDQUNOQyx5QkFBQUEsQ0FBcUIsQ0FDckJDLGVBQUFBLENBQVcsS0FDTixtQkFBbUIsQUFFMUIsUUFBU0MsOEJBQUFBLENBQTBCLEtBQVEsb0JBQW9CLEFBQy9ELFFBQVNDLFNBQUFBLENBQUssS0FBUSxZQUFZLEFBbURsQyxRQUFPLFNBQVNDLGtCQUFrQkMsQ0FBaUMsQ0FBZSxDQUVo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
|
|
1
|
+
import{InteractionResponseTypes as e}from"@discordeno/types";import{calculateBits as t,camelize as s,camelToSnakeCase as a,delay as i,findFiles as n,getBotIdFromToken as o,isGetMessagesAfter as r,isGetMessagesAround as l,isGetMessagesBefore as d,isGetMessagesLimit as u,logger as c,processReactionString as m,urlToBase64 as g}from"@discordeno/utils";import{createInvalidRequestBucket as p}from"./invalidBucket.js";import{Queue as h}from"./queue.js";export function createRestManager(w){if(!w.token)throw Error("You must provide a valid token.");let y={token:w.token,applicationId:w.applicationId?BigInt(w.applicationId):o(w.token),version:w.version??10,baseUrl:w.baseUrl??"https://discord.com/api",maxRetryCount:1/0,globallyRateLimited:!1,processingRateLimitedPaths:!1,deleteQueueDelay:6e4,queues:new Map,rateLimitedPaths:new Map,invalidBucket:p({}),routes:{webhooks:{id:e=>`/webhooks/${e}`,message:(e,t,s,a)=>{let i=`/webhooks/${e}/${t}/messages/${s}?`;return a&&a.threadId&&(i+=`thread_id=${a.threadId}`),i},original:(e,t,s)=>{let a=`/webhooks/${e}/${t}/messages/@original?`;return s&&s.threadId&&(a+=`thread_id=${s.threadId}`),a},webhook:(e,t,s)=>{let a=`/webhooks/${e}/${t}?`;return s&&(s?.wait!==void 0&&(a+=`wait=${s.wait.toString()}`),s.threadId&&(a+=`thread_id=${s.threadId}`)),a}},sessionInfo:()=>y.routes.gatewayBot(),channels:{bulk:e=>`/channels/${e}/messages/bulk-delete`,dm:()=>"/users/@me/channels",pin:(e,t)=>`/channels/${e}/pins/${t}`,pins:e=>`/channels/${e}/pins`,reactions:{bot:(e,t,s)=>`/channels/${e}/messages/${t}/reactions/${encodeURIComponent(s)}/@me`,user:(e,t,s,a)=>`/channels/${e}/messages/${t}/reactions/${encodeURIComponent(s)}/${a}`,all:(e,t)=>`/channels/${e}/messages/${t}/reactions`,emoji:(e,t,s,a)=>{let i=`/channels/${e}/messages/${t}/reactions/${encodeURIComponent(s)}?`;return a&&(a.after&&(i+=`after=${a.after}`),a.limit&&(i+=`&limit=${a.limit}`)),i},message:(e,t,s,a)=>{let i=`/channels/${e}/messages/${t}/reactions/${encodeURIComponent(s)}?`;return a&&(a.after&&(i+=`after=${a.after}`),a.limit&&(i+=`&limit=${a.limit}`)),i}},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 s=`/channels/${e}/messages?`;return t&&(r(t)&&t.after&&(s+=`after=${t.after}`),d(t)&&t.before&&(s+=`&before=${t.before}`),l(t)&&t.around&&(s+=`&around=${t.around}`),u(t)&&t.limit&&(s+=`&limit=${t.limit}`)),s},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 s=`/channels/${e}/threads/archived/public?`;return t&&(t.before&&(s+=`before=${new Date(t.before).toISOString()}`),t.limit&&(s+=`&limit=${t.limit}`)),s},private:(e,t)=>{let s=`/channels/${e}/threads/archived/private?`;return t&&(t.before&&(s+=`before=${new Date(t.before).toISOString()}`),t.limit&&(s+=`&limit=${t.limit}`)),s},joined:(e,t)=>{let s=`/channels/${e}/users/@me/threads/archived/private?`;return t&&(t.before&&(s+=`before=${new Date(t.before).toISOString()}`),t.limit&&(s+=`&limit=${t.limit}`)),s}},typing:e=>`/channels/${e}/typing`},guilds:{all:()=>"/guilds",auditlogs:(e,t)=>{let s=`/guilds/${e}/audit-logs?`;return t&&(t.actionType&&(s+=`action_type=${t.actionType}`),t.before&&(s+=`&before=${t.before}`),t.limit&&(s+=`&limit=${t.limit}`),t.userId&&(s+=`&user_id=${t.userId}`)),s},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 s=`/guilds/${e}/scheduled-events?`;return void 0!==t&&(s+=`with_user_count=${t.toString()}`),s},event:(e,t,s)=>{let a=`/guilds/${e}/scheduled-events/${t}`;return void 0!==s&&(a+=`with_user_count=${s.toString()}`),a},users:(e,t,s)=>{let a=`/guilds/${e}/scheduled-events/${t}/users?`;return s&&(void 0!==s.limit&&(a+=`limit=${s.limit}`),void 0!==s.withMember&&(a+=`&with_member=${s.withMember.toString()}`),void 0!==s.after&&(a+=`&after=${s.after}`),void 0!==s.before&&(a+=`&before=${s.before}`)),a}},guild(e,t){let s=`/guilds/${e}?`;return void 0!==t&&(s+=`with_counts=${t.toString()}`),s},integration:(e,t)=>`/guilds/${e}/integrations/${t}`,integrations:e=>`/guilds/${e}/integrations?include_applications=true`,invite(e,t){let s=`/invites/${e}?`;return t&&(void 0!==t.withCounts&&(s+=`with_counts=${t.withCounts.toString()}`),void 0!==t.withExpiration&&(s+=`&with_expiration=${t.withExpiration.toString()}`),t.scheduledEventId&&(s+=`&guild_scheduled_event_id=${t.scheduledEventId}`)),s},invites:e=>`/guilds/${e}/invites`,leave:e=>`/users/@me/guilds/${e}`,members:{ban:(e,t)=>`/guilds/${e}/bans/${t}`,bans:(e,t)=>{let s=`/guilds/${e}/bans?`;return t&&(t.limit&&(s+=`limit=${t.limit}`),t.after&&(s+=`&after=${t.after}`),t.before&&(s+=`&before=${t.before}`)),s},bot:e=>`/guilds/${e}/members/@me`,member:(e,t)=>`/guilds/${e}/members/${t}`,members:(e,t)=>{let s=`/guilds/${e}/members?`;return void 0!==t&&(t.limit&&(s+=`limit=${t.limit}`),t.after&&(s+=`&after=${t.after}`)),s},search:(e,t,s)=>{let a=`/guilds/${e}/members/search?query=${encodeURIComponent(t)}`;return s&&void 0!==s.limit&&(a+=`&limit=${s.limit}`),a},prune:(e,t)=>{let s=`/guilds/${e}/prune?`;return t&&(t.days&&(s+=`days=${t.days}`),Array.isArray(t.includeRoles)?s+=`&include_roles=${t.includeRoles.join(",")}`:t.includeRoles&&(s+=`&include_roles=${t.includeRoles}`)),s}},mfa:e=>`/guilds/${e}/mfa`,preview:e=>`/guilds/${e}/preview`,prune:(e,t)=>{let s=`/guilds/${e}/prune?`;return t&&(t.days&&(s+=`days=${t.days}`),Array.isArray(t.includeRoles)?s+=`&include_roles=${t.includeRoles.join(",")}`:t.includeRoles&&(s+=`&include_roles=${t.includeRoles}`)),s},roles:{one:(e,t)=>`/guilds/${e}/roles/${t}`,all:e=>`/guilds/${e}/roles`,member:(e,t,s)=>`/guilds/${e}/members/${t}/roles/${s}`},stickers:e=>`/guilds/${e}/stickers`,sticker:(e,t)=>`/guilds/${e}/stickers/${t}`,voice:(e,t)=>`/guilds/${e}/voice-states/${t??"@me"}`,templates:{code:e=>`/guilds/templates/${e}`,guild:(e,t)=>`/guilds/${e}/templates/${t}`,all:e=>`/guilds/${e}/templates`},vanity:e=>`/guilds/${e}/vanity-url`,regions:e=>`/guilds/${e}/regions`,webhooks:e=>`/guilds/${e}/webhooks`,welcome:e=>`/guilds/${e}/welcome-screen`,widget:e=>`/guilds/${e}/widget`,widgetJson:e=>`/guilds/${e}/widget.json`},sticker:e=>`/stickers/${e}`,regions:()=>"/voice/regions",interactions:{commands:{commands:e=>`/applications/${e}/commands`,guilds:{all:(e,t)=>`/applications/${e}/guilds/${t}/commands`,one(e,t,s,a){let i=`/applications/${e}/guilds/${t}/commands/${s}?`;return void 0!==a&&(i+=`with_localizations=${a.toString()}`),i}},permissions:(e,t)=>`/applications/${e}/guilds/${t}/commands/permissions`,permission:(e,t,s)=>`/applications/${e}/guilds/${t}/commands/${s}/permissions`,command:(e,t,s)=>{let a=`/applications/${e}/commands/${t}?`;return void 0!==s&&(a+=`withLocalizations=${s.toString()}`),a}},responses:{callback:(e,t)=>`/interactions/${e}/${t}/callback`,original:(e,t)=>`/webhooks/${e}/${t}/messages/@original`,message:(e,t,s)=>`/webhooks/${e}/${t}/messages/${s}`}},user:e=>`/users/${e}`,userBot:()=>"/users/@me",oauth2Application:()=>"oauth2/applications/@me",gatewayBot:()=>"/gateway/bot",nitroStickerPacks:()=>"/sticker-packs"},checkRateLimits(e){let t=y.rateLimitedPaths.get(e),s=y.rateLimitedPaths.get("global"),a=Date.now();return t&&a<t.resetTimestamp?t.resetTimestamp-a:!!s&&a<s.resetTimestamp&&s.resetTimestamp-a},changeToDiscordFormat(e){if(null===e)return null;if("object"==typeof e){if(Array.isArray(e))return e.map(e=>y.changeToDiscordFormat(e));let s={};for(let i of Object.keys(e)){if(["permissions","allow","deny"].includes(i)){s[i]=t(e[i]);continue}if("defaultMemberPermissions"===i){s.default_member_permissions=t(e[i]);continue}s[a(i)]=y.changeToDiscordFormat(e[i])}return s}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 ${y.token}`),e.headers)for(let s in e.headers)t[s.toLowerCase()]=e.headers[s];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:a}=e.body;if(a){let i=n(a),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);a&&(e.body.file=void 0),o.append("payload_json",JSON.stringify(y.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(y.changeToDiscordFormat(e.body)),method:e.method}},processRateLimitedPaths(){let e=Date.now();for(let[t,s]of y.rateLimitedPaths.entries())s.resetTimestamp>e||(y.rateLimitedPaths.delete(t),"global"!==t||(y.globallyRateLimited=!1));0===y.rateLimitedPaths.size?y.processingRateLimitedPaths=!1:(y.processingRateLimitedPaths=!0,setTimeout(()=>{y.processRateLimitedPaths()},1e3))},processHeaders(e,t){let s=!1,a=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(y.queues.get(e)?.handleCompletedRequest({remaining:a?Number(a):void 0,interval:i?1e3*Number(i):void 0,max:l?Number(l):void 0}),"0"===a&&(s=!0,y.rateLimitedPaths.set(e,{url:e,resetTimestamp:n,bucketId:r}),r&&y.rateLimitedPaths.set(r,{url:e,resetTimestamp:n,bucketId:r})),o){let d=t.get("retry-after"),u=Date.now()+1e3*Number(d);y.globallyRateLimited=!0,s=!0,setTimeout(()=>{y.globallyRateLimited=!1},u),y.rateLimitedPaths.set("global",{url:"global",resetTimestamp:u,bucketId:r}),r&&y.rateLimitedPaths.set(r,{url:"global",resetTimestamp:u,bucketId:r})}return s&&!y.processingRateLimitedPaths&&y.processRateLimitedPaths(),s?r:void 0},async sendRequest(e){let t=e.url.startsWith("https://")?e.url:`${y.baseUrl}/v${y.version}${e.url}`,s=y.createRequest({method:e.method,url:e.url,body:e.body,...e.options});c.debug(`sending request to ${t}`,"with payload:",{...s,headers:{...s.headers,authorization:"Bot tokenhere"}});let a=await fetch(t,s);c.debug(`request fetched from ${t} with status ${a.status} & ${a.statusText}`);let n=y.processHeaders(y.simplifyUrl(e.url,e.method),a.headers);if(n&&(e.bucketId=n),a.status<200||a.status>=400){if(c.debug(`Request to ${t} failed.`),429===a.status){if(c.debug(`Request to ${t} was ratelimited.`),e.retryCount++>=y.maxRetryCount)return c.debug(`Request to ${t} exceeded the maximum allowed retries.`,"with payload:",s),e.reject({ok:!1,status:a.status,error:"The options was rate limited and it maxed out the retries limit."});y.invalidBucket.handleCompletedRequest(a.status,"shared"===a.headers.get("X-RateLimit-Scope"));let o=a.headers.get("x-ratelimit-reset-after");return o&&await i(1e3*Number(o)),await a.json(),await e.retryRequest?.(e)}return e.reject({ok:!1,status:a.status,body:JSON.stringify(await a.json())})}let r=204===a.status,l=r?void 0:await a.json();return e.resolve({ok:!0,status:a.status,body:JSON.stringify(l)})},simplifyUrl(e,t){let s=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 s.includes("/reactions")&&(s=s.substring(0,s.indexOf("/reactions")+10)),"DELETE"===t&&s.endsWith("/messages/x")&&(s=t+s),s},processRequest(e){let t=e.url.substring(e.url.indexOf("api/")),s=t.split("/");s.shift(),s[0]?.startsWith("v")&&s.shift(),e.url=`${y.baseUrl}/v${y.version}/${s.join("/")}`;let a=y.simplifyUrl(e.url,e.method),i=y.queues.get(a);if(void 0!==i)i.makeRequest(e);else{let n=new h(y,{url:a,deleteQueueDelay:y.deleteQueueDelay});n.makeRequest(e),y.queues.set(a,n)}},makeRequest:async(e,t,s,a)=>await new Promise((i,n)=>{let o={url:t,method:e,body:s,retryCount:0,retryRequest:async function(e){y.processRequest(o)},resolve:e=>i(204!==e.status?JSON.parse(e.body??"{}"):void 0),reject:n,options:a};y.processRequest(o)}),get:async e=>s(await y.makeRequest("GET",e)),post:async(e,t)=>s(await y.makeRequest("POST",e,t)),delete:async(e,t)=>s(await y.makeRequest("DELETE",e,t)),patch:async(e,t)=>s(await y.makeRequest("PATCH",e,t)),put:async(e,t,a)=>s(await y.makeRequest("PUT",e,t,a)),addReaction:async(e,t,s)=>await y.put(y.routes.channels.reactions.bot(e,t,s=m(s))),async addReactions(e,t,s,a=!1){if(!a){await Promise.all(s.map(async s=>await y.addReaction(e,t,s)));return}for(let i of s)await y.addReaction(e,t,i)},addRole:async(e,t,s,a)=>await y.put(y.routes.guilds.roles.member(e,t,s),{reason:a}),addThreadMember:async(e,t)=>await y.put(y.routes.channels.threads.user(e,t)),createAutomodRule:async(e,t)=>await y.post(y.routes.guilds.automod.rules(e),t),createChannel:async(e,t)=>await y.post(y.routes.guilds.channels(e),t),createEmoji:async(e,t)=>await y.post(y.routes.guilds.emojis(e),t),createGlobalApplicationCommand:async e=>await y.post(y.routes.interactions.commands.commands(y.applicationId),e),createGuild:async e=>await y.post(y.routes.guilds.all(),e),createGuildApplicationCommand:async(e,t)=>await y.post(y.routes.interactions.commands.guilds.all(y.applicationId,t),e),createGuildFromTemplate:async(e,t)=>(t.icon&&(t.icon=await g(t.icon)),await y.post(y.routes.guilds.templates.code(e),t)),createGuildSticker:async(e,t)=>await y.post(y.routes.guilds.stickers(e),t),createGuildTemplate:async(e,t)=>await y.post(y.routes.guilds.templates.all(e),t),createForumThread:async(e,t)=>await y.post(y.routes.channels.forum(e),t),createInvite:async(e,t={})=>await y.post(y.routes.channels.invites(e),t),createRole:async(e,t,s)=>await y.post(y.routes.guilds.roles.all(e),{...t,reason:s}),createScheduledEvent:async(e,t)=>await y.post(y.routes.guilds.events.events(e),t),createStageInstance:async e=>await y.post(y.routes.channels.stages(),e),createWebhook:async(e,t)=>await y.post(y.routes.channels.webhooks(e),{name:t.name,avatar:t.avatar?await g(t.avatar):void 0,reason:t.reason}),deleteAutomodRule:async(e,t,s)=>await y.delete(y.routes.guilds.automod.rule(e,t),{reason:s}),deleteChannel:async(e,t)=>await y.delete(y.routes.channels.channel(e),{reason:t}),deleteChannelPermissionOverride:async(e,t,s)=>await y.delete(y.routes.channels.overwrite(e,t),s?{reason:s}:void 0),deleteEmoji:async(e,t,s)=>await y.delete(y.routes.guilds.emoji(e,t),{reason:s}),deleteFollowupMessage:async(e,t)=>await y.delete(y.routes.interactions.responses.message(y.applicationId,e,t)),deleteGlobalApplicationCommand:async e=>await y.delete(y.routes.interactions.commands.command(y.applicationId,e)),deleteGuild:async e=>await y.delete(y.routes.guilds.guild(e)),deleteGuildApplicationCommand:async(e,t)=>await y.delete(y.routes.interactions.commands.guilds.one(y.applicationId,t,e)),deleteGuildSticker:async(e,t,s)=>await y.delete(y.routes.guilds.sticker(e,t),s?{reason:s}:void 0),deleteGuildTemplate:async(e,t)=>await y.delete(y.routes.guilds.templates.guild(e,t)),deleteIntegration:async(e,t)=>await y.delete(y.routes.guilds.integration(e,t)),deleteInvite:async(e,t)=>await y.delete(y.routes.guilds.invite(e),t?{reason:t}:void 0),deleteMessage:async(e,t,s)=>await y.delete(y.routes.channels.message(e,t),{reason:s}),deleteMessages:async(e,t,s)=>await y.post(y.routes.channels.bulk(e),{messages:t.slice(0,100).map(e=>e.toString()),reason:s}),deleteOriginalInteractionResponse:async e=>await y.delete(y.routes.interactions.responses.original(y.applicationId,e)),deleteOwnReaction:async(e,t,s)=>await y.delete(y.routes.channels.reactions.bot(e,t,s=m(s))),deleteReactionsAll:async(e,t)=>await y.delete(y.routes.channels.reactions.all(e,t)),deleteReactionsEmoji:async(e,t,s)=>await y.delete(y.routes.channels.reactions.emoji(e,t,s=m(s))),deleteRole:async(e,t)=>await y.delete(y.routes.guilds.roles.one(e,t)),deleteScheduledEvent:async(e,t)=>await y.delete(y.routes.guilds.events.event(e,t)),deleteStageInstance:async(e,t)=>await y.delete(y.routes.channels.stage(e),t?{reason:t}:void 0),deleteUserReaction:async(e,t,s,a)=>await y.delete(y.routes.channels.reactions.user(e,t,a=m(a),s)),deleteWebhook:async(e,t)=>await y.delete(y.routes.webhooks.id(e),{reason:t}),deleteWebhookMessage:async(e,t,s,a)=>await y.delete(y.routes.webhooks.message(e,t,s,a)),deleteWebhookWithToken:async(e,t)=>await y.delete(y.routes.webhooks.webhook(e,t)),editApplicationCommandPermissions:async(e,t,s,a)=>await y.put(y.routes.interactions.commands.permission(y.applicationId,e,t),{permissions:a},{headers:{authorization:`Bearer ${s}`}}),editAutomodRule:async(e,t,s)=>await y.patch(y.routes.guilds.automod.rule(e,t),s),async editBotProfile(e){let t=e?.botAvatarURL?await g(e?.botAvatarURL):e?.botAvatarURL;return await y.patch(y.routes.userBot(),{username:e.username?.trim(),avatar:t})},editChannel:async(e,t)=>await y.patch(y.routes.channels.channel(e),t),editChannelPermissionOverrides:async(e,t)=>await y.put(y.routes.channels.overwrite(e,t.id),t),editChannelPositions:async(e,t)=>await y.patch(y.routes.guilds.channels(e),t),editEmoji:async(e,t,s)=>await y.patch(y.routes.guilds.emoji(e,t),s),editFollowupMessage:async(e,t,s)=>await y.patch(y.routes.interactions.responses.message(y.applicationId,e,t),s),editGlobalApplicationCommand:async(e,t)=>await y.patch(y.routes.interactions.commands.command(y.applicationId,e),t),editGuild:async(e,t)=>await y.patch(y.routes.guilds.guild(e),t),editGuildApplicationCommand:async(e,t,s)=>await y.patch(y.routes.interactions.commands.guilds.one(y.applicationId,t,e),s),editGuildMfaLevel:async(e,t,s)=>await y.post(y.routes.guilds.mfa(e),{level:t,reason:s}),editGuildSticker:async(e,t,s)=>await y.patch(y.routes.guilds.sticker(e,t),s),editGuildTemplate:async(e,t,s)=>await y.patch(y.routes.guilds.templates.guild(e,t),s),editMessage:async(e,t,s)=>await y.patch(y.routes.channels.message(e,t),s),editOriginalInteractionResponse:async(e,t)=>await y.patch(y.routes.interactions.responses.original(y.applicationId,e),t),editOriginalWebhookMessage:async(t,s,a)=>await y.patch(y.routes.webhooks.original(t,s,a),{type:e.UpdateMessage,data:a}),editOwnVoiceState:async(e,t)=>await y.patch(y.routes.guilds.voice(e),{channel_id:t.channelId,suppress:t.suppress,request_to_speak_timestamp:t.requestToSpeakTimestamp?new Date(t.requestToSpeakTimestamp).toISOString():t.requestToSpeakTimestamp}),editScheduledEvent:async(e,t,s)=>await y.patch(y.routes.guilds.events.event(e,t),s),editRole:async(e,t,s)=>await y.patch(y.routes.guilds.roles.one(e,t),s),editRolePositions:async(e,t)=>await y.patch(y.routes.guilds.roles.all(e),t),editStageInstance:async(e,t)=>await y.patch(y.routes.channels.stage(e),{topic:t.topic}),editUserVoiceState:async(e,t)=>await y.patch(y.routes.guilds.voice(e,t.userId),{channel_id:t.channelId,suppress:t.suppress,user_id:t.userId}),editWebhook:async(e,t)=>await y.patch(y.routes.webhooks.id(e),t),editWebhookMessage:async(e,t,s,a)=>await y.patch(y.routes.webhooks.message(e,t,s,a),a),editWebhookWithToken:async(e,t,s)=>await y.patch(y.routes.webhooks.webhook(e,t),s),editWelcomeScreen:async(e,t)=>await y.patch(y.routes.guilds.welcome(e),t),editWidgetSettings:async(e,t)=>await y.patch(y.routes.guilds.widget(e),t),executeWebhook:async(e,t,s)=>await y.post(y.routes.webhooks.webhook(e,t,s),s),followAnnouncement:async(e,t)=>await y.post(y.routes.channels.follow(e),{webhook_channel_id:t}),getActiveThreads:async e=>await y.get(y.routes.channels.threads.active(e)),getApplicationCommandPermission:async(e,t)=>await y.get(y.routes.interactions.commands.permission(y.applicationId,e,t)),getApplicationCommandPermissions:async e=>await y.get(y.routes.interactions.commands.permissions(y.applicationId,e)),getApplicationInfo:async()=>await y.get(y.routes.oauth2Application()),getAuditLog:async(e,t)=>await y.get(y.routes.guilds.auditlogs(e,t)),getAutomodRule:async(e,t)=>await y.get(y.routes.guilds.automod.rule(e,t)),getAutomodRules:async e=>await y.get(y.routes.guilds.automod.rules(e)),getAvailableVoiceRegions:async()=>await y.get(y.routes.regions()),getBan:async(e,t)=>await y.get(y.routes.guilds.members.ban(e,t)),getBans:async(e,t)=>await y.get(y.routes.guilds.members.bans(e,t)),getChannel:async e=>await y.get(y.routes.channels.channel(e)),getChannelInvites:async e=>await y.get(y.routes.channels.invites(e)),getChannels:async e=>await y.get(y.routes.guilds.channels(e)),getChannelWebhooks:async e=>await y.get(y.routes.channels.webhooks(e)),getDmChannel:async e=>await y.post(y.routes.channels.dm(),{recipient_id:e.toString()}),getEmoji:async(e,t)=>await y.get(y.routes.guilds.emoji(e,t)),getEmojis:async e=>await y.get(y.routes.guilds.emojis(e)),getFollowupMessage:async(e,t)=>await y.get(y.routes.interactions.responses.message(y.applicationId,e,t)),getGatewayBot:async()=>await y.get(y.routes.gatewayBot()),getGlobalApplicationCommand:async e=>await y.get(y.routes.interactions.commands.command(y.applicationId,e)),getGlobalApplicationCommands:async()=>await y.get(y.routes.interactions.commands.commands(y.applicationId)),getGuild:async(e,t={counts:!0})=>await y.get(y.routes.guilds.guild(e,t.counts)),getGuildApplicationCommand:async(e,t)=>await y.get(y.routes.interactions.commands.guilds.one(y.applicationId,t,e)),getGuildApplicationCommands:async e=>await y.get(y.routes.interactions.commands.guilds.all(y.applicationId,e)),getGuildPreview:async e=>await y.get(y.routes.guilds.preview(e)),getGuildTemplate:async e=>await y.get(y.routes.guilds.templates.code(e)),getGuildTemplates:async e=>await y.get(y.routes.guilds.templates.all(e)),getGuildWebhooks:async e=>await y.get(y.routes.guilds.webhooks(e)),getIntegrations:async e=>await y.get(y.routes.guilds.integrations(e)),getInvite:async(e,t)=>await y.get(y.routes.guilds.invite(e,t)),getInvites:async e=>await y.get(y.routes.guilds.invites(e)),getMessage:async(e,t)=>await y.get(y.routes.channels.message(e,t)),getMessages:async(e,t)=>await y.get(y.routes.channels.messages(e,t)),getNitroStickerPacks:async()=>await y.get(y.routes.nitroStickerPacks()),getOriginalInteractionResponse:async e=>await y.get(y.routes.interactions.responses.original(y.applicationId,e)),getPinnedMessages:async e=>await y.get(y.routes.channels.pins(e)),getPrivateArchivedThreads:async(e,t)=>await y.get(y.routes.channels.threads.private(e,t)),getPrivateJoinedArchivedThreads:async(e,t)=>await y.get(y.routes.channels.threads.joined(e,t)),getPruneCount:async(e,t)=>await y.get(y.routes.guilds.prune(e,t)),getPublicArchivedThreads:async(e,t)=>await y.get(y.routes.channels.threads.public(e,t)),getRoles:async e=>await y.get(y.routes.guilds.roles.all(e)),getScheduledEvent:async(e,t,s)=>await y.get(y.routes.guilds.events.event(e,t,s?.withUserCount)),getScheduledEvents:async(e,t)=>await y.get(y.routes.guilds.events.events(e,t?.withUserCount)),getScheduledEventUsers:async(e,t,s)=>await y.get(y.routes.guilds.events.users(e,t,s)),getSessionInfo:async()=>await y.getGatewayBot(),getStageInstance:async e=>await y.get(y.routes.channels.stage(e)),getSticker:async e=>await y.get(y.routes.sticker(e)),getGuildSticker:async(e,t)=>await y.get(y.routes.guilds.sticker(e,t)),getGuildStickers:async e=>await y.get(y.routes.guilds.stickers(e)),getThreadMember:async(e,t)=>await y.get(y.routes.channels.threads.user(e,t)),getThreadMembers:async e=>await y.get(y.routes.channels.threads.members(e)),getReactions:async(e,t,s,a)=>await y.get(y.routes.channels.reactions.message(e,t,s,a)),getUser:async e=>await y.get(y.routes.user(e)),getVanityUrl:async e=>await y.get(y.routes.guilds.vanity(e)),getVoiceRegions:async e=>await y.get(y.routes.guilds.regions(e)),getWebhook:async e=>await y.get(y.routes.webhooks.id(e)),getWebhookMessage:async(e,t,s,a)=>await y.get(y.routes.webhooks.message(e,t,s,a)),getWebhookWithToken:async(e,t)=>await y.get(y.routes.webhooks.webhook(e,t)),getWelcomeScreen:async e=>await y.get(y.routes.guilds.welcome(e)),getWidget:async e=>await y.get(y.routes.guilds.widgetJson(e)),getWidgetSettings:async e=>await y.get(y.routes.guilds.widget(e)),joinThread:async e=>await y.put(y.routes.channels.threads.me(e)),leaveGuild:async e=>await y.delete(y.routes.guilds.leave(e)),leaveThread:async e=>await y.delete(y.routes.channels.threads.me(e)),publishMessage:async(e,t)=>await y.post(y.routes.channels.crosspost(e,t)),removeRole:async(e,t,s,a)=>await y.delete(y.routes.guilds.roles.member(e,t,s),{reason:a}),removeThreadMember:async(e,t)=>await y.delete(y.routes.channels.threads.user(e,t)),sendFollowupMessage:async(e,t)=>await new Promise((s,a)=>{y.sendRequest({url:y.routes.webhooks.webhook(y.applicationId,e),method:"POST",body:t,retryCount:0,retryRequest:async function(e){await y.sendRequest(e)},resolve:e=>s(204!==e.status?JSON.parse(e.body??"{}"):void 0),reject:a})}),sendInteractionResponse:async(e,t,s)=>await new Promise((a,i)=>{y.sendRequest({url:y.routes.interactions.responses.callback(e,t),method:"POST",body:s,retryCount:0,retryRequest:async function(e){await y.sendRequest(e)},resolve:e=>a(204!==e.status?JSON.parse(e.body??"{}"):void 0),reject:i})}),sendMessage:async(e,t)=>await y.post(y.routes.channels.messages(e),t),startThreadWithMessage:async(e,t,s)=>await y.post(y.routes.channels.threads.message(e,t),s),startThreadWithoutMessage:async(e,t)=>await y.post(y.routes.channels.threads.all(e),t),syncGuildTemplate:async e=>await y.put(y.routes.guilds.templates.all(e)),banMember:async(e,t,s)=>await y.put(y.routes.guilds.members.ban(e,t),s),editBotMember:async(e,t)=>await y.patch(y.routes.guilds.members.bot(e),t),editMember:async(e,t,s)=>await y.patch(y.routes.guilds.members.member(e,t),s),getMember:async(e,t)=>await y.get(y.routes.guilds.members.member(e,t)),getMembers:async(e,t)=>await y.get(y.routes.guilds.members.members(e,t)),kickMember:async(e,t,s)=>await y.delete(y.routes.guilds.members.member(e,t),{reason:s}),pinMessage:async(e,t,s)=>await y.put(y.routes.channels.pin(e,t),s?{reason:s}:void 0),pruneMembers:async(e,t)=>await y.post(y.routes.guilds.members.prune(e),t),searchMembers:async(e,t,s)=>await y.get(y.routes.guilds.members.search(e,t,s)),unbanMember:async(e,t)=>await y.delete(y.routes.guilds.members.ban(e,t)),unpinMessage:async(e,t,s)=>await y.delete(y.routes.channels.pin(e,t),s?{reason:s}:void 0),triggerTypingIndicator:async e=>await y.post(y.routes.channels.typing(e)),upsertGlobalApplicationCommands:async e=>await y.put(y.routes.interactions.commands.commands(y.applicationId),e),upsertGuildApplicationCommands:async(e,t)=>await y.put(y.routes.interactions.commands.guilds.all(y.applicationId,e),t)};return y}
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9ucyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc3QtYXNzaWduICovXG5pbXBvcnQgeyBJbnRlcmFjdGlvblJlc3BvbnNlVHlwZXMgfSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7XG4gIGNhbGN1bGF0ZUJpdHMsXG4gIGNhbWVsaXplLFxuICBjYW1lbFRvU25ha2VDYXNlLFxuICBkZWxheSxcbiAgZmluZEZpbGVzLFxuICBnZXRCb3RJZEZyb21Ub2tlbixcbiAgaXNHZXRNZXNzYWdlc0FmdGVyLFxuICBpc0dldE1lc3NhZ2VzQXJvdW5kLFxuICBpc0dldE1lc3NhZ2VzQmVmb3JlLFxuICBpc0dldE1lc3NhZ2VzTGltaXQsXG4gIGxvZ2dlcixcbiAgcHJvY2Vzc1JlYWN0aW9uU3RyaW5nLFxuICB1cmxUb0Jhc2U2NCxcbn0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnXG5cbmltcG9ydCB7IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0IH0gZnJvbSAnLi9pbnZhbGlkQnVja2V0LmpzJ1xuaW1wb3J0IHsgUXVldWUgfSBmcm9tICcuL3F1ZXVlLmpzJ1xuXG5pbXBvcnQgdHlwZSB7XG4gIEJpZ1N0cmluZyxcbiAgQ2FtZWxpemUsXG4gIERpc2NvcmRBcHBsaWNhdGlvbixcbiAgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZCxcbiAgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zLFxuICBEaXNjb3JkQXVkaXRMb2csXG4gIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIERpc2NvcmRCYW4sXG4gIERpc2NvcmRDaGFubmVsLFxuICBEaXNjb3JkRW1vamksXG4gIERpc2NvcmRGb2xsb3dBbm5vdW5jZW1lbnRDaGFubmVsLFxuICBEaXNjb3JkRm9sbG93ZWRDaGFubmVsLFxuICBEaXNjb3JkR2V0R2F0ZXdheUJvdCxcbiAgRGlzY29yZEd1aWxkLFxuICBEaXNjb3JkR3VpbGRQcmV2aWV3LFxuICBEaXNjb3JkR3VpbGRXaWRnZXQsXG4gIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzLFxuICBEaXNjb3JkSW50ZWdyYXRpb24sXG4gIERpc2NvcmRJbnZpdGUsXG4gIERpc2NvcmRJbnZpdGVNZXRhZGF0YSxcbiAgRGlzY29yZExpc3RBY3RpdmVUaHJlYWRzLFxuICBEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcyxcbiAgRGlzY29yZE1lbWJlcixcbiAgRGlzY29yZE1lbWJlcldpdGhVc2VyLFxuICBEaXNjb3JkTWVzc2FnZSxcbiAgRGlzY29yZFBydW5lZENvdW50LFxuICBEaXNjb3JkUm9sZSxcbiAgRGlzY29yZFNjaGVkdWxlZEV2ZW50LFxuICBEaXNjb3JkU3RhZ2VJbnN0YW5jZSxcbiAgRGlzY29yZFN0aWNrZXIsXG4gIERpc2NvcmRTdGlja2VyUGFjayxcbiAgRGlzY29yZFRlbXBsYXRlLFxuICBEaXNjb3JkVGhyZWFkTWVtYmVyLFxuICBEaXNjb3JkVXNlcixcbiAgRGlzY29yZFZhbml0eVVybCxcbiAgRGlzY29yZFZvaWNlUmVnaW9uLFxuICBEaXNjb3JkV2ViaG9vayxcbiAgRGlzY29yZFdlbGNvbWVTY3JlZW4sXG4gIEdldE1lc3NhZ2VzT3B0aW9ucyxcbiAgR2V0U2NoZWR1bGVkRXZlbnRVc2VycyxcbiAgTWZhTGV2ZWxzLFxuICBNb2RpZnlHdWlsZFRlbXBsYXRlLFxufSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB0eXBlIHsgQ3JlYXRlUmVzdE1hbmFnZXJPcHRpb25zLCBSZXN0TWFuYWdlciwgU2VuZFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi90eXBlcy5qcydcblxuLy8gVE9ETzogbWFrZSBkeW5hbWljIGJhc2VkIG9uIHBhY2thZ2UuanNvbiBmaWxlXG5jb25zdCB2ZXJzaW9uID0gJzE5LjAuMC1hbHBoYS4xJ1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVzdE1hbmFnZXIob3B0aW9uczogQ3JlYXRlUmVzdE1hbmFnZXJPcHRpb25zKTogUmVzdE1hbmFnZXIge1xuICAvLyBGYWxzeSB0b2tlbiBzdHJpbmcgY2hlY2tcbiAgaWYgKCFvcHRpb25zLnRva2VuKSB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IHByb3ZpZGUgYSB2YWxpZCB0b2tlbi4nKVxuXG4gIGNvbnN0IHJlc3Q6IFJlc3RNYW5hZ2VyID0ge1xuICAgIHRva2VuOiBvcHRpb25zLnRva2VuLFxuICAgIGFwcGxpY2F0aW9uSWQ6IG9wdGlvbnMuYXBwbGljYXRpb25JZCA/IEJpZ0ludChvcHRpb25zLmFwcGxpY2F0aW9uSWQpIDogZ2V0Qm90SWRGcm9tVG9rZW4ob3B0aW9ucy50b2tlbiksXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/IDEwLFxuICAgIGJhc2VVcmw6IG9wdGlvbnMuYmFzZVVybCA/PyAnaHR0cHM6Ly9kaXNjb3JkLmNvbS9hcGknLFxuICAgIG1heFJldHJ5Q291bnQ6IEluZmluaXR5LFxuICAgIGdsb2JhbGx5UmF0ZUxpbWl0ZWQ6IGZhbHNlLFxuICAgIHByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzOiBmYWxzZSxcbiAgICBkZWxldGVRdWV1ZURlbGF5OiA2MDAwMCxcbiAgICBxdWV1ZXM6IG5ldyBNYXAoKSxcbiAgICByYXRlTGltaXRlZFBhdGhzOiBuZXcgTWFwKCksXG4gICAgaW52YWxpZEJ1Y2tldDogY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQoe30pLFxuXG4gICAgcm91dGVzOiB7XG4gICAgICB3ZWJob29rczoge1xuICAgICAgICBpZDogKHdlYmhvb2tJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL3dlYmhvb2tzLyR7d2ViaG9va0lkfWBcbiAgICAgICAgfSxcbiAgICAgICAgbWVzc2FnZTogKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgIGxldCB1cmwgPSBgL3dlYmhvb2tzLyR7d2ViaG9va0lkfS8ke3Rva2VufS9tZXNzYWdlcy8ke21lc3NhZ2VJZH0/YFxuXG4gICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnRocmVhZElkKSB1cmwgKz0gYHRocmVhZF9pZD0ke29wdGlvbnMudGhyZWFkSWR9YFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgfSxcbiAgICAgICAgb3JpZ2luYWw6ICh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvd2ViaG9va3MvJHt3ZWJob29rSWR9LyR7dG9rZW59L21lc3NhZ2VzL0BvcmlnaW5hbD9gXG5cbiAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMudGhyZWFkSWQpIHVybCArPSBgdGhyZWFkX2lkPSR7b3B0aW9ucy50aHJlYWRJZH1gXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICB9LFxuICAgICAgICB3ZWJob29rOiAod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgIGxldCB1cmwgPSBgL3dlYmhvb2tzLyR7d2ViaG9va0lkfS8ke3Rva2VufT9gXG5cbiAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnM/LndhaXQgIT09IHVuZGVmaW5lZCkgdXJsICs9IGB3YWl0PSR7b3B0aW9ucy53YWl0LnRvU3RyaW5nKCl9YFxuICAgICAgICAgICAgaWYgKG9wdGlvbnMudGhyZWFkSWQpIHVybCArPSBgdGhyZWFkX2lkPSR7b3B0aW9ucy50aHJlYWRJZH1gXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgICAgLy8gTWlzY2VsbGFuZW91cyBFbmRwb2ludHNcbiAgICAgIHNlc3Npb25JbmZvOiAoKSA9PiByZXN0LnJvdXRlcy5nYXRld2F5Qm90KCksXG5cbiAgICAgIC8vIENoYW5uZWwgRW5kcG9pbnRzXG4gICAgICBjaGFubmVsczoge1xuICAgICAgICBidWxrOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L21lc3NhZ2VzL2J1bGstZGVsZXRlYFxuICAgICAgICB9LFxuICAgICAgICBkbTogKCkgPT4ge1xuICAgICAgICAgIHJldHVybiAnL3VzZXJzL0BtZS9jaGFubmVscydcbiAgICAgICAgfSxcbiAgICAgICAgcGluOiAoY2hhbm5lbElkLCBtZXNzYWdlSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vcGlucy8ke21lc3NhZ2VJZH1gXG4gICAgICAgIH0sXG4gICAgICAgIHBpbnM6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vcGluc2BcbiAgICAgICAgfSxcbiAgICAgICAgcmVhY3Rpb25zOiB7XG4gICAgICAgICAgYm90OiAoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGVtb2ppKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vbWVzc2FnZXMvJHttZXNzYWdlSWR9L3JlYWN0aW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChlbW9qaSl9L0BtZWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVzZXI6IChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgZW1vamksIHVzZXJJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L21lc3NhZ2VzLyR7bWVzc2FnZUlkfS9yZWFjdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoZW1vamkpfS8ke3VzZXJJZH1gXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbGw6IChjaGFubmVsSWQsIG1lc3NhZ2VJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L21lc3NhZ2VzLyR7bWVzc2FnZUlkfS9yZWFjdGlvbnNgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbW9qaTogKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBlbW9qaSwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L21lc3NhZ2VzLyR7bWVzc2FnZUlkfS9yZWFjdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoZW1vamkpfT9gXG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXIpIHVybCArPSBgYWZ0ZXI9JHtvcHRpb25zLmFmdGVyfWBcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCkgdXJsICs9IGAmbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVzc2FnZTogKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBlbW9qaSwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L21lc3NhZ2VzLyR7bWVzc2FnZUlkfS9yZWFjdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoZW1vamkpfT9gXG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXIpIHVybCArPSBgYWZ0ZXI9JHtvcHRpb25zLmFmdGVyfWBcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCkgdXJsICs9IGAmbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHdlYmhvb2tzOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3dlYmhvb2tzYFxuICAgICAgICB9LFxuXG4gICAgICAgIGNoYW5uZWw6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH1gXG4gICAgICAgIH0sXG5cbiAgICAgICAgZm9sbG93OiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L2ZvbGxvd2Vyc2BcbiAgICAgICAgfSxcblxuICAgICAgICBmb3J1bTogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS90aHJlYWRzP2hhc19tZXNzYWdlPXRydWVgXG4gICAgICAgIH0sXG5cbiAgICAgICAgaW52aXRlczogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9pbnZpdGVzYFxuICAgICAgICB9LFxuXG4gICAgICAgIG1lc3NhZ2U6IChjaGFubmVsSWQsIG1lc3NhZ2VJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9tZXNzYWdlcy8ke21lc3NhZ2VJZH1gXG4gICAgICAgIH0sXG5cbiAgICAgICAgbWVzc2FnZXM6IChjaGFubmVsSWQsIG9wdGlvbnM/OiBHZXRNZXNzYWdlc09wdGlvbnMpID0+IHtcbiAgICAgICAgICBsZXQgdXJsID0gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vbWVzc2FnZXM/YFxuXG4gICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChpc0dldE1lc3NhZ2VzQWZ0ZXIob3B0aW9ucykgJiYgb3B0aW9ucy5hZnRlcikge1xuICAgICAgICAgICAgICB1cmwgKz0gYGFmdGVyPSR7b3B0aW9ucy5hZnRlcn1gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNHZXRNZXNzYWdlc0JlZm9yZShvcHRpb25zKSAmJiBvcHRpb25zLmJlZm9yZSkge1xuICAgICAgICAgICAgICB1cmwgKz0gYCZiZWZvcmU9JHtvcHRpb25zLmJlZm9yZX1gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNHZXRNZXNzYWdlc0Fyb3VuZChvcHRpb25zKSAmJiBvcHRpb25zLmFyb3VuZCkge1xuICAgICAgICAgICAgICB1cmwgKz0gYCZhcm91bmQ9JHtvcHRpb25zLmFyb3VuZH1gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNHZXRNZXNzYWdlc0xpbWl0KG9wdGlvbnMpICYmIG9wdGlvbnMubGltaXQpIHtcbiAgICAgICAgICAgICAgdXJsICs9IGAmbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgIH0sXG5cbiAgICAgICAgb3ZlcndyaXRlOiAoY2hhbm5lbElkLCBvdmVyd3JpdGVJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9wZXJtaXNzaW9ucy8ke292ZXJ3cml0ZUlkfWBcbiAgICAgICAgfSxcblxuICAgICAgICBjcm9zc3Bvc3Q6IChjaGFubmVsSWQsIG1lc3NhZ2VJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9tZXNzYWdlcy8ke21lc3NhZ2VJZH0vY3Jvc3Nwb3N0YFxuICAgICAgICB9LFxuXG4gICAgICAgIHN0YWdlczogKCkgPT4ge1xuICAgICAgICAgIHJldHVybiAnL3N0YWdlLWluc3RhbmNlcydcbiAgICAgICAgfSxcblxuICAgICAgICBzdGFnZTogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL3N0YWdlLWluc3RhbmNlcy8ke2NoYW5uZWxJZH1gXG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gVGhyZWFkIEVuZHBvaW50c1xuICAgICAgICB0aHJlYWRzOiB7XG4gICAgICAgICAgbWVzc2FnZTogKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vbWVzc2FnZXMvJHttZXNzYWdlSWR9L3RocmVhZHNgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbGw6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS90aHJlYWRzYFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWN0aXZlOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vdGhyZWFkcy9hY3RpdmVgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZW1iZXJzOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vdGhyZWFkLW1lbWJlcnNgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZTogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3RocmVhZC1tZW1iZXJzL0BtZWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVzZXI6IChjaGFubmVsSWQsIHVzZXJJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3RocmVhZC1tZW1iZXJzLyR7dXNlcklkfWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFyY2hpdmVkOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vdGhyZWFkcy9hcmNoaXZlZGBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHB1YmxpYzogKGNoYW5uZWxJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3RocmVhZHMvYXJjaGl2ZWQvcHVibGljP2BcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgdXJsICs9IGBiZWZvcmU9JHtuZXcgRGF0ZShvcHRpb25zLmJlZm9yZSkudG9JU09TdHJpbmcoKX1gXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCkgdXJsICs9IGAmbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJpdmF0ZTogKGNoYW5uZWxJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3RocmVhZHMvYXJjaGl2ZWQvcHJpdmF0ZT9gXG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmJlZm9yZSkge1xuICAgICAgICAgICAgICAgIHVybCArPSBgYmVmb3JlPSR7bmV3IERhdGUob3B0aW9ucy5iZWZvcmUpLnRvSVNPU3RyaW5nKCl9YFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubGltaXQpIHVybCArPSBgJmxpbWl0PSR7b3B0aW9ucy5saW1pdH1gXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGpvaW5lZDogKGNoYW5uZWxJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3VzZXJzL0BtZS90aHJlYWRzL2FyY2hpdmVkL3ByaXZhdGU/YFxuXG4gICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5iZWZvcmUpIHtcbiAgICAgICAgICAgICAgICB1cmwgKz0gYGJlZm9yZT0ke25ldyBEYXRlKG9wdGlvbnMuYmVmb3JlKS50b0lTT1N0cmluZygpfWBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0KSB1cmwgKz0gYCZsaW1pdD0ke29wdGlvbnMubGltaXR9YFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICB0eXBpbmc6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vdHlwaW5nYFxuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgICAgLy8gR3VpbGQgRW5kcG9pbnRzXG4gICAgICBndWlsZHM6IHtcbiAgICAgICAgYWxsOiAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuICcvZ3VpbGRzJ1xuICAgICAgICB9LFxuICAgICAgICBhdWRpdGxvZ3M6IChndWlsZElkLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvZ3VpbGRzLyR7Z3VpbGRJZH0vYXVkaXQtbG9ncz9gXG5cbiAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWN0aW9uVHlwZSkgdXJsICs9IGBhY3Rpb25fdHlwZT0ke29wdGlvbnMuYWN0aW9uVHlwZX1gXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5iZWZvcmUpIHVybCArPSBgJmJlZm9yZT0ke29wdGlvbnMuYmVmb3JlfWBcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0KSB1cmwgKz0gYCZsaW1pdD0ke29wdGlvbnMubGltaXR9YFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMudXNlcklkKSB1cmwgKz0gYCZ1c2VyX2lkPSR7b3B0aW9ucy51c2VySWR9YFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgfSxcbiAgICAgICAgYXV0b21vZDoge1xuICAgICAgICAgIHJ1bGU6IChndWlsZElkLCBydWxlSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L2F1dG8tbW9kZXJhdGlvbi9ydWxlcy8ke3J1bGVJZH1gXG4gICAgICAgICAgfSxcbiAgICAgICAgICBydWxlczogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L2F1dG8tbW9kZXJhdGlvbi9ydWxlc2BcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBjaGFubmVsczogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9jaGFubmVsc2BcbiAgICAgICAgfSxcbiAgICAgICAgZW1vamk6IChndWlsZElkLCBlbW9qaUlkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vZW1vamlzLyR7ZW1vamlJZH1gXG4gICAgICAgIH0sXG4gICAgICAgIGVtb2ppczogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9lbW9qaXNgXG4gICAgICAgIH0sXG4gICAgICAgIGV2ZW50czoge1xuICAgICAgICAgIGV2ZW50czogKGd1aWxkSWQsIHdpdGhVc2VyQ291bnQ/OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtndWlsZElkfS9zY2hlZHVsZWQtZXZlbnRzP2BcblxuICAgICAgICAgICAgaWYgKHdpdGhVc2VyQ291bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB1cmwgKz0gYHdpdGhfdXNlcl9jb3VudD0ke3dpdGhVc2VyQ291bnQudG9TdHJpbmcoKX1gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBldmVudDogKGd1aWxkSWQsIGV2ZW50SWQsIHdpdGhVc2VyQ291bnQ/OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtndWlsZElkfS9zY2hlZHVsZWQtZXZlbnRzLyR7ZXZlbnRJZH1gXG5cbiAgICAgICAgICAgIGlmICh3aXRoVXNlckNvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdXJsICs9IGB3aXRoX3VzZXJfY291bnQ9JHt3aXRoVXNlckNvdW50LnRvU3RyaW5nKCl9YFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB1c2VyczogKGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnM/OiBHZXRTY2hlZHVsZWRFdmVudFVzZXJzKSA9PiB7XG4gICAgICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtndWlsZElkfS9zY2hlZHVsZWQtZXZlbnRzLyR7ZXZlbnRJZH0vdXNlcnM/YFxuXG4gICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0ICE9PSB1bmRlZmluZWQpIHVybCArPSBgbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMud2l0aE1lbWJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICAgIHVybCArPSBgJndpdGhfbWVtYmVyPSR7b3B0aW9ucy53aXRoTWVtYmVyLnRvU3RyaW5nKCl9YFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXIgIT09IHVuZGVmaW5lZCkgdXJsICs9IGAmYWZ0ZXI9JHtvcHRpb25zLmFmdGVyfWBcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5iZWZvcmUgIT09IHVuZGVmaW5lZCkgdXJsICs9IGAmYmVmb3JlPSR7b3B0aW9ucy5iZWZvcmV9YFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZ3VpbGQoZ3VpbGRJZCwgd2l0aENvdW50cykge1xuICAgICAgICAgIGxldCB1cmwgPSBgL2d1aWxkcy8ke2d1aWxkSWR9P2BcblxuICAgICAgICAgIGlmICh3aXRoQ291bnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHVybCArPSBgd2l0aF9jb3VudHM9JHt3aXRoQ291bnRzLnRvU3RyaW5nKCl9YFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgfSxcbiAgICAgICAgaW50ZWdyYXRpb24oZ3VpbGRJZCwgaW50ZWdyYXRpb25JZCkge1xuICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L2ludGVncmF0aW9ucy8ke2ludGVncmF0aW9uSWR9YFxuICAgICAgICB9LFxuICAgICAgICBpbnRlZ3JhdGlvbnM6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vaW50ZWdyYXRpb25zP2luY2x1ZGVfYXBwbGljYXRpb25zPXRydWVgXG4gICAgICAgIH0sXG4gICAgICAgIGludml0ZShpbnZpdGVDb2RlLCBvcHRpb25zKSB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvaW52aXRlcy8ke2ludml0ZUNvZGV9P2BcblxuICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy53aXRoQ291bnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICB1cmwgKz0gYHdpdGhfY291bnRzPSR7b3B0aW9ucy53aXRoQ291bnRzLnRvU3RyaW5nKCl9YFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMud2l0aEV4cGlyYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIHVybCArPSBgJndpdGhfZXhwaXJhdGlvbj0ke29wdGlvbnMud2l0aEV4cGlyYXRpb24udG9TdHJpbmcoKX1gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zY2hlZHVsZWRFdmVudElkKSB7XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgdXJsICs9IGAmZ3VpbGRfc2NoZWR1bGVkX2V2ZW50X2lkPSR7b3B0aW9ucy5zY2hlZHVsZWRFdmVudElkfWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgIH0sXG4gICAgICAgIGludml0ZXM6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vaW52aXRlc2BcbiAgICAgICAgfSxcbiAgICAgICAgbGVhdmU6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvdXNlcnMvQG1lL2d1aWxkcy8ke2d1aWxkSWR9YFxuICAgICAgICB9LFxuICAgICAgICBtZW1iZXJzOiB7XG4gICAgICAgICAgYmFuOiAoZ3VpbGRJZCwgdXNlcklkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9iYW5zLyR7dXNlcklkfWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJhbnM6IChndWlsZElkLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtndWlsZElkfS9iYW5zP2BcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCkgdXJsICs9IGBsaW1pdD0ke29wdGlvbnMubGltaXR9YFxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmFmdGVyKSB1cmwgKz0gYCZhZnRlcj0ke29wdGlvbnMuYWZ0ZXJ9YFxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmJlZm9yZSkgdXJsICs9IGAmYmVmb3JlPSR7b3B0aW9ucy5iZWZvcmV9YFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBib3Q6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9tZW1iZXJzL0BtZWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lbWJlcjogKGd1aWxkSWQsIHVzZXJJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vbWVtYmVycy8ke3VzZXJJZH1gXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZW1iZXJzOiAoZ3VpbGRJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvZ3VpbGRzLyR7Z3VpbGRJZH0vbWVtYmVycz9gXG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCkgdXJsICs9IGBsaW1pdD0ke29wdGlvbnMubGltaXR9YFxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmFmdGVyKSB1cmwgKz0gYCZhZnRlcj0ke29wdGlvbnMuYWZ0ZXJ9YFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWFyY2g6IChndWlsZElkLCBxdWVyeSwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvZ3VpbGRzLyR7Z3VpbGRJZH0vbWVtYmVycy9zZWFyY2g/cXVlcnk9JHtlbmNvZGVVUklDb21wb25lbnQocXVlcnkpfWBcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubGltaXQgIT09IHVuZGVmaW5lZCkgdXJsICs9IGAmbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJ1bmU6IChndWlsZElkLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtndWlsZElkfS9wcnVuZT9gXG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGF5cykgdXJsICs9IGBkYXlzPSR7b3B0aW9ucy5kYXlzfWBcbiAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy5pbmNsdWRlUm9sZXMpKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICAgIHVybCArPSBgJmluY2x1ZGVfcm9sZXM9JHtvcHRpb25zLmluY2x1ZGVSb2xlcy5qb2luKCcsJyl9YFxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaW5jbHVkZVJvbGVzKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICAgIHVybCArPSBgJmluY2x1ZGVfcm9sZXM9JHtvcHRpb25zLmluY2x1ZGVSb2xlc31gXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIG1mYTogKGd1aWxkSWQpID0+IGAvZ3VpbGRzLyR7Z3VpbGRJZH0vbWZhYCxcbiAgICAgICAgcHJldmlldzogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9wcmV2aWV3YFxuICAgICAgICB9LFxuICAgICAgICBwcnVuZTogKGd1aWxkSWQsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtndWlsZElkfS9wcnVuZT9gXG5cbiAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGF5cykgdXJsICs9IGBkYXlzPSR7b3B0aW9ucy5kYXlzfWBcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMuaW5jbHVkZVJvbGVzKSkge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIHVybCArPSBgJmluY2x1ZGVfcm9sZXM9JHtvcHRpb25zLmluY2x1ZGVSb2xlcy5qb2luKCcsJyl9YFxuICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmluY2x1ZGVSb2xlcykge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIHVybCArPSBgJmluY2x1ZGVfcm9sZXM9JHtvcHRpb25zLmluY2x1ZGVSb2xlc31gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICB9LFxuICAgICAgICByb2xlczoge1xuICAgICAgICAgIG9uZTogKGd1aWxkSWQsIHJvbGVJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vcm9sZXMvJHtyb2xlSWR9YFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vcm9sZXNgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZW1iZXI6IChndWlsZElkLCBtZW1iZXJJZCwgcm9sZUlkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9tZW1iZXJzLyR7bWVtYmVySWR9L3JvbGVzLyR7cm9sZUlkfWBcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzdGlja2VyczogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9zdGlja2Vyc2BcbiAgICAgICAgfSxcbiAgICAgICAgc3RpY2tlcjogKGd1aWxkSWQsIHN0aWNrZXJJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L3N0aWNrZXJzLyR7c3RpY2tlcklkfWBcbiAgICAgICAgfSxcbiAgICAgICAgdm9pY2U6IChndWlsZElkLCB1c2VySWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS92b2ljZS1zdGF0ZXMvJHt1c2VySWQgPz8gJ0BtZSd9YFxuICAgICAgICB9LFxuICAgICAgICB0ZW1wbGF0ZXM6IHtcbiAgICAgICAgICBjb2RlOiAoY29kZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzL3RlbXBsYXRlcy8ke2NvZGV9YFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZ3VpbGQ6IChndWlsZElkLCBjb2RlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS90ZW1wbGF0ZXMvJHtjb2RlfWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFsbDogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L3RlbXBsYXRlc2BcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB2YW5pdHk6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vdmFuaXR5LXVybGBcbiAgICAgICAgfSxcbiAgICAgICAgcmVnaW9uczogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9yZWdpb25zYFxuICAgICAgICB9LFxuICAgICAgICB3ZWJob29rczogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS93ZWJob29rc2BcbiAgICAgICAgfSxcbiAgICAgICAgd2VsY29tZTogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS93ZWxjb21lLXNjcmVlbmBcbiAgICAgICAgfSxcbiAgICAgICAgd2lkZ2V0OiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L3dpZGdldGBcbiAgICAgICAgfSxcbiAgICAgICAgd2lkZ2V0SnNvbjogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS93aWRnZXQuanNvbmBcbiAgICAgICAgfSxcbiAgICAgIH0sXG5cbiAgICAgIHN0aWNrZXI6IChzdGlja2VySWQ6IEJpZ1N0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gYC9zdGlja2Vycy8ke3N0aWNrZXJJZH1gXG4gICAgICB9LFxuXG4gICAgICByZWdpb25zOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiAnL3ZvaWNlL3JlZ2lvbnMnXG4gICAgICB9LFxuXG4gICAgICAvLyBJbnRlcmFjdGlvbiBFbmRwb2ludHNcbiAgICAgIGludGVyYWN0aW9uczoge1xuICAgICAgICBjb21tYW5kczoge1xuICAgICAgICAgIC8vIEFwcGxpY2F0aW9uIEVuZHBvaW50c1xuICAgICAgICAgIGNvbW1hbmRzOiAoYXBwbGljYXRpb25JZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvYXBwbGljYXRpb25zLyR7YXBwbGljYXRpb25JZH0vY29tbWFuZHNgXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGd1aWxkczoge1xuICAgICAgICAgICAgYWxsKGFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGAvYXBwbGljYXRpb25zLyR7YXBwbGljYXRpb25JZH0vZ3VpbGRzLyR7Z3VpbGRJZH0vY29tbWFuZHNgXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBvbmUoYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkLCB3aXRoTG9jYWxpemF0aW9ucykge1xuICAgICAgICAgICAgICBsZXQgdXJsID0gYC9hcHBsaWNhdGlvbnMvJHthcHBsaWNhdGlvbklkfS9ndWlsZHMvJHtndWlsZElkfS9jb21tYW5kcy8ke2NvbW1hbmRJZH0/YFxuXG4gICAgICAgICAgICAgIGlmICh3aXRoTG9jYWxpemF0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdXJsICs9IGB3aXRoX2xvY2FsaXphdGlvbnM9JHt3aXRoTG9jYWxpemF0aW9ucy50b1N0cmluZygpfWBcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwZXJtaXNzaW9uczogKGFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2FwcGxpY2F0aW9ucy8ke2FwcGxpY2F0aW9uSWR9L2d1aWxkcy8ke2d1aWxkSWR9L2NvbW1hbmRzL3Blcm1pc3Npb25zYFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGVybWlzc2lvbjogKGFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvYXBwbGljYXRpb25zLyR7YXBwbGljYXRpb25JZH0vZ3VpbGRzLyR7Z3VpbGRJZH0vY29tbWFuZHMvJHtjb21tYW5kSWR9L3Blcm1pc3Npb25zYFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tbWFuZDogKGFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCwgd2l0aExvY2FsaXphdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGxldCB1cmwgPSBgL2FwcGxpY2F0aW9ucy8ke2FwcGxpY2F0aW9uSWR9L2NvbW1hbmRzLyR7Y29tbWFuZElkfT9gXG5cbiAgICAgICAgICAgIGlmICh3aXRoTG9jYWxpemF0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHVybCArPSBgd2l0aExvY2FsaXphdGlvbnM9JHt3aXRoTG9jYWxpemF0aW9ucy50b1N0cmluZygpfWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVzcG9uc2VzOiB7XG4gICAgICAgICAgLy8gSW50ZXJhY3Rpb24gRW5kcG9pbnRzXG4gICAgICAgICAgY2FsbGJhY2s6IChpbnRlcmFjdGlvbklkLCB0b2tlbikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvaW50ZXJhY3Rpb25zLyR7aW50ZXJhY3Rpb25JZH0vJHt0b2tlbn0vY2FsbGJhY2tgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvcmlnaW5hbDogKGludGVyYWN0aW9uSWQsIHRva2VuKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC93ZWJob29rcy8ke2ludGVyYWN0aW9uSWR9LyR7dG9rZW59L21lc3NhZ2VzL0BvcmlnaW5hbGBcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lc3NhZ2U6IChhcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC93ZWJob29rcy8ke2FwcGxpY2F0aW9uSWR9LyR7dG9rZW59L21lc3NhZ2VzLyR7bWVzc2FnZUlkfWBcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgICAgLy8gVXNlciBlbmRwb2ludHNcbiAgICAgIHVzZXIodXNlcklkKSB7XG4gICAgICAgIHJldHVybiBgL3VzZXJzLyR7dXNlcklkfWBcbiAgICAgIH0sXG5cbiAgICAgIHVzZXJCb3QoKSB7XG4gICAgICAgIHJldHVybiAnL3VzZXJzL0BtZSdcbiAgICAgIH0sXG5cbiAgICAgIG9hdXRoMkFwcGxpY2F0aW9uKCkge1xuICAgICAgICByZXR1cm4gJ29hdXRoMi9hcHBsaWNhdGlvbnMvQG1lJ1xuICAgICAgfSxcblxuICAgICAgZ2F0ZXdheUJvdCgpIHtcbiAgICAgICAgcmV0dXJuICcvZ2F0ZXdheS9ib3QnXG4gICAgICB9LFxuXG4gICAgICBuaXRyb1N0aWNrZXJQYWNrcygpIHtcbiAgICAgICAgcmV0dXJuICcvc3RpY2tlci1wYWNrcydcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIGNoZWNrUmF0ZUxpbWl0cyh1cmwpIHtcbiAgICAgIGNvbnN0IHJhdGVsaW1pdGVkID0gcmVzdC5yYXRlTGltaXRlZFBhdGhzLmdldCh1cmwpXG4gICAgICBjb25zdCBnbG9iYWwgPSByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZ2V0KCdnbG9iYWwnKVxuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKVxuXG4gICAgICBpZiAocmF0ZWxpbWl0ZWQgJiYgbm93IDwgcmF0ZWxpbWl0ZWQucmVzZXRUaW1lc3RhbXApIHtcbiAgICAgICAgcmV0dXJuIHJhdGVsaW1pdGVkLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iYWwgJiYgbm93IDwgZ2xvYmFsLnJlc2V0VGltZXN0YW1wKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWwucmVzZXRUaW1lc3RhbXAgLSBub3dcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGNoYW5nZVRvRGlzY29yZEZvcm1hdChvYmo6IGFueSk6IGFueSB7XG4gICAgICBpZiAob2JqID09PSBudWxsKSByZXR1cm4gbnVsbFxuXG4gICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICAgIHJldHVybiBvYmoubWFwKChpdGVtKSA9PiByZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChpdGVtKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld09iajogYW55ID0ge31cblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgICAgICAgLy8gS2V5cyB0aGF0IGRvbnQgcmVxdWlyZSBzbmFrZSBjYXNpbmdcbiAgICAgICAgICBpZiAoWydwZXJtaXNzaW9ucycsICdhbGxvdycsICdkZW55J10uaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgbmV3T2JqW2tleV0gPSBjYWxjdWxhdGVCaXRzKG9ialtrZXldKVxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoa2V5ID09PSAnZGVmYXVsdE1lbWJlclBlcm1pc3Npb25zJykge1xuICAgICAgICAgICAgbmV3T2JqLmRlZmF1bHRfbWVtYmVyX3Blcm1pc3Npb25zID0gY2FsY3VsYXRlQml0cyhvYmpba2V5XSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXdPYmpbY2FtZWxUb1NuYWtlQ2FzZShrZXkpXSA9IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9ialtrZXldKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ld09ialxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2JpZ2ludCcpIHJldHVybiBvYmoudG9TdHJpbmcoKVxuXG4gICAgICByZXR1cm4gb2JqXG4gICAgfSxcblxuICAgIGNyZWF0ZVJlcXVlc3Qob3B0aW9ucykge1xuICAgICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICAgJ3VzZXItYWdlbnQnOiBgRGlzY29yZEJvdCAoaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvcmRlbm8vZGlzY29yZGVubywgdiR7dmVyc2lvbn0pYCxcbiAgICAgIH1cblxuICAgICAgaWYgKCFvcHRpb25zLnVuYXV0aG9yaXplZCkgaGVhZGVycy5hdXRob3JpemF0aW9uID0gYEJvdCAke3Jlc3QudG9rZW59YFxuXG4gICAgICAvLyBTT01FVElNRVMgU1BFQ0lBTCBIRUFERVJTIChFLkcuIENVU1RPTSBBVVRIT1JJWkFUSU9OKSBORUVEIFRPIEJFIFVTRURcbiAgICAgIGlmIChvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgICAgaGVhZGVyc1trZXkudG9Mb3dlckNhc2UoKV0gPSBvcHRpb25zLmhlYWRlcnNba2V5XVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEdFVCBNRVRIT0RTIFNIT1VMRCBOT1QgSEFWRSBBIEJPRFlcbiAgICAgIGlmIChvcHRpb25zLm1ldGhvZCA9PT0gJ0dFVCcpIHtcbiAgICAgICAgb3B0aW9ucy5ib2R5ID0gdW5kZWZpbmVkXG4gICAgICB9XG5cbiAgICAgIC8vIElGIEEgUkVBU09OIElTIFBST1ZJREVEIEVOQ09ERSBJVCBJTiBIRUFERVJTXG4gICAgICBpZiAob3B0aW9ucy5ib2R5Py5yZWFzb24pIHtcbiAgICAgICAgaGVhZGVyc1snWC1BdWRpdC1Mb2ctUmVhc29uJ10gPSBlbmNvZGVVUklDb21wb25lbnQob3B0aW9ucy5ib2R5LnJlYXNvbiBhcyBzdHJpbmcpXG4gICAgICAgIG9wdGlvbnMuYm9keS5yZWFzb24gPSB1bmRlZmluZWRcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuYm9keSkge1xuICAgICAgICBjb25zdCB7IGZpbGUgfSA9IG9wdGlvbnMuYm9keVxuICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgIGNvbnN0IGZpbGVzID0gZmluZEZpbGVzKGZpbGUpXG4gICAgICAgICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG5cbiAgICAgICAgICAvLyBXSEVOIENSRUFUSU5HIEEgU1RJQ0tFUiwgRElTQ09SRCBXQU5UUyBGT1JNIERBVEEgT05MWVxuICAgICAgICAgIGlmIChvcHRpb25zLnVybD8uZW5kc1dpdGgoJy9zdGlja2VycycpICYmIG9wdGlvbnMubWV0aG9kID09PSAnUE9TVCcpIHtcbiAgICAgICAgICAgIGZvcm0uYXBwZW5kKCdmaWxlJywgZmlsZXNbMF0uYmxvYiwgZmlsZXNbMF0ubmFtZSlcbiAgICAgICAgICAgIGZvcm0uYXBwZW5kKCduYW1lJywgb3B0aW9ucy5ib2R5Lm5hbWUgYXMgc3RyaW5nKVxuICAgICAgICAgICAgZm9ybS5hcHBlbmQoJ2Rlc2NyaXB0aW9uJywgb3B0aW9ucy5ib2R5LmRlc2NyaXB0aW9uIGFzIHN0cmluZylcbiAgICAgICAgICAgIGZvcm0uYXBwZW5kKCd0YWdzJywgb3B0aW9ucy5ib2R5LnRhZ3MgYXMgc3RyaW5nKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGZvcm0uYXBwZW5kKGBmaWxlJHtpfWAsIGZpbGVzW2ldLmJsb2IsIGZpbGVzW2ldLm5hbWUpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWxlKSBvcHRpb25zLmJvZHkuZmlsZSA9IHVuZGVmaW5lZFxuICAgICAgICAgICAgZm9ybS5hcHBlbmQoJ3BheWxvYWRfanNvbicsIEpTT04uc3RyaW5naWZ5KHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9wdGlvbnMuYm9keSkpKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG9wdGlvbnMuYm9keS5maWxlID0gZm9ybVxuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuYm9keSAmJiAhWydHRVQnLCAnREVMRVRFJ10uaW5jbHVkZXMob3B0aW9ucy5tZXRob2QpKSB7XG4gICAgICAgICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBib2R5OiAob3B0aW9ucy5ib2R5Py5maWxlID8/IEpTT04uc3RyaW5naWZ5KHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9wdGlvbnMuYm9keSkpKSBhcyBGb3JtRGF0YSB8IHN0cmluZyxcbiAgICAgICAgbWV0aG9kOiBvcHRpb25zLm1ldGhvZCxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKSB7XG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpXG5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5lbnRyaWVzKCkpIHtcbiAgICAgICAgLy8gICByZXN0LmRlYnVnKFxuICAgICAgICAvLyBgW1JFU1QgLSBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRoc10gUnVubmluZyBmb3Igb2YgbG9vcC4gJHtcbiAgICAgICAgLy8gICB2YWx1ZS5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgICAvLyB9YFxuICAgICAgICAvLyAgIClcbiAgICAgICAgLy8gSWYgdGhlIHRpbWUgaGFzIG5vdCByZWFjaGVkIGNhbmNlbFxuICAgICAgICBpZiAodmFsdWUucmVzZXRUaW1lc3RhbXAgPiBub3cpIGNvbnRpbnVlXG5cbiAgICAgICAgLy8gUmF0ZSBsaW1pdCBpcyBvdmVyLCBkZWxldGUgdGhlIHJhdGUgbGltaXRlclxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZGVsZXRlKGtleSlcbiAgICAgICAgLy8gSWYgaXQgd2FzIGdsb2JhbCwgYWxzbyBtYXJrIHRoZSBnbG9iYWwgdmFsdWUgYXMgZmFsc2VcbiAgICAgICAgaWYgKGtleSA9PT0gJ2dsb2JhbCcpIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IGZhbHNlXG4gICAgICB9XG5cbiAgICAgIC8vIEFMTCBQQVRIUyBBUkUgQ0xFQVJFRCBDQU4gQ0FOQ0VMIE9VVCFcbiAgICAgIGlmIChyZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2l6ZSA9PT0gMCkge1xuICAgICAgICByZXN0LnByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMgPSB0cnVlXG4gICAgICAgIC8vIFJFQ0hFQ0sgSU4gMSBTRUNPTkRcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgLy8gcmVzdC5kZWJ1ZygnW1JFU1QgLSBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRoc10gUnVubmluZyBzZXRUaW1lb3V0LicpXG4gICAgICAgICAgcmVzdC5wcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpXG4gICAgICAgIH0sIDEwMDApXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKiBQcm9jZXNzZXMgdGhlIHJhdGUgbGltaXQgaGVhZGVycyBhbmQgZGV0ZXJtaW5lcyBpZiBpdCBuZWVkcyB0byBiZSByYXRlIGxpbWl0ZWQgYW5kIHJldHVybnMgdGhlIGJ1Y2tldCBpZCBpZiBhdmFpbGFibGUgKi9cbiAgICBwcm9jZXNzSGVhZGVycyh1cmwsIGhlYWRlcnMpIHtcbiAgICAgIGxldCByYXRlTGltaXRlZCA9IGZhbHNlXG5cbiAgICAgIC8vIEdFVCBBTEwgTkVDRVNTQVJZIEhFQURFUlNcbiAgICAgIGNvbnN0IHJlbWFpbmluZyA9IGhlYWRlcnMuZ2V0KCd4LXJhdGVsaW1pdC1yZW1haW5pbmcnKVxuICAgICAgY29uc3QgcmV0cnlBZnRlciA9IGhlYWRlcnMuZ2V0KCd4LXJhdGVsaW1pdC1yZXNldC1hZnRlcicpXG4gICAgICBjb25zdCByZXNldCA9IERhdGUubm93KCkgKyBOdW1iZXIocmV0cnlBZnRlcikgKiAxMDAwXG4gICAgICBjb25zdCBnbG9iYWwgPSBoZWFkZXJzLmdldCgneC1yYXRlbGltaXQtZ2xvYmFsJylcbiAgICAgIC8vIHVuZGVmaW5lZCBvdmVycmlkZSBudWxsIG5lZWRlZCBmb3IgdHlwaW5nc1xuICAgICAgY29uc3QgYnVja2V0SWQgPSBoZWFkZXJzLmdldCgneC1yYXRlbGltaXQtYnVja2V0JykgPz8gdW5kZWZpbmVkXG4gICAgICBjb25zdCBsaW1pdCA9IGhlYWRlcnMuZ2V0KCd4LXJhdGVsaW1pdC1saW1pdCcpXG5cbiAgICAgIHJlc3QucXVldWVzLmdldCh1cmwpPy5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KHtcbiAgICAgICAgcmVtYWluaW5nOiByZW1haW5pbmcgPyBOdW1iZXIocmVtYWluaW5nKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgaW50ZXJ2YWw6IHJldHJ5QWZ0ZXIgPyBOdW1iZXIocmV0cnlBZnRlcikgKiAxMDAwIDogdW5kZWZpbmVkLFxuICAgICAgICBtYXg6IGxpbWl0ID8gTnVtYmVyKGxpbWl0KSA6IHVuZGVmaW5lZCxcbiAgICAgIH0pXG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBSQVRFIExJTUlULCBNQVJLIElUIEFTIFJBVEUgTElNSVRFRFxuICAgICAgaWYgKHJlbWFpbmluZyA9PT0gJzAnKSB7XG4gICAgICAgIHJhdGVMaW1pdGVkID0gdHJ1ZVxuXG4gICAgICAgIC8vIFNBVkUgVEhFIFVSTCBBUyBMSU1JVEVELCBJTVBPUlRBTlQgRk9SIE5FVyBSRVFVRVNUUyBCWSBVU0VSIFdJVEhPVVQgQlVDS0VUXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQodXJsLCB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiByZXNldCxcbiAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgfSlcblxuICAgICAgICAvLyBTQVZFIFRIRSBCVUNLRVQgQVMgTElNSVRFRCBTSU5DRSBESUZGRVJFTlQgVVJMUyBNQVkgU0hBUkUgQSBCVUNLRVRcbiAgICAgICAgaWYgKGJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChidWNrZXRJZCwge1xuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IHJlc2V0LFxuICAgICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJRiBUSEVSRSBJUyBOTyBSRU1BSU5JTkcgR0xPQkFMIExJTUlULCBNQVJLIElUIFJBVEUgTElNSVRFRCBHTE9CQUxMWVxuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICBjb25zdCByZXRyeUFmdGVyID0gaGVhZGVycy5nZXQoJ3JldHJ5LWFmdGVyJylcbiAgICAgICAgY29uc3QgZ2xvYmFsUmVzZXQgPSBEYXRlLm5vdygpICsgTnVtYmVyKHJldHJ5QWZ0ZXIpICogMTAwMFxuICAgICAgICAvLyAgIHJlc3QuZGVidWcoXG4gICAgICAgIC8vIGBbUkVTVCA9IEdsb2JhbGx5IFJhdGUgTGltaXRlZF0gVVJMOiAke3VybH0gfCBHbG9iYWwgUmVzdDogJHtnbG9iYWxSZXNldH1gXG4gICAgICAgIC8vICAgKVxuICAgICAgICByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSB0cnVlXG4gICAgICAgIHJhdGVMaW1pdGVkID0gdHJ1ZVxuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IGZhbHNlXG4gICAgICAgIH0sIGdsb2JhbFJlc2V0KVxuXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoJ2dsb2JhbCcsIHtcbiAgICAgICAgICB1cmw6ICdnbG9iYWwnLFxuICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiBnbG9iYWxSZXNldCxcbiAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGJ1Y2tldElkLCB7XG4gICAgICAgICAgICB1cmw6ICdnbG9iYWwnLFxuICAgICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IGdsb2JhbFJlc2V0LFxuICAgICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmF0ZUxpbWl0ZWQgJiYgIXJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMpIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmF0ZUxpbWl0ZWQgPyBidWNrZXRJZCA6IHVuZGVmaW5lZFxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kUmVxdWVzdChvcHRpb25zKSB7XG4gICAgICBjb25zdCB1cmwgPSBvcHRpb25zLnVybC5zdGFydHNXaXRoKCdodHRwczovLycpID8gb3B0aW9ucy51cmwgOiBgJHtyZXN0LmJhc2VVcmx9L3Yke3Jlc3QudmVyc2lvbn0ke29wdGlvbnMudXJsfWBcbiAgICAgIGNvbnN0IHBheWxvYWQgPSByZXN0LmNyZWF0ZVJlcXVlc3QoeyBtZXRob2Q6IG9wdGlvbnMubWV0aG9kLCB1cmw6IG9wdGlvbnMudXJsLCBib2R5OiBvcHRpb25zLmJvZHksIC4uLm9wdGlvbnMub3B0aW9ucyB9KVxuXG4gICAgICBsb2dnZXIuZGVidWcoYHNlbmRpbmcgcmVxdWVzdCB0byAke3VybH1gLCAnd2l0aCBwYXlsb2FkOicsIHsgLi4ucGF5bG9hZCwgaGVhZGVyczogeyAuLi5wYXlsb2FkLmhlYWRlcnMsIGF1dGhvcml6YXRpb246ICdCb3QgdG9rZW5oZXJlJyB9IH0pXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwgcGF5bG9hZClcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgcmVxdWVzdCBmZXRjaGVkIGZyb20gJHt1cmx9IHdpdGggc3RhdHVzICR7cmVzcG9uc2Uuc3RhdHVzfSAmICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKVxuXG4gICAgICAvLyBTZXQgdGhlIGJ1Y2tldCBpZCBpZiBpdCB3YXMgYXZhaWxhYmxlIG9uIHRoZSBoZWFkZXJzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IHJlc3QucHJvY2Vzc0hlYWRlcnMocmVzdC5zaW1wbGlmeVVybChvcHRpb25zLnVybCwgb3B0aW9ucy5tZXRob2QpLCByZXNwb25zZS5oZWFkZXJzKVxuICAgICAgaWYgKGJ1Y2tldElkKSBvcHRpb25zLmJ1Y2tldElkID0gYnVja2V0SWRcblxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA8IDIwMCB8fCByZXNwb25zZS5zdGF0dXMgPj0gNDAwKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgUmVxdWVzdCB0byAke3VybH0gZmFpbGVkLmApXG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDI5KSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSB3YXMgcmF0ZWxpbWl0ZWQuYClcbiAgICAgICAgICAvLyBUb28gbWFueSBhdHRlbXB0cywgZ2V0IHJpZCBvZiByZXF1ZXN0IGZyb20gcXVldWUuXG4gICAgICAgICAgaWYgKG9wdGlvbnMucmV0cnlDb3VudCsrID49IHJlc3QubWF4UmV0cnlDb3VudCkge1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSBleGNlZWRlZCB0aGUgbWF4aW11bSBhbGxvd2VkIHJldHJpZXMuYCwgJ3dpdGggcGF5bG9hZDonLCBwYXlsb2FkKVxuICAgICAgICAgICAgLy8gcmVzdC5kZWJ1ZyhgW1JFU1QgLSBSZXRyaWVzTWF4ZWRdICR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucyl9YClcbiAgICAgICAgICAgIC8vIFJlbW92ZSBpdGVtIGZyb20gcXVldWUgdG8gcHJldmVudCByZXRyeVxuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMucmVqZWN0KHtcbiAgICAgICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgICAgZXJyb3I6ICdUaGUgb3B0aW9ucyB3YXMgcmF0ZSBsaW1pdGVkIGFuZCBpdCBtYXhlZCBvdXQgdGhlIHJldHJpZXMgbGltaXQuJyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gUmF0ZSBsaW1pdGVkLCBhZGQgYmFjayB0byBxdWV1ZVxuICAgICAgICAgIHJlc3QuaW52YWxpZEJ1Y2tldC5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KHJlc3BvbnNlLnN0YXR1cywgcmVzcG9uc2UuaGVhZGVycy5nZXQoJ1gtUmF0ZUxpbWl0LVNjb3BlJykgPT09ICdzaGFyZWQnKVxuXG4gICAgICAgICAgY29uc3QgcmVzZXRBZnRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCd4LXJhdGVsaW1pdC1yZXNldC1hZnRlcicpXG4gICAgICAgICAgaWYgKHJlc2V0QWZ0ZXIpIGF3YWl0IGRlbGF5KE51bWJlcihyZXNldEFmdGVyKSAqIDEwMDApXG4gICAgICAgICAgLy8gcHJvY2VzcyB0aGUgcmVzcG9uc2UgdG8gcHJldmVudCBtZW0gbGVha1xuICAgICAgICAgIGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuXG4gICAgICAgICAgcmV0dXJuIGF3YWl0IG9wdGlvbnMucmV0cnlSZXF1ZXN0Py4ob3B0aW9ucylcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcHRpb25zLnJlamVjdCh7IG9rOiBmYWxzZSwgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsIGJvZHk6IEpTT04uc3RyaW5naWZ5KGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXMyMDQgPSByZXNwb25zZS5zdGF0dXMgPT09IDIwNFxuICAgICAgY29uc3QganNvbiA9IGlzMjA0ID8gdW5kZWZpbmVkIDogYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gICAgICAvLyBEaXNjb3JkIHNvbWV0aW1lcyBzZW5kcyBubyByZXNwb25zZSB3aXRoIDIwNCBjb2RlXG4gICAgICByZXR1cm4gb3B0aW9ucy5yZXNvbHZlKHsgb2s6IHRydWUsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBib2R5OiBKU09OLnN0cmluZ2lmeShqc29uKSB9KVxuICAgIH0sXG5cbiAgICAvLyBDcmVkaXRzOiBnaXRodWIuY29tL2FiYWxhYmFoYWhhL2VyaXMgbGliL3Jlc3QvUmVxdWVzdEhhbmRsZXIuanMjTDM5N1xuICAgIC8vIE1vZGlmaWVkIGZvciBvdXIgdXNlLWNhc2VcbiAgICBzaW1wbGlmeVVybCh1cmwsIG1ldGhvZCkge1xuICAgICAgbGV0IHJvdXRlID0gdXJsXG4gICAgICAgIC5yZXBsYWNlKC9cXC8oW2Etei1dKylcXC8oPzpbMC05XXsxNywxOX0pL2csIGZ1bmN0aW9uIChtYXRjaCwgcDogc3RyaW5nKSB7XG4gICAgICAgICAgcmV0dXJuIFsnY2hhbm5lbHMnLCAnZ3VpbGRzJ10uaW5jbHVkZXMocCkgPyBtYXRjaCA6IGAvJHtwfS94YFxuICAgICAgICB9KVxuICAgICAgICAucmVwbGFjZSgvXFwvcmVhY3Rpb25zXFwvW14vXSsvZywgJy9yZWFjdGlvbnMveCcpXG5cbiAgICAgIC8vIEdFTkVSQUwgL3JlYWN0aW9ucyBhbmQgL3JlYWN0aW9ucy9lbW9qaS9AbWUgc2hhcmUgdGhlIGJ1Y2tldHNcbiAgICAgIGlmIChyb3V0ZS5pbmNsdWRlcygnL3JlYWN0aW9ucycpKSB7XG4gICAgICAgIHJvdXRlID0gcm91dGUuc3Vic3RyaW5nKDAsIHJvdXRlLmluZGV4T2YoJy9yZWFjdGlvbnMnKSArICcvcmVhY3Rpb25zJy5sZW5ndGgpXG4gICAgICB9XG5cbiAgICAgIC8vIERlbGV0ZSBNZXNzYWdlIGVuZHBvaW50IGhhcyBpdHMgb3duIHJhdGUgbGltaXRcbiAgICAgIGlmIChtZXRob2QgPT09ICdERUxFVEUnICYmIHJvdXRlLmVuZHNXaXRoKCcvbWVzc2FnZXMveCcpKSB7XG4gICAgICAgIHJvdXRlID0gbWV0aG9kICsgcm91dGVcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJvdXRlXG4gICAgfSxcblxuICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3Q6IFNlbmRSZXF1ZXN0T3B0aW9ucykge1xuICAgICAgY29uc3Qgcm91dGUgPSByZXF1ZXN0LnVybC5zdWJzdHJpbmcocmVxdWVzdC51cmwuaW5kZXhPZignYXBpLycpKVxuICAgICAgY29uc3QgcGFydHMgPSByb3V0ZS5zcGxpdCgnLycpXG4gICAgICAvLyBSZW1vdmUgdGhlIGFwaS9cbiAgICAgIHBhcnRzLnNoaWZ0KClcbiAgICAgIC8vIFJlbW92ZXMgdGhlIC92Iy9cbiAgICAgIGlmIChwYXJ0c1swXT8uc3RhcnRzV2l0aCgndicpKSBwYXJ0cy5zaGlmdCgpXG4gICAgICAvLyBTZXQgdGhlIGZ1bGwgdXJsIHRvIGRpc2NvcmQgYXBpIGluIGNhc2UgaXQgd2FzIHJlY2lldmVkIGluIGEgcHJveHkgcmVzdFxuICAgICAgcmVxdWVzdC51cmwgPSBgJHtyZXN0LmJhc2VVcmx9L3Yke3Jlc3QudmVyc2lvbn0vJHtwYXJ0cy5qb2luKCcvJyl9YFxuXG4gICAgICBjb25zdCB1cmwgPSByZXN0LnNpbXBsaWZ5VXJsKHJlcXVlc3QudXJsLCByZXF1ZXN0Lm1ldGhvZClcbiAgICAgIGNvbnN0IHF1ZXVlID0gcmVzdC5xdWV1ZXMuZ2V0KHVybClcblxuICAgICAgaWYgKHF1ZXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcXVldWUubWFrZVJlcXVlc3QocmVxdWVzdClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENSRUFURVMgQSBORVcgUVVFVUVcbiAgICAgICAgY29uc3QgYnVja2V0UXVldWUgPSBuZXcgUXVldWUocmVzdCwgeyB1cmwsIGRlbGV0ZVF1ZXVlRGVsYXk6IHJlc3QuZGVsZXRlUXVldWVEZWxheSB9KVxuXG4gICAgICAgIC8vIEFkZCByZXF1ZXN0IHRvIHF1ZXVlXG4gICAgICAgIGJ1Y2tldFF1ZXVlLm1ha2VSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICAgIC8vIFNhdmUgcXVldWVcbiAgICAgICAgcmVzdC5xdWV1ZXMuc2V0KHVybCwgYnVja2V0UXVldWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG1ha2VSZXF1ZXN0KG1ldGhvZCwgdXJsLCBib2R5LCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBwYXlsb2FkOiBTZW5kUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICBib2R5LFxuICAgICAgICAgIHJldHJ5Q291bnQ6IDAsXG4gICAgICAgICAgcmV0cnlSZXF1ZXN0OiBhc3luYyBmdW5jdGlvbiAob3B0aW9uczogU2VuZFJlcXVlc3RPcHRpb25zKSB7XG4gICAgICAgICAgICByZXN0LnByb2Nlc3NSZXF1ZXN0KHBheWxvYWQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvbHZlOiAoZGF0YSkgPT4gcmVzb2x2ZShkYXRhLnN0YXR1cyAhPT0gMjA0ID8gSlNPTi5wYXJzZShkYXRhLmJvZHkgPz8gJ3t9JykgOiB1bmRlZmluZWQpLFxuICAgICAgICAgIHJlamVjdCxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICB9XG5cbiAgICAgICAgcmVzdC5wcm9jZXNzUmVxdWVzdChwYXlsb2FkKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0PFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdHRVQnLCB1cmwpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBwb3N0PFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIGJvZHk/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUE9TVCcsIHVybCwgYm9keSkpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZSh1cmw6IHN0cmluZywgYm9keT86IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdERUxFVEUnLCB1cmwsIGJvZHkpKVxuICAgIH0sXG5cbiAgICBhc3luYyBwYXRjaDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nLCBib2R5PzogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BBVENIJywgdXJsLCBib2R5KSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgcHV0PFQgPSB2b2lkPih1cmw6IHN0cmluZywgYm9keT86IFJlY29yZDxzdHJpbmcsIGFueT4sIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBib2R5LCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5ib3QoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb25zKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbnMsIG9yZGVyZWQgPSBmYWxzZSkge1xuICAgICAgaWYgKCFvcmRlcmVkKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHJlYWN0aW9ucy5tYXAoYXN5bmMgKHJlYWN0aW9uKSA9PiBhd2FpdCByZXN0LmFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikpKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCByZWFjdGlvbiBvZiByZWFjdGlvbnMpIHtcbiAgICAgICAgYXdhaXQgcmVzdC5hZGRSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVBdXRvbW9kUnVsZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVDaGFubmVsKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlRW1vamkoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaXMoZ3VpbGRJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCBjb21tYW5kKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZChvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmFsbCgpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kLCBndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksIGNvbW1hbmQpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkRnJvbVRlbXBsYXRlKHRlbXBsYXRlQ29kZSwgb3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMuaWNvbikge1xuICAgICAgICBvcHRpb25zLmljb24gPSBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zLmljb24pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmNvZGUodGVtcGxhdGVDb2RlKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRTdGlja2VyKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VycyhndWlsZElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRUZW1wbGF0ZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUZvcnVtVGhyZWFkKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZm9ydW0oY2hhbm5lbElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlSW52aXRlKGNoYW5uZWxJZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRJbnZpdGU+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmludml0ZXMoY2hhbm5lbElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlUm9sZShndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCksIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlU2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnRzKGd1aWxkSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVTdGFnZUluc3RhbmNlKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlcygpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVXZWJob29rKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMud2ViaG9va3MoY2hhbm5lbElkKSwge1xuICAgICAgICBuYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICAgIGF2YXRhcjogb3B0aW9ucy5hdmF0YXIgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zLmF2YXRhcikgOiB1bmRlZmluZWQsXG4gICAgICAgIHJlYXNvbjogb3B0aW9ucy5yZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQ2hhbm5lbChjaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoY2hhbm5lbElkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLm92ZXJ3cml0ZShjaGFubmVsSWQsIG92ZXJ3cml0ZUlkKSwgcmVhc29uID8geyByZWFzb24gfSA6IHVuZGVmaW5lZClcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlRW1vamkoZ3VpbGRJZCwgaWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBpZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZ3VpbGQoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSwgcmVhc29uID8geyByZWFzb24gfSA6IHVuZGVmaW5lZClcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRUZW1wbGF0ZShndWlsZElkLCB0ZW1wbGF0ZUNvZGUpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmd1aWxkKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUludGVncmF0aW9uKGd1aWxkSWQsIGludGVncmF0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuaW50ZWdyYXRpb24oZ3VpbGRJZCwgaW50ZWdyYXRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUludml0ZShpbnZpdGVDb2RlLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlKGludml0ZUNvZGUpLCByZWFzb24gPyB7IHJlYXNvbiB9IDogdW5kZWZpbmVkKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZXMoY2hhbm5lbElkLCBtZXNzYWdlSWRzLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuY2hhbm5lbHMuYnVsayhjaGFubmVsSWQpLCB7XG4gICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlSWRzLnNsaWNlKDAsIDEwMCkubWFwKChpZCkgPT4gaWQudG9TdHJpbmcoKSksXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU93blJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuYm90KGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVJlYWN0aW9uc0FsbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5hbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNFbW9qaShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmVtb2ppKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVJvbGUoZ3VpbGRJZCwgcm9sZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlU3RhZ2VJbnN0YW5jZShjaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCksIHJlYXNvbiA/IHsgcmVhc29uIH0gOiB1bmRlZmluZWQpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVVzZXJSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgdXNlcklkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMudXNlcihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2sod2ViaG9va0lkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyhndWlsZElkLCBjb21tYW5kSWQsIGJlYXJlclRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb24ocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLFxuICAgICAgICB7XG4gICAgICAgICAgcGVybWlzc2lvbnM6IG9wdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBoZWFkZXJzOiB7IGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtiZWFyZXJUb2tlbn1gIH0sXG4gICAgICAgIH0sXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEJvdFByb2ZpbGUob3B0aW9ucykge1xuICAgICAgY29uc3QgYXZhdGFyID0gb3B0aW9ucz8uYm90QXZhdGFyVVJMID8gYXdhaXQgdXJsVG9CYXNlNjQob3B0aW9ucz8uYm90QXZhdGFyVVJMKSA6IG9wdGlvbnM/LmJvdEF2YXRhclVSTFxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkVXNlcj4ocmVzdC5yb3V0ZXMudXNlckJvdCgpLCB7XG4gICAgICAgIHVzZXJuYW1lOiBvcHRpb25zLnVzZXJuYW1lPy50cmltKCksXG4gICAgICAgIGF2YXRhcixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoY2hhbm5lbElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLm92ZXJ3cml0ZShjaGFubmVsSWQsIG9wdGlvbnMuaWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBvc2l0aW9ucyhndWlsZElkLCBjaGFubmVsUG9zaXRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMuY2hhbm5lbHMoZ3VpbGRJZCksIGNoYW5uZWxQb3NpdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRFbW9qaShndWlsZElkLCBpZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgaWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRNZmFMZXZlbChndWlsZElkOiBCaWdTdHJpbmcsIG1mYUxldmVsOiBNZmFMZXZlbHMsIHJlYXNvbj86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5ndWlsZHMubWZhKGd1aWxkSWQpLCB7IGxldmVsOiBtZmFMZXZlbCwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkVGVtcGxhdGUoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlOiBzdHJpbmcsIG9wdGlvbnM6IE1vZGlmeUd1aWxkVGVtcGxhdGUpOiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRUZW1wbGF0ZT4+IHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5ndWlsZChndWlsZElkLCB0ZW1wbGF0ZUNvZGUpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE9yaWdpbmFsV2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm9yaWdpbmFsKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpLCB7XG4gICAgICAgIHR5cGU6IEludGVyYWN0aW9uUmVzcG9uc2VUeXBlcy5VcGRhdGVNZXNzYWdlLFxuICAgICAgICBkYXRhOiBvcHRpb25zLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE93blZvaWNlU3RhdGUoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQpLCB7XG4gICAgICAgIGNoYW5uZWxfaWQ6IG9wdGlvbnMuY2hhbm5lbElkLFxuICAgICAgICBzdXBwcmVzczogb3B0aW9ucy5zdXBwcmVzcyxcbiAgICAgICAgcmVxdWVzdF90b19zcGVha190aW1lc3RhbXA6IG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXBcbiAgICAgICAgICA/IG5ldyBEYXRlKG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXApLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICA6IG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXAsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0U2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Um9sZShndWlsZElkLCByb2xlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRSb2xlPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMub25lKGd1aWxkSWQsIHJvbGVJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRSb2xlUG9zaXRpb25zKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRSb2xlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgZGF0YSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCksIHsgdG9waWM6IGRhdGEudG9waWMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFVzZXJWb2ljZVN0YXRlKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkLCBvcHRpb25zLnVzZXJJZCksIHtcbiAgICAgICAgY2hhbm5lbF9pZDogb3B0aW9ucy5jaGFubmVsSWQsXG4gICAgICAgIHN1cHByZXNzOiBvcHRpb25zLnN1cHByZXNzLFxuICAgICAgICB1c2VyX2lkOiBvcHRpb25zLnVzZXJJZCxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rKHdlYmhvb2tJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucyksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2VsY29tZVNjcmVlbihndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2VsY29tZVNjcmVlbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlbGNvbWUoZ3VpbGRJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXaWRnZXRTZXR0aW5ncyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndpZGdldChndWlsZElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZXhlY3V0ZVdlYmhvb2sod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZm9sbG93QW5ub3VuY2VtZW50KHNvdXJjZUNoYW5uZWxJZCwgdGFyZ2V0Q2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRGb2xsb3dlZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmZvbGxvdyhzb3VyY2VDaGFubmVsSWQpLCB7XG4gICAgICAgIHdlYmhvb2tfY2hhbm5lbF9pZDogdGFyZ2V0Q2hhbm5lbElkLFxuICAgICAgfSBhcyBEaXNjb3JkRm9sbG93QW5ub3VuY2VtZW50Q2hhbm5lbClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QWN0aXZlVGhyZWFkcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBY3RpdmVUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmFjdGl2ZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbihndWlsZElkLCBjb21tYW5kSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbihyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnNbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb25zKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uSW5mbygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb24+KHJlc3Qucm91dGVzLm9hdXRoMkFwcGxpY2F0aW9uKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1ZGl0TG9nKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXVkaXRMb2c+KHJlc3Qucm91dGVzLmd1aWxkcy5hdWRpdGxvZ3MoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXV0b21vZFJ1bGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdmFpbGFibGVWb2ljZVJlZ2lvbnMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlUmVnaW9uW10+KHJlc3Qucm91dGVzLnJlZ2lvbnMoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QmFuKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRCYW4+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbihndWlsZElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRCYW5zKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQmFuW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbnMoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWwoaWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChpZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxJbnZpdGVzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5pbnZpdGVzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ2hhbm5lbFtdPihyZXN0LnJvdXRlcy5ndWlsZHMuY2hhbm5lbHMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxXZWJob29rcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9va1tdPihyZXN0LnJvdXRlcy5jaGFubmVscy53ZWJob29rcyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXREbUNoYW5uZWwodXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5kbSgpLCB7XG4gICAgICAgIHJlY2lwaWVudF9pZDogdXNlcklkLnRvU3RyaW5nKCksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbW9qaShndWlsZElkLCBlbW9qaUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgZW1vamlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVtb2ppcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppW10+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMubWVzc2FnZShyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHYXRld2F5Qm90KCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHZXRHYXRld2F5Qm90PihyZXN0LnJvdXRlcy5nYXRld2F5Qm90KCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGQoZ3VpbGRJZCwgb3B0aW9ucyA9IHsgY291bnRzOiB0cnVlIH0pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkLCBvcHRpb25zLmNvdW50cykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkUHJldmlldyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkUHJldmlldz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnByZXZpZXcoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkVGVtcGxhdGUodGVtcGxhdGVDb2RlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmNvZGUodGVtcGxhdGVDb2RlKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRUZW1wbGF0ZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUZW1wbGF0ZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRXZWJob29rcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2tbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlYmhvb2tzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnRlZ3JhdGlvbnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnRlZ3JhdGlvbltdPihyZXN0LnJvdXRlcy5ndWlsZHMuaW50ZWdyYXRpb25zKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnZpdGUoaW52aXRlQ29kZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZShpbnZpdGVDb2RlLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW52aXRlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGVzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZXNzYWdlcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlcyhjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXROaXRyb1N0aWNrZXJQYWNrcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlclBhY2tbXT4ocmVzdC5yb3V0ZXMubml0cm9TdGlja2VyUGFja3MoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFBpbm5lZE1lc3NhZ2VzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnBpbnMoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJpdmF0ZUFyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5wcml2YXRlKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFByaXZhdGVKb2luZWRBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuam9pbmVkKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFBydW5lQ291bnQoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRQcnVuZWRDb3VudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnBydW5lKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQdWJsaWNBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMucHVibGljKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJvbGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUm9sZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnM/LndpdGhVc2VyQ291bnQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudHMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTY2hlZHVsZWRFdmVudFtdPihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50cyhndWlsZElkLCBvcHRpb25zPy53aXRoVXNlckNvdW50KSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnRVc2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8QXJyYXk8eyB1c2VyOiBEaXNjb3JkVXNlcjsgbWVtYmVyPzogRGlzY29yZE1lbWJlciB9Pj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy51c2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2Vzc2lvbkluZm8oKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRHYXRld2F5Qm90KClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlcihzdGlja2VySWQ6IEJpZ1N0cmluZykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5zdGlja2VyKHN0aWNrZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTdGlja2VycyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXJzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGhyZWFkTWVtYmVyPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaHJlYWRNZW1iZXJzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUaHJlYWRNZW1iZXJbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZW1iZXJzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJlYWN0aW9ucyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcltdPihyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyKGlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLnVzZXIoaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRWYW5pdHlVcmwoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWYW5pdHlVcmw+KHJlc3Qucm91dGVzLmd1aWxkcy52YW5pdHkoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFZvaWNlUmVnaW9ucyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlUmVnaW9uW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yZWdpb25zKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rKHdlYmhvb2tJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2VsY29tZVNjcmVlbihndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlbGNvbWVTY3JlZW4+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWxjb21lKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXaWRnZXQoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFdpZGdldD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndpZGdldEpzb24oZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdpZGdldFNldHRpbmdzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndpZGdldChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgam9pblRocmVhZChjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlR3VpbGQoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5sZWF2ZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGVhdmVUaHJlYWQoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZShjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBwdWJsaXNoTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY3Jvc3Nwb3N0KGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlUm9sZShndWlsZElkLCB1c2VySWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm1lbWJlcihndWlsZElkLCB1c2VySWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMudXNlcihjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHJlc3Quc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgIHVybDogcmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayhyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSxcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICAgIHJldHJ5Q291bnQ6IDAsXG4gICAgICAgICAgcmV0cnlSZXF1ZXN0OiBhc3luYyBmdW5jdGlvbiAob3B0aW9uczogU2VuZFJlcXVlc3RPcHRpb25zKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBzaG91bGQgY2hhbmdlIHRvIHJlcHJvY2VzcyBxdWV1ZSBpdGVtXG4gICAgICAgICAgICBhd2FpdCByZXN0LnNlbmRSZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvbHZlOiAoZGF0YSkgPT4gcmVzb2x2ZShkYXRhLnN0YXR1cyAhPT0gMjA0ID8gSlNPTi5wYXJzZShkYXRhLmJvZHkgPz8gJ3t9JykgOiB1bmRlZmluZWQpLFxuICAgICAgICAgIHJlamVjdCxcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRJbnRlcmFjdGlvblJlc3BvbnNlKGludGVyYWN0aW9uSWQsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICByZXN0LnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICB1cmw6IHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMuY2FsbGJhY2soaW50ZXJhY3Rpb25JZCwgdG9rZW4pLFxuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgICAgcmV0cnlDb3VudDogMCxcbiAgICAgICAgICByZXRyeVJlcXVlc3Q6IGFzeW5jIGZ1bmN0aW9uIChvcHRpb25zOiBTZW5kUmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IHNob3VsZCBjaGFuZ2UgdG8gcmVwcm9jZXNzIHF1ZXVlIGl0ZW1cbiAgICAgICAgICAgIGF3YWl0IHJlc3Quc2VuZFJlcXVlc3Qob3B0aW9ucylcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc29sdmU6IChkYXRhKSA9PiByZXNvbHZlKGRhdGEuc3RhdHVzICE9PSAyMDQgPyBKU09OLnBhcnNlKGRhdGEuYm9keSA/PyAne30nKSA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgcmVqZWN0LFxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZE1lc3NhZ2UoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlcyhjaGFubmVsSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBzdGFydFRocmVhZFdpdGhNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hbGwoY2hhbm5lbElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgc3luY0d1aWxkVGVtcGxhdGUoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDx2b2lkPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEJvdE1lbWJlcihndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVtYmVyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5ib3QoZ3VpbGRJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVtYmVycyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGtpY2tNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBwaW5NZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5waW4oY2hhbm5lbElkLCBtZXNzYWdlSWQpLCByZWFzb24gPyB7IHJlYXNvbiB9IDogdW5kZWZpbmVkKVxuICAgIH0sXG5cbiAgICBhc3luYyBwcnVuZU1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDx7IHBydW5lZDogbnVtYmVyIHwgbnVsbCB9PihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5wcnVuZShndWlsZElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VhcmNoTWVtYmVycyhndWlsZElkLCBxdWVyeSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5zZWFyY2goZ3VpbGRJZCwgcXVlcnksIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyB1bmJhbk1lbWJlcihndWlsZElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdW5waW5NZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5waW4oY2hhbm5lbElkLCBtZXNzYWdlSWQpLCByZWFzb24gPyB7IHJlYXNvbiB9IDogdW5kZWZpbmVkKVxuICAgIH0sXG5cbiAgICBhc3luYyB0cmlnZ2VyVHlwaW5nSW5kaWNhdG9yKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy50eXBpbmcoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyhjb21tYW5kcykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCksIGNvbW1hbmRzKVxuICAgIH0sXG5cbiAgICBhc3luYyB1cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMoZ3VpbGRJZCwgY29tbWFuZHMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksIGNvbW1hbmRzKVxuICAgIH0sXG4gIH1cblxuICByZXR1cm4gcmVzdFxufVxuIl0sIm5hbWVzIjpbIkludGVyYWN0aW9uUmVzcG9uc2VUeXBlcyIsImNhbGN1bGF0ZUJpdHMiLCJjYW1lbGl6ZSIsImNhbWVsVG9TbmFrZUNhc2UiLCJkZWxheSIsImZpbmRGaWxlcyIsImdldEJvdElkRnJvbVRva2VuIiwiaXNHZXRNZXNzYWdlc0FmdGVyIiwiaXNHZXRNZXNzYWdlc0Fyb3VuZCIsImlzR2V0TWVzc2FnZXNCZWZvcmUiLCJpc0dldE1lc3NhZ2VzTGltaXQiLCJsb2dnZXIiLCJwcm9jZXNzUmVhY3Rpb25TdHJpbmciLCJ1cmxUb0Jhc2U2NCIsImNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0IiwiUXVldWUiLCJjcmVhdGVSZXN0TWFuYWdlciIsIm9wdGlvbnMiLCJ0b2tlbiIsIkVycm9yIiwicmVzdCIsImFwcGxpY2F0aW9uSWQiLCJCaWdJbnQiLCJ2ZXJzaW9uIiwiYmFzZVVybCIsIm1heFJldHJ5Q291bnQiLCJJbmZpbml0eSIsImdsb2JhbGx5UmF0ZUxpbWl0ZWQiLCJwcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyIsImRlbGV0ZVF1ZXVlRGVsYXkiLCJxdWV1ZXMiLCJNYXAiLCJyYXRlTGltaXRlZFBhdGhzIiwiaW52YWxpZEJ1Y2tldCIsInJvdXRlcyIsIndlYmhvb2tzIiwiaWQiLCJ3ZWJob29rSWQiLCJtZXNzYWdlIiwibWVzc2FnZUlkIiwidXJsIiwidGhyZWFkSWQiLCJvcmlnaW5hbCIsIndlYmhvb2siLCJ3YWl0IiwidW5kZWZpbmVkIiwidG9TdHJpbmciLCJzZXNzaW9uSW5mbyIsImdhdGV3YXlCb3QiLCJjaGFubmVscyIsImJ1bGsiLCJjaGFubmVsSWQiLCJkbSIsInBpbiIsInBpbnMiLCJyZWFjdGlvbnMiLCJib3QiLCJlbW9qaSIsImVuY29kZVVSSUNvbXBvbmVudCIsInVzZXIiLCJ1c2VySWQiLCJhbGwiLCJhZnRlciIsImxpbWl0IiwiY2hhbm5lbCIsImZvbGxvdyIsImZvcnVtIiwiaW52aXRlcyIsIm1lc3NhZ2VzIiwiYmVmb3JlIiwiYXJvdW5kIiwib3ZlcndyaXRlIiwib3ZlcndyaXRlSWQiLCJjcm9zc3Bvc3QiLCJzdGFnZXMiLCJzdGFnZSIsInRocmVhZHMiLCJhY3RpdmUiLCJndWlsZElkIiwibWVtYmVycyIsIm1lIiwiYXJjaGl2ZWQiLCJwdWJsaWMiLCJEYXRlIiwidG9JU09TdHJpbmciLCJwcml2YXRlIiwiam9pbmVkIiwidHlwaW5nIiwiZ3VpbGRzIiwiYXVkaXRsb2dzIiwiYWN0aW9uVHlwZSIsImF1dG9tb2QiLCJydWxlIiwicnVsZUlkIiwicnVsZXMiLCJlbW9qaUlkIiwiZW1vamlzIiwiZXZlbnRzIiwid2l0aFVzZXJDb3VudCIsImV2ZW50IiwiZXZlbnRJZCIsInVzZXJzIiwid2l0aE1lbWJlciIsImd1aWxkIiwid2l0aENvdW50cyIsImludGVncmF0aW9uIiwiaW50ZWdyYXRpb25JZCIsImludGVncmF0aW9ucyIsImludml0ZSIsImludml0ZUNvZGUiLCJ3aXRoRXhwaXJhdGlvbiIsInNjaGVkdWxlZEV2ZW50SWQiLCJsZWF2ZSIsImJhbiIsImJhbnMiLCJtZW1iZXIiLCJzZWFyY2giLCJxdWVyeSIsInBydW5lIiwiZGF5cyIsIkFycmF5IiwiaXNBcnJheSIsImluY2x1ZGVSb2xlcyIsImpvaW4iLCJtZmEiLCJwcmV2aWV3Iiwicm9sZXMiLCJvbmUiLCJyb2xlSWQiLCJtZW1iZXJJZCIsInN0aWNrZXJzIiwic3RpY2tlciIsInN0aWNrZXJJZCIsInZvaWNlIiwidGVtcGxhdGVzIiwiY29kZSIsInZhbml0eSIsInJlZ2lvbnMiLCJ3ZWxjb21lIiwid2lkZ2V0Iiwid2lkZ2V0SnNvbiIsImludGVyYWN0aW9ucyIsImNvbW1hbmRzIiwiY29tbWFuZElkIiwid2l0aExvY2FsaXphdGlvbnMiLCJwZXJtaXNzaW9ucyIsInBlcm1pc3Npb24iLCJjb21tYW5kIiwicmVzcG9uc2VzIiwiY2FsbGJhY2siLCJpbnRlcmFjdGlvbklkIiwidXNlckJvdCIsIm9hdXRoMkFwcGxpY2F0aW9uIiwibml0cm9TdGlja2VyUGFja3MiLCJjaGVja1JhdGVMaW1pdHMiLCJyYXRlbGltaXRlZCIsImdldCIsImdsb2JhbCIsIm5vdyIsInJlc2V0VGltZXN0YW1wIiwiY2hhbmdlVG9EaXNjb3JkRm9ybWF0Iiwib2JqIiwibWFwIiwiaXRlbSIsIm5ld09iaiIsImtleSIsIk9iamVjdCIsImtleXMiLCJpbmNsdWRlcyIsImRlZmF1bHRfbWVtYmVyX3Blcm1pc3Npb25zIiwiY3JlYXRlUmVxdWVzdCIsImhlYWRlcnMiLCJ1bmF1dGhvcml6ZWQiLCJhdXRob3JpemF0aW9uIiwidG9Mb3dlckNhc2UiLCJtZXRob2QiLCJib2R5IiwicmVhc29uIiwiZmlsZSIsImZpbGVzIiwiZm9ybSIsIkZvcm1EYXRhIiwiZW5kc1dpdGgiLCJhcHBlbmQiLCJibG9iIiwibmFtZSIsImRlc2NyaXB0aW9uIiwidGFncyIsImkiLCJsZW5ndGgiLCJKU09OIiwic3RyaW5naWZ5IiwicHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMiLCJ2YWx1ZSIsImVudHJpZXMiLCJkZWxldGUiLCJzaXplIiwic2V0VGltZW91dCIsInByb2Nlc3NIZWFkZXJzIiwicmF0ZUxpbWl0ZWQiLCJyZW1haW5pbmciLCJyZXRyeUFmdGVyIiwicmVzZXQiLCJOdW1iZXIiLCJidWNrZXRJZCIsImhhbmRsZUNvbXBsZXRlZFJlcXVlc3QiLCJpbnRlcnZhbCIsIm1heCIsInNldCIsImdsb2JhbFJlc2V0Iiwic2VuZFJlcXVlc3QiLCJzdGFydHNXaXRoIiwicGF5bG9hZCIsImRlYnVnIiwicmVzcG9uc2UiLCJmZXRjaCIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJzaW1wbGlmeVVybCIsInJldHJ5Q291bnQiLCJyZWplY3QiLCJvayIsImVycm9yIiwicmVzZXRBZnRlciIsImpzb24iLCJyZXRyeVJlcXVlc3QiLCJpczIwNCIsInJlc29sdmUiLCJyb3V0ZSIsInJlcGxhY2UiLCJtYXRjaCIsInAiLCJzdWJzdHJpbmciLCJpbmRleE9mIiwicHJvY2Vzc1JlcXVlc3QiLCJyZXF1ZXN0IiwicGFydHMiLCJzcGxpdCIsInNoaWZ0IiwicXVldWUiLCJtYWtlUmVxdWVzdCIsImJ1Y2tldFF1ZXVlIiwiUHJvbWlzZSIsImRhdGEiLCJwYXJzZSIsInBvc3QiLCJwYXRjaCIsInB1dCIsImFkZFJlYWN0aW9uIiwicmVhY3Rpb24iLCJhZGRSZWFjdGlvbnMiLCJvcmRlcmVkIiwiYWRkUm9sZSIsImFkZFRocmVhZE1lbWJlciIsImNyZWF0ZUF1dG9tb2RSdWxlIiwiY3JlYXRlQ2hhbm5lbCIsImNyZWF0ZUVtb2ppIiwiY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiY3JlYXRlR3VpbGQiLCJjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImNyZWF0ZUd1aWxkRnJvbVRlbXBsYXRlIiwidGVtcGxhdGVDb2RlIiwiaWNvbiIsImNyZWF0ZUd1aWxkU3RpY2tlciIsImNyZWF0ZUd1aWxkVGVtcGxhdGUiLCJjcmVhdGVGb3J1bVRocmVhZCIsImNyZWF0ZUludml0ZSIsImNyZWF0ZVJvbGUiLCJjcmVhdGVTY2hlZHVsZWRFdmVudCIsImNyZWF0ZVN0YWdlSW5zdGFuY2UiLCJjcmVhdGVXZWJob29rIiwiYXZhdGFyIiwiZGVsZXRlQXV0b21vZFJ1bGUiLCJkZWxldGVDaGFubmVsIiwiZGVsZXRlQ2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZSIsImRlbGV0ZUVtb2ppIiwiZGVsZXRlRm9sbG93dXBNZXNzYWdlIiwiZGVsZXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiZGVsZXRlR3VpbGQiLCJkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImRlbGV0ZUd1aWxkU3RpY2tlciIsImRlbGV0ZUd1aWxkVGVtcGxhdGUiLCJkZWxldGVJbnRlZ3JhdGlvbiIsImRlbGV0ZUludml0ZSIsImRlbGV0ZU1lc3NhZ2UiLCJkZWxldGVNZXNzYWdlcyIsIm1lc3NhZ2VJZHMiLCJzbGljZSIsImRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImRlbGV0ZU93blJlYWN0aW9uIiwiZGVsZXRlUmVhY3Rpb25zQWxsIiwiZGVsZXRlUmVhY3Rpb25zRW1vamkiLCJkZWxldGVSb2xlIiwiZGVsZXRlU2NoZWR1bGVkRXZlbnQiLCJkZWxldGVTdGFnZUluc3RhbmNlIiwiZGVsZXRlVXNlclJlYWN0aW9uIiwiZGVsZXRlV2ViaG9vayIsImRlbGV0ZVdlYmhvb2tNZXNzYWdlIiwiZGVsZXRlV2ViaG9va1dpdGhUb2tlbiIsImVkaXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyIsImJlYXJlclRva2VuIiwiZWRpdEF1dG9tb2RSdWxlIiwiZWRpdEJvdFByb2ZpbGUiLCJib3RBdmF0YXJVUkwiLCJ1c2VybmFtZSIsInRyaW0iLCJlZGl0Q2hhbm5lbCIsImVkaXRDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlcyIsImVkaXRDaGFubmVsUG9zaXRpb25zIiwiY2hhbm5lbFBvc2l0aW9ucyIsImVkaXRFbW9qaSIsImVkaXRGb2xsb3d1cE1lc3NhZ2UiLCJlZGl0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkIiwiZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkTWZhTGV2ZWwiLCJtZmFMZXZlbCIsImxldmVsIiwiZWRpdEd1aWxkU3RpY2tlciIsImVkaXRHdWlsZFRlbXBsYXRlIiwiZWRpdE1lc3NhZ2UiLCJlZGl0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiZWRpdE9yaWdpbmFsV2ViaG9va01lc3NhZ2UiLCJ0eXBlIiwiVXBkYXRlTWVzc2FnZSIsImVkaXRPd25Wb2ljZVN0YXRlIiwiY2hhbm5lbF9pZCIsInN1cHByZXNzIiwicmVxdWVzdF90b19zcGVha190aW1lc3RhbXAiLCJyZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCIsImVkaXRTY2hlZHVsZWRFdmVudCIsImVkaXRSb2xlIiwiZWRpdFJvbGVQb3NpdGlvbnMiLCJlZGl0U3RhZ2VJbnN0YW5jZSIsInRvcGljIiwiZWRpdFVzZXJWb2ljZVN0YXRlIiwidXNlcl9pZCIsImVkaXRXZWJob29rIiwiZWRpdFdlYmhvb2tNZXNzYWdlIiwiZWRpdFdlYmhvb2tXaXRoVG9rZW4iLCJlZGl0V2VsY29tZVNjcmVlbiIsImVkaXRXaWRnZXRTZXR0aW5ncyIsImV4ZWN1dGVXZWJob29rIiwiZm9sbG93QW5ub3VuY2VtZW50Iiwic291cmNlQ2hhbm5lbElkIiwidGFyZ2V0Q2hhbm5lbElkIiwid2ViaG9va19jaGFubmVsX2lkIiwiZ2V0QWN0aXZlVGhyZWFkcyIsImdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb24iLCJnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyIsImdldEFwcGxpY2F0aW9uSW5mbyIsImdldEF1ZGl0TG9nIiwiZ2V0QXV0b21vZFJ1bGUiLCJnZXRBdXRvbW9kUnVsZXMiLCJnZXRBdmFpbGFibGVWb2ljZVJlZ2lvbnMiLCJnZXRCYW4iLCJnZXRCYW5zIiwiZ2V0Q2hhbm5lbCIsImdldENoYW5uZWxJbnZpdGVzIiwiZ2V0Q2hhbm5lbHMiLCJnZXRDaGFubmVsV2ViaG9va3MiLCJnZXREbUNoYW5uZWwiLCJyZWNpcGllbnRfaWQiLCJnZXRFbW9qaSIsImdldEVtb2ppcyIsImdldEZvbGxvd3VwTWVzc2FnZSIsImdldEdhdGV3YXlCb3QiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZ2V0R3VpbGQiLCJjb3VudHMiLCJnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyIsImdldEd1aWxkUHJldmlldyIsImdldEd1aWxkVGVtcGxhdGUiLCJnZXRHdWlsZFRlbXBsYXRlcyIsImdldEd1aWxkV2ViaG9va3MiLCJnZXRJbnRlZ3JhdGlvbnMiLCJnZXRJbnZpdGUiLCJnZXRJbnZpdGVzIiwiZ2V0TWVzc2FnZSIsImdldE1lc3NhZ2VzIiwiZ2V0Tml0cm9TdGlja2VyUGFja3MiLCJnZXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UiLCJnZXRQaW5uZWRNZXNzYWdlcyIsImdldFByaXZhdGVBcmNoaXZlZFRocmVhZHMiLCJnZXRQcml2YXRlSm9pbmVkQXJjaGl2ZWRUaHJlYWRzIiwiZ2V0UHJ1bmVDb3VudCIsImdldFB1YmxpY0FyY2hpdmVkVGhyZWFkcyIsImdldFJvbGVzIiwiZ2V0U2NoZWR1bGVkRXZlbnQiLCJnZXRTY2hlZHVsZWRFdmVudHMiLCJnZXRTY2hlZHVsZWRFdmVudFVzZXJzIiwiZ2V0U2Vzc2lvbkluZm8iLCJnZXRTdGFnZUluc3RhbmNlIiwiZ2V0U3RpY2tlciIsImdldEd1aWxkU3RpY2tlciIsImdldEd1aWxkU3RpY2tlcnMiLCJnZXRUaHJlYWRNZW1iZXIiLCJnZXRUaHJlYWRNZW1iZXJzIiwiZ2V0UmVhY3Rpb25zIiwiZ2V0VXNlciIsImdldFZhbml0eVVybCIsImdldFZvaWNlUmVnaW9ucyIsImdldFdlYmhvb2siLCJnZXRXZWJob29rTWVzc2FnZSIsImdldFdlYmhvb2tXaXRoVG9rZW4iLCJnZXRXZWxjb21lU2NyZWVuIiwiZ2V0V2lkZ2V0IiwiZ2V0V2lkZ2V0U2V0dGluZ3MiLCJqb2luVGhyZWFkIiwibGVhdmVHdWlsZCIsImxlYXZlVGhyZWFkIiwicHVibGlzaE1lc3NhZ2UiLCJyZW1vdmVSb2xlIiwicmVtb3ZlVGhyZWFkTWVtYmVyIiwic2VuZEZvbGxvd3VwTWVzc2FnZSIsInNlbmRJbnRlcmFjdGlvblJlc3BvbnNlIiwic2VuZE1lc3NhZ2UiLCJzdGFydFRocmVhZFdpdGhNZXNzYWdlIiwic3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZSIsInN5bmNHdWlsZFRlbXBsYXRlIiwiYmFuTWVtYmVyIiwiZWRpdEJvdE1lbWJlciIsImVkaXRNZW1iZXIiLCJnZXRNZW1iZXIiLCJnZXRNZW1iZXJzIiwia2lja01lbWJlciIsInBpbk1lc3NhZ2UiLCJwcnVuZU1lbWJlcnMiLCJzZWFyY2hNZW1iZXJzIiwidW5iYW5NZW1iZXIiLCJ1bnBpbk1lc3NhZ2UiLCJ0cmlnZ2VyVHlwaW5nSW5kaWNhdG9yIiwidXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyIsInVwc2VydEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyJdLCJtYXBwaW5ncyI6IkFBRUEsT0FBU0EsNEJBQUFBLENBQXdCLEtBQVEsbUJBQW1CLEFBQzVELFFBQ0VDLGlCQUFBQSxDQUFhLENBQ2JDLFlBQUFBLENBQVEsQ0FDUkMsb0JBQUFBLENBQWdCLENBQ2hCQyxTQUFBQSxDQUFLLENBQ0xDLGFBQUFBLENBQVMsQ0FDVEMscUJBQUFBLENB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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@discordeno/rest",
|
|
3
|
-
"version": "19.0.0-next.
|
|
3
|
+
"version": "19.0.0-next.4bb34c9",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"type": "module",
|
|
@@ -24,8 +24,8 @@
|
|
|
24
24
|
"test:test-type": "tsc --project tsconfig.test.json"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@discordeno/types": "19.0.0-next.
|
|
28
|
-
"@discordeno/utils": "19.0.0-next.
|
|
27
|
+
"@discordeno/types": "19.0.0-next.4bb34c9",
|
|
28
|
+
"@discordeno/utils": "19.0.0-next.4bb34c9",
|
|
29
29
|
"dotenv": "^16.0.3"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|